@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
|
@@ -1,6 +1,13 @@
|
|
|
1
1
|
import { lookup } from 'node:dns/promises'
|
|
2
2
|
import { isIP } from 'node:net'
|
|
3
3
|
|
|
4
|
+
import {
|
|
5
|
+
ConnectorHttpOperation,
|
|
6
|
+
DEFAULT_CONNECTOR_MAX_RESPONSE_BYTES,
|
|
7
|
+
DEFAULT_CONNECTOR_REQUEST_TIMEOUT_MS,
|
|
8
|
+
validateConnectorMaxResponseBytes,
|
|
9
|
+
validateConnectorTimeoutMs,
|
|
10
|
+
} from '../http-operation.js'
|
|
4
11
|
import {
|
|
5
12
|
type WebFetchProvider,
|
|
6
13
|
WebFetchRefusedError,
|
|
@@ -28,8 +35,6 @@ import {
|
|
|
28
35
|
const ALLOWED_SCHEMES = new Set(['http:', 'https:'])
|
|
29
36
|
|
|
30
37
|
const DEFAULT_MAX_REDIRECTS = 5
|
|
31
|
-
const DEFAULT_MAX_BYTES = 2 * 1024 * 1024
|
|
32
|
-
const DEFAULT_TIMEOUT_MS = 30_000
|
|
33
38
|
|
|
34
39
|
/**
|
|
35
40
|
* Headers this never forwards, whatever the caller asked for.
|
|
@@ -72,7 +77,7 @@ export interface GuardedFetchConfig {
|
|
|
72
77
|
* a host uses to pin resolution — see `assertAllowed` for the rebinding
|
|
73
78
|
* gap this cannot close on its own.
|
|
74
79
|
*/
|
|
75
|
-
readonly resolve?: (hostname: string) => Promise<readonly string[]>
|
|
80
|
+
readonly resolve?: (hostname: string, signal?: AbortSignal) => Promise<readonly string[]>
|
|
76
81
|
}
|
|
77
82
|
|
|
78
83
|
/**
|
|
@@ -100,23 +105,53 @@ export function isPrivateAddress(address: string): boolean {
|
|
|
100
105
|
}
|
|
101
106
|
if (kind === 6) {
|
|
102
107
|
const lower = address.toLowerCase().replace(/^\[|\]$/g, '')
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
108
|
+
// `net.isIP` accepts scoped link-local values such as `fe80::1%lo0`,
|
|
109
|
+
// while the URL parser intentionally does not. The zone names an
|
|
110
|
+
// interface, not an address bit, so remove it before canonicalising.
|
|
111
|
+
const zoneAt = lower.indexOf('%')
|
|
112
|
+
const unscoped = zoneAt === -1 ? lower : lower.slice(0, zoneAt)
|
|
113
|
+
// Canonicalise before testing mapped addresses. `new URL()` turns the
|
|
114
|
+
// dotted spelling `::ffff:127.0.0.1` into `::ffff:7f00:1`; checking only
|
|
115
|
+
// a dotted suffix would therefore accept the exact value this provider
|
|
116
|
+
// receives from a model-authored URL.
|
|
117
|
+
const canonical = new URL(`http://[${unscoped}]/`).hostname.slice(1, -1)
|
|
118
|
+
if (canonical === '::1' || canonical === '::') return true
|
|
119
|
+
const mapped = canonical.match(/^::ffff:([0-9a-f]{1,4}):([0-9a-f]{1,4})$/)
|
|
120
|
+
if (mapped?.[1] && mapped[2]) {
|
|
121
|
+
const high = Number.parseInt(mapped[1], 16)
|
|
122
|
+
const low = Number.parseInt(mapped[2], 16)
|
|
123
|
+
return isPrivateAddress(`${high >>> 8}.${high & 0xff}.${low >>> 8}.${low & 0xff}`)
|
|
124
|
+
}
|
|
125
|
+
const firstHextet = Number.parseInt(canonical.split(':', 1)[0] ?? '0', 16)
|
|
126
|
+
if ((firstHextet & 0xffc0) === 0xfe80) return true // link-local fe80::/10
|
|
127
|
+
if ((firstHextet & 0xfe00) === 0xfc00) return true // unique-local fc00::/7
|
|
128
|
+
if ((firstHextet & 0xff00) === 0xff00) return true // multicast ff00::/8
|
|
110
129
|
return false
|
|
111
130
|
}
|
|
112
131
|
return false
|
|
113
132
|
}
|
|
114
133
|
|
|
115
134
|
export class GuardedFetchProvider implements WebFetchProvider {
|
|
116
|
-
|
|
135
|
+
private readonly timeoutMs: number
|
|
136
|
+
private readonly maxBytes: number
|
|
137
|
+
private readonly maxRedirects: number
|
|
117
138
|
|
|
118
|
-
private
|
|
119
|
-
|
|
139
|
+
constructor(private readonly config: GuardedFetchConfig = {}) {
|
|
140
|
+
this.timeoutMs = validateConnectorTimeoutMs(
|
|
141
|
+
config.timeoutMs ?? DEFAULT_CONNECTOR_REQUEST_TIMEOUT_MS,
|
|
142
|
+
'GuardedFetchProvider timeoutMs',
|
|
143
|
+
)
|
|
144
|
+
this.maxBytes = validateConnectorMaxResponseBytes(
|
|
145
|
+
config.maxBytes ?? DEFAULT_CONNECTOR_MAX_RESPONSE_BYTES,
|
|
146
|
+
'GuardedFetchProvider maxBytes',
|
|
147
|
+
)
|
|
148
|
+
const maxRedirects = config.maxRedirects ?? DEFAULT_MAX_REDIRECTS
|
|
149
|
+
if (!Number.isSafeInteger(maxRedirects) || maxRedirects < 0) {
|
|
150
|
+
throw new Error(
|
|
151
|
+
`GuardedFetchProvider maxRedirects must be a non-negative safe integer; received ${String(maxRedirects)}`,
|
|
152
|
+
)
|
|
153
|
+
}
|
|
154
|
+
this.maxRedirects = maxRedirects
|
|
120
155
|
}
|
|
121
156
|
|
|
122
157
|
/**
|
|
@@ -128,7 +163,8 @@ export class GuardedFetchProvider implements WebFetchProvider {
|
|
|
128
163
|
* `302 -> http://169.254.169.254/`, and a fetch that validated only what
|
|
129
164
|
* the caller typed follows it happily.
|
|
130
165
|
*/
|
|
131
|
-
private async assertAllowed(rawUrl: string): Promise<URL> {
|
|
166
|
+
private async assertAllowed(rawUrl: string, operation: ConnectorHttpOperation): Promise<URL> {
|
|
167
|
+
operation.throwIfStopped()
|
|
132
168
|
let url: URL
|
|
133
169
|
try {
|
|
134
170
|
url = new URL(rawUrl)
|
|
@@ -157,7 +193,10 @@ export class GuardedFetchProvider implements WebFetchProvider {
|
|
|
157
193
|
})
|
|
158
194
|
}
|
|
159
195
|
|
|
160
|
-
if (this.config.allowPrivateAddresses === true)
|
|
196
|
+
if (this.config.allowPrivateAddresses === true) {
|
|
197
|
+
operation.throwIfStopped()
|
|
198
|
+
return url
|
|
199
|
+
}
|
|
161
200
|
|
|
162
201
|
// RESOLVED, not just parsed. A hostname check alone is bypassed by any
|
|
163
202
|
// name whose A record points inside — which is a thing anyone can set
|
|
@@ -176,8 +215,12 @@ export class GuardedFetchProvider implements WebFetchProvider {
|
|
|
176
215
|
addresses = [hostname]
|
|
177
216
|
} else {
|
|
178
217
|
try {
|
|
179
|
-
addresses = await resolve(hostname)
|
|
218
|
+
addresses = await operation.run(() => resolve(hostname, operation.signal))
|
|
180
219
|
} catch (err) {
|
|
220
|
+
// A caller cancellation or this operation's deadline is not a DNS
|
|
221
|
+
// policy refusal. Preserve the exact first cause rather than wrapping
|
|
222
|
+
// it as though the hostname itself were unsafe.
|
|
223
|
+
operation.throwIfStopped()
|
|
181
224
|
// REFUSE. `.catch(() => [])` was the first version of this line
|
|
182
225
|
// and it is fail-open: an empty list satisfies the loop below,
|
|
183
226
|
// so a name nobody could resolve was treated as a name with no
|
|
@@ -204,58 +247,67 @@ export class GuardedFetchProvider implements WebFetchProvider {
|
|
|
204
247
|
)
|
|
205
248
|
}
|
|
206
249
|
}
|
|
250
|
+
operation.throwIfStopped()
|
|
207
251
|
return url
|
|
208
252
|
}
|
|
209
253
|
|
|
210
254
|
async fetch(request: WebFetchRequest): Promise<WebFetchResult> {
|
|
211
255
|
const doFetch = this.config.fetch ?? globalThis.fetch
|
|
212
|
-
const
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
if (!STRIPPED_HEADERS.has(key.toLowerCase())) headers[key] = value
|
|
218
|
-
}
|
|
219
|
-
|
|
220
|
-
const timer = new AbortController()
|
|
221
|
-
const deadline = setTimeout(() => timer.abort(), timeoutMs)
|
|
222
|
-
// Both: the caller's cancel and our own deadline. Honouring only one
|
|
223
|
-
// leaves the other unable to stop a fetch that has stopped being
|
|
224
|
-
// wanted.
|
|
225
|
-
request.signal?.addEventListener('abort', () => timer.abort(), { once: true })
|
|
256
|
+
const operation = new ConnectorHttpOperation(
|
|
257
|
+
request.signal,
|
|
258
|
+
this.timeoutMs,
|
|
259
|
+
`Web fetch "${request.url}"`,
|
|
260
|
+
)
|
|
226
261
|
|
|
227
262
|
try {
|
|
263
|
+
const headers: Record<string, string> = {}
|
|
264
|
+
for (const [key, value] of Object.entries(request.headers ?? {})) {
|
|
265
|
+
if (!STRIPPED_HEADERS.has(key.toLowerCase())) headers[key] = value
|
|
266
|
+
}
|
|
267
|
+
|
|
228
268
|
const redirects: string[] = []
|
|
229
|
-
let
|
|
269
|
+
let redirectsFollowed = 0
|
|
270
|
+
let current = await this.assertAllowed(request.url, operation)
|
|
230
271
|
|
|
231
|
-
for (
|
|
232
|
-
|
|
233
|
-
throw new WebFetchRefusedError(
|
|
234
|
-
`Refused after ${this.maxRedirects} redirects from "${request.url}".`,
|
|
235
|
-
{ url: request.url, reason: 'redirect-limit' },
|
|
236
|
-
)
|
|
237
|
-
}
|
|
272
|
+
for (;;) {
|
|
273
|
+
operation.throwIfStopped()
|
|
238
274
|
redirects.push(current.toString())
|
|
239
275
|
|
|
240
276
|
// `manual`, so every hop comes back here to be checked. Letting
|
|
241
277
|
// the platform follow redirects is exactly the hole this class
|
|
242
278
|
// exists to close: it would land on the final URL having never
|
|
243
279
|
// asked whether that URL was allowed.
|
|
244
|
-
const response = await
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
280
|
+
const response = await operation.run(() =>
|
|
281
|
+
doFetch(current, {
|
|
282
|
+
headers,
|
|
283
|
+
redirect: 'manual',
|
|
284
|
+
signal: operation.signal,
|
|
285
|
+
}),
|
|
286
|
+
)
|
|
249
287
|
|
|
250
288
|
const location = response.headers.get('location')
|
|
251
289
|
if (response.status >= 300 && response.status < 400 && location) {
|
|
290
|
+
// The budget is about redirects FOLLOWED. Refuse before parsing or
|
|
291
|
+
// resolving the forbidden next target, so a spent budget cannot be
|
|
292
|
+
// turned into one last DNS query.
|
|
293
|
+
if (redirectsFollowed >= this.maxRedirects) {
|
|
294
|
+
cancelResponseBody(response, new Error('redirect limit reached'))
|
|
295
|
+
operation.throwIfStopped()
|
|
296
|
+
throw new WebFetchRefusedError(
|
|
297
|
+
`Refused after ${this.maxRedirects} redirects from "${request.url}".`,
|
|
298
|
+
{ url: request.url, reason: 'redirect-limit' },
|
|
299
|
+
)
|
|
300
|
+
}
|
|
252
301
|
// Resolved against the current URL, because a `Location` may
|
|
253
302
|
// be relative — and a relative one that is not resolved would
|
|
254
303
|
// be checked as a different URL than the one followed.
|
|
255
304
|
const next = new URL(location, current)
|
|
305
|
+
cancelResponseBody(response, new Error('following redirect'))
|
|
306
|
+
operation.throwIfStopped()
|
|
256
307
|
try {
|
|
257
|
-
current = await this.assertAllowed(next.toString())
|
|
308
|
+
current = await this.assertAllowed(next.toString(), operation)
|
|
258
309
|
} catch (err) {
|
|
310
|
+
operation.throwIfStopped()
|
|
259
311
|
if (err instanceof WebFetchRefusedError) {
|
|
260
312
|
throw new WebFetchRefusedError(
|
|
261
313
|
`A redirect from "${current.toString()}" pointed at "${next.toString()}", which was refused: ${err.message}`,
|
|
@@ -264,13 +316,13 @@ export class GuardedFetchProvider implements WebFetchProvider {
|
|
|
264
316
|
}
|
|
265
317
|
throw err
|
|
266
318
|
}
|
|
319
|
+
redirectsFollowed++
|
|
267
320
|
continue
|
|
268
321
|
}
|
|
269
322
|
|
|
270
|
-
const
|
|
271
|
-
const truncated = Buffer.byteLength(text) > maxBytes
|
|
272
|
-
const body = truncated ? Buffer.from(text).subarray(0, maxBytes).toString('utf8') : text
|
|
323
|
+
const { body, truncated } = await readCappedResponseText(response, operation, this.maxBytes)
|
|
273
324
|
const contentType = response.headers.get('content-type') ?? undefined
|
|
325
|
+
operation.throwIfStopped()
|
|
274
326
|
|
|
275
327
|
return {
|
|
276
328
|
url: current.toString(),
|
|
@@ -282,7 +334,95 @@ export class GuardedFetchProvider implements WebFetchProvider {
|
|
|
282
334
|
}
|
|
283
335
|
}
|
|
284
336
|
} finally {
|
|
285
|
-
|
|
337
|
+
operation.close()
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
async function readCappedResponseText(
|
|
343
|
+
response: Response,
|
|
344
|
+
operation: ConnectorHttpOperation,
|
|
345
|
+
maxBytes: number,
|
|
346
|
+
): Promise<{ body: string; truncated: boolean }> {
|
|
347
|
+
// Native fetch exposes a byte stream whenever bytes exist. This fallback
|
|
348
|
+
// keeps Response-shaped host doubles compatible while still racing their
|
|
349
|
+
// text promise and applying the same byte semantics after it settles.
|
|
350
|
+
if (!response.body) {
|
|
351
|
+
const text = await operation.run(() => response.text())
|
|
352
|
+
const bytes = new TextEncoder().encode(text)
|
|
353
|
+
if (bytes.byteLength <= maxBytes) {
|
|
354
|
+
operation.throwIfStopped()
|
|
355
|
+
return { body: text, truncated: false }
|
|
286
356
|
}
|
|
357
|
+
operation.throwIfStopped()
|
|
358
|
+
return {
|
|
359
|
+
body: decodeUtf8Prefix(bytes.slice(0, maxBytes), true),
|
|
360
|
+
truncated: true,
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
const reader = response.body.getReader()
|
|
365
|
+
const chunks: Uint8Array[] = []
|
|
366
|
+
let totalBytes = 0
|
|
367
|
+
let truncated = false
|
|
368
|
+
try {
|
|
369
|
+
for (;;) {
|
|
370
|
+
const { done, value } = await operation.run(() => reader.read())
|
|
371
|
+
if (done) break
|
|
372
|
+
if (value.byteLength === 0) continue
|
|
373
|
+
|
|
374
|
+
const remaining = maxBytes - totalBytes
|
|
375
|
+
if (value.byteLength > remaining) {
|
|
376
|
+
// Copy the retained prefix. `subarray` would keep an arbitrarily
|
|
377
|
+
// large hostile chunk's backing buffer alive through the result.
|
|
378
|
+
if (remaining > 0) chunks.push(value.slice(0, remaining))
|
|
379
|
+
totalBytes += remaining
|
|
380
|
+
truncated = true
|
|
381
|
+
cancelReader(reader, new Error(`web response exceeded ${maxBytes} bytes`))
|
|
382
|
+
operation.throwIfStopped()
|
|
383
|
+
break
|
|
384
|
+
}
|
|
385
|
+
|
|
386
|
+
chunks.push(value)
|
|
387
|
+
totalBytes += value.byteLength
|
|
388
|
+
}
|
|
389
|
+
} catch (error) {
|
|
390
|
+
cancelReader(reader, error)
|
|
391
|
+
throw error
|
|
392
|
+
} finally {
|
|
393
|
+
reader.releaseLock()
|
|
394
|
+
}
|
|
395
|
+
|
|
396
|
+
operation.throwIfStopped()
|
|
397
|
+
const bytes = new Uint8Array(totalBytes)
|
|
398
|
+
let offset = 0
|
|
399
|
+
for (const chunk of chunks) {
|
|
400
|
+
bytes.set(chunk, offset)
|
|
401
|
+
offset += chunk.byteLength
|
|
402
|
+
}
|
|
403
|
+
return { body: decodeUtf8Prefix(bytes, truncated), truncated }
|
|
404
|
+
}
|
|
405
|
+
|
|
406
|
+
function decodeUtf8Prefix(bytes: Uint8Array, truncated: boolean): string {
|
|
407
|
+
const decoder = new TextDecoder()
|
|
408
|
+
// Streaming decode deliberately omits the final flush for a truncated
|
|
409
|
+
// prefix. That drops an incomplete trailing code point instead of showing
|
|
410
|
+
// the model a synthetic replacement character that was never in the page.
|
|
411
|
+
return decoder.decode(bytes, { stream: truncated })
|
|
412
|
+
}
|
|
413
|
+
|
|
414
|
+
function cancelReader(reader: ReadableStreamDefaultReader<Uint8Array>, reason: unknown): void {
|
|
415
|
+
try {
|
|
416
|
+
void Promise.resolve(reader.cancel(reason)).catch(() => undefined)
|
|
417
|
+
} catch {
|
|
418
|
+
// Cleanup must not replace the operation's real outcome.
|
|
419
|
+
}
|
|
420
|
+
}
|
|
421
|
+
|
|
422
|
+
function cancelResponseBody(response: Response, reason: unknown): void {
|
|
423
|
+
try {
|
|
424
|
+
void Promise.resolve(response.body?.cancel(reason)).catch(() => undefined)
|
|
425
|
+
} catch {
|
|
426
|
+
// Cleanup must not turn a redirect refusal into a transport failure.
|
|
287
427
|
}
|
|
288
428
|
}
|
|
@@ -17,8 +17,9 @@ export const SANDBOX_TEMP_DIR_PREFIX = 'namzu-sbx-'
|
|
|
17
17
|
export const SANDBOX_KILL_GRACE_MS = 3_000
|
|
18
18
|
|
|
19
19
|
/**
|
|
20
|
-
*
|
|
21
|
-
*
|
|
20
|
+
* Base environment keys that are safe to pass into local sandboxes.
|
|
21
|
+
* Windows adds its non-secret core process fragment at the spawn boundary;
|
|
22
|
+
* everything else ambient is stripped on every platform.
|
|
22
23
|
*/
|
|
23
24
|
export const SANDBOX_SAFE_ENV_KEYS = new Set([
|
|
24
25
|
'PATH',
|
package/src/contracts/api.ts
CHANGED
package/src/contracts/schemas.ts
CHANGED
|
@@ -28,6 +28,13 @@ export const RunConfigSchema = z
|
|
|
28
28
|
tokenBudget: z.number().int().nonnegative().optional(),
|
|
29
29
|
maxResponseTokens: z.number().int().positive().optional(),
|
|
30
30
|
timeoutMs: z.number().int().positive().max(3_600_000).optional(),
|
|
31
|
+
streamIdleTimeoutMs: z.number().int().nonnegative().max(3_600_000).optional(),
|
|
32
|
+
maxRequestRichContentBytes: z
|
|
33
|
+
.number()
|
|
34
|
+
.int()
|
|
35
|
+
.nonnegative()
|
|
36
|
+
.max(Number.MAX_SAFE_INTEGER)
|
|
37
|
+
.optional(),
|
|
31
38
|
permissionMode: z.enum(['plan', 'auto']).optional(),
|
|
32
39
|
systemPrompt: z.string().min(1).max(100_000).optional(),
|
|
33
40
|
})
|
|
@@ -135,6 +135,14 @@ export function deriveSupervisorOptions(
|
|
|
135
135
|
// guess, so the two front doors cannot drift.
|
|
136
136
|
tokenBudget: manifest.config.tokenBudget ?? DEFAULT_TOKEN_BUDGET,
|
|
137
137
|
timeoutMs: manifest.config.timeoutMs ?? DEFAULT_TIMEOUT_MS,
|
|
138
|
+
...(manifest.config.streamIdleTimeoutMs !== undefined
|
|
139
|
+
? { streamIdleTimeoutMs: manifest.config.streamIdleTimeoutMs }
|
|
140
|
+
: {}),
|
|
141
|
+
...(manifest.config.maxRequestRichContentBytes !== undefined
|
|
142
|
+
? {
|
|
143
|
+
maxRequestRichContentBytes: manifest.config.maxRequestRichContentBytes,
|
|
144
|
+
}
|
|
145
|
+
: {}),
|
|
138
146
|
...(manifest.config.temperature !== undefined
|
|
139
147
|
? { temperature: manifest.config.temperature }
|
|
140
148
|
: {}),
|
package/src/directory/derive.ts
CHANGED
|
@@ -64,6 +64,14 @@ export function deriveRunOptions(
|
|
|
64
64
|
? { tokenBudget: manifest.config.tokenBudget }
|
|
65
65
|
: {}),
|
|
66
66
|
...(manifest.config.timeoutMs !== undefined ? { timeoutMs: manifest.config.timeoutMs } : {}),
|
|
67
|
+
...(manifest.config.streamIdleTimeoutMs !== undefined
|
|
68
|
+
? { streamIdleTimeoutMs: manifest.config.streamIdleTimeoutMs }
|
|
69
|
+
: {}),
|
|
70
|
+
...(manifest.config.maxRequestRichContentBytes !== undefined
|
|
71
|
+
? {
|
|
72
|
+
maxRequestRichContentBytes: manifest.config.maxRequestRichContentBytes,
|
|
73
|
+
}
|
|
74
|
+
: {}),
|
|
67
75
|
...(input.identity ?? {}),
|
|
68
76
|
...(input.overrides ?? {}),
|
|
69
77
|
}
|
package/src/directory/load.ts
CHANGED
|
@@ -185,6 +185,8 @@ function readConfig(
|
|
|
185
185
|
take('maxIterations', isNumber, 'finite number')
|
|
186
186
|
take('tokenBudget', isNumber, 'finite number')
|
|
187
187
|
take('timeoutMs', isNumber, 'finite number')
|
|
188
|
+
take('streamIdleTimeoutMs', isNumber, 'finite number')
|
|
189
|
+
take('maxRequestRichContentBytes', isNumber, 'finite number')
|
|
188
190
|
|
|
189
191
|
// `metadata` is typed `Record<string, string>` and was admitted on
|
|
190
192
|
// `typeof === 'object'` alone — which an array also satisfies, and which
|
package/src/directory/types.ts
CHANGED
|
@@ -166,6 +166,10 @@ export interface DirectoryConfig {
|
|
|
166
166
|
readonly maxIterations?: number
|
|
167
167
|
readonly tokenBudget?: number
|
|
168
168
|
readonly timeoutMs?: number
|
|
169
|
+
/** Maximum provider-stream silence in milliseconds; `0` disables the bound. */
|
|
170
|
+
readonly streamIdleTimeoutMs?: number
|
|
171
|
+
/** Accumulated inline image/document bytes per provider request; `0` disables. */
|
|
172
|
+
readonly maxRequestRichContentBytes?: number
|
|
169
173
|
/** Names the agent in traces and events when declared. */
|
|
170
174
|
readonly name?: string
|
|
171
175
|
/** Free-form labels for an inspector. Never interpreted by this package. */
|