@namzu/sdk 0.6.0 → 1.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 +529 -0
- package/dist/advisory/executor.d.ts.map +1 -1
- package/dist/advisory/executor.js +9 -2
- package/dist/advisory/executor.js.map +1 -1
- package/dist/advisory/executor.test.d.ts +2 -1
- package/dist/advisory/executor.test.d.ts.map +1 -1
- package/dist/advisory/executor.test.js +7 -4
- package/dist/advisory/executor.test.js.map +1 -1
- package/dist/agents/ReactiveAgent.d.ts.map +1 -1
- package/dist/agents/ReactiveAgent.js +7 -0
- package/dist/agents/ReactiveAgent.js.map +1 -1
- package/dist/agents/SupervisorAgent.d.ts +22 -1
- package/dist/agents/SupervisorAgent.d.ts.map +1 -1
- package/dist/agents/SupervisorAgent.js +54 -14
- package/dist/agents/SupervisorAgent.js.map +1 -1
- package/dist/agents/__tests__/supervisor-ledger.test.d.ts +2 -0
- package/dist/agents/__tests__/supervisor-ledger.test.d.ts.map +1 -0
- package/dist/agents/__tests__/supervisor-ledger.test.js +131 -0
- package/dist/agents/__tests__/supervisor-ledger.test.js.map +1 -0
- package/dist/bridge/sse/mapper.test.js +2 -2
- package/dist/config/runtime.d.ts +24 -0
- package/dist/config/runtime.d.ts.map +1 -1
- package/dist/config/runtime.js +9 -0
- package/dist/config/runtime.js.map +1 -1
- package/dist/connector/builtins/webhook.test.js +17 -0
- package/dist/connector/builtins/webhook.test.js.map +1 -1
- package/dist/connector/index.d.ts +1 -0
- package/dist/connector/index.d.ts.map +1 -1
- package/dist/connector/index.js +1 -0
- package/dist/connector/index.js.map +1 -1
- package/dist/connector/mcp/client.d.ts.map +1 -1
- package/dist/connector/mcp/client.js +4 -0
- package/dist/connector/mcp/client.js.map +1 -1
- package/dist/connector/mcp/index.d.ts +1 -0
- package/dist/connector/mcp/index.d.ts.map +1 -1
- package/dist/connector/mcp/index.js +1 -0
- package/dist/connector/mcp/index.js.map +1 -1
- package/dist/connector/mcp/streamable-http.d.ts +22 -0
- package/dist/connector/mcp/streamable-http.d.ts.map +1 -0
- package/dist/connector/mcp/streamable-http.js +128 -0
- package/dist/connector/mcp/streamable-http.js.map +1 -0
- package/dist/connector/mcp/streamable-http.test.d.ts +2 -0
- package/dist/connector/mcp/streamable-http.test.d.ts.map +1 -0
- package/dist/connector/mcp/streamable-http.test.js +132 -0
- package/dist/connector/mcp/streamable-http.test.js.map +1 -0
- package/dist/constants/compaction/index.d.ts.map +1 -1
- package/dist/constants/compaction/index.js +8 -3
- package/dist/constants/compaction/index.js.map +1 -1
- package/dist/constants/sandbox/index.d.ts +21 -0
- package/dist/constants/sandbox/index.d.ts.map +1 -1
- package/dist/constants/sandbox/index.js +30 -0
- package/dist/constants/sandbox/index.js.map +1 -1
- package/dist/constants/tools/index.d.ts.map +1 -1
- package/dist/constants/tools/index.js +33 -2
- package/dist/constants/tools/index.js.map +1 -1
- package/dist/manager/run/persistence.d.ts.map +1 -1
- package/dist/manager/run/persistence.js +35 -5
- package/dist/manager/run/persistence.js.map +1 -1
- package/dist/persona/assembler.d.ts +1 -0
- package/dist/persona/assembler.d.ts.map +1 -1
- package/dist/persona/assembler.js +37 -6
- package/dist/persona/assembler.js.map +1 -1
- package/dist/provider/collect.d.ts.map +1 -1
- package/dist/provider/collect.js +4 -1
- package/dist/provider/collect.js.map +1 -1
- package/dist/provider/collect.test.js +2 -2
- package/dist/public-runtime.d.ts +6 -5
- package/dist/public-runtime.d.ts.map +1 -1
- package/dist/public-runtime.js +6 -5
- package/dist/public-runtime.js.map +1 -1
- package/dist/public-tools.d.ts +2 -0
- package/dist/public-tools.d.ts.map +1 -1
- package/dist/public-tools.js +2 -0
- package/dist/public-tools.js.map +1 -1
- package/dist/public-types.d.ts +3 -0
- package/dist/public-types.d.ts.map +1 -1
- package/dist/registry/index.d.ts +2 -0
- package/dist/registry/index.d.ts.map +1 -1
- package/dist/registry/index.js +1 -0
- package/dist/registry/index.js.map +1 -1
- package/dist/registry/tool/execute.d.ts +27 -0
- package/dist/registry/tool/execute.d.ts.map +1 -1
- package/dist/registry/tool/execute.js +192 -7
- package/dist/registry/tool/execute.js.map +1 -1
- package/dist/registry/tool/execute.test.d.ts +9 -4
- package/dist/registry/tool/execute.test.d.ts.map +1 -1
- package/dist/registry/tool/execute.test.js +178 -7
- package/dist/registry/tool/execute.test.js.map +1 -1
- package/dist/registry/toolset/catalog.d.ts +42 -0
- package/dist/registry/toolset/catalog.d.ts.map +1 -0
- package/dist/registry/toolset/catalog.js +217 -0
- package/dist/registry/toolset/catalog.js.map +1 -0
- package/dist/registry/toolset/catalog.test.d.ts +2 -0
- package/dist/registry/toolset/catalog.test.d.ts.map +1 -0
- package/dist/registry/toolset/catalog.test.js +147 -0
- package/dist/registry/toolset/catalog.test.js.map +1 -0
- package/dist/runtime/query/__tests__/deferred-tools.test.d.ts +2 -0
- package/dist/runtime/query/__tests__/deferred-tools.test.d.ts.map +1 -0
- package/dist/runtime/query/__tests__/deferred-tools.test.js +185 -0
- package/dist/runtime/query/__tests__/deferred-tools.test.js.map +1 -0
- package/dist/runtime/query/__tests__/executor-concurrency.test.d.ts +2 -0
- package/dist/runtime/query/__tests__/executor-concurrency.test.d.ts.map +1 -0
- package/dist/runtime/query/__tests__/executor-concurrency.test.js +98 -0
- package/dist/runtime/query/__tests__/executor-concurrency.test.js.map +1 -0
- package/dist/runtime/query/__tests__/executor-plugin-hooks.test.js +38 -3
- package/dist/runtime/query/__tests__/executor-plugin-hooks.test.js.map +1 -1
- package/dist/runtime/query/__tests__/long-document-flow.test.d.ts +2 -0
- package/dist/runtime/query/__tests__/long-document-flow.test.d.ts.map +1 -0
- package/dist/runtime/query/__tests__/long-document-flow.test.js +154 -0
- package/dist/runtime/query/__tests__/long-document-flow.test.js.map +1 -0
- package/dist/runtime/query/__tests__/prompt.test.js +51 -2
- package/dist/runtime/query/__tests__/prompt.test.js.map +1 -1
- package/dist/runtime/query/__tests__/stream-recovery.test.d.ts +2 -0
- package/dist/runtime/query/__tests__/stream-recovery.test.d.ts.map +1 -0
- package/dist/runtime/query/__tests__/stream-recovery.test.js +126 -0
- package/dist/runtime/query/__tests__/stream-recovery.test.js.map +1 -0
- package/dist/runtime/query/continuation.d.ts +16 -0
- package/dist/runtime/query/continuation.d.ts.map +1 -0
- package/dist/runtime/query/continuation.js +16 -0
- package/dist/runtime/query/continuation.js.map +1 -0
- package/dist/runtime/query/executor.d.ts +3 -0
- package/dist/runtime/query/executor.d.ts.map +1 -1
- package/dist/runtime/query/executor.js +71 -3
- package/dist/runtime/query/executor.js.map +1 -1
- package/dist/runtime/query/index.d.ts +9 -0
- package/dist/runtime/query/index.d.ts.map +1 -1
- package/dist/runtime/query/index.js +42 -5
- package/dist/runtime/query/index.js.map +1 -1
- package/dist/runtime/query/iteration/index.d.ts +24 -0
- package/dist/runtime/query/iteration/index.d.ts.map +1 -1
- package/dist/runtime/query/iteration/index.js +326 -66
- package/dist/runtime/query/iteration/index.js.map +1 -1
- package/dist/runtime/query/iteration/phases/checkpoint.d.ts.map +1 -1
- package/dist/runtime/query/iteration/phases/checkpoint.js +2 -2
- package/dist/runtime/query/iteration/phases/checkpoint.js.map +1 -1
- package/dist/runtime/query/iteration/phases/compaction.d.ts +8 -0
- package/dist/runtime/query/iteration/phases/compaction.d.ts.map +1 -1
- package/dist/runtime/query/iteration/phases/compaction.js +84 -3
- package/dist/runtime/query/iteration/phases/compaction.js.map +1 -1
- package/dist/runtime/query/iteration/phases/context.d.ts +22 -0
- package/dist/runtime/query/iteration/phases/context.d.ts.map +1 -1
- package/dist/runtime/query/iteration/phases/context.js +53 -0
- package/dist/runtime/query/iteration/phases/context.js.map +1 -1
- package/dist/runtime/query/iteration/phases/hitl-abort-race.test.d.ts +2 -0
- package/dist/runtime/query/iteration/phases/hitl-abort-race.test.d.ts.map +1 -0
- package/dist/runtime/query/iteration/phases/hitl-abort-race.test.js +73 -0
- package/dist/runtime/query/iteration/phases/hitl-abort-race.test.js.map +1 -0
- package/dist/runtime/query/iteration/phases/hitl-answer-question.test.d.ts +2 -0
- package/dist/runtime/query/iteration/phases/hitl-answer-question.test.d.ts.map +1 -0
- package/dist/runtime/query/iteration/phases/hitl-answer-question.test.js +120 -0
- package/dist/runtime/query/iteration/phases/hitl-answer-question.test.js.map +1 -0
- package/dist/runtime/query/iteration/phases/tool-review.d.ts +1 -1
- package/dist/runtime/query/iteration/phases/tool-review.d.ts.map +1 -1
- package/dist/runtime/query/iteration/phases/tool-review.js +7 -2
- package/dist/runtime/query/iteration/phases/tool-review.js.map +1 -1
- package/dist/runtime/query/iteration/phases/working-memory-compaction.test.d.ts +19 -0
- package/dist/runtime/query/iteration/phases/working-memory-compaction.test.d.ts.map +1 -0
- package/dist/runtime/query/iteration/phases/working-memory-compaction.test.js +177 -0
- package/dist/runtime/query/iteration/phases/working-memory-compaction.test.js.map +1 -0
- package/dist/runtime/query/iteration/phases/working-memory.d.ts +31 -0
- package/dist/runtime/query/iteration/phases/working-memory.d.ts.map +1 -0
- package/dist/runtime/query/iteration/phases/working-memory.js +81 -0
- package/dist/runtime/query/iteration/phases/working-memory.js.map +1 -0
- package/dist/runtime/query/prompt.d.ts.map +1 -1
- package/dist/runtime/query/prompt.js +21 -1
- package/dist/runtime/query/prompt.js.map +1 -1
- package/dist/runtime/query/tooling.d.ts +1 -0
- package/dist/runtime/query/tooling.d.ts.map +1 -1
- package/dist/runtime/query/tooling.js +1 -0
- package/dist/runtime/query/tooling.js.map +1 -1
- package/dist/sandbox/provider/local.d.ts.map +1 -1
- package/dist/sandbox/provider/local.js +32 -1
- package/dist/sandbox/provider/local.js.map +1 -1
- package/dist/session/workspace/__tests__/shared-run.test.d.ts +2 -0
- package/dist/session/workspace/__tests__/shared-run.test.d.ts.map +1 -0
- package/dist/session/workspace/__tests__/shared-run.test.js +147 -0
- package/dist/session/workspace/__tests__/shared-run.test.js.map +1 -0
- package/dist/session/workspace/index.d.ts +2 -0
- package/dist/session/workspace/index.d.ts.map +1 -1
- package/dist/session/workspace/index.js +1 -0
- package/dist/session/workspace/index.js.map +1 -1
- package/dist/session/workspace/shared-run.d.ts +81 -0
- package/dist/session/workspace/shared-run.d.ts.map +1 -0
- package/dist/session/workspace/shared-run.js +252 -0
- package/dist/session/workspace/shared-run.js.map +1 -0
- package/dist/skills/loader.d.ts.map +1 -1
- package/dist/skills/loader.js +36 -6
- package/dist/skills/loader.js.map +1 -1
- package/dist/skills/loader.test.d.ts +2 -0
- package/dist/skills/loader.test.d.ts.map +1 -0
- package/dist/skills/loader.test.js +65 -0
- package/dist/skills/loader.test.js.map +1 -0
- package/dist/streaming/coalesce.test.js +1 -1
- package/dist/streaming/coalesce.test.js.map +1 -1
- package/dist/tools/builtins/__tests__/edit.test.d.ts +2 -0
- package/dist/tools/builtins/__tests__/edit.test.d.ts.map +1 -0
- package/dist/tools/builtins/__tests__/edit.test.js +38 -0
- package/dist/tools/builtins/__tests__/edit.test.js.map +1 -0
- package/dist/tools/builtins/__tests__/payload-budget.test.d.ts +2 -0
- package/dist/tools/builtins/__tests__/payload-budget.test.d.ts.map +1 -0
- package/dist/tools/builtins/__tests__/payload-budget.test.js +70 -0
- package/dist/tools/builtins/__tests__/payload-budget.test.js.map +1 -0
- package/dist/tools/builtins/__tests__/read-file.test.d.ts +2 -0
- package/dist/tools/builtins/__tests__/read-file.test.d.ts.map +1 -0
- package/dist/tools/builtins/__tests__/read-file.test.js +33 -0
- package/dist/tools/builtins/__tests__/read-file.test.js.map +1 -0
- package/dist/tools/builtins/__tests__/verify-outputs.test.d.ts +2 -0
- package/dist/tools/builtins/__tests__/verify-outputs.test.d.ts.map +1 -0
- package/dist/tools/builtins/__tests__/verify-outputs.test.js +52 -0
- package/dist/tools/builtins/__tests__/verify-outputs.test.js.map +1 -0
- package/dist/tools/builtins/__tests__/write-file.test.d.ts +2 -0
- package/dist/tools/builtins/__tests__/write-file.test.d.ts.map +1 -0
- package/dist/tools/builtins/__tests__/write-file.test.js +74 -0
- package/dist/tools/builtins/__tests__/write-file.test.js.map +1 -0
- package/dist/tools/builtins/bash.d.ts.map +1 -1
- package/dist/tools/builtins/bash.js +40 -7
- package/dist/tools/builtins/bash.js.map +1 -1
- package/dist/tools/builtins/edit.d.ts +5 -2
- package/dist/tools/builtins/edit.d.ts.map +1 -1
- package/dist/tools/builtins/edit.js +114 -18
- package/dist/tools/builtins/edit.js.map +1 -1
- package/dist/tools/builtins/index.d.ts +1 -0
- package/dist/tools/builtins/index.d.ts.map +1 -1
- package/dist/tools/builtins/index.js +13 -13
- package/dist/tools/builtins/index.js.map +1 -1
- package/dist/tools/builtins/read-file.d.ts +1 -0
- package/dist/tools/builtins/read-file.d.ts.map +1 -1
- package/dist/tools/builtins/read-file.js +73 -10
- package/dist/tools/builtins/read-file.js.map +1 -1
- package/dist/tools/builtins/search-tools.d.ts.map +1 -1
- package/dist/tools/builtins/search-tools.js +35 -7
- package/dist/tools/builtins/search-tools.js.map +1 -1
- package/dist/tools/builtins/verify-outputs.d.ts +5 -0
- package/dist/tools/builtins/verify-outputs.d.ts.map +1 -0
- package/dist/tools/builtins/verify-outputs.js +103 -0
- package/dist/tools/builtins/verify-outputs.js.map +1 -0
- package/dist/tools/builtins/write-file.d.ts +3 -2
- package/dist/tools/builtins/write-file.d.ts.map +1 -1
- package/dist/tools/builtins/write-file.js +72 -12
- package/dist/tools/builtins/write-file.js.map +1 -1
- package/dist/tools/coordinator/__tests__/agent.test.d.ts +15 -0
- package/dist/tools/coordinator/__tests__/agent.test.d.ts.map +1 -0
- package/dist/tools/coordinator/__tests__/agent.test.js +142 -0
- package/dist/tools/coordinator/__tests__/agent.test.js.map +1 -0
- package/dist/tools/coordinator/__tests__/approve-plan.test.d.ts +2 -0
- package/dist/tools/coordinator/__tests__/approve-plan.test.d.ts.map +1 -0
- package/dist/tools/coordinator/__tests__/approve-plan.test.js +114 -0
- package/dist/tools/coordinator/__tests__/approve-plan.test.js.map +1 -0
- package/dist/tools/coordinator/__tests__/ask-user-question.test.d.ts +2 -0
- package/dist/tools/coordinator/__tests__/ask-user-question.test.d.ts.map +1 -0
- package/dist/tools/coordinator/__tests__/ask-user-question.test.js +309 -0
- package/dist/tools/coordinator/__tests__/ask-user-question.test.js.map +1 -0
- package/dist/tools/coordinator/__tests__/task-list.test.d.ts +13 -0
- package/dist/tools/coordinator/__tests__/task-list.test.d.ts.map +1 -0
- package/dist/tools/coordinator/__tests__/task-list.test.js +162 -0
- package/dist/tools/coordinator/__tests__/task-list.test.js.map +1 -0
- package/dist/tools/coordinator/agent.d.ts +34 -0
- package/dist/tools/coordinator/agent.d.ts.map +1 -0
- package/dist/tools/coordinator/agent.js +107 -0
- package/dist/tools/coordinator/agent.js.map +1 -0
- package/dist/tools/coordinator/index.d.ts +15 -0
- package/dist/tools/coordinator/index.d.ts.map +1 -1
- package/dist/tools/coordinator/index.js +305 -35
- package/dist/tools/coordinator/index.js.map +1 -1
- package/dist/types/agent/base.d.ts +8 -0
- 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/reactive.d.ts +38 -0
- package/dist/types/agent/reactive.d.ts.map +1 -1
- package/dist/types/agent/supervisor.d.ts +32 -0
- package/dist/types/agent/supervisor.d.ts.map +1 -1
- package/dist/types/agent/working-memory.d.ts +29 -0
- package/dist/types/agent/working-memory.d.ts.map +1 -0
- package/dist/types/agent/working-memory.js +2 -0
- package/dist/types/agent/working-memory.js.map +1 -0
- package/dist/types/common/index.d.ts +10 -0
- package/dist/types/common/index.d.ts.map +1 -1
- package/dist/types/common/index.js +18 -0
- package/dist/types/common/index.js.map +1 -1
- package/dist/types/common/usage-merge.test.d.ts +2 -0
- package/dist/types/common/usage-merge.test.d.ts.map +1 -0
- package/dist/types/common/usage-merge.test.js +48 -0
- package/dist/types/common/usage-merge.test.js.map +1 -0
- package/dist/types/connector/mcp.d.ts +9 -2
- package/dist/types/connector/mcp.d.ts.map +1 -1
- package/dist/types/hitl/index.d.ts +42 -0
- package/dist/types/hitl/index.d.ts.map +1 -1
- package/dist/types/hitl/index.js +11 -0
- package/dist/types/hitl/index.js.map +1 -1
- package/dist/types/message/index.d.ts +22 -1
- package/dist/types/message/index.d.ts.map +1 -1
- package/dist/types/message/index.js +7 -2
- package/dist/types/message/index.js.map +1 -1
- package/dist/types/provider/chat.d.ts +11 -9
- package/dist/types/provider/chat.d.ts.map +1 -1
- package/dist/types/run/events.d.ts +6 -0
- package/dist/types/run/events.d.ts.map +1 -1
- package/dist/types/run/events.js.map +1 -1
- package/dist/types/sandbox/index.d.ts +193 -0
- package/dist/types/sandbox/index.d.ts.map +1 -1
- package/dist/types/sandbox/index.js.map +1 -1
- package/dist/types/skills/index.d.ts +2 -0
- package/dist/types/skills/index.d.ts.map +1 -1
- package/dist/types/tool/index.d.ts +22 -0
- package/dist/types/tool/index.d.ts.map +1 -1
- package/dist/types/toolset/index.d.ts +71 -0
- package/dist/types/toolset/index.d.ts.map +1 -0
- package/dist/types/toolset/index.js +2 -0
- package/dist/types/toolset/index.js.map +1 -0
- package/dist/types/workspace/index.d.ts +1 -0
- package/dist/types/workspace/index.d.ts.map +1 -1
- package/dist/types/workspace/shared-run.d.ts +61 -0
- package/dist/types/workspace/shared-run.d.ts.map +1 -0
- package/dist/types/workspace/shared-run.js +2 -0
- package/dist/types/workspace/shared-run.js.map +1 -0
- package/dist/verification/index.d.ts +1 -0
- package/dist/verification/index.d.ts.map +1 -1
- package/dist/verification/index.js +1 -0
- package/dist/verification/index.js.map +1 -1
- package/dist/verification/presets.d.ts +53 -0
- package/dist/verification/presets.d.ts.map +1 -0
- package/dist/verification/presets.js +70 -0
- package/dist/verification/presets.js.map +1 -0
- package/dist/verification/presets.test.d.ts +16 -0
- package/dist/verification/presets.test.d.ts.map +1 -0
- package/dist/verification/presets.test.js +79 -0
- package/dist/verification/presets.test.js.map +1 -0
- package/dist/version.d.ts.map +1 -1
- package/dist/version.js +25 -4
- package/dist/version.js.map +1 -1
- package/package.json +3 -2
- package/src/advisory/executor.test.ts +7 -4
- package/src/advisory/executor.ts +11 -2
- package/src/agents/ReactiveAgent.ts +7 -0
- package/src/agents/SupervisorAgent.ts +63 -16
- package/src/agents/__tests__/supervisor-ledger.test.ts +185 -0
- package/src/bridge/sse/mapper.test.ts +2 -2
- package/src/config/runtime.ts +9 -0
- package/src/connector/builtins/webhook.test.ts +21 -0
- package/src/connector/index.ts +1 -0
- package/src/connector/mcp/client.ts +4 -0
- package/src/connector/mcp/index.ts +1 -0
- package/src/connector/mcp/streamable-http.test.ts +169 -0
- package/src/connector/mcp/streamable-http.ts +152 -0
- package/src/constants/compaction/index.ts +8 -3
- package/src/constants/sandbox/index.ts +37 -0
- package/src/constants/tools/index.ts +33 -2
- package/src/manager/run/persistence.ts +34 -6
- package/src/persona/assembler.ts +43 -8
- package/src/provider/collect.test.ts +2 -2
- package/src/provider/collect.ts +4 -1
- package/src/public-runtime.ts +15 -1
- package/src/public-tools.ts +2 -0
- package/src/public-types.ts +7 -0
- package/src/registry/index.ts +7 -0
- package/src/registry/tool/execute.test.ts +211 -7
- package/src/registry/tool/execute.ts +199 -11
- package/src/registry/toolset/catalog.test.ts +165 -0
- package/src/registry/toolset/catalog.ts +283 -0
- package/src/runtime/query/__tests__/deferred-tools.test.ts +230 -0
- package/src/runtime/query/__tests__/executor-concurrency.test.ts +122 -0
- package/src/runtime/query/__tests__/executor-plugin-hooks.test.ts +48 -3
- package/src/runtime/query/__tests__/long-document-flow.test.ts +180 -0
- package/src/runtime/query/__tests__/prompt.test.ts +55 -2
- package/src/runtime/query/__tests__/stream-recovery.test.ts +156 -0
- package/src/runtime/query/continuation.ts +16 -0
- package/src/runtime/query/executor.ts +82 -13
- package/src/runtime/query/index.ts +58 -5
- package/src/runtime/query/iteration/index.ts +361 -74
- package/src/runtime/query/iteration/phases/checkpoint.ts +7 -2
- package/src/runtime/query/iteration/phases/compaction.ts +89 -3
- package/src/runtime/query/iteration/phases/context.ts +68 -0
- package/src/runtime/query/iteration/phases/hitl-abort-race.test.ts +86 -0
- package/src/runtime/query/iteration/phases/hitl-answer-question.test.ts +139 -0
- package/src/runtime/query/iteration/phases/tool-review.ts +7 -3
- package/src/runtime/query/iteration/phases/working-memory-compaction.test.ts +215 -0
- package/src/runtime/query/iteration/phases/working-memory.ts +86 -0
- package/src/runtime/query/prompt.ts +17 -1
- package/src/runtime/query/tooling.ts +2 -0
- package/src/sandbox/provider/local.ts +33 -0
- package/src/session/workspace/__tests__/shared-run.test.ts +181 -0
- package/src/session/workspace/index.ts +6 -0
- package/src/session/workspace/shared-run.ts +317 -0
- package/src/skills/loader.test.ts +89 -0
- package/src/skills/loader.ts +37 -6
- package/src/streaming/coalesce.test.ts +4 -4
- package/src/tools/builtins/__tests__/edit.test.ts +57 -0
- package/src/tools/builtins/__tests__/payload-budget.test.ts +92 -0
- package/src/tools/builtins/__tests__/read-file.test.ts +43 -0
- package/src/tools/builtins/__tests__/verify-outputs.test.ts +71 -0
- package/src/tools/builtins/__tests__/write-file.test.ts +97 -0
- package/src/tools/builtins/bash.ts +48 -7
- package/src/tools/builtins/edit.ts +162 -27
- package/src/tools/builtins/index.ts +13 -13
- package/src/tools/builtins/read-file.ts +81 -10
- package/src/tools/builtins/search-tools.ts +42 -7
- package/src/tools/builtins/verify-outputs.ts +126 -0
- package/src/tools/builtins/write-file.ts +83 -14
- package/src/tools/coordinator/__tests__/agent.test.ts +172 -0
- package/src/tools/coordinator/__tests__/approve-plan.test.ts +139 -0
- package/src/tools/coordinator/__tests__/ask-user-question.test.ts +370 -0
- package/src/tools/coordinator/__tests__/task-list.test.ts +182 -0
- package/src/tools/coordinator/agent.ts +157 -0
- package/src/tools/coordinator/index.ts +355 -39
- package/src/types/agent/base.ts +8 -0
- package/src/types/agent/index.ts +1 -0
- package/src/types/agent/reactive.ts +42 -0
- package/src/types/agent/supervisor.ts +36 -0
- package/src/types/agent/working-memory.ts +29 -0
- package/src/types/common/index.ts +19 -0
- package/src/types/common/usage-merge.test.ts +53 -0
- package/src/types/connector/mcp.ts +14 -2
- package/src/types/hitl/index.ts +52 -1
- package/src/types/message/index.ts +32 -2
- package/src/types/provider/chat.ts +12 -9
- package/src/types/run/events.ts +6 -0
- package/src/types/sandbox/index.ts +219 -0
- package/src/types/skills/index.ts +4 -0
- package/src/types/tool/index.ts +24 -0
- package/src/types/toolset/index.ts +86 -0
- package/src/types/workspace/index.ts +9 -0
- package/src/types/workspace/shared-run.ts +65 -0
- package/src/verification/index.ts +1 -0
- package/src/verification/presets.test.ts +112 -0
- package/src/verification/presets.ts +72 -0
- package/src/version.ts +26 -4
package/src/types/agent/index.ts
CHANGED
|
@@ -1,9 +1,13 @@
|
|
|
1
|
+
import type { CompactionConfig } from '../../config/runtime.js'
|
|
1
2
|
import type { AdvisoryConfig } from '../advisory/index.js'
|
|
2
3
|
import type { AgentPersona } from '../persona/index.js'
|
|
3
4
|
import type { LLMProvider } from '../provider/index.js'
|
|
5
|
+
import type { SandboxProvider } from '../sandbox/index.js'
|
|
4
6
|
import type { Skill } from '../skills/index.js'
|
|
5
7
|
import type { ToolRegistryContract } from '../tool/index.js'
|
|
8
|
+
import type { VerificationGateConfig } from '../verification/index.js'
|
|
6
9
|
import type { BaseAgentConfig, BaseAgentResult } from './base.js'
|
|
10
|
+
import type { WorkingMemoryProvider } from './working-memory.js'
|
|
7
11
|
|
|
8
12
|
export interface ReactiveAgentConfig extends BaseAgentConfig {
|
|
9
13
|
systemPrompt?: string
|
|
@@ -17,6 +21,44 @@ export interface ReactiveAgentConfig extends BaseAgentConfig {
|
|
|
17
21
|
tools: ToolRegistryContract
|
|
18
22
|
|
|
19
23
|
advisory?: AdvisoryConfig
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Optional capability-aware deny/allow gate for child tool calls.
|
|
27
|
+
* Mirrors the same field on `SupervisorAgentConfig`; when omitted,
|
|
28
|
+
* `drainQuery` falls back to its `autoApproveHandler` default
|
|
29
|
+
* (every tool call auto-approves, no policy applied). Hosts that
|
|
30
|
+
* trust their sandbox should still pass at least
|
|
31
|
+
* `{ enabled: true, denyDangerousPatterns: true, ... }` so the
|
|
32
|
+
* canonical brick patterns hard-deny instead of executing
|
|
33
|
+
* silently.
|
|
34
|
+
*/
|
|
35
|
+
verificationGate?: VerificationGateConfig
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Optional ephemeral sandbox provider. When set, drainQuery creates
|
|
39
|
+
* a sandbox via `provider.create()` before the iteration loop and
|
|
40
|
+
* routes filesystem / shell tool calls through it; on run end the
|
|
41
|
+
* SDK calls `sandbox.destroy()`. Hosts that want a per-task
|
|
42
|
+
* container shared across supervisor + every child specialist run
|
|
43
|
+
* pass the SAME provider instance to all of them — caching layered
|
|
44
|
+
* on top of the provider keeps the underlying container alive.
|
|
45
|
+
*/
|
|
46
|
+
sandboxProvider?: SandboxProvider
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Optional structured-compaction config. Omitted ⇒ byte-identical run path
|
|
50
|
+
* (no `WorkingStateManager`, compaction early-returns). Mirrors the field
|
|
51
|
+
* on `SupervisorAgentConfig` so a child specialist can share the
|
|
52
|
+
* supervisor's compaction settings.
|
|
53
|
+
*/
|
|
54
|
+
compactionConfig?: CompactionConfig
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Optional neutral working-memory seam — same contract as the field on
|
|
58
|
+
* `SupervisorAgentConfig`. Absent ⇒ no block injected. A child specialist
|
|
59
|
+
* sharing the supervisor's output dir passes the same provider.
|
|
60
|
+
*/
|
|
61
|
+
workingMemoryProvider?: WorkingMemoryProvider
|
|
20
62
|
}
|
|
21
63
|
|
|
22
64
|
export interface ReactiveAgentResult extends BaseAgentResult {
|
|
@@ -1,12 +1,17 @@
|
|
|
1
|
+
import type { CompactionConfig } from '../../config/runtime.js'
|
|
1
2
|
import type { AdvisoryConfig } from '../advisory/index.js'
|
|
2
3
|
import type { ResumeHandler } from '../hitl/index.js'
|
|
3
4
|
import type { LLMProvider } from '../provider/index.js'
|
|
4
5
|
import type { TaskRouterConfig } from '../router/index.js'
|
|
6
|
+
import type { SandboxProvider } from '../sandbox/index.js'
|
|
7
|
+
import type { Skill } from '../skills/index.js'
|
|
8
|
+
import type { ToolRegistryContract } from '../tool/index.js'
|
|
5
9
|
import type { VerificationGateConfig } from '../verification/index.js'
|
|
6
10
|
import type { BaseAgentConfig, BaseAgentResult } from './base.js'
|
|
7
11
|
import type { AgentFactoryOptions } from './factory.js'
|
|
8
12
|
import type { TaskGateway } from './gateway.js'
|
|
9
13
|
import type { AgentManagerContract } from './manager.js'
|
|
14
|
+
import type { WorkingMemoryProvider } from './working-memory.js'
|
|
10
15
|
|
|
11
16
|
export interface SupervisorAgentConfig extends BaseAgentConfig {
|
|
12
17
|
provider: LLMProvider
|
|
@@ -15,9 +20,12 @@ export interface SupervisorAgentConfig extends BaseAgentConfig {
|
|
|
15
20
|
|
|
16
21
|
gateway?: TaskGateway
|
|
17
22
|
agentManager?: AgentManagerContract
|
|
23
|
+
tools?: ToolRegistryContract
|
|
18
24
|
|
|
19
25
|
systemPrompt: string
|
|
20
26
|
|
|
27
|
+
skills?: Skill[]
|
|
28
|
+
|
|
21
29
|
maxDepth?: number
|
|
22
30
|
|
|
23
31
|
taskRouter?: TaskRouterConfig
|
|
@@ -52,6 +60,34 @@ export interface SupervisorAgentConfig extends BaseAgentConfig {
|
|
|
52
60
|
* non-deterministic cases.
|
|
53
61
|
*/
|
|
54
62
|
verificationGate?: VerificationGateConfig
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Optional ephemeral sandbox provider. When set, drainQuery creates
|
|
66
|
+
* a sandbox via `provider.create()` before the supervisor's own
|
|
67
|
+
* iteration loop and routes filesystem / shell tool calls through
|
|
68
|
+
* it. Multi-agent hosts thread the SAME provider instance into
|
|
69
|
+
* every child `ReactiveAgentConfig.sandboxProvider` so supervisor
|
|
70
|
+
* + children share one ephemeral container per task.
|
|
71
|
+
*/
|
|
72
|
+
sandboxProvider?: SandboxProvider
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* Optional structured-compaction config. When omitted, `query()` never
|
|
76
|
+
* builds a `WorkingStateManager` and compaction early-returns — the run
|
|
77
|
+
* path is byte-identical to a non-compacting run. Hosts opt in (e.g. with
|
|
78
|
+
* a `contextWindowTokens`) to keep a long single run alive instead of
|
|
79
|
+
* silently truncating.
|
|
80
|
+
*/
|
|
81
|
+
compactionConfig?: CompactionConfig
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* Optional neutral working-memory seam. When set, the SDK re-renders the
|
|
85
|
+
* provider's string into a single pinned leading system message every
|
|
86
|
+
* iteration (the primacy-edge, compaction-preserved slot). Absent ⇒ no
|
|
87
|
+
* block is ever injected. The SDK only positions the string; the host owns
|
|
88
|
+
* its content and trust framing.
|
|
89
|
+
*/
|
|
90
|
+
workingMemoryProvider?: WorkingMemoryProvider
|
|
55
91
|
}
|
|
56
92
|
|
|
57
93
|
export interface AgentTaskResult {
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Per-turn context the SDK is allowed to hand a working-memory provider.
|
|
3
|
+
*
|
|
4
|
+
* NEUTRAL by construction: opaque strings + a number, NO host/Postgres/disk
|
|
5
|
+
* types. It mirrors `AgentRuntimeContext.notes: readonly string[]` and the
|
|
6
|
+
* `web-search` seam discipline — the host closes over everything else
|
|
7
|
+
* (threadId, output dir, tenancy) when it builds the provider, so the SDK
|
|
8
|
+
* never learns a domain type. The SDK only POSITIONS the returned string at
|
|
9
|
+
* the primacy edge; the host OWNS the content and its authority framing.
|
|
10
|
+
*/
|
|
11
|
+
export interface WorkingMemoryTurnContext {
|
|
12
|
+
/** The active run id (opaque). */
|
|
13
|
+
readonly runId: string
|
|
14
|
+
/** 1-based iteration counter for this run. */
|
|
15
|
+
readonly iteration: number
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Returns a rendered, already-sanitized working-memory block to pin at the
|
|
20
|
+
* primacy edge (a single leading system message, refreshed every iteration).
|
|
21
|
+
*
|
|
22
|
+
* The SDK does no parsing of the returned string — it stores it verbatim under
|
|
23
|
+
* a sentinel header and re-pins it each turn. An empty/blank return ⇒ no block
|
|
24
|
+
* is injected (the byte-identical-when-empty property). Async so the host can
|
|
25
|
+
* `stat` the output dir / read the registry each turn. Failure-isolated by the
|
|
26
|
+
* SDK: a throwing/slow provider degrades to "no refresh this turn", never
|
|
27
|
+
* breaks the run.
|
|
28
|
+
*/
|
|
29
|
+
export type WorkingMemoryProvider = (ctx: WorkingMemoryTurnContext) => string | Promise<string>
|
|
@@ -22,6 +22,25 @@ export function accumulateTokenUsage(current: TokenUsage, addition: TokenUsage):
|
|
|
22
22
|
}
|
|
23
23
|
}
|
|
24
24
|
|
|
25
|
+
/**
|
|
26
|
+
* Merge two usage snapshots seen WITHIN a single streamed turn. Provider usage
|
|
27
|
+
* frames over one stream are cumulative/monotonic (input set once early, output
|
|
28
|
+
* grows), but a late frame can OMIT a field (report 0) — e.g. Anthropic's
|
|
29
|
+
* `message_delta` may carry only output tokens. A naive last-write-wins
|
|
30
|
+
* (`usage = chunk.usage`) then drops the earlier prompt/cache counts and
|
|
31
|
+
* under-reports the turn. Taking the per-field high-water mark preserves every
|
|
32
|
+
* field. DISTINCT from {@link accumulateTokenUsage}, which SUMS across turns.
|
|
33
|
+
*/
|
|
34
|
+
export function mergeTokenUsage(current: TokenUsage, next: TokenUsage): TokenUsage {
|
|
35
|
+
return {
|
|
36
|
+
promptTokens: Math.max(current.promptTokens, next.promptTokens),
|
|
37
|
+
completionTokens: Math.max(current.completionTokens, next.completionTokens),
|
|
38
|
+
totalTokens: Math.max(current.totalTokens, next.totalTokens),
|
|
39
|
+
cachedTokens: Math.max(current.cachedTokens, next.cachedTokens),
|
|
40
|
+
cacheWriteTokens: Math.max(current.cacheWriteTokens, next.cacheWriteTokens),
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
|
|
25
44
|
export interface CostInfo {
|
|
26
45
|
inputCostPer1M: number
|
|
27
46
|
outputCostPer1M: number
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest'
|
|
2
|
+
|
|
3
|
+
import { type TokenUsage, accumulateTokenUsage, mergeTokenUsage } from './index.js'
|
|
4
|
+
|
|
5
|
+
const zero: TokenUsage = {
|
|
6
|
+
promptTokens: 0,
|
|
7
|
+
completionTokens: 0,
|
|
8
|
+
totalTokens: 0,
|
|
9
|
+
cachedTokens: 0,
|
|
10
|
+
cacheWriteTokens: 0,
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* M7: within one streamed turn, usage frames are cumulative/monotonic but a
|
|
15
|
+
* late frame may omit fields. `mergeTokenUsage` keeps the per-field high-water
|
|
16
|
+
* mark so a trailing output-only frame does not zero the earlier prompt/cache
|
|
17
|
+
* counts (the under-report the audit flagged).
|
|
18
|
+
*/
|
|
19
|
+
describe('mergeTokenUsage (within-turn, per-field max)', () => {
|
|
20
|
+
it('preserves prompt/cache tokens when a later frame reports only output', () => {
|
|
21
|
+
// message_start-like frame: input + cache set, output still 0.
|
|
22
|
+
const early: TokenUsage = {
|
|
23
|
+
...zero,
|
|
24
|
+
promptTokens: 1200,
|
|
25
|
+
cachedTokens: 800,
|
|
26
|
+
cacheWriteTokens: 200,
|
|
27
|
+
}
|
|
28
|
+
// message_delta-like frame: only output tokens, input/cache dropped to 0.
|
|
29
|
+
const lateOutputOnly: TokenUsage = { ...zero, completionTokens: 350 }
|
|
30
|
+
|
|
31
|
+
const merged = mergeTokenUsage(early, lateOutputOnly)
|
|
32
|
+
expect(merged.promptTokens).toBe(1200) // NOT zeroed by the late frame
|
|
33
|
+
expect(merged.cachedTokens).toBe(800)
|
|
34
|
+
expect(merged.cacheWriteTokens).toBe(200)
|
|
35
|
+
expect(merged.completionTokens).toBe(350)
|
|
36
|
+
})
|
|
37
|
+
|
|
38
|
+
it('takes the growing (max) completion count across frames', () => {
|
|
39
|
+
const a: TokenUsage = { ...zero, promptTokens: 100, completionTokens: 10 }
|
|
40
|
+
const b: TokenUsage = { ...zero, promptTokens: 100, completionTokens: 42 }
|
|
41
|
+
expect(mergeTokenUsage(a, b).completionTokens).toBe(42)
|
|
42
|
+
// Order-independent (a late smaller frame never regresses the max).
|
|
43
|
+
expect(mergeTokenUsage(b, a).completionTokens).toBe(42)
|
|
44
|
+
})
|
|
45
|
+
|
|
46
|
+
it('is distinct from accumulateTokenUsage (which sums across turns)', () => {
|
|
47
|
+
const t1: TokenUsage = { ...zero, promptTokens: 100, completionTokens: 20 }
|
|
48
|
+
const t2: TokenUsage = { ...zero, promptTokens: 100, completionTokens: 30 }
|
|
49
|
+
// merge = max within a turn; accumulate = sum across turns.
|
|
50
|
+
expect(mergeTokenUsage(t1, t2).promptTokens).toBe(100)
|
|
51
|
+
expect(accumulateTokenUsage(t1, t2).promptTokens).toBe(200)
|
|
52
|
+
})
|
|
53
|
+
})
|
|
@@ -6,7 +6,9 @@ import type {
|
|
|
6
6
|
ConnectorInstance,
|
|
7
7
|
} from './definition.js'
|
|
8
8
|
|
|
9
|
-
export type
|
|
9
|
+
export type MCPStreamableHttpTransportType = 'streamable_http' | 'streamable-http'
|
|
10
|
+
|
|
11
|
+
export type MCPTransportType = 'stdio' | 'http-sse' | MCPStreamableHttpTransportType
|
|
10
12
|
|
|
11
13
|
export interface MCPTransportConfigBase {
|
|
12
14
|
type: MCPTransportType
|
|
@@ -27,7 +29,17 @@ export interface MCPHttpSseTransportConfig extends MCPTransportConfigBase {
|
|
|
27
29
|
timeoutMs?: number
|
|
28
30
|
}
|
|
29
31
|
|
|
30
|
-
export
|
|
32
|
+
export interface MCPStreamableHttpTransportConfig extends MCPTransportConfigBase {
|
|
33
|
+
type: MCPStreamableHttpTransportType
|
|
34
|
+
url: string
|
|
35
|
+
headers?: Record<string, string>
|
|
36
|
+
timeoutMs?: number
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export type MCPTransportUnion =
|
|
40
|
+
| MCPStdioTransportConfig
|
|
41
|
+
| MCPHttpSseTransportConfig
|
|
42
|
+
| MCPStreamableHttpTransportConfig
|
|
31
43
|
|
|
32
44
|
export interface MCPJsonRpcError {
|
|
33
45
|
code: number
|
package/src/types/hitl/index.ts
CHANGED
|
@@ -7,11 +7,27 @@ export type { CheckpointId }
|
|
|
7
7
|
|
|
8
8
|
export type HITLResumeDecision =
|
|
9
9
|
| { action: 'continue' }
|
|
10
|
-
| { action: 'approve_plan' }
|
|
10
|
+
| { action: 'approve_plan'; feedback?: string }
|
|
11
11
|
| { action: 'reject_plan'; feedback: string }
|
|
12
12
|
| { action: 'approve_tools' }
|
|
13
13
|
| { action: 'modify_tools'; modifications: ToolModification[] }
|
|
14
14
|
| { action: 'reject_tools'; feedback: string }
|
|
15
|
+
| {
|
|
16
|
+
action: 'answer_question'
|
|
17
|
+
selectedOptionIds: string[]
|
|
18
|
+
freeText?: string
|
|
19
|
+
/**
|
|
20
|
+
* Echo of `UserQuestionData.questionId` — the misdirection
|
|
21
|
+
* guard. The park/resolve registry on hosts is typically
|
|
22
|
+
* keyed by run, so a stale client can answer question N
|
|
23
|
+
* after question N+1 re-parked under the same run. When
|
|
24
|
+
* present and it does not match the asking tool's own
|
|
25
|
+
* questionId, the tool treats the decision as unanswered
|
|
26
|
+
* instead of fabricating a selection against the wrong
|
|
27
|
+
* question.
|
|
28
|
+
*/
|
|
29
|
+
questionId?: string
|
|
30
|
+
}
|
|
15
31
|
| { action: 'pause'; reason: string }
|
|
16
32
|
| { action: 'abort'; reason: string }
|
|
17
33
|
|
|
@@ -24,6 +40,7 @@ export type HITLDecisionRequest =
|
|
|
24
40
|
checkpointId: CheckpointId
|
|
25
41
|
summary: CheckpointSummary
|
|
26
42
|
}
|
|
43
|
+
| { type: 'user_question'; runId: RunId; checkpointId: CheckpointId; question: UserQuestionData }
|
|
27
44
|
|
|
28
45
|
export type ResumeHandler = (request: HITLDecisionRequest) => Promise<HITLResumeDecision>
|
|
29
46
|
|
|
@@ -40,6 +57,29 @@ export interface ToolModification {
|
|
|
40
57
|
modifiedInput?: unknown
|
|
41
58
|
}
|
|
42
59
|
|
|
60
|
+
export interface UserQuestionOption {
|
|
61
|
+
id: string
|
|
62
|
+
label: string
|
|
63
|
+
description?: string
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* A model-authored question for the user, parked through the
|
|
68
|
+
* `ResumeHandler` exactly like a plan approval. `questionId` equals
|
|
69
|
+
* the asking `tool_use_id` so the host can mint stable, mergeable
|
|
70
|
+
* activity ids per question and so answers can be matched back to
|
|
71
|
+
* the question that asked them (see
|
|
72
|
+
* `HITLResumeDecision['answer_question'].questionId`).
|
|
73
|
+
*/
|
|
74
|
+
export interface UserQuestionData {
|
|
75
|
+
questionId: string
|
|
76
|
+
question: string
|
|
77
|
+
header?: string
|
|
78
|
+
options: UserQuestionOption[]
|
|
79
|
+
multiSelect: boolean
|
|
80
|
+
allowFreeText: boolean
|
|
81
|
+
}
|
|
82
|
+
|
|
43
83
|
export interface PlanApprovalData {
|
|
44
84
|
planId: PlanId
|
|
45
85
|
title: string
|
|
@@ -108,6 +148,17 @@ export function autoApproveHandler(request: HITLDecisionRequest): Promise<HITLRe
|
|
|
108
148
|
return Promise.resolve({ action: 'approve_tools' })
|
|
109
149
|
case 'iteration_checkpoint':
|
|
110
150
|
return Promise.resolve({ action: 'continue' })
|
|
151
|
+
case 'user_question':
|
|
152
|
+
// Headless runs must never deadlock on a question and must
|
|
153
|
+
// never fabricate a user choice: answer with an explicit
|
|
154
|
+
// no-selection sentinel so the asking tool renders "the user
|
|
155
|
+
// did not answer" rather than consent.
|
|
156
|
+
return Promise.resolve({
|
|
157
|
+
action: 'answer_question',
|
|
158
|
+
selectedOptionIds: [],
|
|
159
|
+
freeText: 'No user is available to answer. Proceed using your best judgment.',
|
|
160
|
+
questionId: request.question.questionId,
|
|
161
|
+
})
|
|
111
162
|
default: {
|
|
112
163
|
const _exhaustive: never = request
|
|
113
164
|
throw new Error(`Unhandled HITL request type: ${(_exhaustive as HITLDecisionRequest).type}`)
|
|
@@ -2,6 +2,18 @@ export type MessageRole = 'system' | 'user' | 'assistant' | 'tool'
|
|
|
2
2
|
|
|
3
3
|
export type CacheHint = 'cache' | 'ephemeral' | 'none'
|
|
4
4
|
|
|
5
|
+
/**
|
|
6
|
+
* An image attached to a user message (vision input). Additive: providers
|
|
7
|
+
* that support vision (e.g. Anthropic) emit it as an image content block
|
|
8
|
+
* alongside the text; providers that don't simply ignore it.
|
|
9
|
+
*/
|
|
10
|
+
export interface ImageAttachment {
|
|
11
|
+
/** Base64-encoded image bytes (no `data:` URI prefix). */
|
|
12
|
+
readonly data: string
|
|
13
|
+
/** IANA media type, e.g. `image/png`, `image/jpeg`, `image/webp`. */
|
|
14
|
+
readonly mediaType: string
|
|
15
|
+
}
|
|
16
|
+
|
|
5
17
|
export interface ToolCall {
|
|
6
18
|
id: string
|
|
7
19
|
type: 'function'
|
|
@@ -9,6 +21,14 @@ export interface ToolCall {
|
|
|
9
21
|
name: string
|
|
10
22
|
arguments: string
|
|
11
23
|
}
|
|
24
|
+
/**
|
|
25
|
+
* Runtime-only execution annotations. This is intentionally separate
|
|
26
|
+
* from `function.arguments`: tool arguments remain the model-authored
|
|
27
|
+
* JSON payload, while provider/runtime recovery state lives here.
|
|
28
|
+
*/
|
|
29
|
+
metadata?: {
|
|
30
|
+
inputTruncated?: boolean
|
|
31
|
+
}
|
|
12
32
|
}
|
|
13
33
|
|
|
14
34
|
export interface BaseMessage {
|
|
@@ -26,6 +46,8 @@ export interface SystemMessage extends BaseMessage {
|
|
|
26
46
|
export interface UserMessage extends BaseMessage {
|
|
27
47
|
role: 'user'
|
|
28
48
|
content: string
|
|
49
|
+
/** Optional image attachments (vision input). */
|
|
50
|
+
attachments?: readonly ImageAttachment[]
|
|
29
51
|
}
|
|
30
52
|
|
|
31
53
|
export interface AssistantMessage extends BaseMessage {
|
|
@@ -51,8 +73,16 @@ export function createSystemMessage(content: string, cacheHint?: CacheHint): Sys
|
|
|
51
73
|
}
|
|
52
74
|
}
|
|
53
75
|
|
|
54
|
-
export function createUserMessage(
|
|
55
|
-
|
|
76
|
+
export function createUserMessage(
|
|
77
|
+
content: string,
|
|
78
|
+
attachments?: readonly ImageAttachment[],
|
|
79
|
+
): UserMessage {
|
|
80
|
+
return {
|
|
81
|
+
role: 'user',
|
|
82
|
+
content,
|
|
83
|
+
timestamp: Date.now(),
|
|
84
|
+
...(attachments && attachments.length > 0 ? { attachments } : {}),
|
|
85
|
+
}
|
|
56
86
|
}
|
|
57
87
|
|
|
58
88
|
export function createAssistantMessage(
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { TokenUsage } from '../common/index.js'
|
|
2
|
-
import type { Message } from '../message/index.js'
|
|
2
|
+
import type { Message, ToolCall } from '../message/index.js'
|
|
3
3
|
import type { LLMToolSchema } from '../tool/index.js'
|
|
4
4
|
|
|
5
5
|
export type ToolChoice =
|
|
@@ -28,6 +28,16 @@ export interface ChatCompletionParams {
|
|
|
28
28
|
stream?: boolean
|
|
29
29
|
stop?: string[]
|
|
30
30
|
|
|
31
|
+
/**
|
|
32
|
+
* Per-call cancellation. Aborting it tears down the in-flight model
|
|
33
|
+
* request (the provider passes it to the underlying fetch / SDK) AND the
|
|
34
|
+
* runtime races the stream consumer against it, so a Stop stops the
|
|
35
|
+
* CURRENT turn mid-flight — not only between turns. Optional and inert
|
|
36
|
+
* when unset: a non-aborted signal is behaviourally identical to omitting
|
|
37
|
+
* it, so existing callers are unaffected.
|
|
38
|
+
*/
|
|
39
|
+
signal?: AbortSignal
|
|
40
|
+
|
|
31
41
|
toolChoice?: ToolChoice
|
|
32
42
|
parallelToolCalls?: boolean
|
|
33
43
|
|
|
@@ -48,14 +58,7 @@ export interface ChatCompletionResponse {
|
|
|
48
58
|
message: {
|
|
49
59
|
role: 'assistant'
|
|
50
60
|
content: string | null
|
|
51
|
-
toolCalls?:
|
|
52
|
-
id: string
|
|
53
|
-
type: 'function'
|
|
54
|
-
function: {
|
|
55
|
-
name: string
|
|
56
|
-
arguments: string
|
|
57
|
-
}
|
|
58
|
-
}>
|
|
61
|
+
toolCalls?: ToolCall[]
|
|
59
62
|
}
|
|
60
63
|
finishReason: 'stop' | 'tool_calls' | 'length' | 'content_filter'
|
|
61
64
|
usage: TokenUsage
|
package/src/types/run/events.ts
CHANGED
|
@@ -263,6 +263,12 @@ type CoreRunEvent =
|
|
|
263
263
|
runId: RunId
|
|
264
264
|
toolUseId: ToolUseId
|
|
265
265
|
input: unknown
|
|
266
|
+
/**
|
|
267
|
+
* True when the provider stream ended before the tool JSON
|
|
268
|
+
* arguments closed. `input` stays a sanitized object so public
|
|
269
|
+
* consumers never receive internal recovery sentinels.
|
|
270
|
+
*/
|
|
271
|
+
inputTruncated?: boolean
|
|
266
272
|
}
|
|
267
273
|
|
|
268
274
|
/**
|