@namzu/sdk 30.2.0 → 31.1.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/CHANGELOG.md +562 -0
- package/README.md +43 -2
- package/dist/advisory/executor.d.ts +2 -1
- package/dist/advisory/executor.d.ts.map +1 -1
- package/dist/advisory/executor.js +4 -1
- package/dist/advisory/executor.js.map +1 -1
- package/dist/agents/ReactiveAgent.d.ts.map +1 -1
- package/dist/agents/ReactiveAgent.js +12 -0
- package/dist/agents/ReactiveAgent.js.map +1 -1
- package/dist/agents/RouterAgent.d.ts.map +1 -1
- package/dist/agents/RouterAgent.js +21 -3
- package/dist/agents/RouterAgent.js.map +1 -1
- package/dist/agents/SupervisorAgent.d.ts.map +1 -1
- package/dist/agents/SupervisorAgent.js +34 -11
- package/dist/agents/SupervisorAgent.js.map +1 -1
- package/dist/agents/runAgent.d.ts +12 -0
- package/dist/agents/runAgent.d.ts.map +1 -1
- package/dist/agents/runAgent.js +26 -2
- package/dist/agents/runAgent.js.map +1 -1
- package/dist/authorization/command-line.d.ts +81 -0
- package/dist/authorization/command-line.d.ts.map +1 -0
- package/dist/authorization/command-line.js +347 -0
- package/dist/authorization/command-line.js.map +1 -0
- package/dist/authorization/rules.d.ts.map +1 -1
- package/dist/authorization/rules.js +22 -1
- package/dist/authorization/rules.js.map +1 -1
- package/dist/bridge/a2a/client.d.ts +23 -5
- package/dist/bridge/a2a/client.d.ts.map +1 -1
- package/dist/bridge/a2a/client.js +320 -73
- package/dist/bridge/a2a/client.js.map +1 -1
- package/dist/bridge/a2a/mapper.d.ts.map +1 -1
- package/dist/bridge/a2a/mapper.js +4 -0
- package/dist/bridge/a2a/mapper.js.map +1 -1
- package/dist/bridge/acp/server.d.ts +13 -1
- package/dist/bridge/acp/server.d.ts.map +1 -1
- package/dist/bridge/acp/server.js +150 -44
- package/dist/bridge/acp/server.js.map +1 -1
- package/dist/bridge/mcp/connector/adapter.d.ts +3 -2
- package/dist/bridge/mcp/connector/adapter.d.ts.map +1 -1
- package/dist/bridge/mcp/connector/adapter.js +17 -21
- package/dist/bridge/mcp/connector/adapter.js.map +1 -1
- package/dist/bridge/sse/mapper.d.ts.map +1 -1
- package/dist/bridge/sse/mapper.js +3 -0
- package/dist/bridge/sse/mapper.js.map +1 -1
- package/dist/compaction/dangling.d.ts +29 -2
- package/dist/compaction/dangling.d.ts.map +1 -1
- package/dist/compaction/dangling.js +172 -35
- package/dist/compaction/dangling.js.map +1 -1
- package/dist/compaction/index.d.ts +3 -2
- package/dist/compaction/index.d.ts.map +1 -1
- package/dist/compaction/index.js +1 -1
- package/dist/compaction/index.js.map +1 -1
- package/dist/compaction/manual.d.ts +11 -1
- package/dist/compaction/manual.d.ts.map +1 -1
- package/dist/compaction/manual.js +89 -14
- package/dist/compaction/manual.js.map +1 -1
- package/dist/compaction/plan.d.ts +19 -6
- package/dist/compaction/plan.d.ts.map +1 -1
- package/dist/compaction/plan.js +18 -4
- package/dist/compaction/plan.js.map +1 -1
- package/dist/compaction/retention.d.ts +10 -7
- package/dist/compaction/retention.d.ts.map +1 -1
- package/dist/compaction/retention.js +26 -8
- package/dist/compaction/retention.js.map +1 -1
- package/dist/compaction/summary.d.ts +4 -4
- package/dist/compaction/summary.js +4 -4
- package/dist/compaction/verifier.d.ts +19 -1
- package/dist/compaction/verifier.d.ts.map +1 -1
- package/dist/compaction/verifier.js +20 -1
- package/dist/compaction/verifier.js.map +1 -1
- package/dist/config/runtime.d.ts +6 -6
- package/dist/connector/BaseConnector.d.ts +6 -4
- package/dist/connector/BaseConnector.d.ts.map +1 -1
- package/dist/connector/BaseConnector.js +8 -2
- package/dist/connector/BaseConnector.js.map +1 -1
- package/dist/connector/builtins/http.d.ts +16 -4
- package/dist/connector/builtins/http.d.ts.map +1 -1
- package/dist/connector/builtins/http.js +177 -44
- package/dist/connector/builtins/http.js.map +1 -1
- package/dist/connector/builtins/webhook.d.ts +15 -4
- package/dist/connector/builtins/webhook.d.ts.map +1 -1
- package/dist/connector/builtins/webhook.js +165 -45
- package/dist/connector/builtins/webhook.js.map +1 -1
- package/dist/connector/execution-contract.d.ts +11 -0
- package/dist/connector/execution-contract.d.ts.map +1 -0
- package/dist/connector/execution-contract.js +14 -0
- package/dist/connector/execution-contract.js.map +1 -0
- package/dist/connector/http-operation.d.ts +48 -0
- package/dist/connector/http-operation.d.ts.map +1 -0
- package/dist/connector/http-operation.js +205 -0
- package/dist/connector/http-operation.js.map +1 -0
- package/dist/connector/mcp/adapter.d.ts.map +1 -1
- package/dist/connector/mcp/adapter.js +8 -3
- package/dist/connector/mcp/adapter.js.map +1 -1
- package/dist/connector/mcp/client.d.ts +14 -8
- package/dist/connector/mcp/client.d.ts.map +1 -1
- package/dist/connector/mcp/client.js +160 -44
- package/dist/connector/mcp/client.js.map +1 -1
- package/dist/connector/mcp/http-sse.d.ts +8 -2
- package/dist/connector/mcp/http-sse.d.ts.map +1 -1
- package/dist/connector/mcp/http-sse.js +70 -17
- package/dist/connector/mcp/http-sse.js.map +1 -1
- package/dist/connector/mcp/prompt-adapter.d.ts.map +1 -1
- package/dist/connector/mcp/prompt-adapter.js +9 -2
- package/dist/connector/mcp/prompt-adapter.js.map +1 -1
- package/dist/connector/mcp/stdio.d.ts +2 -2
- package/dist/connector/mcp/stdio.d.ts.map +1 -1
- package/dist/connector/mcp/stdio.js +14 -50
- package/dist/connector/mcp/stdio.js.map +1 -1
- package/dist/connector/mcp/streamable-http.d.ts +7 -2
- package/dist/connector/mcp/streamable-http.d.ts.map +1 -1
- package/dist/connector/mcp/streamable-http.js +66 -18
- package/dist/connector/mcp/streamable-http.js.map +1 -1
- package/dist/connector/tools/adapter.d.ts +2 -2
- package/dist/connector/tools/adapter.d.ts.map +1 -1
- package/dist/connector/tools/adapter.js +23 -14
- package/dist/connector/tools/adapter.js.map +1 -1
- package/dist/connector/tools/definitions.d.ts.map +1 -1
- package/dist/connector/tools/definitions.js +5 -2
- package/dist/connector/tools/definitions.js.map +1 -1
- package/dist/connector/tools/result.d.ts +4 -0
- package/dist/connector/tools/result.d.ts.map +1 -0
- package/dist/connector/tools/result.js +20 -0
- package/dist/connector/tools/result.js.map +1 -0
- package/dist/connector/web/guarded-fetch.d.ts +4 -2
- package/dist/connector/web/guarded-fetch.d.ts.map +1 -1
- package/dist/connector/web/guarded-fetch.js +157 -43
- package/dist/connector/web/guarded-fetch.js.map +1 -1
- package/dist/constants/sandbox/index.d.ts +3 -2
- package/dist/constants/sandbox/index.d.ts.map +1 -1
- package/dist/constants/sandbox/index.js +3 -2
- package/dist/constants/sandbox/index.js.map +1 -1
- package/dist/contracts/api.d.ts +2 -0
- package/dist/contracts/api.d.ts.map +1 -1
- package/dist/contracts/schemas.d.ts +38 -12
- package/dist/contracts/schemas.d.ts.map +1 -1
- package/dist/contracts/schemas.js +7 -0
- package/dist/contracts/schemas.js.map +1 -1
- package/dist/directory/derive-supervisor.d.ts.map +1 -1
- package/dist/directory/derive-supervisor.js +8 -0
- package/dist/directory/derive-supervisor.js.map +1 -1
- package/dist/directory/derive.d.ts.map +1 -1
- package/dist/directory/derive.js +8 -0
- package/dist/directory/derive.js.map +1 -1
- package/dist/directory/load.d.ts.map +1 -1
- package/dist/directory/load.js +2 -0
- package/dist/directory/load.js.map +1 -1
- package/dist/directory/types.d.ts +4 -0
- package/dist/directory/types.d.ts.map +1 -1
- package/dist/eval/experiment.d.ts +10 -10
- package/dist/eval/experiment.d.ts.map +1 -1
- package/dist/eval/experiment.js +121 -91
- package/dist/eval/experiment.js.map +1 -1
- package/dist/eval/judge.d.ts +6 -0
- package/dist/eval/judge.d.ts.map +1 -1
- package/dist/eval/judge.js +7 -2
- package/dist/eval/judge.js.map +1 -1
- package/dist/eval/types.d.ts +7 -1
- package/dist/eval/types.d.ts.map +1 -1
- package/dist/manager/agent/lifecycle.d.ts +12 -10
- package/dist/manager/agent/lifecycle.d.ts.map +1 -1
- package/dist/manager/agent/lifecycle.js +16 -3
- package/dist/manager/agent/lifecycle.js.map +1 -1
- package/dist/manager/connector/environment.d.ts +2 -2
- package/dist/manager/connector/environment.d.ts.map +1 -1
- package/dist/manager/connector/environment.js +2 -2
- package/dist/manager/connector/environment.js.map +1 -1
- package/dist/manager/connector/lifecycle.d.ts +10 -2
- package/dist/manager/connector/lifecycle.d.ts.map +1 -1
- package/dist/manager/connector/lifecycle.js +273 -24
- package/dist/manager/connector/lifecycle.js.map +1 -1
- package/dist/manager/connector/tenant.d.ts +5 -4
- package/dist/manager/connector/tenant.d.ts.map +1 -1
- package/dist/manager/connector/tenant.js +47 -22
- package/dist/manager/connector/tenant.js.map +1 -1
- package/dist/manager/goal/activation.d.ts +23 -0
- package/dist/manager/goal/activation.d.ts.map +1 -0
- package/dist/manager/goal/activation.js +41 -0
- package/dist/manager/goal/activation.js.map +1 -0
- package/dist/manager/index.d.ts +3 -2
- package/dist/manager/index.d.ts.map +1 -1
- package/dist/manager/index.js.map +1 -1
- package/dist/manager/run/persistence.d.ts +2 -0
- package/dist/manager/run/persistence.d.ts.map +1 -1
- package/dist/manager/run/persistence.js +5 -1
- package/dist/manager/run/persistence.js.map +1 -1
- package/dist/manager/topic/dependency.d.ts +24 -0
- package/dist/manager/topic/dependency.d.ts.map +1 -0
- package/dist/manager/topic/dependency.js +13 -0
- package/dist/manager/topic/dependency.js.map +1 -0
- package/dist/manager/topic/lifecycle.d.ts +9 -21
- package/dist/manager/topic/lifecycle.d.ts.map +1 -1
- package/dist/manager/topic/lifecycle.js +17 -29
- package/dist/manager/topic/lifecycle.js.map +1 -1
- package/dist/plugin/index.d.ts +1 -0
- package/dist/plugin/index.d.ts.map +1 -1
- package/dist/plugin/index.js.map +1 -1
- package/dist/plugin/lifecycle.d.ts +15 -0
- package/dist/plugin/lifecycle.d.ts.map +1 -1
- package/dist/plugin/lifecycle.js +144 -38
- package/dist/plugin/lifecycle.js.map +1 -1
- package/dist/plugin/loader.d.ts +3 -3
- package/dist/plugin/loader.d.ts.map +1 -1
- package/dist/plugin/loader.js +58 -12
- package/dist/plugin/loader.js.map +1 -1
- package/dist/provider/collect-chat-completion.d.ts.map +1 -1
- package/dist/provider/collect-chat-completion.js +4 -0
- package/dist/provider/collect-chat-completion.js.map +1 -1
- package/dist/provider/fallback.d.ts +3 -1
- package/dist/provider/fallback.d.ts.map +1 -1
- package/dist/provider/fallback.js +62 -10
- package/dist/provider/fallback.js.map +1 -1
- package/dist/provider/idle-timeout.d.ts +4 -0
- package/dist/provider/idle-timeout.d.ts.map +1 -1
- package/dist/provider/idle-timeout.js +131 -15
- package/dist/provider/idle-timeout.js.map +1 -1
- package/dist/provider/index.d.ts +2 -0
- package/dist/provider/index.d.ts.map +1 -1
- package/dist/provider/index.js +1 -0
- package/dist/provider/index.js.map +1 -1
- package/dist/provider/instrumentation.d.ts.map +1 -1
- package/dist/provider/instrumentation.js +1 -0
- package/dist/provider/instrumentation.js.map +1 -1
- package/dist/provider/retry.d.ts.map +1 -1
- package/dist/provider/retry.js +13 -1
- package/dist/provider/retry.js.map +1 -1
- package/dist/public-runtime.d.ts +57 -24
- package/dist/public-runtime.d.ts.map +1 -1
- package/dist/public-runtime.js +42 -35
- package/dist/public-runtime.js.map +1 -1
- package/dist/public-tools.d.ts +1 -0
- package/dist/public-tools.d.ts.map +1 -1
- package/dist/public-tools.js +5 -0
- package/dist/public-tools.js.map +1 -1
- package/dist/public-types.d.ts +33 -12
- package/dist/public-types.d.ts.map +1 -1
- package/dist/rag/embedding.d.ts +8 -3
- package/dist/rag/embedding.d.ts.map +1 -1
- package/dist/rag/embedding.js +120 -9
- package/dist/rag/embedding.js.map +1 -1
- package/dist/rag/index.d.ts +1 -1
- package/dist/rag/index.d.ts.map +1 -1
- package/dist/rag/index.js +1 -1
- package/dist/rag/index.js.map +1 -1
- package/dist/rag/ingestion.d.ts +2 -2
- package/dist/rag/ingestion.d.ts.map +1 -1
- package/dist/rag/ingestion.js +15 -3
- package/dist/rag/ingestion.js.map +1 -1
- package/dist/rag/knowledge-base.d.ts +3 -3
- package/dist/rag/knowledge-base.d.ts.map +1 -1
- package/dist/rag/knowledge-base.js +8 -4
- package/dist/rag/knowledge-base.js.map +1 -1
- package/dist/rag/operation.d.ts +10 -0
- package/dist/rag/operation.d.ts.map +1 -0
- package/dist/rag/operation.js +26 -0
- package/dist/rag/operation.js.map +1 -0
- package/dist/rag/rag-tool.d.ts.map +1 -1
- package/dist/rag/rag-tool.js +6 -3
- package/dist/rag/rag-tool.js.map +1 -1
- package/dist/rag/retriever.d.ts +2 -2
- package/dist/rag/retriever.d.ts.map +1 -1
- package/dist/rag/retriever.js +31 -15
- package/dist/rag/retriever.js.map +1 -1
- package/dist/rag/vector-store.d.ts +3 -3
- package/dist/rag/vector-store.d.ts.map +1 -1
- package/dist/rag/vector-store.js +4 -2
- package/dist/rag/vector-store.js.map +1 -1
- package/dist/registry/command/kernel-commands.d.ts +16 -4
- package/dist/registry/command/kernel-commands.d.ts.map +1 -1
- package/dist/registry/command/kernel-commands.js +171 -0
- package/dist/registry/command/kernel-commands.js.map +1 -1
- package/dist/run/reporter.d.ts.map +1 -1
- package/dist/run/reporter.js +9 -0
- package/dist/run/reporter.js.map +1 -1
- package/dist/run-query/index.d.ts +15 -1
- package/dist/run-query/index.d.ts.map +1 -1
- package/dist/run-query/index.js +69 -15
- package/dist/run-query/index.js.map +1 -1
- package/dist/runtime/query/context.d.ts.map +1 -1
- package/dist/runtime/query/context.js +10 -3
- package/dist/runtime/query/context.js.map +1 -1
- package/dist/runtime/query/executor.d.ts +3 -0
- package/dist/runtime/query/executor.d.ts.map +1 -1
- package/dist/runtime/query/executor.js +80 -18
- package/dist/runtime/query/executor.js.map +1 -1
- package/dist/runtime/query/guard.d.ts +9 -0
- package/dist/runtime/query/guard.d.ts.map +1 -1
- package/dist/runtime/query/guard.js +11 -0
- package/dist/runtime/query/guard.js.map +1 -1
- package/dist/runtime/query/index.d.ts +30 -1
- package/dist/runtime/query/index.d.ts.map +1 -1
- package/dist/runtime/query/index.js +548 -95
- package/dist/runtime/query/index.js.map +1 -1
- package/dist/runtime/query/iteration/index.d.ts.map +1 -1
- package/dist/runtime/query/iteration/index.js +74 -14
- package/dist/runtime/query/iteration/index.js.map +1 -1
- package/dist/runtime/query/iteration/phases/compaction.d.ts.map +1 -1
- package/dist/runtime/query/iteration/phases/compaction.js +94 -53
- package/dist/runtime/query/iteration/phases/compaction.js.map +1 -1
- package/dist/runtime/query/iteration/phases/context.d.ts +3 -0
- package/dist/runtime/query/iteration/phases/context.d.ts.map +1 -1
- package/dist/runtime/query/iteration/phases/context.js.map +1 -1
- package/dist/runtime/query/iteration/phases/tool-review.d.ts.map +1 -1
- package/dist/runtime/query/iteration/phases/tool-review.js +21 -0
- package/dist/runtime/query/iteration/phases/tool-review.js.map +1 -1
- package/dist/runtime/query/iteration/stream-turn.d.ts.map +1 -1
- package/dist/runtime/query/iteration/stream-turn.js +4 -0
- package/dist/runtime/query/iteration/stream-turn.js.map +1 -1
- package/dist/runtime/query/project-instructions.d.ts +69 -0
- package/dist/runtime/query/project-instructions.d.ts.map +1 -0
- package/dist/runtime/query/project-instructions.js +137 -0
- package/dist/runtime/query/project-instructions.js.map +1 -0
- package/dist/runtime/query/request-rich-content.d.ts +22 -0
- package/dist/runtime/query/request-rich-content.d.ts.map +1 -0
- package/dist/runtime/query/request-rich-content.js +122 -0
- package/dist/runtime/query/request-rich-content.js.map +1 -0
- package/dist/runtime/query/result.d.ts.map +1 -1
- package/dist/runtime/query/result.js +12 -1
- package/dist/runtime/query/result.js.map +1 -1
- package/dist/runtime/query/resume-pending.d.ts.map +1 -1
- package/dist/runtime/query/resume-pending.js +19 -20
- package/dist/runtime/query/resume-pending.js.map +1 -1
- package/dist/runtime/query/resume-run.d.ts.map +1 -1
- package/dist/runtime/query/resume-run.js +54 -8
- package/dist/runtime/query/resume-run.js.map +1 -1
- package/dist/runtime/query/run-state.d.ts +5 -0
- package/dist/runtime/query/run-state.d.ts.map +1 -1
- package/dist/runtime/query/run-state.js +6 -1
- package/dist/runtime/query/run-state.js.map +1 -1
- package/dist/runtime/query/sandbox-lifecycle.d.ts +54 -0
- package/dist/runtime/query/sandbox-lifecycle.d.ts.map +1 -0
- package/dist/runtime/query/sandbox-lifecycle.js +167 -0
- package/dist/runtime/query/sandbox-lifecycle.js.map +1 -0
- package/dist/sandbox/isolation.d.ts.map +1 -1
- package/dist/sandbox/isolation.js +9 -0
- package/dist/sandbox/isolation.js.map +1 -1
- package/dist/sandbox/provider/local.d.ts +56 -6
- package/dist/sandbox/provider/local.d.ts.map +1 -1
- package/dist/sandbox/provider/local.js +181 -76
- package/dist/sandbox/provider/local.js.map +1 -1
- package/dist/sandbox/terminal.d.ts +13 -5
- package/dist/sandbox/terminal.d.ts.map +1 -1
- package/dist/sandbox/terminal.js +11 -3
- package/dist/sandbox/terminal.js.map +1 -1
- package/dist/session/errors.d.ts +28 -29
- package/dist/session/errors.d.ts.map +1 -1
- package/dist/session/errors.js +28 -29
- package/dist/session/errors.js.map +1 -1
- package/dist/session/handoff/broadcast.d.ts +5 -8
- package/dist/session/handoff/broadcast.d.ts.map +1 -1
- package/dist/session/handoff/broadcast.js +16 -6
- package/dist/session/handoff/broadcast.js.map +1 -1
- package/dist/session/handoff/single.d.ts +5 -8
- package/dist/session/handoff/single.d.ts.map +1 -1
- package/dist/session/handoff/single.js +7 -4
- package/dist/session/handoff/single.js.map +1 -1
- package/dist/store/attachment/index.d.ts +11 -3
- package/dist/store/attachment/index.d.ts.map +1 -1
- package/dist/store/attachment/index.js +49 -4
- package/dist/store/attachment/index.js.map +1 -1
- package/dist/store/feedback/conformance.d.ts.map +1 -1
- package/dist/store/feedback/conformance.js +32 -0
- package/dist/store/feedback/conformance.js.map +1 -1
- package/dist/store/feedback/disk.d.ts +8 -6
- package/dist/store/feedback/disk.d.ts.map +1 -1
- package/dist/store/feedback/disk.js +111 -76
- package/dist/store/feedback/disk.js.map +1 -1
- package/dist/store/goal/index.d.ts +111 -0
- package/dist/store/goal/index.d.ts.map +1 -0
- package/dist/store/goal/index.js +436 -0
- package/dist/store/goal/index.js.map +1 -0
- package/dist/store/index.d.ts +1 -1
- package/dist/store/index.d.ts.map +1 -1
- package/dist/store/index.js +1 -1
- package/dist/store/index.js.map +1 -1
- package/dist/store/kv/revision-record-store.d.ts +70 -0
- package/dist/store/kv/revision-record-store.d.ts.map +1 -0
- package/dist/store/kv/revision-record-store.js +290 -0
- package/dist/store/kv/revision-record-store.js.map +1 -0
- package/dist/store/memory/disk.d.ts +9 -7
- package/dist/store/memory/disk.d.ts.map +1 -1
- package/dist/store/memory/disk.js +256 -98
- package/dist/store/memory/disk.js.map +1 -1
- package/dist/store/run/disk.d.ts +10 -2
- package/dist/store/run/disk.d.ts.map +1 -1
- package/dist/store/run/disk.js +70 -4
- package/dist/store/run/disk.js.map +1 -1
- package/dist/store/run/memory.d.ts +4 -2
- package/dist/store/run/memory.d.ts.map +1 -1
- package/dist/store/run/memory.js +15 -1
- package/dist/store/run/memory.js.map +1 -1
- package/dist/store/session/disk.d.ts +9 -0
- package/dist/store/session/disk.d.ts.map +1 -1
- package/dist/store/session/disk.js +57 -5
- package/dist/store/session/disk.js.map +1 -1
- package/dist/store/session/memory.d.ts +1 -0
- package/dist/store/session/memory.d.ts.map +1 -1
- package/dist/store/session/memory.js +14 -0
- package/dist/store/session/memory.js.map +1 -1
- package/dist/store/topic/memory.d.ts +1 -2
- package/dist/store/topic/memory.d.ts.map +1 -1
- package/dist/store/topic/memory.js +4 -5
- package/dist/store/topic/memory.js.map +1 -1
- package/dist/store/topic/objective.d.ts +8 -4
- package/dist/store/topic/objective.d.ts.map +1 -1
- package/dist/store/topic/objective.js +185 -100
- package/dist/store/topic/objective.js.map +1 -1
- package/dist/store/topic/state.d.ts +1 -2
- package/dist/store/topic/state.d.ts.map +1 -1
- package/dist/store/topic/state.js +50 -62
- package/dist/store/topic/state.js.map +1 -1
- package/dist/tools/builtins/bash.d.ts.map +1 -1
- package/dist/tools/builtins/bash.js +20 -0
- package/dist/tools/builtins/bash.js.map +1 -1
- package/dist/tools/builtins/computer-use.d.ts +9 -1
- package/dist/tools/builtins/computer-use.d.ts.map +1 -1
- package/dist/tools/builtins/computer-use.js.map +1 -1
- package/dist/tools/builtins/content-fingerprint.d.ts +8 -7
- package/dist/tools/builtins/content-fingerprint.d.ts.map +1 -1
- package/dist/tools/builtins/content-fingerprint.js +9 -10
- package/dist/tools/builtins/content-fingerprint.js.map +1 -1
- package/dist/tools/builtins/edit.d.ts +6 -1
- package/dist/tools/builtins/edit.d.ts.map +1 -1
- package/dist/tools/builtins/edit.js +166 -27
- package/dist/tools/builtins/edit.js.map +1 -1
- package/dist/tools/builtins/write-file.d.ts.map +1 -1
- package/dist/tools/builtins/write-file.js +45 -19
- package/dist/tools/builtins/write-file.js.map +1 -1
- package/dist/tools/command-arguments.d.ts +43 -0
- package/dist/tools/command-arguments.d.ts.map +1 -0
- package/dist/tools/command-arguments.js +52 -0
- package/dist/tools/command-arguments.js.map +1 -0
- package/dist/tools/coordinator/index.d.ts +2 -0
- package/dist/tools/coordinator/index.d.ts.map +1 -1
- package/dist/tools/coordinator/index.js +3 -1
- package/dist/tools/coordinator/index.js.map +1 -1
- package/dist/tools/defineTool.d.ts +10 -0
- package/dist/tools/defineTool.d.ts.map +1 -1
- package/dist/tools/defineTool.js +1 -0
- package/dist/tools/defineTool.js.map +1 -1
- package/dist/tools/env-scrub.d.ts +7 -5
- package/dist/tools/env-scrub.d.ts.map +1 -1
- package/dist/tools/env-scrub.js +7 -5
- package/dist/tools/env-scrub.js.map +1 -1
- package/dist/tools/goal/index.d.ts +20 -0
- package/dist/tools/goal/index.d.ts.map +1 -0
- package/dist/tools/goal/index.js +104 -0
- package/dist/tools/goal/index.js.map +1 -0
- package/dist/tools/memory/index.d.ts +16 -0
- package/dist/tools/memory/index.d.ts.map +1 -1
- package/dist/tools/memory/index.js +6 -2
- package/dist/tools/memory/index.js.map +1 -1
- package/dist/tools/memory/search.d.ts +4 -1
- package/dist/tools/memory/search.d.ts.map +1 -1
- package/dist/tools/memory/search.js +10 -2
- package/dist/tools/memory/search.js.map +1 -1
- package/dist/types/agent/base.d.ts +11 -3
- package/dist/types/agent/base.d.ts.map +1 -1
- package/dist/types/agent/factory.d.ts +2 -0
- package/dist/types/agent/factory.d.ts.map +1 -1
- package/dist/types/agent/reactive.d.ts +2 -0
- package/dist/types/agent/reactive.d.ts.map +1 -1
- package/dist/types/agent/supervisor.d.ts +6 -0
- package/dist/types/agent/supervisor.d.ts.map +1 -1
- package/dist/types/agent/task.d.ts +6 -2
- package/dist/types/agent/task.d.ts.map +1 -1
- package/dist/types/connector/core.d.ts +13 -8
- package/dist/types/connector/core.d.ts.map +1 -1
- package/dist/types/connector/definition.d.ts +37 -18
- package/dist/types/connector/definition.d.ts.map +1 -1
- package/dist/types/connector/http.d.ts +6 -0
- package/dist/types/connector/http.d.ts.map +1 -1
- package/dist/types/connector/mcp.d.ts +24 -6
- package/dist/types/connector/mcp.d.ts.map +1 -1
- package/dist/types/connector/tenant.d.ts +17 -7
- package/dist/types/connector/tenant.d.ts.map +1 -1
- package/dist/types/connector/webhook.d.ts +6 -0
- package/dist/types/connector/webhook.d.ts.map +1 -1
- package/dist/types/goal/index.d.ts +46 -0
- package/dist/types/goal/index.d.ts.map +1 -0
- package/dist/types/goal/index.js +2 -0
- package/dist/types/goal/index.js.map +1 -0
- package/dist/types/ids/index.d.ts +2 -0
- package/dist/types/ids/index.d.ts.map +1 -1
- package/dist/types/ids/index.js.map +1 -1
- package/dist/types/message/index.d.ts +79 -13
- package/dist/types/message/index.d.ts.map +1 -1
- package/dist/types/message/index.js +49 -3
- package/dist/types/message/index.js.map +1 -1
- package/dist/types/plugin/index.d.ts +7 -5
- package/dist/types/plugin/index.d.ts.map +1 -1
- package/dist/types/plugin/index.js.map +1 -1
- package/dist/types/provider/chat.d.ts +27 -4
- package/dist/types/provider/chat.d.ts.map +1 -1
- package/dist/types/provider/index.d.ts +1 -1
- package/dist/types/provider/index.d.ts.map +1 -1
- package/dist/types/provider/interface.d.ts +18 -7
- package/dist/types/provider/interface.d.ts.map +1 -1
- package/dist/types/provider/model.d.ts +12 -0
- package/dist/types/provider/model.d.ts.map +1 -1
- package/dist/types/provider/stream.d.ts +6 -0
- package/dist/types/provider/stream.d.ts.map +1 -1
- package/dist/types/rag/embedding.d.ts +15 -2
- package/dist/types/rag/embedding.d.ts.map +1 -1
- package/dist/types/rag/ingestion.d.ts +2 -2
- package/dist/types/rag/ingestion.d.ts.map +1 -1
- package/dist/types/rag/knowledge-base.d.ts +3 -3
- package/dist/types/rag/knowledge-base.d.ts.map +1 -1
- package/dist/types/rag/retrieval.d.ts +2 -2
- package/dist/types/rag/retrieval.d.ts.map +1 -1
- package/dist/types/rag/scope.d.ts +4 -0
- package/dist/types/rag/scope.d.ts.map +1 -1
- package/dist/types/rag/vector.d.ts +5 -2
- package/dist/types/rag/vector.d.ts.map +1 -1
- package/dist/types/run/config.d.ts +20 -0
- package/dist/types/run/config.d.ts.map +1 -1
- package/dist/types/run/events.d.ts +25 -1
- package/dist/types/run/events.d.ts.map +1 -1
- package/dist/types/run/events.js.map +1 -1
- package/dist/types/run/metadata.d.ts +2 -0
- package/dist/types/run/metadata.d.ts.map +1 -1
- package/dist/types/run/step.d.ts +2 -6
- package/dist/types/run/step.d.ts.map +1 -1
- package/dist/types/run/step.js.map +1 -1
- package/dist/types/run/store.d.ts +55 -2
- package/dist/types/run/store.d.ts.map +1 -1
- package/dist/types/sandbox/index.d.ts +47 -6
- package/dist/types/sandbox/index.d.ts.map +1 -1
- package/dist/types/sandbox/index.js +23 -10
- package/dist/types/sandbox/index.js.map +1 -1
- package/dist/types/session/store.d.ts +13 -0
- package/dist/types/session/store.d.ts.map +1 -1
- package/dist/types/tool/index.d.ts +33 -11
- package/dist/types/tool/index.d.ts.map +1 -1
- package/dist/types/tool/index.js.map +1 -1
- package/dist/types/topic/entity.d.ts +3 -4
- package/dist/types/topic/entity.d.ts.map +1 -1
- package/dist/types/topic/store.d.ts +3 -3
- package/dist/utils/id.d.ts +3 -1
- package/dist/utils/id.d.ts.map +1 -1
- package/dist/utils/id.js +4 -0
- package/dist/utils/id.js.map +1 -1
- package/dist/utils/process-environment.d.ts +26 -0
- package/dist/utils/process-environment.d.ts.map +1 -0
- package/dist/utils/process-environment.js +78 -0
- package/dist/utils/process-environment.js.map +1 -0
- package/dist/vault/InMemoryCredentialVault.d.ts +2 -0
- package/dist/vault/InMemoryCredentialVault.d.ts.map +1 -1
- package/dist/vault/InMemoryCredentialVault.js +24 -4
- package/dist/vault/InMemoryCredentialVault.js.map +1 -1
- package/dist/vault/instrumentation.d.ts.map +1 -1
- package/dist/vault/instrumentation.js +15 -0
- package/dist/vault/instrumentation.js.map +1 -1
- package/package.json +1 -1
- package/src/advisory/executor.ts +4 -1
- package/src/agents/ReactiveAgent.ts +12 -0
- package/src/agents/RouterAgent.ts +25 -3
- package/src/agents/SupervisorAgent.ts +33 -11
- package/src/agents/runAgent.ts +38 -2
- package/src/authorization/command-line.ts +390 -0
- package/src/authorization/rules.ts +22 -1
- package/src/bridge/a2a/client.ts +384 -97
- package/src/bridge/a2a/mapper.ts +5 -0
- package/src/bridge/acp/server.ts +184 -42
- package/src/bridge/mcp/connector/adapter.ts +28 -20
- package/src/bridge/sse/mapper.ts +3 -0
- package/src/compaction/dangling.ts +203 -38
- package/src/compaction/index.ts +9 -2
- package/src/compaction/manual.ts +125 -18
- package/src/compaction/plan.ts +42 -11
- package/src/compaction/retention.ts +23 -8
- package/src/compaction/summary.ts +4 -4
- package/src/compaction/verifier.ts +66 -0
- package/src/connector/BaseConnector.ts +19 -4
- package/src/connector/builtins/http.ts +236 -46
- package/src/connector/builtins/webhook.ts +207 -47
- package/src/connector/execution-contract.ts +27 -0
- package/src/connector/http-operation.ts +238 -0
- package/src/connector/mcp/adapter.ts +8 -3
- package/src/connector/mcp/client.ts +207 -58
- package/src/connector/mcp/http-sse.ts +91 -23
- package/src/connector/mcp/prompt-adapter.ts +8 -2
- package/src/connector/mcp/stdio.ts +21 -46
- package/src/connector/mcp/streamable-http.ts +86 -22
- package/src/connector/tools/adapter.ts +23 -14
- package/src/connector/tools/definitions.ts +5 -2
- package/src/connector/tools/result.ts +21 -0
- package/src/connector/web/guarded-fetch.ts +188 -48
- package/src/constants/sandbox/index.ts +3 -2
- package/src/contracts/api.ts +2 -0
- package/src/contracts/schemas.ts +7 -0
- package/src/directory/derive-supervisor.ts +8 -0
- package/src/directory/derive.ts +8 -0
- package/src/directory/load.ts +2 -0
- package/src/directory/types.ts +4 -0
- package/src/eval/experiment.ts +160 -111
- package/src/eval/judge.ts +13 -2
- package/src/eval/types.ts +7 -1
- package/src/manager/agent/lifecycle.ts +28 -12
- package/src/manager/connector/environment.ts +3 -1
- package/src/manager/connector/lifecycle.ts +364 -24
- package/src/manager/connector/tenant.ts +56 -23
- package/src/manager/goal/activation.ts +52 -0
- package/src/manager/index.ts +10 -2
- package/src/manager/run/persistence.ts +6 -1
- package/src/manager/topic/dependency.ts +39 -0
- package/src/manager/topic/lifecycle.ts +19 -31
- package/src/plugin/index.ts +1 -0
- package/src/plugin/lifecycle.ts +180 -39
- package/src/plugin/loader.ts +70 -13
- package/src/provider/collect-chat-completion.ts +3 -0
- package/src/provider/fallback.ts +79 -11
- package/src/provider/idle-timeout.ts +143 -17
- package/src/provider/index.ts +2 -0
- package/src/provider/instrumentation.ts +1 -0
- package/src/provider/retry.ts +16 -1
- package/src/public-runtime.ts +190 -32
- package/src/public-tools.ts +5 -0
- package/src/public-types.ts +85 -11
- package/src/rag/embedding.ts +147 -19
- package/src/rag/index.ts +1 -1
- package/src/rag/ingestion.ts +16 -2
- package/src/rag/knowledge-base.ts +13 -4
- package/src/rag/operation.ts +28 -0
- package/src/rag/rag-tool.ts +6 -3
- package/src/rag/retriever.ts +62 -11
- package/src/rag/vector-store.ts +8 -2
- package/src/registry/command/kernel-commands.ts +223 -4
- package/src/run/reporter.ts +10 -0
- package/src/run-query/index.ts +84 -15
- package/src/runtime/query/context.ts +13 -3
- package/src/runtime/query/executor.ts +90 -17
- package/src/runtime/query/guard.ts +12 -0
- package/src/runtime/query/index.ts +652 -103
- package/src/runtime/query/iteration/index.ts +89 -13
- package/src/runtime/query/iteration/phases/compaction.ts +120 -55
- package/src/runtime/query/iteration/phases/context.ts +4 -0
- package/src/runtime/query/iteration/phases/tool-review.ts +28 -0
- package/src/runtime/query/iteration/stream-turn.ts +3 -0
- package/src/runtime/query/project-instructions.ts +212 -0
- package/src/runtime/query/request-rich-content.ts +153 -0
- package/src/runtime/query/result.ts +12 -1
- package/src/runtime/query/resume-pending.ts +20 -18
- package/src/runtime/query/resume-run.ts +52 -8
- package/src/runtime/query/run-state.ts +11 -1
- package/src/runtime/query/sandbox-lifecycle.ts +210 -0
- package/src/sandbox/isolation.ts +9 -0
- package/src/sandbox/provider/local.ts +255 -90
- package/src/sandbox/terminal.ts +13 -5
- package/src/session/errors.ts +68 -42
- package/src/session/handoff/broadcast.ts +20 -14
- package/src/session/handoff/single.ts +14 -13
- package/src/store/attachment/index.ts +65 -3
- package/src/store/feedback/conformance.ts +39 -0
- package/src/store/feedback/disk.ts +128 -82
- package/src/store/goal/index.ts +594 -0
- package/src/store/index.ts +1 -1
- package/src/store/kv/revision-record-store.ts +346 -0
- package/src/store/memory/disk.ts +288 -113
- package/src/store/run/disk.ts +96 -5
- package/src/store/run/memory.ts +22 -2
- package/src/store/session/disk.ts +93 -6
- package/src/store/session/memory.ts +22 -0
- package/src/store/topic/memory.ts +4 -5
- package/src/store/topic/objective.ts +215 -100
- package/src/store/topic/state.ts +100 -63
- package/src/tools/builtins/bash.ts +21 -0
- package/src/tools/builtins/computer-use.ts +9 -1
- package/src/tools/builtins/content-fingerprint.ts +9 -12
- package/src/tools/builtins/edit.ts +190 -27
- package/src/tools/builtins/write-file.ts +55 -19
- package/src/tools/command-arguments.ts +54 -0
- package/src/tools/coordinator/index.ts +4 -1
- package/src/tools/defineTool.ts +11 -0
- package/src/tools/env-scrub.ts +7 -5
- package/src/tools/goal/index.ts +129 -0
- package/src/tools/memory/index.ts +26 -3
- package/src/tools/memory/search.ts +20 -3
- package/src/types/agent/base.ts +12 -3
- package/src/types/agent/factory.ts +2 -0
- package/src/types/agent/reactive.ts +2 -0
- package/src/types/agent/supervisor.ts +6 -0
- package/src/types/agent/task.ts +6 -2
- package/src/types/connector/core.ts +13 -8
- package/src/types/connector/definition.ts +54 -20
- package/src/types/connector/http.ts +7 -0
- package/src/types/connector/mcp.ts +27 -6
- package/src/types/connector/tenant.ts +21 -7
- package/src/types/connector/webhook.ts +7 -0
- package/src/types/goal/index.ts +50 -0
- package/src/types/ids/index.ts +2 -0
- package/src/types/message/index.ts +147 -12
- package/src/types/plugin/index.ts +7 -5
- package/src/types/provider/chat.ts +35 -4
- package/src/types/provider/index.ts +1 -1
- package/src/types/provider/interface.ts +22 -7
- package/src/types/provider/model.ts +13 -0
- package/src/types/provider/stream.ts +6 -0
- package/src/types/rag/embedding.ts +16 -2
- package/src/types/rag/ingestion.ts +2 -1
- package/src/types/rag/knowledge-base.ts +7 -3
- package/src/types/rag/retrieval.ts +2 -1
- package/src/types/rag/scope.ts +5 -0
- package/src/types/rag/vector.ts +5 -2
- package/src/types/run/config.ts +20 -0
- package/src/types/run/events.ts +28 -3
- package/src/types/run/metadata.ts +2 -0
- package/src/types/run/step.ts +2 -7
- package/src/types/run/store.ts +60 -2
- package/src/types/sandbox/index.ts +57 -14
- package/src/types/session/store.ts +18 -0
- package/src/types/tool/index.ts +33 -11
- package/src/types/topic/entity.ts +3 -4
- package/src/types/topic/store.ts +3 -3
- package/src/utils/id.ts +6 -0
- package/src/utils/process-environment.ts +101 -0
- package/src/vault/InMemoryCredentialVault.ts +29 -4
- package/src/vault/instrumentation.ts +24 -0
|
@@ -1,4 +1,15 @@
|
|
|
1
|
+
import type { SessionGoalActivation } from '../../manager/goal/activation.js'
|
|
2
|
+
import {
|
|
3
|
+
GoalExistsError,
|
|
4
|
+
GoalNotFoundError,
|
|
5
|
+
GoalSessionNotFoundError,
|
|
6
|
+
GoalTransitionError,
|
|
7
|
+
type SessionGoalStore,
|
|
8
|
+
StaleGoalError,
|
|
9
|
+
} from '../../store/goal/index.js'
|
|
1
10
|
import type { HostCommandDescriptor } from '../../types/command/index.js'
|
|
11
|
+
import type { GoalRef, SessionGoal } from '../../types/goal/index.js'
|
|
12
|
+
import type { SessionId, TenantId } from '../../types/ids/index.js'
|
|
2
13
|
import type { Skill } from '../../types/skills/index.js'
|
|
3
14
|
import { isInvocableBy, skillInvocation } from '../../types/skills/index.js'
|
|
4
15
|
import type { TaskStore } from '../../types/task/index.js'
|
|
@@ -7,10 +18,10 @@ import type { TaskStore } from '../../types/task/index.js'
|
|
|
7
18
|
* The commands whose facts the kernel already owns.
|
|
8
19
|
*
|
|
9
20
|
* A registry with nothing in it is a declaration, and this repo has a rule
|
|
10
|
-
* about those. These
|
|
11
|
-
* kernel internals to answer:
|
|
12
|
-
*
|
|
13
|
-
* not
|
|
21
|
+
* about those. These are facts a host would otherwise have to reach into
|
|
22
|
+
* kernel internals to answer: the current Session goal, tracked work,
|
|
23
|
+
* operator-invocable skills, and the agents this run may delegate to. Each is
|
|
24
|
+
* computed or owned here and should not acquire a second host-specific source.
|
|
14
25
|
*
|
|
15
26
|
* Deliberately NOT here: anything that would need a decision the kernel
|
|
16
27
|
* cannot make. `/clear` is about a transcript a host owns, `/login` about
|
|
@@ -30,10 +41,218 @@ export interface KernelCommandOptions {
|
|
|
30
41
|
* is different from having none registered.
|
|
31
42
|
*/
|
|
32
43
|
readonly skills?: readonly Skill[]
|
|
44
|
+
/** Exact durable conversation scope behind the direct-human `/goal` command. */
|
|
45
|
+
readonly goal?: GoalCommandScope
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
export interface GoalCommandScope {
|
|
49
|
+
readonly store: SessionGoalStore
|
|
50
|
+
readonly sessionId: SessionId
|
|
51
|
+
readonly tenantId: TenantId
|
|
52
|
+
/** Process-local permission for automatic continuation. */
|
|
53
|
+
readonly activation?: SessionGoalActivation
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
const GOAL_USAGE = 'Usage: /goal [<objective>|clear|edit <objective>|pause|resume]'
|
|
57
|
+
|
|
58
|
+
type ParsedGoalCommand =
|
|
59
|
+
| { readonly kind: 'show' }
|
|
60
|
+
| { readonly kind: 'create'; readonly objective: string }
|
|
61
|
+
| { readonly kind: 'edit'; readonly objective: string }
|
|
62
|
+
| { readonly kind: 'invalid-edit' }
|
|
63
|
+
| { readonly kind: 'pause' }
|
|
64
|
+
| { readonly kind: 'resume' }
|
|
65
|
+
| { readonly kind: 'clear' }
|
|
66
|
+
|
|
67
|
+
function parseGoalCommand(args: readonly string[]): ParsedGoalCommand {
|
|
68
|
+
const input = args.join(' ').trim()
|
|
69
|
+
if (input.length === 0) return { kind: 'show' }
|
|
70
|
+
const control = input.toLowerCase()
|
|
71
|
+
if (control === 'clear') return { kind: 'clear' }
|
|
72
|
+
if (control === 'pause') return { kind: 'pause' }
|
|
73
|
+
if (control === 'resume') return { kind: 'resume' }
|
|
74
|
+
if (control === 'edit') return { kind: 'invalid-edit' }
|
|
75
|
+
if (/^edit(?=\s)/iu.test(input)) return { kind: 'edit', objective: input.slice(4).trim() }
|
|
76
|
+
return { kind: 'create', objective: input }
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
function goalRef(goal: SessionGoal): GoalRef {
|
|
80
|
+
return { id: goal.id, revision: goal.revision }
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
function goalCommands(goal: SessionGoal, armed: boolean): string {
|
|
84
|
+
if (goal.phase === 'active') {
|
|
85
|
+
return `${armed ? '' : '/goal resume, '}/goal edit <objective>, /goal pause, /goal clear`
|
|
86
|
+
}
|
|
87
|
+
if (goal.phase === 'paused' || goal.phase === 'blocked') {
|
|
88
|
+
return '/goal edit <objective>, /goal resume, /goal clear'
|
|
89
|
+
}
|
|
90
|
+
return '/goal <objective>, /goal clear'
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
function renderGoal(title: string, goal: SessionGoal, armed: boolean): string {
|
|
94
|
+
return [
|
|
95
|
+
title,
|
|
96
|
+
`Status: ${goal.phase}`,
|
|
97
|
+
`Automatic continuation: ${armed ? 'armed' : 'disarmed'}`,
|
|
98
|
+
`Rounds admitted: ${goal.roundsAdmitted} / ${goal.maxGoalRounds}`,
|
|
99
|
+
...(goal.blockedReason
|
|
100
|
+
? [`Blocker: ${goal.blockedReason.code}: ${goal.blockedReason.message}`]
|
|
101
|
+
: []),
|
|
102
|
+
`Objective: ${goal.objective}`,
|
|
103
|
+
'',
|
|
104
|
+
`Commands: ${goalCommands(goal, armed)}`,
|
|
105
|
+
].join('\n')
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
function renderScopedGoal(title: string, goal: SessionGoal, scope: GoalCommandScope): string {
|
|
109
|
+
return renderGoal(title, goal, scope.activation?.isArmed(scope.sessionId, goal) ?? false)
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
function missingGoal(action: string) {
|
|
113
|
+
return {
|
|
114
|
+
kind: 'refused' as const,
|
|
115
|
+
reason: `No goal is currently set; /goal ${action} requires one. ${GOAL_USAGE}`,
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
async function runGoalCommand(scope: GoalCommandScope | undefined, args: readonly string[]) {
|
|
120
|
+
if (!scope) {
|
|
121
|
+
return {
|
|
122
|
+
kind: 'refused' as const,
|
|
123
|
+
reason: 'Goals need a durable session. This host did not supply one for the current command.',
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
const command = parseGoalCommand(args)
|
|
127
|
+
try {
|
|
128
|
+
const current = await scope.store.getGoal(scope.sessionId, scope.tenantId)
|
|
129
|
+
switch (command.kind) {
|
|
130
|
+
case 'show':
|
|
131
|
+
return current
|
|
132
|
+
? { kind: 'ack' as const, message: renderScopedGoal('Goal', current, scope) }
|
|
133
|
+
: {
|
|
134
|
+
kind: 'ack' as const,
|
|
135
|
+
message: `No goal is currently set.\n${GOAL_USAGE}`,
|
|
136
|
+
}
|
|
137
|
+
case 'invalid-edit':
|
|
138
|
+
return {
|
|
139
|
+
kind: 'refused' as const,
|
|
140
|
+
reason: `Goal editing requires a replacement objective.\n${GOAL_USAGE}`,
|
|
141
|
+
}
|
|
142
|
+
case 'create': {
|
|
143
|
+
if (current && current.phase !== 'complete') {
|
|
144
|
+
return {
|
|
145
|
+
kind: 'refused' as const,
|
|
146
|
+
reason: `A goal is already ${current.phase}. Use /goal edit <objective> to change it or /goal clear before replacing it.`,
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
const created = await scope.store.createGoal(
|
|
150
|
+
{ sessionId: scope.sessionId, objective: command.objective },
|
|
151
|
+
scope.tenantId,
|
|
152
|
+
)
|
|
153
|
+
scope.activation?.arm(created)
|
|
154
|
+
return {
|
|
155
|
+
kind: 'ack' as const,
|
|
156
|
+
message: renderScopedGoal('Goal created', created, scope),
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
case 'edit': {
|
|
160
|
+
if (!current) return missingGoal('edit')
|
|
161
|
+
if (current.phase === 'complete') {
|
|
162
|
+
const replacement = await scope.store.createGoal(
|
|
163
|
+
{ sessionId: scope.sessionId, objective: command.objective },
|
|
164
|
+
scope.tenantId,
|
|
165
|
+
)
|
|
166
|
+
scope.activation?.arm(replacement)
|
|
167
|
+
return {
|
|
168
|
+
kind: 'ack' as const,
|
|
169
|
+
message: renderScopedGoal('Goal created', replacement, scope),
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
const wasArmed = scope.activation?.isArmed(scope.sessionId, current) ?? false
|
|
173
|
+
const edited = await scope.store.editGoal(
|
|
174
|
+
scope.sessionId,
|
|
175
|
+
scope.tenantId,
|
|
176
|
+
goalRef(current),
|
|
177
|
+
{ objective: command.objective },
|
|
178
|
+
)
|
|
179
|
+
if (wasArmed) scope.activation?.arm(edited)
|
|
180
|
+
return {
|
|
181
|
+
kind: 'ack' as const,
|
|
182
|
+
message: renderScopedGoal('Goal updated', edited, scope),
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
case 'pause': {
|
|
186
|
+
if (!current) return missingGoal('pause')
|
|
187
|
+
const paused = await scope.store.pauseGoal(
|
|
188
|
+
scope.sessionId,
|
|
189
|
+
scope.tenantId,
|
|
190
|
+
goalRef(current),
|
|
191
|
+
)
|
|
192
|
+
scope.activation?.disarm(scope.sessionId)
|
|
193
|
+
return {
|
|
194
|
+
kind: 'ack' as const,
|
|
195
|
+
message: renderScopedGoal('Goal paused', paused, scope),
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
case 'resume': {
|
|
199
|
+
if (!current) return missingGoal('resume')
|
|
200
|
+
if (current.phase === 'active') {
|
|
201
|
+
scope.activation?.arm(current)
|
|
202
|
+
return {
|
|
203
|
+
kind: 'ack' as const,
|
|
204
|
+
message: renderScopedGoal('Goal armed', current, scope),
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
const resumed = await scope.store.resumeGoal(
|
|
208
|
+
scope.sessionId,
|
|
209
|
+
scope.tenantId,
|
|
210
|
+
goalRef(current),
|
|
211
|
+
)
|
|
212
|
+
scope.activation?.arm(resumed)
|
|
213
|
+
return {
|
|
214
|
+
kind: 'ack' as const,
|
|
215
|
+
message: renderScopedGoal('Goal resumed', resumed, scope),
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
case 'clear': {
|
|
219
|
+
if (!current) {
|
|
220
|
+
scope.activation?.disarm(scope.sessionId)
|
|
221
|
+
return { kind: 'ack' as const, message: 'No goal to clear.' }
|
|
222
|
+
}
|
|
223
|
+
await scope.store.clearGoal(scope.sessionId, scope.tenantId, goalRef(current))
|
|
224
|
+
scope.activation?.disarm(scope.sessionId)
|
|
225
|
+
return { kind: 'ack' as const, message: 'Goal cleared.' }
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
} catch (error) {
|
|
229
|
+
if (
|
|
230
|
+
error instanceof GoalExistsError ||
|
|
231
|
+
error instanceof GoalNotFoundError ||
|
|
232
|
+
error instanceof GoalTransitionError ||
|
|
233
|
+
error instanceof StaleGoalError
|
|
234
|
+
) {
|
|
235
|
+
return {
|
|
236
|
+
kind: 'refused' as const,
|
|
237
|
+
reason:
|
|
238
|
+
'The goal command is not valid for the current state. Run /goal to view available commands.',
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
if (error instanceof GoalSessionNotFoundError) {
|
|
242
|
+
return { kind: 'refused' as const, reason: error.message }
|
|
243
|
+
}
|
|
244
|
+
throw error
|
|
245
|
+
}
|
|
33
246
|
}
|
|
34
247
|
|
|
35
248
|
export function kernelHostCommands(options: KernelCommandOptions): HostCommandDescriptor[] {
|
|
36
249
|
return [
|
|
250
|
+
{
|
|
251
|
+
name: 'goal',
|
|
252
|
+
description: 'Persist or inspect a completion goal for this conversation.',
|
|
253
|
+
hint: '[<objective>|clear|edit <objective>|pause|resume]',
|
|
254
|
+
handler: async ({ args }) => await runGoalCommand(options.goal, args),
|
|
255
|
+
},
|
|
37
256
|
{
|
|
38
257
|
name: 'tasks',
|
|
39
258
|
description: 'List the work this run is tracking.',
|
package/src/run/reporter.ts
CHANGED
|
@@ -343,6 +343,16 @@ export function createRunReporter(parentLogger?: Logger): RunReporter {
|
|
|
343
343
|
})
|
|
344
344
|
break
|
|
345
345
|
|
|
346
|
+
case 'message_history_repaired':
|
|
347
|
+
log.warn('Repaired provider-invalid tool history', {
|
|
348
|
+
[NAMZU.RUN_ID]: event.runId,
|
|
349
|
+
'namzu.history.source': event.source,
|
|
350
|
+
'namzu.history.duplicate_tool_results_removed': event.duplicateToolResultsRemoved,
|
|
351
|
+
'namzu.history.orphaned_tool_results_removed': event.orphanedToolResultsRemoved,
|
|
352
|
+
'namzu.history.synthetic_tool_results_inserted': event.syntheticToolResultsInserted,
|
|
353
|
+
})
|
|
354
|
+
break
|
|
355
|
+
|
|
346
356
|
case 'tool_progress':
|
|
347
357
|
// Debug, not info: a long tool can emit many of these and they
|
|
348
358
|
// are a live-view signal, not a run milestone.
|
package/src/run-query/index.ts
CHANGED
|
@@ -27,6 +27,38 @@ export interface RunQueryOptions {
|
|
|
27
27
|
readonly now?: () => number
|
|
28
28
|
}
|
|
29
29
|
|
|
30
|
+
export type RunTranscriptUnavailableReason =
|
|
31
|
+
| 'message-snapshot-not-persisted'
|
|
32
|
+
| 'message-snapshot-unverified'
|
|
33
|
+
| 'message-snapshot-out-of-sync'
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Refusal to call a partial or unverifiable reconstruction "complete".
|
|
37
|
+
*/
|
|
38
|
+
export class RunTranscriptUnavailableError extends Error {
|
|
39
|
+
readonly reason: RunTranscriptUnavailableReason
|
|
40
|
+
readonly eventHeadSeq: number | undefined
|
|
41
|
+
readonly snapshotThroughEventSeq: number | undefined
|
|
42
|
+
|
|
43
|
+
constructor(input: {
|
|
44
|
+
reason: RunTranscriptUnavailableReason
|
|
45
|
+
eventHeadSeq?: number
|
|
46
|
+
snapshotThroughEventSeq?: number
|
|
47
|
+
}) {
|
|
48
|
+
const detail =
|
|
49
|
+
input.reason === 'message-snapshot-not-persisted'
|
|
50
|
+
? 'the surviving message snapshot was never persisted or its publication was interrupted'
|
|
51
|
+
: input.reason === 'message-snapshot-unverified'
|
|
52
|
+
? 'the surviving messages use the legacy format and carry no event-log boundary'
|
|
53
|
+
: `the surviving message snapshot ends at event ${input.snapshotThroughEventSeq ?? 'unknown'}, but the durable log ends at event ${input.eventHeadSeq ?? 'unknown'}`
|
|
54
|
+
super(`Complete run transcript unavailable: ${detail}.`)
|
|
55
|
+
this.name = 'RunTranscriptUnavailableError'
|
|
56
|
+
this.reason = input.reason
|
|
57
|
+
this.eventHeadSeq = input.eventHeadSeq
|
|
58
|
+
this.snapshotThroughEventSeq = input.snapshotThroughEventSeq
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
30
62
|
/** What one compaction pass removed. */
|
|
31
63
|
export interface ShedPass {
|
|
32
64
|
readonly iteration: number
|
|
@@ -53,17 +85,7 @@ export class RunQuery {
|
|
|
53
85
|
* was reading during an incident.
|
|
54
86
|
*/
|
|
55
87
|
async shedHistory(): Promise<readonly ShedPass[]> {
|
|
56
|
-
|
|
57
|
-
for (const event of await this.events()) {
|
|
58
|
-
if (event.type !== 'compaction_shed') continue
|
|
59
|
-
passes.push({
|
|
60
|
-
iteration: event.iteration,
|
|
61
|
-
reason: event.reason,
|
|
62
|
-
messages: event.messages,
|
|
63
|
-
seq: event.seq,
|
|
64
|
-
})
|
|
65
|
-
}
|
|
66
|
-
return passes
|
|
88
|
+
return shedPassesFrom(await this.events())
|
|
67
89
|
}
|
|
68
90
|
|
|
69
91
|
/**
|
|
@@ -80,10 +102,43 @@ export class RunQuery {
|
|
|
80
102
|
* the conversation is missing from this list, which is the question
|
|
81
103
|
* somebody reconstructing an incident is actually asking.
|
|
82
104
|
*/
|
|
83
|
-
async fullTranscript(messages
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
105
|
+
async fullTranscript(messages?: readonly Message[]): Promise<readonly Message[]> {
|
|
106
|
+
if (messages !== undefined) {
|
|
107
|
+
const shed = await this.shedHistory()
|
|
108
|
+
if (shed.length === 0) return messages
|
|
109
|
+
return [...shed.flatMap((pass) => pass.messages), ...messages]
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
// Read the log first and compare the snapshot to that exact head. A
|
|
113
|
+
// previous pause may have left a perfectly valid messages file under the
|
|
114
|
+
// same run id; only the boundary says whether it belongs to THIS head.
|
|
115
|
+
const events = await this.events()
|
|
116
|
+
const eventHeadSeq = events.at(-1)?.seq ?? 0
|
|
117
|
+
const snapshot = await this.options.store.readMessages()
|
|
118
|
+
|
|
119
|
+
if (snapshot.kind === 'unavailable') {
|
|
120
|
+
throw new RunTranscriptUnavailableError({
|
|
121
|
+
reason: 'message-snapshot-not-persisted',
|
|
122
|
+
eventHeadSeq,
|
|
123
|
+
})
|
|
124
|
+
}
|
|
125
|
+
if (snapshot.kind === 'legacy-unverified') {
|
|
126
|
+
throw new RunTranscriptUnavailableError({
|
|
127
|
+
reason: 'message-snapshot-unverified',
|
|
128
|
+
eventHeadSeq,
|
|
129
|
+
})
|
|
130
|
+
}
|
|
131
|
+
if (snapshot.throughEventSeq !== eventHeadSeq) {
|
|
132
|
+
throw new RunTranscriptUnavailableError({
|
|
133
|
+
reason: 'message-snapshot-out-of-sync',
|
|
134
|
+
eventHeadSeq,
|
|
135
|
+
snapshotThroughEventSeq: snapshot.throughEventSeq,
|
|
136
|
+
})
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
const shed = shedPassesFrom(events)
|
|
140
|
+
if (shed.length === 0) return snapshot.messages
|
|
141
|
+
return [...shed.flatMap((pass) => pass.messages), ...snapshot.messages]
|
|
87
142
|
}
|
|
88
143
|
|
|
89
144
|
/**
|
|
@@ -106,3 +161,17 @@ export class RunQuery {
|
|
|
106
161
|
return registry.get<RunStatusState>(RUN_STATUS_READ_MODEL_ID)
|
|
107
162
|
}
|
|
108
163
|
}
|
|
164
|
+
|
|
165
|
+
function shedPassesFrom(events: readonly PersistedRunEvent[]): ShedPass[] {
|
|
166
|
+
const passes: ShedPass[] = []
|
|
167
|
+
for (const event of events) {
|
|
168
|
+
if (event.type !== 'compaction_shed') continue
|
|
169
|
+
passes.push({
|
|
170
|
+
iteration: event.iteration,
|
|
171
|
+
reason: event.reason,
|
|
172
|
+
messages: event.messages,
|
|
173
|
+
seq: event.seq,
|
|
174
|
+
})
|
|
175
|
+
}
|
|
176
|
+
return passes
|
|
177
|
+
}
|
|
@@ -235,9 +235,19 @@ export class RunContextFactory {
|
|
|
235
235
|
// takes an AbortController and what arrives here is a bare
|
|
236
236
|
// AbortSignal, so the reason is forwarded by hand rather than by
|
|
237
237
|
// reaching for a helper that does not fit.
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
238
|
+
// AbortSignal does not replay an event that happened before a
|
|
239
|
+
// listener was installed. Mirror that state synchronously or a caller
|
|
240
|
+
// that withdrew authority before `query()` began receives a live run
|
|
241
|
+
// controller, allowing provider and tool work to start anyway.
|
|
242
|
+
if (config.signal.aborted) {
|
|
243
|
+
abortController.abort(config.signal.reason)
|
|
244
|
+
} else {
|
|
245
|
+
config.signal.addEventListener(
|
|
246
|
+
'abort',
|
|
247
|
+
() => abortController.abort(config.signal?.reason),
|
|
248
|
+
{ once: true },
|
|
249
|
+
)
|
|
250
|
+
}
|
|
241
251
|
}
|
|
242
252
|
|
|
243
253
|
const cwd = config.workingDirectory ?? process.cwd()
|
|
@@ -44,6 +44,7 @@ import { generateToolCallId } from '../../utils/id.js'
|
|
|
44
44
|
import type { Logger } from '../../utils/logger.js'
|
|
45
45
|
import { compressShellOutput } from '../../utils/shell-compress.js'
|
|
46
46
|
import { type BackgroundJobRegistry, bindOwner } from '../jobs/registry.js'
|
|
47
|
+
import type { ToolResultObservation } from './project-instructions.js'
|
|
47
48
|
import {
|
|
48
49
|
DEFAULT_MAX_TOOL_OUTPUT_CHARS,
|
|
49
50
|
applyToolOutputBudget,
|
|
@@ -256,6 +257,8 @@ export interface ToolCallOutcome {
|
|
|
256
257
|
export interface ToolExecutionBatch {
|
|
257
258
|
messages: Message[]
|
|
258
259
|
results: ToolCallOutcome[]
|
|
260
|
+
/** Actual registry executions, including calls dispatched by another tool. */
|
|
261
|
+
observations: ToolResultObservation[]
|
|
259
262
|
}
|
|
260
263
|
|
|
261
264
|
/**
|
|
@@ -418,7 +421,11 @@ export class ToolExecutor {
|
|
|
418
421
|
* a scope its first half installed. That is precisely the incoherent
|
|
419
422
|
* batch this line exists to make impossible.
|
|
420
423
|
*/
|
|
421
|
-
private skillScope?: {
|
|
424
|
+
private skillScope?: {
|
|
425
|
+
skill: string
|
|
426
|
+
allowedTools: readonly string[]
|
|
427
|
+
adoptedInBatch: number
|
|
428
|
+
}
|
|
422
429
|
private batchCounter = 0
|
|
423
430
|
|
|
424
431
|
/**
|
|
@@ -455,7 +462,7 @@ export class ToolExecutor {
|
|
|
455
462
|
): Promise<ToolExecutionBatch> {
|
|
456
463
|
const toolCalls = response.message.toolCalls
|
|
457
464
|
if (!toolCalls) {
|
|
458
|
-
return { messages: [], results: [] }
|
|
465
|
+
return { messages: [], results: [], observations: [] }
|
|
459
466
|
}
|
|
460
467
|
|
|
461
468
|
this.batchCounter += 1
|
|
@@ -488,7 +495,11 @@ export class ToolExecutor {
|
|
|
488
495
|
// One context per call so each execution can see its own
|
|
489
496
|
// `toolUseId`. The base context is built once; we spread + add
|
|
490
497
|
// per-call to keep allocations cheap.
|
|
491
|
-
const
|
|
498
|
+
const observations: ToolResultObservation[] = []
|
|
499
|
+
const recordObservation = (observation: ToolResultObservation): void => {
|
|
500
|
+
observations.push(observation)
|
|
501
|
+
}
|
|
502
|
+
const baseContext = this.buildToolContext(recordObservation)
|
|
492
503
|
|
|
493
504
|
// Respect each tool's `concurrencySafe` flag. Read-only tools
|
|
494
505
|
// (ls/grep/glob/…) run in parallel; tools that mutate shared state
|
|
@@ -544,7 +555,7 @@ export class ToolExecutor {
|
|
|
544
555
|
// that made it. The base context has no `toolUseId`, and a
|
|
545
556
|
// closure built there would report every nested call as
|
|
546
557
|
// parentless.
|
|
547
|
-
dispatchTool: (name, input) => this.dispatchNested(name, input, ctx),
|
|
558
|
+
dispatchTool: (name, input) => this.dispatchNested(name, input, ctx, recordObservation),
|
|
548
559
|
// Per-call for the same reason: a pause has to be routed back
|
|
549
560
|
// to the call that raised it, and a batch can raise several.
|
|
550
561
|
...(this.config.toolPause ? { requestPause: this.config.toolPause(toolCall.id) } : {}),
|
|
@@ -563,7 +574,7 @@ export class ToolExecutor {
|
|
|
563
574
|
},
|
|
564
575
|
}
|
|
565
576
|
const run = async () => {
|
|
566
|
-
results[i] = await this.executeSingle(toolCall, ctx)
|
|
577
|
+
results[i] = await this.executeSingle(toolCall, ctx, recordObservation)
|
|
567
578
|
}
|
|
568
579
|
const gated = async () => {
|
|
569
580
|
await gate.acquire()
|
|
@@ -594,7 +605,12 @@ export class ToolExecutor {
|
|
|
594
605
|
const toolCall = toolCalls[i] as ToolCall
|
|
595
606
|
const toolName = toolCall.function.name
|
|
596
607
|
const message = `Error: Tool "${toolName}" did not complete — the batch failed before it produced a result.`
|
|
597
|
-
results[i] = {
|
|
608
|
+
results[i] = {
|
|
609
|
+
toolCallId: toolCall.id,
|
|
610
|
+
toolName,
|
|
611
|
+
output: message,
|
|
612
|
+
isError: true,
|
|
613
|
+
}
|
|
598
614
|
await this.emitEvent({
|
|
599
615
|
type: 'tool_completed',
|
|
600
616
|
runId: this.config.runId,
|
|
@@ -613,7 +629,7 @@ export class ToolExecutor {
|
|
|
613
629
|
createToolMessage(r.content ?? r.output, r.toolCallId, r.isError),
|
|
614
630
|
)
|
|
615
631
|
|
|
616
|
-
return { messages, results }
|
|
632
|
+
return { messages, results, observations }
|
|
617
633
|
}
|
|
618
634
|
|
|
619
635
|
/**
|
|
@@ -634,6 +650,7 @@ export class ToolExecutor {
|
|
|
634
650
|
name: string,
|
|
635
651
|
input: unknown,
|
|
636
652
|
context: ToolContext,
|
|
653
|
+
recordObservation: (observation: ToolResultObservation) => void,
|
|
637
654
|
): Promise<ToolResult> {
|
|
638
655
|
const parent = context.toolUseId
|
|
639
656
|
const via = parent ? { tool: name, toolUseId: parent as ToolUseId } : undefined
|
|
@@ -665,11 +682,21 @@ export class ToolExecutor {
|
|
|
665
682
|
durationMs: Date.now() - startedAt,
|
|
666
683
|
...(via ? { via } : {}),
|
|
667
684
|
})
|
|
685
|
+
recordObservation({
|
|
686
|
+
runId: this.config.runId,
|
|
687
|
+
toolUseId: nestedId,
|
|
688
|
+
toolName: name,
|
|
689
|
+
input,
|
|
690
|
+
result,
|
|
691
|
+
...(parent ? { parentToolUseId: parent } : {}),
|
|
692
|
+
})
|
|
668
693
|
|
|
669
694
|
return result
|
|
670
695
|
}
|
|
671
696
|
|
|
672
|
-
private buildToolContext(
|
|
697
|
+
private buildToolContext(
|
|
698
|
+
recordObservation: (observation: ToolResultObservation) => void = () => {},
|
|
699
|
+
): ToolContext {
|
|
673
700
|
const context: ToolContext = {
|
|
674
701
|
runId: this.config.runId,
|
|
675
702
|
workingDirectory: this.config.workingDirectory,
|
|
@@ -702,13 +729,20 @@ export class ToolExecutor {
|
|
|
702
729
|
// dispatching outside a batch has no parent call to name. The
|
|
703
730
|
// per-call context below overrides it with one that does; see
|
|
704
731
|
// `dispatchNested`.
|
|
705
|
-
dispatchTool: (name, input) => this.dispatchNested(name, input, context),
|
|
732
|
+
dispatchTool: (name, input) => this.dispatchNested(name, input, context, recordObservation),
|
|
706
733
|
sandbox: this.config.sandbox,
|
|
707
734
|
fileReadTracker: this.fileReadTracker,
|
|
708
735
|
// Bound to this run, once. Binding here rather than passing the
|
|
709
736
|
// owner from the tool is what makes the scoping structural: there
|
|
710
737
|
// is no argument a tool could pass to reach another run's jobs.
|
|
711
|
-
|
|
738
|
+
//
|
|
739
|
+
// The registry's process substrate is the HOST. It must not coexist
|
|
740
|
+
// with a Sandbox in one tool context: handing both to every tool lets
|
|
741
|
+
// any of them call `backgroundJobs.start()` and escape the boundary
|
|
742
|
+
// that its foreground work would use. A sandbox-aware persistent
|
|
743
|
+
// process capability needs its own execution seam; until one exists,
|
|
744
|
+
// the safe composition is to withhold this host capability entirely.
|
|
745
|
+
...(this.config.backgroundJobs && !this.config.sandbox
|
|
712
746
|
? {
|
|
713
747
|
backgroundJobs: bindOwner(this.config.backgroundJobs, this.config.runId, {
|
|
714
748
|
workingDirectory: this.config.workingDirectory,
|
|
@@ -724,6 +758,7 @@ export class ToolExecutor {
|
|
|
724
758
|
private async executeSingle(
|
|
725
759
|
toolCall: ToolCall,
|
|
726
760
|
toolContext: ToolContext,
|
|
761
|
+
recordObservation: (observation: ToolResultObservation) => void,
|
|
727
762
|
): Promise<ToolCallOutcome> {
|
|
728
763
|
let toolName = toolCall.function.name
|
|
729
764
|
|
|
@@ -754,7 +789,12 @@ export class ToolExecutor {
|
|
|
754
789
|
result: message,
|
|
755
790
|
isError: true,
|
|
756
791
|
})
|
|
757
|
-
return {
|
|
792
|
+
return {
|
|
793
|
+
toolCallId: toolCall.id,
|
|
794
|
+
toolName,
|
|
795
|
+
output: message,
|
|
796
|
+
isError: true,
|
|
797
|
+
}
|
|
758
798
|
}
|
|
759
799
|
|
|
760
800
|
// A malformed call used to cost a full model round trip to fix: the
|
|
@@ -797,7 +837,12 @@ export class ToolExecutor {
|
|
|
797
837
|
result: message,
|
|
798
838
|
isError: true,
|
|
799
839
|
})
|
|
800
|
-
return {
|
|
840
|
+
return {
|
|
841
|
+
toolCallId: toolCall.id,
|
|
842
|
+
toolName,
|
|
843
|
+
output: message,
|
|
844
|
+
isError: true,
|
|
845
|
+
}
|
|
801
846
|
}
|
|
802
847
|
|
|
803
848
|
let input: unknown = resolved.input
|
|
@@ -1064,6 +1109,13 @@ export class ToolExecutor {
|
|
|
1064
1109
|
...(budgeted.truncated ? { outputTruncated: true } : {}),
|
|
1065
1110
|
...(budgeted.spillPath ? { outputSpillPath: budgeted.spillPath } : {}),
|
|
1066
1111
|
})
|
|
1112
|
+
recordObservation({
|
|
1113
|
+
runId: this.config.runId,
|
|
1114
|
+
toolUseId: toolCall.id,
|
|
1115
|
+
toolName,
|
|
1116
|
+
input,
|
|
1117
|
+
result,
|
|
1118
|
+
})
|
|
1067
1119
|
|
|
1068
1120
|
const resolveContent = (): { content?: ToolResultContent } => {
|
|
1069
1121
|
if (postOverride?.content !== undefined) {
|
|
@@ -1210,7 +1262,12 @@ export class ToolExecutor {
|
|
|
1210
1262
|
if (!this.config.pluginManager) return { kind: 'continue', input }
|
|
1211
1263
|
const results = await this.config.pluginManager.executeHooks(
|
|
1212
1264
|
'pre_tool_use',
|
|
1213
|
-
{
|
|
1265
|
+
{
|
|
1266
|
+
runId: this.config.runId,
|
|
1267
|
+
toolName,
|
|
1268
|
+
toolInput: input,
|
|
1269
|
+
signal: this.config.abortSignal,
|
|
1270
|
+
},
|
|
1214
1271
|
this.emitEvent,
|
|
1215
1272
|
)
|
|
1216
1273
|
return this.interpretPreToolResults(toolName, input, results)
|
|
@@ -1363,7 +1420,10 @@ export class ToolExecutor {
|
|
|
1363
1420
|
// Either the model named a tool that does not exist, or this
|
|
1364
1421
|
// registry does not implement `get`. Both are the registry's to
|
|
1365
1422
|
// answer; a repairer still gets offered the `unknown_tool` case.
|
|
1366
|
-
return {
|
|
1423
|
+
return {
|
|
1424
|
+
reason: 'unknown_tool',
|
|
1425
|
+
message: `Error: Unknown tool "${toolName}"`,
|
|
1426
|
+
}
|
|
1367
1427
|
}
|
|
1368
1428
|
|
|
1369
1429
|
// A registry that hands back a tool with no schema has nothing to
|
|
@@ -1396,7 +1456,9 @@ export class ToolExecutor {
|
|
|
1396
1456
|
toolCall,
|
|
1397
1457
|
reason: failure.reason,
|
|
1398
1458
|
message: failure.message,
|
|
1399
|
-
...(tool
|
|
1459
|
+
...(tool
|
|
1460
|
+
? { tool, jsonSchema: tool.modelInputSchema ?? renderToolSchema(tool.inputSchema) }
|
|
1461
|
+
: {}),
|
|
1400
1462
|
availableTools: this.config.tools.listNames(),
|
|
1401
1463
|
})
|
|
1402
1464
|
} catch (err) {
|
|
@@ -1454,7 +1516,13 @@ export class ToolExecutor {
|
|
|
1454
1516
|
if (!this.config.pluginManager) return { override: null, retry: false }
|
|
1455
1517
|
const results = await this.config.pluginManager.executeHooks(
|
|
1456
1518
|
'post_tool_use',
|
|
1457
|
-
{
|
|
1519
|
+
{
|
|
1520
|
+
runId: this.config.runId,
|
|
1521
|
+
toolName,
|
|
1522
|
+
toolInput: input,
|
|
1523
|
+
toolResult,
|
|
1524
|
+
signal: this.config.abortSignal,
|
|
1525
|
+
},
|
|
1458
1526
|
this.emitEvent,
|
|
1459
1527
|
)
|
|
1460
1528
|
let override: PostToolOverride | null = null
|
|
@@ -1590,7 +1658,12 @@ export class ToolExecutor {
|
|
|
1590
1658
|
result: outcome.output,
|
|
1591
1659
|
isError: outcome.kind === 'error',
|
|
1592
1660
|
})
|
|
1593
|
-
return {
|
|
1661
|
+
return {
|
|
1662
|
+
toolCallId,
|
|
1663
|
+
toolName,
|
|
1664
|
+
output: outcome.output,
|
|
1665
|
+
isError: outcome.kind === 'error',
|
|
1666
|
+
}
|
|
1594
1667
|
}
|
|
1595
1668
|
|
|
1596
1669
|
/**
|
|
@@ -87,6 +87,18 @@ export class GuardCoordinator {
|
|
|
87
87
|
return Math.max(0, finalizeAt - (Date.now() - this.startTime))
|
|
88
88
|
}
|
|
89
89
|
|
|
90
|
+
/**
|
|
91
|
+
* Wall-clock left before the run's hard timeout.
|
|
92
|
+
*
|
|
93
|
+
* Setup work that happens before the first iteration cannot rely on
|
|
94
|
+
* {@link beforeIteration}: there is no iteration boundary to sample while
|
|
95
|
+
* that work is pending. Callers use this value to put the same run-owned
|
|
96
|
+
* deadline around such work instead of inventing a second clock.
|
|
97
|
+
*/
|
|
98
|
+
remainingUntilTimeoutMs(): number {
|
|
99
|
+
return Math.max(0, this.limitConfig.timeoutMs - (Date.now() - this.startTime))
|
|
100
|
+
}
|
|
101
|
+
|
|
90
102
|
beforeIteration(runMgr: RunPersistence, abortSignal: AbortSignal): GuardCheckResult {
|
|
91
103
|
const limitState = {
|
|
92
104
|
aborted: abortSignal.aborted,
|