@namzu/sdk 30.1.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 +576 -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 +7 -0
- package/dist/provider/collect-chat-completion.d.ts.map +1 -1
- package/dist/provider/collect-chat-completion.js +35 -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/pricing/rates.source.json +315 -204
- package/src/provider/collect-chat-completion.ts +36 -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/provider/fallback.ts
CHANGED
|
@@ -23,7 +23,13 @@
|
|
|
23
23
|
|
|
24
24
|
import { GENAI } from '../constants/telemetry/index.js'
|
|
25
25
|
import { classifyProviderError, isAbortError } from '../types/provider/errors.js'
|
|
26
|
-
import type {
|
|
26
|
+
import type {
|
|
27
|
+
ChatCompletionParams,
|
|
28
|
+
LLMProvider,
|
|
29
|
+
ReasoningEffort,
|
|
30
|
+
StreamChunk,
|
|
31
|
+
ThinkingConfig,
|
|
32
|
+
} from '../types/provider/index.js'
|
|
27
33
|
import type { Logger } from '../utils/logger.js'
|
|
28
34
|
|
|
29
35
|
/**
|
|
@@ -211,6 +217,42 @@ function isOutputChunk(chunk: StreamChunk): boolean {
|
|
|
211
217
|
)
|
|
212
218
|
}
|
|
213
219
|
|
|
220
|
+
/** Read one member's canonical menu, adapting the one-release legacy member. */
|
|
221
|
+
function memberReasoningEffortLevels(
|
|
222
|
+
member: ProviderChainMember,
|
|
223
|
+
requestModel: string,
|
|
224
|
+
thinking?: ThinkingConfig,
|
|
225
|
+
): readonly ReasoningEffort[] | undefined {
|
|
226
|
+
const model = member.model ?? requestModel
|
|
227
|
+
if (member.provider.reasoningEffortLevelsFor) {
|
|
228
|
+
return member.provider.reasoningEffortLevelsFor(model, thinking)
|
|
229
|
+
}
|
|
230
|
+
return member.provider.effortLevelsFor?.(model, thinking)
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
/**
|
|
234
|
+
* The levels one request may carry safely through every member it can reach.
|
|
235
|
+
*
|
|
236
|
+
* `ChatCompletionParams.effort` survives a fallback swap unchanged. A menu
|
|
237
|
+
* copied from the head can therefore offer a value the tail rejects, turning
|
|
238
|
+
* recovery into a second request failure. Preserve the head's ordering while
|
|
239
|
+
* intersecting every member's exact, member-model-specific answer. One unknown
|
|
240
|
+
* answer makes the chain unknown; an explicit empty/no-common answer is `[]`.
|
|
241
|
+
*/
|
|
242
|
+
function commonReasoningEffortLevels(
|
|
243
|
+
members: readonly ProviderChainMember[],
|
|
244
|
+
requestModel: string,
|
|
245
|
+
thinking?: ThinkingConfig,
|
|
246
|
+
): readonly ReasoningEffort[] | undefined {
|
|
247
|
+
let common: readonly ReasoningEffort[] | undefined
|
|
248
|
+
for (const member of members) {
|
|
249
|
+
const offered = memberReasoningEffortLevels(member, requestModel, thinking)
|
|
250
|
+
if (offered === undefined) return undefined
|
|
251
|
+
common = common === undefined ? [...offered] : common.filter((level) => offered.includes(level))
|
|
252
|
+
}
|
|
253
|
+
return common ?? []
|
|
254
|
+
}
|
|
255
|
+
|
|
214
256
|
/**
|
|
215
257
|
* Wrap an ordered chain so a member that cannot serve is replaced in place.
|
|
216
258
|
*
|
|
@@ -254,7 +296,9 @@ function isOutputChunk(chunk: StreamChunk): boolean {
|
|
|
254
296
|
* whose members disagree before ever building one (`@namzu/cli` does, and only
|
|
255
297
|
* runs a mismatched chain when the operator has said so explicitly). Taking the
|
|
256
298
|
* intersection here instead would cost the primary a capability on every run to
|
|
257
|
-
* guard against a failure that happens rarely.
|
|
299
|
+
* guard against a failure that happens rarely. Reasoning effort is the deliberate
|
|
300
|
+
* exception: the SAME field is replayed unchanged after a swap, so only a common
|
|
301
|
+
* level can be truthfully offered before the request.
|
|
258
302
|
*/
|
|
259
303
|
export function withProviderFallback(
|
|
260
304
|
members: readonly ProviderChainMember[],
|
|
@@ -302,7 +346,20 @@ export function withProviderFallback(
|
|
|
302
346
|
})
|
|
303
347
|
}
|
|
304
348
|
|
|
305
|
-
const
|
|
349
|
+
const targetModel = member.model ?? params.model
|
|
350
|
+
// Route identity is stamped at the final member dispatch, not only by
|
|
351
|
+
// query's initial head request. A fallback may share a provider id/model
|
|
352
|
+
// with another member while using different credentials or a different
|
|
353
|
+
// endpoint; `chainIndex` is what keeps their native replay state apart.
|
|
354
|
+
const request: ChatCompletionParams = {
|
|
355
|
+
...params,
|
|
356
|
+
model: targetModel,
|
|
357
|
+
providerRoute: {
|
|
358
|
+
providerId: member.provider.id,
|
|
359
|
+
model: targetModel,
|
|
360
|
+
chainIndex: cursor,
|
|
361
|
+
},
|
|
362
|
+
}
|
|
306
363
|
let produced = false
|
|
307
364
|
try {
|
|
308
365
|
for await (const chunk of member.provider.chatStream(request)) {
|
|
@@ -382,7 +439,16 @@ export function withProviderFallback(
|
|
|
382
439
|
return first.provider.capabilities
|
|
383
440
|
},
|
|
384
441
|
chatStream,
|
|
385
|
-
...(first.provider.listModels
|
|
442
|
+
...(first.provider.listModels
|
|
443
|
+
? {
|
|
444
|
+
listModels: (signal?: AbortSignal) => first.provider.listModels?.(signal),
|
|
445
|
+
}
|
|
446
|
+
: {}),
|
|
447
|
+
...(first.provider.probeCredential
|
|
448
|
+
? {
|
|
449
|
+
probeCredential: (signal?: AbortSignal) => first.provider.probeCredential?.(signal),
|
|
450
|
+
}
|
|
451
|
+
: {}),
|
|
386
452
|
// Forwarded for the reason `retry.ts` forwards it: a wrapper that drops
|
|
387
453
|
// the model turns a probe the caller could answer into one it cannot.
|
|
388
454
|
...(first.provider.healthCheck
|
|
@@ -391,13 +457,15 @@ export function withProviderFallback(
|
|
|
391
457
|
...(first.provider.doctorCheck
|
|
392
458
|
? { doctorCheck: (model?: string) => first.provider.doctorCheck?.(model) }
|
|
393
459
|
: {}),
|
|
394
|
-
//
|
|
395
|
-
//
|
|
396
|
-
//
|
|
397
|
-
//
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
//
|
|
460
|
+
// Unlike the legacy head-only member below, this is a declaration about
|
|
461
|
+
// the request that may actually traverse the whole chain. The method is
|
|
462
|
+
// always present on a multi-member wrapper: `undefined` is its honest
|
|
463
|
+
// answer when any member cannot enumerate its selected model.
|
|
464
|
+
reasoningEffortLevelsFor: (model: string, thinking?: ThinkingConfig) =>
|
|
465
|
+
commonReasoningEffortLevels(members, model, thinking),
|
|
466
|
+
// Compatibility projection only. Existing consumers of the deprecated
|
|
467
|
+
// member keep the head-only answer they had; new consumers use the
|
|
468
|
+
// canonical chain-aware member above.
|
|
401
469
|
...(first.provider.effortLevelsFor
|
|
402
470
|
? {
|
|
403
471
|
effortLevelsFor: (
|
|
@@ -3,6 +3,22 @@ import type { LLMProvider } from '../types/provider/interface.js'
|
|
|
3
3
|
import type { Logger } from '../utils/logger.js'
|
|
4
4
|
import { ProviderRequestError } from './errors.js'
|
|
5
5
|
|
|
6
|
+
/** Five minutes without one provider chunk is a stalled model call. */
|
|
7
|
+
export const DEFAULT_STREAM_IDLE_TIMEOUT_MS = 5 * 60_000
|
|
8
|
+
|
|
9
|
+
const MAX_TIMER_DELAY_MS = 2_147_483_647
|
|
10
|
+
|
|
11
|
+
/** Resolve the shared run/router stream bound before either creates durable run identity. */
|
|
12
|
+
export function resolveStreamIdleTimeoutMs(value: number | undefined): number {
|
|
13
|
+
const resolved = value ?? DEFAULT_STREAM_IDLE_TIMEOUT_MS
|
|
14
|
+
if (!Number.isInteger(resolved) || resolved < 0 || resolved > MAX_TIMER_DELAY_MS) {
|
|
15
|
+
throw new RangeError(
|
|
16
|
+
`streamIdleTimeoutMs must be an integer from 0 to ${MAX_TIMER_DELAY_MS}; received ${String(resolved)}`,
|
|
17
|
+
)
|
|
18
|
+
}
|
|
19
|
+
return resolved
|
|
20
|
+
}
|
|
21
|
+
|
|
6
22
|
/**
|
|
7
23
|
* Notices a stream that stopped producing without ending.
|
|
8
24
|
*
|
|
@@ -62,26 +78,77 @@ export function withStreamIdleTimeout(
|
|
|
62
78
|
const disarm = options.clearTimeoutFn ?? clearTimeout
|
|
63
79
|
|
|
64
80
|
async function* chatStream(params: ChatCompletionParams): AsyncIterable<StreamChunk> {
|
|
65
|
-
const
|
|
81
|
+
const callerSignal = params.signal
|
|
82
|
+
callerSignal?.throwIfAborted()
|
|
83
|
+
|
|
84
|
+
// Do not abort the caller's controller. The watchdog owns this transport
|
|
85
|
+
// signal and fuses the caller's stop into it in the one safe direction.
|
|
86
|
+
// Keeping it stable for the whole stream is important: drivers attach one
|
|
87
|
+
// listener when the request opens and expect that signal to remain the
|
|
88
|
+
// request's cancellation identity until the socket closes.
|
|
89
|
+
const transportAbort = new AbortController()
|
|
90
|
+
type TerminalCause =
|
|
91
|
+
| { readonly kind: 'caller'; readonly reason: unknown }
|
|
92
|
+
| { readonly kind: 'idle'; readonly error: ProviderRequestError }
|
|
93
|
+
let terminalCause: TerminalCause | undefined
|
|
94
|
+
let rejectCallerAbort: ((reason?: unknown) => void) | undefined
|
|
95
|
+
const callerAbort = callerSignal
|
|
96
|
+
? new Promise<never>((_resolve, reject) => {
|
|
97
|
+
rejectCallerAbort = reject
|
|
98
|
+
})
|
|
99
|
+
: undefined
|
|
100
|
+
const onCallerAbort = (): void => {
|
|
101
|
+
const reason = callerSignal?.reason
|
|
102
|
+
if (terminalCause === undefined) terminalCause = { kind: 'caller', reason }
|
|
103
|
+
if (!transportAbort.signal.aborted) transportAbort.abort(reason)
|
|
104
|
+
rejectCallerAbort?.(reason)
|
|
105
|
+
}
|
|
106
|
+
callerSignal?.addEventListener('abort', onCallerAbort, { once: true })
|
|
107
|
+
|
|
108
|
+
let iteratorForCleanup: AsyncIterator<StreamChunk> | undefined
|
|
66
109
|
try {
|
|
110
|
+
const iterator = provider
|
|
111
|
+
.chatStream({ ...params, signal: transportAbort.signal })
|
|
112
|
+
[Symbol.asyncIterator]()
|
|
113
|
+
iteratorForCleanup = iterator
|
|
67
114
|
for (;;) {
|
|
68
115
|
let timer: ReturnType<typeof setTimeout> | undefined
|
|
69
116
|
let result: IteratorResult<StreamChunk>
|
|
70
117
|
try {
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
|
|
118
|
+
const idle = new Promise<never>((_resolve, reject) => {
|
|
119
|
+
timer = arm(() => {
|
|
120
|
+
if (terminalCause !== undefined) return
|
|
121
|
+
const duration =
|
|
122
|
+
idleTimeoutMs < 1_000 || idleTimeoutMs % 1_000 !== 0
|
|
123
|
+
? `${idleTimeoutMs}ms`
|
|
124
|
+
: `${idleTimeoutMs / 1_000}s`
|
|
125
|
+
const error = new ProviderRequestError({
|
|
126
|
+
kind: 'network',
|
|
127
|
+
providerId: provider.id,
|
|
128
|
+
detail: `stream idle for ${duration} — aborting so the run lifecycle can settle it`,
|
|
129
|
+
})
|
|
130
|
+
// Latch BEFORE the transport is aborted. Some provider SDKs
|
|
131
|
+
// synchronously reject their pending `next()` with a generic
|
|
132
|
+
// AbortError. Retry/fallback correctly treat that shape as a
|
|
133
|
+
// caller stop, so letting it escape would erase this network
|
|
134
|
+
// cause and make the recovery policy unreachable.
|
|
135
|
+
terminalCause = { kind: 'idle', error }
|
|
136
|
+
transportAbort.abort(error)
|
|
137
|
+
reject(error)
|
|
138
|
+
}, idleTimeoutMs)
|
|
139
|
+
})
|
|
140
|
+
const pending = callerAbort
|
|
141
|
+
? [iterator.next(), idle, callerAbort]
|
|
142
|
+
: [iterator.next(), idle]
|
|
143
|
+
result = await Promise.race(pending)
|
|
144
|
+
} catch (err) {
|
|
145
|
+
// The first control-flow cause wins even if the driver's own
|
|
146
|
+
// abort listener rejected its pull with a different error object.
|
|
147
|
+
// In particular, a generic AbortError caused by OUR watchdog is
|
|
148
|
+
// still the network failure retry/fallback need to see.
|
|
149
|
+
if (terminalCause?.kind === 'idle') throw terminalCause.error
|
|
150
|
+
if (terminalCause?.kind === 'caller') throw terminalCause.reason
|
|
151
|
+
throw err
|
|
85
152
|
} finally {
|
|
86
153
|
// In a `finally`, so a rejection from either side of the
|
|
87
154
|
// race clears the timer. Clearing only on success leaks one
|
|
@@ -93,6 +160,7 @@ export function withStreamIdleTimeout(
|
|
|
93
160
|
yield result.value
|
|
94
161
|
}
|
|
95
162
|
} finally {
|
|
163
|
+
callerSignal?.removeEventListener('abort', onCallerAbort)
|
|
96
164
|
// Asked to clean up, NOT awaited — and the difference is the whole
|
|
97
165
|
// case this decorator exists for. A generator stalled inside an
|
|
98
166
|
// `await` is not suspended at a `yield`, so `return()` resumes
|
|
@@ -104,9 +172,67 @@ export function withStreamIdleTimeout(
|
|
|
104
172
|
// signal that nobody is reading — so it is made and abandoned,
|
|
105
173
|
// with the rejection swallowed because there is no one left to
|
|
106
174
|
// tell.
|
|
107
|
-
|
|
175
|
+
try {
|
|
176
|
+
void iteratorForCleanup?.return?.().catch(() => {})
|
|
177
|
+
} catch {
|
|
178
|
+
// A non-conforming iterator can throw before returning its cleanup
|
|
179
|
+
// promise. The original stream outcome still owns this boundary.
|
|
180
|
+
}
|
|
108
181
|
}
|
|
109
182
|
}
|
|
110
183
|
|
|
111
|
-
|
|
184
|
+
// Explicit forwarding rather than object spread. A provider may be a class
|
|
185
|
+
// whose methods live on its prototype; spreading it silently strips those
|
|
186
|
+
// methods, and retry reads `retryDefaults` AFTER this wrapper is installed.
|
|
187
|
+
return {
|
|
188
|
+
get id() {
|
|
189
|
+
return provider.id
|
|
190
|
+
},
|
|
191
|
+
get name() {
|
|
192
|
+
return provider.name
|
|
193
|
+
},
|
|
194
|
+
get capabilities() {
|
|
195
|
+
return provider.capabilities
|
|
196
|
+
},
|
|
197
|
+
get retryDefaults() {
|
|
198
|
+
return provider.retryDefaults
|
|
199
|
+
},
|
|
200
|
+
chatStream,
|
|
201
|
+
...(provider.listModels
|
|
202
|
+
? { listModels: (signal?: AbortSignal) => provider.listModels?.(signal) }
|
|
203
|
+
: {}),
|
|
204
|
+
...(provider.probeCredential
|
|
205
|
+
? {
|
|
206
|
+
probeCredential: (signal?: AbortSignal) => provider.probeCredential?.(signal),
|
|
207
|
+
}
|
|
208
|
+
: {}),
|
|
209
|
+
...(provider.healthCheck
|
|
210
|
+
? { healthCheck: (model?: string) => provider.healthCheck?.(model) }
|
|
211
|
+
: {}),
|
|
212
|
+
...(provider.doctorCheck
|
|
213
|
+
? { doctorCheck: (model?: string) => provider.doctorCheck?.(model) }
|
|
214
|
+
: {}),
|
|
215
|
+
...(provider.reasoningEffortLevelsFor
|
|
216
|
+
? {
|
|
217
|
+
reasoningEffortLevelsFor: (
|
|
218
|
+
model: string,
|
|
219
|
+
thinking?: Parameters<NonNullable<LLMProvider['reasoningEffortLevelsFor']>>[1],
|
|
220
|
+
) => provider.reasoningEffortLevelsFor?.(model, thinking),
|
|
221
|
+
}
|
|
222
|
+
: {}),
|
|
223
|
+
...(provider.effortLevelsFor
|
|
224
|
+
? {
|
|
225
|
+
effortLevelsFor: (
|
|
226
|
+
model: string,
|
|
227
|
+
thinking?: Parameters<NonNullable<LLMProvider['effortLevelsFor']>>[1],
|
|
228
|
+
) => provider.effortLevelsFor?.(model, thinking) ?? [],
|
|
229
|
+
}
|
|
230
|
+
: {}),
|
|
231
|
+
...(provider.resolveContextWindow
|
|
232
|
+
? {
|
|
233
|
+
resolveContextWindow: (model: string, signal?: AbortSignal) =>
|
|
234
|
+
provider.resolveContextWindow?.(model, signal) ?? Promise.resolve(undefined),
|
|
235
|
+
}
|
|
236
|
+
: {}),
|
|
237
|
+
} as LLMProvider
|
|
112
238
|
}
|
package/src/provider/index.ts
CHANGED
|
@@ -36,6 +36,8 @@ export {
|
|
|
36
36
|
export { DEFAULT_PROVIDER_RETRY, withProviderRetry } from './retry.js'
|
|
37
37
|
export type { ProviderRetryConfig, WithProviderRetryOptions } from './retry.js'
|
|
38
38
|
export { withProviderFallback } from './fallback.js'
|
|
39
|
+
export { DEFAULT_STREAM_IDLE_TIMEOUT_MS, withStreamIdleTimeout } from './idle-timeout.js'
|
|
40
|
+
export type { WithStreamIdleTimeoutOptions } from './idle-timeout.js'
|
|
39
41
|
export type {
|
|
40
42
|
ProviderChainMember,
|
|
41
43
|
ServingMember,
|
|
@@ -43,6 +43,7 @@ export function wrapProviderWithProbes(
|
|
|
43
43
|
id: provider.id,
|
|
44
44
|
name: provider.name,
|
|
45
45
|
listModels: provider.listModels?.bind(provider),
|
|
46
|
+
probeCredential: provider.probeCredential?.bind(provider),
|
|
46
47
|
healthCheck: provider.healthCheck?.bind(provider),
|
|
47
48
|
|
|
48
49
|
async *chatStream(params: ChatCompletionParams): AsyncIterable<StreamChunk> {
|
package/src/provider/retry.ts
CHANGED
|
@@ -249,7 +249,14 @@ export function withProviderRetry(
|
|
|
249
249
|
return provider.capabilities
|
|
250
250
|
},
|
|
251
251
|
chatStream,
|
|
252
|
-
...(provider.listModels
|
|
252
|
+
...(provider.listModels
|
|
253
|
+
? { listModels: (signal?: AbortSignal) => provider.listModels?.(signal) }
|
|
254
|
+
: {}),
|
|
255
|
+
...(provider.probeCredential
|
|
256
|
+
? {
|
|
257
|
+
probeCredential: (signal?: AbortSignal) => provider.probeCredential?.(signal),
|
|
258
|
+
}
|
|
259
|
+
: {}),
|
|
253
260
|
// The model is forwarded, not dropped. A wrapper that swallowed it would
|
|
254
261
|
// leave the wrapped driver probing whatever it probes with no argument
|
|
255
262
|
// — which for at least one driver is "nothing", so the check would come
|
|
@@ -260,6 +267,14 @@ export function withProviderRetry(
|
|
|
260
267
|
...(provider.doctorCheck
|
|
261
268
|
? { doctorCheck: (model?: string) => provider.doctorCheck?.(model) }
|
|
262
269
|
: {}),
|
|
270
|
+
...(provider.reasoningEffortLevelsFor
|
|
271
|
+
? {
|
|
272
|
+
reasoningEffortLevelsFor: (
|
|
273
|
+
model: string,
|
|
274
|
+
thinking?: Parameters<NonNullable<LLMProvider['reasoningEffortLevelsFor']>>[1],
|
|
275
|
+
) => provider.reasoningEffortLevelsFor?.(model, thinking),
|
|
276
|
+
}
|
|
277
|
+
: {}),
|
|
263
278
|
// Forwarded for the same reason `healthCheck` is, and both were
|
|
264
279
|
// missing until something consumed them. A member this wrapper drops
|
|
265
280
|
// does not fail — it reads as "this driver cannot answer", which is a
|