@namzu/sdk 30.2.0 → 31.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +562 -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 +79 -13
- 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/index.d.ts +1 -1
- package/dist/types/provider/index.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/model.d.ts +12 -0
- package/dist/types/provider/model.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 +147 -12
- package/src/types/plugin/index.ts +7 -5
- package/src/types/provider/chat.ts +35 -4
- package/src/types/provider/index.ts +1 -1
- package/src/types/provider/interface.ts +22 -7
- package/src/types/provider/model.ts +13 -0
- 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/eval/experiment.ts
CHANGED
|
@@ -10,6 +10,8 @@ import type {
|
|
|
10
10
|
import type { ScoreUncertainty } from './uncertainty.js'
|
|
11
11
|
import { describeUncertainty, uncertaintyOf } from './uncertainty.js'
|
|
12
12
|
|
|
13
|
+
const MAX_CASE_TIMEOUT_MS = 2_147_483_647
|
|
14
|
+
|
|
13
15
|
export interface ExperimentConfig<TInput = unknown> {
|
|
14
16
|
name: string
|
|
15
17
|
cases: readonly EvalCase<TInput>[]
|
|
@@ -22,18 +24,18 @@ export interface ExperimentConfig<TInput = unknown> {
|
|
|
22
24
|
*/
|
|
23
25
|
run: (input: TInput, evalCase: EvalCase<TInput>, signal: AbortSignal) => Promise<EvalRun>
|
|
24
26
|
/**
|
|
25
|
-
*
|
|
27
|
+
* Wall-clock deadline for one case, including execution and every
|
|
28
|
+
* scorer. Unset means no deadline.
|
|
26
29
|
*
|
|
27
|
-
* `
|
|
28
|
-
*
|
|
29
|
-
*
|
|
30
|
-
*
|
|
31
|
-
* closure that does not go through `query()` and a mid-iteration
|
|
32
|
-
* provider stall the between-iterations guard cannot see. Both are
|
|
33
|
-
* reachable, and neither is the suite's fault to absorb silently.
|
|
30
|
+
* A non-cooperative `run` closure or scorer is detached by an independent
|
|
31
|
+
* race, so it cannot hold the suite forever. The same signal is passed to
|
|
32
|
+
* both phases; I/O-owning scorers should forward it to their transport,
|
|
33
|
+
* as `judgeScorer` does.
|
|
34
34
|
*
|
|
35
|
-
* A
|
|
36
|
-
*
|
|
35
|
+
* A run that exhausts the budget is reported as failed. A scorer that
|
|
36
|
+
* exhausts the remainder is unavailable, making an otherwise unjudged
|
|
37
|
+
* case inconclusive. Either way the suite continues: forty cases should
|
|
38
|
+
* not be lost to one operation that hung.
|
|
37
39
|
*/
|
|
38
40
|
timeoutMs?: number
|
|
39
41
|
/** Mean score a case must reach to count as passed. Default 1. */
|
|
@@ -61,6 +63,7 @@ export async function runExperiment<TInput>(
|
|
|
61
63
|
const startedAt = Date.now()
|
|
62
64
|
const threshold = config.passThreshold ?? 1
|
|
63
65
|
const concurrency = Math.max(1, config.concurrency ?? 1)
|
|
66
|
+
const timeoutMs = validateCaseTimeoutMs(config.timeoutMs)
|
|
64
67
|
|
|
65
68
|
const results: CaseResult[] = new Array(config.cases.length)
|
|
66
69
|
let cursor = 0
|
|
@@ -71,71 +74,7 @@ export async function runExperiment<TInput>(
|
|
|
71
74
|
const evalCase = config.cases[index]
|
|
72
75
|
if (!evalCase) return
|
|
73
76
|
|
|
74
|
-
const
|
|
75
|
-
const scorers = evalCase.scorers ?? config.scorers
|
|
76
|
-
const scores: Record<string, Score> = {}
|
|
77
|
-
|
|
78
|
-
// Scores are keyed by name, so two scorers sharing one collapse:
|
|
79
|
-
// the mean's denominator becomes the count of distinct NAMES and
|
|
80
|
-
// the surviving score is whichever ran last. Two
|
|
81
|
-
// `containsScorer(...)` instances are both called 'contains', so
|
|
82
|
-
// this is easy to hit by accident and silently halves the
|
|
83
|
-
// evidence. Ambiguous results are worse than a loud failure.
|
|
84
|
-
const seen = new Set<string>()
|
|
85
|
-
for (const scorer of scorers) {
|
|
86
|
-
if (seen.has(scorer.name)) {
|
|
87
|
-
throw new Error(
|
|
88
|
-
`Duplicate scorer name "${scorer.name}" for case "${evalCase.name}". Scores are keyed by name, so the second would overwrite the first and the case mean would be computed over the wrong denominator. Give each scorer a distinct name.`,
|
|
89
|
-
)
|
|
90
|
-
}
|
|
91
|
-
seen.add(scorer.name)
|
|
92
|
-
scores[scorer.name] = await safeScore(scorer, run, evalCase)
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
// Only scores that were actually produced count — an unavailable
|
|
96
|
-
// scorer leaves the denominator alone rather than dragging the
|
|
97
|
-
// mean toward zero with a measurement that never happened.
|
|
98
|
-
const values = Object.values(scores)
|
|
99
|
-
.filter((s) => s.unavailable !== true)
|
|
100
|
-
.map((s) => s.score)
|
|
101
|
-
const mean = values.length === 0 ? 0 : values.reduce((a, b) => a + b, 0) / values.length
|
|
102
|
-
|
|
103
|
-
// A gate miss fails the case whatever the mean says. Averaging a
|
|
104
|
-
// hard check together with a fuzzy one lets three good scores
|
|
105
|
-
// carry a zero: trajectory 0 + completion 1 + contains 1 +
|
|
106
|
-
// judge 1 averages to 0.75 and reports passed at a threshold of
|
|
107
|
-
// 0.75 — the exact regression the harness exists to catch,
|
|
108
|
-
// reported green. An UNAVAILABLE gate does not fail the case;
|
|
109
|
-
// it did not judge the run at all, which is the inconclusive
|
|
110
|
-
// path, not a failure.
|
|
111
|
-
const failedGates = scorers
|
|
112
|
-
.filter((s) => s.severity === 'gate')
|
|
113
|
-
.filter((s) => {
|
|
114
|
-
const score = scores[s.name]
|
|
115
|
-
if (!score || score.unavailable === true) return false
|
|
116
|
-
return score.score < (s.threshold ?? threshold)
|
|
117
|
-
})
|
|
118
|
-
.map((s) => s.name)
|
|
119
|
-
|
|
120
|
-
const status: CaseStatus =
|
|
121
|
-
Object.keys(scores).length > 0 && values.length === 0
|
|
122
|
-
? 'inconclusive'
|
|
123
|
-
: failedGates.length > 0
|
|
124
|
-
? 'failed'
|
|
125
|
-
: mean >= threshold
|
|
126
|
-
? 'passed'
|
|
127
|
-
: 'failed'
|
|
128
|
-
const result: CaseResult = {
|
|
129
|
-
case: evalCase.name,
|
|
130
|
-
run,
|
|
131
|
-
scores,
|
|
132
|
-
mean,
|
|
133
|
-
status,
|
|
134
|
-
passed: status === 'passed',
|
|
135
|
-
// Named, not just counted: "failed" with a mean of 0.75 sends
|
|
136
|
-
// somebody to read four scores and guess which one mattered.
|
|
137
|
-
...(failedGates.length > 0 ? { failedGates } : {}),
|
|
138
|
-
}
|
|
77
|
+
const result = await evaluateCase(config, evalCase, threshold, timeoutMs)
|
|
139
78
|
results[index] = result
|
|
140
79
|
config.onCaseFinish?.(result)
|
|
141
80
|
}
|
|
@@ -165,6 +104,138 @@ export async function runExperiment<TInput>(
|
|
|
165
104
|
}
|
|
166
105
|
}
|
|
167
106
|
|
|
107
|
+
function validateCaseTimeoutMs(value: number | undefined): number | undefined {
|
|
108
|
+
if (value === undefined) return undefined
|
|
109
|
+
if (!Number.isInteger(value) || value < 1 || value > MAX_CASE_TIMEOUT_MS) {
|
|
110
|
+
throw new RangeError(
|
|
111
|
+
`timeoutMs must be an integer from 1 to ${MAX_CASE_TIMEOUT_MS}, or omitted; received ${String(value)}`,
|
|
112
|
+
)
|
|
113
|
+
}
|
|
114
|
+
return value
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
interface CaseDeadline {
|
|
118
|
+
readonly signal: AbortSignal
|
|
119
|
+
race<T>(work: Promise<T>): Promise<T>
|
|
120
|
+
dispose(): void
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
/** One wall-clock budget shared by execution and every scorer for a case. */
|
|
124
|
+
function openCaseDeadline(timeoutMs: number | undefined): CaseDeadline {
|
|
125
|
+
const controller = new AbortController()
|
|
126
|
+
let timer: ReturnType<typeof setTimeout> | undefined
|
|
127
|
+
let expiry: Promise<never> | undefined
|
|
128
|
+
let onAbort: (() => void) | undefined
|
|
129
|
+
|
|
130
|
+
if (timeoutMs !== undefined && timeoutMs > 0) {
|
|
131
|
+
expiry = new Promise<never>((_resolve, reject) => {
|
|
132
|
+
onAbort = () => reject(controller.signal.reason)
|
|
133
|
+
controller.signal.addEventListener('abort', onAbort, { once: true })
|
|
134
|
+
})
|
|
135
|
+
// A case can settle just before its timer. Keep the deadline promise
|
|
136
|
+
// observed independently so a same-tick expiry cannot become an
|
|
137
|
+
// unhandled rejection while the scope is being disposed.
|
|
138
|
+
void expiry.catch(() => {})
|
|
139
|
+
timer = setTimeout(
|
|
140
|
+
() => controller.abort(new Error(`case timed out after ${timeoutMs}ms`)),
|
|
141
|
+
timeoutMs,
|
|
142
|
+
)
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
return {
|
|
146
|
+
signal: controller.signal,
|
|
147
|
+
async race<T>(work: Promise<T>): Promise<T> {
|
|
148
|
+
if (!expiry) return await work
|
|
149
|
+
// A non-cooperative run or scorer may reject after the deadline won.
|
|
150
|
+
// Observe that loser without making suite settlement depend on it.
|
|
151
|
+
void work.catch(() => {})
|
|
152
|
+
return await Promise.race([work, expiry])
|
|
153
|
+
},
|
|
154
|
+
dispose() {
|
|
155
|
+
clearTimeout(timer)
|
|
156
|
+
if (onAbort) controller.signal.removeEventListener('abort', onAbort)
|
|
157
|
+
},
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
async function evaluateCase<TInput>(
|
|
162
|
+
config: ExperimentConfig<TInput>,
|
|
163
|
+
evalCase: EvalCase<TInput>,
|
|
164
|
+
threshold: number,
|
|
165
|
+
timeoutMs: number | undefined,
|
|
166
|
+
): Promise<CaseResult> {
|
|
167
|
+
const deadline = openCaseDeadline(timeoutMs)
|
|
168
|
+
try {
|
|
169
|
+
const run = await executeCase(config, evalCase, deadline)
|
|
170
|
+
const scorers = evalCase.scorers ?? config.scorers
|
|
171
|
+
const scores: Record<string, Score> = {}
|
|
172
|
+
|
|
173
|
+
// Scores are keyed by name, so two scorers sharing one collapse:
|
|
174
|
+
// the mean's denominator becomes the count of distinct NAMES and
|
|
175
|
+
// the surviving score is whichever ran last. Two
|
|
176
|
+
// `containsScorer(...)` instances are both called 'contains', so
|
|
177
|
+
// this is easy to hit by accident and silently halves the
|
|
178
|
+
// evidence. Ambiguous results are worse than a loud failure.
|
|
179
|
+
const seen = new Set<string>()
|
|
180
|
+
for (const scorer of scorers) {
|
|
181
|
+
if (seen.has(scorer.name)) {
|
|
182
|
+
throw new Error(
|
|
183
|
+
`Duplicate scorer name "${scorer.name}" for case "${evalCase.name}". Scores are keyed by name, so the second would overwrite the first and the case mean would be computed over the wrong denominator. Give each scorer a distinct name.`,
|
|
184
|
+
)
|
|
185
|
+
}
|
|
186
|
+
seen.add(scorer.name)
|
|
187
|
+
scores[scorer.name] = await safeScore(scorer, run, evalCase, deadline)
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
// Only scores that were actually produced count — an unavailable
|
|
191
|
+
// scorer leaves the denominator alone rather than dragging the
|
|
192
|
+
// mean toward zero with a measurement that never happened.
|
|
193
|
+
const values = Object.values(scores)
|
|
194
|
+
.filter((s) => s.unavailable !== true)
|
|
195
|
+
.map((s) => s.score)
|
|
196
|
+
const mean = values.length === 0 ? 0 : values.reduce((a, b) => a + b, 0) / values.length
|
|
197
|
+
|
|
198
|
+
// A gate miss fails the case whatever the mean says. Averaging a
|
|
199
|
+
// hard check together with a fuzzy one lets three good scores
|
|
200
|
+
// carry a zero: trajectory 0 + completion 1 + contains 1 +
|
|
201
|
+
// judge 1 averages to 0.75 and reports passed at a threshold of
|
|
202
|
+
// 0.75 — the exact regression the harness exists to catch,
|
|
203
|
+
// reported green. An UNAVAILABLE gate does not fail the case;
|
|
204
|
+
// it did not judge the run at all, which is the inconclusive
|
|
205
|
+
// path, not a failure.
|
|
206
|
+
const failedGates = scorers
|
|
207
|
+
.filter((s) => s.severity === 'gate')
|
|
208
|
+
.filter((s) => {
|
|
209
|
+
const score = scores[s.name]
|
|
210
|
+
if (!score || score.unavailable === true) return false
|
|
211
|
+
return score.score < (s.threshold ?? threshold)
|
|
212
|
+
})
|
|
213
|
+
.map((s) => s.name)
|
|
214
|
+
|
|
215
|
+
const status: CaseStatus =
|
|
216
|
+
Object.keys(scores).length > 0 && values.length === 0
|
|
217
|
+
? 'inconclusive'
|
|
218
|
+
: failedGates.length > 0
|
|
219
|
+
? 'failed'
|
|
220
|
+
: mean >= threshold
|
|
221
|
+
? 'passed'
|
|
222
|
+
: 'failed'
|
|
223
|
+
return {
|
|
224
|
+
case: evalCase.name,
|
|
225
|
+
run,
|
|
226
|
+
scores,
|
|
227
|
+
mean,
|
|
228
|
+
status,
|
|
229
|
+
passed: status === 'passed',
|
|
230
|
+
// Named, not just counted: "failed" with a mean of 0.75 sends
|
|
231
|
+
// somebody to read four scores and guess which one mattered.
|
|
232
|
+
...(failedGates.length > 0 ? { failedGates } : {}),
|
|
233
|
+
}
|
|
234
|
+
} finally {
|
|
235
|
+
deadline.dispose()
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
|
|
168
239
|
/**
|
|
169
240
|
* A case that throws is a RESULT, not a crash. An eval suite whose first
|
|
170
241
|
* broken case aborts the run tells you nothing about the other forty.
|
|
@@ -172,38 +243,12 @@ export async function runExperiment<TInput>(
|
|
|
172
243
|
async function executeCase<TInput>(
|
|
173
244
|
config: ExperimentConfig<TInput>,
|
|
174
245
|
evalCase: EvalCase<TInput>,
|
|
246
|
+
deadline: CaseDeadline,
|
|
175
247
|
): Promise<EvalRun> {
|
|
176
248
|
const startedAt = Date.now()
|
|
177
|
-
const controller = new AbortController()
|
|
178
|
-
const timeoutMs = config.timeoutMs
|
|
179
|
-
// The signal is handed to `run` so a closure that drives `query()` can
|
|
180
|
-
// pass it through and actually stop working. A closure that ignores it
|
|
181
|
-
// is merely detached rather than stopped — the same bargain every other
|
|
182
|
-
// deadline in the SDK makes — but the SUITE is unblocked either way,
|
|
183
|
-
// which is the part that was missing.
|
|
184
|
-
const timer =
|
|
185
|
-
timeoutMs !== undefined && timeoutMs > 0
|
|
186
|
-
? setTimeout(
|
|
187
|
-
() => controller.abort(new Error(`case timed out after ${timeoutMs}ms`)),
|
|
188
|
-
timeoutMs,
|
|
189
|
-
)
|
|
190
|
-
: undefined
|
|
191
|
-
|
|
192
|
-
const deadline =
|
|
193
|
-
timer === undefined
|
|
194
|
-
? undefined
|
|
195
|
-
: new Promise<never>((_resolve, reject) => {
|
|
196
|
-
controller.signal.addEventListener('abort', () => reject(controller.signal.reason), {
|
|
197
|
-
once: true,
|
|
198
|
-
})
|
|
199
|
-
})
|
|
200
|
-
|
|
201
249
|
try {
|
|
202
|
-
const work = config.run(evalCase.input, evalCase,
|
|
203
|
-
|
|
204
|
-
// rejection after the race has already been decided.
|
|
205
|
-
if (deadline) work.catch(() => {})
|
|
206
|
-
return await (deadline ? Promise.race([work, deadline]) : work)
|
|
250
|
+
const work = config.run(evalCase.input, evalCase, deadline.signal)
|
|
251
|
+
return await deadline.race(work)
|
|
207
252
|
} catch (err) {
|
|
208
253
|
return {
|
|
209
254
|
output: null,
|
|
@@ -217,16 +262,16 @@ async function executeCase<TInput>(
|
|
|
217
262
|
durationMs: Date.now() - startedAt,
|
|
218
263
|
error: err instanceof Error ? err.message : String(err),
|
|
219
264
|
}
|
|
220
|
-
} finally {
|
|
221
|
-
// Only the timer needs clearing. Aborting here would fire a spurious
|
|
222
|
-
// signal at a `run` that has already settled — the deadline branch
|
|
223
|
-
// has aborted already, and every other path is done.
|
|
224
|
-
clearTimeout(timer)
|
|
225
265
|
}
|
|
226
266
|
}
|
|
227
267
|
|
|
228
268
|
/** A throwing scorer scores zero with the throw as its reason. */
|
|
229
|
-
async function safeScore(
|
|
269
|
+
async function safeScore(
|
|
270
|
+
scorer: Scorer,
|
|
271
|
+
run: EvalRun,
|
|
272
|
+
evalCase: EvalCase,
|
|
273
|
+
deadline: CaseDeadline,
|
|
274
|
+
): Promise<Score> {
|
|
230
275
|
// A run that THREW scores zero, whatever the scorer would have said.
|
|
231
276
|
// `executeCase` catches the failure and returns an empty run, and an
|
|
232
277
|
// empty run walks straight into every scorer's happy path:
|
|
@@ -239,7 +284,11 @@ async function safeScore(scorer: Scorer, run: EvalRun, evalCase: EvalCase): Prom
|
|
|
239
284
|
}
|
|
240
285
|
|
|
241
286
|
try {
|
|
242
|
-
|
|
287
|
+
deadline.signal.throwIfAborted()
|
|
288
|
+
// Defer invocation into the promise so a synchronous scorer throw is
|
|
289
|
+
// raced and observed by the same path as an asynchronous rejection.
|
|
290
|
+
const work = Promise.resolve().then(() => scorer.score(run, evalCase, deadline.signal))
|
|
291
|
+
return await deadline.race(work)
|
|
243
292
|
} catch (err) {
|
|
244
293
|
// UNAVAILABLE, not zero. A scorer that threw did not judge the run
|
|
245
294
|
// badly — it failed to judge it at all, and the two call for
|
package/src/eval/judge.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { collectChatCompletion } from '../provider/collect-chat-completion.js'
|
|
2
|
+
import { resolveStreamIdleTimeoutMs, withStreamIdleTimeout } from '../provider/idle-timeout.js'
|
|
2
3
|
import type { LLMProvider } from '../types/provider/interface.js'
|
|
3
4
|
import type { EvalCase, EvalRun, Score, Scorer } from './types.js'
|
|
4
5
|
|
|
@@ -60,6 +61,12 @@ export interface JudgeScorerConfig {
|
|
|
60
61
|
* truncation rather than the run.
|
|
61
62
|
*/
|
|
62
63
|
maxOutputChars?: number
|
|
64
|
+
/**
|
|
65
|
+
* Milliseconds without a judge chunk before its provider stream is
|
|
66
|
+
* treated as stalled. Defaults to the SDK's finite provider-stream idle
|
|
67
|
+
* bound. Set `0` only for explicit unbounded compatibility.
|
|
68
|
+
*/
|
|
69
|
+
streamIdleTimeoutMs?: number
|
|
63
70
|
}
|
|
64
71
|
|
|
65
72
|
const DEFAULT_SCALE = 4
|
|
@@ -198,6 +205,9 @@ function buildPrompt(
|
|
|
198
205
|
|
|
199
206
|
export function judgeScorer(config: JudgeScorerConfig): Scorer {
|
|
200
207
|
const scale = config.scale ?? DEFAULT_SCALE
|
|
208
|
+
const provider = withStreamIdleTimeout(config.provider, {
|
|
209
|
+
idleTimeoutMs: resolveStreamIdleTimeoutMs(config.streamIdleTimeoutMs),
|
|
210
|
+
})
|
|
201
211
|
if (!Number.isInteger(scale) || scale < 1) {
|
|
202
212
|
throw new Error(`judgeScorer: scale must be a positive integer, got ${scale}`)
|
|
203
213
|
}
|
|
@@ -209,15 +219,16 @@ export function judgeScorer(config: JudgeScorerConfig): Scorer {
|
|
|
209
219
|
|
|
210
220
|
return {
|
|
211
221
|
name: config.name ?? 'judge',
|
|
212
|
-
async score(run: EvalRun, evalCase: EvalCase): Promise<Score> {
|
|
222
|
+
async score(run: EvalRun, evalCase: EvalCase, signal?: AbortSignal): Promise<Score> {
|
|
213
223
|
const response = await collectChatCompletion(
|
|
214
|
-
|
|
224
|
+
provider.chatStream({
|
|
215
225
|
model: config.model,
|
|
216
226
|
messages: [{ role: 'user', content: buildPrompt(config, run, evalCase, scale) }],
|
|
217
227
|
// The same run must grade the same way twice, or a
|
|
218
228
|
// regression cannot be told from sampling noise.
|
|
219
229
|
temperature: 0,
|
|
220
230
|
maxTokens: 512,
|
|
231
|
+
...(signal ? { signal } : {}),
|
|
221
232
|
}),
|
|
222
233
|
)
|
|
223
234
|
|
package/src/eval/types.ts
CHANGED
|
@@ -98,7 +98,13 @@ export type ScorerSeverity = 'gate' | 'soft'
|
|
|
98
98
|
|
|
99
99
|
export interface Scorer {
|
|
100
100
|
name: string
|
|
101
|
-
|
|
101
|
+
/**
|
|
102
|
+
* Produce one measurement. `runExperiment` passes the case's shared
|
|
103
|
+
* deadline signal, which covers both execution and every scorer. A pure
|
|
104
|
+
* scorer may ignore it; a scorer that owns I/O should carry it to that
|
|
105
|
+
* transport so timed-out work is stopped rather than merely abandoned.
|
|
106
|
+
*/
|
|
107
|
+
score(run: EvalRun, evalCase: EvalCase, signal?: AbortSignal): Score | Promise<Score>
|
|
102
108
|
/** See {@link ScorerSeverity}. Default `soft`. */
|
|
103
109
|
severity?: ScorerSeverity
|
|
104
110
|
/**
|
|
@@ -40,6 +40,7 @@ import { generateTaskId } from '../../utils/id.js'
|
|
|
40
40
|
import { SCOPE_ATTRIBUTE } from '../../utils/log/types.js'
|
|
41
41
|
import { type Logger, resolveLogger } from '../../utils/logger.js'
|
|
42
42
|
import { requireOpenProject } from '../project/lifecycle.js'
|
|
43
|
+
import { type TopicManagerDependency, resolveTopicManager } from '../topic/dependency.js'
|
|
43
44
|
import type { TopicManager } from '../topic/lifecycle.js'
|
|
44
45
|
|
|
45
46
|
/**
|
|
@@ -61,19 +62,11 @@ import type { TopicManager } from '../topic/lifecycle.js'
|
|
|
61
62
|
* registry deny-by-default while matching pattern doc §7.1 (lazy workspace
|
|
62
63
|
* provisioning).
|
|
63
64
|
*/
|
|
64
|
-
|
|
65
|
+
interface AgentManagerBaseDeps {
|
|
65
66
|
readonly sessionStore: SessionStore
|
|
66
67
|
readonly workspaceRegistry: WorkspaceBackendRegistry
|
|
67
68
|
readonly summaryMaterializer: SessionSummaryMaterializer
|
|
68
69
|
readonly capacity: CapacityValidator
|
|
69
|
-
/**
|
|
70
|
-
* Gate session creation on the parent Topic being `'open'` via
|
|
71
|
-
* {@link TopicManager.requireOpen}. Added in Phase 2.6 to close the
|
|
72
|
-
* archive-gate gap flagged by the Phase 2.5 commit: without this,
|
|
73
|
-
* `TopicManager.archive` was best-effort because spawn could still
|
|
74
|
-
* attach a live session under an archived Thread.
|
|
75
|
-
*/
|
|
76
|
-
readonly threadManager: TopicManager
|
|
77
70
|
|
|
78
71
|
/**
|
|
79
72
|
* A pre-built logger. No in-package caller threads a real one today —
|
|
@@ -89,6 +82,16 @@ export interface AgentManagerDeps {
|
|
|
89
82
|
readonly log?: Logger
|
|
90
83
|
}
|
|
91
84
|
|
|
85
|
+
/**
|
|
86
|
+
* Dependencies for {@link AgentManager}.
|
|
87
|
+
*
|
|
88
|
+
* `topicManager` gates child-session creation on the parent Topic being open.
|
|
89
|
+
* The deprecated `threadManager` spelling remains accepted for one migration
|
|
90
|
+
* window through {@link TopicManagerDependency}; new callers use
|
|
91
|
+
* `topicManager`.
|
|
92
|
+
*/
|
|
93
|
+
export type AgentManagerDeps = AgentManagerBaseDeps & TopicManagerDependency
|
|
94
|
+
|
|
92
95
|
interface ChildSpawnRecord {
|
|
93
96
|
subSessionId: SubSessionId
|
|
94
97
|
childSessionId: SessionId
|
|
@@ -138,6 +141,7 @@ export class AgentManager {
|
|
|
138
141
|
/** One provisioning at a time per parent — see {@link provisionSpawn}. */
|
|
139
142
|
private spawnLocks: Map<SessionId, Promise<void>> = new Map()
|
|
140
143
|
private deps: AgentManagerDeps
|
|
144
|
+
private topicManager: TopicManager
|
|
141
145
|
|
|
142
146
|
constructor(
|
|
143
147
|
registry: AgentRegistry,
|
|
@@ -146,8 +150,11 @@ export class AgentManager {
|
|
|
146
150
|
) {
|
|
147
151
|
this.registry = registry
|
|
148
152
|
this.config = { ...AGENT_MANAGER_DEFAULTS, ...config }
|
|
149
|
-
this.log = resolveLogger(deps.log).child({
|
|
153
|
+
this.log = resolveLogger(deps.log).child({
|
|
154
|
+
[SCOPE_ATTRIBUTE]: 'manager/agent/lifecycle',
|
|
155
|
+
})
|
|
150
156
|
this.deps = deps
|
|
157
|
+
this.topicManager = resolveTopicManager(deps)
|
|
151
158
|
}
|
|
152
159
|
|
|
153
160
|
async sendMessage(
|
|
@@ -387,6 +394,8 @@ export class AgentManager {
|
|
|
387
394
|
model: options.configOverrides?.model ?? 'default',
|
|
388
395
|
tokenBudget: allocatedTokens,
|
|
389
396
|
timeoutMs: options.budgetAllocation?.timeoutMs ?? this.config.childTimeoutMs,
|
|
397
|
+
streamIdleTimeoutMs: options.configOverrides?.streamIdleTimeoutMs,
|
|
398
|
+
maxRequestRichContentBytes: options.configOverrides?.maxRequestRichContentBytes,
|
|
390
399
|
temperature: options.configOverrides?.temperature,
|
|
391
400
|
parentSpan: options.configOverrides?.parentSpan,
|
|
392
401
|
maxIterations: options.configOverrides?.maxIterations,
|
|
@@ -408,6 +417,13 @@ export class AgentManager {
|
|
|
408
417
|
}
|
|
409
418
|
}
|
|
410
419
|
|
|
420
|
+
// Lineage is assigned by the spawning manager, not proposed by the
|
|
421
|
+
// child definition. A fixed configBuilder can ignore its inputs and
|
|
422
|
+
// configOverrides is caller-authored; neither may turn a child back
|
|
423
|
+
// into depth zero or attach it to a different parent run.
|
|
424
|
+
childConfig.parentRunId = context.parentRunId
|
|
425
|
+
childConfig.depth = context.depth + 1
|
|
426
|
+
|
|
411
427
|
// Stamped AFTER the builder, for the fourth time and the same reason:
|
|
412
428
|
// a `configBuilder` is written by whoever registered the agent and
|
|
413
429
|
// cannot forward a field it was never told about. A scope applied
|
|
@@ -668,7 +684,7 @@ export class AgentManager {
|
|
|
668
684
|
// partial/legacy path).
|
|
669
685
|
const store = this.deps.sessionStore
|
|
670
686
|
|
|
671
|
-
//
|
|
687
|
+
// Topic archive gate — runs FIRST so an archived Topic fails fastest
|
|
672
688
|
// with the correct error (not DelegationCapacityExceeded or a project
|
|
673
689
|
// lookup error). Phase 2.6 closes the gap the Phase 2.5 commit
|
|
674
690
|
// flagged: without it, `TopicManager.archive` could be undermined by
|
|
@@ -678,7 +694,7 @@ export class AgentManager {
|
|
|
678
694
|
// callers of `SessionStore.createSession` bypass it — the store layer
|
|
679
695
|
// is intentionally unaware of topic status to preserve its
|
|
680
696
|
// single-responsibility boundary.
|
|
681
|
-
await this.
|
|
697
|
+
await this.topicManager.requireOpen(context.topicId, context.tenantId)
|
|
682
698
|
|
|
683
699
|
// Parent session cross-check: validate that `options.parentSessionId`
|
|
684
700
|
// exists for this tenant AND lives under the same topic as the
|
|
@@ -10,6 +10,7 @@ import type {
|
|
|
10
10
|
ConnectorExecuteResult,
|
|
11
11
|
ConnectorInstance,
|
|
12
12
|
ConnectorLifecycleEvent,
|
|
13
|
+
ConnectorOperationOptions,
|
|
13
14
|
CredentialVault,
|
|
14
15
|
EnvironmentDescriptor,
|
|
15
16
|
ExecutionContextConfig,
|
|
@@ -205,9 +206,10 @@ export class EnvironmentConnectorManager {
|
|
|
205
206
|
async healthCheck(
|
|
206
207
|
envId: EnvironmentId,
|
|
207
208
|
instanceId: import('../../types/ids/index.js').ConnectorInstanceId,
|
|
209
|
+
options?: ConnectorOperationOptions,
|
|
208
210
|
): Promise<boolean> {
|
|
209
211
|
const state = this.getEnvironmentOrThrow(envId)
|
|
210
|
-
return state.manager.healthCheck(instanceId)
|
|
212
|
+
return state.manager.healthCheck(instanceId, options)
|
|
211
213
|
}
|
|
212
214
|
|
|
213
215
|
listInstances(envId: EnvironmentId): ConnectorInstance[] {
|