@namzu/sdk 30.2.0 → 31.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +556 -0
- package/README.md +43 -2
- package/dist/advisory/executor.d.ts +2 -1
- package/dist/advisory/executor.d.ts.map +1 -1
- package/dist/advisory/executor.js +4 -1
- package/dist/advisory/executor.js.map +1 -1
- package/dist/agents/ReactiveAgent.d.ts.map +1 -1
- package/dist/agents/ReactiveAgent.js +12 -0
- package/dist/agents/ReactiveAgent.js.map +1 -1
- package/dist/agents/RouterAgent.d.ts.map +1 -1
- package/dist/agents/RouterAgent.js +21 -3
- package/dist/agents/RouterAgent.js.map +1 -1
- package/dist/agents/SupervisorAgent.d.ts.map +1 -1
- package/dist/agents/SupervisorAgent.js +34 -11
- package/dist/agents/SupervisorAgent.js.map +1 -1
- package/dist/agents/runAgent.d.ts +12 -0
- package/dist/agents/runAgent.d.ts.map +1 -1
- package/dist/agents/runAgent.js +26 -2
- package/dist/agents/runAgent.js.map +1 -1
- package/dist/authorization/command-line.d.ts +81 -0
- package/dist/authorization/command-line.d.ts.map +1 -0
- package/dist/authorization/command-line.js +347 -0
- package/dist/authorization/command-line.js.map +1 -0
- package/dist/authorization/rules.d.ts.map +1 -1
- package/dist/authorization/rules.js +22 -1
- package/dist/authorization/rules.js.map +1 -1
- package/dist/bridge/a2a/client.d.ts +23 -5
- package/dist/bridge/a2a/client.d.ts.map +1 -1
- package/dist/bridge/a2a/client.js +320 -73
- package/dist/bridge/a2a/client.js.map +1 -1
- package/dist/bridge/a2a/mapper.d.ts.map +1 -1
- package/dist/bridge/a2a/mapper.js +4 -0
- package/dist/bridge/a2a/mapper.js.map +1 -1
- package/dist/bridge/acp/server.d.ts +13 -1
- package/dist/bridge/acp/server.d.ts.map +1 -1
- package/dist/bridge/acp/server.js +150 -44
- package/dist/bridge/acp/server.js.map +1 -1
- package/dist/bridge/mcp/connector/adapter.d.ts +3 -2
- package/dist/bridge/mcp/connector/adapter.d.ts.map +1 -1
- package/dist/bridge/mcp/connector/adapter.js +17 -21
- package/dist/bridge/mcp/connector/adapter.js.map +1 -1
- package/dist/bridge/sse/mapper.d.ts.map +1 -1
- package/dist/bridge/sse/mapper.js +3 -0
- package/dist/bridge/sse/mapper.js.map +1 -1
- package/dist/compaction/dangling.d.ts +29 -2
- package/dist/compaction/dangling.d.ts.map +1 -1
- package/dist/compaction/dangling.js +172 -35
- package/dist/compaction/dangling.js.map +1 -1
- package/dist/compaction/index.d.ts +3 -2
- package/dist/compaction/index.d.ts.map +1 -1
- package/dist/compaction/index.js +1 -1
- package/dist/compaction/index.js.map +1 -1
- package/dist/compaction/manual.d.ts +11 -1
- package/dist/compaction/manual.d.ts.map +1 -1
- package/dist/compaction/manual.js +89 -14
- package/dist/compaction/manual.js.map +1 -1
- package/dist/compaction/plan.d.ts +19 -6
- package/dist/compaction/plan.d.ts.map +1 -1
- package/dist/compaction/plan.js +18 -4
- package/dist/compaction/plan.js.map +1 -1
- package/dist/compaction/retention.d.ts +10 -7
- package/dist/compaction/retention.d.ts.map +1 -1
- package/dist/compaction/retention.js +26 -8
- package/dist/compaction/retention.js.map +1 -1
- package/dist/compaction/summary.d.ts +4 -4
- package/dist/compaction/summary.js +4 -4
- package/dist/compaction/verifier.d.ts +19 -1
- package/dist/compaction/verifier.d.ts.map +1 -1
- package/dist/compaction/verifier.js +20 -1
- package/dist/compaction/verifier.js.map +1 -1
- package/dist/config/runtime.d.ts +6 -6
- package/dist/connector/BaseConnector.d.ts +6 -4
- package/dist/connector/BaseConnector.d.ts.map +1 -1
- package/dist/connector/BaseConnector.js +8 -2
- package/dist/connector/BaseConnector.js.map +1 -1
- package/dist/connector/builtins/http.d.ts +16 -4
- package/dist/connector/builtins/http.d.ts.map +1 -1
- package/dist/connector/builtins/http.js +177 -44
- package/dist/connector/builtins/http.js.map +1 -1
- package/dist/connector/builtins/webhook.d.ts +15 -4
- package/dist/connector/builtins/webhook.d.ts.map +1 -1
- package/dist/connector/builtins/webhook.js +165 -45
- package/dist/connector/builtins/webhook.js.map +1 -1
- package/dist/connector/execution-contract.d.ts +11 -0
- package/dist/connector/execution-contract.d.ts.map +1 -0
- package/dist/connector/execution-contract.js +14 -0
- package/dist/connector/execution-contract.js.map +1 -0
- package/dist/connector/http-operation.d.ts +48 -0
- package/dist/connector/http-operation.d.ts.map +1 -0
- package/dist/connector/http-operation.js +205 -0
- package/dist/connector/http-operation.js.map +1 -0
- package/dist/connector/mcp/adapter.d.ts.map +1 -1
- package/dist/connector/mcp/adapter.js +8 -3
- package/dist/connector/mcp/adapter.js.map +1 -1
- package/dist/connector/mcp/client.d.ts +14 -8
- package/dist/connector/mcp/client.d.ts.map +1 -1
- package/dist/connector/mcp/client.js +160 -44
- package/dist/connector/mcp/client.js.map +1 -1
- package/dist/connector/mcp/http-sse.d.ts +8 -2
- package/dist/connector/mcp/http-sse.d.ts.map +1 -1
- package/dist/connector/mcp/http-sse.js +70 -17
- package/dist/connector/mcp/http-sse.js.map +1 -1
- package/dist/connector/mcp/prompt-adapter.d.ts.map +1 -1
- package/dist/connector/mcp/prompt-adapter.js +9 -2
- package/dist/connector/mcp/prompt-adapter.js.map +1 -1
- package/dist/connector/mcp/stdio.d.ts +2 -2
- package/dist/connector/mcp/stdio.d.ts.map +1 -1
- package/dist/connector/mcp/stdio.js +14 -50
- package/dist/connector/mcp/stdio.js.map +1 -1
- package/dist/connector/mcp/streamable-http.d.ts +7 -2
- package/dist/connector/mcp/streamable-http.d.ts.map +1 -1
- package/dist/connector/mcp/streamable-http.js +66 -18
- package/dist/connector/mcp/streamable-http.js.map +1 -1
- package/dist/connector/tools/adapter.d.ts +2 -2
- package/dist/connector/tools/adapter.d.ts.map +1 -1
- package/dist/connector/tools/adapter.js +23 -14
- package/dist/connector/tools/adapter.js.map +1 -1
- package/dist/connector/tools/definitions.d.ts.map +1 -1
- package/dist/connector/tools/definitions.js +5 -2
- package/dist/connector/tools/definitions.js.map +1 -1
- package/dist/connector/tools/result.d.ts +4 -0
- package/dist/connector/tools/result.d.ts.map +1 -0
- package/dist/connector/tools/result.js +20 -0
- package/dist/connector/tools/result.js.map +1 -0
- package/dist/connector/web/guarded-fetch.d.ts +4 -2
- package/dist/connector/web/guarded-fetch.d.ts.map +1 -1
- package/dist/connector/web/guarded-fetch.js +157 -43
- package/dist/connector/web/guarded-fetch.js.map +1 -1
- package/dist/constants/sandbox/index.d.ts +3 -2
- package/dist/constants/sandbox/index.d.ts.map +1 -1
- package/dist/constants/sandbox/index.js +3 -2
- package/dist/constants/sandbox/index.js.map +1 -1
- package/dist/contracts/api.d.ts +2 -0
- package/dist/contracts/api.d.ts.map +1 -1
- package/dist/contracts/schemas.d.ts +38 -12
- package/dist/contracts/schemas.d.ts.map +1 -1
- package/dist/contracts/schemas.js +7 -0
- package/dist/contracts/schemas.js.map +1 -1
- package/dist/directory/derive-supervisor.d.ts.map +1 -1
- package/dist/directory/derive-supervisor.js +8 -0
- package/dist/directory/derive-supervisor.js.map +1 -1
- package/dist/directory/derive.d.ts.map +1 -1
- package/dist/directory/derive.js +8 -0
- package/dist/directory/derive.js.map +1 -1
- package/dist/directory/load.d.ts.map +1 -1
- package/dist/directory/load.js +2 -0
- package/dist/directory/load.js.map +1 -1
- package/dist/directory/types.d.ts +4 -0
- package/dist/directory/types.d.ts.map +1 -1
- package/dist/eval/experiment.d.ts +10 -10
- package/dist/eval/experiment.d.ts.map +1 -1
- package/dist/eval/experiment.js +121 -91
- package/dist/eval/experiment.js.map +1 -1
- package/dist/eval/judge.d.ts +6 -0
- package/dist/eval/judge.d.ts.map +1 -1
- package/dist/eval/judge.js +7 -2
- package/dist/eval/judge.js.map +1 -1
- package/dist/eval/types.d.ts +7 -1
- package/dist/eval/types.d.ts.map +1 -1
- package/dist/manager/agent/lifecycle.d.ts +12 -10
- package/dist/manager/agent/lifecycle.d.ts.map +1 -1
- package/dist/manager/agent/lifecycle.js +16 -3
- package/dist/manager/agent/lifecycle.js.map +1 -1
- package/dist/manager/connector/environment.d.ts +2 -2
- package/dist/manager/connector/environment.d.ts.map +1 -1
- package/dist/manager/connector/environment.js +2 -2
- package/dist/manager/connector/environment.js.map +1 -1
- package/dist/manager/connector/lifecycle.d.ts +10 -2
- package/dist/manager/connector/lifecycle.d.ts.map +1 -1
- package/dist/manager/connector/lifecycle.js +273 -24
- package/dist/manager/connector/lifecycle.js.map +1 -1
- package/dist/manager/connector/tenant.d.ts +5 -4
- package/dist/manager/connector/tenant.d.ts.map +1 -1
- package/dist/manager/connector/tenant.js +47 -22
- package/dist/manager/connector/tenant.js.map +1 -1
- package/dist/manager/goal/activation.d.ts +23 -0
- package/dist/manager/goal/activation.d.ts.map +1 -0
- package/dist/manager/goal/activation.js +41 -0
- package/dist/manager/goal/activation.js.map +1 -0
- package/dist/manager/index.d.ts +3 -2
- package/dist/manager/index.d.ts.map +1 -1
- package/dist/manager/index.js.map +1 -1
- package/dist/manager/run/persistence.d.ts +2 -0
- package/dist/manager/run/persistence.d.ts.map +1 -1
- package/dist/manager/run/persistence.js +5 -1
- package/dist/manager/run/persistence.js.map +1 -1
- package/dist/manager/topic/dependency.d.ts +24 -0
- package/dist/manager/topic/dependency.d.ts.map +1 -0
- package/dist/manager/topic/dependency.js +13 -0
- package/dist/manager/topic/dependency.js.map +1 -0
- package/dist/manager/topic/lifecycle.d.ts +9 -21
- package/dist/manager/topic/lifecycle.d.ts.map +1 -1
- package/dist/manager/topic/lifecycle.js +17 -29
- package/dist/manager/topic/lifecycle.js.map +1 -1
- package/dist/plugin/index.d.ts +1 -0
- package/dist/plugin/index.d.ts.map +1 -1
- package/dist/plugin/index.js.map +1 -1
- package/dist/plugin/lifecycle.d.ts +15 -0
- package/dist/plugin/lifecycle.d.ts.map +1 -1
- package/dist/plugin/lifecycle.js +144 -38
- package/dist/plugin/lifecycle.js.map +1 -1
- package/dist/plugin/loader.d.ts +3 -3
- package/dist/plugin/loader.d.ts.map +1 -1
- package/dist/plugin/loader.js +58 -12
- package/dist/plugin/loader.js.map +1 -1
- package/dist/provider/collect-chat-completion.d.ts.map +1 -1
- package/dist/provider/collect-chat-completion.js +4 -0
- package/dist/provider/collect-chat-completion.js.map +1 -1
- package/dist/provider/fallback.d.ts +3 -1
- package/dist/provider/fallback.d.ts.map +1 -1
- package/dist/provider/fallback.js +62 -10
- package/dist/provider/fallback.js.map +1 -1
- package/dist/provider/idle-timeout.d.ts +4 -0
- package/dist/provider/idle-timeout.d.ts.map +1 -1
- package/dist/provider/idle-timeout.js +131 -15
- package/dist/provider/idle-timeout.js.map +1 -1
- package/dist/provider/index.d.ts +2 -0
- package/dist/provider/index.d.ts.map +1 -1
- package/dist/provider/index.js +1 -0
- package/dist/provider/index.js.map +1 -1
- package/dist/provider/instrumentation.d.ts.map +1 -1
- package/dist/provider/instrumentation.js +1 -0
- package/dist/provider/instrumentation.js.map +1 -1
- package/dist/provider/retry.d.ts.map +1 -1
- package/dist/provider/retry.js +13 -1
- package/dist/provider/retry.js.map +1 -1
- package/dist/public-runtime.d.ts +57 -24
- package/dist/public-runtime.d.ts.map +1 -1
- package/dist/public-runtime.js +42 -35
- package/dist/public-runtime.js.map +1 -1
- package/dist/public-tools.d.ts +1 -0
- package/dist/public-tools.d.ts.map +1 -1
- package/dist/public-tools.js +5 -0
- package/dist/public-tools.js.map +1 -1
- package/dist/public-types.d.ts +33 -12
- package/dist/public-types.d.ts.map +1 -1
- package/dist/rag/embedding.d.ts +8 -3
- package/dist/rag/embedding.d.ts.map +1 -1
- package/dist/rag/embedding.js +120 -9
- package/dist/rag/embedding.js.map +1 -1
- package/dist/rag/index.d.ts +1 -1
- package/dist/rag/index.d.ts.map +1 -1
- package/dist/rag/index.js +1 -1
- package/dist/rag/index.js.map +1 -1
- package/dist/rag/ingestion.d.ts +2 -2
- package/dist/rag/ingestion.d.ts.map +1 -1
- package/dist/rag/ingestion.js +15 -3
- package/dist/rag/ingestion.js.map +1 -1
- package/dist/rag/knowledge-base.d.ts +3 -3
- package/dist/rag/knowledge-base.d.ts.map +1 -1
- package/dist/rag/knowledge-base.js +8 -4
- package/dist/rag/knowledge-base.js.map +1 -1
- package/dist/rag/operation.d.ts +10 -0
- package/dist/rag/operation.d.ts.map +1 -0
- package/dist/rag/operation.js +26 -0
- package/dist/rag/operation.js.map +1 -0
- package/dist/rag/rag-tool.d.ts.map +1 -1
- package/dist/rag/rag-tool.js +6 -3
- package/dist/rag/rag-tool.js.map +1 -1
- package/dist/rag/retriever.d.ts +2 -2
- package/dist/rag/retriever.d.ts.map +1 -1
- package/dist/rag/retriever.js +31 -15
- package/dist/rag/retriever.js.map +1 -1
- package/dist/rag/vector-store.d.ts +3 -3
- package/dist/rag/vector-store.d.ts.map +1 -1
- package/dist/rag/vector-store.js +4 -2
- package/dist/rag/vector-store.js.map +1 -1
- package/dist/registry/command/kernel-commands.d.ts +16 -4
- package/dist/registry/command/kernel-commands.d.ts.map +1 -1
- package/dist/registry/command/kernel-commands.js +171 -0
- package/dist/registry/command/kernel-commands.js.map +1 -1
- package/dist/run/reporter.d.ts.map +1 -1
- package/dist/run/reporter.js +9 -0
- package/dist/run/reporter.js.map +1 -1
- package/dist/run-query/index.d.ts +15 -1
- package/dist/run-query/index.d.ts.map +1 -1
- package/dist/run-query/index.js +69 -15
- package/dist/run-query/index.js.map +1 -1
- package/dist/runtime/query/context.d.ts.map +1 -1
- package/dist/runtime/query/context.js +10 -3
- package/dist/runtime/query/context.js.map +1 -1
- 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 +80 -18
- package/dist/runtime/query/executor.js.map +1 -1
- package/dist/runtime/query/guard.d.ts +9 -0
- package/dist/runtime/query/guard.d.ts.map +1 -1
- package/dist/runtime/query/guard.js +11 -0
- package/dist/runtime/query/guard.js.map +1 -1
- package/dist/runtime/query/index.d.ts +30 -1
- package/dist/runtime/query/index.d.ts.map +1 -1
- package/dist/runtime/query/index.js +548 -95
- 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 +74 -14
- package/dist/runtime/query/iteration/index.js.map +1 -1
- package/dist/runtime/query/iteration/phases/compaction.d.ts.map +1 -1
- package/dist/runtime/query/iteration/phases/compaction.js +94 -53
- package/dist/runtime/query/iteration/phases/compaction.js.map +1 -1
- package/dist/runtime/query/iteration/phases/context.d.ts +3 -0
- package/dist/runtime/query/iteration/phases/context.d.ts.map +1 -1
- package/dist/runtime/query/iteration/phases/context.js.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 +21 -0
- 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 +4 -0
- package/dist/runtime/query/iteration/stream-turn.js.map +1 -1
- package/dist/runtime/query/project-instructions.d.ts +69 -0
- package/dist/runtime/query/project-instructions.d.ts.map +1 -0
- package/dist/runtime/query/project-instructions.js +137 -0
- package/dist/runtime/query/project-instructions.js.map +1 -0
- package/dist/runtime/query/request-rich-content.d.ts +22 -0
- package/dist/runtime/query/request-rich-content.d.ts.map +1 -0
- package/dist/runtime/query/request-rich-content.js +122 -0
- package/dist/runtime/query/request-rich-content.js.map +1 -0
- package/dist/runtime/query/result.d.ts.map +1 -1
- package/dist/runtime/query/result.js +12 -1
- package/dist/runtime/query/result.js.map +1 -1
- package/dist/runtime/query/resume-pending.d.ts.map +1 -1
- package/dist/runtime/query/resume-pending.js +19 -20
- package/dist/runtime/query/resume-pending.js.map +1 -1
- package/dist/runtime/query/resume-run.d.ts.map +1 -1
- package/dist/runtime/query/resume-run.js +54 -8
- package/dist/runtime/query/resume-run.js.map +1 -1
- package/dist/runtime/query/run-state.d.ts +5 -0
- package/dist/runtime/query/run-state.d.ts.map +1 -1
- package/dist/runtime/query/run-state.js +6 -1
- package/dist/runtime/query/run-state.js.map +1 -1
- package/dist/runtime/query/sandbox-lifecycle.d.ts +54 -0
- package/dist/runtime/query/sandbox-lifecycle.d.ts.map +1 -0
- package/dist/runtime/query/sandbox-lifecycle.js +167 -0
- package/dist/runtime/query/sandbox-lifecycle.js.map +1 -0
- package/dist/sandbox/isolation.d.ts.map +1 -1
- package/dist/sandbox/isolation.js +9 -0
- package/dist/sandbox/isolation.js.map +1 -1
- package/dist/sandbox/provider/local.d.ts +56 -6
- package/dist/sandbox/provider/local.d.ts.map +1 -1
- package/dist/sandbox/provider/local.js +181 -76
- package/dist/sandbox/provider/local.js.map +1 -1
- package/dist/sandbox/terminal.d.ts +13 -5
- package/dist/sandbox/terminal.d.ts.map +1 -1
- package/dist/sandbox/terminal.js +11 -3
- package/dist/sandbox/terminal.js.map +1 -1
- package/dist/session/errors.d.ts +28 -29
- package/dist/session/errors.d.ts.map +1 -1
- package/dist/session/errors.js +28 -29
- package/dist/session/errors.js.map +1 -1
- package/dist/session/handoff/broadcast.d.ts +5 -8
- package/dist/session/handoff/broadcast.d.ts.map +1 -1
- package/dist/session/handoff/broadcast.js +16 -6
- package/dist/session/handoff/broadcast.js.map +1 -1
- package/dist/session/handoff/single.d.ts +5 -8
- package/dist/session/handoff/single.d.ts.map +1 -1
- package/dist/session/handoff/single.js +7 -4
- package/dist/session/handoff/single.js.map +1 -1
- package/dist/store/attachment/index.d.ts +11 -3
- package/dist/store/attachment/index.d.ts.map +1 -1
- package/dist/store/attachment/index.js +49 -4
- package/dist/store/attachment/index.js.map +1 -1
- package/dist/store/feedback/conformance.d.ts.map +1 -1
- package/dist/store/feedback/conformance.js +32 -0
- package/dist/store/feedback/conformance.js.map +1 -1
- package/dist/store/feedback/disk.d.ts +8 -6
- package/dist/store/feedback/disk.d.ts.map +1 -1
- package/dist/store/feedback/disk.js +111 -76
- package/dist/store/feedback/disk.js.map +1 -1
- package/dist/store/goal/index.d.ts +111 -0
- package/dist/store/goal/index.d.ts.map +1 -0
- package/dist/store/goal/index.js +436 -0
- package/dist/store/goal/index.js.map +1 -0
- package/dist/store/index.d.ts +1 -1
- package/dist/store/index.d.ts.map +1 -1
- package/dist/store/index.js +1 -1
- package/dist/store/index.js.map +1 -1
- package/dist/store/kv/revision-record-store.d.ts +70 -0
- package/dist/store/kv/revision-record-store.d.ts.map +1 -0
- package/dist/store/kv/revision-record-store.js +290 -0
- package/dist/store/kv/revision-record-store.js.map +1 -0
- package/dist/store/memory/disk.d.ts +9 -7
- package/dist/store/memory/disk.d.ts.map +1 -1
- package/dist/store/memory/disk.js +256 -98
- package/dist/store/memory/disk.js.map +1 -1
- package/dist/store/run/disk.d.ts +10 -2
- package/dist/store/run/disk.d.ts.map +1 -1
- package/dist/store/run/disk.js +70 -4
- package/dist/store/run/disk.js.map +1 -1
- package/dist/store/run/memory.d.ts +4 -2
- package/dist/store/run/memory.d.ts.map +1 -1
- package/dist/store/run/memory.js +15 -1
- package/dist/store/run/memory.js.map +1 -1
- package/dist/store/session/disk.d.ts +9 -0
- package/dist/store/session/disk.d.ts.map +1 -1
- package/dist/store/session/disk.js +57 -5
- package/dist/store/session/disk.js.map +1 -1
- package/dist/store/session/memory.d.ts +1 -0
- package/dist/store/session/memory.d.ts.map +1 -1
- package/dist/store/session/memory.js +14 -0
- package/dist/store/session/memory.js.map +1 -1
- package/dist/store/topic/memory.d.ts +1 -2
- package/dist/store/topic/memory.d.ts.map +1 -1
- package/dist/store/topic/memory.js +4 -5
- package/dist/store/topic/memory.js.map +1 -1
- package/dist/store/topic/objective.d.ts +8 -4
- package/dist/store/topic/objective.d.ts.map +1 -1
- package/dist/store/topic/objective.js +185 -100
- package/dist/store/topic/objective.js.map +1 -1
- package/dist/store/topic/state.d.ts +1 -2
- package/dist/store/topic/state.d.ts.map +1 -1
- package/dist/store/topic/state.js +50 -62
- package/dist/store/topic/state.js.map +1 -1
- package/dist/tools/builtins/bash.d.ts.map +1 -1
- package/dist/tools/builtins/bash.js +20 -0
- package/dist/tools/builtins/bash.js.map +1 -1
- package/dist/tools/builtins/computer-use.d.ts +9 -1
- package/dist/tools/builtins/computer-use.d.ts.map +1 -1
- package/dist/tools/builtins/computer-use.js.map +1 -1
- package/dist/tools/builtins/content-fingerprint.d.ts +8 -7
- package/dist/tools/builtins/content-fingerprint.d.ts.map +1 -1
- package/dist/tools/builtins/content-fingerprint.js +9 -10
- package/dist/tools/builtins/content-fingerprint.js.map +1 -1
- package/dist/tools/builtins/edit.d.ts +6 -1
- package/dist/tools/builtins/edit.d.ts.map +1 -1
- package/dist/tools/builtins/edit.js +166 -27
- package/dist/tools/builtins/edit.js.map +1 -1
- package/dist/tools/builtins/write-file.d.ts.map +1 -1
- package/dist/tools/builtins/write-file.js +45 -19
- package/dist/tools/builtins/write-file.js.map +1 -1
- package/dist/tools/command-arguments.d.ts +43 -0
- package/dist/tools/command-arguments.d.ts.map +1 -0
- package/dist/tools/command-arguments.js +52 -0
- package/dist/tools/command-arguments.js.map +1 -0
- package/dist/tools/coordinator/index.d.ts +2 -0
- package/dist/tools/coordinator/index.d.ts.map +1 -1
- package/dist/tools/coordinator/index.js +3 -1
- package/dist/tools/coordinator/index.js.map +1 -1
- package/dist/tools/defineTool.d.ts +10 -0
- package/dist/tools/defineTool.d.ts.map +1 -1
- package/dist/tools/defineTool.js +1 -0
- package/dist/tools/defineTool.js.map +1 -1
- package/dist/tools/env-scrub.d.ts +7 -5
- package/dist/tools/env-scrub.d.ts.map +1 -1
- package/dist/tools/env-scrub.js +7 -5
- package/dist/tools/env-scrub.js.map +1 -1
- package/dist/tools/goal/index.d.ts +20 -0
- package/dist/tools/goal/index.d.ts.map +1 -0
- package/dist/tools/goal/index.js +104 -0
- package/dist/tools/goal/index.js.map +1 -0
- package/dist/tools/memory/index.d.ts +16 -0
- package/dist/tools/memory/index.d.ts.map +1 -1
- package/dist/tools/memory/index.js +6 -2
- package/dist/tools/memory/index.js.map +1 -1
- package/dist/tools/memory/search.d.ts +4 -1
- package/dist/tools/memory/search.d.ts.map +1 -1
- package/dist/tools/memory/search.js +10 -2
- package/dist/tools/memory/search.js.map +1 -1
- package/dist/types/agent/base.d.ts +11 -3
- package/dist/types/agent/base.d.ts.map +1 -1
- package/dist/types/agent/factory.d.ts +2 -0
- package/dist/types/agent/factory.d.ts.map +1 -1
- package/dist/types/agent/reactive.d.ts +2 -0
- package/dist/types/agent/reactive.d.ts.map +1 -1
- package/dist/types/agent/supervisor.d.ts +6 -0
- package/dist/types/agent/supervisor.d.ts.map +1 -1
- package/dist/types/agent/task.d.ts +6 -2
- package/dist/types/agent/task.d.ts.map +1 -1
- package/dist/types/connector/core.d.ts +13 -8
- package/dist/types/connector/core.d.ts.map +1 -1
- package/dist/types/connector/definition.d.ts +37 -18
- package/dist/types/connector/definition.d.ts.map +1 -1
- package/dist/types/connector/http.d.ts +6 -0
- package/dist/types/connector/http.d.ts.map +1 -1
- package/dist/types/connector/mcp.d.ts +24 -6
- package/dist/types/connector/mcp.d.ts.map +1 -1
- package/dist/types/connector/tenant.d.ts +17 -7
- package/dist/types/connector/tenant.d.ts.map +1 -1
- package/dist/types/connector/webhook.d.ts +6 -0
- package/dist/types/connector/webhook.d.ts.map +1 -1
- package/dist/types/goal/index.d.ts +46 -0
- package/dist/types/goal/index.d.ts.map +1 -0
- package/dist/types/goal/index.js +2 -0
- package/dist/types/goal/index.js.map +1 -0
- package/dist/types/ids/index.d.ts +2 -0
- package/dist/types/ids/index.d.ts.map +1 -1
- package/dist/types/ids/index.js.map +1 -1
- package/dist/types/message/index.d.ts +75 -10
- package/dist/types/message/index.d.ts.map +1 -1
- package/dist/types/message/index.js +49 -3
- package/dist/types/message/index.js.map +1 -1
- package/dist/types/plugin/index.d.ts +7 -5
- package/dist/types/plugin/index.d.ts.map +1 -1
- package/dist/types/plugin/index.js.map +1 -1
- package/dist/types/provider/chat.d.ts +27 -4
- package/dist/types/provider/chat.d.ts.map +1 -1
- package/dist/types/provider/interface.d.ts +18 -7
- package/dist/types/provider/interface.d.ts.map +1 -1
- package/dist/types/provider/stream.d.ts +6 -0
- package/dist/types/provider/stream.d.ts.map +1 -1
- package/dist/types/rag/embedding.d.ts +15 -2
- package/dist/types/rag/embedding.d.ts.map +1 -1
- package/dist/types/rag/ingestion.d.ts +2 -2
- package/dist/types/rag/ingestion.d.ts.map +1 -1
- package/dist/types/rag/knowledge-base.d.ts +3 -3
- package/dist/types/rag/knowledge-base.d.ts.map +1 -1
- package/dist/types/rag/retrieval.d.ts +2 -2
- package/dist/types/rag/retrieval.d.ts.map +1 -1
- package/dist/types/rag/scope.d.ts +4 -0
- package/dist/types/rag/scope.d.ts.map +1 -1
- package/dist/types/rag/vector.d.ts +5 -2
- package/dist/types/rag/vector.d.ts.map +1 -1
- package/dist/types/run/config.d.ts +20 -0
- package/dist/types/run/config.d.ts.map +1 -1
- package/dist/types/run/events.d.ts +25 -1
- package/dist/types/run/events.d.ts.map +1 -1
- package/dist/types/run/events.js.map +1 -1
- package/dist/types/run/metadata.d.ts +2 -0
- package/dist/types/run/metadata.d.ts.map +1 -1
- package/dist/types/run/step.d.ts +2 -6
- package/dist/types/run/step.d.ts.map +1 -1
- package/dist/types/run/step.js.map +1 -1
- package/dist/types/run/store.d.ts +55 -2
- package/dist/types/run/store.d.ts.map +1 -1
- package/dist/types/sandbox/index.d.ts +47 -6
- package/dist/types/sandbox/index.d.ts.map +1 -1
- package/dist/types/sandbox/index.js +23 -10
- package/dist/types/sandbox/index.js.map +1 -1
- package/dist/types/session/store.d.ts +13 -0
- package/dist/types/session/store.d.ts.map +1 -1
- package/dist/types/tool/index.d.ts +33 -11
- package/dist/types/tool/index.d.ts.map +1 -1
- package/dist/types/tool/index.js.map +1 -1
- package/dist/types/topic/entity.d.ts +3 -4
- package/dist/types/topic/entity.d.ts.map +1 -1
- package/dist/types/topic/store.d.ts +3 -3
- package/dist/utils/id.d.ts +3 -1
- package/dist/utils/id.d.ts.map +1 -1
- package/dist/utils/id.js +4 -0
- package/dist/utils/id.js.map +1 -1
- package/dist/utils/process-environment.d.ts +26 -0
- package/dist/utils/process-environment.d.ts.map +1 -0
- package/dist/utils/process-environment.js +78 -0
- package/dist/utils/process-environment.js.map +1 -0
- package/dist/vault/InMemoryCredentialVault.d.ts +2 -0
- package/dist/vault/InMemoryCredentialVault.d.ts.map +1 -1
- package/dist/vault/InMemoryCredentialVault.js +24 -4
- package/dist/vault/InMemoryCredentialVault.js.map +1 -1
- package/dist/vault/instrumentation.d.ts.map +1 -1
- package/dist/vault/instrumentation.js +15 -0
- package/dist/vault/instrumentation.js.map +1 -1
- package/package.json +1 -1
- package/src/advisory/executor.ts +4 -1
- package/src/agents/ReactiveAgent.ts +12 -0
- package/src/agents/RouterAgent.ts +25 -3
- package/src/agents/SupervisorAgent.ts +33 -11
- package/src/agents/runAgent.ts +38 -2
- package/src/authorization/command-line.ts +390 -0
- package/src/authorization/rules.ts +22 -1
- package/src/bridge/a2a/client.ts +384 -97
- package/src/bridge/a2a/mapper.ts +5 -0
- package/src/bridge/acp/server.ts +184 -42
- package/src/bridge/mcp/connector/adapter.ts +28 -20
- package/src/bridge/sse/mapper.ts +3 -0
- package/src/compaction/dangling.ts +203 -38
- package/src/compaction/index.ts +9 -2
- package/src/compaction/manual.ts +125 -18
- package/src/compaction/plan.ts +42 -11
- package/src/compaction/retention.ts +23 -8
- package/src/compaction/summary.ts +4 -4
- package/src/compaction/verifier.ts +66 -0
- package/src/connector/BaseConnector.ts +19 -4
- package/src/connector/builtins/http.ts +236 -46
- package/src/connector/builtins/webhook.ts +207 -47
- package/src/connector/execution-contract.ts +27 -0
- package/src/connector/http-operation.ts +238 -0
- package/src/connector/mcp/adapter.ts +8 -3
- package/src/connector/mcp/client.ts +207 -58
- package/src/connector/mcp/http-sse.ts +91 -23
- package/src/connector/mcp/prompt-adapter.ts +8 -2
- package/src/connector/mcp/stdio.ts +21 -46
- package/src/connector/mcp/streamable-http.ts +86 -22
- package/src/connector/tools/adapter.ts +23 -14
- package/src/connector/tools/definitions.ts +5 -2
- package/src/connector/tools/result.ts +21 -0
- package/src/connector/web/guarded-fetch.ts +188 -48
- package/src/constants/sandbox/index.ts +3 -2
- package/src/contracts/api.ts +2 -0
- package/src/contracts/schemas.ts +7 -0
- package/src/directory/derive-supervisor.ts +8 -0
- package/src/directory/derive.ts +8 -0
- package/src/directory/load.ts +2 -0
- package/src/directory/types.ts +4 -0
- package/src/eval/experiment.ts +160 -111
- package/src/eval/judge.ts +13 -2
- package/src/eval/types.ts +7 -1
- package/src/manager/agent/lifecycle.ts +28 -12
- package/src/manager/connector/environment.ts +3 -1
- package/src/manager/connector/lifecycle.ts +364 -24
- package/src/manager/connector/tenant.ts +56 -23
- package/src/manager/goal/activation.ts +52 -0
- package/src/manager/index.ts +10 -2
- package/src/manager/run/persistence.ts +6 -1
- package/src/manager/topic/dependency.ts +39 -0
- package/src/manager/topic/lifecycle.ts +19 -31
- package/src/plugin/index.ts +1 -0
- package/src/plugin/lifecycle.ts +180 -39
- package/src/plugin/loader.ts +70 -13
- package/src/provider/collect-chat-completion.ts +3 -0
- package/src/provider/fallback.ts +79 -11
- package/src/provider/idle-timeout.ts +143 -17
- package/src/provider/index.ts +2 -0
- package/src/provider/instrumentation.ts +1 -0
- package/src/provider/retry.ts +16 -1
- package/src/public-runtime.ts +190 -32
- package/src/public-tools.ts +5 -0
- package/src/public-types.ts +85 -11
- package/src/rag/embedding.ts +147 -19
- package/src/rag/index.ts +1 -1
- package/src/rag/ingestion.ts +16 -2
- package/src/rag/knowledge-base.ts +13 -4
- package/src/rag/operation.ts +28 -0
- package/src/rag/rag-tool.ts +6 -3
- package/src/rag/retriever.ts +62 -11
- package/src/rag/vector-store.ts +8 -2
- package/src/registry/command/kernel-commands.ts +223 -4
- package/src/run/reporter.ts +10 -0
- package/src/run-query/index.ts +84 -15
- package/src/runtime/query/context.ts +13 -3
- package/src/runtime/query/executor.ts +90 -17
- package/src/runtime/query/guard.ts +12 -0
- package/src/runtime/query/index.ts +652 -103
- package/src/runtime/query/iteration/index.ts +89 -13
- package/src/runtime/query/iteration/phases/compaction.ts +120 -55
- package/src/runtime/query/iteration/phases/context.ts +4 -0
- package/src/runtime/query/iteration/phases/tool-review.ts +28 -0
- package/src/runtime/query/iteration/stream-turn.ts +3 -0
- package/src/runtime/query/project-instructions.ts +212 -0
- package/src/runtime/query/request-rich-content.ts +153 -0
- package/src/runtime/query/result.ts +12 -1
- package/src/runtime/query/resume-pending.ts +20 -18
- package/src/runtime/query/resume-run.ts +52 -8
- package/src/runtime/query/run-state.ts +11 -1
- package/src/runtime/query/sandbox-lifecycle.ts +210 -0
- package/src/sandbox/isolation.ts +9 -0
- package/src/sandbox/provider/local.ts +255 -90
- package/src/sandbox/terminal.ts +13 -5
- package/src/session/errors.ts +68 -42
- package/src/session/handoff/broadcast.ts +20 -14
- package/src/session/handoff/single.ts +14 -13
- package/src/store/attachment/index.ts +65 -3
- package/src/store/feedback/conformance.ts +39 -0
- package/src/store/feedback/disk.ts +128 -82
- package/src/store/goal/index.ts +594 -0
- package/src/store/index.ts +1 -1
- package/src/store/kv/revision-record-store.ts +346 -0
- package/src/store/memory/disk.ts +288 -113
- package/src/store/run/disk.ts +96 -5
- package/src/store/run/memory.ts +22 -2
- package/src/store/session/disk.ts +93 -6
- package/src/store/session/memory.ts +22 -0
- package/src/store/topic/memory.ts +4 -5
- package/src/store/topic/objective.ts +215 -100
- package/src/store/topic/state.ts +100 -63
- package/src/tools/builtins/bash.ts +21 -0
- package/src/tools/builtins/computer-use.ts +9 -1
- package/src/tools/builtins/content-fingerprint.ts +9 -12
- package/src/tools/builtins/edit.ts +190 -27
- package/src/tools/builtins/write-file.ts +55 -19
- package/src/tools/command-arguments.ts +54 -0
- package/src/tools/coordinator/index.ts +4 -1
- package/src/tools/defineTool.ts +11 -0
- package/src/tools/env-scrub.ts +7 -5
- package/src/tools/goal/index.ts +129 -0
- package/src/tools/memory/index.ts +26 -3
- package/src/tools/memory/search.ts +20 -3
- package/src/types/agent/base.ts +12 -3
- package/src/types/agent/factory.ts +2 -0
- package/src/types/agent/reactive.ts +2 -0
- package/src/types/agent/supervisor.ts +6 -0
- package/src/types/agent/task.ts +6 -2
- package/src/types/connector/core.ts +13 -8
- package/src/types/connector/definition.ts +54 -20
- package/src/types/connector/http.ts +7 -0
- package/src/types/connector/mcp.ts +27 -6
- package/src/types/connector/tenant.ts +21 -7
- package/src/types/connector/webhook.ts +7 -0
- package/src/types/goal/index.ts +50 -0
- package/src/types/ids/index.ts +2 -0
- package/src/types/message/index.ts +143 -9
- package/src/types/plugin/index.ts +7 -5
- package/src/types/provider/chat.ts +35 -4
- package/src/types/provider/interface.ts +22 -7
- package/src/types/provider/stream.ts +6 -0
- package/src/types/rag/embedding.ts +16 -2
- package/src/types/rag/ingestion.ts +2 -1
- package/src/types/rag/knowledge-base.ts +7 -3
- package/src/types/rag/retrieval.ts +2 -1
- package/src/types/rag/scope.ts +5 -0
- package/src/types/rag/vector.ts +5 -2
- package/src/types/run/config.ts +20 -0
- package/src/types/run/events.ts +28 -3
- package/src/types/run/metadata.ts +2 -0
- package/src/types/run/step.ts +2 -7
- package/src/types/run/store.ts +60 -2
- package/src/types/sandbox/index.ts +57 -14
- package/src/types/session/store.ts +18 -0
- package/src/types/tool/index.ts +33 -11
- package/src/types/topic/entity.ts +3 -4
- package/src/types/topic/store.ts +3 -3
- package/src/utils/id.ts +6 -0
- package/src/utils/process-environment.ts +101 -0
- package/src/vault/InMemoryCredentialVault.ts +29 -4
- package/src/vault/instrumentation.ts +24 -0
package/src/session/errors.ts
CHANGED
|
@@ -64,7 +64,10 @@ export class AncestryCycleError extends Error {
|
|
|
64
64
|
cyclePath: readonly SessionId[]
|
|
65
65
|
}
|
|
66
66
|
|
|
67
|
-
constructor(details: {
|
|
67
|
+
constructor(details: {
|
|
68
|
+
sessionId: SessionId
|
|
69
|
+
cyclePath: readonly SessionId[]
|
|
70
|
+
}) {
|
|
68
71
|
super(
|
|
69
72
|
`Ancestry cycle detected starting at ${details.sessionId}: ${details.cyclePath.join(' -> ')}`,
|
|
70
73
|
)
|
|
@@ -86,7 +89,11 @@ export class WorkspaceBackendError extends Error {
|
|
|
86
89
|
cause?: unknown
|
|
87
90
|
}
|
|
88
91
|
|
|
89
|
-
constructor(details: {
|
|
92
|
+
constructor(details: {
|
|
93
|
+
op: string
|
|
94
|
+
kind: WorkspaceBackendKind
|
|
95
|
+
cause?: unknown
|
|
96
|
+
}) {
|
|
90
97
|
super(`Workspace backend ${details.kind} failed on ${details.op}`)
|
|
91
98
|
this.name = 'WorkspaceBackendError'
|
|
92
99
|
this.details = details
|
|
@@ -94,24 +101,27 @@ export class WorkspaceBackendError extends Error {
|
|
|
94
101
|
}
|
|
95
102
|
|
|
96
103
|
/**
|
|
97
|
-
* Raised by {@link import('../types/
|
|
98
|
-
* when the supplied
|
|
99
|
-
*
|
|
100
|
-
*
|
|
101
|
-
* handoff CAS pattern (§6.1).
|
|
104
|
+
* Raised by {@link import('../types/topic/store.js').TopicStore.updateTopic}
|
|
105
|
+
* when the supplied Topic owner version does not match the persisted record.
|
|
106
|
+
* The caller re-reads the Topic, reapplies its intended mutation, and retries.
|
|
107
|
+
* Mirrors the Session handoff CAS pattern (§6.1).
|
|
102
108
|
*/
|
|
103
|
-
export class
|
|
109
|
+
export class StaleTopicError extends Error {
|
|
104
110
|
readonly details: {
|
|
105
|
-
|
|
111
|
+
topicId: TopicId
|
|
106
112
|
expectedVersion: number
|
|
107
113
|
actualVersion: number
|
|
108
114
|
}
|
|
109
115
|
|
|
110
|
-
constructor(details: {
|
|
116
|
+
constructor(details: {
|
|
117
|
+
topicId: TopicId
|
|
118
|
+
expectedVersion: number
|
|
119
|
+
actualVersion: number
|
|
120
|
+
}) {
|
|
111
121
|
super(
|
|
112
|
-
`Stale
|
|
122
|
+
`Stale Topic ${details.topicId}: expected ownerVersion=${details.expectedVersion}, actual=${details.actualVersion}`,
|
|
113
123
|
)
|
|
114
|
-
this.name = '
|
|
124
|
+
this.name = 'StaleTopicError'
|
|
115
125
|
this.details = details
|
|
116
126
|
}
|
|
117
127
|
}
|
|
@@ -119,8 +129,8 @@ export class StaleThreadError extends Error {
|
|
|
119
129
|
/**
|
|
120
130
|
* Raised when a Session write names a version the store no longer has.
|
|
121
131
|
*
|
|
122
|
-
* The sibling of {@link
|
|
123
|
-
*
|
|
132
|
+
* The sibling of {@link StaleTopicError}, and it arrived much later: Topic had
|
|
133
|
+
* a working compare-and-set from the start while `Session.ownerVersion`
|
|
124
134
|
* was documented as a CAS counter that nothing enforced. Two concurrent
|
|
125
135
|
* handoffs could both pass, both provision a worktree, and one silently erase
|
|
126
136
|
* the other.
|
|
@@ -136,7 +146,11 @@ export class StaleSessionError extends Error {
|
|
|
136
146
|
actualVersion: number
|
|
137
147
|
}
|
|
138
148
|
|
|
139
|
-
constructor(details: {
|
|
149
|
+
constructor(details: {
|
|
150
|
+
sessionId: SessionId
|
|
151
|
+
expectedVersion: number
|
|
152
|
+
actualVersion: number
|
|
153
|
+
}) {
|
|
140
154
|
super(
|
|
141
155
|
`Stale Session ${details.sessionId}: expected ownerVersion=${details.expectedVersion}, actual=${details.actualVersion}. Another writer took ownership; re-read the session before retrying.`,
|
|
142
156
|
)
|
|
@@ -146,65 +160,71 @@ export class StaleSessionError extends Error {
|
|
|
146
160
|
}
|
|
147
161
|
|
|
148
162
|
/**
|
|
149
|
-
* Raised by the spawn path (and any caller that enforces the open-
|
|
150
|
-
* precondition) when a
|
|
151
|
-
*
|
|
152
|
-
*
|
|
163
|
+
* Raised by the spawn path (and any caller that enforces the open-Topic
|
|
164
|
+
* precondition) when a Topic is archived and a mutation requires it to be
|
|
165
|
+
* open. Convention #5: deny-by-default — archival is a hard read-only
|
|
166
|
+
* boundary.
|
|
153
167
|
*/
|
|
154
|
-
export class
|
|
168
|
+
export class TopicArchivedError extends Error {
|
|
155
169
|
readonly details: {
|
|
156
|
-
|
|
170
|
+
topicId: TopicId
|
|
157
171
|
op: string
|
|
158
172
|
}
|
|
159
173
|
|
|
160
|
-
constructor(details: {
|
|
161
|
-
super(`
|
|
162
|
-
this.name = '
|
|
174
|
+
constructor(details: { topicId: TopicId; op: string }) {
|
|
175
|
+
super(`Topic ${details.topicId} is archived; operation '${details.op}' rejected`)
|
|
176
|
+
this.name = 'TopicArchivedError'
|
|
163
177
|
this.details = details
|
|
164
178
|
}
|
|
165
179
|
}
|
|
166
180
|
|
|
167
181
|
/**
|
|
168
182
|
* Raised by {@link import('../manager/topic/lifecycle.js').TopicManager.archive}
|
|
169
|
-
* and `.delete` when the
|
|
183
|
+
* and `.delete` when the Topic's session-presence precondition is violated:
|
|
170
184
|
*
|
|
171
|
-
* - `op: 'archive'` — at least one Session under the
|
|
185
|
+
* - `op: 'archive'` — at least one Session under the Topic is in a
|
|
172
186
|
* non-terminal state (`active | locked | awaiting_hitl | awaiting_merge`).
|
|
173
187
|
* The caller must first quiesce those sessions (let them reach `idle`,
|
|
174
|
-
* `failed`, or `archived`) before flipping the
|
|
175
|
-
* - `op: 'delete'` — the
|
|
188
|
+
* `failed`, or `archived`) before flipping the Topic to archived.
|
|
189
|
+
* - `op: 'delete'` — the Topic still has at least one attached Session.
|
|
176
190
|
* Callers must either archive + tombstone those sessions (`deleteSession`)
|
|
177
|
-
* before calling `
|
|
191
|
+
* before calling `deleteTopic`, or accept that deletion is not yet safe.
|
|
178
192
|
*
|
|
179
|
-
* `blockingSessions` carries the first {@link
|
|
193
|
+
* `blockingSessions` carries the first {@link TOPIC_NOT_EMPTY_SAMPLE_LIMIT}
|
|
180
194
|
* offenders with their current status so operator tooling can surface an
|
|
181
|
-
* actionable list without unbounded error payloads on large
|
|
195
|
+
* actionable list without unbounded error payloads on large topics.
|
|
182
196
|
* `totalBlockingSessions` holds the full count even when the sample is
|
|
183
197
|
* truncated. Convention #5: deny-by-default — no implicit cascade, no silent
|
|
184
198
|
* no-op.
|
|
185
199
|
*/
|
|
186
|
-
export const
|
|
200
|
+
export const TOPIC_NOT_EMPTY_SAMPLE_LIMIT = 50
|
|
187
201
|
|
|
188
|
-
export class
|
|
202
|
+
export class TopicNotEmptyError extends Error {
|
|
189
203
|
readonly details: {
|
|
190
|
-
|
|
204
|
+
topicId: TopicId
|
|
191
205
|
tenantId: TenantId
|
|
192
206
|
op: 'archive' | 'delete'
|
|
193
|
-
blockingSessions: ReadonlyArray<{
|
|
207
|
+
blockingSessions: ReadonlyArray<{
|
|
208
|
+
sessionId: SessionId
|
|
209
|
+
status: SessionStatus
|
|
210
|
+
}>
|
|
194
211
|
totalBlockingSessions: number
|
|
195
212
|
}
|
|
196
213
|
|
|
197
214
|
constructor(details: {
|
|
198
|
-
|
|
215
|
+
topicId: TopicId
|
|
199
216
|
tenantId: TenantId
|
|
200
217
|
op: 'archive' | 'delete'
|
|
201
|
-
blockingSessions: ReadonlyArray<{
|
|
218
|
+
blockingSessions: ReadonlyArray<{
|
|
219
|
+
sessionId: SessionId
|
|
220
|
+
status: SessionStatus
|
|
221
|
+
}>
|
|
202
222
|
totalBlockingSessions: number
|
|
203
223
|
}) {
|
|
204
224
|
super(
|
|
205
|
-
`
|
|
225
|
+
`Topic ${details.topicId} ${details.op} blocked: ${details.totalBlockingSessions} session(s) still attached`,
|
|
206
226
|
)
|
|
207
|
-
this.name = '
|
|
227
|
+
this.name = 'TopicNotEmptyError'
|
|
208
228
|
this.details = details
|
|
209
229
|
}
|
|
210
230
|
}
|
|
@@ -212,7 +232,7 @@ export class ThreadNotEmptyError extends Error {
|
|
|
212
232
|
/**
|
|
213
233
|
* Raised when an ingress path is asked to attach work to an archived Project.
|
|
214
234
|
*
|
|
215
|
-
* The sibling of {@link
|
|
235
|
+
* The sibling of {@link TopicArchivedError}, on the level that survives. A
|
|
216
236
|
* closed workspace is a decision by its owner, and the paths that create
|
|
217
237
|
* sessions have to be able to see it — otherwise "archived" is a word in a
|
|
218
238
|
* listing rather than a state of the system.
|
|
@@ -247,7 +267,10 @@ export class ProjectNotEmptyError extends Error {
|
|
|
247
267
|
projectId: ProjectId
|
|
248
268
|
tenantId: TenantId
|
|
249
269
|
op: 'archive'
|
|
250
|
-
blockingSessions: ReadonlyArray<{
|
|
270
|
+
blockingSessions: ReadonlyArray<{
|
|
271
|
+
sessionId: SessionId
|
|
272
|
+
status: SessionStatus
|
|
273
|
+
}>
|
|
251
274
|
totalBlockingSessions: number
|
|
252
275
|
}
|
|
253
276
|
|
|
@@ -255,7 +278,10 @@ export class ProjectNotEmptyError extends Error {
|
|
|
255
278
|
projectId: ProjectId
|
|
256
279
|
tenantId: TenantId
|
|
257
280
|
op: 'archive'
|
|
258
|
-
blockingSessions: ReadonlyArray<{
|
|
281
|
+
blockingSessions: ReadonlyArray<{
|
|
282
|
+
sessionId: SessionId
|
|
283
|
+
status: SessionStatus
|
|
284
|
+
}>
|
|
259
285
|
totalBlockingSessions: number
|
|
260
286
|
}) {
|
|
261
287
|
super(
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
*/
|
|
23
23
|
|
|
24
24
|
import { requireOpenProject } from '../../manager/project/lifecycle.js'
|
|
25
|
-
import type
|
|
25
|
+
import { type TopicManagerDependency, resolveTopicManager } from '../../manager/topic/dependency.js'
|
|
26
26
|
import type { SessionId, TenantId } from '../../types/ids/index.js'
|
|
27
27
|
import type { Session } from '../../types/session/entity.js'
|
|
28
28
|
import type { SubSessionId } from '../../types/session/ids.js'
|
|
@@ -37,7 +37,7 @@ import type { HandoffEventSink } from './events.js'
|
|
|
37
37
|
import type { RunStatusResolver } from './single.js'
|
|
38
38
|
import { HandoffLockRejected, HandoffVersionConflict } from './version.js'
|
|
39
39
|
|
|
40
|
-
|
|
40
|
+
interface BroadcastHandoffBaseDeps {
|
|
41
41
|
store: SessionStore
|
|
42
42
|
workspaceRegistry: WorkspaceBackendRegistry
|
|
43
43
|
capacity: CapacityValidator
|
|
@@ -47,14 +47,11 @@ export interface BroadcastHandoffDeps {
|
|
|
47
47
|
* that used to stand in here reported every session unblocked.
|
|
48
48
|
*/
|
|
49
49
|
runStatus: RunStatusResolver
|
|
50
|
-
/**
|
|
51
|
-
* Gate every recipient-session creation on the Thread being `'open'`.
|
|
52
|
-
* Added in Phase 2.6; checked once per broadcast (all recipients share
|
|
53
|
-
* a threadId by the fan-out invariant validated above).
|
|
54
|
-
*/
|
|
55
|
-
threadManager: TopicManager
|
|
56
50
|
}
|
|
57
51
|
|
|
52
|
+
/** Dependencies for a multi-recipient handoff. */
|
|
53
|
+
export type BroadcastHandoffDeps = BroadcastHandoffBaseDeps & TopicManagerDependency
|
|
54
|
+
|
|
58
55
|
/**
|
|
59
56
|
* Per-recipient partial state tracked during fan-out so rollback can
|
|
60
57
|
* compensate exactly what was created. `subSessionId` is populated at the
|
|
@@ -145,11 +142,11 @@ export async function executeBroadcastHandoff(
|
|
|
145
142
|
seen.add(key)
|
|
146
143
|
}
|
|
147
144
|
|
|
148
|
-
//
|
|
149
|
-
// archived
|
|
145
|
+
// Topic archive gate (Phase 2.6) — runs BEFORE source load/capacity so an
|
|
146
|
+
// archived Topic fails fastest with `TopicArchivedError`. All assignments
|
|
150
147
|
// share `topicId` by the shape validation above. Runs BEFORE the CAS
|
|
151
148
|
// lock so a denied fan-out leaves the source session untouched.
|
|
152
|
-
await deps.
|
|
149
|
+
await resolveTopicManager(deps).requireOpen(first.topicId, tenantId)
|
|
153
150
|
|
|
154
151
|
// 3. Load source + tenant check.
|
|
155
152
|
const source = await deps.store.getSession(first.sourceSessionId, tenantId)
|
|
@@ -190,7 +187,10 @@ export async function executeBroadcastHandoff(
|
|
|
190
187
|
const runResolver = deps.runStatus
|
|
191
188
|
const blocking = await runResolver.blockingRun(source.id, tenantId)
|
|
192
189
|
if (blocking) {
|
|
193
|
-
throw new HandoffLockRejected({
|
|
190
|
+
throw new HandoffLockRejected({
|
|
191
|
+
sessionId: source.id,
|
|
192
|
+
reason: blocking.reason,
|
|
193
|
+
})
|
|
194
194
|
}
|
|
195
195
|
|
|
196
196
|
// 6. Capacity — width + depth. Width covers N new children in one shot
|
|
@@ -218,7 +218,11 @@ export async function executeBroadcastHandoff(
|
|
|
218
218
|
// the lock at the version it read left the locked window invisible, so a
|
|
219
219
|
// second broadcast holding the same snapshot passed the check above and
|
|
220
220
|
// fanned out over a session that was already locked.
|
|
221
|
-
const locked: Session = {
|
|
221
|
+
const locked: Session = {
|
|
222
|
+
...source,
|
|
223
|
+
status: 'locked',
|
|
224
|
+
ownerVersion: source.ownerVersion + 1,
|
|
225
|
+
}
|
|
222
226
|
await deps.store.updateSession(locked, tenantId, first.expectedOwnerVersion)
|
|
223
227
|
emit(deps.events.onLocked, { sessionId: source.id, at: new Date() })
|
|
224
228
|
|
|
@@ -244,7 +248,9 @@ export async function executeBroadcastHandoff(
|
|
|
244
248
|
}
|
|
245
249
|
partials.push(partial)
|
|
246
250
|
|
|
247
|
-
partial.workspace = await driver.create({
|
|
251
|
+
partial.workspace = await driver.create({
|
|
252
|
+
label: `broadcast-${assignment.id}`,
|
|
253
|
+
})
|
|
248
254
|
worktreesProvisioned += 1
|
|
249
255
|
|
|
250
256
|
const childSession = await deps.store.createSession(
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
*/
|
|
22
22
|
|
|
23
23
|
import { requireOpenProject } from '../../manager/project/lifecycle.js'
|
|
24
|
-
import type
|
|
24
|
+
import { type TopicManagerDependency, resolveTopicManager } from '../../manager/topic/dependency.js'
|
|
25
25
|
import type { SessionId, TenantId } from '../../types/ids/index.js'
|
|
26
26
|
import type { Session } from '../../types/session/entity.js'
|
|
27
27
|
import type { SessionStore } from '../../types/session/store.js'
|
|
@@ -50,10 +50,12 @@ export interface RunStatusResolver {
|
|
|
50
50
|
blockingRun(
|
|
51
51
|
sessionId: SessionId,
|
|
52
52
|
tenantId: TenantId,
|
|
53
|
-
): Promise<{
|
|
53
|
+
): Promise<{
|
|
54
|
+
reason: 'active_run' | 'pending_hitl' | 'pending_subsession'
|
|
55
|
+
} | null>
|
|
54
56
|
}
|
|
55
57
|
|
|
56
|
-
|
|
58
|
+
interface SingleHandoffBaseDeps {
|
|
57
59
|
store: SessionStore
|
|
58
60
|
workspaceRegistry: WorkspaceBackendRegistry
|
|
59
61
|
capacity: CapacityValidator
|
|
@@ -65,14 +67,11 @@ export interface SingleHandoffDeps {
|
|
|
65
67
|
* fail dressed as a check that ran.
|
|
66
68
|
*/
|
|
67
69
|
runStatus: RunStatusResolver
|
|
68
|
-
/**
|
|
69
|
-
* Gate the recipient-session creation on the Topic being `'open'`.
|
|
70
|
-
* Added in Phase 2.6 to mirror spawn — a handoff into an archived
|
|
71
|
-
* Topic would otherwise undermine `TopicManager.archive`.
|
|
72
|
-
*/
|
|
73
|
-
threadManager: TopicManager
|
|
74
70
|
}
|
|
75
71
|
|
|
72
|
+
/** Dependencies for a single-recipient handoff. */
|
|
73
|
+
export type SingleHandoffDeps = SingleHandoffBaseDeps & TopicManagerDependency
|
|
74
|
+
|
|
76
75
|
/**
|
|
77
76
|
* Executes a single-recipient handoff against `deps.store`. Throws
|
|
78
77
|
* {@link HandoffLockRejected}, {@link HandoffVersionConflict},
|
|
@@ -92,11 +91,11 @@ export async function executeSingleHandoff(
|
|
|
92
91
|
})
|
|
93
92
|
}
|
|
94
93
|
|
|
95
|
-
//
|
|
96
|
-
// fails fastest with `
|
|
94
|
+
// Topic archive gate (Phase 2.6) — runs FIRST so an archived Topic
|
|
95
|
+
// fails fastest with `TopicArchivedError` rather than a lock rejection or
|
|
97
96
|
// capacity error. Checked BEFORE the CAS lock so a denied handoff leaves
|
|
98
97
|
// the source session untouched.
|
|
99
|
-
await deps.
|
|
98
|
+
await resolveTopicManager(deps).requireOpen(assignment.topicId, tenantId)
|
|
100
99
|
|
|
101
100
|
// 1. Load source session + tenant check.
|
|
102
101
|
const source = await deps.store.getSession(assignment.sourceSessionId, tenantId)
|
|
@@ -185,7 +184,9 @@ export async function executeSingleHandoff(
|
|
|
185
184
|
let createdSessionId: SessionId | null = null
|
|
186
185
|
try {
|
|
187
186
|
const driver: WorkspaceBackendDriver = deps.workspaceRegistry.get('git-worktree')
|
|
188
|
-
provisionedWorkspace = await driver.create({
|
|
187
|
+
provisionedWorkspace = await driver.create({
|
|
188
|
+
label: `handoff-${assignment.id}`,
|
|
189
|
+
})
|
|
189
190
|
|
|
190
191
|
const recipientSession = await deps.store.createSession(
|
|
191
192
|
{
|
|
@@ -51,6 +51,15 @@ export interface StoredBytes {
|
|
|
51
51
|
readonly mediaType: string
|
|
52
52
|
}
|
|
53
53
|
|
|
54
|
+
/** Authority owned by the public operation resolving stored bytes. */
|
|
55
|
+
export interface AttachmentOperationOptions {
|
|
56
|
+
/**
|
|
57
|
+
* A pre-aborted signal starts no store work. Implementations should use it
|
|
58
|
+
* to stop their own I/O; the SDK also stops awaiting a store that ignores it.
|
|
59
|
+
*/
|
|
60
|
+
readonly signal?: AbortSignal
|
|
61
|
+
}
|
|
62
|
+
|
|
54
63
|
export interface AttachmentStore {
|
|
55
64
|
/**
|
|
56
65
|
* Take bytes, return a ref.
|
|
@@ -60,7 +69,7 @@ export interface AttachmentStore {
|
|
|
60
69
|
*/
|
|
61
70
|
put(bytes: StoredBytes): Promise<string>
|
|
62
71
|
/** `undefined` for a ref this store does not hold. */
|
|
63
|
-
get(ref: string): Promise<StoredBytes | undefined>
|
|
72
|
+
get(ref: string, options?: AttachmentOperationOptions): Promise<StoredBytes | undefined>
|
|
64
73
|
}
|
|
65
74
|
|
|
66
75
|
/** A reference nothing could resolve. */
|
|
@@ -117,11 +126,20 @@ export const isStoredAttachment = (
|
|
|
117
126
|
export async function resolveAttachment(
|
|
118
127
|
attachment: MessageAttachment,
|
|
119
128
|
store: AttachmentStore | undefined,
|
|
129
|
+
options: AttachmentOperationOptions = {},
|
|
120
130
|
): Promise<MessageAttachment> {
|
|
131
|
+
const { signal } = options
|
|
132
|
+
signal?.throwIfAborted()
|
|
121
133
|
if (!isStoredAttachment(attachment)) return attachment
|
|
122
134
|
if (!store) throw new NoAttachmentStoreError({ ref: attachment.ref })
|
|
123
135
|
|
|
124
|
-
const bytes = await
|
|
136
|
+
const bytes = await awaitStoreRead(signal, () =>
|
|
137
|
+
signal ? store.get(attachment.ref, { signal }) : store.get(attachment.ref),
|
|
138
|
+
)
|
|
139
|
+
// A store completion can win its promise reaction and remove the abort
|
|
140
|
+
// listener immediately before an already-queued abort. Publication is a
|
|
141
|
+
// second authority boundary, so fence it independently.
|
|
142
|
+
signal?.throwIfAborted()
|
|
125
143
|
if (!bytes) throw new AttachmentNotFoundError({ ref: attachment.ref })
|
|
126
144
|
|
|
127
145
|
if (bytes.mediaType !== attachment.mediaType) {
|
|
@@ -159,7 +177,9 @@ export async function resolveAttachment(
|
|
|
159
177
|
export async function resolveAttachments(
|
|
160
178
|
messages: readonly Message[],
|
|
161
179
|
store: AttachmentStore | undefined,
|
|
180
|
+
options: AttachmentOperationOptions = {},
|
|
162
181
|
): Promise<readonly Message[]> {
|
|
182
|
+
options.signal?.throwIfAborted()
|
|
163
183
|
// `Message` rather than a structural constraint: only some members of
|
|
164
184
|
// the union carry `attachments`, and a structural bound over a union
|
|
165
185
|
// like that is not assignable in either direction. Naming the real type
|
|
@@ -175,8 +195,50 @@ export async function resolveAttachments(
|
|
|
175
195
|
if (!attachments?.some(isStoredAttachment)) return message
|
|
176
196
|
return {
|
|
177
197
|
...message,
|
|
178
|
-
attachments: await Promise.all(
|
|
198
|
+
attachments: await Promise.all(
|
|
199
|
+
attachments.map((attachment) => resolveAttachment(attachment, store, options)),
|
|
200
|
+
),
|
|
179
201
|
}
|
|
180
202
|
}),
|
|
181
203
|
)
|
|
182
204
|
}
|
|
205
|
+
|
|
206
|
+
/**
|
|
207
|
+
* Await a host store without handing it ownership of run cancellation.
|
|
208
|
+
*
|
|
209
|
+
* Forwarding the signal is cooperative cleanup; this race is the public
|
|
210
|
+
* liveness boundary when a remote or custom store ignores it. The first cause
|
|
211
|
+
* wins, and late store completion has no route back into the returned value.
|
|
212
|
+
*/
|
|
213
|
+
async function awaitStoreRead<T>(
|
|
214
|
+
signal: AbortSignal | undefined,
|
|
215
|
+
start: () => Promise<T>,
|
|
216
|
+
): Promise<T> {
|
|
217
|
+
if (!signal) return await start()
|
|
218
|
+
signal.throwIfAborted()
|
|
219
|
+
|
|
220
|
+
return new Promise<T>((resolve, reject) => {
|
|
221
|
+
let settled = false
|
|
222
|
+
const cleanup = (): void => signal.removeEventListener('abort', onAbort)
|
|
223
|
+
const rejectOnce = (reason: unknown): void => {
|
|
224
|
+
if (settled) return
|
|
225
|
+
settled = true
|
|
226
|
+
cleanup()
|
|
227
|
+
reject(reason)
|
|
228
|
+
}
|
|
229
|
+
const resolveOnce = (value: T): void => {
|
|
230
|
+
if (settled) return
|
|
231
|
+
settled = true
|
|
232
|
+
cleanup()
|
|
233
|
+
resolve(value)
|
|
234
|
+
}
|
|
235
|
+
const onAbort = (): void => rejectOnce(signal.reason)
|
|
236
|
+
|
|
237
|
+
signal.addEventListener('abort', onAbort, { once: true })
|
|
238
|
+
try {
|
|
239
|
+
Promise.resolve(start()).then(resolveOnce, rejectOnce)
|
|
240
|
+
} catch (error) {
|
|
241
|
+
rejectOnce(error)
|
|
242
|
+
}
|
|
243
|
+
})
|
|
244
|
+
}
|
|
@@ -122,6 +122,45 @@ export function defineMessageFeedbackConformance(options: FeedbackConformanceOpt
|
|
|
122
122
|
expect(listed[0]?.ownerVersion).toBe(1)
|
|
123
123
|
})
|
|
124
124
|
|
|
125
|
+
it('lets exactly one of two racing updates advance a stored version', async () => {
|
|
126
|
+
const { store, runId, knownMessageId } = await makeStore()
|
|
127
|
+
await store.putMessageFeedback({
|
|
128
|
+
runId,
|
|
129
|
+
messageId: knownMessageId,
|
|
130
|
+
rating: 'good',
|
|
131
|
+
expectedVersion: 0,
|
|
132
|
+
})
|
|
133
|
+
|
|
134
|
+
const attempts = [
|
|
135
|
+
{ rating: 'good' as const, note: 'writer-a' },
|
|
136
|
+
{ rating: 'bad' as const, note: 'writer-b' },
|
|
137
|
+
].map((candidate) =>
|
|
138
|
+
store
|
|
139
|
+
.putMessageFeedback({
|
|
140
|
+
runId,
|
|
141
|
+
messageId: knownMessageId,
|
|
142
|
+
...candidate,
|
|
143
|
+
expectedVersion: 1,
|
|
144
|
+
})
|
|
145
|
+
.then(
|
|
146
|
+
(record) => ({ kind: 'ok' as const, record }),
|
|
147
|
+
() => ({ kind: 'refused' as const }),
|
|
148
|
+
),
|
|
149
|
+
)
|
|
150
|
+
const outcomes = await Promise.all(attempts)
|
|
151
|
+
const winners = outcomes.filter((outcome) => outcome.kind === 'ok')
|
|
152
|
+
|
|
153
|
+
expect(winners).toHaveLength(1)
|
|
154
|
+
expect(outcomes.filter((outcome) => outcome.kind === 'refused')).toHaveLength(1)
|
|
155
|
+
const winner = winners[0]
|
|
156
|
+
if (winner?.kind !== 'ok') throw new Error('expected one feedback update winner')
|
|
157
|
+
const listed = await store.listMessageFeedback({ runId })
|
|
158
|
+
expect(listed).toHaveLength(1)
|
|
159
|
+
expect(listed[0]?.ownerVersion).toBe(2)
|
|
160
|
+
expect(listed[0]?.rating).toBe(winner.record.rating)
|
|
161
|
+
expect(listed[0]?.note).toBe(winner.record.note)
|
|
162
|
+
})
|
|
163
|
+
|
|
125
164
|
it('advances the version on a correct update', async () => {
|
|
126
165
|
const { store, runId, knownMessageId } = await makeStore()
|
|
127
166
|
await store.putMessageFeedback({
|