@namzu/sdk 34.2.0 → 36.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 +171 -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 +150 -0
- package/dist/provider/token-budget.js.map +1 -0
- package/dist/public-runtime.d.ts +14 -14
- package/dist/public-runtime.d.ts.map +1 -1
- package/dist/public-runtime.js +15 -10
- 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 +13 -9
- package/dist/runtime/query/executor.d.ts.map +1 -1
- package/dist/runtime/query/executor.js +144 -55
- 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 +42 -4
- package/dist/runtime/query/index.d.ts.map +1 -1
- package/dist/runtime/query/index.js +153 -52
- package/dist/runtime/query/index.js.map +1 -1
- package/dist/runtime/query/iteration/index.d.ts +3 -3
- package/dist/runtime/query/iteration/index.d.ts.map +1 -1
- package/dist/runtime/query/iteration/index.js +47 -11
- 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 +4 -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/iteration/stream-turn.d.ts.map +1 -1
- package/dist/runtime/query/iteration/stream-turn.js +10 -5
- package/dist/runtime/query/iteration/stream-turn.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/prompt.d.ts.map +1 -1
- package/dist/runtime/query/prompt.js +14 -4
- package/dist/runtime/query/prompt.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/file-walk-program.d.ts +3 -0
- package/dist/sandbox/file-walk-program.d.ts.map +1 -0
- package/dist/sandbox/file-walk-program.js +94 -0
- package/dist/sandbox/file-walk-program.js.map +1 -0
- package/dist/sandbox/file-walk.d.ts +12 -0
- package/dist/sandbox/file-walk.d.ts.map +1 -0
- package/dist/sandbox/file-walk.js +429 -0
- package/dist/sandbox/file-walk.js.map +1 -0
- package/dist/sandbox/index.d.ts +2 -0
- package/dist/sandbox/index.d.ts.map +1 -1
- package/dist/sandbox/index.js +1 -0
- package/dist/sandbox/index.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 +121 -12
- package/dist/sandbox/provider/local.js.map +1 -1
- package/dist/scheduler/completion-inbox.d.ts +3 -2
- package/dist/scheduler/completion-inbox.d.ts.map +1 -1
- package/dist/scheduler/completion-inbox.js +29 -15
- package/dist/scheduler/completion-inbox.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 +224 -70
- 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.d.ts +2 -1
- package/dist/tools/builtins/glob.d.ts.map +1 -1
- package/dist/tools/builtins/glob.js +95 -103
- package/dist/tools/builtins/glob.js.map +1 -1
- package/dist/tools/builtins/grep.d.ts.map +1 -1
- package/dist/tools/builtins/grep.js +155 -111
- package/dist/tools/builtins/grep.js.map +1 -1
- package/dist/tools/builtins/ls.js +4 -4
- 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 +47 -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 +6 -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 +158 -0
- package/src/public-runtime.ts +56 -28
- 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 +181 -71
- package/src/runtime/query/guard.ts +8 -0
- package/src/runtime/query/index.ts +209 -62
- package/src/runtime/query/iteration/index.ts +53 -15
- package/src/runtime/query/iteration/phases/compaction.ts +130 -31
- package/src/runtime/query/iteration/phases/context.ts +4 -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/iteration/stream-turn.ts +9 -5
- package/src/runtime/query/plugin-hooks.ts +24 -2
- package/src/runtime/query/prompt.ts +21 -4
- 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/file-walk-program.ts +93 -0
- package/src/sandbox/file-walk.ts +463 -0
- package/src/sandbox/index.ts +2 -0
- package/src/sandbox/provider/local.ts +136 -13
- package/src/scheduler/completion-inbox.ts +29 -19
- 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 +241 -70
- package/src/tools/builtins/computer-use.ts +6 -2
- package/src/tools/builtins/edit.ts +2 -2
- package/src/tools/builtins/glob.ts +104 -122
- package/src/tools/builtins/grep.ts +166 -132
- package/src/tools/builtins/ls.ts +4 -4
- 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 +53 -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 @@
|
|
|
1
|
+
{"version":3,"file":"score.d.ts","sourceRoot":"","sources":["../../../src/compaction/salience/score.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,KAAK,EAAoB,OAAO,EAAe,MAAM,8BAA8B,CAAA;AAO1F,MAAM,WAAW,eAAe;IAC/B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;CAC3B;AAED,eAAO,MAAM,wBAAwB,EAAE,eAKtC,CAAA;AAED,MAAM,WAAW,cAAc;IAC9B,+CAA+C;IAC/C,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAA;IACjC,2EAA2E;IAC3E,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAA;IACnC,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAA;CACjC;AAED,eAAO,MAAM,uBAAuB,EAAE,cAIrC,CAAA;AAED,MAAM,MAAM,eAAe,GAAG,cAAc,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,CAAA;AAE3E,MAAM,WAAW,aAAa;IAC7B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,CAAA;IAC9B,+EAA+E;IAC/E,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B,yFAAyF;IACzF,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,SAAS,EAAE,eAAe,GAAG,IAAI,CAAA;CAC1C;AAED,MAAM,WAAW,YAAY;IAC5B,6FAA6F;IAC7F,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,0DAA0D;IAC1D,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAA;IACnC,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,CAAA;CACzC;AAED,4EAA4E;AAC5E,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAcpD;AAuBD,wBAAgB,aAAa,CAC5B,QAAQ,EAAE,SAAS,OAAO,EAAE,EAC5B,OAAO,EAAE,YAAY,GACnB,aAAa,EAAE,CAoLjB"}
|
|
@@ -0,0 +1,256 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Salience: how much the next step depends on each message.
|
|
3
|
+
*
|
|
4
|
+
* The compaction pass chose what to keep by position — the floor, the
|
|
5
|
+
* last few turns, the last few tool results — and a fact stated in the
|
|
6
|
+
* middle of a long run aged out at the same rate as chatter. This gives
|
|
7
|
+
* every message a number instead, from four things the kernel can
|
|
8
|
+
* observe without a model:
|
|
9
|
+
*
|
|
10
|
+
* recency how many messages ago, decayed with a half-life;
|
|
11
|
+
* relevance BM25 against the goal — the task, the requirements, the
|
|
12
|
+
* open plan items, the latest intent;
|
|
13
|
+
* utility whether it was USED: a tool result whose paths and
|
|
14
|
+
* identifiers reappear in a later tool input or assistant
|
|
15
|
+
* turn; an instruction from the user;
|
|
16
|
+
* redundancy whether a later message says the same thing — a repeated
|
|
17
|
+
* read, the same error twice — so the older copy yields.
|
|
18
|
+
*
|
|
19
|
+
* What no score may cross is stated as `protected`: the leading system
|
|
20
|
+
* run, `retain` markers with the turn they pull in, the most recent
|
|
21
|
+
* turns, and the other half of a tool-call pair. Pure, like `plan.ts`:
|
|
22
|
+
* no run, no logger, no provider, so it can be asked without one.
|
|
23
|
+
*/
|
|
24
|
+
import { findRetainedIndices } from '../retention.js';
|
|
25
|
+
import { estimateMessageTokens } from '../token-estimate.js';
|
|
26
|
+
import { bm25Score, buildIndex, indexDocument } from './bm25.js';
|
|
27
|
+
import { isEmptySignature, minhash, similarity } from './minhash.js';
|
|
28
|
+
import { tokenize } from './tokenize.js';
|
|
29
|
+
export const DEFAULT_SALIENCE_WEIGHTS = {
|
|
30
|
+
recency: 1,
|
|
31
|
+
relevance: 1,
|
|
32
|
+
utility: 1,
|
|
33
|
+
redundancy: 1,
|
|
34
|
+
};
|
|
35
|
+
export const DEFAULT_SALIENCE_CONFIG = {
|
|
36
|
+
halfLifeMessages: 12,
|
|
37
|
+
duplicateThreshold: 0.8,
|
|
38
|
+
weights: DEFAULT_SALIENCE_WEIGHTS,
|
|
39
|
+
};
|
|
40
|
+
/** The model-visible text of a message, with an assistant's tool inputs. */
|
|
41
|
+
export function messageText(message) {
|
|
42
|
+
if (message.role === 'tool') {
|
|
43
|
+
return typeof message.content === 'string'
|
|
44
|
+
? message.content
|
|
45
|
+
: message.content.flatMap((block) => (block.type === 'text' ? [block.text] : [])).join('\n');
|
|
46
|
+
}
|
|
47
|
+
const parts = [];
|
|
48
|
+
if (typeof message.content === 'string')
|
|
49
|
+
parts.push(message.content);
|
|
50
|
+
if (message.role === 'assistant') {
|
|
51
|
+
for (const call of message.toolCalls ?? []) {
|
|
52
|
+
parts.push(call.function.name, call.function.arguments);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
return parts.join('\n');
|
|
56
|
+
}
|
|
57
|
+
function hasRichContent(message) {
|
|
58
|
+
return ((message.role === 'user' && (message.attachments?.length ?? 0) > 0) ||
|
|
59
|
+
(message.role === 'tool' &&
|
|
60
|
+
typeof message.content !== 'string' &&
|
|
61
|
+
message.content.some((block) => block.type !== 'text')));
|
|
62
|
+
}
|
|
63
|
+
const isAssistantWithCalls = (m) => m.role === 'assistant' && Array.isArray(m.toolCalls);
|
|
64
|
+
/** Tokens that look like something a later turn could cite: paths, identifiers, dotted keys. */
|
|
65
|
+
function citable(tokens) {
|
|
66
|
+
const out = new Set();
|
|
67
|
+
for (const token of tokens) {
|
|
68
|
+
if (token.length >= 5 || token.includes('/') || token.includes('.'))
|
|
69
|
+
out.add(token);
|
|
70
|
+
}
|
|
71
|
+
return out;
|
|
72
|
+
}
|
|
73
|
+
export function scoreMessages(messages, options) {
|
|
74
|
+
const config = {
|
|
75
|
+
...DEFAULT_SALIENCE_CONFIG,
|
|
76
|
+
...options.config,
|
|
77
|
+
weights: { ...DEFAULT_SALIENCE_WEIGHTS, ...options.config?.weights },
|
|
78
|
+
};
|
|
79
|
+
const n = messages.length;
|
|
80
|
+
const texts = messages.map(messageText);
|
|
81
|
+
const richContent = messages.map(hasRichContent);
|
|
82
|
+
const tokenLists = texts.map(tokenize);
|
|
83
|
+
const documents = texts.map(indexDocument);
|
|
84
|
+
const index = buildIndex(documents);
|
|
85
|
+
const goalTokens = tokenize(options.goal);
|
|
86
|
+
// Relevance, normalised to the best message of the pass so weights mean
|
|
87
|
+
// the same thing in a short run and a long one.
|
|
88
|
+
// Normalised to the best message the pass could evict, not to the user
|
|
89
|
+
// turn that stated the goal: that turn matches the goal by definition,
|
|
90
|
+
// and measured against it every result reads as barely relevant.
|
|
91
|
+
const rawRelevance = documents.map((doc) => bm25Score(index, doc, goalTokens));
|
|
92
|
+
// Nor to an assistant turn that only issued a call: its arguments echo
|
|
93
|
+
// the goal's path in a dozen tokens, which BM25 scores above the
|
|
94
|
+
// four-thousand-token result that actually holds the file.
|
|
95
|
+
const maxRelevance = Math.max(0, ...rawRelevance.filter((_, i) => {
|
|
96
|
+
const m = messages[i];
|
|
97
|
+
return m.role === 'tool' || (m.role === 'assistant' && !isAssistantWithCalls(m));
|
|
98
|
+
}));
|
|
99
|
+
// Citation index: everything a LATER assistant turn or tool input names.
|
|
100
|
+
// Built once, suffix-wise, so each message asks "does anything after me
|
|
101
|
+
// cite my identifiers" in one lookup.
|
|
102
|
+
const citedAfter = new Array(n);
|
|
103
|
+
let running = new Set();
|
|
104
|
+
for (let i = n - 1; i >= 0; i -= 1) {
|
|
105
|
+
citedAfter[i] = running;
|
|
106
|
+
const message = messages[i];
|
|
107
|
+
if (message.role === 'assistant' || message.role === 'user') {
|
|
108
|
+
running = new Set([...running, ...citable(tokenLists[i])]);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
// Redundancy: the highest similarity to any later message of the same
|
|
112
|
+
// role, and a full demotion when a later assistant turn repeats this
|
|
113
|
+
// message's tool call exactly.
|
|
114
|
+
const signatures = tokenLists.map(minhash);
|
|
115
|
+
const callKeys = messages.map((m) => isAssistantWithCalls(m)
|
|
116
|
+
? (m.toolCalls ?? []).map((c) => `${c.function.name}:${c.function.arguments}`)
|
|
117
|
+
: []);
|
|
118
|
+
const laterCallKeys = new Array(n);
|
|
119
|
+
let calls = new Set();
|
|
120
|
+
for (let i = n - 1; i >= 0; i -= 1) {
|
|
121
|
+
laterCallKeys[i] = calls;
|
|
122
|
+
if (callKeys[i].length > 0)
|
|
123
|
+
calls = new Set([...calls, ...callKeys[i]]);
|
|
124
|
+
}
|
|
125
|
+
// Protection.
|
|
126
|
+
const protectedBy = new Array(n).fill(null);
|
|
127
|
+
let floorEnd = 0;
|
|
128
|
+
while (floorEnd < n && messages[floorEnd]?.role === 'system') {
|
|
129
|
+
protectedBy[floorEnd] = 'system-floor';
|
|
130
|
+
floorEnd += 1;
|
|
131
|
+
}
|
|
132
|
+
for (const i of findRetainedIndices(messages))
|
|
133
|
+
if (protectedBy[i] === null)
|
|
134
|
+
protectedBy[i] = 'retain';
|
|
135
|
+
for (let i = Math.max(floorEnd, n - options.keepRecentMessages); i < n; i += 1) {
|
|
136
|
+
if (protectedBy[i] === null)
|
|
137
|
+
protectedBy[i] = 'recent';
|
|
138
|
+
}
|
|
139
|
+
// A protected half of a pair protects the other half.
|
|
140
|
+
for (let i = 0; i < n; i += 1) {
|
|
141
|
+
const message = messages[i];
|
|
142
|
+
if (!isAssistantWithCalls(message) || protectedBy[i] === null)
|
|
143
|
+
continue;
|
|
144
|
+
const ids = new Set((message.toolCalls ?? []).map((c) => c.id));
|
|
145
|
+
for (let j = i + 1; j < n && ids.size > 0; j += 1) {
|
|
146
|
+
const candidate = messages[j];
|
|
147
|
+
if (candidate.role !== 'tool') {
|
|
148
|
+
if (candidate.role === 'assistant')
|
|
149
|
+
break;
|
|
150
|
+
continue;
|
|
151
|
+
}
|
|
152
|
+
if (ids.has(candidate.toolCallId)) {
|
|
153
|
+
ids.delete(candidate.toolCallId);
|
|
154
|
+
if (protectedBy[j] === null)
|
|
155
|
+
protectedBy[j] = 'pair';
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
for (let j = n - 1; j >= 0; j -= 1) {
|
|
160
|
+
const message = messages[j];
|
|
161
|
+
if (message.role !== 'tool' || protectedBy[j] === null)
|
|
162
|
+
continue;
|
|
163
|
+
const id = message.toolCallId;
|
|
164
|
+
for (let i = j - 1; i >= 0; i -= 1) {
|
|
165
|
+
const candidate = messages[i];
|
|
166
|
+
if (isAssistantWithCalls(candidate) && (candidate.toolCalls ?? []).some((c) => c.id === id)) {
|
|
167
|
+
if (protectedBy[i] === null)
|
|
168
|
+
protectedBy[i] = 'pair';
|
|
169
|
+
break;
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
const scored = [];
|
|
174
|
+
for (let i = 0; i < n; i += 1) {
|
|
175
|
+
const message = messages[i];
|
|
176
|
+
const distance = n - 1 - i;
|
|
177
|
+
const recency = 2 ** (-distance / Math.max(1, config.halfLifeMessages));
|
|
178
|
+
const relevance = maxRelevance > 0 ? rawRelevance[i] / maxRelevance : 0;
|
|
179
|
+
let utility = 0;
|
|
180
|
+
if (message.role === 'user') {
|
|
181
|
+
// An instruction is used by everything after it; an acknowledgment
|
|
182
|
+
// ("ok, go on") is not an instruction. The difference is whether it
|
|
183
|
+
// names anything or says more than a few words.
|
|
184
|
+
const tokens = tokenLists[i];
|
|
185
|
+
utility = citable(tokens).size > 0 || tokens.length >= 6 ? 1 : 0.2;
|
|
186
|
+
}
|
|
187
|
+
else if (message.role === 'tool') {
|
|
188
|
+
// Used is used: one identifier from this result named by a later
|
|
189
|
+
// turn is the evidence, and a count would let the recency of
|
|
190
|
+
// everything after it outvote the one result the run came back
|
|
191
|
+
// for. The eval that placed the account id deep in an early dump
|
|
192
|
+
// and cited it later watched the salience pass clear it under a
|
|
193
|
+
// thirds rule.
|
|
194
|
+
const mine = citable(tokenLists[i]);
|
|
195
|
+
let hits = 0;
|
|
196
|
+
for (const token of mine)
|
|
197
|
+
if (citedAfter[i].has(token))
|
|
198
|
+
hits += 1;
|
|
199
|
+
utility = hits > 0 ? 1 : 0;
|
|
200
|
+
}
|
|
201
|
+
else if (isAssistantWithCalls(message))
|
|
202
|
+
utility = 0.5;
|
|
203
|
+
let redundancy = 0;
|
|
204
|
+
const signature = signatures[i];
|
|
205
|
+
// A caption or a repeated call cannot prove that two screenshots or
|
|
206
|
+
// documents contain the same evidence. The lexical scorer has no
|
|
207
|
+
// access to their meaning, so it must not call those messages duplicates.
|
|
208
|
+
if (!richContent[i] && !isEmptySignature(signature)) {
|
|
209
|
+
for (let j = i + 1; j < n; j += 1) {
|
|
210
|
+
if (richContent[j] || messages[j].role !== message.role)
|
|
211
|
+
continue;
|
|
212
|
+
const sim = similarity(signature, signatures[j]);
|
|
213
|
+
if (sim > redundancy)
|
|
214
|
+
redundancy = sim;
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
if (redundancy < config.duplicateThreshold)
|
|
218
|
+
redundancy = redundancy >= 0.5 ? redundancy : 0;
|
|
219
|
+
else
|
|
220
|
+
redundancy = 1;
|
|
221
|
+
if (message.role === 'tool' && !richContent[i]) {
|
|
222
|
+
// The result of a call a later turn repeats exactly: the newer
|
|
223
|
+
// result is the one that counts.
|
|
224
|
+
for (let k = i - 1; k >= 0; k -= 1) {
|
|
225
|
+
const producer = messages[k];
|
|
226
|
+
if (!isAssistantWithCalls(producer))
|
|
227
|
+
continue;
|
|
228
|
+
const call = (producer.toolCalls ?? []).find((c) => c.id === message.toolCallId);
|
|
229
|
+
if (call) {
|
|
230
|
+
const key = `${call.function.name}:${call.function.arguments}`;
|
|
231
|
+
if (laterCallKeys[i].has(key))
|
|
232
|
+
redundancy = 1;
|
|
233
|
+
break;
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
const w = config.weights;
|
|
238
|
+
const salience = w.recency * recency +
|
|
239
|
+
w.relevance * relevance +
|
|
240
|
+
w.utility * utility -
|
|
241
|
+
w.redundancy * redundancy;
|
|
242
|
+
scored.push({
|
|
243
|
+
index: i,
|
|
244
|
+
role: message.role,
|
|
245
|
+
tokens: estimateMessageTokens(message),
|
|
246
|
+
recency,
|
|
247
|
+
relevance,
|
|
248
|
+
utility,
|
|
249
|
+
redundancy,
|
|
250
|
+
salience,
|
|
251
|
+
protected: protectedBy[i],
|
|
252
|
+
});
|
|
253
|
+
}
|
|
254
|
+
return scored;
|
|
255
|
+
}
|
|
256
|
+
//# sourceMappingURL=score.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"score.js","sourceRoot":"","sources":["../../../src/compaction/salience/score.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* An identifier-aware tokenizer for scoring, not for search.
|
|
3
|
+
*
|
|
4
|
+
* A coding conversation's vocabulary is paths, identifiers and error
|
|
5
|
+
* names. A word tokenizer sees `src/store.mjs` as one token that matches
|
|
6
|
+
* nothing and `removeTodo` as another; the model, asked about `store`,
|
|
7
|
+
* is looking at both. So a path splits on its separators, a `camelCase`
|
|
8
|
+
* or `snake_case` identifier splits into its words AND keeps its whole
|
|
9
|
+
* form, and a dotted attribute key (`namzu.run.id`) yields both the key
|
|
10
|
+
* and its parts. Everything is lower-cased; nothing is stemmed, because
|
|
11
|
+
* a stemmer that turns `tests` into `test` also turns `testing` into it,
|
|
12
|
+
* and the false matches cost more than the missed ones in a corpus this
|
|
13
|
+
* small. Stop words are the handful that carry no relevance in any
|
|
14
|
+
* sentence and would otherwise dominate term frequency.
|
|
15
|
+
*/
|
|
16
|
+
/** Tokens of `text`, lower-cased, with identifiers and paths opened up. */
|
|
17
|
+
export declare function tokenize(text: string): string[];
|
|
18
|
+
/** Term frequencies of `tokens`. */
|
|
19
|
+
export declare function termFrequencies(tokens: readonly string[]): Map<string, number>;
|
|
20
|
+
//# sourceMappingURL=tokenize.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tokenize.d.ts","sourceRoot":"","sources":["../../../src/compaction/salience/tokenize.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AA2CH,2EAA2E;AAC3E,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAuB/C;AAED,oCAAoC;AACpC,wBAAgB,eAAe,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAI9E"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* An identifier-aware tokenizer for scoring, not for search.
|
|
3
|
+
*
|
|
4
|
+
* A coding conversation's vocabulary is paths, identifiers and error
|
|
5
|
+
* names. A word tokenizer sees `src/store.mjs` as one token that matches
|
|
6
|
+
* nothing and `removeTodo` as another; the model, asked about `store`,
|
|
7
|
+
* is looking at both. So a path splits on its separators, a `camelCase`
|
|
8
|
+
* or `snake_case` identifier splits into its words AND keeps its whole
|
|
9
|
+
* form, and a dotted attribute key (`namzu.run.id`) yields both the key
|
|
10
|
+
* and its parts. Everything is lower-cased; nothing is stemmed, because
|
|
11
|
+
* a stemmer that turns `tests` into `test` also turns `testing` into it,
|
|
12
|
+
* and the false matches cost more than the missed ones in a corpus this
|
|
13
|
+
* small. Stop words are the handful that carry no relevance in any
|
|
14
|
+
* sentence and would otherwise dominate term frequency.
|
|
15
|
+
*/
|
|
16
|
+
const STOP_WORDS = new Set([
|
|
17
|
+
'a',
|
|
18
|
+
'an',
|
|
19
|
+
'and',
|
|
20
|
+
'are',
|
|
21
|
+
'as',
|
|
22
|
+
'at',
|
|
23
|
+
'be',
|
|
24
|
+
'by',
|
|
25
|
+
'for',
|
|
26
|
+
'from',
|
|
27
|
+
'i',
|
|
28
|
+
'if',
|
|
29
|
+
'in',
|
|
30
|
+
'is',
|
|
31
|
+
'it',
|
|
32
|
+
'of',
|
|
33
|
+
'on',
|
|
34
|
+
'or',
|
|
35
|
+
'that',
|
|
36
|
+
'the',
|
|
37
|
+
'then',
|
|
38
|
+
'this',
|
|
39
|
+
'to',
|
|
40
|
+
'was',
|
|
41
|
+
'will',
|
|
42
|
+
'with',
|
|
43
|
+
'you',
|
|
44
|
+
]);
|
|
45
|
+
const WORD = /[\p{L}\p{N}_$][\p{L}\p{N}_$.\-/\\:]*/gu;
|
|
46
|
+
function splitIdentifier(raw) {
|
|
47
|
+
const parts = raw
|
|
48
|
+
.replace(/([a-z0-9])([A-Z])/g, '$1 $2')
|
|
49
|
+
.replace(/([A-Z]+)([A-Z][a-z])/g, '$1 $2')
|
|
50
|
+
.split(/[_\s]+/)
|
|
51
|
+
.filter((p) => p.length > 0);
|
|
52
|
+
return parts.length > 1 ? parts : [];
|
|
53
|
+
}
|
|
54
|
+
/** Tokens of `text`, lower-cased, with identifiers and paths opened up. */
|
|
55
|
+
export function tokenize(text) {
|
|
56
|
+
const out = [];
|
|
57
|
+
for (const match of text.matchAll(WORD)) {
|
|
58
|
+
const raw = match[0].replace(/^[.\-/\\:]+|[.\-/\\:]+$/g, '');
|
|
59
|
+
if (raw.length === 0)
|
|
60
|
+
continue;
|
|
61
|
+
const whole = raw.toLowerCase();
|
|
62
|
+
if (!STOP_WORDS.has(whole))
|
|
63
|
+
out.push(whole);
|
|
64
|
+
// Separators first: a path or dotted key contributes each segment.
|
|
65
|
+
const segments = raw.split(/[/\\.:\-]+/).filter((s) => s.length > 0);
|
|
66
|
+
if (segments.length > 1) {
|
|
67
|
+
for (const segment of segments) {
|
|
68
|
+
const lower = segment.toLowerCase();
|
|
69
|
+
if (!STOP_WORDS.has(lower) && lower !== whole)
|
|
70
|
+
out.push(lower);
|
|
71
|
+
for (const part of splitIdentifier(segment))
|
|
72
|
+
out.push(part.toLowerCase());
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
for (const part of splitIdentifier(raw)) {
|
|
77
|
+
const lower = part.toLowerCase();
|
|
78
|
+
if (!STOP_WORDS.has(lower))
|
|
79
|
+
out.push(lower);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
return out;
|
|
84
|
+
}
|
|
85
|
+
/** Term frequencies of `tokens`. */
|
|
86
|
+
export function termFrequencies(tokens) {
|
|
87
|
+
const tf = new Map();
|
|
88
|
+
for (const token of tokens)
|
|
89
|
+
tf.set(token, (tf.get(token) ?? 0) + 1);
|
|
90
|
+
return tf;
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=tokenize.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tokenize.js","sourceRoot":"","sources":["../../../src/compaction/salience/tokenize.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The working set: which messages stay whole for the next call.
|
|
3
|
+
*
|
|
4
|
+
* Given every message's salience, choose the cheapest actions that bring
|
|
5
|
+
* the estimated context under a target, lowest salience first, then the
|
|
6
|
+
* larger result among equally salient candidates:
|
|
7
|
+
*
|
|
8
|
+
* clear replace a tool result with the same excerpt the stale pass
|
|
9
|
+
* uses, retaining a saved-artifact pointer when one exists;
|
|
10
|
+
* stub cut an assistant narration to its first sentence — the
|
|
11
|
+
* decision survives, the paragraph around it does not.
|
|
12
|
+
*
|
|
13
|
+
* Nothing protected is touched, and a message is never removed: the
|
|
14
|
+
* shape of the conversation — every `tool_use` beside its `tool_result`,
|
|
15
|
+
* every turn boundary — is exactly what it was, which is what makes this
|
|
16
|
+
* safe to run on every iteration. Folding a span into the structured
|
|
17
|
+
* state and summarising stay with the existing plan, which runs after
|
|
18
|
+
* this when the target could not be reached. Pure, like the rest of the
|
|
19
|
+
* compaction arithmetic.
|
|
20
|
+
*/
|
|
21
|
+
import type { Message } from '../../types/message/index.js';
|
|
22
|
+
import type { ScoredMessage } from './score.js';
|
|
23
|
+
export interface WorkingSetAction {
|
|
24
|
+
readonly kind: 'clear' | 'stub';
|
|
25
|
+
readonly index: number;
|
|
26
|
+
readonly charsReclaimed: number;
|
|
27
|
+
}
|
|
28
|
+
export interface WorkingSetPlan {
|
|
29
|
+
readonly messages: Message[];
|
|
30
|
+
readonly actions: readonly WorkingSetAction[];
|
|
31
|
+
readonly clearedCount: number;
|
|
32
|
+
readonly stubbedCount: number;
|
|
33
|
+
readonly charsReclaimed: number;
|
|
34
|
+
readonly reclaimedTokens: number;
|
|
35
|
+
/** Whether the actions brought the estimate under the target. */
|
|
36
|
+
readonly reachedTarget: boolean;
|
|
37
|
+
}
|
|
38
|
+
export interface WorkingSetOptions {
|
|
39
|
+
readonly estimatedTokens: number;
|
|
40
|
+
readonly targetTokens: number;
|
|
41
|
+
/** Tool results smaller than this are not worth a placeholder. */
|
|
42
|
+
readonly minToolResultChars?: number;
|
|
43
|
+
/** Assistant narrations shorter than this keep their whole text. */
|
|
44
|
+
readonly minNarrationChars?: number;
|
|
45
|
+
/** Tools whose results are never cleared. */
|
|
46
|
+
readonly preserveTools?: readonly string[];
|
|
47
|
+
/**
|
|
48
|
+
* A message the goal names or a later turn cited is not evicted to
|
|
49
|
+
* reach the target while it scores above this fraction of the most
|
|
50
|
+
* salient evictable message. A strict target evicted the one result
|
|
51
|
+
* the goal named to shave the last few tokens — an eval watched it
|
|
52
|
+
* happen — and a pass that stops short and says so is the better
|
|
53
|
+
* answer: the trigger threshold still guards the hard limit.
|
|
54
|
+
*/
|
|
55
|
+
readonly keepAboveFraction?: number;
|
|
56
|
+
}
|
|
57
|
+
export declare function isStubbedNarration(content: unknown): boolean;
|
|
58
|
+
export declare function planWorkingSet(messages: readonly Message[], scored: readonly ScoredMessage[], options: WorkingSetOptions): WorkingSetPlan;
|
|
59
|
+
//# sourceMappingURL=working-set.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"working-set.d.ts","sourceRoot":"","sources":["../../../src/compaction/salience/working-set.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAGH,OAAO,KAAK,EAAoB,OAAO,EAAe,MAAM,8BAA8B,CAAA;AAG1F,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAE/C,MAAM,WAAW,gBAAgB;IAChC,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAAA;IAC/B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAA;CAC/B;AAED,MAAM,WAAW,cAAc;IAC9B,QAAQ,CAAC,QAAQ,EAAE,OAAO,EAAE,CAAA;IAC5B,QAAQ,CAAC,OAAO,EAAE,SAAS,gBAAgB,EAAE,CAAA;IAC7C,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAA;IAC/B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAA;IAChC,iEAAiE;IACjE,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAA;CAC/B;AAED,MAAM,WAAW,iBAAiB;IACjC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAA;IAChC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;IAC7B,kEAAkE;IAClE,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,CAAA;IACpC,oEAAoE;IACpE,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAA;IACnC,6CAA6C;IAC7C,QAAQ,CAAC,aAAa,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IAC1C;;;;;;;OAOG;IACH,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAA;CACnC;AASD,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAE5D;AAED,wBAAgB,cAAc,CAC7B,QAAQ,EAAE,SAAS,OAAO,EAAE,EAC5B,MAAM,EAAE,SAAS,aAAa,EAAE,EAChC,OAAO,EAAE,iBAAiB,GACxB,cAAc,CA2GhB"}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The working set: which messages stay whole for the next call.
|
|
3
|
+
*
|
|
4
|
+
* Given every message's salience, choose the cheapest actions that bring
|
|
5
|
+
* the estimated context under a target, lowest salience first, then the
|
|
6
|
+
* larger result among equally salient candidates:
|
|
7
|
+
*
|
|
8
|
+
* clear replace a tool result with the same excerpt the stale pass
|
|
9
|
+
* uses, retaining a saved-artifact pointer when one exists;
|
|
10
|
+
* stub cut an assistant narration to its first sentence — the
|
|
11
|
+
* decision survives, the paragraph around it does not.
|
|
12
|
+
*
|
|
13
|
+
* Nothing protected is touched, and a message is never removed: the
|
|
14
|
+
* shape of the conversation — every `tool_use` beside its `tool_result`,
|
|
15
|
+
* every turn boundary — is exactly what it was, which is what makes this
|
|
16
|
+
* safe to run on every iteration. Folding a span into the structured
|
|
17
|
+
* state and summarising stay with the existing plan, which runs after
|
|
18
|
+
* this when the target could not be reached. Pure, like the rest of the
|
|
19
|
+
* compaction arithmetic.
|
|
20
|
+
*/
|
|
21
|
+
import { CHARS_PER_TOKEN } from '../../constants/limits.js';
|
|
22
|
+
import { estimateMessageTokens } from '../token-estimate.js';
|
|
23
|
+
import { clearToolResult, isClearedToolResult } from '../tool-result-editing.js';
|
|
24
|
+
const STUB_MARK = '… (elided';
|
|
25
|
+
function firstSentence(text) {
|
|
26
|
+
const match = /^[\s\S]*?[.!?](?=\s|$)/u.exec(text.trim());
|
|
27
|
+
return (match ? match[0] : (text.trim().split('\n')[0] ?? '')).slice(0, 240);
|
|
28
|
+
}
|
|
29
|
+
export function isStubbedNarration(content) {
|
|
30
|
+
return typeof content === 'string' && content.includes(STUB_MARK);
|
|
31
|
+
}
|
|
32
|
+
export function planWorkingSet(messages, scored, options) {
|
|
33
|
+
const minTool = options.minToolResultChars ?? 1_000;
|
|
34
|
+
const minNarration = options.minNarrationChars ?? 240;
|
|
35
|
+
const preserve = new Set(options.preserveTools ?? []);
|
|
36
|
+
const toolNameByCallId = new Map();
|
|
37
|
+
for (const m of messages) {
|
|
38
|
+
if (m.role !== 'assistant')
|
|
39
|
+
continue;
|
|
40
|
+
for (const call of m.toolCalls ?? []) {
|
|
41
|
+
toolNameByCallId.set(call.id, call.function.name);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
const candidates = [];
|
|
45
|
+
for (const s of scored) {
|
|
46
|
+
if (s.protected !== null || s.tokens === 0)
|
|
47
|
+
continue;
|
|
48
|
+
const m = messages[s.index];
|
|
49
|
+
if (m.role === 'tool') {
|
|
50
|
+
const tool = m;
|
|
51
|
+
if (tool.isError || isClearedToolResult(tool.content))
|
|
52
|
+
continue;
|
|
53
|
+
if (preserve.has(toolNameByCallId.get(tool.toolCallId) ?? ''))
|
|
54
|
+
continue;
|
|
55
|
+
if (s.tokens * CHARS_PER_TOKEN < minTool)
|
|
56
|
+
continue;
|
|
57
|
+
candidates.push({
|
|
58
|
+
index: s.index,
|
|
59
|
+
kind: 'clear',
|
|
60
|
+
salience: s.salience,
|
|
61
|
+
tokens: s.tokens,
|
|
62
|
+
goalBound: s.relevance >= 0.5 || s.utility >= 1,
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
else if (m.role === 'assistant' && !Array.isArray(m.toolCalls)) {
|
|
66
|
+
const text = typeof m.content === 'string' ? m.content : '';
|
|
67
|
+
if (text.length < minNarration || isStubbedNarration(text))
|
|
68
|
+
continue;
|
|
69
|
+
candidates.push({
|
|
70
|
+
index: s.index,
|
|
71
|
+
kind: 'stub',
|
|
72
|
+
salience: s.salience,
|
|
73
|
+
tokens: s.tokens,
|
|
74
|
+
goalBound: s.relevance >= 0.5 || s.utility >= 1,
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
candidates.sort((a, b) => a.salience - b.salience || b.tokens - a.tokens || a.index - b.index);
|
|
79
|
+
const maxSalience = candidates.reduce((m, c) => Math.max(m, c.salience), Number.NEGATIVE_INFINITY);
|
|
80
|
+
const floor = maxSalience * (options.keepAboveFraction ?? 0.5);
|
|
81
|
+
const next = [...messages];
|
|
82
|
+
const actions = [];
|
|
83
|
+
let charsReclaimed = 0;
|
|
84
|
+
let reclaimedTokens = 0;
|
|
85
|
+
let clearedCount = 0;
|
|
86
|
+
let stubbedCount = 0;
|
|
87
|
+
const excess = () => options.estimatedTokens - reclaimedTokens - options.targetTokens;
|
|
88
|
+
for (const candidate of candidates) {
|
|
89
|
+
if (excess() <= 0)
|
|
90
|
+
break;
|
|
91
|
+
// The floor guards what the goal names or a later turn used, not
|
|
92
|
+
// every above-average message: a run of look-alike dumps must still
|
|
93
|
+
// be evicted from the bottom when the target asks for it.
|
|
94
|
+
if (candidate.goalBound && candidate.salience > floor && candidate.salience > 0)
|
|
95
|
+
continue;
|
|
96
|
+
const m = next[candidate.index];
|
|
97
|
+
if (candidate.kind === 'clear') {
|
|
98
|
+
const tool = m;
|
|
99
|
+
const cleared = clearToolResult(tool, toolNameByCallId.get(tool.toolCallId) ?? 'unknown');
|
|
100
|
+
const tokenSaving = estimateMessageTokens(tool) - estimateMessageTokens(cleared.message);
|
|
101
|
+
if (tokenSaving <= 0)
|
|
102
|
+
continue;
|
|
103
|
+
next[candidate.index] = cleared.message;
|
|
104
|
+
charsReclaimed += cleared.charsReclaimed;
|
|
105
|
+
reclaimedTokens += tokenSaving;
|
|
106
|
+
clearedCount += 1;
|
|
107
|
+
actions.push({
|
|
108
|
+
kind: 'clear',
|
|
109
|
+
index: candidate.index,
|
|
110
|
+
charsReclaimed: cleared.charsReclaimed,
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
const text = m.content;
|
|
115
|
+
const stub = `${firstSentence(text)} ${STUB_MARK}; ${(text.length - firstSentence(text).length).toLocaleString('en-US')} characters of narration)`;
|
|
116
|
+
const reclaimed = text.length - stub.length;
|
|
117
|
+
if (reclaimed <= 0)
|
|
118
|
+
continue;
|
|
119
|
+
const stubbed = { ...m, content: stub };
|
|
120
|
+
next[candidate.index] = stubbed;
|
|
121
|
+
charsReclaimed += reclaimed;
|
|
122
|
+
reclaimedTokens += estimateMessageTokens(m) - estimateMessageTokens(stubbed);
|
|
123
|
+
stubbedCount += 1;
|
|
124
|
+
actions.push({ kind: 'stub', index: candidate.index, charsReclaimed: reclaimed });
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
return {
|
|
128
|
+
messages: next,
|
|
129
|
+
actions,
|
|
130
|
+
clearedCount,
|
|
131
|
+
stubbedCount,
|
|
132
|
+
charsReclaimed,
|
|
133
|
+
reclaimedTokens,
|
|
134
|
+
reachedTarget: excess() <= 0,
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
//# sourceMappingURL=working-set.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"working-set.js","sourceRoot":"","sources":["../../../src/compaction/salience/working-set.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
1
|
import type { WorkingState } from './types.js';
|
|
2
|
+
/** The pinned-facts section alone, or null when nothing is pinned. */
|
|
3
|
+
export declare function renderPins(state: WorkingState): string | null;
|
|
2
4
|
export declare function serializeState(state: WorkingState): string;
|
|
3
5
|
//# sourceMappingURL=serializer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serializer.d.ts","sourceRoot":"","sources":["../../src/compaction/serializer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAY,YAAY,EAAE,MAAM,YAAY,CAAA;AA2DxD,wBAAgB,cAAc,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"serializer.d.ts","sourceRoot":"","sources":["../../src/compaction/serializer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAY,YAAY,EAAE,MAAM,YAAY,CAAA;AA2DxD,sEAAsE;AACtE,wBAAgB,UAAU,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM,GAAG,IAAI,CAW7D;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM,CA4D1D"}
|