@stigmer/runner 3.15.3-dev.20260914121148 → 3.16.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -1
- package/dist/.build-fingerprint +1 -1
- package/dist/__test-utils__/approval-contract/types.d.ts +1 -1
- package/dist/__test-utils__/hermetic-activity.d.ts +61 -7
- package/dist/__test-utils__/hermetic-activity.js +100 -9
- package/dist/__test-utils__/hermetic-activity.js.map +1 -1
- package/dist/__test-utils__/model-registry-fixture.d.ts +22 -3
- package/dist/__test-utils__/model-registry-fixture.js +22 -7
- package/dist/__test-utils__/model-registry-fixture.js.map +1 -1
- package/dist/activities/execute-cursor/__test-utils__/contract-subject.d.ts +2 -2
- package/dist/activities/execute-cursor/__test-utils__/contract-subject.js +2 -2
- package/dist/activities/execute-cursor/__test-utils__/fold.d.ts +61 -0
- package/dist/activities/execute-cursor/__test-utils__/fold.js +94 -0
- package/dist/activities/execute-cursor/__test-utils__/fold.js.map +1 -0
- package/dist/activities/execute-cursor/__test-utils__/gateway-substrate.js +1 -1
- package/dist/activities/execute-cursor/__test-utils__/gateway-substrate.js.map +1 -1
- package/dist/activities/execute-cursor/__test-utils__/hermetic-cursor.d.ts +47 -12
- package/dist/activities/execute-cursor/__test-utils__/hermetic-cursor.js +41 -10
- package/dist/activities/execute-cursor/__test-utils__/hermetic-cursor.js.map +1 -1
- package/dist/activities/execute-cursor/__test-utils__/scripted-agent.d.ts +15 -6
- package/dist/activities/execute-cursor/__test-utils__/scripted-agent.js +17 -4
- package/dist/activities/execute-cursor/__test-utils__/scripted-agent.js.map +1 -1
- package/dist/activities/execute-cursor/adapter.d.ts +4 -4
- package/dist/activities/execute-cursor/adapter.js +4 -4
- package/dist/activities/execute-cursor/approval-policy.d.ts +10 -10
- package/dist/activities/execute-cursor/approval-policy.js +12 -23
- package/dist/activities/execute-cursor/approval-policy.js.map +1 -1
- package/dist/activities/execute-cursor/approval-state.d.ts +35 -1
- package/dist/activities/execute-cursor/approval-state.js +65 -0
- package/dist/activities/execute-cursor/approval-state.js.map +1 -1
- package/dist/activities/execute-cursor/{message-translator.d.ts → boundary-rows.d.ts} +45 -341
- package/dist/activities/execute-cursor/boundary-rows.js +1018 -0
- package/dist/activities/execute-cursor/boundary-rows.js.map +1 -0
- package/dist/activities/execute-cursor/cursor-capabilities.d.ts +1 -1
- package/dist/activities/execute-cursor/cursor-capabilities.js +1 -1
- package/dist/activities/execute-cursor/cursor-event-recorder.d.ts +33 -14
- package/dist/activities/execute-cursor/cursor-event-recorder.js +43 -21
- package/dist/activities/execute-cursor/cursor-event-recorder.js.map +1 -1
- package/dist/activities/execute-cursor/prompt-builder.d.ts +3 -3
- package/dist/activities/execute-cursor/prompt-builder.js +4 -4
- package/dist/activities/execute-cursor/prompt-builder.js.map +1 -1
- package/dist/activities/execute-cursor/service-tier.js +1 -2
- package/dist/activities/execute-cursor/service-tier.js.map +1 -1
- package/dist/activities/execute-cursor/sub-agent-steps.d.ts +79 -0
- package/dist/activities/execute-cursor/sub-agent-steps.js +180 -0
- package/dist/activities/execute-cursor/sub-agent-steps.js.map +1 -0
- package/dist/activities/execute-cursor/tool-result.d.ts +49 -0
- package/dist/activities/execute-cursor/tool-result.js +130 -0
- package/dist/activities/execute-cursor/tool-result.js.map +1 -0
- package/dist/activities/execute-cursor/translator.d.ts +178 -0
- package/dist/activities/execute-cursor/translator.js +485 -0
- package/dist/activities/execute-cursor/translator.js.map +1 -0
- package/dist/activities/execute-cursor/turn-boundary.d.ts +15 -5
- package/dist/activities/execute-cursor/turn-boundary.js +10 -14
- package/dist/activities/execute-cursor/turn-boundary.js.map +1 -1
- package/dist/activities/execute-cursor/turn-settle.d.ts +11 -7
- package/dist/activities/execute-cursor/turn-settle.js +47 -34
- package/dist/activities/execute-cursor/turn-settle.js.map +1 -1
- package/dist/activities/execute-cursor/turn-setup.d.ts +2 -2
- package/dist/activities/execute-cursor/turn-setup.js +5 -5
- package/dist/activities/execute-cursor/turn-setup.js.map +1 -1
- package/dist/activities/execute-cursor/turn-stream.d.ts +23 -14
- package/dist/activities/execute-cursor/turn-stream.js +41 -28
- package/dist/activities/execute-cursor/turn-stream.js.map +1 -1
- package/dist/activities/execute-cursor/turn.d.ts +4 -4
- package/dist/activities/execute-cursor/turn.js +5 -5
- package/dist/activities/execute-cursor/usage-pricing.d.ts +2 -2
- package/dist/activities/execute-cursor/usage-pricing.js +2 -2
- package/dist/activities/execute-deep-agent/__test-utils__/contract-subject.d.ts +2 -2
- package/dist/activities/execute-deep-agent/__test-utils__/contract-subject.js +2 -2
- package/dist/activities/execute-deep-agent/__test-utils__/hermetic-deep-agent.d.ts +16 -11
- package/dist/activities/execute-deep-agent/__test-utils__/hermetic-deep-agent.js +22 -10
- package/dist/activities/execute-deep-agent/__test-utils__/hermetic-deep-agent.js.map +1 -1
- package/dist/activities/execute-deep-agent/__test-utils__/hitl-script.js +1 -1
- package/dist/activities/execute-deep-agent/__test-utils__/hitl-script.js.map +1 -1
- package/dist/activities/execute-deep-agent/__test-utils__/scripted-model-module.d.ts +2 -3
- package/dist/activities/execute-deep-agent/__test-utils__/scripted-model-module.js +2 -3
- package/dist/activities/execute-deep-agent/__test-utils__/scripted-model-module.js.map +1 -1
- package/dist/activities/execute-deep-agent/__test-utils__/scripted-model.d.ts +12 -3
- package/dist/activities/execute-deep-agent/__test-utils__/scripted-model.js +18 -4
- package/dist/activities/execute-deep-agent/__test-utils__/scripted-model.js.map +1 -1
- package/dist/activities/execute-deep-agent/__test-utils__/v3-event-fixtures.d.ts +10 -1
- package/dist/activities/execute-deep-agent/__test-utils__/v3-event-fixtures.js +24 -11
- package/dist/activities/execute-deep-agent/__test-utils__/v3-event-fixtures.js.map +1 -1
- package/dist/activities/execute-deep-agent/adapter.d.ts +1 -1
- package/dist/activities/execute-deep-agent/adapter.js +1 -1
- package/dist/activities/execute-deep-agent/approval-file-change.d.ts +19 -19
- package/dist/activities/execute-deep-agent/approval-file-change.js +16 -15
- package/dist/activities/execute-deep-agent/approval-file-change.js.map +1 -1
- package/dist/activities/execute-deep-agent/deep-agent-capabilities.d.ts +2 -2
- package/dist/activities/execute-deep-agent/deep-agent-capabilities.js +2 -2
- package/dist/activities/execute-deep-agent/hitl.d.ts +2 -2
- package/dist/activities/execute-deep-agent/hitl.js +2 -2
- package/dist/activities/execute-deep-agent/inline-publisher.d.ts +13 -3
- package/dist/activities/execute-deep-agent/inline-publisher.js +3 -3
- package/dist/activities/execute-deep-agent/inline-publisher.js.map +1 -1
- package/dist/activities/execute-deep-agent/prompt-builder.d.ts +3 -3
- package/dist/activities/execute-deep-agent/prompt-builder.js +6 -7
- package/dist/activities/execute-deep-agent/prompt-builder.js.map +1 -1
- package/dist/activities/execute-deep-agent/streaming-side-effects.d.ts +16 -8
- package/dist/activities/execute-deep-agent/streaming-side-effects.js +20 -33
- package/dist/activities/execute-deep-agent/streaming-side-effects.js.map +1 -1
- package/dist/activities/execute-deep-agent/subagent-transformer.d.ts +3 -3
- package/dist/activities/execute-deep-agent/subagent-transformer.js +1 -1
- package/dist/activities/execute-deep-agent/translator.d.ts +134 -0
- package/dist/activities/execute-deep-agent/translator.js +418 -0
- package/dist/activities/execute-deep-agent/translator.js.map +1 -0
- package/dist/activities/execute-deep-agent/turn-settle.d.ts +13 -7
- package/dist/activities/execute-deep-agent/turn-settle.js +34 -45
- package/dist/activities/execute-deep-agent/turn-settle.js.map +1 -1
- package/dist/activities/execute-deep-agent/turn-setup.d.ts +8 -8
- package/dist/activities/execute-deep-agent/turn-setup.js +7 -7
- package/dist/activities/execute-deep-agent/turn-stream.d.ts +13 -10
- package/dist/activities/execute-deep-agent/turn-stream.js +44 -41
- package/dist/activities/execute-deep-agent/turn-stream.js.map +1 -1
- package/dist/activities/execute-deep-agent/turn.d.ts +3 -3
- package/dist/activities/execute-deep-agent/turn.js +3 -3
- package/dist/activities/generate-session-subject.d.ts +25 -4
- package/dist/activities/generate-session-subject.js +17 -7
- package/dist/activities/generate-session-subject.js.map +1 -1
- package/dist/client/stigmer-client.d.ts +17 -6
- package/dist/client/stigmer-client.js +47 -14
- package/dist/client/stigmer-client.js.map +1 -1
- package/dist/config.d.ts +6 -3
- package/dist/config.js +4 -1
- package/dist/config.js.map +1 -1
- package/dist/harness/approval-decisions.d.ts +1 -1
- package/dist/harness/approval-decisions.js +1 -1
- package/dist/harness/capabilities.d.ts +21 -11
- package/dist/harness/capabilities.js +2 -2
- package/dist/harness/capture.d.ts +4 -4
- package/dist/harness/capture.js +4 -4
- package/dist/harness/persist-chokepoint.d.ts +3 -3
- package/dist/harness/persist-chokepoint.js +3 -3
- package/dist/harness/registry.d.ts +2 -2
- package/dist/harness/registry.js +2 -2
- package/dist/harness/run-turn.d.ts +6 -4
- package/dist/harness/run-turn.js +31 -9
- package/dist/harness/run-turn.js.map +1 -1
- package/dist/harness/stop-controller.d.ts +1 -1
- package/dist/harness/stop-controller.js +1 -1
- package/dist/harness/terminal-table.d.ts +7 -7
- package/dist/harness/terminal-table.js +7 -7
- package/dist/harness/transcript/builder.d.ts +182 -0
- package/dist/harness/transcript/builder.js +693 -0
- package/dist/harness/transcript/builder.js.map +1 -0
- package/dist/harness/transcript/events.d.ts +218 -0
- package/dist/harness/transcript/events.js +50 -0
- package/dist/harness/transcript/events.js.map +1 -0
- package/dist/harness/transcript/state.d.ts +110 -0
- package/dist/harness/transcript/state.js +148 -0
- package/dist/harness/transcript/state.js.map +1 -0
- package/dist/harness/turn-context.d.ts +54 -38
- package/dist/harness/turn-context.js +42 -43
- package/dist/harness/turn-context.js.map +1 -1
- package/dist/harness/types.d.ts +63 -22
- package/dist/harness/types.js +12 -11
- package/dist/harness/types.js.map +1 -1
- package/dist/harness/usage-accumulator.d.ts +2 -2
- package/dist/harness/usage-accumulator.js +2 -2
- package/dist/harness-adapters.d.ts +5 -4
- package/dist/harness-adapters.js +5 -4
- package/dist/harness-adapters.js.map +1 -1
- package/dist/interceptors/run-credential-activity.d.ts +28 -0
- package/dist/interceptors/run-credential-activity.js +56 -0
- package/dist/interceptors/run-credential-activity.js.map +1 -0
- package/dist/middleware/approval-gate.d.ts +6 -0
- package/dist/middleware/approval-gate.js +7 -57
- package/dist/middleware/approval-gate.js.map +1 -1
- package/dist/middleware/cost-advisory.d.ts +3 -3
- package/dist/middleware/cost-advisory.js +3 -3
- package/dist/middleware/index.d.ts +1 -1
- package/dist/middleware/index.js +1 -1
- package/dist/runner-manager.js +10 -4
- package/dist/runner-manager.js.map +1 -1
- package/dist/shared/activity-input.d.ts +9 -0
- package/dist/shared/activity-input.js +17 -0
- package/dist/shared/activity-input.js.map +1 -1
- package/dist/shared/approval-policy.d.ts +53 -0
- package/dist/shared/approval-policy.js +76 -0
- package/dist/shared/approval-policy.js.map +1 -1
- package/dist/shared/args-preview.d.ts +45 -22
- package/dist/shared/args-preview.js +51 -41
- package/dist/shared/args-preview.js.map +1 -1
- package/dist/shared/attachment-resolver.d.ts +4 -4
- package/dist/shared/attachment-resolver.js +4 -4
- package/dist/shared/attachment-zip.d.ts +2 -2
- package/dist/shared/attachment-zip.js +2 -2
- package/dist/shared/channel-attachment.d.ts +8 -5
- package/dist/shared/channel-attachment.js +10 -6
- package/dist/shared/channel-attachment.js.map +1 -1
- package/dist/shared/cost-guard.d.ts +2 -2
- package/dist/shared/cost-guard.js +2 -2
- package/dist/shared/exact-apply.d.ts +1 -1
- package/dist/shared/exact-apply.js +1 -1
- package/dist/shared/execution-context.d.ts +2 -2
- package/dist/shared/execution-context.js +2 -2
- package/dist/shared/extract-structured-output.d.ts +2 -2
- package/dist/shared/extract-structured-output.js +2 -2
- package/dist/shared/filereview/cas-touched.d.ts +2 -2
- package/dist/shared/filereview/cas-touched.js +2 -2
- package/dist/shared/filereview/progress.d.ts +13 -0
- package/dist/shared/filereview/progress.js +13 -0
- package/dist/shared/filereview/progress.js.map +1 -1
- package/dist/shared/heartbeat.d.ts +1 -1
- package/dist/shared/heartbeat.js +1 -1
- package/dist/shared/llm-backend.d.ts +0 -4
- package/dist/shared/llm-backend.js +0 -4
- package/dist/shared/llm-backend.js.map +1 -1
- package/dist/shared/memory-attachment.d.ts +16 -9
- package/dist/shared/memory-attachment.js +18 -10
- package/dist/shared/memory-attachment.js.map +1 -1
- package/dist/shared/model-error.d.ts +1 -2
- package/dist/shared/model-error.js +1 -2
- package/dist/shared/model-error.js.map +1 -1
- package/dist/shared/persist-decision.d.ts +18 -24
- package/dist/shared/persist-decision.js +19 -11
- package/dist/shared/persist-decision.js.map +1 -1
- package/dist/shared/prompt-sections.d.ts +4 -4
- package/dist/shared/prompt-sections.js +4 -4
- package/dist/shared/run-credential-store.d.ts +32 -0
- package/dist/shared/run-credential-store.js +39 -0
- package/dist/shared/run-credential-store.js.map +1 -0
- package/dist/shared/run-credential.d.ts +61 -0
- package/dist/shared/run-credential.js +68 -0
- package/dist/shared/run-credential.js.map +1 -0
- package/dist/shared/skill-resolver.d.ts +3 -3
- package/dist/shared/skill-resolver.js +3 -3
- package/dist/shared/status-offload.d.ts +1 -1
- package/dist/shared/status-offload.js +2 -2
- package/dist/shared/status-offload.js.map +1 -1
- package/dist/shared/streaming-scheduler.d.ts +2 -7
- package/dist/shared/streaming-scheduler.js +6 -14
- package/dist/shared/streaming-scheduler.js.map +1 -1
- package/dist/shared/subagent-rows.d.ts +2 -2
- package/dist/shared/subagent-rows.js +2 -2
- package/dist/shared/synthesized-attachment.d.ts +30 -3
- package/dist/shared/synthesized-attachment.js +26 -0
- package/dist/shared/synthesized-attachment.js.map +1 -1
- package/dist/shared/todos.d.ts +3 -3
- package/dist/shared/todos.js +3 -3
- package/dist/shared/tool-row.d.ts +19 -1
- package/dist/shared/tool-row.js +36 -2
- package/dist/shared/tool-row.js.map +1 -1
- package/dist/shared/worker-shutdown.d.ts +1 -1
- package/dist/shared/worker-shutdown.js +1 -1
- package/dist/shared/workspace/session-provision.d.ts +1 -1
- package/dist/shared/workspace/session-provision.js +1 -1
- package/dist/shared/workspace/sources/empty.d.ts +1 -1
- package/dist/shared/workspace/sources/empty.js +1 -2
- package/dist/shared/workspace/sources/empty.js.map +1 -1
- package/dist/shared/workspace/sources/git.js +4 -4
- package/dist/shared/workspace/sources/git.js.map +1 -1
- package/dist/shared/workspace/sources/local-path.js +6 -6
- package/dist/shared/workspace/sources/local-path.js.map +1 -1
- package/dist/shared/workspace/stigmer-link.d.ts +1 -1
- package/dist/shared/workspace/stigmer-link.js +1 -1
- package/dist/shared/workspace/types.d.ts +2 -5
- package/dist/shared/workspace/types.js +0 -6
- package/dist/shared/workspace/types.js.map +1 -1
- package/dist/shared/workspace/writeback-coordinator.d.ts +17 -4
- package/dist/shared/workspace/writeback-coordinator.js +7 -9
- package/dist/shared/workspace/writeback-coordinator.js.map +1 -1
- package/dist/worker.js +10 -3
- package/dist/worker.js.map +1 -1
- package/dist/workflow-source.d.ts +10 -0
- package/dist/workflow-source.js +12 -0
- package/dist/workflow-source.js.map +1 -1
- package/dist/workflows/execute-from-execution.d.ts +15 -0
- package/dist/workflows/execute-from-execution.js +11 -0
- package/dist/workflows/execute-from-execution.js.map +1 -1
- package/dist/workflows/index.d.ts +5 -3
- package/dist/workflows/index.js +5 -3
- package/dist/workflows/index.js.map +1 -1
- package/dist/workflows/interceptors/run-credential.d.ts +34 -0
- package/dist/workflows/interceptors/run-credential.js +71 -0
- package/dist/workflows/interceptors/run-credential.js.map +1 -0
- package/package.json +4 -4
- package/src/__test-utils__/__tests__/execution-record-barrier.test.ts +70 -0
- package/src/__test-utils__/__tests__/harness-contract-self-check.test.ts +35 -1
- package/src/__test-utils__/approval-contract/contract.ts +1 -1
- package/src/__test-utils__/approval-contract/types.ts +1 -1
- package/src/__test-utils__/harness-boot-order-child.ts +1 -1
- package/src/__test-utils__/harness-contract/contract.ts +8 -8
- package/src/__test-utils__/harness-contract/recording-sink.ts +11 -1
- package/src/__test-utils__/harness-contract/runtime-contract.ts +52 -16
- package/src/__test-utils__/harness-contract/scripted-adapter.ts +47 -43
- package/src/__test-utils__/hermetic-activity.ts +113 -9
- package/src/__test-utils__/model-registry-fixture.ts +31 -7
- package/src/__test-utils__/module-specifiers.ts +32 -3
- package/src/__tests__/harness-boot-order.test.ts +1 -1
- package/src/__tests__/harness-contract.test.ts +1 -1
- package/src/__tests__/run-credential-e2e.test.ts +233 -0
- package/src/__tests__/run-credential-registration.test.ts +80 -0
- package/src/__tests__/runner-manager.test.ts +1 -1
- package/src/activities/__tests__/generate-session-subject-wire.test.ts +119 -0
- package/src/activities/execute-cursor/__test-utils__/__tests__/scripted-double.test.ts +1 -1
- package/src/activities/execute-cursor/__test-utils__/contract-subject.ts +2 -2
- package/src/activities/execute-cursor/__test-utils__/fold.ts +116 -0
- package/src/activities/execute-cursor/__test-utils__/gateway-substrate.ts +1 -1
- package/src/activities/execute-cursor/__test-utils__/hermetic-cursor.ts +67 -17
- package/src/activities/execute-cursor/__test-utils__/scripted-agent.ts +19 -5
- package/src/activities/execute-cursor/__tests__/approval-gate.test.ts +2 -1
- package/src/activities/execute-cursor/__tests__/approval-state.test.ts +14 -21
- package/src/activities/execute-cursor/__tests__/build-prompt.test.ts +3 -3
- package/src/activities/execute-cursor/__tests__/coarse-fingerprint.test.ts +2 -1
- package/src/activities/execute-cursor/__tests__/cursor-event-recorder.test.ts +142 -0
- package/src/activities/execute-cursor/__tests__/cursor-fetch-interceptor-bypass.test.ts +19 -8
- package/src/activities/execute-cursor/__tests__/cursor-sdk-auth-smoke.test.ts +10 -8
- package/src/activities/execute-cursor/__tests__/cursor-transcript-live.test.ts +298 -0
- package/src/activities/execute-cursor/__tests__/deny-gate-exact-apply.test.ts +4 -2
- package/src/activities/execute-cursor/__tests__/fetch-interceptor.test.ts +1 -1
- package/src/activities/execute-cursor/__tests__/hermetic/deny-and-retry.test.ts +1 -1
- package/src/activities/execute-cursor/__tests__/hermetic/file-review-capture.test.ts +1 -1
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/mcp-tool-call.status.json +71 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/sdk-task-note.status.json +73 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/shell-output-delta.error-delta.status.json +78 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/shell-output-delta.output-first.status.json +72 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/shell-output-delta.status.json +72 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/sub-agent-delegation.status.json +109 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/thinking-turn.status.json +78 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/todo-write.status.json +119 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/tool-error.status.json +68 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/tool-only-step.status.json +67 -0
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/unattributed-hook-block.status.json +1 -1
- package/src/activities/execute-cursor/__tests__/hermetic/harness-contract.test.ts +7 -7
- package/src/activities/execute-cursor/__tests__/hermetic/mcp-tool-call.test.ts +146 -0
- package/src/activities/execute-cursor/__tests__/hermetic/pause-vs-shutdown.test.ts +5 -5
- package/src/activities/execute-cursor/__tests__/hermetic/plain-turn.test.ts +2 -1
- package/src/activities/execute-cursor/__tests__/hermetic/run-wait-arms.test.ts +2 -1
- package/src/activities/execute-cursor/__tests__/hermetic/sdk-task-note.test.ts +122 -0
- package/src/activities/execute-cursor/__tests__/hermetic/shell-output-delta.test.ts +276 -0
- package/src/activities/execute-cursor/__tests__/hermetic/stream-self-stop-arms.test.ts +8 -8
- package/src/activities/execute-cursor/__tests__/hermetic/sub-agent-delegation.test.ts +196 -0
- package/src/activities/execute-cursor/__tests__/hermetic/thinking-turn.test.ts +145 -0
- package/src/activities/execute-cursor/__tests__/hermetic/thrown-error-arms.test.ts +1 -1
- package/src/activities/execute-cursor/__tests__/hermetic/todo-write.test.ts +165 -0
- package/src/activities/execute-cursor/__tests__/hermetic/tool-call.test.ts +3 -3
- package/src/activities/execute-cursor/__tests__/hermetic/tool-error.test.ts +138 -0
- package/src/activities/execute-cursor/__tests__/hermetic/tool-only-step.test.ts +130 -0
- package/src/activities/execute-cursor/__tests__/hermetic/unattributed-hook-block.test.ts +13 -1
- package/src/activities/execute-cursor/__tests__/hermetic/workspace-lock-timeout.test.ts +2 -2
- package/src/activities/execute-cursor/__tests__/hitl-ledger.test.ts +43 -60
- package/src/activities/execute-cursor/__tests__/hitl-resume-history.test.ts +23 -28
- package/src/activities/execute-cursor/__tests__/hook-script.test.ts +2 -1
- package/src/activities/execute-cursor/__tests__/http2-interceptor.test.ts +1 -1
- package/src/activities/execute-cursor/__tests__/prompt-goldens.test.ts +5 -5
- package/src/activities/execute-cursor/__tests__/same-identity-reproposal.test.ts +11 -13
- package/src/activities/execute-cursor/__tests__/sequential-gate-resume.test.ts +8 -11
- package/src/activities/execute-cursor/__tests__/tool-result-image.test.ts +8 -22
- package/src/activities/execute-cursor/__tests__/translator.test.ts +594 -0
- package/src/activities/execute-cursor/__tests__/turn-boundary.test.ts +8 -5
- package/src/activities/execute-cursor/__tests__/turn-stream.test.ts +87 -63
- package/src/activities/execute-cursor/adapter.ts +4 -4
- package/src/activities/execute-cursor/approval-policy.ts +12 -24
- package/src/activities/execute-cursor/approval-state.ts +66 -1
- package/src/activities/execute-cursor/boundary-rows.ts +1132 -0
- package/src/activities/execute-cursor/cursor-capabilities.ts +1 -1
- package/src/activities/execute-cursor/cursor-event-recorder.ts +57 -28
- package/src/activities/execute-cursor/fetch-interceptor.ts +1 -1
- package/src/activities/execute-cursor/http2-interceptor.ts +1 -1
- package/src/activities/execute-cursor/prompt-builder.ts +6 -6
- package/src/activities/execute-cursor/service-tier.ts +1 -2
- package/src/activities/execute-cursor/sub-agent-steps.ts +188 -0
- package/src/activities/execute-cursor/tool-result.ts +128 -0
- package/src/activities/execute-cursor/translator.ts +541 -0
- package/src/activities/execute-cursor/turn-boundary.ts +21 -14
- package/src/activities/execute-cursor/turn-settle.ts +46 -34
- package/src/activities/execute-cursor/turn-setup.ts +5 -5
- package/src/activities/execute-cursor/turn-stream.ts +49 -46
- package/src/activities/execute-cursor/turn.ts +5 -5
- package/src/activities/execute-cursor/usage-pricing.ts +2 -2
- package/src/activities/execute-deep-agent/__test-utils__/contract-subject.ts +2 -2
- package/src/activities/execute-deep-agent/__test-utils__/hermetic-deep-agent.ts +23 -11
- package/src/activities/execute-deep-agent/__test-utils__/hitl-script.ts +1 -1
- package/src/activities/execute-deep-agent/__test-utils__/scripted-model-module.ts +2 -3
- package/src/activities/execute-deep-agent/__test-utils__/scripted-model.ts +25 -4
- package/src/activities/execute-deep-agent/__test-utils__/v3-event-fixtures.ts +25 -11
- package/src/activities/execute-deep-agent/__tests__/adapter-graph-is-sdk-free.test.ts +1 -1
- package/src/activities/execute-deep-agent/__tests__/adapter-is-temporal-free.test.ts +1 -1
- package/src/activities/execute-deep-agent/__tests__/approval-file-change.test.ts +6 -17
- package/src/activities/execute-deep-agent/__tests__/hermetic/file-review-capture.test.ts +25 -8
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/approve-all-lease.turn1.status.json +2 -7
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/approve-all-lease.turn2.status.json +4 -14
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/approve.turn2.status.json +1 -5
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/file-review-capture.status.json +4 -7
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/gate.turn1.status.json +1 -5
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/inline-artifact.turn1.status.json +2 -9
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/inline-artifact.turn2.status.json +2 -9
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/pause.loop.after-tool.status.json +1 -4
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/pause.loop.mid-tool.status.json +1 -4
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/platform-stop.status.json +1 -4
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/recursion-limit.persisted.status.json +109 -76
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/reject.turn2.status.json +1 -5
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/sequential-gates.turn2.status.json +2 -10
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/sequential-gates.turn3.status.json +2 -10
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/skip.turn2.status.json +1 -5
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/sub-agent-delegation.status.json +3 -6
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/tool-call.status.json +1 -4
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/worker-shutdown.status.json +1 -4
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/write-todos.status.json +92 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/harness-contract.test.ts +3 -3
- package/src/activities/execute-deep-agent/__tests__/hermetic/hitl-approve-all-lease.test.ts +9 -5
- package/src/activities/execute-deep-agent/__tests__/hermetic/hitl-round-trips.test.ts +3 -3
- package/src/activities/execute-deep-agent/__tests__/hermetic/hitl-sequential-gates.test.ts +3 -3
- package/src/activities/execute-deep-agent/__tests__/hermetic/inline-artifact-across-gate.test.ts +7 -6
- package/src/activities/execute-deep-agent/__tests__/hermetic/pause-vs-shutdown.test.ts +10 -11
- package/src/activities/execute-deep-agent/__tests__/hermetic/plain-turn.test.ts +4 -4
- package/src/activities/execute-deep-agent/__tests__/hermetic/platform-stop.test.ts +9 -8
- package/src/activities/execute-deep-agent/__tests__/hermetic/recursion-limit.test.ts +21 -13
- package/src/activities/execute-deep-agent/__tests__/hermetic/resolution-error.test.ts +2 -2
- package/src/activities/execute-deep-agent/__tests__/hermetic/structured-output.test.ts +7 -7
- package/src/activities/execute-deep-agent/__tests__/hermetic/sub-agent-delegation.test.ts +28 -12
- package/src/activities/execute-deep-agent/__tests__/hermetic/tool-call.test.ts +21 -21
- package/src/activities/execute-deep-agent/__tests__/hermetic/workspace-lock-timeout.test.ts +5 -5
- package/src/activities/execute-deep-agent/__tests__/hermetic/write-todos.test.ts +160 -0
- package/src/activities/execute-deep-agent/__tests__/inline-publisher.test.ts +35 -30
- package/src/activities/execute-deep-agent/__tests__/prompt-builder.test.ts +3 -4
- package/src/activities/execute-deep-agent/__tests__/prompt-goldens.test.ts +12 -10
- package/src/activities/execute-deep-agent/__tests__/scripted-model.test.ts +13 -3
- package/src/activities/execute-deep-agent/__tests__/streaming-side-effects.test.ts +26 -18
- package/src/activities/execute-deep-agent/__tests__/subagent-wiring.test.ts +1 -1
- package/src/activities/execute-deep-agent/__tests__/{subagent-tracker.test.ts → translator-subagents.test.ts} +76 -57
- package/src/activities/execute-deep-agent/__tests__/{v3-status-builder.test.ts → translator-through-builder.test.ts} +213 -299
- package/src/activities/execute-deep-agent/__tests__/translator.test.ts +505 -0
- package/src/activities/execute-deep-agent/__tests__/turn-stream.test.ts +11 -29
- package/src/activities/execute-deep-agent/adapter.ts +1 -1
- package/src/activities/execute-deep-agent/approval-file-change.ts +20 -22
- package/src/activities/execute-deep-agent/deep-agent-capabilities.ts +2 -2
- package/src/activities/execute-deep-agent/hitl.ts +2 -2
- package/src/activities/execute-deep-agent/inline-publisher.ts +16 -5
- package/src/activities/execute-deep-agent/prompt-builder.ts +6 -7
- package/src/activities/execute-deep-agent/streaming-side-effects.ts +22 -31
- package/src/activities/execute-deep-agent/subagent-transformer.ts +3 -3
- package/src/activities/execute-deep-agent/translator.ts +463 -0
- package/src/activities/execute-deep-agent/turn-settle.ts +35 -43
- package/src/activities/execute-deep-agent/turn-setup.ts +8 -8
- package/src/activities/execute-deep-agent/turn-stream.ts +53 -51
- package/src/activities/execute-deep-agent/turn.ts +3 -3
- package/src/activities/generate-session-subject.ts +29 -4
- package/src/client/__tests__/stigmer-client.test.ts +92 -0
- package/src/client/stigmer-client.ts +48 -14
- package/src/config.ts +6 -3
- package/src/harness/README.md +335 -0
- package/src/harness/__tests__/approval-decisions.test.ts +2 -2
- package/src/harness/__tests__/capture.test.ts +3 -3
- package/src/harness/__tests__/import-direction.test.ts +3 -2
- package/src/harness/__tests__/mount-skills.test.ts +4 -1
- package/src/harness/__tests__/readme-index.test.ts +339 -0
- package/src/harness/__tests__/run-turn.test.ts +131 -6
- package/src/harness/__tests__/transcript-is-engine-free.test.ts +83 -0
- package/src/harness/__tests__/transcript-writers.test.ts +191 -0
- package/src/harness/__tests__/turn-attachments-vision.test.ts +5 -2
- package/src/harness/__tests__/turn-context.test.ts +5 -5
- package/src/harness/approval-decisions.ts +1 -1
- package/src/harness/capabilities.ts +21 -11
- package/src/harness/capture.ts +4 -4
- package/src/harness/persist-chokepoint.ts +3 -3
- package/src/harness/registry.ts +2 -2
- package/src/harness/run-turn.ts +33 -9
- package/src/harness/stop-controller.ts +1 -1
- package/src/harness/terminal-table.ts +7 -7
- package/src/harness/transcript/__tests__/builder.test.ts +975 -0
- package/src/harness/transcript/__tests__/state.test.ts +143 -0
- package/src/harness/transcript/builder.ts +755 -0
- package/src/harness/transcript/events.ts +262 -0
- package/src/harness/transcript/state.ts +167 -0
- package/src/harness/turn-context.ts +61 -46
- package/src/harness/types.ts +64 -22
- package/src/harness/usage-accumulator.ts +2 -2
- package/src/harness-adapters.ts +5 -4
- package/src/interceptors/__tests__/run-credential-activity.test.ts +133 -0
- package/src/interceptors/run-credential-activity.ts +67 -0
- package/src/middleware/__tests__/cost-advisory.test.ts +2 -2
- package/src/middleware/approval-gate.ts +7 -74
- package/src/middleware/cost-advisory.ts +3 -3
- package/src/middleware/index.ts +1 -1
- package/src/runner-manager.ts +14 -4
- package/src/shared/__tests__/approval-policy.test.ts +45 -0
- package/src/shared/__tests__/args-preview.test.ts +40 -20
- package/src/shared/__tests__/attachment-naming.test.ts +1 -1
- package/src/shared/__tests__/attachment-resolver.test.ts +5 -5
- package/src/shared/__tests__/attachment-zip.test.ts +1 -1
- package/src/shared/__tests__/blueprint-resolver.test.ts +1 -1
- package/src/shared/__tests__/channel-attachment.test.ts +12 -0
- package/src/shared/__tests__/cost-guard.test.ts +1 -1
- package/src/shared/__tests__/exact-apply.test.ts +2 -1
- package/src/shared/__tests__/memory-attachment.test.ts +17 -0
- package/src/shared/__tests__/persist-decision.test.ts +19 -33
- package/src/shared/__tests__/prompt-sections.test.ts +1 -1
- package/src/shared/__tests__/run-credential.test.ts +111 -0
- package/src/shared/__tests__/stamp-flowed-rows.test.ts +1 -1
- package/src/shared/__tests__/status-offload.test.ts +1 -1
- package/src/shared/__tests__/streaming-scheduler.test.ts +8 -9
- package/src/shared/__tests__/todos.test.ts +1 -1
- package/src/shared/__tests__/tool-row.test.ts +1 -1
- package/src/shared/activity-input.ts +21 -0
- package/src/shared/approval-policy.ts +95 -0
- package/src/shared/args-preview.ts +51 -42
- package/src/shared/attachment-resolver.ts +4 -4
- package/src/shared/attachment-zip.ts +2 -2
- package/src/shared/channel-attachment.ts +14 -6
- package/src/shared/cost-guard.ts +2 -2
- package/src/shared/exact-apply.ts +1 -1
- package/src/shared/execution-context.ts +2 -2
- package/src/shared/extract-structured-output.ts +2 -2
- package/src/shared/filereview/__tests__/capture.test.ts +9 -5
- package/src/shared/filereview/__tests__/git-substrate.test.ts +4 -1
- package/src/shared/filereview/__tests__/proxy-reconcile.test.ts +3 -3
- package/src/shared/filereview/cas-touched.ts +2 -2
- package/src/shared/filereview/progress.ts +13 -0
- package/src/shared/heartbeat.ts +1 -1
- package/src/shared/llm-backend.ts +0 -4
- package/src/shared/memory-attachment.ts +22 -10
- package/src/shared/model-error.ts +1 -2
- package/src/shared/persist-decision.ts +19 -28
- package/src/shared/prompt-sections.ts +4 -4
- package/src/shared/run-credential-store.ts +45 -0
- package/src/shared/run-credential.ts +70 -0
- package/src/shared/skill-resolver.ts +3 -3
- package/src/shared/status-offload.ts +2 -2
- package/src/shared/streaming-scheduler.ts +8 -13
- package/src/shared/subagent-rows.ts +2 -2
- package/src/shared/synthesized-attachment.ts +38 -3
- package/src/shared/todos.ts +3 -3
- package/src/shared/tool-row.ts +38 -2
- package/src/shared/worker-shutdown.ts +1 -1
- package/src/shared/workspace/__tests__/git-source.test.ts +3 -3
- package/src/shared/workspace/__tests__/provisioner.test.ts +5 -5
- package/src/shared/workspace/__tests__/session-provision.test.ts +2 -2
- package/src/shared/workspace/__tests__/writeback-coordinator.integration.test.ts +8 -9
- package/src/shared/workspace/__tests__/writeback-coordinator.test.ts +25 -25
- package/src/shared/workspace/provisioner.ts +1 -1
- package/src/shared/workspace/session-provision.ts +1 -1
- package/src/shared/workspace/sources/empty.ts +2 -2
- package/src/shared/workspace/sources/git.ts +3 -4
- package/src/shared/workspace/sources/local-path.ts +5 -6
- package/src/shared/workspace/stigmer-link.ts +1 -1
- package/src/shared/workspace/types.ts +2 -5
- package/src/shared/workspace/writeback-coordinator.ts +23 -12
- package/src/worker.ts +15 -3
- package/src/workflow-source.ts +15 -0
- package/src/workflows/__tests__/run-credential-interceptor.test.ts +178 -0
- package/src/workflows/execute-from-execution.ts +17 -0
- package/src/workflows/index.ts +5 -3
- package/src/workflows/interceptors/run-credential.ts +101 -0
- package/dist/activities/execute-cursor/delta-enricher.d.ts +0 -87
- package/dist/activities/execute-cursor/delta-enricher.js +0 -265
- package/dist/activities/execute-cursor/delta-enricher.js.map +0 -1
- package/dist/activities/execute-cursor/message-translator.js +0 -2040
- package/dist/activities/execute-cursor/message-translator.js.map +0 -1
- package/dist/activities/execute-cursor/todo-tracker.d.ts +0 -40
- package/dist/activities/execute-cursor/todo-tracker.js +0 -80
- package/dist/activities/execute-cursor/todo-tracker.js.map +0 -1
- package/dist/activities/execute-deep-agent/execution-state.d.ts +0 -54
- package/dist/activities/execute-deep-agent/execution-state.js +0 -68
- package/dist/activities/execute-deep-agent/execution-state.js.map +0 -1
- package/dist/activities/execute-deep-agent/status-builder-shared.d.ts +0 -65
- package/dist/activities/execute-deep-agent/status-builder-shared.js +0 -90
- package/dist/activities/execute-deep-agent/status-builder-shared.js.map +0 -1
- package/dist/activities/execute-deep-agent/subagent-tracker.d.ts +0 -113
- package/dist/activities/execute-deep-agent/subagent-tracker.js +0 -400
- package/dist/activities/execute-deep-agent/subagent-tracker.js.map +0 -1
- package/dist/activities/execute-deep-agent/v3-events.d.ts +0 -102
- package/dist/activities/execute-deep-agent/v3-events.js +0 -35
- package/dist/activities/execute-deep-agent/v3-events.js.map +0 -1
- package/dist/activities/execute-deep-agent/v3-protocol-normalizer.d.ts +0 -15
- package/dist/activities/execute-deep-agent/v3-protocol-normalizer.js +0 -235
- package/dist/activities/execute-deep-agent/v3-protocol-normalizer.js.map +0 -1
- package/dist/activities/execute-deep-agent/v3-status-builder.d.ts +0 -111
- package/dist/activities/execute-deep-agent/v3-status-builder.js +0 -457
- package/dist/activities/execute-deep-agent/v3-status-builder.js.map +0 -1
- package/dist/shared/execution-status-writer.d.ts +0 -31
- package/dist/shared/execution-status-writer.js +0 -43
- package/dist/shared/execution-status-writer.js.map +0 -1
- package/src/activities/execute-cursor/__tests__/delta-enricher.test.ts +0 -310
- package/src/activities/execute-cursor/__tests__/message-translator.test.ts +0 -1033
- package/src/activities/execute-cursor/__tests__/todo-tracker.test.ts +0 -498
- package/src/activities/execute-cursor/delta-enricher.ts +0 -307
- package/src/activities/execute-cursor/message-translator.ts +0 -2319
- package/src/activities/execute-cursor/todo-tracker.ts +0 -91
- package/src/activities/execute-deep-agent/__tests__/execution-state-extended.test.ts +0 -148
- package/src/activities/execute-deep-agent/__tests__/execution-state.test.ts +0 -154
- package/src/activities/execute-deep-agent/__tests__/status-builder-shared.test.ts +0 -47
- package/src/activities/execute-deep-agent/__tests__/v3-protocol-normalizer.test.ts +0 -324
- package/src/activities/execute-deep-agent/execution-state.ts +0 -78
- package/src/activities/execute-deep-agent/status-builder-shared.ts +0 -142
- package/src/activities/execute-deep-agent/subagent-tracker.ts +0 -479
- package/src/activities/execute-deep-agent/v3-events.ts +0 -153
- package/src/activities/execute-deep-agent/v3-protocol-normalizer.ts +0 -264
- package/src/activities/execute-deep-agent/v3-status-builder.ts +0 -565
- package/src/shared/execution-status-writer.ts +0 -56
|
@@ -1,479 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* SubAgentTracker — tracks sub-agent lifecycle and routes namespace-scoped
|
|
3
|
-
* events to per-sub-agent message lists.
|
|
4
|
-
*
|
|
5
|
-
* Correlation strategy (mirrors deepagents createSubagentTransformer):
|
|
6
|
-
* - Parent calls "task" tool → tool_started at depth 0 or 1
|
|
7
|
-
* (depth 1 in real runtime: namespace = ["tools:<pregelTaskUuid>"])
|
|
8
|
-
* - The task tool-started event's namespace segment becomes the routing prefix
|
|
9
|
-
* - Sub-agent child events arrive at depth >= 2, with the routing prefix as
|
|
10
|
-
* their first segment (e.g. "tools:<pregelUuid>|model_request:<innerUuid>")
|
|
11
|
-
* - First segment match (before "|") correlates child events to sub-agent
|
|
12
|
-
*
|
|
13
|
-
* The tracker builds INTO the status's own `subAgentExecutions` array, by
|
|
14
|
-
* reference: it pushes new rows and mutates existing ones, never replaces the
|
|
15
|
-
* array, so the caller that seeded the array from the persisted transcript
|
|
16
|
-
* (the turn runtime's `seedFromPersistedStatus`) keeps every prior turn's
|
|
17
|
-
* row and every wrapper of the status sees the same rows. Seeded rows are
|
|
18
|
-
* indexed by id on construction; a re-emitted `task` tool start for a known
|
|
19
|
-
* id binds its routing prefix to the existing row instead of pushing a twin
|
|
20
|
-
* (the memory-checkpointer replay re-drives the whole graph), exactly as the
|
|
21
|
-
* parent builder reconciles re-emitted tool calls through its rebuilt index.
|
|
22
|
-
* Until S3 M2a the tracker owned a private array that `syncSubAgentExecutions`
|
|
23
|
-
* assigned onto the status wholesale, which a resumed turn's first delegation
|
|
24
|
-
* would have used to drop turn 1's rows (S3 M1 deferred debt).
|
|
25
|
-
*
|
|
26
|
-
* V3StatusBuilder delegates sub-agent-scoped events here instead of the
|
|
27
|
-
* parent message list. Marking rows CANCELLED when a turn stops is NOT the
|
|
28
|
-
* tracker's: `shared/subagent-rows.ts` `cancelInProgressSubAgentProtos` is
|
|
29
|
-
* the one home of that transition for every harness (the runtime's thrown
|
|
30
|
-
* arms and both adapters' stops call it); the tracker only clears the
|
|
31
|
-
* streaming flags those rows' messages still carry
|
|
32
|
-
* ({@link SubAgentTracker.finalizeAllStreaming}).
|
|
33
|
-
*/
|
|
34
|
-
|
|
35
|
-
import { create, type JsonObject } from "@bufbuild/protobuf";
|
|
36
|
-
import { SubAgentExecutionSchema } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/subagent_pb";
|
|
37
|
-
import type { SubAgentExecution } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/subagent_pb";
|
|
38
|
-
import {
|
|
39
|
-
AgentMessageSchema,
|
|
40
|
-
ToolCallSchema,
|
|
41
|
-
} from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/message_pb";
|
|
42
|
-
import type { AgentMessage, ToolCall } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/message_pb";
|
|
43
|
-
import {
|
|
44
|
-
SubAgentStatus,
|
|
45
|
-
MessageType,
|
|
46
|
-
ToolCallStatus,
|
|
47
|
-
} from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/enum_pb";
|
|
48
|
-
import { utcTimestamp } from "../../shared/status.js";
|
|
49
|
-
import { classifyTool } from "../../shared/tool-kind.js";
|
|
50
|
-
import { extractToolResultV3 } from "./status-builder-shared.js";
|
|
51
|
-
import type { StigmerRunEvent } from "./v3-events.js";
|
|
52
|
-
|
|
53
|
-
// ── Per-SubAgent State ───────────────────────────────────────────────────────
|
|
54
|
-
|
|
55
|
-
interface SubAgentState {
|
|
56
|
-
readonly proto: SubAgentExecution;
|
|
57
|
-
readonly callId: string;
|
|
58
|
-
readonly namespacePrefix: string;
|
|
59
|
-
|
|
60
|
-
/** LLM runId → AgentMessage within this sub-agent's messages. */
|
|
61
|
-
messagesByRun: Map<string, AgentMessage>;
|
|
62
|
-
/** Namespace → current AI message for tool call attachment. */
|
|
63
|
-
currentAiMessage: Map<string, AgentMessage>;
|
|
64
|
-
/** Namespace → latest LLM runId for turn-boundary detection. */
|
|
65
|
-
lastLlmRunId: Map<string, string>;
|
|
66
|
-
/** ToolCallId → live ToolCall reference. */
|
|
67
|
-
toolCalls: Map<string, ToolCall>;
|
|
68
|
-
/** Progressive tool call arg accumulation. */
|
|
69
|
-
toolArgBuffers: Map<string, string>;
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
/** Fresh routing state over a row; `namespacePrefix` is `""` for a seeded row until its `task` start re-announces it. */
|
|
73
|
-
function newSubAgentState(proto: SubAgentExecution, callId: string, namespacePrefix: string): SubAgentState {
|
|
74
|
-
return {
|
|
75
|
-
proto,
|
|
76
|
-
callId,
|
|
77
|
-
namespacePrefix,
|
|
78
|
-
messagesByRun: new Map(),
|
|
79
|
-
currentAiMessage: new Map(),
|
|
80
|
-
lastLlmRunId: new Map(),
|
|
81
|
-
toolCalls: new Map(),
|
|
82
|
-
toolArgBuffers: new Map(),
|
|
83
|
-
};
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
// ── SubAgentTracker ──────────────────────────────────────────────────────────
|
|
87
|
-
|
|
88
|
-
export class SubAgentTracker {
|
|
89
|
-
private readonly stateByCallId = new Map<string, SubAgentState>();
|
|
90
|
-
private readonly stateByPrefix = new Map<string, SubAgentState>();
|
|
91
|
-
|
|
92
|
-
/**
|
|
93
|
-
* @param executions - The status's own `subAgentExecutions` array, built
|
|
94
|
-
* into by reference. Rows already on it (the runtime's seed on a
|
|
95
|
-
* reinvocation) are indexed by id, with their tool calls, so a re-driven
|
|
96
|
-
* event reconciles onto them; their routing prefix is unknown until a
|
|
97
|
-
* `task` tool start re-announces it.
|
|
98
|
-
*/
|
|
99
|
-
constructor(private readonly executions: SubAgentExecution[]) {
|
|
100
|
-
for (const proto of executions) {
|
|
101
|
-
const state = newSubAgentState(proto, proto.id, "");
|
|
102
|
-
for (const message of proto.messages) {
|
|
103
|
-
for (const tc of message.toolCalls) {
|
|
104
|
-
if (tc.id) state.toolCalls.set(tc.id, tc);
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
this.stateByCallId.set(proto.id, state);
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
/**
|
|
112
|
-
* Called when a "task" tool_started event is observed at depth 0 or 1.
|
|
113
|
-
* Creates a new SubAgentExecution and begins tracking — or, for a seeded
|
|
114
|
-
* row re-announced by a replayed graph, binds the routing prefix to the
|
|
115
|
-
* row that already exists.
|
|
116
|
-
*
|
|
117
|
-
* @param callId - Provider tool call ID (e.g. "toolu_01HW...")
|
|
118
|
-
* @param args - Tool input arguments (subagent_type, description)
|
|
119
|
-
* @param routingPrefix - The namespace segment used to match child events.
|
|
120
|
-
* At depth 1 this is the event's own namespace (the LangGraph tools-node
|
|
121
|
-
* segment, e.g. "tools:<pregelUuid>"). At depth 0 (edge case / tests) the
|
|
122
|
-
* caller provides a synthetic prefix like "tools:<callId>".
|
|
123
|
-
*/
|
|
124
|
-
onTaskToolStarted(callId: string, args: Record<string, unknown>, routingPrefix: string): void {
|
|
125
|
-
const existing = this.stateByCallId.get(callId);
|
|
126
|
-
if (existing) {
|
|
127
|
-
if (existing.namespacePrefix === "") {
|
|
128
|
-
const bound = { ...existing, namespacePrefix: routingPrefix };
|
|
129
|
-
this.stateByCallId.set(callId, bound);
|
|
130
|
-
this.stateByPrefix.set(routingPrefix, bound);
|
|
131
|
-
}
|
|
132
|
-
return;
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
const name = safeString(args, "subagent_type") || "task";
|
|
136
|
-
const description = safeString(args, "description") || "";
|
|
137
|
-
|
|
138
|
-
const proto = create(SubAgentExecutionSchema, {
|
|
139
|
-
id: callId,
|
|
140
|
-
name,
|
|
141
|
-
subject: description,
|
|
142
|
-
input: description,
|
|
143
|
-
status: SubAgentStatus.SUB_AGENT_IN_PROGRESS,
|
|
144
|
-
startedAt: utcTimestamp(),
|
|
145
|
-
});
|
|
146
|
-
|
|
147
|
-
const state = newSubAgentState(proto, callId, routingPrefix);
|
|
148
|
-
|
|
149
|
-
this.executions.push(proto);
|
|
150
|
-
this.stateByCallId.set(callId, state);
|
|
151
|
-
this.stateByPrefix.set(routingPrefix, state);
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
/**
|
|
155
|
-
* Called when the "task" tool finishes successfully.
|
|
156
|
-
*/
|
|
157
|
-
onTaskToolFinished(callId: string, output: unknown): void {
|
|
158
|
-
const state = this.stateByCallId.get(callId);
|
|
159
|
-
if (!state) return;
|
|
160
|
-
|
|
161
|
-
state.proto.status = SubAgentStatus.SUB_AGENT_COMPLETED;
|
|
162
|
-
state.proto.completedAt = utcTimestamp();
|
|
163
|
-
state.proto.output = extractToolResultV3(output);
|
|
164
|
-
|
|
165
|
-
this.finalizeStreamingMessages(state);
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
/**
|
|
169
|
-
* Called when the "task" tool errors.
|
|
170
|
-
*/
|
|
171
|
-
onTaskToolError(callId: string, errorMessage: string): void {
|
|
172
|
-
const state = this.stateByCallId.get(callId);
|
|
173
|
-
if (!state) return;
|
|
174
|
-
|
|
175
|
-
state.proto.status = SubAgentStatus.SUB_AGENT_FAILED;
|
|
176
|
-
state.proto.completedAt = utcTimestamp();
|
|
177
|
-
state.proto.error = errorMessage;
|
|
178
|
-
|
|
179
|
-
this.finalizeStreamingMessages(state);
|
|
180
|
-
}
|
|
181
|
-
|
|
182
|
-
/**
|
|
183
|
-
* Clear the streaming flag on every tracked sub-agent's in-flight
|
|
184
|
-
* messages. Called when the turn stops before the sub-agents finished;
|
|
185
|
-
* the rows' own CANCELLED transition is the caller's, through the shared
|
|
186
|
-
* `cancelInProgressSubAgentProtos` (see the header).
|
|
187
|
-
*/
|
|
188
|
-
finalizeAllStreaming(): void {
|
|
189
|
-
for (const state of this.stateByCallId.values()) {
|
|
190
|
-
this.finalizeStreamingMessages(state);
|
|
191
|
-
}
|
|
192
|
-
}
|
|
193
|
-
|
|
194
|
-
/**
|
|
195
|
-
* Returns true if the given formatted namespace belongs to a tracked sub-agent.
|
|
196
|
-
*
|
|
197
|
-
* Only matches events at depth >= 2 (namespace contains a pipe separator).
|
|
198
|
-
* Depth-1 events share the same first segment as registered prefixes but are
|
|
199
|
-
* parent-level tool lifecycle events (handled separately by isTrackedTaskTool).
|
|
200
|
-
* Child events have the registered prefix as their first segment PLUS additional
|
|
201
|
-
* inner segments (e.g. "tools:<pregelUuid>|model_request:<innerUuid>").
|
|
202
|
-
*/
|
|
203
|
-
isSubAgentNamespace(namespace: string): boolean {
|
|
204
|
-
if (!namespace || !namespace.includes("|")) return false;
|
|
205
|
-
const firstSegment = extractFirstSegment(namespace);
|
|
206
|
-
return this.stateByPrefix.has(firstSegment);
|
|
207
|
-
}
|
|
208
|
-
|
|
209
|
-
/**
|
|
210
|
-
* Route a sub-agent-scoped event to the correct SubAgentExecution's messages.
|
|
211
|
-
* The event has already been confirmed as sub-agent-scoped via isSubAgentNamespace.
|
|
212
|
-
*/
|
|
213
|
-
routeEvent(event: StigmerRunEvent): void {
|
|
214
|
-
const firstSegment = extractFirstSegment(event.namespace);
|
|
215
|
-
const state = this.stateByPrefix.get(firstSegment);
|
|
216
|
-
if (!state) return;
|
|
217
|
-
|
|
218
|
-
// Resolve agent namespace: strip the sub-agent's graph segment AND any
|
|
219
|
-
// tools:* segments from the remaining path. Within a sub-agent, all events
|
|
220
|
-
// (from node "model_request", from "tools:callId", etc.) belong to the same
|
|
221
|
-
// flat agent context — map them all to the canonical "" key.
|
|
222
|
-
const localNs = this.resolveAgentNamespace(stripFirstSegment(event.namespace));
|
|
223
|
-
|
|
224
|
-
switch (event.kind) {
|
|
225
|
-
case "message_start":
|
|
226
|
-
this.handleMessageStart(state, event.runId, localNs);
|
|
227
|
-
break;
|
|
228
|
-
case "text_delta":
|
|
229
|
-
this.handleTextDelta(state, event.runId, localNs, event.text);
|
|
230
|
-
break;
|
|
231
|
-
case "reasoning_delta":
|
|
232
|
-
this.handleReasoningDelta(state, event.runId, localNs, event.text);
|
|
233
|
-
break;
|
|
234
|
-
case "tool_call_arg_delta":
|
|
235
|
-
this.handleToolCallArgDelta(state, event.callId, event.argsChunk);
|
|
236
|
-
break;
|
|
237
|
-
case "message_finish":
|
|
238
|
-
this.handleMessageFinish(state, event.runId);
|
|
239
|
-
break;
|
|
240
|
-
case "tool_started":
|
|
241
|
-
this.handleToolStarted(state, event.callId, event.name, event.input, localNs);
|
|
242
|
-
break;
|
|
243
|
-
case "tool_finished":
|
|
244
|
-
this.handleToolFinished(state, event.callId, event.output);
|
|
245
|
-
break;
|
|
246
|
-
case "tool_error":
|
|
247
|
-
this.handleToolError(state, event.callId, event.message);
|
|
248
|
-
break;
|
|
249
|
-
case "tool_output_delta":
|
|
250
|
-
this.handleToolOutputDelta(state, event.callId, event.delta);
|
|
251
|
-
break;
|
|
252
|
-
case "usage":
|
|
253
|
-
case "lifecycle":
|
|
254
|
-
case "provider":
|
|
255
|
-
break;
|
|
256
|
-
}
|
|
257
|
-
}
|
|
258
|
-
|
|
259
|
-
// ── Message Handlers ─────────────────────────────────────────────────────
|
|
260
|
-
|
|
261
|
-
private handleMessageStart(state: SubAgentState, runId: string, localNs: string): void {
|
|
262
|
-
const lastRunId = state.lastLlmRunId.get(localNs);
|
|
263
|
-
if (lastRunId && lastRunId !== runId) {
|
|
264
|
-
const existingMsg = state.currentAiMessage.get(localNs);
|
|
265
|
-
if (existingMsg) existingMsg.isStreaming = false;
|
|
266
|
-
}
|
|
267
|
-
state.lastLlmRunId.set(localNs, runId);
|
|
268
|
-
}
|
|
269
|
-
|
|
270
|
-
private handleTextDelta(state: SubAgentState, runId: string, localNs: string, text: string): void {
|
|
271
|
-
const msg = this.ensureAiMessage(state, runId, localNs, MessageType.MESSAGE_AI);
|
|
272
|
-
msg.content += text;
|
|
273
|
-
msg.isStreaming = true;
|
|
274
|
-
}
|
|
275
|
-
|
|
276
|
-
private handleReasoningDelta(state: SubAgentState, runId: string, localNs: string, text: string): void {
|
|
277
|
-
const thinkingKey = `thinking:${localNs}`;
|
|
278
|
-
const existing = state.messagesByRun.get(thinkingKey);
|
|
279
|
-
if (existing && existing.type === MessageType.MESSAGE_THINKING) {
|
|
280
|
-
existing.content += text;
|
|
281
|
-
existing.isStreaming = true;
|
|
282
|
-
return;
|
|
283
|
-
}
|
|
284
|
-
|
|
285
|
-
const msg = create(AgentMessageSchema, {
|
|
286
|
-
type: MessageType.MESSAGE_THINKING,
|
|
287
|
-
content: text,
|
|
288
|
-
timestamp: utcTimestamp(),
|
|
289
|
-
isStreaming: true,
|
|
290
|
-
});
|
|
291
|
-
|
|
292
|
-
state.proto.messages.push(msg);
|
|
293
|
-
state.messagesByRun.set(thinkingKey, msg);
|
|
294
|
-
}
|
|
295
|
-
|
|
296
|
-
private handleMessageFinish(state: SubAgentState, runId: string): void {
|
|
297
|
-
const msg = state.messagesByRun.get(runId);
|
|
298
|
-
if (msg) msg.isStreaming = false;
|
|
299
|
-
// The usage on this event was reported by `V3StatusBuilder.processEvent`
|
|
300
|
-
// before it routed here (Q-M2b-1); the tracker owns the transcript only.
|
|
301
|
-
}
|
|
302
|
-
|
|
303
|
-
// ── Tool Handlers ──────────────────────────────────────────────────────
|
|
304
|
-
|
|
305
|
-
private handleToolStarted(
|
|
306
|
-
state: SubAgentState,
|
|
307
|
-
callId: string,
|
|
308
|
-
name: string,
|
|
309
|
-
input: Record<string, unknown>,
|
|
310
|
-
localNs: string,
|
|
311
|
-
): void {
|
|
312
|
-
const agentNs = this.resolveAgentNamespace(localNs);
|
|
313
|
-
const parentMsg = state.currentAiMessage.get(agentNs)
|
|
314
|
-
?? this.ensureAiMessageForToolCall(state, agentNs);
|
|
315
|
-
if (!parentMsg) return;
|
|
316
|
-
|
|
317
|
-
const tc = create(ToolCallSchema, {
|
|
318
|
-
id: callId,
|
|
319
|
-
name,
|
|
320
|
-
status: ToolCallStatus.TOOL_CALL_RUNNING,
|
|
321
|
-
startedAt: utcTimestamp(),
|
|
322
|
-
toolKind: classifyTool(name),
|
|
323
|
-
});
|
|
324
|
-
|
|
325
|
-
if (Object.keys(input).length > 0) {
|
|
326
|
-
tc.args = input as JsonObject;
|
|
327
|
-
}
|
|
328
|
-
|
|
329
|
-
parentMsg.toolCalls.push(tc);
|
|
330
|
-
state.toolCalls.set(callId, tc);
|
|
331
|
-
}
|
|
332
|
-
|
|
333
|
-
private handleToolFinished(state: SubAgentState, callId: string, output: unknown): void {
|
|
334
|
-
const tc = state.toolCalls.get(callId);
|
|
335
|
-
if (!tc) return;
|
|
336
|
-
|
|
337
|
-
// Faithful result only; payload size is bounded at the persist chokepoint
|
|
338
|
-
// (see v3 builder note). Truncating here would corrupt image base64.
|
|
339
|
-
tc.status = ToolCallStatus.TOOL_CALL_COMPLETED;
|
|
340
|
-
tc.result = extractToolResultV3(output);
|
|
341
|
-
tc.completedAt = utcTimestamp();
|
|
342
|
-
tc.isStreaming = false;
|
|
343
|
-
state.toolArgBuffers.delete(callId);
|
|
344
|
-
}
|
|
345
|
-
|
|
346
|
-
private handleToolError(state: SubAgentState, callId: string, message: string): void {
|
|
347
|
-
const tc = state.toolCalls.get(callId);
|
|
348
|
-
if (!tc) return;
|
|
349
|
-
|
|
350
|
-
tc.status = ToolCallStatus.TOOL_CALL_FAILED;
|
|
351
|
-
tc.error = message;
|
|
352
|
-
tc.completedAt = utcTimestamp();
|
|
353
|
-
tc.isStreaming = false;
|
|
354
|
-
state.toolArgBuffers.delete(callId);
|
|
355
|
-
}
|
|
356
|
-
|
|
357
|
-
private handleToolCallArgDelta(state: SubAgentState, callId: string, argsChunk: string): void {
|
|
358
|
-
const tc = state.toolCalls.get(callId);
|
|
359
|
-
if (!tc) return;
|
|
360
|
-
|
|
361
|
-
const buffer = (state.toolArgBuffers.get(callId) ?? "") + argsChunk;
|
|
362
|
-
state.toolArgBuffers.set(callId, buffer);
|
|
363
|
-
|
|
364
|
-
try {
|
|
365
|
-
tc.args = JSON.parse(buffer) as JsonObject;
|
|
366
|
-
} catch {
|
|
367
|
-
// Partial JSON — will resolve on next chunk or tool-finished
|
|
368
|
-
}
|
|
369
|
-
}
|
|
370
|
-
|
|
371
|
-
private handleToolOutputDelta(state: SubAgentState, callId: string, delta: string): void {
|
|
372
|
-
const tc = state.toolCalls.get(callId);
|
|
373
|
-
if (!tc) return;
|
|
374
|
-
tc.result = (tc.result ?? "") + delta;
|
|
375
|
-
}
|
|
376
|
-
|
|
377
|
-
// ── Helpers ────────────────────────────────────────────────────────────
|
|
378
|
-
|
|
379
|
-
private ensureAiMessage(
|
|
380
|
-
state: SubAgentState,
|
|
381
|
-
runId: string,
|
|
382
|
-
localNs: string,
|
|
383
|
-
type: MessageType,
|
|
384
|
-
): AgentMessage {
|
|
385
|
-
const existing = state.messagesByRun.get(runId);
|
|
386
|
-
if (existing) return existing;
|
|
387
|
-
|
|
388
|
-
const lastRunId = state.lastLlmRunId.get(localNs);
|
|
389
|
-
if (lastRunId && lastRunId !== runId) {
|
|
390
|
-
const prev = state.currentAiMessage.get(localNs);
|
|
391
|
-
if (prev) prev.isStreaming = false;
|
|
392
|
-
}
|
|
393
|
-
|
|
394
|
-
const msg = create(AgentMessageSchema, {
|
|
395
|
-
type,
|
|
396
|
-
content: "",
|
|
397
|
-
timestamp: utcTimestamp(),
|
|
398
|
-
isStreaming: true,
|
|
399
|
-
});
|
|
400
|
-
|
|
401
|
-
state.proto.messages.push(msg);
|
|
402
|
-
state.messagesByRun.set(runId, msg);
|
|
403
|
-
state.currentAiMessage.set(localNs, msg);
|
|
404
|
-
state.lastLlmRunId.set(localNs, runId);
|
|
405
|
-
|
|
406
|
-
return msg;
|
|
407
|
-
}
|
|
408
|
-
|
|
409
|
-
private ensureAiMessageForToolCall(state: SubAgentState, localNs: string): AgentMessage {
|
|
410
|
-
const lastRunId = state.lastLlmRunId.get(localNs);
|
|
411
|
-
if (lastRunId) {
|
|
412
|
-
const existing = state.messagesByRun.get(lastRunId);
|
|
413
|
-
if (existing) {
|
|
414
|
-
state.currentAiMessage.set(localNs, existing);
|
|
415
|
-
return existing;
|
|
416
|
-
}
|
|
417
|
-
}
|
|
418
|
-
|
|
419
|
-
const msg = create(AgentMessageSchema, {
|
|
420
|
-
type: MessageType.MESSAGE_AI,
|
|
421
|
-
content: "",
|
|
422
|
-
timestamp: utcTimestamp(),
|
|
423
|
-
isStreaming: false,
|
|
424
|
-
});
|
|
425
|
-
|
|
426
|
-
state.proto.messages.push(msg);
|
|
427
|
-
state.currentAiMessage.set(localNs, msg);
|
|
428
|
-
return msg;
|
|
429
|
-
}
|
|
430
|
-
|
|
431
|
-
/**
|
|
432
|
-
* Resolve a local namespace to an agent-level key.
|
|
433
|
-
*
|
|
434
|
-
* Within a sub-agent's flat execution context, internal namespace segments
|
|
435
|
-
* (graph node names like "model_request", tool scopes like "tools:callId")
|
|
436
|
-
* all belong to the same single agent. We collapse them to "" — the sub-agent
|
|
437
|
-
* has only one conversation thread.
|
|
438
|
-
*/
|
|
439
|
-
private resolveAgentNamespace(ns: string): string {
|
|
440
|
-
if (!ns) return "";
|
|
441
|
-
// Strip tools:* and known graph-node segments — sub-agents are flat
|
|
442
|
-
const parts = ns.split("|").filter(p =>
|
|
443
|
-
!p.startsWith("tools:") && !p.startsWith("model_request"),
|
|
444
|
-
);
|
|
445
|
-
return parts.join("|");
|
|
446
|
-
}
|
|
447
|
-
|
|
448
|
-
private finalizeStreamingMessages(state: SubAgentState): void {
|
|
449
|
-
for (const msg of state.currentAiMessage.values()) {
|
|
450
|
-
msg.isStreaming = false;
|
|
451
|
-
}
|
|
452
|
-
}
|
|
453
|
-
}
|
|
454
|
-
|
|
455
|
-
// ── Namespace Utilities ──────────────────────────────────────────────────────
|
|
456
|
-
|
|
457
|
-
/**
|
|
458
|
-
* Extract the first segment from a pipe-separated namespace.
|
|
459
|
-
* "tools:toolu_123|model_request:0" → "tools:toolu_123"
|
|
460
|
-
*/
|
|
461
|
-
function extractFirstSegment(namespace: string): string {
|
|
462
|
-
const pipeIdx = namespace.indexOf("|");
|
|
463
|
-
return pipeIdx === -1 ? namespace : namespace.slice(0, pipeIdx);
|
|
464
|
-
}
|
|
465
|
-
|
|
466
|
-
/**
|
|
467
|
-
* Strip the first segment, returning everything after the first pipe.
|
|
468
|
-
* "tools:toolu_123|model_request:0" → "model_request:0"
|
|
469
|
-
* "tools:toolu_123" → ""
|
|
470
|
-
*/
|
|
471
|
-
function stripFirstSegment(namespace: string): string {
|
|
472
|
-
const pipeIdx = namespace.indexOf("|");
|
|
473
|
-
return pipeIdx === -1 ? "" : namespace.slice(pipeIdx + 1);
|
|
474
|
-
}
|
|
475
|
-
|
|
476
|
-
function safeString(obj: Record<string, unknown>, key: string): string {
|
|
477
|
-
const val = obj[key];
|
|
478
|
-
return typeof val === "string" ? val : "";
|
|
479
|
-
}
|
|
@@ -1,153 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* StigmerRunEvent — normalized v3 protocol event types.
|
|
3
|
-
*
|
|
4
|
-
* The V3ProtocolNormalizer converts raw LangGraph ProtocolEvents into
|
|
5
|
-
* these typed variants. V3StatusBuilder consumes them to build the
|
|
6
|
-
* AgentExecutionStatus proto.
|
|
7
|
-
*
|
|
8
|
-
* This is a runner-internal contract (not persisted, not exposed to
|
|
9
|
-
* clients). It isolates the V3StatusBuilder from LangGraph protocol
|
|
10
|
-
* instability (field naming, delta shapes, channel semantics).
|
|
11
|
-
*
|
|
12
|
-
* ID conventions:
|
|
13
|
-
* - `runId` — LLM invocation ID; shared across message events in one turn
|
|
14
|
-
* - `callId` — provider tool call ID (e.g. `toolu_...`); keys ToolCall records
|
|
15
|
-
* - `namespace` — formatted string from v3 namespace array; empty = parent agent
|
|
16
|
-
*/
|
|
17
|
-
|
|
18
|
-
// ── Base ──────────────────────────────────────────────────────────
|
|
19
|
-
|
|
20
|
-
interface StigmerRunEventBase {
|
|
21
|
-
readonly kind: string;
|
|
22
|
-
readonly seq: number;
|
|
23
|
-
/** Formatted namespace string: empty = parent agent, joined with "|" for nested. */
|
|
24
|
-
readonly namespace: string;
|
|
25
|
-
readonly node?: string;
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
// ── Message Events (from `messages` channel) ──────────────────────
|
|
29
|
-
|
|
30
|
-
export interface MessageStartEvent extends StigmerRunEventBase {
|
|
31
|
-
readonly kind: "message_start";
|
|
32
|
-
readonly runId: string;
|
|
33
|
-
readonly messageId?: string;
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
export interface TextDeltaEvent extends StigmerRunEventBase {
|
|
37
|
-
readonly kind: "text_delta";
|
|
38
|
-
readonly runId: string;
|
|
39
|
-
readonly text: string;
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
export interface ReasoningDeltaEvent extends StigmerRunEventBase {
|
|
43
|
-
readonly kind: "reasoning_delta";
|
|
44
|
-
readonly runId: string;
|
|
45
|
-
readonly text: string;
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
export interface ToolCallArgDeltaEvent extends StigmerRunEventBase {
|
|
49
|
-
readonly kind: "tool_call_arg_delta";
|
|
50
|
-
readonly callId: string;
|
|
51
|
-
readonly argsChunk: string;
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
export interface MessageFinishEvent extends StigmerRunEventBase {
|
|
55
|
-
readonly kind: "message_finish";
|
|
56
|
-
readonly runId: string;
|
|
57
|
-
readonly usage?: V3UsagePayload;
|
|
58
|
-
readonly reason?: string;
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
// ── Tool Events (from `tools` channel — authoritative) ───────────
|
|
62
|
-
|
|
63
|
-
export interface ToolStartedEvent extends StigmerRunEventBase {
|
|
64
|
-
readonly kind: "tool_started";
|
|
65
|
-
readonly callId: string;
|
|
66
|
-
readonly name: string;
|
|
67
|
-
readonly input: Record<string, unknown>;
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
export interface ToolOutputDeltaEvent extends StigmerRunEventBase {
|
|
71
|
-
readonly kind: "tool_output_delta";
|
|
72
|
-
readonly callId: string;
|
|
73
|
-
readonly delta: string;
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
export interface ToolFinishedEvent extends StigmerRunEventBase {
|
|
77
|
-
readonly kind: "tool_finished";
|
|
78
|
-
readonly callId: string;
|
|
79
|
-
readonly output: unknown;
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
export interface ToolErrorEvent extends StigmerRunEventBase {
|
|
83
|
-
readonly kind: "tool_error";
|
|
84
|
-
readonly callId: string;
|
|
85
|
-
readonly message: string;
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
// ── Usage / Lifecycle / Provider ──────────────────────────────────
|
|
89
|
-
|
|
90
|
-
export interface UsageEvent extends StigmerRunEventBase {
|
|
91
|
-
readonly kind: "usage";
|
|
92
|
-
readonly runId: string;
|
|
93
|
-
readonly usage: V3UsagePayload;
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
export interface LifecycleEvent extends StigmerRunEventBase {
|
|
97
|
-
readonly kind: "lifecycle";
|
|
98
|
-
readonly event: string;
|
|
99
|
-
readonly graphName?: string;
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
export interface ProviderEvent extends StigmerRunEventBase {
|
|
103
|
-
readonly kind: "provider";
|
|
104
|
-
readonly provider: string;
|
|
105
|
-
readonly model?: string;
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
// ── Usage Payload ─────────────────────────────────────────────────
|
|
109
|
-
|
|
110
|
-
export interface V3UsagePayload {
|
|
111
|
-
readonly input_tokens?: number;
|
|
112
|
-
readonly output_tokens?: number;
|
|
113
|
-
readonly total_tokens?: number;
|
|
114
|
-
readonly input_token_details?: {
|
|
115
|
-
readonly cache_creation?: number;
|
|
116
|
-
readonly cache_read?: number;
|
|
117
|
-
};
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
// ── Union ─────────────────────────────────────────────────────────
|
|
121
|
-
|
|
122
|
-
export type StigmerRunEvent =
|
|
123
|
-
| MessageStartEvent
|
|
124
|
-
| TextDeltaEvent
|
|
125
|
-
| ReasoningDeltaEvent
|
|
126
|
-
| ToolCallArgDeltaEvent
|
|
127
|
-
| MessageFinishEvent
|
|
128
|
-
| ToolStartedEvent
|
|
129
|
-
| ToolOutputDeltaEvent
|
|
130
|
-
| ToolFinishedEvent
|
|
131
|
-
| ToolErrorEvent
|
|
132
|
-
| UsageEvent
|
|
133
|
-
| LifecycleEvent
|
|
134
|
-
| ProviderEvent;
|
|
135
|
-
|
|
136
|
-
// ── Namespace Formatting ──────────────────────────────────────────
|
|
137
|
-
|
|
138
|
-
export function formatNamespace(ns: readonly string[]): string {
|
|
139
|
-
return ns.length === 0 ? "" : ns.join("|");
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
/**
|
|
143
|
-
* Returns the depth (number of segments) of a formatted namespace string.
|
|
144
|
-
* Empty string → 0, single segment → 1, "a|b" → 2, etc.
|
|
145
|
-
*/
|
|
146
|
-
export function namespaceDepth(namespace: string): number {
|
|
147
|
-
if (!namespace) return 0;
|
|
148
|
-
let count = 1;
|
|
149
|
-
for (let i = 0; i < namespace.length; i++) {
|
|
150
|
-
if (namespace[i] === "|") count++;
|
|
151
|
-
}
|
|
152
|
-
return count;
|
|
153
|
-
}
|