@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
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { rm } from 'node:fs/promises'
|
|
1
|
+
import { realpath, rm, stat } from 'node:fs/promises'
|
|
2
|
+
import { isAbsolute, relative, resolve, sep } from 'node:path'
|
|
2
3
|
import { AGENT_MANAGER_DEFAULTS } from '../../constants/agent/index.js'
|
|
3
4
|
import { EMPTY_TOKEN_USAGE } from '../../constants/limits.js'
|
|
4
5
|
import { GENAI } from '../../constants/telemetry/index.js'
|
|
@@ -9,6 +10,7 @@ import {
|
|
|
9
10
|
} from '../../session/handoff/capacity.js'
|
|
10
11
|
import type { SessionLocator, SessionPaths } from '../../session/paths.js'
|
|
11
12
|
import type { SessionSummaryMaterializer } from '../../session/summary/materialize.js'
|
|
13
|
+
import type { WorkspaceBackendDriver } from '../../session/workspace/driver.js'
|
|
12
14
|
import type { WorkspaceBackendRegistry } from '../../session/workspace/registry.js'
|
|
13
15
|
import {
|
|
14
16
|
DiskSessionLog,
|
|
@@ -151,6 +153,7 @@ interface ChildSpawnRecord {
|
|
|
151
153
|
/** Removes the child's log from the process-local lookup. */
|
|
152
154
|
releaseLog?: () => void
|
|
153
155
|
workspaceRef?: WorkspaceRef
|
|
156
|
+
workspaceRetention?: 'retain'
|
|
154
157
|
/**
|
|
155
158
|
* What this child was actually granted, after the ancestor union.
|
|
156
159
|
*
|
|
@@ -180,6 +183,81 @@ function mergeEnv(
|
|
|
180
183
|
return { ...base, ...override }
|
|
181
184
|
}
|
|
182
185
|
|
|
186
|
+
/** A requested isolated child must never resolve to its caller's directory. */
|
|
187
|
+
async function requireIsolatedWorktreePath(
|
|
188
|
+
ref: WorkspaceRef | undefined,
|
|
189
|
+
callerCwd?: string,
|
|
190
|
+
subdirectory?: string,
|
|
191
|
+
): Promise<string> {
|
|
192
|
+
const meta = ref?.meta
|
|
193
|
+
if (
|
|
194
|
+
typeof ref?.id !== 'string' ||
|
|
195
|
+
ref.id.length === 0 ||
|
|
196
|
+
meta?.backend !== 'git-worktree' ||
|
|
197
|
+
typeof meta.repoRoot !== 'string' ||
|
|
198
|
+
!isAbsolute(meta.repoRoot) ||
|
|
199
|
+
typeof meta.branch !== 'string' ||
|
|
200
|
+
meta.branch.length === 0 ||
|
|
201
|
+
typeof meta.worktreePath !== 'string' ||
|
|
202
|
+
!isAbsolute(meta.worktreePath) ||
|
|
203
|
+
resolve(meta.worktreePath) === resolve(callerCwd ?? process.cwd())
|
|
204
|
+
) {
|
|
205
|
+
throw new Error('Isolated git-worktree driver returned an invalid workspace ref or path')
|
|
206
|
+
}
|
|
207
|
+
// A custom driver can return a different absolute spelling of the same
|
|
208
|
+
// directory (for example, a symlink to the caller). Both paths must exist
|
|
209
|
+
// before the child is admitted, and their physical roots must differ.
|
|
210
|
+
let physicalPaths: [string, string]
|
|
211
|
+
try {
|
|
212
|
+
physicalPaths = await Promise.all([
|
|
213
|
+
realpath(meta.worktreePath),
|
|
214
|
+
realpath(resolve(callerCwd ?? process.cwd())),
|
|
215
|
+
])
|
|
216
|
+
if (!(await stat(physicalPaths[0])).isDirectory()) {
|
|
217
|
+
throw new Error('The worktree path is not a directory')
|
|
218
|
+
}
|
|
219
|
+
} catch (cause) {
|
|
220
|
+
throw new Error('Isolated git-worktree driver returned an invalid workspace ref or path', {
|
|
221
|
+
cause,
|
|
222
|
+
})
|
|
223
|
+
}
|
|
224
|
+
if (physicalPaths[0] === physicalPaths[1]) {
|
|
225
|
+
throw new Error('Isolated git-worktree driver returned an invalid workspace ref or path')
|
|
226
|
+
}
|
|
227
|
+
if (subdirectory === undefined) return meta.worktreePath
|
|
228
|
+
if (typeof subdirectory !== 'string' || subdirectory.length === 0 || isAbsolute(subdirectory)) {
|
|
229
|
+
throw new Error('Isolated workspace subdirectory must be a nonempty relative path')
|
|
230
|
+
}
|
|
231
|
+
const lexicalChild = resolve(meta.worktreePath, subdirectory)
|
|
232
|
+
const lexicalRelative = relative(resolve(meta.worktreePath), lexicalChild)
|
|
233
|
+
if (
|
|
234
|
+
isAbsolute(lexicalRelative) ||
|
|
235
|
+
lexicalRelative === '..' ||
|
|
236
|
+
lexicalRelative.startsWith(`..${sep}`)
|
|
237
|
+
) {
|
|
238
|
+
throw new Error('Isolated workspace subdirectory escapes the worktree')
|
|
239
|
+
}
|
|
240
|
+
let physicalChild: string
|
|
241
|
+
try {
|
|
242
|
+
physicalChild = await realpath(lexicalChild)
|
|
243
|
+
if (!(await stat(physicalChild)).isDirectory()) {
|
|
244
|
+
throw new Error('The selected worktree path is not a directory')
|
|
245
|
+
}
|
|
246
|
+
} catch (cause) {
|
|
247
|
+
throw new Error('Isolated workspace subdirectory is missing or not a directory', { cause })
|
|
248
|
+
}
|
|
249
|
+
const physicalRelative = relative(physicalPaths[0], physicalChild)
|
|
250
|
+
if (
|
|
251
|
+
physicalRelative === '' ||
|
|
252
|
+
isAbsolute(physicalRelative) ||
|
|
253
|
+
physicalRelative === '..' ||
|
|
254
|
+
physicalRelative.startsWith(`..${sep}`)
|
|
255
|
+
) {
|
|
256
|
+
throw new Error('Isolated workspace subdirectory resolves outside its worktree')
|
|
257
|
+
}
|
|
258
|
+
return physicalChild
|
|
259
|
+
}
|
|
260
|
+
|
|
183
261
|
/**
|
|
184
262
|
* One `reviewAllowedCalls` that answers `true` when any of `sources` does.
|
|
185
263
|
*
|
|
@@ -283,7 +361,9 @@ export class AgentManager {
|
|
|
283
361
|
if (task.context === context || context.parentAbortController.signal.aborted)
|
|
284
362
|
this.cancel(task.taskId, 'parent')
|
|
285
363
|
}
|
|
286
|
-
task.childAbortController.signal.addEventListener('abort', onAbort, {
|
|
364
|
+
task.childAbortController.signal.addEventListener('abort', onAbort, {
|
|
365
|
+
once: true,
|
|
366
|
+
})
|
|
287
367
|
const entry: PendingSpawn = {
|
|
288
368
|
ready: false,
|
|
289
369
|
task,
|
|
@@ -522,9 +602,25 @@ export class AgentManager {
|
|
|
522
602
|
await childBudget.flush()
|
|
523
603
|
throw error
|
|
524
604
|
}
|
|
605
|
+
let childOptions: SendMessageOptions = options
|
|
525
606
|
let childAbortController: AbortController | undefined
|
|
526
607
|
let agentTask: AgentTask | undefined
|
|
527
608
|
try {
|
|
609
|
+
// Explicit isolation is the child's execution root, not a side
|
|
610
|
+
// resource. Keep validation in this rollback envelope too.
|
|
611
|
+
if (options.workspace?.mode === 'isolated') {
|
|
612
|
+
childOptions = {
|
|
613
|
+
...options,
|
|
614
|
+
input: {
|
|
615
|
+
...options.input,
|
|
616
|
+
workingDirectory: await requireIsolatedWorktreePath(
|
|
617
|
+
spawnRecord.workspaceRef,
|
|
618
|
+
options.input.workingDirectory,
|
|
619
|
+
options.workspace.subdirectory,
|
|
620
|
+
),
|
|
621
|
+
},
|
|
622
|
+
}
|
|
623
|
+
}
|
|
528
624
|
childAbortController =
|
|
529
625
|
queuedTask?.childAbortController ??
|
|
530
626
|
createChildAbortController(context.parentAbortController)
|
|
@@ -599,6 +695,7 @@ export class AgentManager {
|
|
|
599
695
|
state: 'pending',
|
|
600
696
|
pendingMessages: queuedTask?.pendingMessages ?? [],
|
|
601
697
|
createdAt: queuedTask?.createdAt ?? Date.now(),
|
|
698
|
+
workspace: options.workspace?.mode === 'isolated' ? spawnRecord.workspaceRef : undefined,
|
|
602
699
|
sessionEventListener: listener,
|
|
603
700
|
} satisfies AgentTask)
|
|
604
701
|
|
|
@@ -676,6 +773,7 @@ export class AgentManager {
|
|
|
676
773
|
...(context.factoryOptions ?? {}),
|
|
677
774
|
tokenBudget: allocatedTokens,
|
|
678
775
|
timeoutMs: options.budgetAllocation?.timeoutMs ?? this.config.childTimeoutMs,
|
|
776
|
+
workingDirectory: childOptions.input.workingDirectory,
|
|
679
777
|
sessionId: spawnRecord.childSessionId,
|
|
680
778
|
parentSessionId: spawnRecord.parentSessionId,
|
|
681
779
|
parentTurnId: spawnRecord.parentTurnId,
|
|
@@ -872,11 +970,11 @@ export class AgentManager {
|
|
|
872
970
|
spawnRecord,
|
|
873
971
|
childConfig,
|
|
874
972
|
context,
|
|
875
|
-
|
|
973
|
+
childOptions,
|
|
876
974
|
taskId,
|
|
877
975
|
)
|
|
878
976
|
if (childLog) {
|
|
879
|
-
await this.startChildSessionLog(childLog, spawnRecord, context,
|
|
977
|
+
await this.startChildSessionLog(childLog, spawnRecord, context, childOptions, taskId, {
|
|
880
978
|
id: agent.metadata.id,
|
|
881
979
|
name: agent.metadata.name,
|
|
882
980
|
})
|
|
@@ -903,7 +1001,7 @@ export class AgentManager {
|
|
|
903
1001
|
childAbortController.signal.throwIfAborted()
|
|
904
1002
|
this.executingTasks.add(taskId)
|
|
905
1003
|
const runningTask = agentTask
|
|
906
|
-
this.runChild(runningTask,
|
|
1004
|
+
this.runChild(runningTask, childOptions, childConfig, listener)
|
|
907
1005
|
.catch(async (err) => {
|
|
908
1006
|
// A thrown invocation supplied no final usage receipt. Keep its
|
|
909
1007
|
// reservation, including when its task handle was canceled or evicted.
|
|
@@ -999,6 +1097,9 @@ export class AgentManager {
|
|
|
999
1097
|
this.scheduleEviction(agentTask.taskId)
|
|
1000
1098
|
} else this.instances.delete(agentTask.taskId)
|
|
1001
1099
|
this.dropSpawnRecord(agentTask.taskId)
|
|
1100
|
+
// Admission never completed. The checkout is rollback-owned, not a
|
|
1101
|
+
// retained result that a terminal handle may advertise.
|
|
1102
|
+
agentTask.workspace = undefined
|
|
1002
1103
|
this.resolveCompletionCallbacks(agentTask.taskId)
|
|
1003
1104
|
await this.rollbackSpawnResources(spawnRecord)
|
|
1004
1105
|
}
|
|
@@ -1015,7 +1116,7 @@ export class AgentManager {
|
|
|
1015
1116
|
}),
|
|
1016
1117
|
)
|
|
1017
1118
|
}
|
|
1018
|
-
await this.disposeChildWorkspace(spawnRecord)
|
|
1119
|
+
await this.disposeChildWorkspace({ ...spawnRecord, workspaceRetention: undefined })
|
|
1019
1120
|
try {
|
|
1020
1121
|
// The edge must be removed before its child: stores reject deletion
|
|
1021
1122
|
// of a session that still has a subsession reference.
|
|
@@ -1135,7 +1236,10 @@ export class AgentManager {
|
|
|
1135
1236
|
taskId: TaskId,
|
|
1136
1237
|
agent: { readonly id: string; readonly name: string },
|
|
1137
1238
|
): Promise<void> {
|
|
1138
|
-
const lease = await log.claim({
|
|
1239
|
+
const lease = await log.claim({
|
|
1240
|
+
holder: `namzu:agent-manager:${taskId}`,
|
|
1241
|
+
ttlMs: 30_000,
|
|
1242
|
+
})
|
|
1139
1243
|
if (lease === null) {
|
|
1140
1244
|
throw new Error(`Child session ${spawnRecord.childSessionId} is already leased`)
|
|
1141
1245
|
}
|
|
@@ -1459,6 +1563,7 @@ export class AgentManager {
|
|
|
1459
1563
|
// parent but counted against `maxDelegationWidth`.
|
|
1460
1564
|
let subSession: Awaited<ReturnType<typeof store.createSubSession>> | undefined
|
|
1461
1565
|
let workspaceRef: WorkspaceRef | undefined
|
|
1566
|
+
let workspaceDriver: WorkspaceBackendDriver | undefined
|
|
1462
1567
|
try {
|
|
1463
1568
|
// Flip to 'active' so the materializer's atomic write + status flip
|
|
1464
1569
|
// lands on terminal — §5.3: pending→active→idle.
|
|
@@ -1483,10 +1588,30 @@ export class AgentManager {
|
|
|
1483
1588
|
// provisioning: an unregistered backend leaves `workspaceRef:
|
|
1484
1589
|
// undefined` on the spawn record, not a hard error — the registry
|
|
1485
1590
|
// is the capability surface.
|
|
1486
|
-
const
|
|
1487
|
-
|
|
1591
|
+
const request = options.workspace
|
|
1592
|
+
const backend =
|
|
1593
|
+
request?.mode === 'shared'
|
|
1594
|
+
? undefined
|
|
1595
|
+
: request?.mode === 'isolated'
|
|
1596
|
+
? request.backend
|
|
1597
|
+
: (options.workspaceBackend ??
|
|
1598
|
+
(this.config.workspaceDefault === 'shared' ? undefined : 'git-worktree'))
|
|
1599
|
+
if (request?.mode === 'isolated' && !this.deps.workspaceRegistry.has(request.backend)) {
|
|
1600
|
+
throw new Error(`Isolated workspace backend ${request.backend} is unavailable`)
|
|
1601
|
+
}
|
|
1602
|
+
if (backend && this.deps.workspaceRegistry.has(backend)) {
|
|
1488
1603
|
const driver = this.deps.workspaceRegistry.get(backend)
|
|
1489
|
-
|
|
1604
|
+
workspaceDriver = driver
|
|
1605
|
+
workspaceRef = await driver.create({
|
|
1606
|
+
label: subSession.id,
|
|
1607
|
+
...(request?.mode === 'isolated' && request.baseRef ? { baseRef: request.baseRef } : {}),
|
|
1608
|
+
})
|
|
1609
|
+
if (request?.mode === 'isolated')
|
|
1610
|
+
await requireIsolatedWorktreePath(
|
|
1611
|
+
workspaceRef,
|
|
1612
|
+
options.input.workingDirectory,
|
|
1613
|
+
request.subdirectory,
|
|
1614
|
+
)
|
|
1490
1615
|
|
|
1491
1616
|
// Write the workspace onto the record that outlives this process.
|
|
1492
1617
|
//
|
|
@@ -1503,16 +1628,23 @@ export class AgentManager {
|
|
|
1503
1628
|
// exist before the record it is named after. Inside the try, so
|
|
1504
1629
|
// the compensating rollback below covers it like every other
|
|
1505
1630
|
// mutation here.
|
|
1506
|
-
subSession = {
|
|
1631
|
+
subSession = {
|
|
1632
|
+
...subSession,
|
|
1633
|
+
workspaceId: workspaceRef.id,
|
|
1634
|
+
...(request?.mode === 'isolated' && request.retention === 'retain'
|
|
1635
|
+
? { workspaceRetention: 'retain' as const }
|
|
1636
|
+
: {}),
|
|
1637
|
+
}
|
|
1507
1638
|
await store.updateSubSession(subSession, context.tenantId)
|
|
1508
1639
|
}
|
|
1509
1640
|
} catch (err) {
|
|
1510
|
-
if (workspaceRef &&
|
|
1511
|
-
await
|
|
1512
|
-
|
|
1513
|
-
|
|
1514
|
-
|
|
1515
|
-
|
|
1641
|
+
if (workspaceRef && workspaceDriver)
|
|
1642
|
+
await workspaceDriver.dispose(workspaceRef).catch((disposeErr) =>
|
|
1643
|
+
this.log.warn('Unstarted workspace dispose failed', {
|
|
1644
|
+
'namzu.sub_session.id': subSession?.id,
|
|
1645
|
+
'exception.message': toErrorMessage(disposeErr),
|
|
1646
|
+
}),
|
|
1647
|
+
)
|
|
1516
1648
|
// Compensating rollback order is mandated by the store's
|
|
1517
1649
|
// deny-by-default cascade policy (Convention #5): `deleteSession`
|
|
1518
1650
|
// throws when any subsession still references it, so the subsession
|
|
@@ -1540,6 +1672,9 @@ export class AgentManager {
|
|
|
1540
1672
|
ancestry: parentAncestry,
|
|
1541
1673
|
childDepth,
|
|
1542
1674
|
workspaceRef,
|
|
1675
|
+
...(options.workspace?.mode === 'isolated' && options.workspace.retention === 'retain'
|
|
1676
|
+
? { workspaceRetention: 'retain' as const }
|
|
1677
|
+
: {}),
|
|
1543
1678
|
}
|
|
1544
1679
|
}
|
|
1545
1680
|
|
|
@@ -1555,6 +1690,15 @@ export class AgentManager {
|
|
|
1555
1690
|
const input = {
|
|
1556
1691
|
...options.input,
|
|
1557
1692
|
signal: agentTask.childAbortController.signal,
|
|
1693
|
+
// The admitted child session is the authority. A caller-supplied input
|
|
1694
|
+
// cannot redirect its turn to another tenant, project, topic or session.
|
|
1695
|
+
managedScope: {
|
|
1696
|
+
kind: 'managed' as const,
|
|
1697
|
+
sessionId: agentTask.context.sessionId,
|
|
1698
|
+
topicId: agentTask.context.topicId,
|
|
1699
|
+
projectId: agentTask.context.projectId,
|
|
1700
|
+
tenantId: agentTask.context.tenantId,
|
|
1701
|
+
},
|
|
1558
1702
|
}
|
|
1559
1703
|
|
|
1560
1704
|
const spawnRecord = this.spawnRecords.get(agentTask.taskId)
|
|
@@ -1760,7 +1904,10 @@ export class AgentManager {
|
|
|
1760
1904
|
status: 'failed',
|
|
1761
1905
|
usage: agentTask.context.budget.ownUsage,
|
|
1762
1906
|
budget: agentTask.context.budget.summary(),
|
|
1763
|
-
cost: {
|
|
1907
|
+
cost: {
|
|
1908
|
+
...ZERO_COST,
|
|
1909
|
+
unpricedTokens: agentTask.context.budget.ownTokens,
|
|
1910
|
+
},
|
|
1764
1911
|
iterations: 0,
|
|
1765
1912
|
durationMs: Date.now() - agentTask.createdAt,
|
|
1766
1913
|
messages: [],
|
|
@@ -1826,8 +1973,9 @@ export class AgentManager {
|
|
|
1826
1973
|
* removed is an operator's problem and silence is how it stays one.
|
|
1827
1974
|
*/
|
|
1828
1975
|
private async disposeChildWorkspace(
|
|
1829
|
-
spawnRecord: Pick<ChildSpawnRecord, 'workspaceRef' | 'subSessionId'>,
|
|
1976
|
+
spawnRecord: Pick<ChildSpawnRecord, 'workspaceRef' | 'workspaceRetention' | 'subSessionId'>,
|
|
1830
1977
|
): Promise<void> {
|
|
1978
|
+
if (spawnRecord.workspaceRetention === 'retain') return
|
|
1831
1979
|
if (!spawnRecord.workspaceRef) return
|
|
1832
1980
|
const backend = spawnRecord.workspaceRef.meta.backend
|
|
1833
1981
|
if (!this.deps.workspaceRegistry.has(backend)) return
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { BaseConnector } from '../../connector/BaseConnector.js'
|
|
2
2
|
import type { BaseExecutionContext } from '../../execution/base.js'
|
|
3
3
|
import { ExecutionContextFactory } from '../../execution/factory.js'
|
|
4
|
+
import { RegistryCollisionError } from '../../registry/collision.js'
|
|
4
5
|
import type { ConnectorRegistry } from '../../registry/connector/definitions.js'
|
|
5
6
|
import type { ScopedConnectorRegistry } from '../../registry/connector/scoped.js'
|
|
6
7
|
import type {
|
|
@@ -43,6 +44,21 @@ export interface EnvironmentConnectorManagerConfig {
|
|
|
43
44
|
log?: Logger
|
|
44
45
|
}
|
|
45
46
|
|
|
47
|
+
/** Two environments claiming one id. */
|
|
48
|
+
export class EnvironmentCollisionError extends RegistryCollisionError {
|
|
49
|
+
readonly environmentId: string
|
|
50
|
+
|
|
51
|
+
constructor(environmentId: string) {
|
|
52
|
+
super(
|
|
53
|
+
'EnvironmentConnectorManager',
|
|
54
|
+
environmentId,
|
|
55
|
+
`Environment "${environmentId}" is already registered. Unregister it first via unregisterEnvironment(), or pick a different id.`,
|
|
56
|
+
)
|
|
57
|
+
this.name = 'EnvironmentCollisionError'
|
|
58
|
+
this.environmentId = environmentId
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
46
62
|
interface EnvironmentState {
|
|
47
63
|
descriptor: EnvironmentDescriptor
|
|
48
64
|
scopeChain: ScopeChain
|
|
@@ -71,10 +87,7 @@ export class EnvironmentConnectorManager {
|
|
|
71
87
|
registerEnvironment(setup: EnvironmentConnectorSetup): void {
|
|
72
88
|
const envId = setup.environment.id
|
|
73
89
|
if (this.environments.has(envId)) {
|
|
74
|
-
|
|
75
|
-
'namzu.environment.id': envId,
|
|
76
|
-
})
|
|
77
|
-
return
|
|
90
|
+
throw new EnvironmentCollisionError(envId)
|
|
78
91
|
}
|
|
79
92
|
|
|
80
93
|
const manager = new ConnectorManager({ registry: this.connectorRegistry, log: this.log })
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
export { ConnectorManager } from './lifecycle.js'
|
|
2
2
|
export type { ConnectorManagerConfig } from './lifecycle.js'
|
|
3
3
|
|
|
4
|
-
export { TenantConnectorManager } from './tenant.js'
|
|
4
|
+
export { TenantCollisionError, TenantConnectorManager } from './tenant.js'
|
|
5
5
|
export type { TenantConnectorManagerConfig } from './tenant.js'
|
|
6
6
|
|
|
7
|
-
export { EnvironmentConnectorManager } from './environment.js'
|
|
7
|
+
export { EnvironmentCollisionError, EnvironmentConnectorManager } from './environment.js'
|
|
8
8
|
export type {
|
|
9
9
|
EnvironmentConnectorSetup,
|
|
10
10
|
EnvironmentConnectorManagerConfig,
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { BaseConnector } from '../../connector/BaseConnector.js'
|
|
2
2
|
import { NAMZU } from '../../constants/telemetry/index.js'
|
|
3
|
+
import { RegistryCollisionError } from '../../registry/collision.js'
|
|
3
4
|
import type { ConnectorRegistry } from '../../registry/connector/definitions.js'
|
|
4
5
|
import type {
|
|
5
6
|
AuthConfig,
|
|
@@ -47,6 +48,21 @@ export interface TenantConnectorManagerConfig {
|
|
|
47
48
|
log?: Logger
|
|
48
49
|
}
|
|
49
50
|
|
|
51
|
+
/** Two tenants claiming one id. */
|
|
52
|
+
export class TenantCollisionError extends RegistryCollisionError {
|
|
53
|
+
readonly tenantId: string
|
|
54
|
+
|
|
55
|
+
constructor(tenantId: string) {
|
|
56
|
+
super(
|
|
57
|
+
'TenantConnectorManager',
|
|
58
|
+
tenantId,
|
|
59
|
+
`Tenant "${tenantId}" is already registered. Unregister it first via unregisterTenant(), or pick a different id.`,
|
|
60
|
+
)
|
|
61
|
+
this.name = 'TenantCollisionError'
|
|
62
|
+
this.tenantId = tenantId
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
50
66
|
interface TenantState {
|
|
51
67
|
descriptor: TenantDescriptor
|
|
52
68
|
manager: ConnectorManager
|
|
@@ -73,10 +89,7 @@ export class TenantConnectorManager {
|
|
|
73
89
|
|
|
74
90
|
registerTenant(descriptor: TenantDescriptor, rateLimit?: TenantRateLimitConfig): void {
|
|
75
91
|
if (this.tenants.has(descriptor.id)) {
|
|
76
|
-
|
|
77
|
-
[NAMZU.TENANT_ID]: descriptor.id,
|
|
78
|
-
})
|
|
79
|
-
return
|
|
92
|
+
throw new TenantCollisionError(descriptor.id)
|
|
80
93
|
}
|
|
81
94
|
|
|
82
95
|
const tenantLog = this.log.child({ [NAMZU.TENANT_ID]: descriptor.id })
|
package/src/manager/index.ts
CHANGED
|
@@ -3,10 +3,10 @@ export { TurnRecorder } from './session/turn-recorder.js'
|
|
|
3
3
|
export { ConnectorManager } from './connector/lifecycle.js'
|
|
4
4
|
export type { ConnectorManagerConfig } from './connector/lifecycle.js'
|
|
5
5
|
|
|
6
|
-
export { TenantConnectorManager } from './connector/tenant.js'
|
|
6
|
+
export { TenantCollisionError, TenantConnectorManager } from './connector/tenant.js'
|
|
7
7
|
export type { TenantConnectorManagerConfig } from './connector/tenant.js'
|
|
8
8
|
|
|
9
|
-
export { EnvironmentConnectorManager } from './connector/environment.js'
|
|
9
|
+
export { EnvironmentCollisionError, EnvironmentConnectorManager } from './connector/environment.js'
|
|
10
10
|
export type {
|
|
11
11
|
EnvironmentConnectorSetup,
|
|
12
12
|
EnvironmentConnectorManagerConfig,
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import type { SessionLog } from '../../store/session-log/index.js'
|
|
2
|
+
import { NamzuError } from '../../types/errors/index.js'
|
|
3
|
+
import type { ProjectId, SessionId, TenantId, TopicId } from '../../types/ids/index.js'
|
|
4
|
+
|
|
5
|
+
/** The complete owner a caller says a session log has. */
|
|
6
|
+
export interface SessionLogAttribution {
|
|
7
|
+
readonly sessionId: SessionId
|
|
8
|
+
readonly projectId: ProjectId
|
|
9
|
+
readonly tenantId: TenantId
|
|
10
|
+
readonly topicId: TopicId
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Refuse a session owned by another scope before reading its history or
|
|
15
|
+
* checkpoints. Call again while holding its writer lease before a new turn:
|
|
16
|
+
* an empty log seen before the claim may have been opened by another writer.
|
|
17
|
+
*
|
|
18
|
+
* Older logs can omit tenantId/topicId in their schema. They remain readable,
|
|
19
|
+
* but cannot be continued or forked under a guessed owner.
|
|
20
|
+
* Returns false for an unopened log when `requireStarted` is not set.
|
|
21
|
+
*/
|
|
22
|
+
export async function assertSessionLogAttribution(
|
|
23
|
+
log: SessionLog,
|
|
24
|
+
scope: SessionLogAttribution,
|
|
25
|
+
options: { readonly requireStarted?: boolean } = {},
|
|
26
|
+
): Promise<boolean> {
|
|
27
|
+
const requiredFields = ['sessionId', 'projectId', 'tenantId', 'topicId'] as const
|
|
28
|
+
const missingFields = requiredFields.filter(
|
|
29
|
+
(field) => typeof scope[field] !== 'string' || scope[field] === '',
|
|
30
|
+
)
|
|
31
|
+
if (missingFields.length > 0) {
|
|
32
|
+
throw new NamzuError({
|
|
33
|
+
code: 'invalid_config',
|
|
34
|
+
message: `A session owner scope requires ${missingFields.join(', ')}.`,
|
|
35
|
+
details: { fields: missingFields },
|
|
36
|
+
})
|
|
37
|
+
}
|
|
38
|
+
if (log.sessionId !== scope.sessionId) {
|
|
39
|
+
throw new NamzuError({
|
|
40
|
+
code: 'invalid_config',
|
|
41
|
+
message: `The session log belongs to session ${log.sessionId}, not ${scope.sessionId}.`,
|
|
42
|
+
details: { fields: ['sessionId'] },
|
|
43
|
+
})
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
const opened = (await log.readAll({ throughSeq: 1 })).entries[0]?.record
|
|
47
|
+
if (!opened && !options.requireStarted) return false
|
|
48
|
+
if (!opened) {
|
|
49
|
+
throw new NamzuError({
|
|
50
|
+
code: 'invalid_config',
|
|
51
|
+
message: `Session ${scope.sessionId} has no session_started owner record.`,
|
|
52
|
+
details: { fields: ['sessionId'] },
|
|
53
|
+
})
|
|
54
|
+
}
|
|
55
|
+
if (opened.type !== 'session_started') {
|
|
56
|
+
throw new NamzuError({
|
|
57
|
+
code: 'invalid_config',
|
|
58
|
+
message: `Session ${scope.sessionId} has no session_started owner record.`,
|
|
59
|
+
details: { fields: ['sessionId'] },
|
|
60
|
+
})
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
const fields: string[] = []
|
|
64
|
+
if (opened.sessionId !== scope.sessionId) fields.push('sessionId')
|
|
65
|
+
if (opened.projectId !== scope.projectId) fields.push('projectId')
|
|
66
|
+
if (opened.tenantId === undefined || opened.tenantId !== scope.tenantId) {
|
|
67
|
+
fields.push('tenantId')
|
|
68
|
+
}
|
|
69
|
+
if (opened.topicId === undefined || opened.topicId !== scope.topicId) {
|
|
70
|
+
fields.push('topicId')
|
|
71
|
+
}
|
|
72
|
+
if (fields.length === 0) return true
|
|
73
|
+
|
|
74
|
+
throw new NamzuError({
|
|
75
|
+
code: 'invalid_config',
|
|
76
|
+
message: `Session ${scope.sessionId} is not opened under the supplied ${fields.join(', ')} scope.`,
|
|
77
|
+
details: { fields },
|
|
78
|
+
})
|
|
79
|
+
}
|