@namzu/sdk 46.0.0 → 48.0.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 +325 -8
- package/README.md +7 -8
- package/dist/advisory/history.d.ts.map +1 -1
- package/dist/advisory/history.js +21 -1
- package/dist/advisory/history.js.map +1 -1
- package/dist/advisory/index.d.ts +1 -1
- package/dist/advisory/index.d.ts.map +1 -1
- package/dist/advisory/index.js +1 -1
- package/dist/advisory/index.js.map +1 -1
- package/dist/advisory/registry.d.ts +17 -0
- package/dist/advisory/registry.d.ts.map +1 -1
- package/dist/advisory/registry.js +26 -0
- package/dist/advisory/registry.js.map +1 -1
- package/dist/agents/PipelineAgent.d.ts +2 -46
- package/dist/agents/PipelineAgent.d.ts.map +1 -1
- package/dist/agents/PipelineAgent.js +2 -242
- package/dist/agents/PipelineAgent.js.map +1 -1
- package/dist/agents/QueryAgent.d.ts +21 -0
- package/dist/agents/QueryAgent.d.ts.map +1 -0
- package/dist/agents/QueryAgent.js +214 -0
- package/dist/agents/QueryAgent.js.map +1 -0
- package/dist/agents/ReactiveAgent.d.ts +4 -16
- package/dist/agents/ReactiveAgent.d.ts.map +1 -1
- package/dist/agents/ReactiveAgent.js +4 -183
- package/dist/agents/ReactiveAgent.js.map +1 -1
- package/dist/agents/RouterAgent.d.ts +2 -20
- package/dist/agents/RouterAgent.d.ts.map +1 -1
- package/dist/agents/RouterAgent.js +2 -266
- package/dist/agents/RouterAgent.js.map +1 -1
- package/dist/agents/SupervisorAgent.d.ts +3 -43
- package/dist/agents/SupervisorAgent.d.ts.map +1 -1
- package/dist/agents/SupervisorAgent.js +3 -418
- package/dist/agents/SupervisorAgent.js.map +1 -1
- package/dist/agents/defineAgent.d.ts +2 -1
- package/dist/agents/defineAgent.d.ts.map +1 -1
- package/dist/agents/defineAgent.js +6 -1
- package/dist/agents/defineAgent.js.map +1 -1
- package/dist/agents/examples/PipelineAgent.d.ts +46 -0
- package/dist/agents/examples/PipelineAgent.d.ts.map +1 -0
- package/dist/agents/examples/PipelineAgent.js +242 -0
- package/dist/agents/examples/PipelineAgent.js.map +1 -0
- package/dist/agents/examples/RouterAgent.d.ts +22 -0
- package/dist/agents/examples/RouterAgent.d.ts.map +1 -0
- package/dist/agents/examples/RouterAgent.js +268 -0
- package/dist/agents/examples/RouterAgent.js.map +1 -0
- package/dist/agents/examples/SupervisorAgent.d.ts +45 -0
- package/dist/agents/examples/SupervisorAgent.d.ts.map +1 -0
- package/dist/agents/examples/SupervisorAgent.js +406 -0
- package/dist/agents/examples/SupervisorAgent.js.map +1 -0
- package/dist/agents/explore.d.ts +6 -3
- package/dist/agents/explore.d.ts.map +1 -1
- package/dist/agents/explore.js +6 -3
- package/dist/agents/explore.js.map +1 -1
- package/dist/agents/forward-options.d.ts +11 -0
- package/dist/agents/forward-options.d.ts.map +1 -0
- package/dist/agents/forward-options.js +15 -0
- package/dist/agents/forward-options.js.map +1 -0
- package/dist/agents/index.d.ts +1 -0
- package/dist/agents/index.d.ts.map +1 -1
- package/dist/agents/index.js +2 -0
- package/dist/agents/index.js.map +1 -1
- package/dist/agents/runAgent.d.ts +19 -8
- package/dist/agents/runAgent.d.ts.map +1 -1
- package/dist/agents/runAgent.js +99 -29
- package/dist/agents/runAgent.js.map +1 -1
- package/dist/authorization/command-line.d.ts +2 -0
- package/dist/authorization/command-line.d.ts.map +1 -1
- package/dist/authorization/command-line.js +2 -2
- package/dist/authorization/command-line.js.map +1 -1
- package/dist/authorization/gate.d.ts +8 -0
- package/dist/authorization/gate.d.ts.map +1 -1
- package/dist/authorization/gate.js +12 -1
- package/dist/authorization/gate.js.map +1 -1
- package/dist/authorization/program.d.ts +151 -0
- package/dist/authorization/program.d.ts.map +1 -0
- package/dist/authorization/program.js +713 -0
- package/dist/authorization/program.js.map +1 -0
- package/dist/authorization/reexec-wrapper.d.ts +106 -0
- package/dist/authorization/reexec-wrapper.d.ts.map +1 -0
- package/dist/authorization/reexec-wrapper.js +532 -0
- package/dist/authorization/reexec-wrapper.js.map +1 -0
- package/dist/authorization/rules.d.ts +9 -0
- package/dist/authorization/rules.d.ts.map +1 -1
- package/dist/authorization/rules.js +8 -1
- package/dist/authorization/rules.js.map +1 -1
- package/dist/authorization/shell-lexer.d.ts +19 -4
- package/dist/authorization/shell-lexer.d.ts.map +1 -1
- package/dist/authorization/shell-lexer.js +91 -65
- package/dist/authorization/shell-lexer.js.map +1 -1
- package/dist/bridge/sse/mapper.d.ts.map +1 -1
- package/dist/bridge/sse/mapper.js +6 -0
- package/dist/bridge/sse/mapper.js.map +1 -1
- package/dist/capabilities/index.d.ts +54 -0
- package/dist/capabilities/index.d.ts.map +1 -0
- package/dist/capabilities/index.js +92 -0
- package/dist/capabilities/index.js.map +1 -0
- package/dist/config/registry.d.ts +2 -1
- package/dist/config/registry.d.ts.map +1 -1
- package/dist/config/registry.js +3 -2
- package/dist/config/registry.js.map +1 -1
- package/dist/connector/index.d.ts +4 -4
- package/dist/connector/index.d.ts.map +1 -1
- package/dist/connector/index.js +3 -3
- package/dist/connector/index.js.map +1 -1
- package/dist/connector/mcp/adapter.d.ts +16 -1
- package/dist/connector/mcp/adapter.d.ts.map +1 -1
- package/dist/connector/mcp/adapter.js +60 -4
- package/dist/connector/mcp/adapter.js.map +1 -1
- package/dist/connector/mcp/client.d.ts +13 -4
- package/dist/connector/mcp/client.d.ts.map +1 -1
- package/dist/connector/mcp/client.js +20 -3
- package/dist/connector/mcp/client.js.map +1 -1
- package/dist/connector/mcp/discovery.d.ts +24 -1
- package/dist/connector/mcp/discovery.d.ts.map +1 -1
- package/dist/connector/mcp/discovery.js +44 -0
- package/dist/connector/mcp/discovery.js.map +1 -1
- package/dist/connector/mcp/index.d.ts +2 -0
- package/dist/connector/mcp/index.d.ts.map +1 -1
- package/dist/connector/mcp/index.js +11 -0
- package/dist/connector/mcp/index.js.map +1 -1
- package/dist/connector/mcp/mcp-toolset.d.ts +133 -0
- package/dist/connector/mcp/mcp-toolset.d.ts.map +1 -0
- package/dist/connector/mcp/mcp-toolset.js +399 -0
- package/dist/connector/mcp/mcp-toolset.js.map +1 -0
- package/dist/connector/tools/index.d.ts +2 -2
- package/dist/connector/tools/index.d.ts.map +1 -1
- package/dist/connector/tools/index.js +1 -1
- package/dist/connector/tools/index.js.map +1 -1
- package/dist/connector/tools/router.d.ts +15 -13
- package/dist/connector/tools/router.d.ts.map +1 -1
- package/dist/connector/tools/router.js +30 -51
- package/dist/connector/tools/router.js.map +1 -1
- package/dist/contracts/a2a.d.ts +2 -2
- package/dist/directory/derive-supervisor.d.ts +2 -2
- package/dist/directory/derive-supervisor.d.ts.map +1 -1
- package/dist/directory/derive-supervisor.js +6 -7
- package/dist/directory/derive-supervisor.js.map +1 -1
- package/dist/directory/derive.d.ts.map +1 -1
- package/dist/directory/derive.js +5 -5
- package/dist/directory/derive.js.map +1 -1
- package/dist/execution/code-runtime/types.d.ts +2 -2
- package/dist/execution/code-runtime/types.js +1 -1
- package/dist/invariants/index.d.ts +2 -1
- package/dist/invariants/index.d.ts.map +1 -1
- package/dist/invariants/index.js +3 -2
- package/dist/invariants/index.js.map +1 -1
- package/dist/manager/agent/lifecycle.d.ts.map +1 -1
- package/dist/manager/agent/lifecycle.js +9 -0
- package/dist/manager/agent/lifecycle.js.map +1 -1
- package/dist/manager/connector/environment.d.ts +6 -0
- package/dist/manager/connector/environment.d.ts.map +1 -1
- package/dist/manager/connector/environment.js +11 -4
- package/dist/manager/connector/environment.js.map +1 -1
- package/dist/manager/connector/index.d.ts +2 -2
- package/dist/manager/connector/index.d.ts.map +1 -1
- package/dist/manager/connector/index.js +2 -2
- package/dist/manager/connector/index.js.map +1 -1
- package/dist/manager/connector/tenant.d.ts +6 -0
- package/dist/manager/connector/tenant.d.ts.map +1 -1
- package/dist/manager/connector/tenant.js +11 -4
- package/dist/manager/connector/tenant.js.map +1 -1
- package/dist/manager/index.d.ts +2 -2
- package/dist/manager/index.d.ts.map +1 -1
- package/dist/manager/index.js +2 -2
- package/dist/manager/index.js.map +1 -1
- package/dist/manager/resident/learning-observation.d.ts +4 -4
- package/dist/manager/resident/learning.d.ts +36 -36
- package/dist/manager/session/attribution.d.ts +22 -0
- package/dist/manager/session/attribution.d.ts.map +1 -0
- package/dist/manager/session/attribution.js +64 -0
- package/dist/manager/session/attribution.js.map +1 -0
- package/dist/manager/session/turn-recorder.d.ts +14 -0
- package/dist/manager/session/turn-recorder.d.ts.map +1 -1
- package/dist/manager/session/turn-recorder.js +208 -55
- package/dist/manager/session/turn-recorder.js.map +1 -1
- package/dist/peers/address.d.ts +36 -0
- package/dist/peers/address.d.ts.map +1 -0
- package/dist/peers/address.js +52 -0
- package/dist/peers/address.js.map +1 -0
- package/dist/peers/client.d.ts +47 -0
- package/dist/peers/client.d.ts.map +1 -0
- package/dist/peers/client.js +132 -0
- package/dist/peers/client.js.map +1 -0
- package/dist/peers/dir.d.ts +88 -0
- package/dist/peers/dir.d.ts.map +1 -0
- package/dist/peers/dir.js +139 -0
- package/dist/peers/dir.js.map +1 -0
- package/dist/peers/endpoint.d.ts +144 -0
- package/dist/peers/endpoint.d.ts.map +1 -0
- package/dist/peers/endpoint.js +420 -0
- package/dist/peers/endpoint.js.map +1 -0
- package/dist/peers/envelope.d.ts +42 -0
- package/dist/peers/envelope.d.ts.map +1 -0
- package/dist/peers/envelope.js +110 -0
- package/dist/peers/envelope.js.map +1 -0
- package/dist/peers/index.d.ts +30 -0
- package/dist/peers/index.d.ts.map +1 -0
- package/dist/peers/index.js +22 -0
- package/dist/peers/index.js.map +1 -0
- package/dist/peers/protocol.d.ts +645 -0
- package/dist/peers/protocol.d.ts.map +1 -0
- package/dist/peers/protocol.js +151 -0
- package/dist/peers/protocol.js.map +1 -0
- package/dist/peers/record.d.ts +71 -0
- package/dist/peers/record.d.ts.map +1 -0
- package/dist/peers/record.js +45 -0
- package/dist/peers/record.js.map +1 -0
- package/dist/peers/registry.d.ts +54 -0
- package/dist/peers/registry.d.ts.map +1 -0
- package/dist/peers/registry.js +213 -0
- package/dist/peers/registry.js.map +1 -0
- package/dist/plugin/define.d.ts +24 -0
- package/dist/plugin/define.d.ts.map +1 -0
- package/dist/plugin/define.js +42 -0
- package/dist/plugin/define.js.map +1 -0
- package/dist/plugin/index.d.ts +2 -0
- package/dist/plugin/index.d.ts.map +1 -1
- package/dist/plugin/index.js +1 -0
- package/dist/plugin/index.js.map +1 -1
- package/dist/plugin/lifecycle.d.ts +27 -3
- package/dist/plugin/lifecycle.d.ts.map +1 -1
- package/dist/plugin/lifecycle.js +242 -92
- package/dist/plugin/lifecycle.js.map +1 -1
- package/dist/plugin/resolver.d.ts +2 -2
- package/dist/plugin/resolver.d.ts.map +1 -1
- package/dist/plugin/resolver.js.map +1 -1
- package/dist/plugin/shell-hook.d.ts.map +1 -1
- package/dist/plugin/shell-hook.js +17 -3
- package/dist/plugin/shell-hook.js.map +1 -1
- package/dist/probe/errors.d.ts +2 -1
- package/dist/probe/errors.d.ts.map +1 -1
- package/dist/probe/errors.js +3 -2
- package/dist/probe/errors.js.map +1 -1
- package/dist/prompt/coding-agent-doctrine.d.ts +18 -7
- package/dist/prompt/coding-agent-doctrine.d.ts.map +1 -1
- package/dist/prompt/coding-agent-doctrine.js +11 -6
- package/dist/prompt/coding-agent-doctrine.js.map +1 -1
- package/dist/prompt/contributions.d.ts +4 -1
- package/dist/prompt/contributions.d.ts.map +1 -1
- package/dist/prompt/contributions.js +7 -2
- package/dist/prompt/contributions.js.map +1 -1
- package/dist/prompt/index.d.ts +1 -1
- package/dist/prompt/index.d.ts.map +1 -1
- package/dist/prompt/index.js +1 -1
- package/dist/prompt/index.js.map +1 -1
- package/dist/provider/collect-chat-completion.d.ts +6 -1
- package/dist/provider/collect-chat-completion.d.ts.map +1 -1
- package/dist/provider/collect-chat-completion.js +88 -10
- package/dist/provider/collect-chat-completion.js.map +1 -1
- package/dist/provider/mock.d.ts.map +1 -1
- package/dist/provider/mock.js +23 -6
- package/dist/provider/mock.js.map +1 -1
- package/dist/provider/registry.d.ts +2 -1
- package/dist/provider/registry.d.ts.map +1 -1
- package/dist/provider/registry.js +3 -2
- package/dist/provider/registry.js.map +1 -1
- package/dist/provider/tool-call-framing.d.ts +164 -0
- package/dist/provider/tool-call-framing.d.ts.map +1 -0
- package/dist/provider/tool-call-framing.js +163 -0
- package/dist/provider/tool-call-framing.js.map +1 -0
- package/dist/public-runtime.d.ts +24 -11
- package/dist/public-runtime.d.ts.map +1 -1
- package/dist/public-runtime.js +45 -9
- package/dist/public-runtime.js.map +1 -1
- package/dist/public-tools.d.ts +6 -4
- package/dist/public-tools.d.ts.map +1 -1
- package/dist/public-tools.js +8 -3
- package/dist/public-tools.js.map +1 -1
- package/dist/public-types.d.ts +13 -2
- package/dist/public-types.d.ts.map +1 -1
- package/dist/read-model/registry.d.ts +2 -1
- package/dist/read-model/registry.d.ts.map +1 -1
- package/dist/read-model/registry.js +3 -2
- package/dist/read-model/registry.js.map +1 -1
- package/dist/registry/ManagedRegistry.d.ts +30 -0
- package/dist/registry/ManagedRegistry.d.ts.map +1 -1
- package/dist/registry/ManagedRegistry.js +45 -6
- package/dist/registry/ManagedRegistry.js.map +1 -1
- package/dist/registry/collision.d.ts +57 -0
- package/dist/registry/collision.d.ts.map +1 -0
- package/dist/registry/collision.js +41 -0
- package/dist/registry/collision.js.map +1 -0
- package/dist/registry/command/index.d.ts +5 -3
- package/dist/registry/command/index.d.ts.map +1 -1
- package/dist/registry/command/index.js +6 -4
- package/dist/registry/command/index.js.map +1 -1
- package/dist/registry/index.d.ts +3 -4
- package/dist/registry/index.d.ts.map +1 -1
- package/dist/registry/index.js +2 -2
- package/dist/registry/index.js.map +1 -1
- package/dist/registry/plugin/index.d.ts.map +1 -1
- package/dist/registry/plugin/index.js +14 -1
- package/dist/registry/plugin/index.js.map +1 -1
- package/dist/registry/tool/callable.d.ts +7 -7
- package/dist/registry/tool/callable.d.ts.map +1 -1
- package/dist/registry/tool/callable.js +6 -7
- package/dist/registry/tool/callable.js.map +1 -1
- package/dist/registry/tool/execute.d.ts +14 -77
- package/dist/registry/tool/execute.d.ts.map +1 -1
- package/dist/registry/tool/execute.js +15 -727
- package/dist/registry/tool/execute.js.map +1 -1
- package/dist/registry/tool/portable.d.ts +25 -0
- package/dist/registry/tool/portable.d.ts.map +1 -1
- package/dist/registry/tool/portable.js +50 -0
- package/dist/registry/tool/portable.js.map +1 -1
- package/dist/registry/tool/presentation.d.ts +6 -5
- package/dist/registry/tool/presentation.d.ts.map +1 -1
- package/dist/registry/tool/presentation.js +3 -3
- package/dist/registry/tool/presentation.js.map +1 -1
- package/dist/runtime/bidi/session.d.ts +5 -4
- package/dist/runtime/bidi/session.d.ts.map +1 -1
- package/dist/runtime/bidi/session.js +18 -1
- package/dist/runtime/bidi/session.js.map +1 -1
- package/dist/runtime/query/executor/tool-call-admission.d.ts +45 -2
- package/dist/runtime/query/executor/tool-call-admission.d.ts.map +1 -1
- package/dist/runtime/query/executor/tool-call-admission.js +189 -5
- package/dist/runtime/query/executor/tool-call-admission.js.map +1 -1
- package/dist/runtime/query/executor.d.ts +33 -3
- package/dist/runtime/query/executor.d.ts.map +1 -1
- package/dist/runtime/query/executor.js +86 -10
- package/dist/runtime/query/executor.js.map +1 -1
- package/dist/runtime/query/file-evidence-replay.d.ts +1 -1
- package/dist/runtime/query/file-evidence-replay.d.ts.map +1 -1
- package/dist/runtime/query/file-evidence-replay.js +8 -7
- package/dist/runtime/query/file-evidence-replay.js.map +1 -1
- package/dist/runtime/query/fork/prepare.d.ts +4 -1
- package/dist/runtime/query/fork/prepare.d.ts.map +1 -1
- package/dist/runtime/query/fork/prepare.js +4 -0
- package/dist/runtime/query/fork/prepare.js.map +1 -1
- package/dist/runtime/query/guardrail-presets.d.ts +4 -3
- package/dist/runtime/query/guardrail-presets.d.ts.map +1 -1
- package/dist/runtime/query/guardrail-presets.js +4 -3
- package/dist/runtime/query/guardrail-presets.js.map +1 -1
- package/dist/runtime/query/index.d.ts +23 -10
- package/dist/runtime/query/index.d.ts.map +1 -1
- package/dist/runtime/query/index.js +149 -70
- 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 +8 -1
- package/dist/runtime/query/iteration/index.js.map +1 -1
- package/dist/runtime/query/iteration/phases/compaction.js +1 -1
- package/dist/runtime/query/iteration/phases/compaction.js.map +1 -1
- package/dist/runtime/query/iteration/phases/context.d.ts +2 -2
- package/dist/runtime/query/iteration/phases/context.d.ts.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 +55 -2
- 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 +342 -116
- package/dist/runtime/query/iteration/stream-turn.js.map +1 -1
- package/dist/runtime/query/iteration/tool-input.d.ts +79 -0
- package/dist/runtime/query/iteration/tool-input.d.ts.map +1 -0
- package/dist/runtime/query/iteration/tool-input.js +291 -0
- package/dist/runtime/query/iteration/tool-input.js.map +1 -0
- package/dist/runtime/query/observation-context.d.ts +2 -2
- package/dist/runtime/query/observation-context.d.ts.map +1 -1
- package/dist/runtime/query/observation-context.js.map +1 -1
- package/dist/runtime/query/prelude-lease.d.ts +18 -0
- package/dist/runtime/query/prelude-lease.d.ts.map +1 -0
- package/dist/runtime/query/prelude-lease.js +121 -0
- package/dist/runtime/query/prelude-lease.js.map +1 -0
- package/dist/runtime/query/prepare-turn.d.ts.map +1 -1
- package/dist/runtime/query/prepare-turn.js +386 -187
- package/dist/runtime/query/prepare-turn.js.map +1 -1
- package/dist/runtime/query/prompt-cache.d.ts +2 -2
- package/dist/runtime/query/prompt-cache.d.ts.map +1 -1
- package/dist/runtime/query/prompt.d.ts +2 -2
- package/dist/runtime/query/prompt.d.ts.map +1 -1
- package/dist/runtime/query/prompt.js +1 -1
- package/dist/runtime/query/prompt.js.map +1 -1
- package/dist/runtime/query/resume-session.d.ts.map +1 -1
- package/dist/runtime/query/resume-session.js +37 -2
- package/dist/runtime/query/resume-session.js.map +1 -1
- package/dist/runtime/query/review-policy.d.ts +22 -3
- package/dist/runtime/query/review-policy.d.ts.map +1 -1
- package/dist/runtime/query/review-policy.js +84 -6
- package/dist/runtime/query/review-policy.js.map +1 -1
- package/dist/runtime/query/tooling.d.ts +3 -2
- package/dist/runtime/query/tooling.d.ts.map +1 -1
- package/dist/runtime/query/tooling.js.map +1 -1
- package/dist/runtime/query/turn-state.d.ts.map +1 -1
- package/dist/runtime/query/turn-state.js +5 -0
- package/dist/runtime/query/turn-state.js.map +1 -1
- package/dist/runtime/system-events.d.ts +112 -0
- package/dist/runtime/system-events.d.ts.map +1 -0
- package/dist/runtime/system-events.js +183 -0
- package/dist/runtime/system-events.js.map +1 -0
- package/dist/scheduler/delegating.d.ts +2 -1
- package/dist/scheduler/delegating.d.ts.map +1 -1
- package/dist/scheduler/delegating.js +3 -2
- package/dist/scheduler/delegating.js.map +1 -1
- package/dist/skills/index.d.ts +1 -1
- package/dist/skills/index.d.ts.map +1 -1
- package/dist/skills/index.js +1 -1
- package/dist/skills/index.js.map +1 -1
- package/dist/skills/registry.d.ts +12 -0
- package/dist/skills/registry.d.ts.map +1 -1
- package/dist/skills/registry.js +19 -0
- package/dist/skills/registry.js.map +1 -1
- package/dist/store/evidence/index-page.d.ts +2 -2
- package/dist/store/session-log/conformance.d.ts +1 -1
- package/dist/store/session-log/conformance.d.ts.map +1 -1
- package/dist/store/session-log/conformance.js +49 -8
- package/dist/store/session-log/conformance.js.map +1 -1
- package/dist/store/session-log/core.d.ts +8 -3
- package/dist/store/session-log/core.d.ts.map +1 -1
- package/dist/store/session-log/core.js +2 -1
- package/dist/store/session-log/core.js.map +1 -1
- package/dist/store/session-log/fold.d.ts +12 -0
- package/dist/store/session-log/fold.d.ts.map +1 -1
- package/dist/store/session-log/fold.js +57 -7
- package/dist/store/session-log/fold.js.map +1 -1
- package/dist/store/session-log/index.d.ts +2 -2
- package/dist/store/session-log/index.d.ts.map +1 -1
- package/dist/store/session-log/index.js +1 -1
- package/dist/store/session-log/index.js.map +1 -1
- package/dist/test-support/toolset.d.ts +19 -0
- package/dist/test-support/toolset.d.ts.map +1 -0
- package/dist/test-support/toolset.js +20 -0
- package/dist/test-support/toolset.js.map +1 -0
- package/dist/tools/builtins/bash.d.ts +29 -0
- package/dist/tools/builtins/bash.d.ts.map +1 -1
- package/dist/tools/builtins/bash.js +19 -9
- package/dist/tools/builtins/bash.js.map +1 -1
- package/dist/tools/builtins/browser-url.d.ts +1 -1
- package/dist/tools/builtins/browser-url.js +1 -1
- package/dist/tools/builtins/browser.d.ts +6 -6
- package/dist/tools/builtins/computer-use.d.ts.map +1 -1
- package/dist/tools/builtins/computer-use.js +19 -11
- package/dist/tools/builtins/computer-use.js.map +1 -1
- package/dist/tools/builtins/edit.d.ts.map +1 -1
- package/dist/tools/builtins/edit.js +9 -1
- package/dist/tools/builtins/edit.js.map +1 -1
- package/dist/tools/builtins/json-string-hint.d.ts +15 -0
- package/dist/tools/builtins/json-string-hint.d.ts.map +1 -0
- package/dist/tools/builtins/json-string-hint.js +17 -0
- package/dist/tools/builtins/json-string-hint.js.map +1 -0
- package/dist/tools/builtins/search-tools.d.ts.map +1 -1
- package/dist/tools/builtins/search-tools.js +7 -15
- package/dist/tools/builtins/search-tools.js.map +1 -1
- package/dist/tools/builtins/write-file.d.ts.map +1 -1
- package/dist/tools/builtins/write-file.js +11 -0
- package/dist/tools/builtins/write-file.js.map +1 -1
- package/dist/tools/command-shell.d.ts +10 -0
- package/dist/tools/command-shell.d.ts.map +1 -1
- package/dist/tools/command-shell.js +45 -1
- package/dist/tools/command-shell.js.map +1 -1
- package/dist/tools/coordinator/agent.d.ts.map +1 -1
- package/dist/tools/coordinator/agent.js +5 -0
- package/dist/tools/coordinator/agent.js.map +1 -1
- package/dist/tools/coordinator/ask-user-question.d.ts.map +1 -1
- package/dist/tools/coordinator/ask-user-question.js +26 -13
- package/dist/tools/coordinator/ask-user-question.js.map +1 -1
- package/dist/tools/coordinator/index.d.ts.map +1 -1
- package/dist/tools/coordinator/index.js +5 -0
- package/dist/tools/coordinator/index.js.map +1 -1
- package/dist/tools/coordinator/question-options.d.ts +78 -0
- package/dist/tools/coordinator/question-options.d.ts.map +1 -0
- package/dist/tools/coordinator/question-options.js +153 -0
- package/dist/tools/coordinator/question-options.js.map +1 -0
- package/dist/tools/defineTool.d.ts +10 -0
- package/dist/tools/defineTool.d.ts.map +1 -1
- package/dist/tools/defineTool.js +17 -0
- package/dist/tools/defineTool.js.map +1 -1
- package/dist/tools/memory/search.d.ts.map +1 -1
- package/dist/tools/memory/search.js +4 -1
- package/dist/tools/memory/search.js.map +1 -1
- package/dist/tools/memory/update.d.ts.map +1 -1
- package/dist/tools/memory/update.js +8 -5
- package/dist/tools/memory/update.js.map +1 -1
- package/dist/tools/render-nonce.d.ts +47 -0
- package/dist/tools/render-nonce.d.ts.map +1 -0
- package/dist/tools/render-nonce.js +63 -0
- package/dist/tools/render-nonce.js.map +1 -0
- package/dist/tools/roster.d.ts +46 -19
- package/dist/tools/roster.d.ts.map +1 -1
- package/dist/tools/roster.js +63 -33
- package/dist/tools/roster.js.map +1 -1
- package/dist/tools/schedules/schedule-tool.d.ts.map +1 -1
- package/dist/tools/schedules/schedule-tool.js +94 -14
- package/dist/tools/schedules/schedule-tool.js.map +1 -1
- package/dist/tools/schedules/types.d.ts +52 -6
- package/dist/tools/schedules/types.d.ts.map +1 -1
- package/dist/tools/trusted-read-only.d.ts +9 -5
- package/dist/tools/trusted-read-only.d.ts.map +1 -1
- package/dist/tools/trusted-read-only.js +14 -10
- package/dist/tools/trusted-read-only.js.map +1 -1
- package/dist/tools/untrusted-envelope.d.ts +67 -28
- package/dist/tools/untrusted-envelope.d.ts.map +1 -1
- package/dist/tools/untrusted-envelope.js +108 -59
- package/dist/tools/untrusted-envelope.js.map +1 -1
- package/dist/toolsets/combine.d.ts +44 -0
- package/dist/toolsets/combine.d.ts.map +1 -0
- package/dist/toolsets/combine.js +153 -0
- package/dist/toolsets/combine.js.map +1 -0
- package/dist/toolsets/manager.d.ts +201 -0
- package/dist/toolsets/manager.d.ts.map +1 -0
- package/dist/toolsets/manager.js +837 -0
- package/dist/toolsets/manager.js.map +1 -0
- package/dist/toolsets/source-glob.d.ts +15 -0
- package/dist/toolsets/source-glob.d.ts.map +1 -0
- package/dist/toolsets/source-glob.js +23 -0
- package/dist/toolsets/source-glob.js.map +1 -0
- package/dist/toolsets/toolset.d.ts +20 -0
- package/dist/toolsets/toolset.d.ts.map +1 -0
- package/dist/toolsets/toolset.js +28 -0
- package/dist/toolsets/toolset.js.map +1 -0
- package/dist/toolsets/types.d.ts +128 -0
- package/dist/toolsets/types.d.ts.map +1 -0
- package/dist/toolsets/types.js +33 -0
- package/dist/toolsets/types.js.map +1 -0
- package/dist/toolsets/wrappers.d.ts +59 -0
- package/dist/toolsets/wrappers.d.ts.map +1 -0
- package/dist/toolsets/wrappers.js +165 -0
- package/dist/toolsets/wrappers.js.map +1 -0
- package/dist/types/agent/base.d.ts +27 -16
- package/dist/types/agent/base.d.ts.map +1 -1
- package/dist/types/agent/index.d.ts +1 -0
- package/dist/types/agent/index.d.ts.map +1 -1
- package/dist/types/agent/index.js +1 -0
- package/dist/types/agent/index.js.map +1 -1
- package/dist/types/agent/pipeline.d.ts +2 -0
- package/dist/types/agent/pipeline.d.ts.map +1 -1
- package/dist/types/agent/query.d.ts +117 -0
- package/dist/types/agent/query.d.ts.map +1 -0
- package/dist/types/agent/query.js +2 -0
- package/dist/types/agent/query.js.map +1 -0
- package/dist/types/agent/reactive.d.ts +2 -129
- package/dist/types/agent/reactive.d.ts.map +1 -1
- package/dist/types/agent/router.d.ts +2 -0
- package/dist/types/agent/router.d.ts.map +1 -1
- package/dist/types/agent/supervisor.d.ts +5 -2
- package/dist/types/agent/supervisor.d.ts.map +1 -1
- package/dist/types/authorization/index.d.ts +49 -12
- package/dist/types/authorization/index.d.ts.map +1 -1
- package/dist/types/authorization/index.js +6 -0
- package/dist/types/authorization/index.js.map +1 -1
- package/dist/types/connector/mcp.d.ts +32 -0
- package/dist/types/connector/mcp.d.ts.map +1 -1
- package/dist/types/errors/index.d.ts +15 -0
- package/dist/types/errors/index.d.ts.map +1 -1
- package/dist/types/errors/index.js.map +1 -1
- package/dist/types/hitl/index.d.ts +57 -0
- package/dist/types/hitl/index.d.ts.map +1 -1
- package/dist/types/hitl/index.js.map +1 -1
- package/dist/types/message/index.d.ts +130 -9
- package/dist/types/message/index.d.ts.map +1 -1
- package/dist/types/message/index.js +4 -1
- package/dist/types/message/index.js.map +1 -1
- package/dist/types/plugin/index.d.ts +22 -4
- package/dist/types/plugin/index.d.ts.map +1 -1
- package/dist/types/plugin/index.js +1 -0
- package/dist/types/plugin/index.js.map +1 -1
- package/dist/types/provider/chat.d.ts +5 -0
- package/dist/types/provider/chat.d.ts.map +1 -1
- package/dist/types/provider/config.d.ts +8 -3
- package/dist/types/provider/config.d.ts.map +1 -1
- package/dist/types/provider/stream.d.ts +39 -0
- package/dist/types/provider/stream.d.ts.map +1 -1
- package/dist/types/sandbox/index.d.ts +1 -1
- package/dist/types/session/events.d.ts +14 -3
- package/dist/types/session/events.d.ts.map +1 -1
- package/dist/types/session/events.js.map +1 -1
- package/dist/types/tool/index.d.ts +152 -91
- package/dist/types/tool/index.d.ts.map +1 -1
- package/dist/types/tool/index.js.map +1 -1
- package/dist/types/toolset/index.d.ts +10 -40
- package/dist/types/toolset/index.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/advisory/history.ts +27 -2
- package/src/advisory/index.ts +1 -1
- package/src/advisory/registry.ts +33 -0
- package/src/agents/AGENTS.md +14 -7
- package/src/agents/PipelineAgent.ts +2 -303
- package/src/agents/QueryAgent.ts +269 -0
- package/src/agents/ReactiveAgent.ts +6 -216
- package/src/agents/RouterAgent.ts +2 -337
- package/src/agents/SupervisorAgent.ts +3 -476
- package/src/agents/defineAgent.ts +13 -2
- package/src/agents/examples/PipelineAgent.ts +302 -0
- package/src/agents/examples/RouterAgent.ts +338 -0
- package/src/agents/examples/SupervisorAgent.ts +472 -0
- package/src/agents/explore.ts +6 -3
- package/src/agents/forward-options.ts +37 -0
- package/src/agents/index.ts +2 -0
- package/src/agents/runAgent.ts +144 -37
- package/src/authorization/command-line.ts +2 -2
- package/src/authorization/gate.ts +21 -1
- package/src/authorization/program.ts +773 -0
- package/src/authorization/reexec-wrapper.ts +589 -0
- package/src/authorization/rules.ts +18 -1
- package/src/authorization/shell-lexer.ts +104 -59
- package/src/bridge/sse/mapper.ts +6 -0
- package/src/capabilities/index.ts +157 -0
- package/src/config/registry.ts +4 -1
- package/src/connector/index.ts +9 -2
- package/src/connector/mcp/adapter.ts +58 -3
- package/src/connector/mcp/client.ts +20 -4
- package/src/connector/mcp/discovery.ts +60 -0
- package/src/connector/mcp/index.ts +13 -0
- package/src/connector/mcp/mcp-toolset.ts +515 -0
- package/src/connector/tools/index.ts +2 -2
- package/src/connector/tools/router.ts +35 -58
- package/src/directory/derive-supervisor.ts +12 -8
- package/src/directory/derive.ts +8 -5
- package/src/execution/code-runtime/types.ts +2 -2
- package/src/invariants/index.ts +4 -1
- package/src/manager/agent/lifecycle.ts +9 -0
- package/src/manager/connector/environment.ts +17 -4
- package/src/manager/connector/index.ts +2 -2
- package/src/manager/connector/tenant.ts +17 -4
- package/src/manager/index.ts +2 -2
- package/src/manager/session/attribution.ts +79 -0
- package/src/manager/session/turn-recorder.ts +211 -55
- package/src/peers/address.ts +58 -0
- package/src/peers/client.ts +202 -0
- package/src/peers/dir.ts +176 -0
- package/src/peers/endpoint.ts +564 -0
- package/src/peers/envelope.ts +121 -0
- package/src/peers/index.ts +96 -0
- package/src/peers/protocol.ts +196 -0
- package/src/peers/record.ts +56 -0
- package/src/peers/registry.ts +241 -0
- package/src/plugin/define.ts +68 -0
- package/src/plugin/index.ts +2 -0
- package/src/plugin/lifecycle.ts +286 -106
- package/src/plugin/resolver.ts +6 -3
- package/src/plugin/shell-hook.ts +21 -5
- package/src/probe/errors.ts +4 -1
- package/src/prompt/coding-agent-doctrine.ts +22 -10
- package/src/prompt/contributions.ts +12 -2
- package/src/prompt/index.ts +1 -0
- package/src/provider/collect-chat-completion.ts +96 -11
- package/src/provider/mock.ts +24 -6
- package/src/provider/registry.ts +4 -1
- package/src/provider/tool-call-framing.ts +226 -0
- package/src/public-runtime.ts +136 -7
- package/src/public-tools.ts +24 -4
- package/src/public-types.ts +60 -6
- package/src/read-model/registry.ts +7 -2
- package/src/registry/ManagedRegistry.ts +57 -6
- package/src/registry/collision.ts +64 -0
- package/src/registry/command/index.ts +7 -3
- package/src/registry/index.ts +3 -9
- package/src/registry/plugin/index.ts +14 -1
- package/src/registry/tool/callable.ts +8 -9
- package/src/registry/tool/execute.ts +16 -846
- package/src/registry/tool/portable.ts +59 -0
- package/src/registry/tool/presentation.ts +6 -5
- package/src/runtime/bidi/session.ts +24 -5
- package/src/runtime/query/executor/tool-call-admission.ts +228 -6
- package/src/runtime/query/executor.ts +110 -12
- package/src/runtime/query/file-evidence-replay.ts +8 -7
- package/src/runtime/query/fork/prepare.ts +6 -1
- package/src/runtime/query/guardrail-presets.ts +4 -3
- package/src/runtime/query/index.ts +199 -101
- package/src/runtime/query/iteration/index.ts +13 -3
- package/src/runtime/query/iteration/phases/compaction.ts +1 -1
- package/src/runtime/query/iteration/phases/context.ts +2 -2
- package/src/runtime/query/iteration/phases/tool-review.ts +59 -2
- package/src/runtime/query/iteration/stream-turn.ts +390 -136
- package/src/runtime/query/iteration/tool-input.ts +284 -0
- package/src/runtime/query/observation-context.ts +2 -2
- package/src/runtime/query/prelude-lease.ts +132 -0
- package/src/runtime/query/prepare-turn.ts +477 -198
- package/src/runtime/query/prompt-cache.ts +2 -2
- package/src/runtime/query/prompt.ts +4 -4
- package/src/runtime/query/resume-session.ts +42 -3
- package/src/runtime/query/review-policy.ts +87 -9
- package/src/runtime/query/tooling.ts +3 -6
- package/src/runtime/query/turn-state.ts +4 -0
- package/src/runtime/system-events.ts +246 -0
- package/src/scheduler/delegating.ts +7 -2
- package/src/skills/index.ts +1 -1
- package/src/skills/registry.ts +25 -0
- package/src/store/session-log/conformance.ts +51 -8
- package/src/store/session-log/core.ts +10 -4
- package/src/store/session-log/fold.ts +33 -7
- package/src/store/session-log/index.ts +2 -0
- package/src/test-support/toolset.ts +23 -0
- package/src/tools/builtins/bash.ts +27 -10
- package/src/tools/builtins/browser-url.ts +1 -1
- package/src/tools/builtins/computer-use.ts +21 -11
- package/src/tools/builtins/edit.ts +12 -2
- package/src/tools/builtins/json-string-hint.ts +16 -0
- package/src/tools/builtins/search-tools.ts +7 -20
- package/src/tools/builtins/write-file.ts +12 -0
- package/src/tools/command-shell.ts +46 -1
- package/src/tools/coordinator/agent.ts +6 -0
- package/src/tools/coordinator/ask-user-question.ts +29 -15
- package/src/tools/coordinator/index.ts +6 -0
- package/src/tools/coordinator/question-options.ts +195 -0
- package/src/tools/defineTool.ts +28 -0
- package/src/tools/memory/search.ts +4 -1
- package/src/tools/memory/update.ts +8 -5
- package/src/tools/render-nonce.ts +69 -0
- package/src/tools/roster.ts +84 -33
- package/src/tools/schedules/schedule-tool.ts +107 -14
- package/src/tools/schedules/types.ts +52 -6
- package/src/tools/trusted-read-only.ts +19 -10
- package/src/tools/untrusted-envelope.ts +121 -57
- package/src/toolsets/combine.ts +181 -0
- package/src/toolsets/manager.ts +996 -0
- package/src/toolsets/source-glob.ts +22 -0
- package/src/toolsets/toolset.ts +31 -0
- package/src/toolsets/types.ts +154 -0
- package/src/toolsets/wrappers.ts +191 -0
- package/src/types/agent/base.ts +29 -16
- package/src/types/agent/index.ts +1 -0
- package/src/types/agent/pipeline.ts +2 -0
- package/src/types/agent/query.ts +129 -0
- package/src/types/agent/reactive.ts +5 -142
- package/src/types/agent/router.ts +2 -0
- package/src/types/agent/supervisor.ts +5 -2
- package/src/types/authorization/index.ts +12 -0
- package/src/types/connector/mcp.ts +32 -0
- package/src/types/errors/index.ts +15 -0
- package/src/types/hitl/index.ts +57 -0
- package/src/types/message/index.ts +135 -7
- package/src/types/plugin/index.ts +44 -21
- package/src/types/provider/chat.ts +5 -0
- package/src/types/provider/config.ts +8 -3
- package/src/types/provider/stream.ts +39 -0
- package/src/types/sandbox/index.ts +1 -1
- package/src/types/session/events.ts +14 -3
- package/src/types/tool/index.ts +154 -105
- package/src/types/toolset/index.ts +10 -47
- package/dist/registry/toolset/catalog.d.ts +0 -42
- package/dist/registry/toolset/catalog.d.ts.map +0 -1
- package/dist/registry/toolset/catalog.js +0 -234
- package/dist/registry/toolset/catalog.js.map +0 -1
- package/src/registry/toolset/catalog.ts +0 -308
package/src/advisory/registry.ts
CHANGED
|
@@ -1,6 +1,22 @@
|
|
|
1
1
|
import { BaseRegistry } from '../registry/BaseRegistry.js'
|
|
2
|
+
import { RegistryCollisionError } from '../registry/collision.js'
|
|
2
3
|
import type { AdvisorDefinition } from '../types/advisory/index.js'
|
|
3
4
|
|
|
5
|
+
/** Two advisors claiming one id. */
|
|
6
|
+
export class AdvisorCollisionError extends RegistryCollisionError {
|
|
7
|
+
readonly advisorId: string
|
|
8
|
+
|
|
9
|
+
constructor(advisorId: string) {
|
|
10
|
+
super(
|
|
11
|
+
'AdvisorRegistry',
|
|
12
|
+
advisorId,
|
|
13
|
+
`Advisor "${advisorId}" is already registered. Two advisors picked the same id, or the same advisor was registered twice — pick a different id, or find the second registration.`,
|
|
14
|
+
)
|
|
15
|
+
this.name = 'AdvisorCollisionError'
|
|
16
|
+
this.advisorId = advisorId
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
|
|
4
20
|
export class AdvisorRegistry extends BaseRegistry<AdvisorDefinition> {
|
|
5
21
|
private readonly defaultId: string | undefined
|
|
6
22
|
|
|
@@ -12,6 +28,23 @@ export class AdvisorRegistry extends BaseRegistry<AdvisorDefinition> {
|
|
|
12
28
|
this.defaultId = defaultId
|
|
13
29
|
}
|
|
14
30
|
|
|
31
|
+
/**
|
|
32
|
+
* A second advisor claiming an id an earlier one already holds used to
|
|
33
|
+
* overwrite in total silence (see
|
|
34
|
+
* `gaps/critic-registry-collision-idiom-inconsistency.md`). Every SDK
|
|
35
|
+
* registry now throws on a duplicate id by default (see
|
|
36
|
+
* `registry/collision.ts`), and this one had no exception to name, so it
|
|
37
|
+
* converges too: two advisors sharing an id is a configuration mistake,
|
|
38
|
+
* not a supersession, and the loser vanishing silently is exactly the
|
|
39
|
+
* failure this now refuses instead of logging.
|
|
40
|
+
*/
|
|
41
|
+
override register(id: string, advisor: AdvisorDefinition): void {
|
|
42
|
+
if (this.has(id)) {
|
|
43
|
+
throw new AdvisorCollisionError(id)
|
|
44
|
+
}
|
|
45
|
+
super.register(id, advisor)
|
|
46
|
+
}
|
|
47
|
+
|
|
15
48
|
/**
|
|
16
49
|
* Resolves the advisor for a given request.
|
|
17
50
|
*
|
package/src/agents/AGENTS.md
CHANGED
|
@@ -13,12 +13,19 @@ folklore.
|
|
|
13
13
|
|
|
14
14
|
## What lives here
|
|
15
15
|
|
|
16
|
-
|
|
16
|
+
The `Agent` contract, `runAgent`/`query` entry points, and an optional
|
|
17
|
+
`QueryAgent` adapter are SDK infrastructure. Applications own their agent
|
|
18
|
+
identity and orchestration. The CLI's delegated agent lives in
|
|
19
|
+
`packages/cli/src/integrations/subagents/NamzuCliAgent.ts`.
|
|
17
20
|
|
|
18
|
-
|
|
21
|
+
`examples/` holds developer-authored orchestration patterns. Their former
|
|
22
|
+
exports remain as deprecated compatibility names; they do not define a closed
|
|
23
|
+
list of agent kinds.
|
|
24
|
+
|
|
25
|
+
- **`examples/PipelineAgent.ts`** — a fixed step list the developer wrote. The steps
|
|
19
26
|
run with **zero model turns between them**: the control flow is code, and
|
|
20
27
|
the model is called only where a step calls it.
|
|
21
|
-
- **`SupervisorAgent.ts`** — delegation driven by the model emitting
|
|
28
|
+
- **`examples/SupervisorAgent.ts`** — delegation driven by the model emitting
|
|
22
29
|
`create_task` tool calls. Note what this already does: **N `create_task`
|
|
23
30
|
blocks in one assistant turn run concurrently**, so fan-out costs one turn
|
|
24
31
|
for N children, not N turns. The mechanism, checked rather than assumed:
|
|
@@ -82,10 +89,10 @@ first one got lost.
|
|
|
82
89
|
|
|
83
90
|
## Working here
|
|
84
91
|
|
|
85
|
-
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
92
|
+
- `AgentCapabilities` is descriptive metadata. The manager does not enforce
|
|
93
|
+
its booleans. A host enforces tool access, subagent admission and concurrency
|
|
94
|
+
through its toolsets, authorization gate, manager and per-instance locking.
|
|
95
|
+
Do not treat a declared capability as permission or claim it is a runtime gate.
|
|
89
96
|
- `AbstractAgent` takes an injected `Logger`. Do not reach for
|
|
90
97
|
`getRootLogger()` here — see the log-standard gate,
|
|
91
98
|
which counts every call site.
|
|
@@ -1,303 +1,2 @@
|
|
|
1
|
-
/**
|
|
2
|
-
|
|
3
|
-
* one.
|
|
4
|
-
*
|
|
5
|
-
* This distinction has been attributed to a `packages/sdk/src/agents/
|
|
6
|
-
* AGENTS.md` that does not exist, so it is written here instead. The
|
|
7
|
-
* proposal it answers is a model that emits an orchestration SCRIPT --
|
|
8
|
-
* `agent()`, `parallel()`, `pipeline()` as globals -- executed in an
|
|
9
|
-
* isolate, so that control flow between steps costs no model turns.
|
|
10
|
-
*
|
|
11
|
-
* The saving is real and this class already realises most of it: the steps
|
|
12
|
-
* below run with zero model turns between them, and `SupervisorAgent`
|
|
13
|
-
* delegates without one. What a script would add is orchestration a
|
|
14
|
-
* developer did not anticipate, invented at runtime -- which is also the
|
|
15
|
-
* case where a wrong one is hardest to review before it runs.
|
|
16
|
-
*
|
|
17
|
-
* The blocking question is the trust boundary, not the value. `bash` from
|
|
18
|
-
* a model is mediated by `packages/sandbox` because code from a model is
|
|
19
|
-
* untrusted; a model-authored script is the same input through another
|
|
20
|
-
* door, and a strictly more powerful one, since it can call back into the
|
|
21
|
-
* agent surface. Running it in-process would leave the kernel's one clear
|
|
22
|
-
* confinement boundary covering the weaker case and not the stronger. So
|
|
23
|
-
* an isolate is mandatory rather than an optimisation, and the capability
|
|
24
|
-
* costs a second execution surface to secure, audit and version.
|
|
25
|
-
*
|
|
26
|
-
* That is the bar a reopen has to clear.
|
|
27
|
-
*/
|
|
28
|
-
|
|
29
|
-
import { withTokenBudget } from '../provider/token-budget.js'
|
|
30
|
-
import type { SessionTokenBudget } from '../store/budget/index.js'
|
|
31
|
-
import type {
|
|
32
|
-
AgentInput,
|
|
33
|
-
AgentMetadata,
|
|
34
|
-
PipelineAgentConfig,
|
|
35
|
-
PipelineAgentResult,
|
|
36
|
-
PipelineStepResult,
|
|
37
|
-
StepContext,
|
|
38
|
-
} from '../types/agent/index.js'
|
|
39
|
-
import type { SessionId, TurnId } from '../types/ids/index.js'
|
|
40
|
-
import type { SessionEvent, SessionEventListener } from '../types/session/events.js'
|
|
41
|
-
import type { TurnSettlement } from '../types/session/turn.js'
|
|
42
|
-
import { ZERO_COST } from '../utils/cost.js'
|
|
43
|
-
import { toErrorMessage } from '../utils/error.js'
|
|
44
|
-
import { generateMessageId } from '../utils/id.js'
|
|
45
|
-
import type { Logger } from '../utils/logger.js'
|
|
46
|
-
import { AbstractAgent } from './AbstractAgent.js'
|
|
47
|
-
import { resolveAgentBudget } from './budget.js'
|
|
48
|
-
|
|
49
|
-
export class PipelineAgent extends AbstractAgent<PipelineAgentConfig, PipelineAgentResult> {
|
|
50
|
-
readonly type = 'pipeline' as const
|
|
51
|
-
|
|
52
|
-
constructor(metadata: Omit<AgentMetadata, 'type' | 'capabilities'>, log?: Logger) {
|
|
53
|
-
super(
|
|
54
|
-
{
|
|
55
|
-
...metadata,
|
|
56
|
-
type: 'pipeline',
|
|
57
|
-
capabilities: {
|
|
58
|
-
supportsTools: false,
|
|
59
|
-
supportsStreaming: false,
|
|
60
|
-
supportsConcurrency: false,
|
|
61
|
-
supportsSubAgents: false,
|
|
62
|
-
},
|
|
63
|
-
},
|
|
64
|
-
log,
|
|
65
|
-
)
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
/**
|
|
69
|
-
* One turn at a time per instance.
|
|
70
|
-
*
|
|
71
|
-
* `abortController` and `currentSessionId` are instance state, so two
|
|
72
|
-
* overlapping turns share one abort controller — cancelling either kills
|
|
73
|
-
* both — and the second clobbers the first's session, so a later
|
|
74
|
-
* `cancel()` cancels the wrong children. Neither failure announces itself.
|
|
75
|
-
* A host that wants parallelism constructs a second instance.
|
|
76
|
-
*/
|
|
77
|
-
async run(
|
|
78
|
-
input: AgentInput,
|
|
79
|
-
config: PipelineAgentConfig,
|
|
80
|
-
listener?: SessionEventListener,
|
|
81
|
-
): Promise<PipelineAgentResult> {
|
|
82
|
-
return await this.underIdempotencyKey(config.idempotencyKey, () =>
|
|
83
|
-
this.underInvocationLock(() => this.runExclusive(input, config, listener)),
|
|
84
|
-
)
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
private async runExclusive(
|
|
88
|
-
input: AgentInput,
|
|
89
|
-
config: PipelineAgentConfig,
|
|
90
|
-
listener?: SessionEventListener,
|
|
91
|
-
): Promise<PipelineAgentResult> {
|
|
92
|
-
if (config.sandbox) {
|
|
93
|
-
throw new Error(
|
|
94
|
-
'PipelineAgent cannot enforce a turn-level sandbox around developer-authored step callbacks. Configure confinement inside each step or use a tool-running agent.',
|
|
95
|
-
)
|
|
96
|
-
}
|
|
97
|
-
const startTime = Date.now()
|
|
98
|
-
const sessionId = this.resolveSessionId(config.sessionId)
|
|
99
|
-
const turnId = this.createTurnId()
|
|
100
|
-
this.bindTurn(sessionId, turnId, config.logger)
|
|
101
|
-
const budget = await resolveAgentBudget(input, config, { sessionId, turnId })
|
|
102
|
-
const settlement = (status: TurnSettlement['status'], iterations: number): TurnSettlement => ({
|
|
103
|
-
status,
|
|
104
|
-
iterations,
|
|
105
|
-
usage: budget.ownUsage,
|
|
106
|
-
cost: { ...ZERO_COST, unpricedTokens: budget.ownTokens },
|
|
107
|
-
durationMs: Date.now() - startTime,
|
|
108
|
-
resultSource: 'model',
|
|
109
|
-
abandonedTaskIds: [],
|
|
110
|
-
abandonedJobIds: [],
|
|
111
|
-
})
|
|
112
|
-
const provider = config.provider ? withTokenBudget(config.provider, budget) : undefined
|
|
113
|
-
try {
|
|
114
|
-
const stepResults: PipelineStepResult[] = []
|
|
115
|
-
const previousResults = new Map<string, unknown>()
|
|
116
|
-
let completedSteps = 0
|
|
117
|
-
|
|
118
|
-
await this.emitEvent(turnStarted(sessionId, turnId, config, budget), listener)
|
|
119
|
-
|
|
120
|
-
let currentInput: unknown = input.messages
|
|
121
|
-
.filter((m) => m.role === 'user')
|
|
122
|
-
.map((m) => m.content)
|
|
123
|
-
.filter((c): c is string => c !== null)
|
|
124
|
-
.join('\n')
|
|
125
|
-
|
|
126
|
-
for (let i = 0; i < config.steps.length; i++) {
|
|
127
|
-
const step = config.steps[i]
|
|
128
|
-
if (!step) throw new Error(`Pipeline step at index ${i} is undefined`)
|
|
129
|
-
const stepStart = Date.now()
|
|
130
|
-
|
|
131
|
-
if (this.abortController.signal.aborted) {
|
|
132
|
-
stepResults.push({
|
|
133
|
-
stepName: step.name,
|
|
134
|
-
status: 'skipped',
|
|
135
|
-
durationMs: 0,
|
|
136
|
-
})
|
|
137
|
-
continue
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
await this.emitEvent(
|
|
141
|
-
{ type: 'iteration_started', sessionId, turnId, iteration: i + 1 },
|
|
142
|
-
listener,
|
|
143
|
-
)
|
|
144
|
-
|
|
145
|
-
const context: StepContext = {
|
|
146
|
-
sessionId,
|
|
147
|
-
turnId,
|
|
148
|
-
stepIndex: i,
|
|
149
|
-
totalSteps: config.steps.length,
|
|
150
|
-
previousResults,
|
|
151
|
-
provider,
|
|
152
|
-
budget,
|
|
153
|
-
signal: this.abortController.signal,
|
|
154
|
-
env: config.env ?? {},
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
try {
|
|
158
|
-
if (step.validate && !step.validate(currentInput)) {
|
|
159
|
-
throw new Error(`Validation failed for step "${step.name}"`)
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
const output = await step.execute(currentInput, context)
|
|
163
|
-
previousResults.set(step.name, output)
|
|
164
|
-
currentInput = output
|
|
165
|
-
completedSteps++
|
|
166
|
-
|
|
167
|
-
stepResults.push({
|
|
168
|
-
stepName: step.name,
|
|
169
|
-
status: 'completed',
|
|
170
|
-
output,
|
|
171
|
-
durationMs: Date.now() - stepStart,
|
|
172
|
-
})
|
|
173
|
-
} catch (err) {
|
|
174
|
-
const errorMsg = toErrorMessage(err)
|
|
175
|
-
|
|
176
|
-
stepResults.push({
|
|
177
|
-
stepName: step.name,
|
|
178
|
-
status: 'failed',
|
|
179
|
-
error: errorMsg,
|
|
180
|
-
durationMs: Date.now() - stepStart,
|
|
181
|
-
})
|
|
182
|
-
|
|
183
|
-
if (step.rollback) {
|
|
184
|
-
try {
|
|
185
|
-
await step.rollback(currentInput, context)
|
|
186
|
-
} catch (rollbackErr) {
|
|
187
|
-
this.log.error('Rollback failed for a step', {
|
|
188
|
-
'namzu.pipeline.step_name': step.name,
|
|
189
|
-
'exception.message': toErrorMessage(rollbackErr),
|
|
190
|
-
})
|
|
191
|
-
}
|
|
192
|
-
}
|
|
193
|
-
|
|
194
|
-
if (!config.continueOnError) {
|
|
195
|
-
await this.emitEvent(
|
|
196
|
-
{
|
|
197
|
-
type: 'turn_failed',
|
|
198
|
-
sessionId,
|
|
199
|
-
turnId,
|
|
200
|
-
error: errorMsg,
|
|
201
|
-
budget: budget.summary(),
|
|
202
|
-
settlement: settlement('failed', i + 1),
|
|
203
|
-
},
|
|
204
|
-
listener,
|
|
205
|
-
)
|
|
206
|
-
|
|
207
|
-
return {
|
|
208
|
-
sessionId,
|
|
209
|
-
turnId,
|
|
210
|
-
status: 'failed',
|
|
211
|
-
stopReason: 'error',
|
|
212
|
-
usage: budget.ownUsage,
|
|
213
|
-
budget: budget.summary(),
|
|
214
|
-
cost: { ...ZERO_COST, unpricedTokens: budget.ownTokens },
|
|
215
|
-
iterations: i + 1,
|
|
216
|
-
durationMs: Date.now() - startTime,
|
|
217
|
-
messages: input.messages,
|
|
218
|
-
lastError: errorMsg,
|
|
219
|
-
stepResults,
|
|
220
|
-
completedSteps,
|
|
221
|
-
totalSteps: config.steps.length,
|
|
222
|
-
}
|
|
223
|
-
}
|
|
224
|
-
}
|
|
225
|
-
}
|
|
226
|
-
|
|
227
|
-
const finalStatus = completedSteps === config.steps.length ? 'completed' : 'failed'
|
|
228
|
-
const lastOutput = stepResults[stepResults.length - 1]?.output
|
|
229
|
-
|
|
230
|
-
const result = typeof lastOutput === 'string' ? lastOutput : JSON.stringify(lastOutput)
|
|
231
|
-
|
|
232
|
-
// A pipeline that finished with failed steps (under `continueOnError`)
|
|
233
|
-
// did not complete its turn, so it settles as `turn_failed`: the
|
|
234
|
-
// terminal verdict is the event type (spec §2.10).
|
|
235
|
-
await this.emitEvent(
|
|
236
|
-
finalStatus === 'completed'
|
|
237
|
-
? {
|
|
238
|
-
type: 'turn_completed',
|
|
239
|
-
sessionId,
|
|
240
|
-
turnId,
|
|
241
|
-
budget: budget.summary(),
|
|
242
|
-
result,
|
|
243
|
-
stopReason: 'end_turn',
|
|
244
|
-
settlement: settlement('completed', config.steps.length),
|
|
245
|
-
}
|
|
246
|
-
: {
|
|
247
|
-
type: 'turn_failed',
|
|
248
|
-
sessionId,
|
|
249
|
-
turnId,
|
|
250
|
-
budget: budget.summary(),
|
|
251
|
-
error: `${config.steps.length - completedSteps} of ${config.steps.length} pipeline steps failed`,
|
|
252
|
-
settlement: settlement('failed', config.steps.length),
|
|
253
|
-
},
|
|
254
|
-
listener,
|
|
255
|
-
)
|
|
256
|
-
|
|
257
|
-
return {
|
|
258
|
-
sessionId,
|
|
259
|
-
turnId,
|
|
260
|
-
status: finalStatus,
|
|
261
|
-
stopReason: 'end_turn',
|
|
262
|
-
usage: budget.ownUsage,
|
|
263
|
-
budget: budget.summary(),
|
|
264
|
-
cost: { ...ZERO_COST, unpricedTokens: budget.ownTokens },
|
|
265
|
-
iterations: config.steps.length,
|
|
266
|
-
durationMs: Date.now() - startTime,
|
|
267
|
-
messages: input.messages,
|
|
268
|
-
result,
|
|
269
|
-
stepResults,
|
|
270
|
-
completedSteps,
|
|
271
|
-
totalSteps: config.steps.length,
|
|
272
|
-
}
|
|
273
|
-
} finally {
|
|
274
|
-
budget.settle()
|
|
275
|
-
await budget.flush()
|
|
276
|
-
}
|
|
277
|
-
}
|
|
278
|
-
}
|
|
279
|
-
|
|
280
|
-
/**
|
|
281
|
-
* The turn a pipeline runs, announced the way `query()` announces one. The
|
|
282
|
-
* user message id names the input the steps were handed; nothing is written
|
|
283
|
-
* to a session log, because the steps are callbacks, not model calls.
|
|
284
|
-
*/
|
|
285
|
-
function turnStarted(
|
|
286
|
-
sessionId: SessionId,
|
|
287
|
-
turnId: TurnId,
|
|
288
|
-
config: PipelineAgentConfig,
|
|
289
|
-
budget: SessionTokenBudget,
|
|
290
|
-
): SessionEvent {
|
|
291
|
-
return {
|
|
292
|
-
type: 'turn_started',
|
|
293
|
-
sessionId,
|
|
294
|
-
turnId,
|
|
295
|
-
userMessageId: generateMessageId(),
|
|
296
|
-
config: {
|
|
297
|
-
model: config.model,
|
|
298
|
-
tokenBudget: config.tokenBudget,
|
|
299
|
-
timeoutMs: config.timeoutMs,
|
|
300
|
-
},
|
|
301
|
-
...(budget.binding ? { budget: budget.binding } : {}),
|
|
302
|
-
}
|
|
303
|
-
}
|
|
1
|
+
/** @deprecated Example agent. Define application agents with the SDK Agent contract. */
|
|
2
|
+
export { PipelineAgent } from './examples/PipelineAgent.js'
|
|
@@ -0,0 +1,269 @@
|
|
|
1
|
+
import { drainQuery } from '../runtime/query/index.js'
|
|
2
|
+
import type {
|
|
3
|
+
AgentInvocationScope,
|
|
4
|
+
AgentMetadata,
|
|
5
|
+
ManagedAgentInput,
|
|
6
|
+
QueryAgentConfig,
|
|
7
|
+
QueryAgentResult,
|
|
8
|
+
} from '../types/agent/index.js'
|
|
9
|
+
import type { AssistantMessage } from '../types/message/index.js'
|
|
10
|
+
import type { TurnConfig } from '../types/session/config.js'
|
|
11
|
+
import type { SessionEventListener } from '../types/session/events.js'
|
|
12
|
+
import type { Logger } from '../utils/logger.js'
|
|
13
|
+
import { AbstractAgent } from './AbstractAgent.js'
|
|
14
|
+
import { pickRoutedOptions } from './forward-options.js'
|
|
15
|
+
|
|
16
|
+
/** Every config field has one destination, or a deliberately explicit transform. */
|
|
17
|
+
const configRoutes = {
|
|
18
|
+
model: 'turn',
|
|
19
|
+
tokenBudget: 'turn',
|
|
20
|
+
budget: 'query',
|
|
21
|
+
timeoutMs: 'turn',
|
|
22
|
+
streamIdleTimeoutMs: 'turn',
|
|
23
|
+
maxRequestRichContentBytes: 'turn',
|
|
24
|
+
attachmentResolveTimeoutMs: 'query',
|
|
25
|
+
maxIterations: 'turn',
|
|
26
|
+
temperature: 'turn',
|
|
27
|
+
maxResponseTokens: 'turn',
|
|
28
|
+
costLimitUsd: 'turn',
|
|
29
|
+
permissionMode: 'turn',
|
|
30
|
+
pruneKeepLast: 'turn',
|
|
31
|
+
paths: 'query',
|
|
32
|
+
sessionLog: 'query',
|
|
33
|
+
checkpointStore: 'query',
|
|
34
|
+
sandbox: 'turn',
|
|
35
|
+
inboundMessages: 'query',
|
|
36
|
+
projectInstructionContext: 'query',
|
|
37
|
+
allowedTools: 'special',
|
|
38
|
+
toolResultGuardrails: 'query',
|
|
39
|
+
deniedTools: 'special',
|
|
40
|
+
persona: 'query',
|
|
41
|
+
logger: 'special',
|
|
42
|
+
env: 'turn',
|
|
43
|
+
thinking: 'turn',
|
|
44
|
+
effort: 'turn',
|
|
45
|
+
idempotencyKey: 'special',
|
|
46
|
+
projectId: 'special',
|
|
47
|
+
topicId: 'special',
|
|
48
|
+
sessionId: 'special',
|
|
49
|
+
tenantId: 'special',
|
|
50
|
+
parentSessionId: 'query',
|
|
51
|
+
parentTurnId: 'query',
|
|
52
|
+
depth: 'query',
|
|
53
|
+
contextLevel: 'query',
|
|
54
|
+
invocationState: 'query',
|
|
55
|
+
parentSpan: 'query',
|
|
56
|
+
resumeHandler: 'query',
|
|
57
|
+
reviewAllowedCalls: 'query',
|
|
58
|
+
systemPrompt: 'query',
|
|
59
|
+
webSearch: 'turn',
|
|
60
|
+
steering: 'query',
|
|
61
|
+
skills: 'query',
|
|
62
|
+
basePrompt: 'query',
|
|
63
|
+
provider: 'query',
|
|
64
|
+
toolsets: 'query',
|
|
65
|
+
advisory: 'query',
|
|
66
|
+
authorizationGate: 'query',
|
|
67
|
+
sandboxProvider: 'query',
|
|
68
|
+
sandboxTeardownTimeoutMs: 'query',
|
|
69
|
+
outsideRootAccess: 'query',
|
|
70
|
+
sandboxEscape: 'query',
|
|
71
|
+
compactionConfig: 'query',
|
|
72
|
+
workingMemoryProvider: 'query',
|
|
73
|
+
retry: 'query',
|
|
74
|
+
toolTimeoutMs: 'query',
|
|
75
|
+
toolRetryBackoff: 'query',
|
|
76
|
+
maxToolConcurrency: 'query',
|
|
77
|
+
maxToolOutputChars: 'query',
|
|
78
|
+
retainedToolPreviewChars: 'query',
|
|
79
|
+
maxToolContentBytes: 'query',
|
|
80
|
+
repairToolCall: 'query',
|
|
81
|
+
stopWhen: 'query',
|
|
82
|
+
onStepFinish: 'query',
|
|
83
|
+
prepareStep: 'query',
|
|
84
|
+
beforeStep: 'query',
|
|
85
|
+
structuredOutput: 'query',
|
|
86
|
+
inputGuardrails: 'query',
|
|
87
|
+
outputGuardrails: 'query',
|
|
88
|
+
} as const satisfies { readonly [K in keyof QueryAgentConfig]: 'query' | 'turn' | 'special' }
|
|
89
|
+
|
|
90
|
+
type RoutedKeys<TDestination extends 'query' | 'turn'> = {
|
|
91
|
+
[K in keyof typeof configRoutes]: (typeof configRoutes)[K] extends TDestination ? K : never
|
|
92
|
+
}[keyof typeof configRoutes]
|
|
93
|
+
|
|
94
|
+
type QueryFields = Pick<Parameters<typeof drainQuery>[0], RoutedKeys<'query'>>
|
|
95
|
+
type TurnFields = Pick<TurnConfig, RoutedKeys<'turn'>>
|
|
96
|
+
|
|
97
|
+
const SCOPE_FIELDS = ['sessionId', 'topicId', 'projectId', 'tenantId'] as const
|
|
98
|
+
|
|
99
|
+
function invocationScope(input: ManagedAgentInput, config: QueryAgentConfig): AgentInvocationScope {
|
|
100
|
+
if (input.managedScope !== undefined) {
|
|
101
|
+
const scope = input.managedScope
|
|
102
|
+
if (
|
|
103
|
+
typeof scope !== 'object' ||
|
|
104
|
+
scope === null ||
|
|
105
|
+
Array.isArray(scope) ||
|
|
106
|
+
scope.kind !== 'managed'
|
|
107
|
+
) {
|
|
108
|
+
throw new Error('QueryAgent requires a managed invocation scope.')
|
|
109
|
+
}
|
|
110
|
+
const missing = SCOPE_FIELDS.filter(
|
|
111
|
+
(field) => typeof scope[field] !== 'string' || scope[field].trim().length === 0,
|
|
112
|
+
)
|
|
113
|
+
if (missing.length > 0) {
|
|
114
|
+
throw new Error(`QueryAgent: input.managedScope is missing: ${missing.join(', ')}.`)
|
|
115
|
+
}
|
|
116
|
+
const conflicts = SCOPE_FIELDS.filter(
|
|
117
|
+
(field) => config[field] !== undefined && config[field] !== scope[field],
|
|
118
|
+
)
|
|
119
|
+
if (conflicts.length > 0) {
|
|
120
|
+
throw new Error(
|
|
121
|
+
`QueryAgent: input.managedScope conflicts with legacy config fields: ${conflicts.join(', ')}.`,
|
|
122
|
+
)
|
|
123
|
+
}
|
|
124
|
+
return scope
|
|
125
|
+
}
|
|
126
|
+
if (!config.sessionId || !config.topicId || !config.projectId || !config.tenantId) {
|
|
127
|
+
throw new Error(
|
|
128
|
+
'QueryAgent requires sessionId, topicId, projectId, and tenantId in input.managedScope or legacy config.',
|
|
129
|
+
)
|
|
130
|
+
}
|
|
131
|
+
const invalid = SCOPE_FIELDS.filter((field) => {
|
|
132
|
+
const value = config[field]
|
|
133
|
+
return typeof value !== 'string' || value.trim().length === 0
|
|
134
|
+
})
|
|
135
|
+
if (invalid.length > 0) {
|
|
136
|
+
throw new Error(`QueryAgent: legacy config has invalid scope fields: ${invalid.join(', ')}.`)
|
|
137
|
+
}
|
|
138
|
+
return {
|
|
139
|
+
kind: 'managed',
|
|
140
|
+
sessionId: config.sessionId,
|
|
141
|
+
topicId: config.topicId,
|
|
142
|
+
projectId: config.projectId,
|
|
143
|
+
tenantId: config.tenantId,
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
export class QueryAgent extends AbstractAgent<QueryAgentConfig, QueryAgentResult> {
|
|
148
|
+
readonly type: string
|
|
149
|
+
|
|
150
|
+
constructor(metadata: Omit<AgentMetadata, 'capabilities'>, log?: Logger) {
|
|
151
|
+
super(
|
|
152
|
+
{
|
|
153
|
+
...metadata,
|
|
154
|
+
type: metadata.type,
|
|
155
|
+
capabilities: {
|
|
156
|
+
supportsTools: true,
|
|
157
|
+
supportsStreaming: true,
|
|
158
|
+
supportsConcurrency: false,
|
|
159
|
+
supportsSubAgents: false,
|
|
160
|
+
},
|
|
161
|
+
},
|
|
162
|
+
log,
|
|
163
|
+
)
|
|
164
|
+
this.type = metadata.type
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
/**
|
|
168
|
+
* One turn at a time per instance.
|
|
169
|
+
*
|
|
170
|
+
* `abortController` and `currentSessionId` are instance state, so two
|
|
171
|
+
* overlapping turns share one abort controller — cancelling either kills
|
|
172
|
+
* both — and the second clobbers the first's session, so a later
|
|
173
|
+
* `cancel()` cancels the wrong children. Neither failure announces itself.
|
|
174
|
+
* A host that wants parallelism constructs a second instance.
|
|
175
|
+
*/
|
|
176
|
+
async run(
|
|
177
|
+
input: ManagedAgentInput,
|
|
178
|
+
config: QueryAgentConfig,
|
|
179
|
+
listener?: SessionEventListener,
|
|
180
|
+
): Promise<QueryAgentResult> {
|
|
181
|
+
// Resolve before deduplication: an invalid or conflicting scope must never
|
|
182
|
+
// receive another caller's in-flight result under the same raw key.
|
|
183
|
+
const scope = invocationScope(input, config)
|
|
184
|
+
const scopedKey = config.idempotencyKey
|
|
185
|
+
? JSON.stringify([
|
|
186
|
+
scope.kind,
|
|
187
|
+
scope.tenantId,
|
|
188
|
+
scope.projectId,
|
|
189
|
+
scope.topicId,
|
|
190
|
+
scope.sessionId,
|
|
191
|
+
config.idempotencyKey,
|
|
192
|
+
])
|
|
193
|
+
: undefined
|
|
194
|
+
return await this.underIdempotencyKey(scopedKey, () =>
|
|
195
|
+
this.underInvocationLock(() => this.runExclusive(input, config, scope, listener)),
|
|
196
|
+
)
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
private async runExclusive(
|
|
200
|
+
input: ManagedAgentInput,
|
|
201
|
+
config: QueryAgentConfig,
|
|
202
|
+
scope: AgentInvocationScope,
|
|
203
|
+
listener?: SessionEventListener,
|
|
204
|
+
): Promise<QueryAgentResult> {
|
|
205
|
+
const startTime = Date.now()
|
|
206
|
+
const turnId = this.createTurnId()
|
|
207
|
+
this.bindTurn(scope.sessionId, turnId, config.logger)
|
|
208
|
+
const queryFields: QueryFields = pickRoutedOptions(config, configRoutes, 'query')
|
|
209
|
+
const turnFields: TurnFields = pickRoutedOptions(config, configRoutes, 'turn')
|
|
210
|
+
|
|
211
|
+
const turn = await drainQuery(
|
|
212
|
+
{
|
|
213
|
+
...queryFields,
|
|
214
|
+
...(input.attachmentStore ? { attachmentStore: input.attachmentStore } : {}),
|
|
215
|
+
...(config.allowedTools ? { allowedTools: [...config.allowedTools] } : {}),
|
|
216
|
+
...(config.deniedTools ? { deniedTools: [...config.deniedTools] } : {}),
|
|
217
|
+
turnConfig: {
|
|
218
|
+
...turnFields,
|
|
219
|
+
logger: this.log,
|
|
220
|
+
},
|
|
221
|
+
agentId: this.metadata.id,
|
|
222
|
+
agentName: this.metadata.name,
|
|
223
|
+
workingDirectory: input.workingDirectory,
|
|
224
|
+
sessionId: scope.sessionId,
|
|
225
|
+
topicId: scope.topicId,
|
|
226
|
+
projectId: scope.projectId,
|
|
227
|
+
tenantId: scope.tenantId,
|
|
228
|
+
turnId,
|
|
229
|
+
messages: input.messages,
|
|
230
|
+
signal: input.signal,
|
|
231
|
+
taskStore: input.taskStore,
|
|
232
|
+
runtimeToolOverrides: input.runtimeToolOverrides,
|
|
233
|
+
runtimeContext: input.runtimeContext,
|
|
234
|
+
},
|
|
235
|
+
listener,
|
|
236
|
+
)
|
|
237
|
+
|
|
238
|
+
let toolCallCount = 0
|
|
239
|
+
for (const msg of turn.messages) {
|
|
240
|
+
if (msg.role === 'assistant') {
|
|
241
|
+
const assistantMsg = msg as AssistantMessage
|
|
242
|
+
if (assistantMsg.toolCalls) {
|
|
243
|
+
toolCallCount += assistantMsg.toolCalls.length
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
return {
|
|
249
|
+
sessionId: turn.sessionId,
|
|
250
|
+
turnId: turn.id,
|
|
251
|
+
status: turn.status,
|
|
252
|
+
stopReason: turn.stopReason,
|
|
253
|
+
usage: turn.tokenUsage,
|
|
254
|
+
...(turn.budget ? { budget: turn.budget } : {}),
|
|
255
|
+
cost: turn.costInfo,
|
|
256
|
+
iterations: turn.currentIteration,
|
|
257
|
+
durationMs: Date.now() - startTime,
|
|
258
|
+
messages: turn.messages,
|
|
259
|
+
result: turn.result,
|
|
260
|
+
structuredOutput: turn.structuredOutput,
|
|
261
|
+
lastError: turn.lastError,
|
|
262
|
+
toolCallCount,
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
override async cancel(): Promise<void> {
|
|
267
|
+
this.abortController.abort()
|
|
268
|
+
}
|
|
269
|
+
}
|