@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
package/src/tools/roster.ts
CHANGED
|
@@ -1,46 +1,97 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Selecting a narrower roster of tools from a wider one.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
4
|
+
* `filterReadOnlyTools`/`filterToolsNamed` (a registry-shaped "copy the
|
|
5
|
+
* matching subset into a new one") are gone (plan.md v3 §8, a break): a
|
|
6
|
+
* toolset's own `filtered(ts, selector)` (`toolsets/wrappers.ts`) replaces
|
|
7
|
+
* both — `filtered(ts, (tool, source) => isTrustedReadOnly(tool, undefined, source))`
|
|
8
|
+
* for the read-only case, `filtered(ts, names)` for the name-list case —
|
|
9
|
+
* and, unlike the old registry-level copy, it keeps the inner toolset's
|
|
10
|
+
* `availability` and stays live over a live source instead of freezing a
|
|
11
|
+
* snapshot at filter time.
|
|
10
12
|
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
+
* **Filter each contributing toolset, then combine — never the reverse.**
|
|
14
|
+
* `filtered`'s predicate reads `source` from the ONE toolset it is called
|
|
15
|
+
* on (`ToolPredicate`, `toolsets/types.ts`). Call it on a wide toolset
|
|
16
|
+
* `combineToolsets` already merged from several sources and `source` is
|
|
17
|
+
* the merge's own umbrella source, not any one contributor's — so a
|
|
18
|
+
* predicate built to keep only trusted-read-only tools would keep an
|
|
19
|
+
* untrusted MCP server's tool too, because it never sees that server's
|
|
20
|
+
* source. Filter each source's toolset on its own, THEN combine the
|
|
21
|
+
* filtered results:
|
|
22
|
+
*
|
|
23
|
+
* const readOnlyOnly = parentToolsets.map((ts) =>
|
|
24
|
+
* filtered(ts, (tool, source) => isTrustedReadOnly(tool, undefined, source)),
|
|
25
|
+
* )
|
|
26
|
+
* // readOnlyOnly: readonly Toolset[], hand it to a child ToolManager
|
|
27
|
+
* // directly, or combineToolsets(...) it if the caller needs one Toolset.
|
|
13
28
|
*/
|
|
14
29
|
|
|
15
|
-
import {
|
|
16
|
-
import type { ToolRegistryContract } from '../types/tool/index.js'
|
|
17
|
-
import { isTrustedReadOnly } from './trusted-read-only.js'
|
|
30
|
+
import type { ToolDefinition } from '../types/tool/index.js'
|
|
18
31
|
|
|
19
32
|
/**
|
|
20
|
-
*
|
|
33
|
+
* How a capability, toolset wrapper or host names the tools it wants,
|
|
34
|
+
* without maintaining a parallel name list of its own:
|
|
35
|
+
*
|
|
36
|
+
* - a list of exact tool names;
|
|
37
|
+
* - a partial match against `ToolDefinition.metadata` — every key the
|
|
38
|
+
* selector names must be present, with a deep-equal value (a nested plain
|
|
39
|
+
* object recurses the same way); a key the tool's metadata does not carry,
|
|
40
|
+
* or carries a different value for, fails the match. An empty object
|
|
41
|
+
* selector matches every tool;
|
|
42
|
+
* - a predicate, for anything the two shapes above cannot express.
|
|
21
43
|
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
44
|
+
* Synchronous only, unlike some other agent frameworks' equivalent selector
|
|
45
|
+
* type (which also allow an async predicate): every place namzu filters a
|
|
46
|
+
* roster today does so synchronously, and an `Awaitable` branch nothing
|
|
47
|
+
* calls is a surface with nothing to test.
|
|
26
48
|
*/
|
|
27
|
-
export
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
49
|
+
export type ToolSelector =
|
|
50
|
+
| readonly string[]
|
|
51
|
+
| Readonly<Record<string, unknown>>
|
|
52
|
+
| ((tool: ToolDefinition) => boolean)
|
|
53
|
+
|
|
54
|
+
function isPlainObject(value: unknown): value is Readonly<Record<string, unknown>> {
|
|
55
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value)
|
|
33
56
|
}
|
|
34
57
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
58
|
+
function deepEqual(a: unknown, b: unknown): boolean {
|
|
59
|
+
if (Object.is(a, b)) return true
|
|
60
|
+
if (Array.isArray(a) && Array.isArray(b)) {
|
|
61
|
+
return a.length === b.length && a.every((v, i) => deepEqual(v, b[i]))
|
|
62
|
+
}
|
|
63
|
+
if (isPlainObject(a) && isPlainObject(b)) {
|
|
64
|
+
const keysA = Object.keys(a)
|
|
65
|
+
const keysB = Object.keys(b)
|
|
66
|
+
return keysA.length === keysB.length && keysA.every((key) => deepEqual(a[key], b[key]))
|
|
44
67
|
}
|
|
45
|
-
return
|
|
68
|
+
return false
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/** Every key `expected` names is present in `actual` with a deep-equal value. */
|
|
72
|
+
function metadataIncludes(
|
|
73
|
+
actual: Readonly<Record<string, unknown>> | undefined,
|
|
74
|
+
expected: Readonly<Record<string, unknown>>,
|
|
75
|
+
): boolean {
|
|
76
|
+
const keys = Object.keys(expected)
|
|
77
|
+
if (keys.length === 0) return true
|
|
78
|
+
if (!actual) return false
|
|
79
|
+
return keys.every((key) => {
|
|
80
|
+
const expectedValue = expected[key]
|
|
81
|
+
const actualValue = actual[key]
|
|
82
|
+
return isPlainObject(expectedValue) && isPlainObject(actualValue)
|
|
83
|
+
? metadataIncludes(actualValue, expectedValue)
|
|
84
|
+
: deepEqual(actualValue, expectedValue)
|
|
85
|
+
})
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* Whether `tool` matches `selector`: a name list, a metadata deep-match, or a
|
|
90
|
+
* predicate — see {@link ToolSelector}. Never reads anything but `tool.name`
|
|
91
|
+
* and `tool.metadata`, so it never sees a tool's schema or execution.
|
|
92
|
+
*/
|
|
93
|
+
export function matchesToolSelector(selector: ToolSelector, tool: ToolDefinition): boolean {
|
|
94
|
+
if (typeof selector === 'function') return selector(tool)
|
|
95
|
+
if (Array.isArray(selector)) return selector.includes(tool.name)
|
|
96
|
+
return metadataIncludes(tool.metadata, selector as Readonly<Record<string, unknown>>)
|
|
46
97
|
}
|
|
@@ -9,6 +9,7 @@ import type {
|
|
|
9
9
|
ScheduleBrowserSiteLevel,
|
|
10
10
|
ScheduleJobChanges,
|
|
11
11
|
ScheduleJobDraft,
|
|
12
|
+
ScheduleJobSummary,
|
|
12
13
|
ScheduleJobUpdateProposal,
|
|
13
14
|
ScheduleToolHost,
|
|
14
15
|
} from './types.js'
|
|
@@ -42,12 +43,30 @@ const inputSchema = z.object({
|
|
|
42
43
|
.regex(/^[a-z0-9][a-z0-9-]{0,62}$/)
|
|
43
44
|
.optional()
|
|
44
45
|
.describe('create: job name, lowercase letters, digits and dashes'),
|
|
46
|
+
kind: z
|
|
47
|
+
.enum(['agent', 'script', 'script+agent'])
|
|
48
|
+
.optional()
|
|
49
|
+
.describe(
|
|
50
|
+
'create: what the run does. agent (default): the model runs prompt. script: a fixed shell script runs unattended, no model call, no prompt. script+agent: a cheap gate script decides whether to wake the model; wake:false costs nothing. Prefer script/script+agent for a fixed, deterministic check that would otherwise cost tokens for no reason.',
|
|
51
|
+
),
|
|
52
|
+
script: z
|
|
53
|
+
.object({
|
|
54
|
+
body: z.string().min(1).describe('The exact script text, run verbatim once confirmed'),
|
|
55
|
+
shell: z.enum(['bash', 'sh']).describe('Which shell reads it; no default'),
|
|
56
|
+
timeoutMs: z.number().int().positive().optional().describe('The script’s own wall clock'),
|
|
57
|
+
})
|
|
58
|
+
.optional()
|
|
59
|
+
.describe(
|
|
60
|
+
'create: required when kind is script or script+agent. For script+agent this is the wake-gate: its stdout must be exactly one JSON line, {"wake": boolean, "context": string}.',
|
|
61
|
+
),
|
|
45
62
|
prompt: z
|
|
46
63
|
.string()
|
|
47
64
|
.min(1)
|
|
48
65
|
.max(20_000)
|
|
49
66
|
.optional()
|
|
50
|
-
.describe(
|
|
67
|
+
.describe(
|
|
68
|
+
'create, update: what the model run is asked to do. Required for agent and script+agent; refused for a pure script. For script+agent this is handed to the model only when the wake-gate says wake: true.',
|
|
69
|
+
),
|
|
51
70
|
when: z
|
|
52
71
|
.string()
|
|
53
72
|
.optional()
|
|
@@ -101,7 +120,7 @@ const inputSchema = z.object({
|
|
|
101
120
|
})
|
|
102
121
|
.optional()
|
|
103
122
|
.describe(
|
|
104
|
-
'create: REQUIRED explicit permission set; there is no default. update: the whole new set, only when the permissions change',
|
|
123
|
+
'create: REQUIRED explicit permission set; there is no default. A pure script cannot use a browser grant. update: the whole new set, only when the permissions change',
|
|
105
124
|
),
|
|
106
125
|
budget: z
|
|
107
126
|
.object({
|
|
@@ -126,10 +145,12 @@ const inputSchema = z.object({
|
|
|
126
145
|
.int()
|
|
127
146
|
.positive()
|
|
128
147
|
.optional()
|
|
129
|
-
.describe('Wall clock of one
|
|
148
|
+
.describe('Wall clock of one agent phase, in milliseconds'),
|
|
130
149
|
})
|
|
131
150
|
.optional()
|
|
132
|
-
.describe(
|
|
151
|
+
.describe(
|
|
152
|
+
'Agent-phase limits; omit to use the defaults. Refused for a pure script; use script.timeoutMs instead.',
|
|
153
|
+
),
|
|
133
154
|
job: z.string().optional().describe('update/pause/resume/delete: job name'),
|
|
134
155
|
allFolders: z.boolean().optional().describe('list: include jobs of other folders (names only)'),
|
|
135
156
|
})
|
|
@@ -150,6 +171,14 @@ function effectsOf(rule: unknown): string[] {
|
|
|
150
171
|
* Refuse a network tool beside a shell that runs on the host: a scheduled run
|
|
151
172
|
* that can both read the machine and reach the internet, unattended, is the
|
|
152
173
|
* exfiltration shape, and only the operator can choose it.
|
|
174
|
+
*
|
|
175
|
+
* For `runKind: 'script'`/`'script+agent'` the "shell" isn't a rule the model
|
|
176
|
+
* could reach at some later live call — it's the confirmed script's own
|
|
177
|
+
* body, which unconditionally runs shell commands whenever it runs at all.
|
|
178
|
+
* The `bash` rule heuristic below answers a question ("could a live call
|
|
179
|
+
* reach bash") that isn't the one being asked here, so a script/script+agent
|
|
180
|
+
* job on the host is treated as reaching a shell outright, whatever its
|
|
181
|
+
* rules say about `bash`.
|
|
153
182
|
*/
|
|
154
183
|
function networkWithHostShell(draft: ScheduleJobDraft): boolean {
|
|
155
184
|
const rules = draft.permissions.rules ?? {}
|
|
@@ -157,6 +186,8 @@ function networkWithHostShell(draft: ScheduleJobDraft): boolean {
|
|
|
157
186
|
draft.permissions.browser !== undefined ||
|
|
158
187
|
NETWORK_TOOLS.some((t) => effectsOf(rules[t]).some((e) => e === 'allow' || e === 'ask'))
|
|
159
188
|
if (!network) return false
|
|
189
|
+
const onHost = (draft.permissions.execution ?? 'host') === 'host'
|
|
190
|
+
if ((draft.runKind ?? 'agent') !== 'agent') return onHost
|
|
160
191
|
const bashEffects = effectsOf(rules.bash)
|
|
161
192
|
// The read-only preset denies bash; its rules are expanded by the host,
|
|
162
193
|
// so the draft carries only its name.
|
|
@@ -164,7 +195,7 @@ function networkWithHostShell(draft: ScheduleJobDraft): boolean {
|
|
|
164
195
|
bashEffects.length > 0
|
|
165
196
|
? bashEffects.some((e) => e !== 'deny')
|
|
166
197
|
: draft.permissions.preset !== 'read-only' && draft.permissions.unmatched !== 'deny'
|
|
167
|
-
return shellPossible &&
|
|
198
|
+
return shellPossible && onHost
|
|
168
199
|
}
|
|
169
200
|
|
|
170
201
|
/**
|
|
@@ -246,21 +277,38 @@ async function create(
|
|
|
246
277
|
input: Input,
|
|
247
278
|
signal: AbortSignal | undefined,
|
|
248
279
|
): Promise<ToolResult> {
|
|
249
|
-
const
|
|
280
|
+
const runKind = input.kind ?? 'agent'
|
|
281
|
+
const required: string[] = (['name', 'when', 'permissions'] as const).filter(
|
|
250
282
|
(k) => input[k] === undefined,
|
|
251
283
|
)
|
|
252
|
-
if (
|
|
284
|
+
if (runKind !== 'script' && input.prompt === undefined) required.push('prompt')
|
|
285
|
+
if (runKind !== 'agent' && input.script === undefined) required.push('script')
|
|
286
|
+
if (required.length > 0) {
|
|
253
287
|
return refuse(
|
|
254
|
-
`create needs ${
|
|
288
|
+
`create needs ${required.join(', ')}. permissions is required: propose an explicit set (a preset and/or rules, plus unmatched).`,
|
|
255
289
|
)
|
|
256
290
|
}
|
|
291
|
+
if (runKind === 'agent' && input.script !== undefined) {
|
|
292
|
+
return refuse('an agent job has no script; omit kind (or set it to agent) to use one')
|
|
293
|
+
}
|
|
294
|
+
if (runKind === 'script' && input.prompt !== undefined)
|
|
295
|
+
return refuse('a pure script job has no prompt; remove prompt')
|
|
296
|
+
if (runKind === 'script' && input.budget !== undefined) {
|
|
297
|
+
return refuse(
|
|
298
|
+
'a pure script job has no agent budget; remove budget and use script.timeoutMs for its timeout',
|
|
299
|
+
)
|
|
300
|
+
}
|
|
301
|
+
if (runKind === 'script' && input.permissions?.browser !== undefined)
|
|
302
|
+
return refuse('a pure script job cannot use a browser grant; remove permissions.browser')
|
|
257
303
|
const checked = checkPermissions(host, input.permissions as NonNullable<Input['permissions']>)
|
|
258
304
|
if (!checked.ok) return refuse(checked.error)
|
|
259
305
|
const permissions = checked.permissions
|
|
260
306
|
const draft: ScheduleJobDraft = {
|
|
261
307
|
name: input.name as string,
|
|
262
|
-
prompt: input.prompt as string,
|
|
263
308
|
when: input.when as string,
|
|
309
|
+
...(runKind !== 'agent' ? { runKind } : {}),
|
|
310
|
+
...(input.script ? { script: input.script } : {}),
|
|
311
|
+
...(input.prompt !== undefined ? { prompt: input.prompt } : {}),
|
|
264
312
|
...(input.folder !== undefined ? { folder: input.folder } : {}),
|
|
265
313
|
...(input.tz !== undefined ? { tz: input.tz } : {}),
|
|
266
314
|
permissions,
|
|
@@ -302,7 +350,9 @@ async function create(
|
|
|
302
350
|
const said =
|
|
303
351
|
answer === 'create-paused'
|
|
304
352
|
? `Job "${created.name}" was created paused. The operator can resume it with /schedule.`
|
|
305
|
-
:
|
|
353
|
+
: runKind === 'script'
|
|
354
|
+
? `Job "${created.name}" was created. It runs ${preview.schedule}, with nobody watching; results are recorded in its history and may arrive as a notification. It creates no session.`
|
|
355
|
+
: `Job "${created.name}" was created. It runs ${preview.schedule}, with nobody watching; results arrive as a notification and a session.`
|
|
306
356
|
return {
|
|
307
357
|
success: true,
|
|
308
358
|
output: created.note ? `${said} ${created.note}` : said,
|
|
@@ -311,7 +361,12 @@ async function create(
|
|
|
311
361
|
}
|
|
312
362
|
|
|
313
363
|
async function list(host: ScheduleToolHost, input: Input): Promise<ToolResult> {
|
|
314
|
-
|
|
364
|
+
let jobs: readonly ScheduleJobSummary[]
|
|
365
|
+
try {
|
|
366
|
+
jobs = await host.list({ allFolders: input.allFolders === true })
|
|
367
|
+
} catch (error) {
|
|
368
|
+
return refuse(error instanceof Error ? error.message : String(error))
|
|
369
|
+
}
|
|
315
370
|
if (jobs.length === 0) return { success: true, output: 'No scheduled jobs.', data: { jobs: [] } }
|
|
316
371
|
const lines = jobs.map(
|
|
317
372
|
(j) =>
|
|
@@ -321,7 +376,16 @@ async function list(host: ScheduleToolHost, input: Input): Promise<ToolResult> {
|
|
|
321
376
|
}
|
|
322
377
|
|
|
323
378
|
/** The fields `update` may change, as the model set them. */
|
|
324
|
-
const CHANGEABLE = [
|
|
379
|
+
const CHANGEABLE = [
|
|
380
|
+
'prompt',
|
|
381
|
+
'when',
|
|
382
|
+
'folder',
|
|
383
|
+
'tz',
|
|
384
|
+
'permissions',
|
|
385
|
+
'budget',
|
|
386
|
+
'kind',
|
|
387
|
+
'script',
|
|
388
|
+
] as const
|
|
325
389
|
|
|
326
390
|
async function update(
|
|
327
391
|
host: ScheduleToolHost,
|
|
@@ -343,12 +407,31 @@ async function update(
|
|
|
343
407
|
if (given.length === 0) {
|
|
344
408
|
return refuse(`update needs at least one of ${CHANGEABLE.join(', ')} to change.`)
|
|
345
409
|
}
|
|
410
|
+
if (input.kind === 'agent' && input.script !== undefined) {
|
|
411
|
+
return refuse(
|
|
412
|
+
'update cannot set kind to agent while also giving a script; drop script to make it an agent job, or leave kind unset (or as script/script+agent) to keep one.',
|
|
413
|
+
)
|
|
414
|
+
}
|
|
346
415
|
let permissions: ScheduleJobDraft['permissions'] | undefined
|
|
347
416
|
if (input.permissions) {
|
|
348
417
|
const checked = checkPermissions(host, input.permissions)
|
|
349
418
|
if (!checked.ok) return refuse(checked.error)
|
|
350
419
|
permissions = checked.permissions
|
|
351
|
-
|
|
420
|
+
// The same guard `create` applies, against whatever THIS call
|
|
421
|
+
// changes: a kind given here is read too, since a script/script+agent
|
|
422
|
+
// job is refused this combination even where an agent job is not (no
|
|
423
|
+
// live turn reviews a script's calls one at a time). A kind changed
|
|
424
|
+
// with the existing permissions is checked on the effective preview
|
|
425
|
+
// after the host has applied all changes below.
|
|
426
|
+
if (
|
|
427
|
+
networkWithHostShell({
|
|
428
|
+
name: '',
|
|
429
|
+
prompt: '',
|
|
430
|
+
when: '',
|
|
431
|
+
...(input.kind !== undefined ? { runKind: input.kind } : {}),
|
|
432
|
+
permissions,
|
|
433
|
+
})
|
|
434
|
+
)
|
|
352
435
|
return refuse(NETWORK_WITH_HOST_SHELL)
|
|
353
436
|
}
|
|
354
437
|
const changes: ScheduleJobChanges = {
|
|
@@ -358,6 +441,8 @@ async function update(
|
|
|
358
441
|
...(input.tz !== undefined ? { tz: input.tz } : {}),
|
|
359
442
|
...(permissions ? { permissions } : {}),
|
|
360
443
|
...(input.budget ? { budget: input.budget } : {}),
|
|
444
|
+
...(input.kind !== undefined ? { runKind: input.kind } : {}),
|
|
445
|
+
...(input.script !== undefined ? { script: input.script } : {}),
|
|
361
446
|
}
|
|
362
447
|
let proposal: ScheduleJobUpdateProposal
|
|
363
448
|
try {
|
|
@@ -365,6 +450,14 @@ async function update(
|
|
|
365
450
|
} catch (error) {
|
|
366
451
|
return refuse(error instanceof Error ? error.message : String(error))
|
|
367
452
|
}
|
|
453
|
+
const effectiveKind = input.kind ?? proposal.preview.runKind ?? 'agent'
|
|
454
|
+
if (
|
|
455
|
+
(effectiveKind === 'script' || effectiveKind === 'script+agent') &&
|
|
456
|
+
proposal.preview.execution === 'host' &&
|
|
457
|
+
(proposal.preview.networkGrantAccess ?? proposal.preview.networkAccess)
|
|
458
|
+
) {
|
|
459
|
+
return refuse(NETWORK_WITH_HOST_SHELL)
|
|
460
|
+
}
|
|
368
461
|
let confirmed = false
|
|
369
462
|
try {
|
|
370
463
|
confirmed = await host.confirmUpdate(
|
|
@@ -450,7 +543,7 @@ export function buildScheduleTools(host: ScheduleToolHost): ToolDefinition[] {
|
|
|
450
543
|
defineTool({
|
|
451
544
|
name: SCHEDULE_TOOL_NAME,
|
|
452
545
|
description:
|
|
453
|
-
"Manage the operator's scheduled jobs: prompts that run later in a folder, with nobody watching, under an explicit permission set. Use it only when the user asks for something to happen on a schedule. create, update, resume and delete are confirmed by the operator; pause is not. A job needs name,
|
|
546
|
+
"Manage the operator's scheduled jobs: model prompts or fixed scripts that run later in a folder, with nobody watching, under an explicit permission set. Use it only when the user asks for something to happen on a schedule. create, update, resume and delete are confirmed by the operator; pause is not. A job needs name, when and permissions (unmatched: park or deny, plus a preset, rules or a browser grant). agent and script+agent also need prompt; script and script+agent also need script. A pure script has no prompt, model, agent budget, browser grant or session; set script.timeoutMs to limit it. To change a job, update it with job and only the fields that change; do not delete and recreate it. Leave every other field (folder, tz, execution, budget, headed) unset unless the user asked for it: the defaults are the operator's, and the confirmation marks each value you chose. Scheduled runs cannot ask questions.",
|
|
454
547
|
inputSchema,
|
|
455
548
|
category: 'custom',
|
|
456
549
|
permissions: [],
|
|
@@ -11,10 +11,29 @@
|
|
|
11
11
|
/** A rule effect, in the vocabulary of the CLI's `[permissions]` table. */
|
|
12
12
|
export type ScheduleRuleEffect = 'allow' | 'ask' | 'deny'
|
|
13
13
|
|
|
14
|
-
/**
|
|
14
|
+
/**
|
|
15
|
+
* What the model proposes. Validated by the tool's schema, then by the host.
|
|
16
|
+
*
|
|
17
|
+
* `runKind` absent means `'agent'`, unchanged from before this field
|
|
18
|
+
* existed — every existing host keeps compiling and behaving the same.
|
|
19
|
+
* `prompt` is optional ONLY because a pure `'script'` draft has none; a
|
|
20
|
+
* `ScheduleToolHost` that read it as a bare `string` before this field
|
|
21
|
+
* existed now needs a null check under `strictNullChecks` (see the SDK's
|
|
22
|
+
* changeset for this release: this is a breaking change to the type, not a
|
|
23
|
+
* free widening).
|
|
24
|
+
*/
|
|
15
25
|
export interface ScheduleJobDraft {
|
|
16
26
|
readonly name: string
|
|
17
|
-
|
|
27
|
+
/** Required unless `runKind` is `'script'`, whose prompt is unused. */
|
|
28
|
+
readonly prompt?: string
|
|
29
|
+
/** Absent: `'agent'`. */
|
|
30
|
+
readonly runKind?: 'agent' | 'script' | 'script+agent'
|
|
31
|
+
/** Required when `runKind` is `'script'` or `'script+agent'` (the wake-gate). */
|
|
32
|
+
readonly script?: {
|
|
33
|
+
readonly body: string
|
|
34
|
+
readonly shell: 'bash' | 'sh'
|
|
35
|
+
readonly timeoutMs?: number
|
|
36
|
+
}
|
|
18
37
|
/** Schedule words: `every 30m`, `0 9 * * 1-5`, `at 09:00`, `in 2h`. */
|
|
19
38
|
readonly when: string
|
|
20
39
|
/** Folder the job runs in. Absent: the session's working directory. */
|
|
@@ -78,7 +97,16 @@ export interface ScheduleJobPreview {
|
|
|
78
97
|
readonly folder: string
|
|
79
98
|
/** True when `folder` is outside the session's working directory and added directories. */
|
|
80
99
|
readonly outsideSessionRoots: boolean
|
|
100
|
+
/** Empty for a pure `'script'` job, whose prompt is unused. */
|
|
81
101
|
readonly prompt: string
|
|
102
|
+
/** Absent: `'agent'`. */
|
|
103
|
+
readonly runKind?: 'agent' | 'script' | 'script+agent'
|
|
104
|
+
/** Present for `runKind: 'script'`/`'script+agent'`: the exact confirmed text. */
|
|
105
|
+
readonly script?: {
|
|
106
|
+
readonly body: string
|
|
107
|
+
readonly shell: 'bash' | 'sh'
|
|
108
|
+
readonly timeoutMs: number
|
|
109
|
+
}
|
|
82
110
|
/** The schedule in words, with its zone. */
|
|
83
111
|
readonly schedule: string
|
|
84
112
|
/** The next fire times, ISO-8601 UTC. */
|
|
@@ -87,8 +115,11 @@ export interface ScheduleJobPreview {
|
|
|
87
115
|
readonly rules: readonly string[]
|
|
88
116
|
readonly unmatched: 'park' | 'deny' | 'allow'
|
|
89
117
|
readonly execution: 'host' | 'sandbox'
|
|
90
|
-
/**
|
|
118
|
+
/** The run can reach the network, including through a fixed host script. */
|
|
91
119
|
readonly networkAccess: boolean
|
|
120
|
+
/** Web/browser permissions grant network access, separate from a script's own capability. */
|
|
121
|
+
readonly networkGrantAccess?: boolean
|
|
122
|
+
/** Effective run limits. A pure script has zero model iterations/tokens and its script timeout. */
|
|
92
123
|
readonly budget: {
|
|
93
124
|
readonly maxIterations: number
|
|
94
125
|
readonly tokenBudget: number
|
|
@@ -96,8 +127,8 @@ export interface ScheduleJobPreview {
|
|
|
96
127
|
}
|
|
97
128
|
/** Runs per day at most, times the token budget. Absent for a one-shot. */
|
|
98
129
|
readonly dailyTokenCeiling?: number
|
|
99
|
-
/** Provider and model the
|
|
100
|
-
readonly model
|
|
130
|
+
/** Provider and model the agent phase is pinned to. Absent for a pure script job. */
|
|
131
|
+
readonly model?: string
|
|
101
132
|
/** Where the run's credential comes from, in words. */
|
|
102
133
|
readonly credentialSource?: string
|
|
103
134
|
/** Anything the host wants said in the warning colour. */
|
|
@@ -135,6 +166,20 @@ export interface ScheduleJobChanges {
|
|
|
135
166
|
readonly tz?: string
|
|
136
167
|
readonly permissions?: ScheduleJobDraft['permissions']
|
|
137
168
|
readonly budget?: ScheduleJobDraft['budget']
|
|
169
|
+
/**
|
|
170
|
+
* Changes what kind of run this is. Absent: keeps the job's current kind.
|
|
171
|
+
* Moving to `'script'`/`'script+agent'` needs `script`; moving to
|
|
172
|
+
* `'agent'` drops whatever script the job had, whether or not one is
|
|
173
|
+
* given here — an agent job cannot carry one.
|
|
174
|
+
*/
|
|
175
|
+
readonly runKind?: 'agent' | 'script' | 'script+agent'
|
|
176
|
+
/**
|
|
177
|
+
* Replaces the whole script (or, for `'script+agent'`, wake-gate) body,
|
|
178
|
+
* shell and timeout — never a partial edit of just one of them. Absent:
|
|
179
|
+
* keeps the job's current script. Re-verified fresh against the
|
|
180
|
+
* scheduled-run floor and every `deny` rule, the same as a new job's.
|
|
181
|
+
*/
|
|
182
|
+
readonly script?: ScheduleJobDraft['script']
|
|
138
183
|
}
|
|
139
184
|
|
|
140
185
|
/** A proposed change to a job, as the host computed it. */
|
|
@@ -205,7 +250,8 @@ export interface ScheduleToolHost {
|
|
|
205
250
|
* folder's; a host may list every job regardless, marking the session
|
|
206
251
|
* folder's with {@link ScheduleJobSummary.inSessionFolder}. The tool says
|
|
207
252
|
* "No scheduled jobs." when this returns none, so a host that filters
|
|
208
|
-
* says so only for its folder.
|
|
253
|
+
* says so only for its folder. Throw on an unreadable job store: the tool
|
|
254
|
+
* reports the error rather than claiming there are no jobs.
|
|
209
255
|
*/
|
|
210
256
|
list(options: { readonly allFolders: boolean }): Promise<readonly ScheduleJobSummary[]>
|
|
211
257
|
/** A job by name or id prefix, or undefined. */
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { ToolSourceRef } from '../toolsets/types.js'
|
|
1
2
|
import type { ToolDefinition } from '../types/tool/index.js'
|
|
2
3
|
|
|
3
4
|
/**
|
|
@@ -30,23 +31,31 @@ import type { ToolDefinition } from '../types/tool/index.js'
|
|
|
30
31
|
* opening its own gate.
|
|
31
32
|
*
|
|
32
33
|
* Trust for the second case comes from the operator, per server, and is
|
|
33
|
-
*
|
|
34
|
-
*
|
|
35
|
-
*
|
|
34
|
+
* carried on the OWNING TOOLSET's source (`ToolSourceRef.readOnlyHintTrusted`,
|
|
35
|
+
* `toolsets/manager.ts`'s `sourceOf`) rather than stamped onto the tool
|
|
36
|
+
* itself — `ToolDefinition` has no `provenance` field to read; a definition
|
|
37
|
+
* cannot claim its own source. Never a global switch: one flag meaning
|
|
38
|
+
* "trust annotations" hands every connected server the same reach, which is
|
|
39
|
+
* the hole restated.
|
|
36
40
|
*
|
|
37
41
|
* `isReadOnly` itself is left reporting faithfully what the server said.
|
|
38
|
-
*
|
|
42
|
+
* Source and policy are different questions, and collapsing them would
|
|
39
43
|
* corrupt the outbound re-export and the prompt's own destructive label in
|
|
40
44
|
* order to fix a gate.
|
|
41
45
|
*/
|
|
42
|
-
export function isTrustedReadOnly(
|
|
46
|
+
export function isTrustedReadOnly(
|
|
47
|
+
tool: ToolDefinition | undefined,
|
|
48
|
+
input: unknown,
|
|
49
|
+
source?: ToolSourceRef,
|
|
50
|
+
): boolean {
|
|
43
51
|
if (!tool?.isReadOnly) return false
|
|
44
52
|
|
|
45
|
-
//
|
|
46
|
-
//
|
|
47
|
-
//
|
|
48
|
-
//
|
|
49
|
-
|
|
53
|
+
// A source that is not `mcp_server` is host-defined: this process, code
|
|
54
|
+
// the operator installed, no untrusted party in the chain. Requiring an
|
|
55
|
+
// opt-in for a builtin would break every read-only exemption for no gain
|
|
56
|
+
// in trust. `source` itself absent (a caller with no manager to ask)
|
|
57
|
+
// is treated the same way, matching the old "no provenance" default.
|
|
58
|
+
if (source?.kind === 'mcp_server' && !source.readOnlyHintTrusted) return false
|
|
50
59
|
|
|
51
60
|
return tool.isReadOnly(input)
|
|
52
61
|
}
|