@namzu/sdk 34.2.0 → 35.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 +133 -0
- package/README.md +2 -6
- package/dist/agents/PipelineAgent.d.ts.map +1 -1
- package/dist/agents/PipelineAgent.js +118 -100
- package/dist/agents/PipelineAgent.js.map +1 -1
- package/dist/agents/ReactiveAgent.d.ts.map +1 -1
- package/dist/agents/ReactiveAgent.js +2 -0
- package/dist/agents/ReactiveAgent.js.map +1 -1
- package/dist/agents/RouterAgent.d.ts.map +1 -1
- package/dist/agents/RouterAgent.js +105 -61
- package/dist/agents/RouterAgent.js.map +1 -1
- package/dist/agents/SupervisorAgent.d.ts.map +1 -1
- package/dist/agents/SupervisorAgent.js +8 -4
- package/dist/agents/SupervisorAgent.js.map +1 -1
- package/dist/agents/budget.d.ts +6 -0
- package/dist/agents/budget.d.ts.map +1 -0
- package/dist/agents/budget.js +33 -0
- package/dist/agents/budget.js.map +1 -0
- package/dist/agents/explore.d.ts +20 -0
- package/dist/agents/explore.d.ts.map +1 -0
- package/dist/agents/explore.js +26 -0
- package/dist/agents/explore.js.map +1 -0
- package/dist/agents/file-definitions.d.ts +80 -0
- package/dist/agents/file-definitions.d.ts.map +1 -0
- package/dist/agents/file-definitions.js +179 -0
- package/dist/agents/file-definitions.js.map +1 -0
- package/dist/agents/index.d.ts +3 -0
- package/dist/agents/index.d.ts.map +1 -1
- package/dist/agents/index.js +2 -0
- package/dist/agents/index.js.map +1 -1
- package/dist/bridge/a2a/mapper.d.ts.map +1 -1
- package/dist/bridge/a2a/mapper.js +6 -0
- package/dist/bridge/a2a/mapper.js.map +1 -1
- package/dist/bridge/sse/mapper.d.ts.map +1 -1
- package/dist/bridge/sse/mapper.js +22 -0
- package/dist/bridge/sse/mapper.js.map +1 -1
- package/dist/bus/lock.d.ts.map +1 -1
- package/dist/bus/lock.js +1 -10
- package/dist/bus/lock.js.map +1 -1
- package/dist/compaction/consolidation.d.ts +31 -0
- package/dist/compaction/consolidation.d.ts.map +1 -0
- package/dist/compaction/consolidation.js +63 -0
- package/dist/compaction/consolidation.js.map +1 -0
- package/dist/compaction/factory.d.ts.map +1 -1
- package/dist/compaction/factory.js +3 -0
- package/dist/compaction/factory.js.map +1 -1
- package/dist/compaction/index.d.ts +6 -1
- package/dist/compaction/index.d.ts.map +1 -1
- package/dist/compaction/index.js +6 -0
- package/dist/compaction/index.js.map +1 -1
- package/dist/compaction/manager.d.ts +7 -0
- package/dist/compaction/manager.d.ts.map +1 -1
- package/dist/compaction/manager.js +31 -0
- package/dist/compaction/manager.js.map +1 -1
- package/dist/compaction/plan.d.ts +23 -0
- package/dist/compaction/plan.d.ts.map +1 -1
- package/dist/compaction/plan.js +41 -24
- package/dist/compaction/plan.js.map +1 -1
- package/dist/compaction/salience/bm25.d.ts +26 -0
- package/dist/compaction/salience/bm25.d.ts.map +1 -0
- package/dist/compaction/salience/bm25.js +56 -0
- package/dist/compaction/salience/bm25.js.map +1 -0
- package/dist/compaction/salience/goal.d.ts +21 -0
- package/dist/compaction/salience/goal.d.ts.map +1 -0
- package/dist/compaction/salience/goal.js +32 -0
- package/dist/compaction/salience/goal.js.map +1 -0
- package/dist/compaction/salience/index.d.ts +4 -0
- package/dist/compaction/salience/index.d.ts.map +1 -0
- package/dist/compaction/salience/index.js +4 -0
- package/dist/compaction/salience/index.js.map +1 -0
- package/dist/compaction/salience/minhash.d.ts +17 -0
- package/dist/compaction/salience/minhash.d.ts.map +1 -0
- package/dist/compaction/salience/minhash.js +54 -0
- package/dist/compaction/salience/minhash.js.map +1 -0
- package/dist/compaction/salience/score.d.ts +64 -0
- package/dist/compaction/salience/score.d.ts.map +1 -0
- package/dist/compaction/salience/score.js +256 -0
- package/dist/compaction/salience/score.js.map +1 -0
- package/dist/compaction/salience/tokenize.d.ts +20 -0
- package/dist/compaction/salience/tokenize.d.ts.map +1 -0
- package/dist/compaction/salience/tokenize.js +92 -0
- package/dist/compaction/salience/tokenize.js.map +1 -0
- package/dist/compaction/salience/working-set.d.ts +59 -0
- package/dist/compaction/salience/working-set.d.ts.map +1 -0
- package/dist/compaction/salience/working-set.js +137 -0
- package/dist/compaction/salience/working-set.js.map +1 -0
- package/dist/compaction/serializer.d.ts +2 -0
- package/dist/compaction/serializer.d.ts.map +1 -1
- package/dist/compaction/serializer.js +15 -0
- package/dist/compaction/serializer.js.map +1 -1
- package/dist/compaction/token-estimate.d.ts +13 -0
- package/dist/compaction/token-estimate.d.ts.map +1 -0
- package/dist/compaction/token-estimate.js +58 -0
- package/dist/compaction/token-estimate.js.map +1 -0
- package/dist/compaction/tool-result-editing.d.ts +10 -2
- package/dist/compaction/tool-result-editing.d.ts.map +1 -1
- package/dist/compaction/tool-result-editing.js +22 -24
- package/dist/compaction/tool-result-editing.js.map +1 -1
- package/dist/compaction/types.d.ts +22 -1
- package/dist/compaction/types.d.ts.map +1 -1
- package/dist/compaction/wire.d.ts +3 -1
- package/dist/compaction/wire.d.ts.map +1 -1
- package/dist/compaction/wire.js +2 -0
- package/dist/compaction/wire.js.map +1 -1
- package/dist/config/runtime.d.ts +58 -28
- package/dist/config/runtime.d.ts.map +1 -1
- package/dist/config/runtime.js +13 -1
- package/dist/config/runtime.js.map +1 -1
- package/dist/connector/builtins/http.d.ts.map +1 -1
- package/dist/connector/builtins/http.js +2 -8
- package/dist/connector/builtins/http.js.map +1 -1
- package/dist/connector/builtins/webhook.js +2 -2
- package/dist/connector/builtins/webhook.js.map +1 -1
- package/dist/connector/mcp/adapter.d.ts +2 -0
- package/dist/connector/mcp/adapter.d.ts.map +1 -1
- package/dist/connector/mcp/adapter.js +30 -0
- package/dist/connector/mcp/adapter.js.map +1 -1
- package/dist/connector/tools/adapter.js +2 -2
- package/dist/connector/tools/adapter.js.map +1 -1
- package/dist/connector/tools/definitions.js +2 -2
- package/dist/connector/tools/definitions.js.map +1 -1
- package/dist/constants/compaction/index.d.ts +1 -0
- package/dist/constants/compaction/index.d.ts.map +1 -1
- package/dist/constants/compaction/index.js +1 -0
- package/dist/constants/compaction/index.js.map +1 -1
- package/dist/constants/telemetry/index.d.ts +0 -1
- package/dist/constants/telemetry/index.d.ts.map +1 -1
- package/dist/constants/telemetry/index.js +0 -1
- package/dist/constants/telemetry/index.js.map +1 -1
- package/dist/contracts/a2a.d.ts +5 -5
- package/dist/contracts/api.d.ts +4 -2
- package/dist/contracts/api.d.ts.map +1 -1
- package/dist/contracts/schemas.d.ts +1 -15
- package/dist/contracts/schemas.d.ts.map +1 -1
- package/dist/contracts/schemas.js +5 -20
- package/dist/contracts/schemas.js.map +1 -1
- package/dist/invariants/index.d.ts +1 -1
- package/dist/manager/agent/lifecycle.d.ts +2 -18
- package/dist/manager/agent/lifecycle.d.ts.map +1 -1
- package/dist/manager/agent/lifecycle.js +373 -340
- package/dist/manager/agent/lifecycle.js.map +1 -1
- package/dist/manager/run/persistence.d.ts +3 -0
- package/dist/manager/run/persistence.d.ts.map +1 -1
- package/dist/manager/run/persistence.js +35 -5
- package/dist/manager/run/persistence.js.map +1 -1
- package/dist/plugin/index.d.ts +2 -0
- package/dist/plugin/index.d.ts.map +1 -1
- package/dist/plugin/index.js +1 -0
- package/dist/plugin/index.js.map +1 -1
- package/dist/plugin/shell-hook.d.ts +128 -0
- package/dist/plugin/shell-hook.d.ts.map +1 -0
- package/dist/plugin/shell-hook.js +299 -0
- package/dist/plugin/shell-hook.js.map +1 -0
- package/dist/prompt/coding-agent-doctrine.d.ts +63 -0
- package/dist/prompt/coding-agent-doctrine.d.ts.map +1 -0
- package/dist/prompt/coding-agent-doctrine.js +100 -0
- package/dist/prompt/coding-agent-doctrine.js.map +1 -0
- package/dist/prompt/index.d.ts +2 -0
- package/dist/prompt/index.d.ts.map +1 -1
- package/dist/prompt/index.js +1 -0
- package/dist/prompt/index.js.map +1 -1
- package/dist/provider/errors.d.ts +1 -1
- package/dist/provider/errors.js +1 -1
- package/dist/provider/fallback.d.ts +2 -0
- package/dist/provider/fallback.d.ts.map +1 -1
- package/dist/provider/fallback.js +3 -1
- package/dist/provider/fallback.js.map +1 -1
- package/dist/provider/retry.d.ts +2 -0
- package/dist/provider/retry.d.ts.map +1 -1
- package/dist/provider/retry.js +3 -1
- package/dist/provider/retry.js.map +1 -1
- package/dist/provider/token-budget.d.ts +13 -0
- package/dist/provider/token-budget.d.ts.map +1 -0
- package/dist/provider/token-budget.js +102 -0
- package/dist/provider/token-budget.js.map +1 -0
- package/dist/public-runtime.d.ts +12 -12
- package/dist/public-runtime.d.ts.map +1 -1
- package/dist/public-runtime.js +14 -9
- package/dist/public-runtime.js.map +1 -1
- package/dist/public-tools.d.ts +2 -0
- package/dist/public-tools.d.ts.map +1 -1
- package/dist/public-tools.js +2 -0
- package/dist/public-tools.js.map +1 -1
- package/dist/public-types.d.ts +12 -2
- package/dist/public-types.d.ts.map +1 -1
- package/dist/registry/command/kernel-commands.d.ts.map +1 -1
- package/dist/registry/command/kernel-commands.js +18 -6
- package/dist/registry/command/kernel-commands.js.map +1 -1
- package/dist/registry/tool/execute.d.ts.map +1 -1
- package/dist/registry/tool/execute.js +4 -1
- package/dist/registry/tool/execute.js.map +1 -1
- package/dist/run/LimitChecker.js +1 -1
- package/dist/run/LimitChecker.js.map +1 -1
- package/dist/run/drain.js +1 -1
- package/dist/run/reporter.d.ts.map +1 -1
- package/dist/run/reporter.js +15 -0
- package/dist/run/reporter.js.map +1 -1
- package/dist/run/token-budget.d.ts +108 -0
- package/dist/run/token-budget.d.ts.map +1 -0
- package/dist/run/token-budget.js +591 -0
- package/dist/run/token-budget.js.map +1 -0
- package/dist/runtime/jobs/registry.d.ts +29 -0
- package/dist/runtime/jobs/registry.d.ts.map +1 -1
- package/dist/runtime/jobs/registry.js +98 -18
- package/dist/runtime/jobs/registry.js.map +1 -1
- package/dist/runtime/query/checkpoint.d.ts.map +1 -1
- package/dist/runtime/query/checkpoint.js +10 -3
- package/dist/runtime/query/checkpoint.js.map +1 -1
- package/dist/runtime/query/context.d.ts +2 -26
- package/dist/runtime/query/context.d.ts.map +1 -1
- package/dist/runtime/query/context.js +1 -29
- package/dist/runtime/query/context.js.map +1 -1
- package/dist/runtime/query/executor.d.ts +12 -9
- package/dist/runtime/query/executor.d.ts.map +1 -1
- package/dist/runtime/query/executor.js +95 -46
- package/dist/runtime/query/executor.js.map +1 -1
- package/dist/runtime/query/guard.d.ts.map +1 -1
- package/dist/runtime/query/guard.js +8 -0
- package/dist/runtime/query/guard.js.map +1 -1
- package/dist/runtime/query/index.d.ts +35 -4
- package/dist/runtime/query/index.d.ts.map +1 -1
- package/dist/runtime/query/index.js +152 -52
- 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 +16 -5
- 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 +98 -30
- package/dist/runtime/query/iteration/phases/compaction.js.map +1 -1
- package/dist/runtime/query/iteration/phases/context.d.ts +2 -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 +29 -7
- package/dist/runtime/query/iteration/phases/tool-review.js.map +1 -1
- package/dist/runtime/query/iteration/phases/working-memory.d.ts.map +1 -1
- package/dist/runtime/query/iteration/phases/working-memory.js +25 -15
- package/dist/runtime/query/iteration/phases/working-memory.js.map +1 -1
- package/dist/runtime/query/plugin-hooks.d.ts +1 -1
- package/dist/runtime/query/plugin-hooks.d.ts.map +1 -1
- package/dist/runtime/query/plugin-hooks.js +20 -1
- package/dist/runtime/query/plugin-hooks.js.map +1 -1
- package/dist/runtime/query/repeat-call.d.ts +20 -2
- package/dist/runtime/query/repeat-call.d.ts.map +1 -1
- package/dist/runtime/query/repeat-call.js +35 -7
- package/dist/runtime/query/repeat-call.js.map +1 -1
- package/dist/runtime/query/result.d.ts.map +1 -1
- package/dist/runtime/query/result.js +9 -0
- package/dist/runtime/query/result.js.map +1 -1
- package/dist/runtime/query/review-policy.d.ts +142 -0
- package/dist/runtime/query/review-policy.d.ts.map +1 -0
- package/dist/runtime/query/review-policy.js +144 -0
- package/dist/runtime/query/review-policy.js.map +1 -0
- package/dist/runtime/query/run-state.d.ts.map +1 -1
- package/dist/runtime/query/run-state.js +4 -0
- package/dist/runtime/query/run-state.js.map +1 -1
- package/dist/runtime/query/steering.d.ts +4 -0
- package/dist/runtime/query/steering.d.ts.map +1 -1
- package/dist/runtime/query/steering.js +29 -0
- package/dist/runtime/query/steering.js.map +1 -1
- package/dist/runtime/query/token-budget.d.ts +7 -0
- package/dist/runtime/query/token-budget.d.ts.map +1 -0
- package/dist/runtime/query/token-budget.js +101 -0
- package/dist/runtime/query/token-budget.js.map +1 -0
- package/dist/runtime/query/tool-output-budget.d.ts +2 -0
- package/dist/runtime/query/tool-output-budget.d.ts.map +1 -1
- package/dist/runtime/query/tool-output-budget.js +29 -11
- package/dist/runtime/query/tool-output-budget.js.map +1 -1
- package/dist/runtime/query/tool-pause.d.ts.map +1 -1
- package/dist/runtime/query/tool-pause.js +4 -2
- package/dist/runtime/query/tool-pause.js.map +1 -1
- package/dist/runtime/query/tooling.d.ts +4 -0
- package/dist/runtime/query/tooling.d.ts.map +1 -1
- package/dist/runtime/query/tooling.js +4 -0
- package/dist/runtime/query/tooling.js.map +1 -1
- package/dist/sandbox/provider/local.d.ts +3 -1
- package/dist/sandbox/provider/local.d.ts.map +1 -1
- package/dist/sandbox/provider/local.js +112 -12
- package/dist/sandbox/provider/local.js.map +1 -1
- package/dist/scheduler/delegating.d.ts +1 -0
- package/dist/scheduler/delegating.d.ts.map +1 -1
- package/dist/scheduler/delegating.js +29 -12
- package/dist/scheduler/delegating.js.map +1 -1
- package/dist/scheduler/local.d.ts +1 -0
- package/dist/scheduler/local.d.ts.map +1 -1
- package/dist/scheduler/local.js +4 -7
- package/dist/scheduler/local.js.map +1 -1
- package/dist/session/index.d.ts +0 -1
- package/dist/session/index.d.ts.map +1 -1
- package/dist/session/index.js +0 -1
- package/dist/session/index.js.map +1 -1
- package/dist/session/workspace/path-builder.d.ts.map +1 -1
- package/dist/session/workspace/path-builder.js +5 -4
- package/dist/session/workspace/path-builder.js.map +1 -1
- package/dist/store/feedback/disk.d.ts.map +1 -1
- package/dist/store/feedback/disk.js +4 -6
- package/dist/store/feedback/disk.js.map +1 -1
- package/dist/store/index.d.ts +2 -0
- package/dist/store/index.d.ts.map +1 -1
- package/dist/store/index.js +1 -0
- package/dist/store/index.js.map +1 -1
- package/dist/store/memory/disk.d.ts.map +1 -1
- package/dist/store/memory/disk.js +3 -12
- package/dist/store/memory/disk.js.map +1 -1
- package/dist/store/run/checkpoint-disk.d.ts +3 -3
- package/dist/store/run/checkpoint-disk.d.ts.map +1 -1
- package/dist/store/run/checkpoint-disk.js +14 -26
- package/dist/store/run/checkpoint-disk.js.map +1 -1
- package/dist/store/run/claim-disk.js +1 -1
- package/dist/store/run/conformance.d.ts +1 -1
- package/dist/store/run/conformance.d.ts.map +1 -1
- package/dist/store/run/conformance.js +41 -33
- package/dist/store/run/conformance.js.map +1 -1
- package/dist/store/run/disk.d.ts.map +1 -1
- package/dist/store/run/disk.js +20 -4
- package/dist/store/run/disk.js.map +1 -1
- package/dist/store/run/token-budget-disk.d.ts +37 -0
- package/dist/store/run/token-budget-disk.d.ts.map +1 -0
- package/dist/store/run/token-budget-disk.js +208 -0
- package/dist/store/run/token-budget-disk.js.map +1 -0
- package/dist/store/session/disk.d.ts +4 -13
- package/dist/store/session/disk.d.ts.map +1 -1
- package/dist/store/session/disk.js +34 -31
- package/dist/store/session/disk.js.map +1 -1
- package/dist/store/session/memory.d.ts +2 -0
- package/dist/store/session/memory.d.ts.map +1 -1
- package/dist/store/session/memory.js +41 -2
- package/dist/store/session/memory.js.map +1 -1
- package/dist/store/task/disk.d.ts.map +1 -1
- package/dist/store/task/disk.js +7 -8
- package/dist/store/task/disk.js.map +1 -1
- package/dist/store/topic/memory.d.ts +2 -0
- package/dist/store/topic/memory.d.ts.map +1 -1
- package/dist/store/topic/memory.js +13 -1
- package/dist/store/topic/memory.js.map +1 -1
- package/dist/test-support/ids.d.ts +4 -19
- package/dist/test-support/ids.d.ts.map +1 -1
- package/dist/test-support/ids.js +51 -59
- package/dist/test-support/ids.js.map +1 -1
- package/dist/tools/advisory/index.d.ts.map +1 -1
- package/dist/tools/advisory/index.js +3 -1
- package/dist/tools/advisory/index.js.map +1 -1
- package/dist/tools/builtins/bash.d.ts +2 -0
- package/dist/tools/builtins/bash.d.ts.map +1 -1
- package/dist/tools/builtins/bash.js +9 -11
- package/dist/tools/builtins/bash.js.map +1 -1
- package/dist/tools/builtins/computer-use.d.ts +2 -2
- package/dist/tools/builtins/computer-use.d.ts.map +1 -1
- package/dist/tools/builtins/computer-use.js +4 -2
- package/dist/tools/builtins/computer-use.js.map +1 -1
- package/dist/tools/builtins/edit.js +2 -2
- package/dist/tools/builtins/edit.js.map +1 -1
- package/dist/tools/builtins/glob.js +3 -3
- package/dist/tools/builtins/glob.js.map +1 -1
- package/dist/tools/builtins/grep.js +2 -2
- package/dist/tools/builtins/grep.js.map +1 -1
- package/dist/tools/builtins/ls.js +2 -2
- package/dist/tools/builtins/ls.js.map +1 -1
- package/dist/tools/builtins/lsp.js +2 -2
- package/dist/tools/builtins/lsp.js.map +1 -1
- package/dist/tools/builtins/read-file.js +2 -2
- package/dist/tools/builtins/read-file.js.map +1 -1
- package/dist/tools/builtins/write-file.js +2 -2
- package/dist/tools/builtins/write-file.js.map +1 -1
- package/dist/tools/coordinator/ask-user-question.d.ts +33 -0
- package/dist/tools/coordinator/ask-user-question.d.ts.map +1 -0
- package/dist/tools/coordinator/ask-user-question.js +237 -0
- package/dist/tools/coordinator/ask-user-question.js.map +1 -0
- package/dist/tools/coordinator/index.d.ts +1 -2
- package/dist/tools/coordinator/index.d.ts.map +1 -1
- package/dist/tools/coordinator/index.js +4 -220
- package/dist/tools/coordinator/index.js.map +1 -1
- package/dist/tools/memory/read.d.ts.map +1 -1
- package/dist/tools/memory/read.js +2 -4
- package/dist/tools/memory/read.js.map +1 -1
- package/dist/tools/paths.d.ts +13 -0
- package/dist/tools/paths.d.ts.map +1 -1
- package/dist/tools/paths.js +53 -0
- package/dist/tools/paths.js.map +1 -1
- package/dist/tools/roster.d.ts +27 -0
- package/dist/tools/roster.d.ts.map +1 -0
- package/dist/tools/roster.js +42 -0
- package/dist/tools/roster.js.map +1 -0
- package/dist/types/agent/base.d.ts +5 -0
- package/dist/types/agent/base.d.ts.map +1 -1
- package/dist/types/agent/pipeline.d.ts +3 -0
- package/dist/types/agent/pipeline.d.ts.map +1 -1
- package/dist/types/agent/router.d.ts +2 -3
- package/dist/types/agent/router.d.ts.map +1 -1
- package/dist/types/agent/scheduler.d.ts +3 -0
- package/dist/types/agent/scheduler.d.ts.map +1 -1
- package/dist/types/agent/task.d.ts +5 -16
- package/dist/types/agent/task.d.ts.map +1 -1
- package/dist/types/agent/task.js.map +1 -1
- package/dist/types/common/index.d.ts.map +1 -1
- package/dist/types/common/index.js +3 -0
- package/dist/types/common/index.js.map +1 -1
- package/dist/types/computer-use/index.d.ts +8 -0
- package/dist/types/computer-use/index.d.ts.map +1 -1
- package/dist/types/computer-use/index.js.map +1 -1
- package/dist/types/hitl/index.d.ts +5 -0
- package/dist/types/hitl/index.d.ts.map +1 -1
- package/dist/types/hitl/index.js.map +1 -1
- package/dist/types/ids/brand.d.ts +5 -47
- package/dist/types/ids/brand.d.ts.map +1 -1
- package/dist/types/ids/brand.js +2 -39
- package/dist/types/ids/brand.js.map +1 -1
- package/dist/types/ids/index.d.ts +59 -69
- package/dist/types/ids/index.d.ts.map +1 -1
- package/dist/types/ids/index.js +12 -10
- package/dist/types/ids/index.js.map +1 -1
- package/dist/types/permission/index.d.ts +9 -0
- package/dist/types/permission/index.d.ts.map +1 -1
- package/dist/types/permission/index.js +9 -1
- package/dist/types/permission/index.js.map +1 -1
- package/dist/types/plugin/index.d.ts +45 -4
- package/dist/types/plugin/index.d.ts.map +1 -1
- package/dist/types/plugin/index.js +7 -0
- package/dist/types/plugin/index.js.map +1 -1
- package/dist/types/run/config.d.ts +3 -0
- package/dist/types/run/config.d.ts.map +1 -1
- package/dist/types/run/emergency.d.ts +5 -0
- package/dist/types/run/emergency.d.ts.map +1 -1
- package/dist/types/run/emergency.js.map +1 -1
- package/dist/types/run/entity.d.ts +6 -2
- package/dist/types/run/entity.d.ts.map +1 -1
- package/dist/types/run/events.d.ts +35 -0
- package/dist/types/run/events.d.ts.map +1 -1
- package/dist/types/run/events.js.map +1 -1
- package/dist/types/run/index.d.ts +1 -0
- package/dist/types/run/index.d.ts.map +1 -1
- package/dist/types/run/index.js +1 -0
- package/dist/types/run/index.js.map +1 -1
- package/dist/types/run/state.d.ts +16 -15
- package/dist/types/run/state.d.ts.map +1 -1
- package/dist/types/run/state.js +41 -22
- package/dist/types/run/state.js.map +1 -1
- package/dist/types/run/stop-reason.d.ts +3 -14
- package/dist/types/run/stop-reason.d.ts.map +1 -1
- package/dist/types/run/token-budget-store.d.ts +29 -0
- package/dist/types/run/token-budget-store.d.ts.map +1 -0
- package/dist/types/run/token-budget-store.js +25 -0
- package/dist/types/run/token-budget-store.js.map +1 -0
- package/dist/types/sandbox/index.d.ts +27 -2
- package/dist/types/sandbox/index.d.ts.map +1 -1
- package/dist/types/sandbox/index.js.map +1 -1
- package/dist/types/session/store.d.ts +8 -0
- package/dist/types/session/store.d.ts.map +1 -1
- package/dist/types/tool/index.d.ts +15 -0
- package/dist/types/tool/index.d.ts.map +1 -1
- package/dist/types/tool/index.js.map +1 -1
- package/dist/utils/frontmatter.d.ts +1 -1
- package/dist/utils/frontmatter.js +1 -1
- package/dist/utils/id-format.d.ts +3 -0
- package/dist/utils/id-format.d.ts.map +1 -0
- package/dist/utils/id-format.js +9 -0
- package/dist/utils/id-format.js.map +1 -0
- package/dist/utils/id.d.ts +65 -32
- package/dist/utils/id.d.ts.map +1 -1
- package/dist/utils/id.js +168 -148
- package/dist/utils/id.js.map +1 -1
- package/dist/utils/log/exception.js +1 -1
- package/dist/utils/log/exception.js.map +1 -1
- package/dist/utils/log/index.d.ts.map +1 -1
- package/dist/utils/log/index.js +1 -2
- package/dist/utils/log/index.js.map +1 -1
- package/dist/utils/log/templates.d.ts.map +1 -1
- package/dist/utils/log/templates.js +0 -1
- package/dist/utils/log/templates.js.map +1 -1
- package/package.json +1 -1
- package/src/agents/AGENTS.md +1 -1
- package/src/agents/PipelineAgent.ts +129 -109
- package/src/agents/ReactiveAgent.ts +2 -0
- package/src/agents/RouterAgent.ts +120 -73
- package/src/agents/SupervisorAgent.ts +12 -4
- package/src/agents/budget.ts +42 -0
- package/src/agents/explore.ts +29 -0
- package/src/agents/file-definitions.ts +237 -0
- package/src/agents/index.ts +15 -0
- package/src/bridge/a2a/mapper.ts +6 -0
- package/src/bridge/sse/mapper.ts +22 -0
- package/src/bus/lock.ts +1 -10
- package/src/compaction/consolidation.ts +79 -0
- package/src/compaction/factory.ts +3 -0
- package/src/compaction/index.ts +34 -4
- package/src/compaction/manager.ts +39 -1
- package/src/compaction/plan.ts +52 -21
- package/src/compaction/salience/bm25.ts +72 -0
- package/src/compaction/salience/goal.ts +44 -0
- package/src/compaction/salience/index.ts +19 -0
- package/src/compaction/salience/minhash.ts +53 -0
- package/src/compaction/salience/score.ts +305 -0
- package/src/compaction/salience/tokenize.ts +89 -0
- package/src/compaction/salience/working-set.ts +187 -0
- package/src/compaction/serializer.ts +16 -0
- package/src/compaction/token-estimate.ts +57 -0
- package/src/compaction/tool-result-editing.ts +28 -26
- package/src/compaction/types.ts +24 -1
- package/src/compaction/wire.ts +5 -1
- package/src/config/runtime.ts +13 -1
- package/src/connector/builtins/http.ts +2 -8
- package/src/connector/builtins/webhook.ts +2 -2
- package/src/connector/mcp/adapter.ts +32 -0
- package/src/connector/tools/adapter.ts +2 -2
- package/src/connector/tools/definitions.ts +2 -2
- package/src/constants/compaction/index.ts +1 -0
- package/src/constants/telemetry/index.ts +0 -1
- package/src/contracts/api.ts +5 -1
- package/src/contracts/schemas.ts +6 -20
- package/src/invariants/index.ts +1 -1
- package/src/manager/agent/lifecycle.ts +380 -352
- package/src/manager/run/persistence.ts +35 -5
- package/src/plugin/index.ts +19 -0
- package/src/plugin/shell-hook.ts +403 -0
- package/src/prompt/coding-agent-doctrine.ts +118 -0
- package/src/prompt/index.ts +8 -0
- package/src/provider/errors.ts +1 -1
- package/src/provider/fallback.ts +4 -1
- package/src/provider/retry.ts +4 -1
- package/src/provider/token-budget.ts +114 -0
- package/src/public-runtime.ts +54 -27
- package/src/public-tools.ts +5 -0
- package/src/public-types.ts +65 -0
- package/src/registry/command/kernel-commands.ts +16 -6
- package/src/registry/tool/execute.ts +4 -1
- package/src/run/LimitChecker.ts +1 -1
- package/src/run/drain.ts +1 -1
- package/src/run/reporter.ts +15 -0
- package/src/run/token-budget.ts +692 -0
- package/src/runtime/jobs/registry.ts +123 -17
- package/src/runtime/query/checkpoint.ts +10 -3
- package/src/runtime/query/context.ts +3 -57
- package/src/runtime/query/executor.ts +128 -58
- package/src/runtime/query/guard.ts +8 -0
- package/src/runtime/query/index.ts +201 -62
- package/src/runtime/query/iteration/index.ts +24 -6
- package/src/runtime/query/iteration/phases/compaction.ts +130 -31
- package/src/runtime/query/iteration/phases/context.ts +2 -0
- package/src/runtime/query/iteration/phases/tool-review.ts +39 -7
- package/src/runtime/query/iteration/phases/working-memory.ts +23 -14
- package/src/runtime/query/plugin-hooks.ts +24 -2
- package/src/runtime/query/repeat-call.ts +42 -7
- package/src/runtime/query/result.ts +9 -0
- package/src/runtime/query/review-policy.ts +231 -0
- package/src/runtime/query/run-state.ts +4 -0
- package/src/runtime/query/steering.ts +32 -0
- package/src/runtime/query/token-budget.ts +127 -0
- package/src/runtime/query/tool-output-budget.ts +33 -10
- package/src/runtime/query/tool-pause.ts +4 -2
- package/src/runtime/query/tooling.ts +8 -0
- package/src/sandbox/provider/local.ts +123 -13
- package/src/scheduler/delegating.ts +35 -13
- package/src/scheduler/local.ts +5 -7
- package/src/session/index.ts +0 -1
- package/src/session/workspace/path-builder.ts +5 -4
- package/src/store/feedback/disk.ts +4 -6
- package/src/store/index.ts +2 -0
- package/src/store/memory/disk.ts +3 -11
- package/src/store/run/checkpoint-disk.ts +14 -27
- package/src/store/run/claim-disk.ts +1 -1
- package/src/store/run/conformance.ts +55 -39
- package/src/store/run/disk.ts +19 -4
- package/src/store/run/token-budget-disk.ts +247 -0
- package/src/store/session/disk.ts +36 -29
- package/src/store/session/memory.ts +38 -1
- package/src/store/task/disk.ts +7 -8
- package/src/store/topic/memory.ts +13 -1
- package/src/test-support/ids.ts +62 -59
- package/src/tools/advisory/index.ts +3 -1
- package/src/tools/builtins/bash.ts +11 -12
- package/src/tools/builtins/computer-use.ts +6 -2
- package/src/tools/builtins/edit.ts +2 -2
- package/src/tools/builtins/glob.ts +3 -3
- package/src/tools/builtins/grep.ts +2 -2
- package/src/tools/builtins/ls.ts +2 -2
- package/src/tools/builtins/lsp.ts +2 -2
- package/src/tools/builtins/read-file.ts +2 -2
- package/src/tools/builtins/write-file.ts +2 -2
- package/src/tools/coordinator/ask-user-question.ts +284 -0
- package/src/tools/coordinator/index.ts +5 -248
- package/src/tools/memory/read.ts +2 -4
- package/src/tools/paths.ts +64 -0
- package/src/tools/roster.ts +46 -0
- package/src/types/agent/base.ts +6 -0
- package/src/types/agent/pipeline.ts +3 -0
- package/src/types/agent/router.ts +2 -3
- package/src/types/agent/scheduler.ts +4 -0
- package/src/types/agent/task.ts +5 -18
- package/src/types/common/index.ts +3 -0
- package/src/types/computer-use/index.ts +8 -0
- package/src/types/hitl/index.ts +5 -0
- package/src/types/ids/brand.ts +5 -48
- package/src/types/ids/index.ts +66 -75
- package/src/types/permission/index.ts +11 -0
- package/src/types/plugin/index.ts +49 -1
- package/src/types/run/config.ts +3 -0
- package/src/types/run/emergency.ts +5 -0
- package/src/types/run/entity.ts +6 -2
- package/src/types/run/events.ts +37 -0
- package/src/types/run/index.ts +1 -0
- package/src/types/run/state.ts +58 -30
- package/src/types/run/stop-reason.ts +3 -14
- package/src/types/run/token-budget-store.ts +54 -0
- package/src/types/sandbox/index.ts +32 -0
- package/src/types/session/store.ts +8 -0
- package/src/types/tool/index.ts +15 -0
- package/src/utils/frontmatter.ts +1 -1
- package/src/utils/id-format.ts +9 -0
- package/src/utils/id.ts +222 -181
- package/src/utils/log/exception.ts +1 -1
- package/src/utils/log/index.ts +1 -2
- package/src/utils/log/templates.ts +0 -1
- package/dist/session/migration/errors.d.ts +0 -26
- package/dist/session/migration/errors.d.ts.map +0 -1
- package/dist/session/migration/errors.js +0 -22
- package/dist/session/migration/errors.js.map +0 -1
- package/dist/session/migration/filesystem.d.ts +0 -122
- package/dist/session/migration/filesystem.d.ts.map +0 -1
- package/dist/session/migration/filesystem.js +0 -379
- package/dist/session/migration/filesystem.js.map +0 -1
- package/dist/session/migration/id-prefix.d.ts +0 -113
- package/dist/session/migration/id-prefix.d.ts.map +0 -1
- package/dist/session/migration/id-prefix.js +0 -132
- package/dist/session/migration/id-prefix.js.map +0 -1
- package/dist/session/migration/index.d.ts +0 -12
- package/dist/session/migration/index.d.ts.map +0 -1
- package/dist/session/migration/index.js +0 -12
- package/dist/session/migration/index.js.map +0 -1
- package/dist/session/migration/marker.d.ts +0 -57
- package/dist/session/migration/marker.d.ts.map +0 -1
- package/dist/session/migration/marker.js +0 -123
- package/dist/session/migration/marker.js.map +0 -1
- package/src/session/migration/errors.ts +0 -23
- package/src/session/migration/filesystem.ts +0 -468
- package/src/session/migration/id-prefix.ts +0 -166
- package/src/session/migration/index.ts +0 -41
- package/src/session/migration/marker.ts +0 -142
|
@@ -8,6 +8,7 @@ import {
|
|
|
8
8
|
} from '../../advisory/index.js'
|
|
9
9
|
import { drainQueuedMessages } from '../../agents/handle.js'
|
|
10
10
|
import { AuthorizationGate } from '../../authorization/gate.js'
|
|
11
|
+
import { consolidationEntry } from '../../compaction/consolidation.js'
|
|
11
12
|
import {
|
|
12
13
|
type ToolHistoryRepairReport,
|
|
13
14
|
repairToolMessageHistory,
|
|
@@ -18,12 +19,12 @@ import { WorkingStateManager } from '../../compaction/manager.js'
|
|
|
18
19
|
import type { ContextReducer } from '../../compaction/reducer.js'
|
|
19
20
|
import { serializeState as serializeWorkingState } from '../../compaction/serializer.js'
|
|
20
21
|
import { restoreWorkingState, snapshotWorkingState } from '../../compaction/wire.js'
|
|
21
|
-
import type
|
|
22
|
-
import { BOOT_EVENT_NAMES } from '../../constants/telemetry/index.js'
|
|
22
|
+
import { type CompactionConfig, CompactionConfigSchema } from '../../config/runtime.js'
|
|
23
23
|
import { TOOL_OUTPUT_DIR_NAME } from '../../constants/tools/index.js'
|
|
24
24
|
import { EmergencySaveManager } from '../../manager/run/emergency.js'
|
|
25
25
|
import type { RunPersistence } from '../../manager/run/persistence.js'
|
|
26
26
|
import { resolveModelPricing } from '../../pricing/index.js'
|
|
27
|
+
import { PromptContributionRegistry } from '../../prompt/contributions.js'
|
|
27
28
|
import { resolveProviderCapabilities } from '../../provider/capabilities.js'
|
|
28
29
|
import { isCallerAbortError } from '../../provider/errors.js'
|
|
29
30
|
import {
|
|
@@ -33,7 +34,8 @@ import {
|
|
|
33
34
|
} from '../../provider/fallback.js'
|
|
34
35
|
import { resolveStreamIdleTimeoutMs, withStreamIdleTimeout } from '../../provider/idle-timeout.js'
|
|
35
36
|
import { type ProviderRetryConfig, withProviderRetry } from '../../provider/retry.js'
|
|
36
|
-
import {
|
|
37
|
+
import { withTokenBudget } from '../../provider/token-budget.js'
|
|
38
|
+
import type { TokenBudget } from '../../run/token-budget.js'
|
|
37
39
|
import type { PathBuilder } from '../../session/workspace/path-builder.js'
|
|
38
40
|
import { resolveAttachments } from '../../store/attachment/index.js'
|
|
39
41
|
import {
|
|
@@ -61,13 +63,13 @@ import type { AuthorizationGateConfig } from '../../types/authorization/index.js
|
|
|
61
63
|
import { NamzuError } from '../../types/errors/index.js'
|
|
62
64
|
import type { InputGuardrailSpec, OutputGuardrailSpec } from '../../types/guardrail/index.js'
|
|
63
65
|
import {
|
|
64
|
-
type CheckpointId,
|
|
65
66
|
type HITLResumeDecision,
|
|
66
67
|
type ResumeHandler,
|
|
67
68
|
autoApproveHandler,
|
|
68
69
|
} from '../../types/hitl/index.js'
|
|
69
|
-
import type { RunId, SessionId, TenantId } from '../../types/ids/index.js'
|
|
70
|
+
import type { CheckpointId, PlanId, RunId, SessionId, TenantId } from '../../types/ids/index.js'
|
|
70
71
|
import type { InvocationState } from '../../types/invocation/index.js'
|
|
72
|
+
import type { MemoryStore } from '../../types/memory/index.js'
|
|
71
73
|
import {
|
|
72
74
|
type AssistantMessage,
|
|
73
75
|
type Message,
|
|
@@ -96,6 +98,7 @@ import type { PromoteMemory } from '../../types/run/memory-promotion.js'
|
|
|
96
98
|
import { memoryCandidateFor } from '../../types/run/memory-promotion.js'
|
|
97
99
|
import type { RunState } from '../../types/run/state.js'
|
|
98
100
|
import type { RunStore } from '../../types/run/store.js'
|
|
101
|
+
import type { TokenBudgetStore } from '../../types/run/token-budget-store.js'
|
|
99
102
|
import type { Sandbox, SandboxProvider } from '../../types/sandbox/index.js'
|
|
100
103
|
import type { ProjectId, TopicId } from '../../types/session/ids.js'
|
|
101
104
|
import type { Skill } from '../../types/skills/index.js'
|
|
@@ -106,9 +109,8 @@ import type { RepairToolCall } from '../../types/tool/repair.js'
|
|
|
106
109
|
import type { BackoffPolicy } from '../../utils/backoff.js'
|
|
107
110
|
import type { ModelPricing } from '../../utils/cost.js'
|
|
108
111
|
import { toErrorMessage } from '../../utils/error.js'
|
|
109
|
-
import { generateRunId } from '../../utils/id.js'
|
|
112
|
+
import { generateCheckpointId, generateRunId } from '../../utils/id.js'
|
|
110
113
|
import { errorAttributes } from '../../utils/log/exception.js'
|
|
111
|
-
import { EVENT_NAME_ATTRIBUTE } from '../../utils/log/types.js'
|
|
112
114
|
import type { Logger } from '../../utils/logger.js'
|
|
113
115
|
import type { BackgroundJobRegistry } from '../jobs/registry.js'
|
|
114
116
|
import { AUTO_APPROVE_POLICY_NAME, createRunApprovalPolicy } from './approval-policy.js'
|
|
@@ -147,12 +149,17 @@ import {
|
|
|
147
149
|
resolveSandboxTeardownTimeoutMs,
|
|
148
150
|
teardownSandbox,
|
|
149
151
|
} from './sandbox-lifecycle.js'
|
|
150
|
-
import type
|
|
152
|
+
import { SteeringBinding, type SteeringChannel } from './steering.js'
|
|
153
|
+
import { resolveQueryBudget } from './token-budget.js'
|
|
151
154
|
import { ToolGrantSet } from './tool-grants.js'
|
|
152
155
|
import { createToolPause } from './tool-pause.js'
|
|
153
156
|
import { ToolingBootstrap } from './tooling.js'
|
|
154
157
|
|
|
155
158
|
export interface QueryParams {
|
|
159
|
+
/** One account shared with the task scheduler and descendant runs. */
|
|
160
|
+
budget?: TokenBudget
|
|
161
|
+
/** Canonical tree ledger; defaults to disk beside the root run. */
|
|
162
|
+
tokenBudgetStore?: TokenBudgetStore
|
|
156
163
|
/**
|
|
157
164
|
* Notice when the model issues the identical tool call repeatedly, and
|
|
158
165
|
* say so on the next `tool_result`. Defaults on.
|
|
@@ -274,6 +281,16 @@ export interface QueryParams {
|
|
|
274
281
|
* background execution is refused rather than silently bypassing the sandbox.
|
|
275
282
|
*/
|
|
276
283
|
backgroundJobs?: BackgroundJobRegistry
|
|
284
|
+
/**
|
|
285
|
+
* Which owner the run's background jobs belong to. Absent, the run id:
|
|
286
|
+
* jobs are stopped when the run ends. A host that wants a job to
|
|
287
|
+
* outlive the turn that started it — a dev server started in one turn
|
|
288
|
+
* and read in the next — passes its session id here and calls
|
|
289
|
+
* `backgroundJobs.killOwner(sessionId)` when the session ends; the run
|
|
290
|
+
* then stops nothing at its end and still tells the model when a job
|
|
291
|
+
* finishes.
|
|
292
|
+
*/
|
|
293
|
+
backgroundJobOwner?: string
|
|
277
294
|
|
|
278
295
|
/**
|
|
279
296
|
* What else goes in this run's prompt.
|
|
@@ -469,6 +486,12 @@ export interface QueryParams {
|
|
|
469
486
|
agentId: string
|
|
470
487
|
agentName: string
|
|
471
488
|
workingDirectory?: string
|
|
489
|
+
/**
|
|
490
|
+
* Directories besides the working directory the file tools may reach,
|
|
491
|
+
* absolute; a sandboxed run binds each read-write. See
|
|
492
|
+
* `ToolContext.additionalDirectories`.
|
|
493
|
+
*/
|
|
494
|
+
additionalDirectories?: readonly string[]
|
|
472
495
|
pricing?: ModelPricing
|
|
473
496
|
enableActivityTracking?: boolean
|
|
474
497
|
messages: Message[]
|
|
@@ -715,6 +738,15 @@ export interface QueryParams {
|
|
|
715
738
|
|
|
716
739
|
compactionConfig?: CompactionConfig
|
|
717
740
|
|
|
741
|
+
/**
|
|
742
|
+
* Where what the run learned is written when it ends: its decisions,
|
|
743
|
+
* discoveries and failures, as one entry tagged `learning`. Episodic
|
|
744
|
+
* memory (the working state) dies with the run; this is the bridge to
|
|
745
|
+
* the semantic store a later run searches. Absent means nothing is
|
|
746
|
+
* written. A store that fails is logged and never fails the run.
|
|
747
|
+
*/
|
|
748
|
+
consolidateInto?: MemoryStore
|
|
749
|
+
|
|
718
750
|
/**
|
|
719
751
|
* Optional neutral working-memory seam. When set, the iteration loop
|
|
720
752
|
* re-renders the provider's string into a single pinned leading system
|
|
@@ -1022,6 +1054,7 @@ export async function* query(params: QueryParams): AsyncGenerator<RunEvent, Run>
|
|
|
1022
1054
|
// generating it twice would silently hand the log and the run two
|
|
1023
1055
|
// different ids.
|
|
1024
1056
|
const runId = params.runId ?? generateRunId()
|
|
1057
|
+
const budget = await resolveQueryBudget(params, runId, selectedResumeState)
|
|
1025
1058
|
const log = RunContextFactory.buildLogger({
|
|
1026
1059
|
agentName: params.agentName,
|
|
1027
1060
|
runConfig,
|
|
@@ -1033,44 +1066,6 @@ export async function* query(params: QueryParams): AsyncGenerator<RunEvent, Run>
|
|
|
1033
1066
|
tenantId: params.tenantId,
|
|
1034
1067
|
})
|
|
1035
1068
|
|
|
1036
|
-
// Boot-time filesystem migration (session-hierarchy.md §13.4.1). First
|
|
1037
|
-
// call per process per root actually runs; subsequent calls short-circuit
|
|
1038
|
-
// via the in-memory guard in `context.ts`. Kept here rather than inside
|
|
1039
|
-
// the synchronous `RunContextFactory.build` so the factory signature stays
|
|
1040
|
-
// sync for tests / non-async call sites.
|
|
1041
|
-
//
|
|
1042
|
-
// The migrator built here — not `ensureMigrated`'s own default — is what
|
|
1043
|
-
// turns the migration facts `DefaultFilesystemMigrator` already computes
|
|
1044
|
-
// into a `namzu.migration.completed` record instead of discarding them.
|
|
1045
|
-
// `ensureMigrated`'s default parameter stays
|
|
1046
|
-
// `NOOP_FILESYSTEM_MIGRATION_SINK` (see `context.ts`), so any other path
|
|
1047
|
-
// that reaches `ensureMigrated` keeps today's silent behaviour.
|
|
1048
|
-
const cwdForMigration = params.workingDirectory ?? process.cwd()
|
|
1049
|
-
const migrationRoot = params.pathBuilder?.rootDir() ?? join(cwdForMigration, '.namzu')
|
|
1050
|
-
const migrationResult = await RunContextFactory.ensureMigrated(
|
|
1051
|
-
migrationRoot,
|
|
1052
|
-
new DefaultFilesystemMigrator(loggingMigrationSink(log)),
|
|
1053
|
-
)
|
|
1054
|
-
// `loggingMigrationSink` only ever hears about `kind: 'migrated'` — the
|
|
1055
|
-
// only outcome `DefaultFilesystemMigrator` ever hands its sink (see the
|
|
1056
|
-
// module doc on `FilesystemMigrationSink`). The other two are logged
|
|
1057
|
-
// here, straight off the resolved result, rather than by widening
|
|
1058
|
-
// `FilesystemMigrationEvent` to carry them: a wider union would need a
|
|
1059
|
-
// new arm in every exhaustive switch already written over it — a major —
|
|
1060
|
-
// for two outcomes `migrationResult.kind` already fully describes.
|
|
1061
|
-
if (migrationResult.kind !== 'migrated') {
|
|
1062
|
-
log.debug('filesystem migration: nothing to do', {
|
|
1063
|
-
[EVENT_NAME_ATTRIBUTE]: BOOT_EVENT_NAMES.MIGRATION_COMPLETED,
|
|
1064
|
-
// `namzu.migration.*`, matching `loggingMigrationSink` — the OTHER
|
|
1065
|
-
// emitter of this same event name. Two emitters of one event writing
|
|
1066
|
-
// two namespaces for the same fact is precisely the collision the
|
|
1067
|
-
// namespaced-key rule exists to stop, and a per-module derivation is
|
|
1068
|
-
// how it would be reintroduced.
|
|
1069
|
-
'namzu.migration.kind': migrationResult.kind,
|
|
1070
|
-
'namzu.migration.marker_path': migrationResult.markerPath,
|
|
1071
|
-
})
|
|
1072
|
-
}
|
|
1073
|
-
|
|
1074
1069
|
// Every model call in the run — the loop's turns, the forced-final
|
|
1075
1070
|
// summary, advisory and compaction side calls — goes through this one
|
|
1076
1071
|
// wrapped provider, so the retry policy cannot be bypassed by a code
|
|
@@ -1102,9 +1097,14 @@ export async function* query(params: QueryParams): AsyncGenerator<RunEvent, Run>
|
|
|
1102
1097
|
idleTimeoutMs: streamIdleTimeoutMs,
|
|
1103
1098
|
log,
|
|
1104
1099
|
})
|
|
1100
|
+
const metered = withTokenBudget(withIdleBound, budget)
|
|
1105
1101
|
return params.retry === false
|
|
1106
|
-
?
|
|
1107
|
-
: withProviderRetry(
|
|
1102
|
+
? metered
|
|
1103
|
+
: withProviderRetry(metered, {
|
|
1104
|
+
config: params.retry,
|
|
1105
|
+
log,
|
|
1106
|
+
canRetry: () => budget.remaining > 0,
|
|
1107
|
+
})
|
|
1108
1108
|
}
|
|
1109
1109
|
// Who is serving right now, for the run RECORD rather than for the request.
|
|
1110
1110
|
//
|
|
@@ -1123,6 +1123,7 @@ export async function* query(params: QueryParams): AsyncGenerator<RunEvent, Run>
|
|
|
1123
1123
|
})),
|
|
1124
1124
|
{
|
|
1125
1125
|
log,
|
|
1126
|
+
canFallback: () => budget.remaining > 0,
|
|
1126
1127
|
onSwap: (to) => {
|
|
1127
1128
|
serving.current = to
|
|
1128
1129
|
// `ctx` is declared below and is initialized before anything can
|
|
@@ -1278,6 +1279,7 @@ export async function* query(params: QueryParams): AsyncGenerator<RunEvent, Run>
|
|
|
1278
1279
|
}
|
|
1279
1280
|
|
|
1280
1281
|
const ctx = RunContextFactory.build({
|
|
1282
|
+
budget,
|
|
1281
1283
|
...(topicState ? { topicPermissionMode: topicState.permissionMode } : {}),
|
|
1282
1284
|
...(params.permissionModeRef ? { permissionModeRef: params.permissionModeRef } : {}),
|
|
1283
1285
|
agentId: params.agentId,
|
|
@@ -1329,13 +1331,19 @@ export async function* query(params: QueryParams): AsyncGenerator<RunEvent, Run>
|
|
|
1329
1331
|
emit: (event) => eventTranslator.emitEvent(event),
|
|
1330
1332
|
})
|
|
1331
1333
|
|
|
1334
|
+
const planApprovalIds = new Map<PlanId, CheckpointId>()
|
|
1332
1335
|
ctx.planManager.setApprovalHandler(async (request) => {
|
|
1336
|
+
let checkpointId = planApprovalIds.get(request.planId)
|
|
1337
|
+
if (!checkpointId) {
|
|
1338
|
+
checkpointId = generateCheckpointId()
|
|
1339
|
+
planApprovalIds.set(request.planId, checkpointId)
|
|
1340
|
+
}
|
|
1333
1341
|
// `.current.handler`, never a captured `params.resumeHandler`. That
|
|
1334
1342
|
// capture is what made changing the policy mean ending the run.
|
|
1335
1343
|
const decision = await approvalPolicy.current.handler({
|
|
1336
1344
|
type: 'plan_approval',
|
|
1337
1345
|
runId: ctx.runId,
|
|
1338
|
-
checkpointId
|
|
1346
|
+
checkpointId,
|
|
1339
1347
|
plan: {
|
|
1340
1348
|
planId: request.planId,
|
|
1341
1349
|
title: request.title,
|
|
@@ -1683,6 +1691,9 @@ export async function* query(params: QueryParams): AsyncGenerator<RunEvent, Run>
|
|
|
1683
1691
|
tools: params.tools,
|
|
1684
1692
|
runId: ctx.runId,
|
|
1685
1693
|
workingDirectory: ctx.cwd,
|
|
1694
|
+
...(params.additionalDirectories?.length
|
|
1695
|
+
? { additionalDirectories: params.additionalDirectories }
|
|
1696
|
+
: {}),
|
|
1686
1697
|
permissionMode: () => ctx.permissionMode.current,
|
|
1687
1698
|
env: runConfig.env ?? {},
|
|
1688
1699
|
abortSignal: ctx.abortController.signal,
|
|
@@ -1690,6 +1701,7 @@ export async function* query(params: QueryParams): AsyncGenerator<RunEvent, Run>
|
|
|
1690
1701
|
invocationState: params.invocationState,
|
|
1691
1702
|
pluginManager: params.pluginManager,
|
|
1692
1703
|
...(params.backgroundJobs ? { backgroundJobs: params.backgroundJobs } : {}),
|
|
1704
|
+
...(params.backgroundJobOwner ? { backgroundJobOwner: params.backgroundJobOwner } : {}),
|
|
1693
1705
|
// The `skill` tool's registry. Threaded from the run rather than
|
|
1694
1706
|
// held by the tool, because a tool that reached for a module-level
|
|
1695
1707
|
// registry would answer about whatever the last run configured.
|
|
@@ -1734,12 +1746,52 @@ export async function* query(params: QueryParams): AsyncGenerator<RunEvent, Run>
|
|
|
1734
1746
|
ctx.log,
|
|
1735
1747
|
)
|
|
1736
1748
|
|
|
1749
|
+
// A background job's exit reaches the model as a notice on its next tool
|
|
1750
|
+
// result, and the host as an event — without either polling. Subscribed
|
|
1751
|
+
// for the owner the run's jobs are bound to, so a session-owned job that
|
|
1752
|
+
// ends during this run is reported here too.
|
|
1753
|
+
const jobOwner = params.backgroundJobOwner ?? ctx.runId
|
|
1754
|
+
const jobNotices = params.backgroundJobs ? new SteeringBinding() : undefined
|
|
1755
|
+
const unsubscribeJobExits = params.backgroundJobs?.onExit((job) => {
|
|
1756
|
+
if (job.owner !== jobOwner) return
|
|
1757
|
+
const outcome =
|
|
1758
|
+
job.status === 'killed'
|
|
1759
|
+
? 'was stopped'
|
|
1760
|
+
: `exited with code ${job.exitCode ?? 'unknown'}${job.signal ? ` (${job.signal})` : ''}`
|
|
1761
|
+
jobNotices?.steer(
|
|
1762
|
+
`Background job ${job.id} (${job.command}) ${outcome}. Read its output with the job tool if you need it.`,
|
|
1763
|
+
)
|
|
1764
|
+
void eventTranslator
|
|
1765
|
+
.emitEvent({
|
|
1766
|
+
type: 'background_job_exited',
|
|
1767
|
+
runId: ctx.runId,
|
|
1768
|
+
jobId: job.id,
|
|
1769
|
+
command: job.command,
|
|
1770
|
+
status: job.status === 'killed' ? 'killed' : 'exited',
|
|
1771
|
+
...(job.exitCode !== undefined ? { exitCode: job.exitCode } : {}),
|
|
1772
|
+
...(job.signal ? { signal: job.signal } : {}),
|
|
1773
|
+
})
|
|
1774
|
+
.catch(() => {})
|
|
1775
|
+
})
|
|
1737
1776
|
let workingStateManager: WorkingStateManager | undefined
|
|
1738
|
-
|
|
1739
|
-
|
|
1777
|
+
// Normalised once, defaults applied. A host that passes a partial
|
|
1778
|
+
// object — a strategy and a window, nothing else — used to reach the
|
|
1779
|
+
// phase with `triggerThreshold` undefined, and `usage < undefined` is
|
|
1780
|
+
// false: the pass ran on every iteration and the salience strategy fell
|
|
1781
|
+
// through to the stale-result clearing it exists to replace. The eval
|
|
1782
|
+
// suite that passed exactly that object found it.
|
|
1783
|
+
const compactionConfig = params.compactionConfig
|
|
1784
|
+
? CompactionConfigSchema.parse(params.compactionConfig)
|
|
1785
|
+
: undefined
|
|
1786
|
+
if (compactionConfig && compactionConfig.strategy !== 'disabled') {
|
|
1787
|
+
workingStateManager = new WorkingStateManager(compactionConfig)
|
|
1740
1788
|
toolExecutor.setWorkingStateManager(workingStateManager)
|
|
1741
1789
|
}
|
|
1742
1790
|
|
|
1791
|
+
// The run's own registry when the host passed none, so a hook's
|
|
1792
|
+
// annotation has somewhere to land.
|
|
1793
|
+
const promptContributions = params.promptContributions ?? new PromptContributionRegistry()
|
|
1794
|
+
|
|
1743
1795
|
const promptBuilder = new PromptBuilder({
|
|
1744
1796
|
systemPrompt: params.systemPrompt,
|
|
1745
1797
|
persona: params.persona,
|
|
@@ -1748,7 +1800,7 @@ export async function* query(params: QueryParams): AsyncGenerator<RunEvent, Run>
|
|
|
1748
1800
|
tools: params.tools,
|
|
1749
1801
|
allowedTools: effectiveAllowedTools,
|
|
1750
1802
|
runtimeContext: params.runtimeContext,
|
|
1751
|
-
|
|
1803
|
+
contributions: promptContributions,
|
|
1752
1804
|
})
|
|
1753
1805
|
|
|
1754
1806
|
const guard = new GuardCoordinator({
|
|
@@ -1800,10 +1852,13 @@ export async function* query(params: QueryParams): AsyncGenerator<RunEvent, Run>
|
|
|
1800
1852
|
// explicitly chosen provider/cancellation policy.
|
|
1801
1853
|
const boundedAdvisors = params.advisory.advisors.map((advisor) => ({
|
|
1802
1854
|
...advisor,
|
|
1803
|
-
provider:
|
|
1804
|
-
|
|
1805
|
-
|
|
1806
|
-
|
|
1855
|
+
provider: withTokenBudget(
|
|
1856
|
+
withStreamIdleTimeout(advisor.provider, {
|
|
1857
|
+
idleTimeoutMs: streamIdleTimeoutMs,
|
|
1858
|
+
log: ctx.log,
|
|
1859
|
+
}),
|
|
1860
|
+
budget,
|
|
1861
|
+
),
|
|
1807
1862
|
}))
|
|
1808
1863
|
const advisorRegistry = new AdvisorRegistry(boundedAdvisors, params.advisory.defaultAdvisorId)
|
|
1809
1864
|
// A budget the runtime cannot measure is refused here rather than
|
|
@@ -1891,8 +1946,9 @@ export async function* query(params: QueryParams): AsyncGenerator<RunEvent, Run>
|
|
|
1891
1946
|
// question rather than the next run.
|
|
1892
1947
|
resumeHandler: (request) => approvalPolicy.current.handler(request),
|
|
1893
1948
|
takeApprovalPolicyChange: () => approvalPolicy.takeUnannouncedChange(),
|
|
1894
|
-
|
|
1949
|
+
promptContributions,
|
|
1895
1950
|
...(params.steering ? { steering: params.steering } : {}),
|
|
1951
|
+
...(jobNotices ? { jobNotices } : {}),
|
|
1896
1952
|
checkpointMgr,
|
|
1897
1953
|
planManager: ctx.planManager,
|
|
1898
1954
|
taskGateway: taskScheduler,
|
|
@@ -1905,7 +1961,7 @@ export async function* query(params: QueryParams): AsyncGenerator<RunEvent, Run>
|
|
|
1905
1961
|
// run is a claim about work nobody repeated, and a module-level map
|
|
1906
1962
|
// would leak exactly that way.
|
|
1907
1963
|
...(params.repeatCallAdvisory === false ? {} : { repeatCalls: new RepeatCallTracker() }),
|
|
1908
|
-
compactionConfig
|
|
1964
|
+
compactionConfig,
|
|
1909
1965
|
...(params.inboundMessages ? { inboundMessages: params.inboundMessages } : {}),
|
|
1910
1966
|
...(params.projectInstructionContext
|
|
1911
1967
|
? { projectInstructionContext: params.projectInstructionContext }
|
|
@@ -2069,6 +2125,32 @@ export async function* query(params: QueryParams): AsyncGenerator<RunEvent, Run>
|
|
|
2069
2125
|
'namzu.runtime.resume_from_checkpoint': params.resumeFromCheckpoint ?? null,
|
|
2070
2126
|
})
|
|
2071
2127
|
|
|
2128
|
+
// The operator's prompt, before the model sees it. A hook may
|
|
2129
|
+
// refuse it — the run ends here, before a prompt is built — or add
|
|
2130
|
+
// to what the model is told; the addition rides the prompt as a
|
|
2131
|
+
// dynamic contribution so every iteration of the run carries it.
|
|
2132
|
+
if (params.pluginManager) {
|
|
2133
|
+
const hookResults = await params.pluginManager.executeHooks(
|
|
2134
|
+
'user_prompt_submit',
|
|
2135
|
+
{
|
|
2136
|
+
runId: ctx.runId,
|
|
2137
|
+
sessionId: params.sessionId,
|
|
2138
|
+
prompt: lastUserPrompt(initialMessages),
|
|
2139
|
+
signal: ctx.abortController.signal,
|
|
2140
|
+
},
|
|
2141
|
+
eventTranslator.emitEvent,
|
|
2142
|
+
)
|
|
2143
|
+
const annotations = applyLifecycleHookResults('user_prompt_submit', hookResults)
|
|
2144
|
+
if (annotations.length > 0) {
|
|
2145
|
+
promptContributions.replace({
|
|
2146
|
+
id: 'hooks:user_prompt_submit',
|
|
2147
|
+
placement: 'dynamic',
|
|
2148
|
+
render: () => `Context from the operator's hooks:\n\n${annotations.join('\n\n')}`,
|
|
2149
|
+
})
|
|
2150
|
+
}
|
|
2151
|
+
yield* eventTranslator.drainPending()
|
|
2152
|
+
}
|
|
2153
|
+
|
|
2072
2154
|
const contextLevel = params.contextLevel ?? 'full'
|
|
2073
2155
|
const cacheInput = {
|
|
2074
2156
|
systemPrompt: params.systemPrompt,
|
|
@@ -2078,7 +2160,7 @@ export async function* query(params: QueryParams): AsyncGenerator<RunEvent, Run>
|
|
|
2078
2160
|
tools: params.tools,
|
|
2079
2161
|
allowedTools: effectiveAllowedTools,
|
|
2080
2162
|
runtimeContext: params.runtimeContext,
|
|
2081
|
-
|
|
2163
|
+
contributions: promptContributions,
|
|
2082
2164
|
}
|
|
2083
2165
|
|
|
2084
2166
|
const segments: PromptSegments = promptCache
|
|
@@ -2132,8 +2214,8 @@ export async function* query(params: QueryParams): AsyncGenerator<RunEvent, Run>
|
|
|
2132
2214
|
// would drop it and replace it with a summary covering only
|
|
2133
2215
|
// what happened after the resume, silently losing the run's
|
|
2134
2216
|
// first hour.
|
|
2135
|
-
if (workingStateManager && checkpoint.workingState &&
|
|
2136
|
-
const revived = restoreWorkingState(checkpoint.workingState,
|
|
2217
|
+
if (workingStateManager && checkpoint.workingState && compactionConfig) {
|
|
2218
|
+
const revived = restoreWorkingState(checkpoint.workingState, compactionConfig)
|
|
2137
2219
|
workingStateManager.replaceState(revived.getState())
|
|
2138
2220
|
ctx.log.info('Restored compaction working state from checkpoint', {
|
|
2139
2221
|
[NAMZU.RUN_ID]: ctx.runMgr.id,
|
|
@@ -2412,6 +2494,9 @@ export async function* query(params: QueryParams): AsyncGenerator<RunEvent, Run>
|
|
|
2412
2494
|
provider: params.sandboxProvider,
|
|
2413
2495
|
config: {
|
|
2414
2496
|
...(rootAtCwd ? { workingDirectory: ctx.cwd } : {}),
|
|
2497
|
+
...(rootAtCwd && params.additionalDirectories?.length
|
|
2498
|
+
? { additionalDirectories: params.additionalDirectories }
|
|
2499
|
+
: {}),
|
|
2415
2500
|
timeoutMs: runConfig.sandbox?.timeoutMs,
|
|
2416
2501
|
memoryLimitMb: runConfig.sandbox?.memoryLimitMb,
|
|
2417
2502
|
maxProcesses: runConfig.sandbox?.maxProcesses,
|
|
@@ -2580,6 +2665,22 @@ export async function* query(params: QueryParams): AsyncGenerator<RunEvent, Run>
|
|
|
2580
2665
|
)
|
|
2581
2666
|
applyLifecycleHookResults('run_end', hookResults)
|
|
2582
2667
|
yield* eventTranslator.drainPending()
|
|
2668
|
+
// A delegated run says so once more, by name, so a hook that
|
|
2669
|
+
// only cares when a subagent finishes need not read parent ids
|
|
2670
|
+
// off every run_end.
|
|
2671
|
+
if (params.parentRunId !== undefined) {
|
|
2672
|
+
const stopResults = await params.pluginManager.executeHooks(
|
|
2673
|
+
'subagent_stop',
|
|
2674
|
+
{
|
|
2675
|
+
runId: ctx.runId,
|
|
2676
|
+
parentRunId: params.parentRunId,
|
|
2677
|
+
signal: ctx.abortController.signal,
|
|
2678
|
+
},
|
|
2679
|
+
eventTranslator.emitEvent,
|
|
2680
|
+
)
|
|
2681
|
+
applyLifecycleHookResults('subagent_stop', stopResults)
|
|
2682
|
+
yield* eventTranslator.drainPending()
|
|
2683
|
+
}
|
|
2583
2684
|
}
|
|
2584
2685
|
|
|
2585
2686
|
// Hand the step record to the run before it settles, so the
|
|
@@ -2638,6 +2739,32 @@ export async function* query(params: QueryParams): AsyncGenerator<RunEvent, Run>
|
|
|
2638
2739
|
}
|
|
2639
2740
|
}
|
|
2640
2741
|
|
|
2742
|
+
if (params.consolidateInto && workingStateManager) {
|
|
2743
|
+
const entry = consolidationEntry(workingStateManager.getState(), {
|
|
2744
|
+
runId: ctx.runId,
|
|
2745
|
+
at: Date.now(),
|
|
2746
|
+
})
|
|
2747
|
+
if (entry) {
|
|
2748
|
+
try {
|
|
2749
|
+
const { entry: saved } = await params.consolidateInto.create(entry)
|
|
2750
|
+
await eventTranslator.emitEvent({
|
|
2751
|
+
type: 'memory_consolidated',
|
|
2752
|
+
runId: ctx.runId,
|
|
2753
|
+
memoryId: saved.id,
|
|
2754
|
+
title: entry.title,
|
|
2755
|
+
decisions: workingStateManager.getState().decisions.length,
|
|
2756
|
+
discoveries: workingStateManager.getState().discoveries.length,
|
|
2757
|
+
failures: workingStateManager.getState().failures.length,
|
|
2758
|
+
})
|
|
2759
|
+
yield* eventTranslator.drainPending()
|
|
2760
|
+
} catch (error) {
|
|
2761
|
+
ctx.log.warn('consolidation into the memory store failed', {
|
|
2762
|
+
[NAMZU.RUN_ID]: ctx.runId,
|
|
2763
|
+
'namzu.memory.error': toErrorMessage(error),
|
|
2764
|
+
})
|
|
2765
|
+
}
|
|
2766
|
+
}
|
|
2767
|
+
}
|
|
2641
2768
|
yield* resultAssembler.completeRun(rootSpan)
|
|
2642
2769
|
} catch (err) {
|
|
2643
2770
|
// A failed run still spent its steps; report them.
|
|
@@ -2659,7 +2786,10 @@ export async function* query(params: QueryParams): AsyncGenerator<RunEvent, Run>
|
|
|
2659
2786
|
//
|
|
2660
2787
|
// Awaited, and its failure swallowed. A job that would not die is
|
|
2661
2788
|
// worth a log line, and is not worth retracting a run's answer.
|
|
2662
|
-
|
|
2789
|
+
unsubscribeJobExits?.()
|
|
2790
|
+
// Only jobs bound to this run. Jobs a host bound to its session are
|
|
2791
|
+
// the host's to stop, when the session ends.
|
|
2792
|
+
if (params.backgroundJobs && (params.backgroundJobOwner ?? ctx.runId) === ctx.runId) {
|
|
2663
2793
|
try {
|
|
2664
2794
|
const stopped = await params.backgroundJobs.killOwner(ctx.runId)
|
|
2665
2795
|
if (stopped.length > 0) {
|
|
@@ -2743,6 +2873,15 @@ export async function* query(params: QueryParams): AsyncGenerator<RunEvent, Run>
|
|
|
2743
2873
|
* either way — a stale cursor belongs to the client, and must not be able to
|
|
2744
2874
|
* stop the work.
|
|
2745
2875
|
*/
|
|
2876
|
+
/** The text of the newest user turn, which is what a prompt hook is asked about. */
|
|
2877
|
+
function lastUserPrompt(messages: readonly Message[]): string {
|
|
2878
|
+
for (let i = messages.length - 1; i >= 0; i--) {
|
|
2879
|
+
const m = messages[i]
|
|
2880
|
+
if (m?.role === 'user' && typeof m.content === 'string') return m.content
|
|
2881
|
+
}
|
|
2882
|
+
return ''
|
|
2883
|
+
}
|
|
2884
|
+
|
|
2746
2885
|
async function* catchUpFromCursor(
|
|
2747
2886
|
runMgr: RunPersistence,
|
|
2748
2887
|
cursor: RunEventCursor,
|
|
@@ -312,8 +312,9 @@ export class IterationOrchestrator {
|
|
|
312
312
|
'namzu.runtime.input_tokens': runMgr.tokenUsage.promptTokens,
|
|
313
313
|
'namzu.runtime.output_tokens': runMgr.tokenUsage.completionTokens,
|
|
314
314
|
})
|
|
315
|
-
|
|
316
|
-
|
|
315
|
+
// A hard stop has no budget left for another model request.
|
|
316
|
+
// Closing prose is requested at the warning threshold while
|
|
317
|
+
// headroom remains; the completed work is already in history.
|
|
317
318
|
runMgr.setStopReason(stopReason)
|
|
318
319
|
break
|
|
319
320
|
}
|
|
@@ -788,6 +789,7 @@ export class IterationOrchestrator {
|
|
|
788
789
|
type: 'token_usage_updated',
|
|
789
790
|
runId: runMgr.id,
|
|
790
791
|
usage: runMgr.tokenUsage,
|
|
792
|
+
budget: runMgr.budget?.summary(),
|
|
791
793
|
cost: runMgr.costInfo,
|
|
792
794
|
...contextFigures,
|
|
793
795
|
})
|
|
@@ -1079,12 +1081,13 @@ export class IterationOrchestrator {
|
|
|
1079
1081
|
continue
|
|
1080
1082
|
}
|
|
1081
1083
|
|
|
1084
|
+
let closingStopReason: StopReason | undefined
|
|
1082
1085
|
if (!hasContent && !forceFinalize) {
|
|
1083
1086
|
this.ctx.log.warn('Empty completion detected — requesting final summary', {
|
|
1084
1087
|
[NAMZU.ITERATION]: iterationNum,
|
|
1085
1088
|
'namzu.runtime.finish_reason': response.finishReason,
|
|
1086
1089
|
})
|
|
1087
|
-
await this.requestFinalResponse(model, 'end_turn')
|
|
1090
|
+
closingStopReason = await this.requestFinalResponse(model, 'end_turn')
|
|
1088
1091
|
yield* this.ctx.drainPending()
|
|
1089
1092
|
}
|
|
1090
1093
|
|
|
@@ -1115,7 +1118,10 @@ export class IterationOrchestrator {
|
|
|
1115
1118
|
// also settle as `end_turn`, and there the deferred predicate
|
|
1116
1119
|
// is not why the run ended: those decided the answer
|
|
1117
1120
|
// themselves.
|
|
1118
|
-
runMgr.setStopReason(
|
|
1121
|
+
runMgr.setStopReason(
|
|
1122
|
+
closingStopReason ??
|
|
1123
|
+
(stopWasDeferredForOutstandingWork ? 'stop_condition' : 'end_turn'),
|
|
1124
|
+
)
|
|
1119
1125
|
break
|
|
1120
1126
|
}
|
|
1121
1127
|
|
|
@@ -2029,7 +2035,10 @@ export class IterationOrchestrator {
|
|
|
2029
2035
|
})
|
|
2030
2036
|
}
|
|
2031
2037
|
|
|
2032
|
-
private async requestFinalResponse(
|
|
2038
|
+
private async requestFinalResponse(
|
|
2039
|
+
model: string,
|
|
2040
|
+
reason: StopReason,
|
|
2041
|
+
): Promise<StopReason | undefined> {
|
|
2033
2042
|
const lastAssistant = [...this.ctx.runMgr.messages]
|
|
2034
2043
|
.reverse()
|
|
2035
2044
|
.find((m) => m.role === 'assistant')
|
|
@@ -2040,8 +2049,16 @@ export class IterationOrchestrator {
|
|
|
2040
2049
|
lastAssistant.content.length > 0
|
|
2041
2050
|
|
|
2042
2051
|
if (hasResult) return
|
|
2052
|
+
// An empty completion may itself have exhausted the run. This fallback
|
|
2053
|
+
// is another billed request, so it must pass the same hard limits as
|
|
2054
|
+
// the next normal iteration and preserve their unfinished stop reason.
|
|
2055
|
+
const guardResult = this.ctx.guard.beforeIteration(
|
|
2056
|
+
this.ctx.runMgr,
|
|
2057
|
+
this.ctx.abortController.signal,
|
|
2058
|
+
)
|
|
2059
|
+
if (guardResult.shouldStop) return guardResult.stopReason
|
|
2043
2060
|
|
|
2044
|
-
this.ctx.log.info('Requesting final response
|
|
2061
|
+
this.ctx.log.info('Requesting final response after empty completion', {
|
|
2045
2062
|
'namzu.runtime.reason': reason,
|
|
2046
2063
|
})
|
|
2047
2064
|
|
|
@@ -2145,6 +2162,7 @@ export class IterationOrchestrator {
|
|
|
2145
2162
|
'exception.message': toErrorMessage(err),
|
|
2146
2163
|
})
|
|
2147
2164
|
}
|
|
2165
|
+
return undefined
|
|
2148
2166
|
}
|
|
2149
2167
|
}
|
|
2150
2168
|
|