@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
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { TokenBudget } from '../run/token-budget.js'
|
|
2
|
+
import { openTokenBudget } from '../store/run/token-budget-disk.js'
|
|
3
|
+
import type { AgentInput, BaseAgentConfig } from '../types/agent/base.js'
|
|
4
|
+
import type { RunId } from '../types/ids/index.js'
|
|
5
|
+
|
|
6
|
+
/** Resolve one authority before a composite agent constructs its scheduler. */
|
|
7
|
+
export async function resolveAgentBudget(
|
|
8
|
+
input: AgentInput,
|
|
9
|
+
config: BaseAgentConfig,
|
|
10
|
+
runId: RunId,
|
|
11
|
+
): Promise<TokenBudget> {
|
|
12
|
+
if (!Number.isSafeInteger(config.tokenBudget) || config.tokenBudget < 0) {
|
|
13
|
+
throw new Error('Agent token budget must be a nonnegative safe integer')
|
|
14
|
+
}
|
|
15
|
+
if (config.budget) {
|
|
16
|
+
config.budget.bindRun(runId)
|
|
17
|
+
if (
|
|
18
|
+
config.tokenBudget > 0 &&
|
|
19
|
+
(config.budget.limit === 0 || config.tokenBudget < config.budget.limit)
|
|
20
|
+
) {
|
|
21
|
+
config.budget.narrow(config.tokenBudget)
|
|
22
|
+
}
|
|
23
|
+
await config.budget.flush()
|
|
24
|
+
return config.budget
|
|
25
|
+
}
|
|
26
|
+
if (config.parentRunId) {
|
|
27
|
+
throw new Error('A delegated agent requires its inherited token budget authority')
|
|
28
|
+
}
|
|
29
|
+
const { tenantId, projectId, sessionId } = config
|
|
30
|
+
const budget =
|
|
31
|
+
tenantId && projectId && sessionId
|
|
32
|
+
? await openTokenBudget({
|
|
33
|
+
scope: { tenantId, projectId, sessionId, runId },
|
|
34
|
+
limit: config.tokenBudget,
|
|
35
|
+
pathBuilder: config.pathBuilder,
|
|
36
|
+
workingDirectory: input.workingDirectory,
|
|
37
|
+
})
|
|
38
|
+
: TokenBudget.create(config.tokenBudget, runId)
|
|
39
|
+
budget.bindRun(runId)
|
|
40
|
+
await budget.flush()
|
|
41
|
+
return budget
|
|
42
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The delegate that can only look.
|
|
3
|
+
*
|
|
4
|
+
* "Find where X is defined", "which files reference Y", "how does Z work" are
|
|
5
|
+
* the delegations a parent makes most, and a child built from the parent's
|
|
6
|
+
* whole working set answers them holding `write` and `bash` — so a lookup
|
|
7
|
+
* needs the same approvals as a change. A host that offers this delegate
|
|
8
|
+
* builds its roster with `filterReadOnlyTools` and its prompt from the text
|
|
9
|
+
* here; the two are exported separately because a host adds its own
|
|
10
|
+
* doctrine and environment around the prompt.
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
export const EXPLORE_AGENT_ID = 'explore'
|
|
14
|
+
|
|
15
|
+
export const EXPLORE_AGENT_DESCRIPTION =
|
|
16
|
+
'A read-only sub-agent for finding files, symbols and answers.'
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* What an explore delegate is told. Names its limits in the first person so
|
|
20
|
+
* a model does not describe a change as made, and asks for file:line
|
|
21
|
+
* references because that is what the parent acts on.
|
|
22
|
+
*/
|
|
23
|
+
export const EXPLORE_AGENT_PROMPT = [
|
|
24
|
+
'You are a read-only sub-agent dispatched to find things out: where something is defined, which files reference it, how a piece of code works, what a directory contains.',
|
|
25
|
+
'You cannot see the parent conversation — work only from the prompt you were given.',
|
|
26
|
+
'You have reading and searching tools only. You cannot edit, write or run commands, and you must not describe a change as made.',
|
|
27
|
+
'Search broadly first, then read what matters. Report file paths with line numbers, quote the relevant lines, and say plainly what you did not find.',
|
|
28
|
+
'End with a concise answer the parent can act on; do not ask the parent questions.',
|
|
29
|
+
].join('\n')
|
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sub-agents defined in a Markdown file.
|
|
3
|
+
*
|
|
4
|
+
* Skills are defined this way one directory over (`skills/loader.ts`): YAML
|
|
5
|
+
* frontmatter for what the thing IS, a Markdown body for what it is told.
|
|
6
|
+
* An agent file is the same shape for a delegate — a name the `Agent` tool
|
|
7
|
+
* can be asked for, a description the model chooses by, and optionally a
|
|
8
|
+
* tool allowlist, a model and a read-only flag — so a repository can say
|
|
9
|
+
* "our reviewer uses these tools and this model" once, and every host that
|
|
10
|
+
* builds delegates from this kernel offers the same reviewer.
|
|
11
|
+
*
|
|
12
|
+
* ```md
|
|
13
|
+
* ---
|
|
14
|
+
* name: reviewer
|
|
15
|
+
* description: Reviews a diff for correctness and convention drift.
|
|
16
|
+
* tools: read, grep, glob # optional allowlist, intersected with the parent's set
|
|
17
|
+
* model: claude-sonnet-4-5 # optional override
|
|
18
|
+
* readOnly: true # optional; keeps only read-only tools
|
|
19
|
+
* ---
|
|
20
|
+
* You review changes for this repository. Cite file:line for every finding …
|
|
21
|
+
* ```
|
|
22
|
+
*
|
|
23
|
+
* `tools` is one comma-separated line: this kernel's frontmatter reader
|
|
24
|
+
* refuses block lists and flow sequences by design, so there is no other
|
|
25
|
+
* form to accept.
|
|
26
|
+
*
|
|
27
|
+
* This module decides what a file MEANS. Where files live — which
|
|
28
|
+
* directories, in which order, which one shadows which — is the host's
|
|
29
|
+
* decision, passed in as an ordered list of roots; later roots win. A file
|
|
30
|
+
* that cannot be loaded is REPORTED with its path and reason rather than
|
|
31
|
+
* silently absent, and never takes the rest of the roster with it: an
|
|
32
|
+
* agent whose `tools` line failed to parse would otherwise run with the
|
|
33
|
+
* parent's whole set, which is the opposite of what the line was for.
|
|
34
|
+
*/
|
|
35
|
+
|
|
36
|
+
import { readFile, readdir, stat } from 'node:fs/promises'
|
|
37
|
+
import { join } from 'node:path'
|
|
38
|
+
|
|
39
|
+
import { parseFrontmatter } from '../utils/frontmatter.js'
|
|
40
|
+
import { SCOPE_ATTRIBUTE } from '../utils/log/types.js'
|
|
41
|
+
import { type Logger, resolveLogger } from '../utils/logger.js'
|
|
42
|
+
|
|
43
|
+
/** Per-file character budget for the prompt body. */
|
|
44
|
+
export const MAX_AGENT_FILE_CHARS = 32_000
|
|
45
|
+
|
|
46
|
+
/** Bytes above which a file is not even read. */
|
|
47
|
+
const MAX_AGENT_FILE_BYTES = 4 * 1024 * 1024
|
|
48
|
+
|
|
49
|
+
/** The names a file may not claim by default: the delegate types a host ships. */
|
|
50
|
+
export const DEFAULT_RESERVED_AGENT_NAMES: ReadonlySet<string> = new Set([
|
|
51
|
+
'general-purpose',
|
|
52
|
+
'explore',
|
|
53
|
+
])
|
|
54
|
+
|
|
55
|
+
const NAME_PATTERN = /^[a-z][a-z0-9-]{0,63}$/
|
|
56
|
+
|
|
57
|
+
export interface AgentFileDefinition {
|
|
58
|
+
readonly name: string
|
|
59
|
+
readonly description: string
|
|
60
|
+
/** The system prompt: the file's body, already cut to the budget. */
|
|
61
|
+
readonly prompt: string
|
|
62
|
+
/** Tool names the agent may use; absent means the parent's working set. */
|
|
63
|
+
readonly tools?: readonly string[]
|
|
64
|
+
readonly model?: string
|
|
65
|
+
readonly readOnly: boolean
|
|
66
|
+
readonly path: string
|
|
67
|
+
/** The host's label for the root this file came from (`user`, `project`, …). */
|
|
68
|
+
readonly source: string
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
export interface SkippedAgentFile {
|
|
72
|
+
readonly path: string
|
|
73
|
+
readonly reason: string
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
export interface AgentDefinitionRoot {
|
|
77
|
+
readonly dir: string
|
|
78
|
+
readonly source: string
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
export interface DiscoveredAgentDefinitions {
|
|
82
|
+
/** In first-seen order; a later root's file replaces an earlier one's by name. */
|
|
83
|
+
readonly definitions: readonly AgentFileDefinition[]
|
|
84
|
+
readonly skipped: readonly SkippedAgentFile[]
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
export interface DiscoverAgentDefinitionsOptions {
|
|
88
|
+
/** Names refused in a file. Defaults to `DEFAULT_RESERVED_AGENT_NAMES`. */
|
|
89
|
+
readonly reserved?: ReadonlySet<string>
|
|
90
|
+
readonly log?: Logger
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* Every `*.md` in every root, later roots shadowing earlier ones by name.
|
|
95
|
+
* A root that is not there contributes nothing; a file that is there and
|
|
96
|
+
* wrong is reported.
|
|
97
|
+
*/
|
|
98
|
+
export async function discoverAgentDefinitions(
|
|
99
|
+
roots: readonly AgentDefinitionRoot[],
|
|
100
|
+
options: DiscoverAgentDefinitionsOptions = {},
|
|
101
|
+
): Promise<DiscoveredAgentDefinitions> {
|
|
102
|
+
const logger = resolveLogger(options.log).child({ [SCOPE_ATTRIBUTE]: 'agents/file-definitions' })
|
|
103
|
+
const byName = new Map<string, AgentFileDefinition>()
|
|
104
|
+
const skipped: SkippedAgentFile[] = []
|
|
105
|
+
for (const root of roots) {
|
|
106
|
+
let files: string[]
|
|
107
|
+
try {
|
|
108
|
+
files = (await readdir(root.dir, { withFileTypes: true }))
|
|
109
|
+
.filter((entry) => entry.isFile() && entry.name.endsWith('.md'))
|
|
110
|
+
.map((entry) => entry.name)
|
|
111
|
+
.sort()
|
|
112
|
+
} catch {
|
|
113
|
+
logger.debug('agent definitions directory not found', { 'namzu.agents.dir': root.dir })
|
|
114
|
+
continue
|
|
115
|
+
}
|
|
116
|
+
for (const file of files) {
|
|
117
|
+
const found = await parseAgentFile(join(root.dir, file), root.source, options.reserved)
|
|
118
|
+
if ('reason' in found) skipped.push(found)
|
|
119
|
+
else byName.set(found.name, found)
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
return { definitions: [...byName.values()], skipped }
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
export async function parseAgentFile(
|
|
126
|
+
path: string,
|
|
127
|
+
source: string,
|
|
128
|
+
reserved: ReadonlySet<string> = DEFAULT_RESERVED_AGENT_NAMES,
|
|
129
|
+
): Promise<AgentFileDefinition | SkippedAgentFile> {
|
|
130
|
+
let raw: string
|
|
131
|
+
try {
|
|
132
|
+
if ((await stat(path)).size > MAX_AGENT_FILE_BYTES) {
|
|
133
|
+
return { path, reason: 'is larger than 4 MiB, which no agent file is' }
|
|
134
|
+
}
|
|
135
|
+
raw = await readFile(path, 'utf8')
|
|
136
|
+
} catch (error) {
|
|
137
|
+
return {
|
|
138
|
+
path,
|
|
139
|
+
reason: `could not be read: ${error instanceof Error ? error.message : String(error)}`,
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
return parseAgentMarkdown(raw, path, source, reserved)
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
/** Pure: the file's text to a definition, or the reason it is refused. */
|
|
146
|
+
export function parseAgentMarkdown(
|
|
147
|
+
raw: string,
|
|
148
|
+
path: string,
|
|
149
|
+
source: string,
|
|
150
|
+
reserved: ReadonlySet<string> = DEFAULT_RESERVED_AGENT_NAMES,
|
|
151
|
+
): AgentFileDefinition | SkippedAgentFile {
|
|
152
|
+
if (!raw.trimStart().startsWith('---')) {
|
|
153
|
+
return { path, reason: 'has no frontmatter; an agent file starts with `---` and a `name:`' }
|
|
154
|
+
}
|
|
155
|
+
let parsed: ReturnType<typeof parseFrontmatter>
|
|
156
|
+
try {
|
|
157
|
+
parsed = parseFrontmatter(raw, path)
|
|
158
|
+
} catch (error) {
|
|
159
|
+
return {
|
|
160
|
+
path,
|
|
161
|
+
reason: `frontmatter did not parse: ${error instanceof Error ? error.message : String(error)}`,
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
const { values, body } = parsed
|
|
165
|
+
|
|
166
|
+
const name = scalar(values.name)
|
|
167
|
+
if (name === undefined) return { path, reason: 'has no `name:` in its frontmatter' }
|
|
168
|
+
if (!NAME_PATTERN.test(name)) {
|
|
169
|
+
return { path, reason: `\`name: ${name}\` is not a lower-case identifier (a-z, 0-9, -)` }
|
|
170
|
+
}
|
|
171
|
+
if (reserved.has(name)) {
|
|
172
|
+
return { path, reason: `\`name: ${name}\` is a built-in type and cannot be redefined` }
|
|
173
|
+
}
|
|
174
|
+
const description = scalar(values.description)
|
|
175
|
+
if (description === undefined || description.trim().length === 0) {
|
|
176
|
+
return { path, reason: 'has no `description:`; the model chooses an agent by it' }
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
let tools: readonly string[] | undefined
|
|
180
|
+
if (values.tools !== undefined) {
|
|
181
|
+
const list = stringList(values.tools)
|
|
182
|
+
if (list === undefined || list.length === 0) {
|
|
183
|
+
return { path, reason: '`tools:` must be a non-empty, comma-separated list of tool names' }
|
|
184
|
+
}
|
|
185
|
+
tools = list
|
|
186
|
+
}
|
|
187
|
+
const model = scalar(values.model)
|
|
188
|
+
if (values.model !== undefined && (model === undefined || model.trim().length === 0)) {
|
|
189
|
+
return { path, reason: '`model:` must be a model name' }
|
|
190
|
+
}
|
|
191
|
+
let readOnly = false
|
|
192
|
+
if (values.readOnly !== undefined) {
|
|
193
|
+
const flag = scalar(values.readOnly)
|
|
194
|
+
if (flag !== 'true' && flag !== 'false') {
|
|
195
|
+
return { path, reason: '`readOnly:` must be true or false' }
|
|
196
|
+
}
|
|
197
|
+
readOnly = flag === 'true'
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
const trimmed = body.trim()
|
|
201
|
+
if (trimmed.length === 0) {
|
|
202
|
+
return { path, reason: "has an empty body; the body is the agent's system prompt" }
|
|
203
|
+
}
|
|
204
|
+
const prompt =
|
|
205
|
+
trimmed.length > MAX_AGENT_FILE_CHARS
|
|
206
|
+
? `${trimmed.slice(0, MAX_AGENT_FILE_CHARS)}\n\n[namzu: this prompt was cut at ${MAX_AGENT_FILE_CHARS} characters; ${trimmed.length - MAX_AGENT_FILE_CHARS} were omitted]`
|
|
207
|
+
: trimmed
|
|
208
|
+
|
|
209
|
+
return {
|
|
210
|
+
name,
|
|
211
|
+
description: description.trim(),
|
|
212
|
+
prompt,
|
|
213
|
+
...(tools ? { tools } : {}),
|
|
214
|
+
...(model ? { model: model.trim() } : {}),
|
|
215
|
+
readOnly,
|
|
216
|
+
path,
|
|
217
|
+
source,
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
type FrontmatterValue = ReturnType<typeof parseFrontmatter>['values'][string]
|
|
222
|
+
|
|
223
|
+
function scalar(value: FrontmatterValue | undefined): string | undefined {
|
|
224
|
+
return value?.kind === 'scalar' ? value.value : undefined
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
/** A comma-separated scalar; anything else is refused. */
|
|
228
|
+
function stringList(value: FrontmatterValue): readonly string[] | undefined {
|
|
229
|
+
if (value.kind !== 'scalar') return undefined
|
|
230
|
+
const text = value.value.trim()
|
|
231
|
+
const inner = text.startsWith('[') && text.endsWith(']') ? text.slice(1, -1) : text
|
|
232
|
+
const items = inner
|
|
233
|
+
.split(',')
|
|
234
|
+
.map((item) => item.trim())
|
|
235
|
+
.filter((item) => item.length > 0)
|
|
236
|
+
return items.length > 0 ? items : undefined
|
|
237
|
+
}
|
package/src/agents/index.ts
CHANGED
|
@@ -17,3 +17,18 @@ export {
|
|
|
17
17
|
DEFAULT_TOKEN_BUDGET,
|
|
18
18
|
} from './runAgent.js'
|
|
19
19
|
export type { AgentIdentity, RunAgentOptions, RunAgentResult } from './runAgent.js'
|
|
20
|
+
export {
|
|
21
|
+
DEFAULT_RESERVED_AGENT_NAMES,
|
|
22
|
+
MAX_AGENT_FILE_CHARS,
|
|
23
|
+
discoverAgentDefinitions,
|
|
24
|
+
parseAgentFile,
|
|
25
|
+
parseAgentMarkdown,
|
|
26
|
+
} from './file-definitions.js'
|
|
27
|
+
export type {
|
|
28
|
+
AgentDefinitionRoot,
|
|
29
|
+
AgentFileDefinition,
|
|
30
|
+
DiscoverAgentDefinitionsOptions,
|
|
31
|
+
DiscoveredAgentDefinitions,
|
|
32
|
+
SkippedAgentFile,
|
|
33
|
+
} from './file-definitions.js'
|
|
34
|
+
export { EXPLORE_AGENT_DESCRIPTION, EXPLORE_AGENT_ID, EXPLORE_AGENT_PROMPT } from './explore.js'
|
package/src/bridge/a2a/mapper.ts
CHANGED
|
@@ -245,6 +245,12 @@ const MAPPING: {
|
|
|
245
245
|
// strategies fired is a property of how it manages its own window, and a
|
|
246
246
|
// peer modelling a task lifecycle can act on none of them.
|
|
247
247
|
compaction_tool_results_cleared: null,
|
|
248
|
+
// What the run wrote to its own memory store is this runtime's business;
|
|
249
|
+
// a peer sees the task's outcome, not its housekeeping.
|
|
250
|
+
memory_consolidated: null,
|
|
251
|
+
// A job's exit is housekeeping of this runtime's host; the peer sees the
|
|
252
|
+
// task's outcome.
|
|
253
|
+
background_job_exited: null,
|
|
248
254
|
// Compaction, succeeded or declined, is a property of how this runtime
|
|
249
255
|
// manages its own context. A peer models a task lifecycle and cannot act on
|
|
250
256
|
// either outcome.
|
package/src/bridge/sse/mapper.ts
CHANGED
|
@@ -133,6 +133,28 @@ const MAPPING: {
|
|
|
133
133
|
// dominate the stream it rides on.
|
|
134
134
|
request_envelope: null,
|
|
135
135
|
|
|
136
|
+
background_job_exited: {
|
|
137
|
+
wire: 'background_job.exited',
|
|
138
|
+
transform: (e, runId) => ({
|
|
139
|
+
run_id: runId,
|
|
140
|
+
job_id: e.jobId,
|
|
141
|
+
command: e.command,
|
|
142
|
+
status: e.status,
|
|
143
|
+
...(e.exitCode !== undefined ? { exit_code: e.exitCode } : {}),
|
|
144
|
+
...(e.signal ? { signal: e.signal } : {}),
|
|
145
|
+
}),
|
|
146
|
+
},
|
|
147
|
+
memory_consolidated: {
|
|
148
|
+
wire: 'memory.consolidated',
|
|
149
|
+
transform: (e, runId) => ({
|
|
150
|
+
run_id: runId,
|
|
151
|
+
memory_id: e.memoryId,
|
|
152
|
+
title: e.title,
|
|
153
|
+
decisions: e.decisions,
|
|
154
|
+
discoveries: e.discoveries,
|
|
155
|
+
failures: e.failures,
|
|
156
|
+
}),
|
|
157
|
+
},
|
|
136
158
|
compaction_tool_results_cleared: {
|
|
137
159
|
wire: 'compaction.tool_results_cleared',
|
|
138
160
|
transform: (e, runId) => ({
|
package/src/bus/lock.ts
CHANGED
|
@@ -42,16 +42,7 @@ export class FileLockManager {
|
|
|
42
42
|
}
|
|
43
43
|
|
|
44
44
|
private generateLockId(): LockId {
|
|
45
|
-
|
|
46
|
-
// return TYPE alone accepts any `lock_`-shaped string today, and will
|
|
47
|
-
// stop accepting one the moment the id types go nominal (NZ-SURF-11).
|
|
48
|
-
//
|
|
49
|
-
// The UUID stays, and `utils/id.ts` deliberately does not gain a
|
|
50
|
-
// `generateLockId`. Every generator there mints 12 base-36 characters;
|
|
51
|
-
// moving this one would change the shape of a value `FileLockManager`
|
|
52
|
-
// writes to disk, which is a behaviour change wearing a refactor's
|
|
53
|
-
// clothes. What this task is about is the constructor, not the entropy.
|
|
54
|
-
return asLockId(`lock_${randomUUID()}`)
|
|
45
|
+
return asLockId(randomUUID())
|
|
55
46
|
}
|
|
56
47
|
|
|
57
48
|
private getAgentLockSet(owner: RunId): Set<string> {
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Consolidation: what a run learned, written down where the next run can
|
|
3
|
+
* find it.
|
|
4
|
+
*
|
|
5
|
+
* The working state is episodic memory — what happened in THIS run: the
|
|
6
|
+
* decisions taken, the discoveries made, the failures met and how. It
|
|
7
|
+
* dies with the run, and the semantic store behind `search_memory` only
|
|
8
|
+
* ever received what a model chose to `save_memory` mid-task, which is
|
|
9
|
+
* rarely the thing a later run needed. Consolidation is the bridge: at
|
|
10
|
+
* the end of a run, the entries that can outlive it become one memory
|
|
11
|
+
* entry, tagged so a later run can search for what was learned rather
|
|
12
|
+
* than what was done. What is deliberately NOT carried: the tool
|
|
13
|
+
* results, the plan, the requirements — those describe the task, not a
|
|
14
|
+
* lesson. Pure: the caller writes the entry, this only says what it is.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
import type { CreateMemoryParams } from '../types/memory/index.js'
|
|
18
|
+
import type { WorkingState } from './types.js'
|
|
19
|
+
|
|
20
|
+
export const CONSOLIDATION_TAG = 'learning'
|
|
21
|
+
|
|
22
|
+
export interface ConsolidationMeta {
|
|
23
|
+
readonly runId: string
|
|
24
|
+
/** Milliseconds since the epoch, for the entry's metadata. */
|
|
25
|
+
readonly at: number
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
const MAX_TASK_IN_TITLE = 72
|
|
29
|
+
|
|
30
|
+
function head(text: string, max: number): string {
|
|
31
|
+
const line = text.split('\n')[0]?.trim() ?? ''
|
|
32
|
+
return line.length <= max ? line : `${line.slice(0, max - 1)}…`
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* The memory entry a run's state consolidates to, or `null` when the run
|
|
37
|
+
* learned nothing worth a later run's attention — no decisions, no
|
|
38
|
+
* discoveries, no failures. A run that only read and edited leaves no
|
|
39
|
+
* entry rather than an empty one.
|
|
40
|
+
*/
|
|
41
|
+
export function consolidationEntry(
|
|
42
|
+
state: WorkingState,
|
|
43
|
+
meta: ConsolidationMeta,
|
|
44
|
+
): CreateMemoryParams | null {
|
|
45
|
+
const decisions = state.decisions.filter((d) => d.trim().length > 0)
|
|
46
|
+
const discoveries = state.discoveries.filter((d) => d.trim().length > 0)
|
|
47
|
+
const failures = state.failures.filter((f) => f.trim().length > 0)
|
|
48
|
+
if (decisions.length + discoveries.length + failures.length === 0) return null
|
|
49
|
+
|
|
50
|
+
const task = state.task.trim()
|
|
51
|
+
const files = [...state.files.values()]
|
|
52
|
+
.filter((slot) => slot.actions.some((a) => a.type !== 'read'))
|
|
53
|
+
.map((slot) => slot.path)
|
|
54
|
+
const section = (name: string, items: readonly string[]): string[] =>
|
|
55
|
+
items.length === 0 ? [] : [`## ${name}`, '', ...items.map((item) => `- ${item}`), '']
|
|
56
|
+
const content = [
|
|
57
|
+
task ? `Task: ${task}` : 'Task: (not stated)',
|
|
58
|
+
'',
|
|
59
|
+
...section('Decisions', decisions),
|
|
60
|
+
...section('Discoveries', discoveries),
|
|
61
|
+
...section('Failures and what was done about them', failures),
|
|
62
|
+
...(files.length ? ['## Files changed', '', ...files.map((f) => `- \`${f}\``), ''] : []),
|
|
63
|
+
].join('\n')
|
|
64
|
+
const counts = [
|
|
65
|
+
decisions.length ? `${decisions.length} decision${decisions.length === 1 ? '' : 's'}` : '',
|
|
66
|
+
discoveries.length
|
|
67
|
+
? `${discoveries.length} discover${discoveries.length === 1 ? 'y' : 'ies'}`
|
|
68
|
+
: '',
|
|
69
|
+
failures.length ? `${failures.length} failure${failures.length === 1 ? '' : 's'}` : '',
|
|
70
|
+
].filter((part) => part.length > 0)
|
|
71
|
+
return {
|
|
72
|
+
title: task ? `Learned: ${head(task, MAX_TASK_IN_TITLE)}` : `Learned in run ${meta.runId}`,
|
|
73
|
+
summary: `${counts.join(', ')} from run ${meta.runId}.`,
|
|
74
|
+
content,
|
|
75
|
+
format: 'markdown',
|
|
76
|
+
tags: [CONSOLIDATION_TAG, `run:${meta.runId}`],
|
|
77
|
+
metadata: { runId: meta.runId, consolidatedAt: meta.at, kind: 'consolidation' },
|
|
78
|
+
}
|
|
79
|
+
}
|
|
@@ -33,6 +33,9 @@ export function createConversationManager(
|
|
|
33
33
|
): ConversationManager {
|
|
34
34
|
switch (strategy) {
|
|
35
35
|
case 'structured':
|
|
36
|
+
case 'salience':
|
|
37
|
+
// The salience pass changes what is evicted, not how the state
|
|
38
|
+
// slots are kept; the structured manager owns those for both.
|
|
36
39
|
return new StructuredCompactionManager(config)
|
|
37
40
|
case 'sliding-window':
|
|
38
41
|
return new SlidingWindowManager({
|
package/src/compaction/index.ts
CHANGED
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
export type {
|
|
2
|
-
|
|
3
|
-
PlanSlot,
|
|
4
|
-
FileSlot,
|
|
2
|
+
CompactionStrategy,
|
|
5
3
|
FileAction,
|
|
4
|
+
FileSlot,
|
|
5
|
+
PinSlot,
|
|
6
|
+
PlanSlot,
|
|
6
7
|
ToolResultSlot,
|
|
7
|
-
|
|
8
|
+
WorkingState,
|
|
9
|
+
WorkingStatePin,
|
|
8
10
|
} from './types.js'
|
|
9
11
|
|
|
10
12
|
export type {
|
|
@@ -70,3 +72,31 @@ export type { ToolResultEditConfig, ToolResultEditOutcome } from './tool-result-
|
|
|
70
72
|
export { compactNow, compactRegion } from './manual.js'
|
|
71
73
|
export type { CompactionResult, CompactNowInput, CompactRegionInput } from './manual.js'
|
|
72
74
|
export { COMPACTION_HEADER, buildCompactionMessage, isCompactionMessage } from './summary.js'
|
|
75
|
+
|
|
76
|
+
// The salience-scored working set: every message scored, the least salient
|
|
77
|
+
// evicted first. See `docs/sdk/salience-working-set.md`.
|
|
78
|
+
export {
|
|
79
|
+
DEFAULT_SALIENCE_CONFIG,
|
|
80
|
+
DEFAULT_SALIENCE_WEIGHTS,
|
|
81
|
+
buildGoal,
|
|
82
|
+
isStubbedNarration,
|
|
83
|
+
messageText,
|
|
84
|
+
planWorkingSet,
|
|
85
|
+
scoreMessages,
|
|
86
|
+
} from './salience/index.js'
|
|
87
|
+
export type {
|
|
88
|
+
GoalSources,
|
|
89
|
+
ProtectedReason,
|
|
90
|
+
SalienceConfig,
|
|
91
|
+
SalienceWeights,
|
|
92
|
+
ScoreOptions,
|
|
93
|
+
ScoredMessage,
|
|
94
|
+
WorkingSetAction,
|
|
95
|
+
WorkingSetOptions,
|
|
96
|
+
WorkingSetPlan,
|
|
97
|
+
} from './salience/index.js'
|
|
98
|
+
export { DEFAULT_SOFT_TARGET, planSalienceWorkingSet } from './plan.js'
|
|
99
|
+
|
|
100
|
+
// Episodic → semantic: what a run learned, as the entry a later run searches.
|
|
101
|
+
export { CONSOLIDATION_TAG, consolidationEntry } from './consolidation.js'
|
|
102
|
+
export type { ConsolidationMeta } from './consolidation.js'
|
|
@@ -1,10 +1,23 @@
|
|
|
1
1
|
import type { CompactionConfig } from '../config/runtime.js'
|
|
2
|
-
import type {
|
|
2
|
+
import type {
|
|
3
|
+
FileAction,
|
|
4
|
+
FileSlot,
|
|
5
|
+
PinSlot,
|
|
6
|
+
PlanSlot,
|
|
7
|
+
ToolResultSlot,
|
|
8
|
+
WorkingState,
|
|
9
|
+
} from './types.js'
|
|
10
|
+
|
|
11
|
+
/** Pins kept at most; the oldest is dropped past this, and the drop is counted. */
|
|
12
|
+
export const MAX_PINS = 40
|
|
13
|
+
/** Characters one pin may carry; a pin is a fact, not a document. */
|
|
14
|
+
export const MAX_PIN_CHARS = 600
|
|
3
15
|
|
|
4
16
|
function createEmptyState(): WorkingState {
|
|
5
17
|
return {
|
|
6
18
|
task: '',
|
|
7
19
|
plan: [],
|
|
20
|
+
pins: new Map<string, PinSlot>(),
|
|
8
21
|
files: new Map<string, FileSlot>(),
|
|
9
22
|
decisions: [],
|
|
10
23
|
failures: [],
|
|
@@ -34,6 +47,30 @@ export class WorkingStateManager {
|
|
|
34
47
|
this.state.plan = plan
|
|
35
48
|
}
|
|
36
49
|
|
|
50
|
+
/** Pin a fact under `key`, replacing what that key held; empty text unpins. */
|
|
51
|
+
pin(key: string, text: string, source: string): void {
|
|
52
|
+
const k = key.trim()
|
|
53
|
+
if (k.length === 0) return
|
|
54
|
+
const body = text.trim().slice(0, MAX_PIN_CHARS)
|
|
55
|
+
if (body.length === 0) {
|
|
56
|
+
this.state.pins?.delete(k)
|
|
57
|
+
return
|
|
58
|
+
}
|
|
59
|
+
if (!this.state.pins) this.state.pins = new Map()
|
|
60
|
+
this.state.pins.delete(k)
|
|
61
|
+
this.state.pins.set(k, { key: k, text: body, source, updatedAt: Date.now() })
|
|
62
|
+
while (this.state.pins.size > MAX_PINS) {
|
|
63
|
+
const oldest = [...this.state.pins.values()].sort((a, b) => a.updatedAt - b.updatedAt)[0]
|
|
64
|
+
if (!oldest) break
|
|
65
|
+
this.state.pins.delete(oldest.key)
|
|
66
|
+
this.state.evicted.pins = (this.state.evicted.pins ?? 0) + 1
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
unpin(key: string): void {
|
|
71
|
+
this.state.pins?.delete(key.trim())
|
|
72
|
+
}
|
|
73
|
+
|
|
37
74
|
trackFile(path: string, action: FileAction): void {
|
|
38
75
|
const existing = this.state.files.get(path)
|
|
39
76
|
if (existing) {
|
|
@@ -116,6 +153,7 @@ export class WorkingStateManager {
|
|
|
116
153
|
let count = 0
|
|
117
154
|
if (this.state.task) count++
|
|
118
155
|
count += this.state.plan.length
|
|
156
|
+
count += this.state.pins?.size ?? 0
|
|
119
157
|
count += this.state.files.size
|
|
120
158
|
count += this.state.decisions.length
|
|
121
159
|
count += this.state.failures.length
|