发布

  • [NA] [BE] [SDK] Complete refactor of local runner SDK to be project specific (#5637)

    frostbyte_neo 发布于 2026-03-12 17:54:56 +00:00

    • Complete refactor

    • formatting tweak

    • last formatting

    • [NA] [BE] Fix test compilation errors from merge

    Adapt paginatesCorrectly test to use pairing-based connect flow,
    replace connectViaApiKey with pairAndConnect in CrossUserIsolation
    tests, fix Agent.builder() and listRunners/createJob signatures.

    Co-Authored-By: Claude Opus 4.6 noreply@anthropic.com

    • test failures

    • [NA] [BE] Fix agent registration in ReaperIntegrationTest

    Add agent registration to pairAndConnect helper in
    LocalRunnerReaperIntegrationTest, same fix as other test files.

    Co-Authored-By: Claude Opus 4.6 noreply@anthropic.com

    • [NA] [BE] Fix listRunners pagination and heartbeat status code
    • listRunners with projectId filter now iterates user's scored set in
      reverse order (preserving recency), filters by project membership,
      and counts only valid runners for total
    • heartbeat returns 410 (Gone) instead of 404 when runner not found,
      so Python runner client properly shuts down on eviction/deletion

    Co-Authored-By: Claude Opus 4.6 noreply@anthropic.com

    • [NA] [BE] Address review: heartbeat reads only project_id field, throws if missing
    • Use runnerMap.get() instead of readAllMap() since only project_id is needed
    • Throw IllegalStateException if runner has no project_id (all runners are project-scoped)

    Co-Authored-By: Claude Opus 4.6 noreply@anthropic.com

    • [NA] [BE] Address PR review feedback from BorisTkachenko
    • Combine addRunnerToWorkspace + addRunnerToProject into registerRunnerInSets
    • Move pairing code validation to @NotBlank on LocalRunnerConnectRequest
    • Require projectId for listRunners, remove cross-project listing path
    • Paginate IDs first, only load runners for the requested page
    • Extract isRunnerOwnedByUser to deduplicate validateRunnerOwnership/heartbeat
    • Use runnerMap.get() instead of readAllMap() in heartbeat
    • Throw if runner has no project_id (all runners are project-scoped)
    • Use typed PairingCodePayload with @JsonNaming for serialization

    Co-Authored-By: Claude Opus 4.6 noreply@anthropic.com

    • [NA] [SDK] Address PR review feedback from petrotiurin
    • Use Opik().rest_client instead of manual httpx/OpikApi setup in connect.py and activate.py
    • Type register_agents payload using Fern-generated Agent and Param models
    • Error out if server does not return project_name in connect.py

    Co-Authored-By: Claude Opus 4.6 noreply@anthropic.com

    • fixing presetting traces

    • more fixes

    • more fixes

    • more fixes


    Co-authored-by: Claude Opus 4.6 noreply@anthropic.com

    下载附件