@draht/agent-core 2026.7.30 → 2026.10.4-2
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/dist/agent-loop.d.ts +27 -2
- package/dist/agent-loop.d.ts.map +1 -1
- package/dist/agent-loop.js +181 -63
- package/dist/agent-loop.js.map +1 -1
- package/dist/agent.d.ts +14 -4
- package/dist/agent.d.ts.map +1 -1
- package/dist/agent.js +68 -19
- package/dist/agent.js.map +1 -1
- package/dist/harness/agent-harness.d.ts +713 -91
- package/dist/harness/agent-harness.d.ts.map +1 -1
- package/dist/harness/agent-harness.js +5 -950
- package/dist/harness/agent-harness.js.map +1 -1
- package/dist/harness/compaction/branch-summarization.d.ts +23 -10
- package/dist/harness/compaction/branch-summarization.d.ts.map +1 -1
- package/dist/harness/compaction/branch-summarization.js +39 -36
- package/dist/harness/compaction/branch-summarization.js.map +1 -1
- package/dist/harness/compaction/compaction.d.ts +37 -18
- package/dist/harness/compaction/compaction.d.ts.map +1 -1
- package/dist/harness/compaction/compaction.js +74 -97
- package/dist/harness/compaction/compaction.js.map +1 -1
- package/dist/harness/config.d.ts +9 -0
- package/dist/harness/config.d.ts.map +1 -0
- package/dist/harness/config.js +35 -0
- package/dist/harness/config.js.map +1 -0
- package/dist/harness/context.d.ts +9 -0
- package/dist/harness/context.d.ts.map +1 -0
- package/dist/harness/context.js +13 -0
- package/dist/harness/context.js.map +1 -0
- package/dist/harness/env/nodejs.d.ts +25 -27
- package/dist/harness/env/nodejs.d.ts.map +1 -1
- package/dist/harness/env/nodejs.js +355 -110
- package/dist/harness/env/nodejs.js.map +1 -1
- package/dist/harness/events.d.ts +24 -0
- package/dist/harness/events.d.ts.map +1 -0
- package/dist/harness/events.js +233 -0
- package/dist/harness/events.js.map +1 -0
- package/dist/harness/execution/assistant.d.ts +42 -0
- package/dist/harness/execution/assistant.d.ts.map +1 -0
- package/dist/harness/execution/assistant.js +82 -0
- package/dist/harness/execution/assistant.js.map +1 -0
- package/dist/harness/execution/effect-gate.d.ts +22 -0
- package/dist/harness/execution/effect-gate.d.ts.map +1 -0
- package/dist/harness/execution/effect-gate.js +49 -0
- package/dist/harness/execution/effect-gate.js.map +1 -0
- package/dist/harness/execution/tools.d.ts +67 -0
- package/dist/harness/execution/tools.d.ts.map +1 -0
- package/dist/harness/execution/tools.js +119 -0
- package/dist/harness/execution/tools.js.map +1 -0
- package/dist/harness/hooks.d.ts +38 -0
- package/dist/harness/hooks.d.ts.map +1 -0
- package/dist/harness/hooks.js +406 -0
- package/dist/harness/hooks.js.map +1 -0
- package/dist/harness/messages.d.ts +4 -4
- package/dist/harness/messages.d.ts.map +1 -1
- package/dist/harness/messages.js +4 -3
- package/dist/harness/messages.js.map +1 -1
- package/dist/harness/pico3/bash.d.ts +10 -0
- package/dist/harness/pico3/bash.d.ts.map +1 -0
- package/dist/harness/pico3/bash.js +25 -0
- package/dist/harness/pico3/bash.js.map +1 -0
- package/dist/harness/pico3/bounded.d.ts +21 -0
- package/dist/harness/pico3/bounded.d.ts.map +1 -0
- package/dist/harness/pico3/bounded.js +98 -0
- package/dist/harness/pico3/bounded.js.map +1 -0
- package/dist/harness/pico3/chord.d.ts +41 -0
- package/dist/harness/pico3/chord.d.ts.map +1 -0
- package/dist/harness/pico3/chord.js +147 -0
- package/dist/harness/pico3/chord.js.map +1 -0
- package/dist/harness/pico3/context.d.ts +16 -0
- package/dist/harness/pico3/context.d.ts.map +1 -0
- package/dist/harness/pico3/context.js +88 -0
- package/dist/harness/pico3/context.js.map +1 -0
- package/dist/harness/pico3/harness.d.ts +198 -0
- package/dist/harness/pico3/harness.d.ts.map +1 -0
- package/dist/harness/pico3/harness.js +654 -0
- package/dist/harness/pico3/harness.js.map +1 -0
- package/dist/harness/pico3/hooks.d.ts +10 -0
- package/dist/harness/pico3/hooks.d.ts.map +1 -0
- package/dist/harness/pico3/hooks.js +33 -0
- package/dist/harness/pico3/hooks.js.map +1 -0
- package/dist/harness/pico3/index.d.ts +19 -0
- package/dist/harness/pico3/index.d.ts.map +1 -0
- package/dist/harness/pico3/index.js +15 -0
- package/dist/harness/pico3/index.js.map +1 -0
- package/dist/harness/pico3/jsonl.d.ts +58 -0
- package/dist/harness/pico3/jsonl.d.ts.map +1 -0
- package/dist/harness/pico3/jsonl.js +325 -0
- package/dist/harness/pico3/jsonl.js.map +1 -0
- package/dist/harness/pico3/kinds/collapse.d.ts +49 -0
- package/dist/harness/pico3/kinds/collapse.d.ts.map +1 -0
- package/dist/harness/pico3/kinds/collapse.js +191 -0
- package/dist/harness/pico3/kinds/collapse.js.map +1 -0
- package/dist/harness/pico3/kinds/entries.d.ts +78 -0
- package/dist/harness/pico3/kinds/entries.d.ts.map +1 -0
- package/dist/harness/pico3/kinds/entries.js +13 -0
- package/dist/harness/pico3/kinds/entries.js.map +1 -0
- package/dist/harness/pico3/kinds/frames.d.ts +9 -0
- package/dist/harness/pico3/kinds/frames.d.ts.map +1 -0
- package/dist/harness/pico3/kinds/frames.js +75 -0
- package/dist/harness/pico3/kinds/frames.js.map +1 -0
- package/dist/harness/pico3/kinds/generation.d.ts +94 -0
- package/dist/harness/pico3/kinds/generation.d.ts.map +1 -0
- package/dist/harness/pico3/kinds/generation.js +504 -0
- package/dist/harness/pico3/kinds/generation.js.map +1 -0
- package/dist/harness/pico3/kinds/job.d.ts +44 -0
- package/dist/harness/pico3/kinds/job.d.ts.map +1 -0
- package/dist/harness/pico3/kinds/job.js +143 -0
- package/dist/harness/pico3/kinds/job.js.map +1 -0
- package/dist/harness/pico3/kinds/plugin.d.ts +15 -0
- package/dist/harness/pico3/kinds/plugin.d.ts.map +1 -0
- package/dist/harness/pico3/kinds/plugin.js +35 -0
- package/dist/harness/pico3/kinds/plugin.js.map +1 -0
- package/dist/harness/pico3/kinds/post-tools.d.ts +22 -0
- package/dist/harness/pico3/kinds/post-tools.d.ts.map +1 -0
- package/dist/harness/pico3/kinds/post-tools.js +145 -0
- package/dist/harness/pico3/kinds/post-tools.js.map +1 -0
- package/dist/harness/pico3/kinds/task-api.d.ts +3 -0
- package/dist/harness/pico3/kinds/task-api.d.ts.map +1 -0
- package/dist/harness/pico3/kinds/task-api.js +45 -0
- package/dist/harness/pico3/kinds/task-api.js.map +1 -0
- package/dist/harness/pico3/kinds/tool.d.ts +43 -0
- package/dist/harness/pico3/kinds/tool.d.ts.map +1 -0
- package/dist/harness/pico3/kinds/tool.js +373 -0
- package/dist/harness/pico3/kinds/tool.js.map +1 -0
- package/dist/harness/pico3/legacy-tracker.d.ts +11 -0
- package/dist/harness/pico3/legacy-tracker.d.ts.map +1 -0
- package/dist/harness/pico3/legacy-tracker.js +41 -0
- package/dist/harness/pico3/legacy-tracker.js.map +1 -0
- package/dist/harness/pico3/membrane.d.ts +23 -0
- package/dist/harness/pico3/membrane.d.ts.map +1 -0
- package/dist/harness/pico3/membrane.js +141 -0
- package/dist/harness/pico3/membrane.js.map +1 -0
- package/dist/harness/pico3/memory.d.ts +53 -0
- package/dist/harness/pico3/memory.d.ts.map +1 -0
- package/dist/harness/pico3/memory.js +264 -0
- package/dist/harness/pico3/memory.js.map +1 -0
- package/dist/harness/pico3/scheduler.d.ts +49 -0
- package/dist/harness/pico3/scheduler.d.ts.map +1 -0
- package/dist/harness/pico3/scheduler.js +438 -0
- package/dist/harness/pico3/scheduler.js.map +1 -0
- package/dist/harness/pico3/session.d.ts +264 -0
- package/dist/harness/pico3/session.d.ts.map +1 -0
- package/dist/harness/pico3/session.js +1348 -0
- package/dist/harness/pico3/session.js.map +1 -0
- package/dist/harness/pico3/system.d.ts +126 -0
- package/dist/harness/pico3/system.d.ts.map +1 -0
- package/dist/harness/pico3/system.js +244 -0
- package/dist/harness/pico3/system.js.map +1 -0
- package/dist/harness/pico3/types.d.ts +973 -0
- package/dist/harness/pico3/types.d.ts.map +1 -0
- package/dist/harness/pico3/types.js +106 -0
- package/dist/harness/pico3/types.js.map +1 -0
- package/dist/harness/pico3/view.d.ts +34 -0
- package/dist/harness/pico3/view.d.ts.map +1 -0
- package/dist/harness/pico3/view.js +411 -0
- package/dist/harness/pico3/view.js.map +1 -0
- package/dist/harness/prompt-templates.d.ts +3 -2
- package/dist/harness/prompt-templates.d.ts.map +1 -1
- package/dist/harness/prompt-templates.js +18 -23
- package/dist/harness/prompt-templates.js.map +1 -1
- package/dist/harness/result.d.ts +133 -0
- package/dist/harness/result.d.ts.map +1 -0
- package/dist/harness/result.js +81 -0
- package/dist/harness/result.js.map +1 -0
- package/dist/harness/runtime/drive/boundary.d.ts +28 -0
- package/dist/harness/runtime/drive/boundary.d.ts.map +1 -0
- package/dist/harness/runtime/drive/boundary.js +173 -0
- package/dist/harness/runtime/drive/boundary.js.map +1 -0
- package/dist/harness/runtime/drive/checkpoint.d.ts +8 -0
- package/dist/harness/runtime/drive/checkpoint.d.ts.map +1 -0
- package/dist/harness/runtime/drive/checkpoint.js +133 -0
- package/dist/harness/runtime/drive/checkpoint.js.map +1 -0
- package/dist/harness/runtime/drive/deferred.d.ts +15 -0
- package/dist/harness/runtime/drive/deferred.d.ts.map +1 -0
- package/dist/harness/runtime/drive/deferred.js +179 -0
- package/dist/harness/runtime/drive/deferred.js.map +1 -0
- package/dist/harness/runtime/drive/generation.d.ts +8 -0
- package/dist/harness/runtime/drive/generation.d.ts.map +1 -0
- package/dist/harness/runtime/drive/generation.js +205 -0
- package/dist/harness/runtime/drive/generation.js.map +1 -0
- package/dist/harness/runtime/drive/reconcile.d.ts +5 -0
- package/dist/harness/runtime/drive/reconcile.d.ts.map +1 -0
- package/dist/harness/runtime/drive/reconcile.js +140 -0
- package/dist/harness/runtime/drive/reconcile.js.map +1 -0
- package/dist/harness/runtime/drive/recovery.d.ts +8 -0
- package/dist/harness/runtime/drive/recovery.d.ts.map +1 -0
- package/dist/harness/runtime/drive/recovery.js +85 -0
- package/dist/harness/runtime/drive/recovery.js.map +1 -0
- package/dist/harness/runtime/drive/response.d.ts +23 -0
- package/dist/harness/runtime/drive/response.d.ts.map +1 -0
- package/dist/harness/runtime/drive/response.js +394 -0
- package/dist/harness/runtime/drive/response.js.map +1 -0
- package/dist/harness/runtime/drive/retry.d.ts +4 -0
- package/dist/harness/runtime/drive/retry.d.ts.map +1 -0
- package/dist/harness/runtime/drive/retry.js +34 -0
- package/dist/harness/runtime/drive/retry.js.map +1 -0
- package/dist/harness/runtime/drive/structural.d.ts +32 -0
- package/dist/harness/runtime/drive/structural.d.ts.map +1 -0
- package/dist/harness/runtime/drive/structural.js +929 -0
- package/dist/harness/runtime/drive/structural.js.map +1 -0
- package/dist/harness/runtime/drive/terminal.d.ts +7 -0
- package/dist/harness/runtime/drive/terminal.d.ts.map +1 -0
- package/dist/harness/runtime/drive/terminal.js +49 -0
- package/dist/harness/runtime/drive/terminal.js.map +1 -0
- package/dist/harness/runtime/drive/tool-placement.d.ts +14 -0
- package/dist/harness/runtime/drive/tool-placement.d.ts.map +1 -0
- package/dist/harness/runtime/drive/tool-placement.js +219 -0
- package/dist/harness/runtime/drive/tool-placement.js.map +1 -0
- package/dist/harness/runtime/drive/tools.d.ts +6 -0
- package/dist/harness/runtime/drive/tools.d.ts.map +1 -0
- package/dist/harness/runtime/drive/tools.js +449 -0
- package/dist/harness/runtime/drive/tools.js.map +1 -0
- package/dist/harness/runtime/drive.d.ts +6 -0
- package/dist/harness/runtime/drive.d.ts.map +1 -0
- package/dist/harness/runtime/drive.js +93 -0
- package/dist/harness/runtime/drive.js.map +1 -0
- package/dist/harness/runtime/harness.d.ts +59 -0
- package/dist/harness/runtime/harness.d.ts.map +1 -0
- package/dist/harness/runtime/harness.js +311 -0
- package/dist/harness/runtime/harness.js.map +1 -0
- package/dist/harness/runtime/index.d.ts +2 -0
- package/dist/harness/runtime/index.d.ts.map +1 -0
- package/dist/harness/runtime/index.js +2 -0
- package/dist/harness/runtime/index.js.map +1 -0
- package/dist/harness/runtime/lane.d.ts +118 -0
- package/dist/harness/runtime/lane.d.ts.map +1 -0
- package/dist/harness/runtime/lane.js +1575 -0
- package/dist/harness/runtime/lane.js.map +1 -0
- package/dist/harness/runtime/progress.d.ts +15 -0
- package/dist/harness/runtime/progress.d.ts.map +1 -0
- package/dist/harness/runtime/progress.js +66 -0
- package/dist/harness/runtime/progress.js.map +1 -0
- package/dist/harness/runtime/reducer.d.ts +5 -0
- package/dist/harness/runtime/reducer.d.ts.map +1 -0
- package/dist/harness/runtime/reducer.js +240 -0
- package/dist/harness/runtime/reducer.js.map +1 -0
- package/dist/harness/runtime/restore.d.ts +24 -0
- package/dist/harness/runtime/restore.d.ts.map +1 -0
- package/dist/harness/runtime/restore.js +117 -0
- package/dist/harness/runtime/restore.js.map +1 -0
- package/dist/harness/runtime/transcript.d.ts +21 -0
- package/dist/harness/runtime/transcript.d.ts.map +1 -0
- package/dist/harness/runtime/transcript.js +72 -0
- package/dist/harness/runtime/transcript.js.map +1 -0
- package/dist/harness/runtime/types.d.ts +105 -0
- package/dist/harness/runtime/types.d.ts.map +1 -0
- package/dist/harness/runtime/types.js +61 -0
- package/dist/harness/runtime/types.js.map +1 -0
- package/dist/harness/session/commit.d.ts +53 -0
- package/dist/harness/session/commit.d.ts.map +1 -0
- package/dist/harness/session/commit.js +57 -0
- package/dist/harness/session/commit.js.map +1 -0
- package/dist/harness/session/context.d.ts +10 -0
- package/dist/harness/session/context.d.ts.map +1 -0
- package/dist/harness/session/context.js +49 -0
- package/dist/harness/session/context.js.map +1 -0
- package/dist/harness/session/fork-policy.d.ts +21 -0
- package/dist/harness/session/fork-policy.d.ts.map +1 -0
- package/dist/harness/session/fork-policy.js +55 -0
- package/dist/harness/session/fork-policy.js.map +1 -0
- package/dist/harness/session/fork.d.ts +16 -0
- package/dist/harness/session/fork.d.ts.map +1 -0
- package/dist/harness/session/fork.js +79 -0
- package/dist/harness/session/fork.js.map +1 -0
- package/dist/harness/session/in-memory-storage-state.d.ts +39 -0
- package/dist/harness/session/in-memory-storage-state.d.ts.map +1 -0
- package/dist/harness/session/in-memory-storage-state.js +276 -0
- package/dist/harness/session/in-memory-storage-state.js.map +1 -0
- package/dist/harness/session/index.d.ts +11 -0
- package/dist/harness/session/index.d.ts.map +1 -0
- package/dist/harness/session/index.js +9 -0
- package/dist/harness/session/index.js.map +1 -0
- package/dist/harness/session/jsonl/codec.d.ts +21 -0
- package/dist/harness/session/jsonl/codec.d.ts.map +1 -0
- package/dist/harness/session/jsonl/codec.js +45 -0
- package/dist/harness/session/jsonl/codec.js.map +1 -0
- package/dist/harness/session/jsonl/fork.d.ts +38 -0
- package/dist/harness/session/jsonl/fork.d.ts.map +1 -0
- package/dist/harness/session/jsonl/fork.js +264 -0
- package/dist/harness/session/jsonl/fork.js.map +1 -0
- package/dist/harness/session/jsonl/index.d.ts +4 -0
- package/dist/harness/session/jsonl/index.d.ts.map +1 -0
- package/dist/harness/session/jsonl/index.js +4 -0
- package/dist/harness/session/jsonl/index.js.map +1 -0
- package/dist/harness/session/jsonl/io.d.ts +14 -0
- package/dist/harness/session/jsonl/io.d.ts.map +1 -0
- package/dist/harness/session/jsonl/io.js +86 -0
- package/dist/harness/session/jsonl/io.js.map +1 -0
- package/dist/harness/session/jsonl/legacy-v3.d.ts +44 -0
- package/dist/harness/session/jsonl/legacy-v3.d.ts.map +1 -0
- package/dist/harness/session/jsonl/legacy-v3.js +462 -0
- package/dist/harness/session/jsonl/legacy-v3.js.map +1 -0
- package/dist/harness/session/jsonl/repo.d.ts +35 -0
- package/dist/harness/session/jsonl/repo.d.ts.map +1 -0
- package/dist/harness/session/jsonl/repo.js +301 -0
- package/dist/harness/session/jsonl/repo.js.map +1 -0
- package/dist/harness/session/jsonl/storage.d.ts +41 -0
- package/dist/harness/session/jsonl/storage.d.ts.map +1 -0
- package/dist/harness/session/jsonl/storage.js +200 -0
- package/dist/harness/session/jsonl/storage.js.map +1 -0
- package/dist/harness/session/jsonl/types.d.ts +39 -0
- package/dist/harness/session/jsonl/types.d.ts.map +1 -0
- package/dist/harness/session/jsonl/types.js +3 -0
- package/dist/harness/session/jsonl/types.js.map +1 -0
- package/dist/harness/session/memory.d.ts +48 -0
- package/dist/harness/session/memory.d.ts.map +1 -0
- package/dist/harness/session/memory.js +369 -0
- package/dist/harness/session/memory.js.map +1 -0
- package/dist/harness/session/mutation-line.d.ts +8 -0
- package/dist/harness/session/mutation-line.d.ts.map +1 -0
- package/dist/harness/session/mutation-line.js +21 -0
- package/dist/harness/session/mutation-line.js.map +1 -0
- package/dist/harness/session/session.d.ts +79 -46
- package/dist/harness/session/session.d.ts.map +1 -1
- package/dist/harness/session/session.js +320 -220
- package/dist/harness/session/session.js.map +1 -1
- package/dist/harness/session/testing/benchmark/datasets.d.ts +12 -0
- package/dist/harness/session/testing/benchmark/datasets.d.ts.map +1 -0
- package/dist/harness/session/testing/benchmark/datasets.js +24 -0
- package/dist/harness/session/testing/benchmark/datasets.js.map +1 -0
- package/dist/harness/session/testing/benchmark/session-repo.d.ts +42 -0
- package/dist/harness/session/testing/benchmark/session-repo.d.ts.map +1 -0
- package/dist/harness/session/testing/benchmark/session-repo.js +127 -0
- package/dist/harness/session/testing/benchmark/session-repo.js.map +1 -0
- package/dist/harness/session/testing/benchmark/storage.d.ts +25 -0
- package/dist/harness/session/testing/benchmark/storage.d.ts.map +1 -0
- package/dist/harness/session/testing/benchmark/storage.js +114 -0
- package/dist/harness/session/testing/benchmark/storage.js.map +1 -0
- package/dist/harness/session/testing/conformance/session-repo.d.ts +23 -0
- package/dist/harness/session/testing/conformance/session-repo.d.ts.map +1 -0
- package/dist/harness/session/testing/conformance/session-repo.js +809 -0
- package/dist/harness/session/testing/conformance/session-repo.js.map +1 -0
- package/dist/harness/session/testing/conformance/storage.d.ts +4 -0
- package/dist/harness/session/testing/conformance/storage.d.ts.map +1 -0
- package/dist/harness/session/testing/conformance/storage.js +600 -0
- package/dist/harness/session/testing/conformance/storage.js.map +1 -0
- package/dist/harness/session/testing/gating-storage.d.ts +26 -0
- package/dist/harness/session/testing/gating-storage.d.ts.map +1 -0
- package/dist/harness/session/testing/gating-storage.js +100 -0
- package/dist/harness/session/testing/gating-storage.js.map +1 -0
- package/dist/harness/session/testing/index.d.ts +10 -0
- package/dist/harness/session/testing/index.d.ts.map +1 -0
- package/dist/harness/session/testing/index.js +9 -0
- package/dist/harness/session/testing/index.js.map +1 -0
- package/dist/harness/session/testing/instrumented-storage.d.ts +11 -0
- package/dist/harness/session/testing/instrumented-storage.d.ts.map +1 -0
- package/dist/harness/session/testing/instrumented-storage.js +16 -0
- package/dist/harness/session/testing/instrumented-storage.js.map +1 -0
- package/dist/harness/session/testing/storage-decorator.d.ts +20 -0
- package/dist/harness/session/testing/storage-decorator.d.ts.map +1 -0
- package/dist/harness/session/testing/storage-decorator.js +41 -0
- package/dist/harness/session/testing/storage-decorator.js.map +1 -0
- package/dist/harness/session/testing/types.d.ts +12 -0
- package/dist/harness/session/testing/types.d.ts.map +1 -0
- package/dist/harness/session/testing/types.js +2 -0
- package/dist/harness/session/testing/types.js.map +1 -0
- package/dist/harness/session/types.d.ts +512 -0
- package/dist/harness/session/types.d.ts.map +1 -0
- package/dist/harness/session/types.js +9 -0
- package/dist/harness/session/types.js.map +1 -0
- package/dist/harness/session/values.d.ts +95 -0
- package/dist/harness/session/values.d.ts.map +1 -0
- package/dist/harness/session/values.js +81 -0
- package/dist/harness/session/values.js.map +1 -0
- package/dist/harness/skills.d.ts +6 -4
- package/dist/harness/skills.d.ts.map +1 -1
- package/dist/harness/skills.js +59 -44
- package/dist/harness/skills.js.map +1 -1
- package/dist/harness/telemetry.d.ts +1242 -0
- package/dist/harness/telemetry.d.ts.map +1 -0
- package/dist/harness/telemetry.js +527 -0
- package/dist/harness/telemetry.js.map +1 -0
- package/dist/harness/tools/bash.d.ts +4 -4
- package/dist/harness/tools/bash.d.ts.map +1 -1
- package/dist/harness/tools/bash.js +66 -93
- package/dist/harness/tools/bash.js.map +1 -1
- package/dist/harness/tools/edit.d.ts.map +1 -1
- package/dist/harness/tools/edit.js +24 -11
- package/dist/harness/tools/edit.js.map +1 -1
- package/dist/harness/tools/file-mutation-queue.d.ts +2 -1
- package/dist/harness/tools/file-mutation-queue.d.ts.map +1 -1
- package/dist/harness/tools/file-mutation-queue.js +5 -5
- package/dist/harness/tools/file-mutation-queue.js.map +1 -1
- package/dist/harness/tools/image.js +1 -1
- package/dist/harness/tools/image.js.map +1 -1
- package/dist/harness/tools/path-utils.d.ts +3 -2
- package/dist/harness/tools/path-utils.d.ts.map +1 -1
- package/dist/harness/tools/path-utils.js +5 -5
- package/dist/harness/tools/path-utils.js.map +1 -1
- package/dist/harness/tools/read.d.ts +2 -1
- package/dist/harness/tools/read.d.ts.map +1 -1
- package/dist/harness/tools/read.js +4 -6
- package/dist/harness/tools/read.js.map +1 -1
- package/dist/harness/tools/write.d.ts.map +1 -1
- package/dist/harness/tools/write.js +7 -7
- package/dist/harness/tools/write.js.map +1 -1
- package/dist/harness/types.d.ts +126 -502
- package/dist/harness/types.d.ts.map +1 -1
- package/dist/harness/types.js +10 -16
- package/dist/harness/types.js.map +1 -1
- package/dist/harness/utils/adaptive-publisher.d.ts +24 -0
- package/dist/harness/utils/adaptive-publisher.d.ts.map +1 -0
- package/dist/harness/utils/adaptive-publisher.js +79 -0
- package/dist/harness/utils/adaptive-publisher.js.map +1 -0
- package/dist/harness/utils/output-capture.d.ts +31 -0
- package/dist/harness/utils/output-capture.d.ts.map +1 -0
- package/dist/harness/utils/output-capture.js +217 -0
- package/dist/harness/utils/output-capture.js.map +1 -0
- package/dist/harness/utils/shell-output.d.ts +12 -5
- package/dist/harness/utils/shell-output.d.ts.map +1 -1
- package/dist/harness/utils/shell-output.js +64 -174
- package/dist/harness/utils/shell-output.js.map +1 -1
- package/dist/harness/utils/truncate.d.ts +1 -0
- package/dist/harness/utils/truncate.d.ts.map +1 -1
- package/dist/harness/utils/truncate.js +1 -1
- package/dist/harness/utils/truncate.js.map +1 -1
- package/dist/harness/utils/usage.d.ts +4 -0
- package/dist/harness/utils/usage.d.ts.map +1 -0
- package/dist/harness/utils/usage.js +33 -0
- package/dist/harness/utils/usage.js.map +1 -0
- package/dist/index.d.ts +13 -9
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -13
- package/dist/index.js.map +1 -1
- package/dist/proxy.d.ts +6 -3
- package/dist/proxy.d.ts.map +1 -1
- package/dist/proxy.js +42 -10
- package/dist/proxy.js.map +1 -1
- package/dist/search/index.d.ts +29 -0
- package/dist/search/index.d.ts.map +1 -0
- package/dist/search/index.js +2 -0
- package/dist/search/index.js.map +1 -0
- package/dist/types.d.ts +113 -31
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +50 -4
- package/dist/harness/session/jsonl-repo.d.ts +0 -26
- package/dist/harness/session/jsonl-repo.d.ts.map +0 -1
- package/dist/harness/session/jsonl-repo.js +0 -100
- package/dist/harness/session/jsonl-repo.js.map +0 -1
- package/dist/harness/session/jsonl-storage.d.ts +0 -42
- package/dist/harness/session/jsonl-storage.d.ts.map +0 -1
- package/dist/harness/session/jsonl-storage.js +0 -286
- package/dist/harness/session/jsonl-storage.js.map +0 -1
- package/dist/harness/session/memory-repo.d.ts +0 -18
- package/dist/harness/session/memory-repo.d.ts.map +0 -1
- package/dist/harness/session/memory-repo.js +0 -44
- package/dist/harness/session/memory-repo.js.map +0 -1
- package/dist/harness/session/memory-storage.d.ts +0 -33
- package/dist/harness/session/memory-storage.d.ts.map +0 -1
- package/dist/harness/session/memory-storage.js +0 -163
- package/dist/harness/session/memory-storage.js.map +0 -1
- package/dist/harness/session/repo-utils.d.ts +0 -11
- package/dist/harness/session/repo-utils.d.ts.map +0 -1
- package/dist/harness/session/repo-utils.js +0 -39
- package/dist/harness/session/repo-utils.js.map +0 -1
|
@@ -1,30 +1,32 @@
|
|
|
1
|
-
import { type
|
|
1
|
+
import { type Context as AiContext, type Api, type AssistantMessage, type Model, type Models, type RetryCallbacks, type RetryPolicy, type SimpleStreamOptions, type Usage } from "@draht/ai";
|
|
2
2
|
import type { AgentMessage, ThinkingLevel } from "../../types.ts";
|
|
3
|
-
import {
|
|
3
|
+
import { type Context } from "../context.ts";
|
|
4
|
+
import type { Entry, JsonValue } from "../session/types.ts";
|
|
5
|
+
import { CompactionError, type Result } from "../types.ts";
|
|
4
6
|
import { type FileOperations } from "./utils.ts";
|
|
5
7
|
/** File-operation details stored on generated compaction entries. */
|
|
6
|
-
export interface CompactionDetails {
|
|
8
|
+
export interface CompactionDetails extends Record<string, JsonValue> {
|
|
7
9
|
/** Files read in the compacted history. */
|
|
8
10
|
readFiles: string[];
|
|
9
11
|
/** Files modified in the compacted history. */
|
|
10
12
|
modifiedFiles: string[];
|
|
11
13
|
}
|
|
12
14
|
/** Generated compaction data ready to be persisted as a compaction entry. */
|
|
13
|
-
export interface
|
|
15
|
+
export interface CompactResult<T = JsonValue> {
|
|
14
16
|
/** Summary text that replaces compacted history in future context. */
|
|
15
17
|
summary: string;
|
|
16
|
-
/** Entry id where retained history starts. Optional during Pi 2.0 transition. */
|
|
17
|
-
firstKeptEntryId?: string;
|
|
18
18
|
/** Estimated context tokens before compaction. */
|
|
19
19
|
tokensBefore: number;
|
|
20
20
|
/** Usage from the LLM call(s) that generated this summary, if available. */
|
|
21
21
|
usage?: Usage;
|
|
22
|
-
/** Retained recent messages stored directly on the compaction entry.
|
|
23
|
-
retainedTail
|
|
22
|
+
/** Retained recent messages stored directly on the compaction entry. */
|
|
23
|
+
retainedTail: AgentMessage[];
|
|
24
24
|
/** Optional implementation-specific details stored with the compaction entry. */
|
|
25
25
|
details?: T;
|
|
26
26
|
}
|
|
27
|
-
export
|
|
27
|
+
export type SummaryRequest = (aiContext: AiContext, options: SimpleStreamOptions, context: Context) => Promise<AssistantMessage>;
|
|
28
|
+
export declare function createSummaryRequestOptions(options: SimpleStreamOptions, context: Context): SimpleStreamOptions;
|
|
29
|
+
export declare function completeSimpleWithRetries(models: Models, model: Model<Api>, aiContext: AiContext, options: SimpleStreamOptions, retry: RetryPolicy | undefined, callbacks: RetryCallbacks | undefined, context: Context): Promise<AssistantMessage>;
|
|
28
30
|
/** Compaction thresholds and retention settings. */
|
|
29
31
|
export interface CompactionSettings {
|
|
30
32
|
/** Enable automatic compaction decisions. */
|
|
@@ -39,7 +41,7 @@ export declare const DEFAULT_COMPACTION_SETTINGS: CompactionSettings;
|
|
|
39
41
|
/** Calculate total context tokens from provider usage. */
|
|
40
42
|
export declare function calculateContextTokens(usage: Usage): number;
|
|
41
43
|
/** Return usage from the last valid assistant message in session entries. */
|
|
42
|
-
export declare function getLastAssistantUsage(entries:
|
|
44
|
+
export declare function getLastAssistantUsage(entries: Entry[]): Usage | undefined;
|
|
43
45
|
/** Estimated context-token usage for a message list. */
|
|
44
46
|
export interface ContextUsageEstimate {
|
|
45
47
|
/** Estimated total context tokens. */
|
|
@@ -58,7 +60,7 @@ export declare function shouldCompact(contextTokens: number, contextWindow: numb
|
|
|
58
60
|
/** Estimate token count for one message using a conservative character heuristic. */
|
|
59
61
|
export declare function estimateTokens(message: AgentMessage): number;
|
|
60
62
|
/** Find the user-visible message that starts the turn containing an entry. */
|
|
61
|
-
export declare function findTurnStartIndex(entries:
|
|
63
|
+
export declare function findTurnStartIndex(entries: Entry[], entryIndex: number, startIndex: number): number;
|
|
62
64
|
/** Cut point selected for compaction. */
|
|
63
65
|
export interface CutPointResult {
|
|
64
66
|
/** Index of the first entry retained after compaction. */
|
|
@@ -69,19 +71,29 @@ export interface CutPointResult {
|
|
|
69
71
|
isSplitTurn: boolean;
|
|
70
72
|
}
|
|
71
73
|
/** Find the compaction cut point that keeps approximately the requested recent-token budget. */
|
|
72
|
-
export declare function findCutPoint(entries:
|
|
74
|
+
export declare function findCutPoint(entries: Entry[], startIndex: number, endIndex: number, keepRecentTokens: number): CutPointResult;
|
|
73
75
|
export declare const SUMMARIZATION_SYSTEM_PROMPT = "You are a context summarization assistant. Your task is to read a conversation between a user and an AI assistant, then produce a structured summary following the exact format specified.\n\nDo NOT continue the conversation. Do NOT respond to any questions in the conversation. ONLY output the structured summary.";
|
|
74
76
|
/** Generate or update a conversation summary for compaction. */
|
|
75
|
-
export declare function generateSummary(currentMessages: AgentMessage[], models: Models, model: Model<
|
|
77
|
+
export declare function generateSummary(currentMessages: AgentMessage[], models: Models, model: Model<Api>, reserveTokens: number, customInstructions: string | undefined, previousSummary: string | undefined, thinkingLevel: ThinkingLevel | undefined, retry: RetryPolicy | undefined, callbacks: RetryCallbacks | undefined, context: Context): Promise<Result<string, CompactionError>>;
|
|
76
78
|
/** Generate or update a conversation summary and return its provider usage. */
|
|
77
|
-
export declare function generateSummaryWithUsage(currentMessages: AgentMessage[], models: Models, model: Model<
|
|
79
|
+
export declare function generateSummaryWithUsage(currentMessages: AgentMessage[], models: Models, model: Model<Api>, reserveTokens: number, customInstructions: string | undefined, previousSummary: string | undefined, thinkingLevel: ThinkingLevel | undefined, retry: RetryPolicy | undefined, callbacks: RetryCallbacks | undefined, context: Context): Promise<Result<{
|
|
80
|
+
text: string;
|
|
81
|
+
usage: Usage;
|
|
82
|
+
}, CompactionError>>;
|
|
83
|
+
export interface SummaryGenerationOptions {
|
|
84
|
+
model: Model<Api>;
|
|
85
|
+
reserveTokens: number;
|
|
86
|
+
customInstructions?: string;
|
|
87
|
+
previousSummary?: string;
|
|
88
|
+
thinkingLevel?: ThinkingLevel;
|
|
89
|
+
}
|
|
90
|
+
/** Generate one summary through a caller-owned one-request boundary. */
|
|
91
|
+
export declare function generateSummaryWithRequest(currentMessages: AgentMessage[], options: SummaryGenerationOptions, request: SummaryRequest, context: Context): Promise<Result<{
|
|
78
92
|
text: string;
|
|
79
93
|
usage: Usage;
|
|
80
94
|
}, CompactionError>>;
|
|
81
95
|
/** Prepared inputs for a compaction run. */
|
|
82
96
|
export interface CompactionPreparation {
|
|
83
|
-
/** Entry id where retained history starts. */
|
|
84
|
-
firstKeptEntryId: string;
|
|
85
97
|
/** Messages summarized into the history summary. */
|
|
86
98
|
messagesToSummarize: AgentMessage[];
|
|
87
99
|
/** Prefix messages summarized separately when compaction splits a turn. */
|
|
@@ -100,8 +112,15 @@ export interface CompactionPreparation {
|
|
|
100
112
|
settings: CompactionSettings;
|
|
101
113
|
}
|
|
102
114
|
/** Prepare session entries for compaction, or return undefined when compaction is not applicable. */
|
|
103
|
-
export declare function prepareCompaction(pathEntries:
|
|
115
|
+
export declare function prepareCompaction(pathEntries: Entry[], settings: CompactionSettings): Result<CompactionPreparation | undefined, CompactionError>;
|
|
104
116
|
export { serializeConversation } from "./utils.ts";
|
|
105
117
|
/** Generate compaction summary data from prepared session history. */
|
|
106
|
-
export declare function compact(preparation: CompactionPreparation, models: Models, model: Model<
|
|
118
|
+
export declare function compact(preparation: CompactionPreparation, models: Models, model: Model<Api>, customInstructions: string | undefined, thinkingLevel: ThinkingLevel | undefined, retry: RetryPolicy | undefined, callbacks: RetryCallbacks | undefined, context: Context): Promise<Result<CompactResult, CompactionError>>;
|
|
119
|
+
export interface CompactGenerationOptions {
|
|
120
|
+
model: Model<Api>;
|
|
121
|
+
customInstructions?: string;
|
|
122
|
+
thinkingLevel?: ThinkingLevel;
|
|
123
|
+
}
|
|
124
|
+
/** Generate compaction data through a caller-owned boundary for each provider request. */
|
|
125
|
+
export declare function compactWithRequest(preparation: CompactionPreparation, options: CompactGenerationOptions, request: SummaryRequest, context: Context): Promise<Result<CompactResult, CompactionError>>;
|
|
107
126
|
//# sourceMappingURL=compaction.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compaction.d.ts","sourceRoot":"","sources":["../../../src/harness/compaction/compaction.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,KAAK,
|
|
1
|
+
{"version":3,"file":"compaction.d.ts","sourceRoot":"","sources":["../../../src/harness/compaction/compaction.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { contentText, retryAssistantCall, uuidv7, } from "@draht/ai";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import { getTelemetryContext } from "../context.js";
|
|
3
|
+
import { convertToLlm, createBranchSummaryMessage, createCompactionSummaryMessage } from "../messages.js";
|
|
4
|
+
import { buildContextEntries, sessionEntryToContextMessages } from "../session/context.js";
|
|
4
5
|
import { CompactionError, err, ok } from "../types.js";
|
|
6
|
+
import { addUsage } from "../utils/usage.js";
|
|
5
7
|
import { computeFileLists, createFileOps, extractFileOpsFromMessage, formatFileOperations, serializeConversation, } from "./utils.js";
|
|
6
8
|
function safeJsonStringify(value) {
|
|
7
9
|
try {
|
|
@@ -15,15 +17,20 @@ function extractFileOperations(messages, entries, prevCompactionIndex) {
|
|
|
15
17
|
const fileOps = createFileOps();
|
|
16
18
|
if (prevCompactionIndex >= 0) {
|
|
17
19
|
const prevCompaction = entries[prevCompactionIndex];
|
|
18
|
-
if (
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
20
|
+
if (typeof prevCompaction.details === "object" &&
|
|
21
|
+
prevCompaction.details !== null &&
|
|
22
|
+
!Array.isArray(prevCompaction.details)) {
|
|
23
|
+
if (Array.isArray(prevCompaction.details.readFiles)) {
|
|
24
|
+
for (const path of prevCompaction.details.readFiles) {
|
|
25
|
+
if (typeof path === "string")
|
|
26
|
+
fileOps.read.add(path);
|
|
27
|
+
}
|
|
23
28
|
}
|
|
24
|
-
if (Array.isArray(details.modifiedFiles)) {
|
|
25
|
-
for (const
|
|
26
|
-
|
|
29
|
+
if (Array.isArray(prevCompaction.details.modifiedFiles)) {
|
|
30
|
+
for (const path of prevCompaction.details.modifiedFiles) {
|
|
31
|
+
if (typeof path === "string")
|
|
32
|
+
fileOps.edited.add(path);
|
|
33
|
+
}
|
|
27
34
|
}
|
|
28
35
|
}
|
|
29
36
|
}
|
|
@@ -36,9 +43,6 @@ function getMessageFromEntry(entry) {
|
|
|
36
43
|
if (entry.type === "message") {
|
|
37
44
|
return entry.message;
|
|
38
45
|
}
|
|
39
|
-
if (entry.type === "custom_message") {
|
|
40
|
-
return createCustomMessage(entry.customType, entry.content, entry.display, entry.details, entry.timestamp);
|
|
41
|
-
}
|
|
42
46
|
if (entry.type === "branch_summary") {
|
|
43
47
|
return createBranchSummaryMessage(entry.summary, entry.fromId, entry.timestamp);
|
|
44
48
|
}
|
|
@@ -53,36 +57,19 @@ function getMessageFromEntryForCompaction(entry) {
|
|
|
53
57
|
}
|
|
54
58
|
return getMessageFromEntry(entry);
|
|
55
59
|
}
|
|
56
|
-
export
|
|
57
|
-
|
|
58
|
-
const requestOptions = {
|
|
60
|
+
export function createSummaryRequestOptions(options, context) {
|
|
61
|
+
return {
|
|
59
62
|
...options,
|
|
63
|
+
signal: context.abortSignal,
|
|
64
|
+
telemetryContext: getTelemetryContext(context),
|
|
60
65
|
cacheRetention: "none",
|
|
61
|
-
sessionId: uuidv7(),
|
|
66
|
+
sessionId: options.sessionId ?? uuidv7(),
|
|
62
67
|
};
|
|
63
|
-
return retryAssistantCall(() => models.completeSimple(model, context, requestOptions), retry, requestOptions.signal, callbacks);
|
|
64
68
|
}
|
|
65
|
-
function
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
cacheRead: first.cacheRead + second.cacheRead,
|
|
70
|
-
cacheWrite: first.cacheWrite + second.cacheWrite,
|
|
71
|
-
...(first.cacheWrite1h !== undefined || second.cacheWrite1h !== undefined
|
|
72
|
-
? { cacheWrite1h: (first.cacheWrite1h ?? 0) + (second.cacheWrite1h ?? 0) }
|
|
73
|
-
: {}),
|
|
74
|
-
...(first.reasoning !== undefined || second.reasoning !== undefined
|
|
75
|
-
? { reasoning: (first.reasoning ?? 0) + (second.reasoning ?? 0) }
|
|
76
|
-
: {}),
|
|
77
|
-
totalTokens: first.totalTokens + second.totalTokens,
|
|
78
|
-
cost: {
|
|
79
|
-
input: first.cost.input + second.cost.input,
|
|
80
|
-
output: first.cost.output + second.cost.output,
|
|
81
|
-
cacheRead: first.cost.cacheRead + second.cost.cacheRead,
|
|
82
|
-
cacheWrite: first.cost.cacheWrite + second.cost.cacheWrite,
|
|
83
|
-
total: first.cost.total + second.cost.total,
|
|
84
|
-
},
|
|
85
|
-
};
|
|
69
|
+
export async function completeSimpleWithRetries(models, model, aiContext, options, retry, callbacks, context) {
|
|
70
|
+
// Summaries are standalone requests, so isolate routing and avoid cache writes that cannot be reused.
|
|
71
|
+
const requestOptions = createSummaryRequestOptions(options, context);
|
|
72
|
+
return retryAssistantCall(() => models.completeSimple(model, aiContext, requestOptions), retry, requestOptions.signal, callbacks);
|
|
86
73
|
}
|
|
87
74
|
/** Default compaction settings used by the harness. */
|
|
88
75
|
export const DEFAULT_COMPACTION_SETTINGS = {
|
|
@@ -236,21 +223,13 @@ function findValidCutPoints(entries, startIndex, endIndex) {
|
|
|
236
223
|
}
|
|
237
224
|
break;
|
|
238
225
|
}
|
|
239
|
-
case "thinking_level_change":
|
|
240
|
-
case "model_change":
|
|
241
|
-
case "active_tools_change":
|
|
242
226
|
case "compaction":
|
|
243
227
|
case "branch_summary":
|
|
244
228
|
case "custom":
|
|
245
|
-
case "custom_message":
|
|
246
|
-
case "label":
|
|
247
|
-
case "session_info":
|
|
248
|
-
case "leaf":
|
|
249
229
|
break;
|
|
250
230
|
}
|
|
251
|
-
if (entry.type === "branch_summary"
|
|
231
|
+
if (entry.type === "branch_summary")
|
|
252
232
|
cutPoints.push(i);
|
|
253
|
-
}
|
|
254
233
|
}
|
|
255
234
|
return cutPoints;
|
|
256
235
|
}
|
|
@@ -258,7 +237,7 @@ function findValidCutPoints(entries, startIndex, endIndex) {
|
|
|
258
237
|
export function findTurnStartIndex(entries, entryIndex, startIndex) {
|
|
259
238
|
for (let i = entryIndex; i >= startIndex; i--) {
|
|
260
239
|
const entry = entries[i];
|
|
261
|
-
if (entry.type === "branch_summary"
|
|
240
|
+
if (entry.type === "branch_summary") {
|
|
262
241
|
return i;
|
|
263
242
|
}
|
|
264
243
|
if (entry.type === "message") {
|
|
@@ -387,12 +366,17 @@ Use this EXACT format:
|
|
|
387
366
|
|
|
388
367
|
Keep each section concise. Preserve exact file paths, function names, and error messages.`;
|
|
389
368
|
/** Generate or update a conversation summary for compaction. */
|
|
390
|
-
export async function generateSummary(currentMessages, models, model, reserveTokens,
|
|
391
|
-
const result = await generateSummaryWithUsage(currentMessages, models, model, reserveTokens,
|
|
369
|
+
export async function generateSummary(currentMessages, models, model, reserveTokens, customInstructions, previousSummary, thinkingLevel, retry, callbacks, context) {
|
|
370
|
+
const result = await generateSummaryWithUsage(currentMessages, models, model, reserveTokens, customInstructions, previousSummary, thinkingLevel, retry, callbacks, context);
|
|
392
371
|
return result.ok ? ok(result.value.text) : err(result.error);
|
|
393
372
|
}
|
|
394
373
|
/** Generate or update a conversation summary and return its provider usage. */
|
|
395
|
-
export
|
|
374
|
+
export function generateSummaryWithUsage(currentMessages, models, model, reserveTokens, customInstructions, previousSummary, thinkingLevel, retry, callbacks, context) {
|
|
375
|
+
return generateSummaryWithRequest(currentMessages, { model, reserveTokens, customInstructions, previousSummary, thinkingLevel }, (aiContext, options, requestContext) => completeSimpleWithRetries(models, model, aiContext, options, retry, callbacks, requestContext), context);
|
|
376
|
+
}
|
|
377
|
+
/** Generate one summary through a caller-owned one-request boundary. */
|
|
378
|
+
export async function generateSummaryWithRequest(currentMessages, options, request, context) {
|
|
379
|
+
const { model, reserveTokens, customInstructions, previousSummary, thinkingLevel } = options;
|
|
396
380
|
const maxTokens = Math.min(Math.floor(0.8 * reserveTokens), model.maxTokens > 0 ? model.maxTokens : Number.POSITIVE_INFINITY);
|
|
397
381
|
// Use update prompt if we have a previous summary, otherwise initial prompt
|
|
398
382
|
let basePrompt = previousSummary ? UPDATE_SUMMARIZATION_PROMPT : SUMMARIZATION_PROMPT;
|
|
@@ -414,9 +398,9 @@ export async function generateSummaryWithUsage(currentMessages, models, model, r
|
|
|
414
398
|
},
|
|
415
399
|
];
|
|
416
400
|
const completionOptions = model.reasoning && thinkingLevel && thinkingLevel !== "off"
|
|
417
|
-
? { maxTokens,
|
|
418
|
-
: { maxTokens
|
|
419
|
-
const response = await
|
|
401
|
+
? { maxTokens, reasoning: thinkingLevel }
|
|
402
|
+
: { maxTokens };
|
|
403
|
+
const response = await request({ systemPrompt: SUMMARIZATION_SYSTEM_PROMPT, messages: summarizationMessages }, createSummaryRequestOptions(completionOptions, context), context);
|
|
420
404
|
if (response.stopReason === "aborted") {
|
|
421
405
|
return err(new CompactionError("aborted", response.errorMessage || "Summarization aborted"));
|
|
422
406
|
}
|
|
@@ -439,41 +423,41 @@ export function prepareCompaction(pathEntries, settings) {
|
|
|
439
423
|
}
|
|
440
424
|
}
|
|
441
425
|
let previousSummary;
|
|
442
|
-
let
|
|
426
|
+
let compactableEntries = pathEntries;
|
|
443
427
|
if (prevCompactionIndex >= 0) {
|
|
444
428
|
const prevCompaction = pathEntries[prevCompactionIndex];
|
|
445
429
|
previousSummary = prevCompaction.summary;
|
|
446
|
-
const
|
|
447
|
-
|
|
448
|
-
:
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
const
|
|
430
|
+
const virtualRetainedEntries = prevCompaction.retainedTail.map((message, index) => ({
|
|
431
|
+
type: "message",
|
|
432
|
+
id: `${prevCompaction.id}:retained:${index}`,
|
|
433
|
+
parentId: index === 0 ? prevCompaction.id : `${prevCompaction.id}:retained:${index - 1}`,
|
|
434
|
+
seq: prevCompaction.seq,
|
|
435
|
+
timestamp: message.timestamp,
|
|
436
|
+
message,
|
|
437
|
+
}));
|
|
438
|
+
compactableEntries = [...virtualRetainedEntries, ...pathEntries.slice(prevCompactionIndex + 1)];
|
|
439
|
+
}
|
|
440
|
+
const boundaryEnd = compactableEntries.length;
|
|
441
|
+
const tokensBefore = estimateContextTokens(buildContextEntries(pathEntries).flatMap(sessionEntryToContextMessages)).tokens;
|
|
442
|
+
const cutPoint = findCutPoint(compactableEntries, 0, boundaryEnd, settings.keepRecentTokens);
|
|
459
443
|
const historyEnd = cutPoint.isSplitTurn ? cutPoint.turnStartIndex : cutPoint.firstKeptEntryIndex;
|
|
460
444
|
const messagesToSummarize = [];
|
|
461
|
-
for (let i =
|
|
462
|
-
const msg = getMessageFromEntryForCompaction(
|
|
445
|
+
for (let i = 0; i < historyEnd; i++) {
|
|
446
|
+
const msg = getMessageFromEntryForCompaction(compactableEntries[i]);
|
|
463
447
|
if (msg)
|
|
464
448
|
messagesToSummarize.push(msg);
|
|
465
449
|
}
|
|
466
450
|
const turnPrefixMessages = [];
|
|
467
451
|
if (cutPoint.isSplitTurn) {
|
|
468
452
|
for (let i = cutPoint.turnStartIndex; i < cutPoint.firstKeptEntryIndex; i++) {
|
|
469
|
-
const msg = getMessageFromEntryForCompaction(
|
|
453
|
+
const msg = getMessageFromEntryForCompaction(compactableEntries[i]);
|
|
470
454
|
if (msg)
|
|
471
455
|
turnPrefixMessages.push(msg);
|
|
472
456
|
}
|
|
473
457
|
}
|
|
474
458
|
const retainedTail = [];
|
|
475
459
|
for (let i = cutPoint.firstKeptEntryIndex; i < boundaryEnd; i++) {
|
|
476
|
-
const msg = getMessageFromEntryForCompaction(
|
|
460
|
+
const msg = getMessageFromEntryForCompaction(compactableEntries[i]);
|
|
477
461
|
if (msg)
|
|
478
462
|
retainedTail.push(msg);
|
|
479
463
|
}
|
|
@@ -484,7 +468,6 @@ export function prepareCompaction(pathEntries, settings) {
|
|
|
484
468
|
}
|
|
485
469
|
}
|
|
486
470
|
return ok({
|
|
487
|
-
firstKeptEntryId,
|
|
488
471
|
messagesToSummarize,
|
|
489
472
|
turnPrefixMessages,
|
|
490
473
|
retainedTail,
|
|
@@ -511,33 +494,33 @@ Summarize the prefix to provide context for the retained suffix:
|
|
|
511
494
|
Be concise. Focus on what's needed to understand the kept suffix.`;
|
|
512
495
|
export { serializeConversation } from "./utils.js";
|
|
513
496
|
/** Generate compaction summary data from prepared session history. */
|
|
514
|
-
export
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
497
|
+
export function compact(preparation, models, model, customInstructions, thinkingLevel, retry, callbacks, context) {
|
|
498
|
+
return compactWithRequest(preparation, { model, customInstructions, thinkingLevel }, (aiContext, options, requestContext) => completeSimpleWithRetries(models, model, aiContext, options, retry, callbacks, requestContext), context);
|
|
499
|
+
}
|
|
500
|
+
/** Generate compaction data through a caller-owned boundary for each provider request. */
|
|
501
|
+
export async function compactWithRequest(preparation, options, request, context) {
|
|
502
|
+
const { model, customInstructions, thinkingLevel } = options;
|
|
503
|
+
const { messagesToSummarize, turnPrefixMessages, retainedTail, isSplitTurn, tokensBefore, previousSummary, fileOps, settings, } = preparation;
|
|
519
504
|
let summary;
|
|
520
505
|
let summaryUsage;
|
|
521
506
|
if (isSplitTurn && turnPrefixMessages.length > 0) {
|
|
522
507
|
let historyText = "No prior history.";
|
|
523
508
|
let historyUsage;
|
|
524
509
|
if (messagesToSummarize.length > 0) {
|
|
525
|
-
const historyResult = await
|
|
510
|
+
const historyResult = await generateSummaryWithRequest(messagesToSummarize, { model, reserveTokens: settings.reserveTokens, customInstructions, previousSummary, thinkingLevel }, request, context);
|
|
526
511
|
if (!historyResult.ok)
|
|
527
512
|
return err(historyResult.error);
|
|
528
513
|
historyText = historyResult.value.text;
|
|
529
514
|
historyUsage = historyResult.value.usage;
|
|
530
515
|
}
|
|
531
|
-
const turnPrefixResult = await generateTurnPrefixSummary(turnPrefixMessages,
|
|
516
|
+
const turnPrefixResult = await generateTurnPrefixSummary(turnPrefixMessages, model, settings.reserveTokens, thinkingLevel, request, context);
|
|
532
517
|
if (!turnPrefixResult.ok)
|
|
533
518
|
return err(turnPrefixResult.error);
|
|
534
519
|
summary = `${historyText}\n\n---\n\n**Turn Context (split turn):**\n\n${turnPrefixResult.value.text}`;
|
|
535
|
-
summaryUsage = historyUsage
|
|
536
|
-
? combineUsage(historyUsage, turnPrefixResult.value.usage)
|
|
537
|
-
: turnPrefixResult.value.usage;
|
|
520
|
+
summaryUsage = historyUsage ? addUsage(historyUsage, turnPrefixResult.value.usage) : turnPrefixResult.value.usage;
|
|
538
521
|
}
|
|
539
522
|
else {
|
|
540
|
-
const summaryResult = await
|
|
523
|
+
const summaryResult = await generateSummaryWithRequest(messagesToSummarize, { model, reserveTokens: settings.reserveTokens, customInstructions, previousSummary, thinkingLevel }, request, context);
|
|
541
524
|
if (!summaryResult.ok)
|
|
542
525
|
return err(summaryResult.error);
|
|
543
526
|
summary = summaryResult.value.text;
|
|
@@ -545,16 +528,10 @@ export async function compact(preparation, models, model, customInstructions, si
|
|
|
545
528
|
}
|
|
546
529
|
const { readFiles, modifiedFiles } = computeFileLists(fileOps);
|
|
547
530
|
summary += formatFileOperations(readFiles, modifiedFiles);
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
firstKeptEntryId,
|
|
551
|
-
tokensBefore,
|
|
552
|
-
usage: summaryUsage,
|
|
553
|
-
retainedTail,
|
|
554
|
-
details: { readFiles, modifiedFiles },
|
|
555
|
-
});
|
|
531
|
+
const details = { readFiles, modifiedFiles };
|
|
532
|
+
return ok({ summary, tokensBefore, usage: summaryUsage, retainedTail, details });
|
|
556
533
|
}
|
|
557
|
-
async function generateTurnPrefixSummary(messages,
|
|
534
|
+
async function generateTurnPrefixSummary(messages, model, reserveTokens, thinkingLevel, request, context) {
|
|
558
535
|
const maxTokens = Math.min(Math.floor(0.5 * reserveTokens), model.maxTokens > 0 ? model.maxTokens : Number.POSITIVE_INFINITY); // Smaller budget for turn prefix
|
|
559
536
|
const llmMessages = convertToLlm(messages);
|
|
560
537
|
const conversationText = serializeConversation(llmMessages);
|
|
@@ -567,9 +544,9 @@ async function generateTurnPrefixSummary(messages, models, model, reserveTokens,
|
|
|
567
544
|
},
|
|
568
545
|
];
|
|
569
546
|
const completionOptions = model.reasoning && thinkingLevel && thinkingLevel !== "off"
|
|
570
|
-
? { maxTokens,
|
|
571
|
-
: { maxTokens
|
|
572
|
-
const response = await
|
|
547
|
+
? { maxTokens, reasoning: thinkingLevel }
|
|
548
|
+
: { maxTokens };
|
|
549
|
+
const response = await request({ systemPrompt: SUMMARIZATION_SYSTEM_PROMPT, messages: summarizationMessages }, createSummaryRequestOptions(completionOptions, context), context);
|
|
573
550
|
if (response.stopReason === "aborted") {
|
|
574
551
|
return err(new CompactionError("aborted", response.errorMessage || "Turn prefix summarization aborted"));
|
|
575
552
|
}
|