@namzu/sdk 46.0.0 → 48.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 +351 -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 +71 -4
- package/dist/connector/mcp/adapter.js.map +1 -1
- package/dist/connector/mcp/client.d.ts +32 -4
- package/dist/connector/mcp/client.d.ts.map +1 -1
- package/dist/connector/mcp/client.js +383 -5
- 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/era.d.ts.map +1 -1
- package/dist/connector/mcp/era.js +7 -0
- package/dist/connector/mcp/era.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/mcp/streamable-http.d.ts +15 -0
- package/dist/connector/mcp/streamable-http.d.ts.map +1 -1
- package/dist/connector/mcp/streamable-http.js +281 -6
- package/dist/connector/mcp/streamable-http.js.map +1 -1
- 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 +1 -0
- package/dist/manager/agent/lifecycle.d.ts.map +1 -1
- package/dist/manager/agent/lifecycle.js +146 -18
- 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/initiative.d.ts +6 -6
- package/dist/manager/resident/learning-observation.d.ts +4 -4
- package/dist/manager/resident/learning.d.ts +36 -36
- package/dist/manager/resident/outbox.d.ts +4 -4
- 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/scheduler/local.d.ts.map +1 -1
- package/dist/scheduler/local.js +2 -0
- package/dist/scheduler/local.js.map +1 -1
- package/dist/session/retention/archive.js +1 -1
- package/dist/session/retention/archive.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/disk.d.ts.map +1 -1
- package/dist/store/session/disk.js +2 -0
- package/dist/store/session/disk.js.map +1 -1
- 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/browser.js +2 -2
- package/dist/tools/builtins/browser.js.map +1 -1
- 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/scheduler.d.ts +6 -1
- package/dist/types/agent/scheduler.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/agent/task.d.ts +19 -1
- package/dist/types/agent/task.d.ts.map +1 -1
- package/dist/types/agent/task.js.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 +45 -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/session/sub-session.d.ts +2 -0
- package/dist/types/session/sub-session.d.ts.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 +73 -3
- package/src/connector/mcp/client.ts +425 -6
- package/src/connector/mcp/discovery.ts +60 -0
- package/src/connector/mcp/era.ts +7 -0
- package/src/connector/mcp/index.ts +13 -0
- package/src/connector/mcp/mcp-toolset.ts +515 -0
- package/src/connector/mcp/streamable-http.ts +302 -5
- 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 +167 -19
- 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/scheduler/local.ts +2 -0
- package/src/session/retention/archive.ts +1 -1
- package/src/skills/index.ts +1 -1
- package/src/skills/registry.ts +25 -0
- package/src/store/session/disk.ts +3 -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/browser.ts +2 -2
- 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/scheduler.ts +6 -1
- package/src/types/agent/supervisor.ts +5 -2
- package/src/types/agent/task.ts +21 -1
- package/src/types/authorization/index.ts +12 -0
- package/src/types/connector/mcp.ts +46 -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/session/sub-session.ts +2 -0
- 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
|
@@ -7,7 +7,11 @@ import type {
|
|
|
7
7
|
} from '../../types/connector/index.js'
|
|
8
8
|
import { SCOPE_ATTRIBUTE } from '../../utils/log/types.js'
|
|
9
9
|
import { type Logger, resolveLogger } from '../../utils/logger.js'
|
|
10
|
-
import {
|
|
10
|
+
import {
|
|
11
|
+
ConnectorHttpOperation,
|
|
12
|
+
readConnectorResponseBody,
|
|
13
|
+
validateConnectorTimeoutMs,
|
|
14
|
+
} from '../http-operation.js'
|
|
11
15
|
import { MCPHttpStatusError } from './errors.js'
|
|
12
16
|
import { refuseMcpHttpRedirect } from './http-redirect.js'
|
|
13
17
|
|
|
@@ -21,6 +25,23 @@ const DEFAULT_TIMEOUT_MS = 30_000
|
|
|
21
25
|
* an unresponsive peer does not accumulate as a dangling request forever.
|
|
22
26
|
*/
|
|
23
27
|
const SESSION_DELETE_TIMEOUT_MS = 5_000
|
|
28
|
+
/** SSE streams may live for hours; bound each event and read rather than their lifetime. */
|
|
29
|
+
const MAX_SSE_EVENT_CHARS = 1_048_576
|
|
30
|
+
const MAX_SSE_CHUNK_BYTES = 8_388_608
|
|
31
|
+
/** A single event may contain a JSON-RPC batch; bound its dispatch work too. */
|
|
32
|
+
const MAX_RESPONSE_SSE_MESSAGES_PER_EVENT = 256
|
|
33
|
+
const MAX_SUBSCRIPTION_ERROR_BODY_BYTES = 65_536
|
|
34
|
+
|
|
35
|
+
/** A successful HTTP status can still carry a JSON-RPC listen refusal. */
|
|
36
|
+
export class MCPSubscriptionResponseError extends Error {
|
|
37
|
+
readonly bodyText: string
|
|
38
|
+
|
|
39
|
+
constructor(bodyText: string) {
|
|
40
|
+
super('MCP subscriptions/listen returned JSON instead of an SSE response stream')
|
|
41
|
+
this.name = 'MCPSubscriptionResponseError'
|
|
42
|
+
this.bodyText = bodyText
|
|
43
|
+
}
|
|
44
|
+
}
|
|
24
45
|
|
|
25
46
|
export class StreamableHttpTransport implements MCPTransport {
|
|
26
47
|
private messageHandlers: Array<(message: MCPJsonRpcMessage) => void> = []
|
|
@@ -202,7 +223,7 @@ export class StreamableHttpTransport implements MCPTransport {
|
|
|
202
223
|
// POST capable of poisoning every later request on this connection.
|
|
203
224
|
if (message.method === 'initialize') this.captureSessionId(response)
|
|
204
225
|
|
|
205
|
-
await this.dispatchResponseMessages(response, operation, owned.generation)
|
|
226
|
+
await this.dispatchResponseMessages(response, operation, owned.generation, message.id)
|
|
206
227
|
} finally {
|
|
207
228
|
// A streamable HTTP send owns one POST; its rejection is delivered to
|
|
208
229
|
// that caller. It is not evidence that the logical MCP session died.
|
|
@@ -213,6 +234,124 @@ export class StreamableHttpTransport implements MCPTransport {
|
|
|
213
234
|
}
|
|
214
235
|
}
|
|
215
236
|
|
|
237
|
+
/**
|
|
238
|
+
* Modern MCP subscriptions are long-lived POST response streams. The ordinary
|
|
239
|
+
* `send` has a request deadline and stops at its terminal reply; a
|
|
240
|
+
* subscription may remain open indefinitely. The client owns the initial
|
|
241
|
+
* acknowledgment deadline and this stream's abort signal.
|
|
242
|
+
*/
|
|
243
|
+
async sendSubscription(
|
|
244
|
+
message: MCPJsonRpcMessage,
|
|
245
|
+
options: MCPTransportSendOptions,
|
|
246
|
+
onMessage?: (message: MCPJsonRpcMessage) => void,
|
|
247
|
+
): Promise<void> {
|
|
248
|
+
if (message.method !== 'subscriptions/listen' || message.id === undefined) {
|
|
249
|
+
throw new Error('sendSubscription requires a subscriptions/listen request')
|
|
250
|
+
}
|
|
251
|
+
if (!this.connected) throw new Error('StreamableHttpTransport: not connected')
|
|
252
|
+
const owned = this.beginSend(options.signal)
|
|
253
|
+
try {
|
|
254
|
+
const response = await this.fetchImpl(this.config.url, {
|
|
255
|
+
method: 'POST',
|
|
256
|
+
headers: this.buildHeaders(options.headers),
|
|
257
|
+
body: JSON.stringify(message),
|
|
258
|
+
redirect: 'manual',
|
|
259
|
+
signal: owned.controller.signal,
|
|
260
|
+
})
|
|
261
|
+
refuseMcpHttpRedirect(response, message.method)
|
|
262
|
+
if (!response.ok) {
|
|
263
|
+
throw new MCPHttpStatusError(
|
|
264
|
+
'StreamableHttpTransport',
|
|
265
|
+
response.status,
|
|
266
|
+
response.statusText,
|
|
267
|
+
await readSubscriptionErrorBody(response, owned.controller.signal, this.timeoutMs),
|
|
268
|
+
)
|
|
269
|
+
}
|
|
270
|
+
const mediaType = (response.headers.get('content-type') ?? '')
|
|
271
|
+
.split(';', 1)[0]
|
|
272
|
+
?.trim()
|
|
273
|
+
.toLowerCase()
|
|
274
|
+
if (mediaType !== 'text/event-stream' || !response.body) {
|
|
275
|
+
// A 200 JSON response can be a valid in-band JSON-RPC refusal.
|
|
276
|
+
// Read it under the same byte and time bounds as a failed HTTP
|
|
277
|
+
// response, then release its body before retry classification.
|
|
278
|
+
if (mediaType === 'application/json' && response.body) {
|
|
279
|
+
throw new MCPSubscriptionResponseError(
|
|
280
|
+
await readSubscriptionErrorBody(response, owned.controller.signal, this.timeoutMs),
|
|
281
|
+
)
|
|
282
|
+
}
|
|
283
|
+
// Unknown response media types still own a body. Never leave a
|
|
284
|
+
// held POST open while the client schedules its next attempt.
|
|
285
|
+
void response.body?.cancel().catch(() => undefined)
|
|
286
|
+
throw new Error('MCP subscriptions/listen did not return an SSE response stream')
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
const reader = response.body.getReader()
|
|
290
|
+
const decoder = new TextDecoder()
|
|
291
|
+
let buffer = ''
|
|
292
|
+
let previousChunkEndedWithCr = false
|
|
293
|
+
const cancelReader = (): void => {
|
|
294
|
+
void reader.cancel().catch(() => undefined)
|
|
295
|
+
}
|
|
296
|
+
owned.controller.signal.addEventListener('abort', cancelReader, { once: true })
|
|
297
|
+
if (owned.controller.signal.aborted) cancelReader()
|
|
298
|
+
try {
|
|
299
|
+
while (this.connected && owned.generation === this.generation) {
|
|
300
|
+
const { done, value } = await reader.read()
|
|
301
|
+
if (done) break
|
|
302
|
+
if (
|
|
303
|
+
!this.connected ||
|
|
304
|
+
owned.generation !== this.generation ||
|
|
305
|
+
owned.controller.signal.aborted
|
|
306
|
+
)
|
|
307
|
+
break
|
|
308
|
+
if (value.byteLength > MAX_SSE_CHUNK_BYTES) {
|
|
309
|
+
throw new Error('MCP subscription SSE chunk exceeds its size limit')
|
|
310
|
+
}
|
|
311
|
+
const oldLength = buffer.length
|
|
312
|
+
let chunk = decoder.decode(value, { stream: true })
|
|
313
|
+
// SSE permits LF, CRLF, and bare CR. A CRLF split across chunks
|
|
314
|
+
// still counts as one line break, not an empty line.
|
|
315
|
+
if (previousChunkEndedWithCr && chunk.startsWith('\n')) chunk = chunk.slice(1)
|
|
316
|
+
previousChunkEndedWithCr = chunk.endsWith('\r')
|
|
317
|
+
buffer += chunk.replace(/\r\n|\r/g, '\n')
|
|
318
|
+
let searchFrom = Math.max(0, oldLength - 1)
|
|
319
|
+
while (true) {
|
|
320
|
+
const boundary = findSseEventBoundary(buffer, searchFrom)
|
|
321
|
+
if (!boundary) break
|
|
322
|
+
if (boundary.start > MAX_SSE_EVENT_CHARS) {
|
|
323
|
+
throw new Error('MCP subscription SSE event exceeds its size limit')
|
|
324
|
+
}
|
|
325
|
+
const event = buffer.slice(0, boundary.start)
|
|
326
|
+
buffer = buffer.slice(boundary.end)
|
|
327
|
+
searchFrom = 0
|
|
328
|
+
for (const frame of parseSseMessages(event).messages) {
|
|
329
|
+
if (
|
|
330
|
+
!this.connected ||
|
|
331
|
+
owned.generation !== this.generation ||
|
|
332
|
+
owned.controller.signal.aborted
|
|
333
|
+
)
|
|
334
|
+
return
|
|
335
|
+
if (onMessage) onMessage(frame)
|
|
336
|
+
else for (const handler of [...this.messageHandlers]) handler(frame)
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
if (buffer.length > MAX_SSE_EVENT_CHARS) {
|
|
340
|
+
throw new Error('MCP subscription SSE event exceeds its size limit')
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
// A dangling partial event is not a notification. It cannot be
|
|
344
|
+
// forwarded as a complete JSON-RPC frame when the stream closes.
|
|
345
|
+
} finally {
|
|
346
|
+
owned.controller.signal.removeEventListener('abort', cancelReader)
|
|
347
|
+
cancelReader()
|
|
348
|
+
reader.releaseLock()
|
|
349
|
+
}
|
|
350
|
+
} finally {
|
|
351
|
+
owned.dispose()
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
|
|
216
355
|
onMessage(handler: (message: MCPJsonRpcMessage) => void): void {
|
|
217
356
|
this.messageHandlers.push(handler)
|
|
218
357
|
}
|
|
@@ -300,22 +439,119 @@ export class StreamableHttpTransport implements MCPTransport {
|
|
|
300
439
|
response: Response,
|
|
301
440
|
operation: ConnectorHttpOperation,
|
|
302
441
|
generation: number,
|
|
442
|
+
requestId: string | number | undefined,
|
|
303
443
|
): Promise<void> {
|
|
444
|
+
const contentType = response.headers.get('content-type') ?? ''
|
|
445
|
+
if (contentType.includes('text/event-stream') && response.body) {
|
|
446
|
+
await this.dispatchSseResponseMessages(response.body, operation, generation, requestId)
|
|
447
|
+
return
|
|
448
|
+
}
|
|
304
449
|
const text = await operation.run(() => response.text())
|
|
305
450
|
this.assertCurrent(generation, operation)
|
|
306
451
|
if (text.trim().length === 0) return
|
|
307
452
|
|
|
308
|
-
const contentType = response.headers.get('content-type') ?? ''
|
|
309
453
|
const messages = contentType.includes('text/event-stream')
|
|
310
454
|
? this.parseSseAndCaptureEventId(text)
|
|
311
455
|
: parseJsonMessages(text)
|
|
312
456
|
|
|
313
457
|
for (const message of messages) {
|
|
458
|
+
this.dispatchMessage(message, operation, generation)
|
|
459
|
+
}
|
|
460
|
+
}
|
|
461
|
+
|
|
462
|
+
private dispatchMessage(
|
|
463
|
+
message: MCPJsonRpcMessage,
|
|
464
|
+
operation: ConnectorHttpOperation,
|
|
465
|
+
generation: number,
|
|
466
|
+
): void {
|
|
467
|
+
this.assertCurrent(generation, operation)
|
|
468
|
+
for (const handler of [...this.messageHandlers]) {
|
|
314
469
|
this.assertCurrent(generation, operation)
|
|
315
|
-
|
|
470
|
+
handler(message)
|
|
471
|
+
}
|
|
472
|
+
}
|
|
473
|
+
|
|
474
|
+
/** Dispatch a complete SSE event as it arrives, without waiting for EOF. */
|
|
475
|
+
private async dispatchSseResponseMessages(
|
|
476
|
+
body: ReadableStream<Uint8Array>,
|
|
477
|
+
operation: ConnectorHttpOperation,
|
|
478
|
+
generation: number,
|
|
479
|
+
requestId: string | number | undefined,
|
|
480
|
+
): Promise<void> {
|
|
481
|
+
const reader = body.getReader()
|
|
482
|
+
const decoder = new TextDecoder()
|
|
483
|
+
let buffer = ''
|
|
484
|
+
let previousChunkEndedWithCr = false
|
|
485
|
+
const dispatchEvent = (event: string): boolean => {
|
|
486
|
+
if (event.length > MAX_SSE_EVENT_CHARS) {
|
|
487
|
+
throw new Error('MCP response SSE event exceeds its size limit')
|
|
488
|
+
}
|
|
489
|
+
if (sseBatchExceedsMessageLimit(event, MAX_RESPONSE_SSE_MESSAGES_PER_EVENT)) {
|
|
490
|
+
throw new Error('MCP response SSE event exceeds its message limit')
|
|
491
|
+
}
|
|
492
|
+
const parsed = parseSseMessages(event)
|
|
493
|
+
if (parsed.lastEventId !== undefined) this.lastEventId = parsed.lastEventId
|
|
494
|
+
if (parsed.messages.length > MAX_RESPONSE_SSE_MESSAGES_PER_EVENT) {
|
|
495
|
+
throw new Error('MCP response SSE event exceeds its message limit')
|
|
496
|
+
}
|
|
497
|
+
for (const message of parsed.messages) {
|
|
498
|
+
this.dispatchMessage(message, operation, generation)
|
|
499
|
+
if (
|
|
500
|
+
requestId !== undefined &&
|
|
501
|
+
message.id === requestId &&
|
|
502
|
+
message.method === undefined &&
|
|
503
|
+
(Object.hasOwn(message, 'result') || Object.hasOwn(message, 'error'))
|
|
504
|
+
) {
|
|
505
|
+
// The request is complete even if the peer keeps its SSE body open.
|
|
506
|
+
return true
|
|
507
|
+
}
|
|
508
|
+
}
|
|
509
|
+
return false
|
|
510
|
+
}
|
|
511
|
+
const appendChunk = (decoded: string): boolean => {
|
|
512
|
+
if (!decoded) return false
|
|
513
|
+
let chunk = decoded
|
|
514
|
+
// A CRLF split across reads is one line break; LF, CRLF and bare
|
|
515
|
+
// CR all delimit SSE lines.
|
|
516
|
+
if (previousChunkEndedWithCr && chunk.startsWith('\n')) chunk = chunk.slice(1)
|
|
517
|
+
previousChunkEndedWithCr = chunk.endsWith('\r')
|
|
518
|
+
buffer += chunk.replace(/\r\n|\r/g, '\n')
|
|
519
|
+
while (true) {
|
|
520
|
+
const boundary = findSseEventBoundary(buffer, 0)
|
|
521
|
+
if (!boundary) break
|
|
522
|
+
if (boundary.start > MAX_SSE_EVENT_CHARS) {
|
|
523
|
+
throw new Error('MCP response SSE event exceeds its size limit')
|
|
524
|
+
}
|
|
525
|
+
const event = buffer.slice(0, boundary.start)
|
|
526
|
+
buffer = buffer.slice(boundary.end)
|
|
527
|
+
if (dispatchEvent(event)) return true
|
|
528
|
+
}
|
|
529
|
+
if (buffer.length > MAX_SSE_EVENT_CHARS) {
|
|
530
|
+
throw new Error('MCP response SSE event exceeds its size limit')
|
|
531
|
+
}
|
|
532
|
+
return false
|
|
533
|
+
}
|
|
534
|
+
try {
|
|
535
|
+
while (true) {
|
|
536
|
+
const { done, value } = await operation.run(() => reader.read())
|
|
316
537
|
this.assertCurrent(generation, operation)
|
|
317
|
-
|
|
538
|
+
if (done) {
|
|
539
|
+
if (appendChunk(decoder.decode())) return
|
|
540
|
+
// Retain the old whole-body reader's acceptance of a final event
|
|
541
|
+
// without a trailing blank line when the peer actually closes.
|
|
542
|
+
if (buffer.trim()) dispatchEvent(buffer)
|
|
543
|
+
return
|
|
544
|
+
}
|
|
545
|
+
if (value.byteLength > MAX_SSE_CHUNK_BYTES) {
|
|
546
|
+
throw new Error('MCP response SSE chunk exceeds its size limit')
|
|
547
|
+
}
|
|
548
|
+
if (appendChunk(decoder.decode(value, { stream: true }))) return
|
|
318
549
|
}
|
|
550
|
+
} finally {
|
|
551
|
+
// Cancelling is best effort: a hostile or custom body must not hold
|
|
552
|
+
// send() open after a terminal reply, timeout, or caller abort.
|
|
553
|
+
void reader.cancel().catch(() => undefined)
|
|
554
|
+
reader.releaseLock()
|
|
319
555
|
}
|
|
320
556
|
}
|
|
321
557
|
|
|
@@ -334,6 +570,67 @@ export class StreamableHttpTransport implements MCPTransport {
|
|
|
334
570
|
}
|
|
335
571
|
}
|
|
336
572
|
|
|
573
|
+
/** Count only top-level JSON-array separators, skipping nested values and strings. */
|
|
574
|
+
function sseBatchExceedsMessageLimit(event: string, limit: number): boolean {
|
|
575
|
+
const data = event
|
|
576
|
+
.split('\n')
|
|
577
|
+
.filter((line) => line.startsWith('data:'))
|
|
578
|
+
.map((line) => line.slice('data:'.length).trimStart())
|
|
579
|
+
.join('\n')
|
|
580
|
+
.trimStart()
|
|
581
|
+
if (!data.startsWith('[')) return false
|
|
582
|
+
let depth = 0
|
|
583
|
+
let inString = false
|
|
584
|
+
let escaped = false
|
|
585
|
+
let separators = 0
|
|
586
|
+
for (const character of data) {
|
|
587
|
+
if (inString) {
|
|
588
|
+
if (escaped) escaped = false
|
|
589
|
+
else if (character === '\\') escaped = true
|
|
590
|
+
else if (character === '"') inString = false
|
|
591
|
+
continue
|
|
592
|
+
}
|
|
593
|
+
if (character === '"') inString = true
|
|
594
|
+
else if (character === '[' || character === '{') depth++
|
|
595
|
+
else if (character === ']' || character === '}') depth--
|
|
596
|
+
else if (character === ',' && depth === 1 && ++separators >= limit) return true
|
|
597
|
+
}
|
|
598
|
+
return false
|
|
599
|
+
}
|
|
600
|
+
|
|
601
|
+
/** Find an SSE blank line after line endings have been normalized to LF. */
|
|
602
|
+
function findSseEventBoundary(
|
|
603
|
+
value: string,
|
|
604
|
+
from: number,
|
|
605
|
+
): { start: number; end: number } | undefined {
|
|
606
|
+
const start = value.indexOf('\n\n', from)
|
|
607
|
+
return start < 0 ? undefined : { start, end: start + 2 }
|
|
608
|
+
}
|
|
609
|
+
|
|
610
|
+
/** Keep a rejected listen response useful for diagnosis without buffering an unbounded body. */
|
|
611
|
+
async function readSubscriptionErrorBody(
|
|
612
|
+
response: Response,
|
|
613
|
+
signal: AbortSignal,
|
|
614
|
+
timeoutMs: number,
|
|
615
|
+
): Promise<string> {
|
|
616
|
+
const operation = new ConnectorHttpOperation(signal, timeoutMs, 'MCP subscription error body')
|
|
617
|
+
try {
|
|
618
|
+
const body = await readConnectorResponseBody(
|
|
619
|
+
response,
|
|
620
|
+
operation,
|
|
621
|
+
MAX_SUBSCRIPTION_ERROR_BODY_BYTES,
|
|
622
|
+
)
|
|
623
|
+
return typeof body === 'string' ? body : (JSON.stringify(body) ?? '')
|
|
624
|
+
} catch {
|
|
625
|
+
// The status is still the answer when a peer sends an unreadable,
|
|
626
|
+
// oversized, or stalled error body.
|
|
627
|
+
return ''
|
|
628
|
+
} finally {
|
|
629
|
+
operation.close()
|
|
630
|
+
void response.body?.cancel().catch(() => undefined)
|
|
631
|
+
}
|
|
632
|
+
}
|
|
633
|
+
|
|
337
634
|
/**
|
|
338
635
|
* The body of a failed response, or an empty string.
|
|
339
636
|
*
|
|
@@ -13,5 +13,5 @@ export {
|
|
|
13
13
|
} from './adapter.js'
|
|
14
14
|
export type { ConnectorRouterInput } from './adapter.js'
|
|
15
15
|
|
|
16
|
-
export {
|
|
17
|
-
export type { ConnectorToolStrategy,
|
|
16
|
+
export { connectorTools } from './router.js'
|
|
17
|
+
export type { ConnectorToolStrategy, ConnectorTools } from './router.js'
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { ConnectorManager } from '../../manager/connector/lifecycle.js'
|
|
2
|
-
import type { ToolDefinition
|
|
2
|
+
import type { ToolDefinition } from '../../types/tool/index.js'
|
|
3
3
|
import { toErrorMessage } from '../../utils/error.js'
|
|
4
4
|
import { SCOPE_ATTRIBUTE } from '../../utils/log/types.js'
|
|
5
5
|
import { type Logger, resolveLogger } from '../../utils/logger.js'
|
|
@@ -7,69 +7,46 @@ import { connectorInstanceToTools, createConnectorRouterTool } from './adapter.j
|
|
|
7
7
|
|
|
8
8
|
export type ConnectorToolStrategy = 'per-method' | 'router'
|
|
9
9
|
|
|
10
|
-
export interface
|
|
11
|
-
manager: ConnectorManager
|
|
10
|
+
export interface ConnectorTools {
|
|
12
11
|
strategy?: ConnectorToolStrategy
|
|
13
12
|
log?: Logger
|
|
14
13
|
}
|
|
15
14
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
this.log.error('Failed to create tools for a connector instance', {
|
|
40
|
-
'namzu.connector.instance_id': instance.id,
|
|
41
|
-
'exception.message': toErrorMessage(err),
|
|
42
|
-
})
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
return tools
|
|
15
|
+
/**
|
|
16
|
+
* Every tool a connector manager's connected instances currently offer.
|
|
17
|
+
*
|
|
18
|
+
* Plain and stateless — a caller wraps the result in `toolset(source, tools)`
|
|
19
|
+
* (`toolsets/toolset.ts`) itself, re-calling this whenever a reconnect or a
|
|
20
|
+
* drift notice (`onMCPToolDrift`-shaped) means the set may have changed. This
|
|
21
|
+
* replaces `ConnectorToolRouter`, whose `registerTools`/`unregisterTools`/
|
|
22
|
+
* `refreshTools` mutated a `ToolRegistryContract` directly (plan.md v3 §2)
|
|
23
|
+
* and had no production caller; a live toolset with its own `onChange` is
|
|
24
|
+
* where that live-refresh story belongs now, not a router bound to a
|
|
25
|
+
* specific registry instance.
|
|
26
|
+
*/
|
|
27
|
+
export function connectorTools(
|
|
28
|
+
manager: ConnectorManager,
|
|
29
|
+
config: ConnectorTools = {},
|
|
30
|
+
): ToolDefinition[] {
|
|
31
|
+
const strategy = config.strategy ?? 'per-method'
|
|
32
|
+
const log = resolveLogger(config.log).child({ [SCOPE_ATTRIBUTE]: 'connector/tools/router' })
|
|
33
|
+
|
|
34
|
+
if (strategy === 'router') {
|
|
35
|
+
const connected = manager.listConnectedInstances()
|
|
36
|
+
if (connected.length === 0) return []
|
|
37
|
+
return [createConnectorRouterTool(manager)]
|
|
46
38
|
}
|
|
47
39
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
40
|
+
const tools: ToolDefinition[] = []
|
|
41
|
+
for (const instance of manager.listConnectedInstances()) {
|
|
42
|
+
try {
|
|
43
|
+
tools.push(...connectorInstanceToTools(instance.id, manager))
|
|
44
|
+
} catch (err) {
|
|
45
|
+
log.error('Failed to create tools for a connector instance', {
|
|
46
|
+
'namzu.connector.instance_id': instance.id,
|
|
47
|
+
'exception.message': toErrorMessage(err),
|
|
48
|
+
})
|
|
54
49
|
}
|
|
55
|
-
this.log.info('Registered connector tools', {
|
|
56
|
-
'namzu.connector.tool_count': names.length,
|
|
57
|
-
'namzu.tool.names': names,
|
|
58
|
-
})
|
|
59
|
-
return names
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
unregisterTools(toolRegistry: ToolRegistryContract, toolNames: string[]): void {
|
|
63
|
-
for (const name of toolNames) {
|
|
64
|
-
toolRegistry.unregister(name)
|
|
65
|
-
}
|
|
66
|
-
this.log.info('Unregistered connector tools', {
|
|
67
|
-
'namzu.connector.tool_count': toolNames.length,
|
|
68
|
-
})
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
refreshTools(toolRegistry: ToolRegistryContract, previousNames: string[]): string[] {
|
|
72
|
-
this.unregisterTools(toolRegistry, previousNames)
|
|
73
|
-
return this.registerTools(toolRegistry)
|
|
74
50
|
}
|
|
51
|
+
return tools
|
|
75
52
|
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { DEFAULT_TIMEOUT_MS, DEFAULT_TOKEN_BUDGET } from '../agents/runAgent.js'
|
|
2
2
|
import type { AgentIdentity } from '../agents/runAgent.js'
|
|
3
|
-
import {
|
|
3
|
+
import { toolset } from '../toolsets/toolset.js'
|
|
4
|
+
import type { Toolset } from '../toolsets/types.js'
|
|
4
5
|
import type { SupervisorAgentConfig } from '../types/agent/supervisor.js'
|
|
5
6
|
import type { LLMProvider } from '../types/provider/index.js'
|
|
6
7
|
|
|
@@ -44,14 +45,17 @@ export interface DelegatePlan {
|
|
|
44
45
|
readonly manifest: DirectoryManifest
|
|
45
46
|
/** The delegate's own instructions, tools and model, already assembled. */
|
|
46
47
|
readonly systemPrompt: string
|
|
47
|
-
readonly
|
|
48
|
+
readonly toolsets: readonly Toolset[]
|
|
48
49
|
readonly model: string
|
|
49
50
|
}
|
|
50
51
|
|
|
51
|
-
function toolsOf(manifest: DirectoryManifest):
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
52
|
+
function toolsOf(manifest: DirectoryManifest): readonly Toolset[] {
|
|
53
|
+
return [
|
|
54
|
+
toolset(
|
|
55
|
+
'directory',
|
|
56
|
+
manifest.tools.map((entry) => entry.definition),
|
|
57
|
+
),
|
|
58
|
+
]
|
|
55
59
|
}
|
|
56
60
|
|
|
57
61
|
function delegatePlan(entry: SubAgentEntry, fallbackModel: string): DelegatePlan {
|
|
@@ -59,7 +63,7 @@ function delegatePlan(entry: SubAgentEntry, fallbackModel: string): DelegatePlan
|
|
|
59
63
|
id: entry.id,
|
|
60
64
|
manifest: entry.manifest,
|
|
61
65
|
systemPrompt: entry.manifest.instructions,
|
|
62
|
-
|
|
66
|
+
toolsets: toolsOf(entry.manifest),
|
|
63
67
|
// A delegate may name its own model — a cheap one for a narrow job is
|
|
64
68
|
// the common case — and inherits the supervisor's only when it does
|
|
65
69
|
// not. Inheriting unconditionally would silently bill every specialist
|
|
@@ -114,7 +118,7 @@ export function deriveSupervisorOptions(
|
|
|
114
118
|
agentManager: input.agentManager,
|
|
115
119
|
agentIds: delegates.map((d) => d.id),
|
|
116
120
|
systemPrompt: manifest.instructions,
|
|
117
|
-
|
|
121
|
+
toolsets: toolsOf(manifest),
|
|
118
122
|
// Skills were loaded and then dropped. The manifest reads a whole
|
|
119
123
|
// `skills/` directory and `SupervisorAgentConfig` takes them, and the
|
|
120
124
|
// cast that used to close this object meant nobody was told the field
|
package/src/directory/derive.ts
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import type { RunAgentOptions } from '../agents/runAgent.js'
|
|
2
|
-
import {
|
|
3
|
-
|
|
2
|
+
import { toolset } from '../toolsets/toolset.js'
|
|
4
3
|
import type { DeriveTurnOptionsInput, DirectoryManifest } from './types.js'
|
|
5
4
|
|
|
6
5
|
/**
|
|
@@ -32,14 +31,18 @@ export function deriveTurnOptions(
|
|
|
32
31
|
)
|
|
33
32
|
}
|
|
34
33
|
|
|
35
|
-
const
|
|
36
|
-
|
|
34
|
+
const toolsets = [
|
|
35
|
+
toolset(
|
|
36
|
+
'directory',
|
|
37
|
+
manifest.tools.map((entry) => entry.definition),
|
|
38
|
+
),
|
|
39
|
+
]
|
|
37
40
|
|
|
38
41
|
return {
|
|
39
42
|
provider: input.provider,
|
|
40
43
|
prompt: input.prompt,
|
|
41
44
|
model,
|
|
42
|
-
|
|
45
|
+
toolsets,
|
|
43
46
|
// The one value the project knows and `runAgent` cannot infer. Left
|
|
44
47
|
// unset it would default to the host's own cwd, pointing the file
|
|
45
48
|
// tools' containment at the host's source tree rather than at the
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
* backend that cannot withhold those is not a backend for this.
|
|
19
19
|
* - **Everything it can do, it does by asking.** The only channel out is a
|
|
20
20
|
* call back into the host, which is what makes NZ-EXEC-06's dispatch
|
|
21
|
-
* through the turn's own `
|
|
21
|
+
* through the turn's own `ToolManager` possible — the program cannot
|
|
22
22
|
* reach a tool the turn did not grant, because it cannot reach anything.
|
|
23
23
|
* - **Bounded.** Wall clock and output, both enforced by the backend
|
|
24
24
|
* rather than requested of the program.
|
|
@@ -57,7 +57,7 @@ export interface HostCallContext {
|
|
|
57
57
|
* What the host will answer.
|
|
58
58
|
*
|
|
59
59
|
* A function rather than a table, so the host decides per call. NZ-EXEC-06
|
|
60
|
-
* makes this the turn's `
|
|
60
|
+
* makes this the turn's `ToolManager` and its permission gate, which is
|
|
61
61
|
* exactly the point: the program's reach is the turn's reach, resolved at
|
|
62
62
|
* the moment of the call rather than frozen when the program started.
|
|
63
63
|
*/
|
package/src/invariants/index.ts
CHANGED
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
// worse home than the one it started in.
|
|
10
10
|
|
|
11
11
|
import { ManagedRegistry } from '../registry/ManagedRegistry.js'
|
|
12
|
+
import { RegistryCollisionError } from '../registry/collision.js'
|
|
12
13
|
|
|
13
14
|
/**
|
|
14
15
|
* What a module's check said about its own claim, the moment it was asked.
|
|
@@ -50,12 +51,14 @@ export type InvariantCheck<TContext = unknown> = (
|
|
|
50
51
|
* every reference to the other's `id` kept resolving as if it still existed.
|
|
51
52
|
* Mirrors `ProbeNameCollisionError`.
|
|
52
53
|
*/
|
|
53
|
-
export class InvariantNameCollisionError extends
|
|
54
|
+
export class InvariantNameCollisionError extends RegistryCollisionError {
|
|
54
55
|
readonly moduleName: string
|
|
55
56
|
readonly invariantName: string
|
|
56
57
|
|
|
57
58
|
constructor(moduleName: string, invariantName: string) {
|
|
58
59
|
super(
|
|
60
|
+
'InvariantRegistry',
|
|
61
|
+
`${moduleName}:${invariantName}`,
|
|
59
62
|
`Invariant "${moduleName}:${invariantName}" is already registered. Two modules picked the same name, or this module registered itself twice — pick a different name, or find the second registration.`,
|
|
60
63
|
)
|
|
61
64
|
this.name = 'InvariantNameCollisionError'
|