@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,261 +1,361 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
}
|
|
11
|
-
else if (entry.type === "model_change") {
|
|
12
|
-
model = { provider: entry.provider, modelId: entry.modelId };
|
|
13
|
-
}
|
|
14
|
-
else if (entry.type === "message" && entry.message.role === "assistant") {
|
|
15
|
-
model = { provider: entry.message.provider, modelId: entry.message.model };
|
|
16
|
-
}
|
|
17
|
-
else if (entry.type === "active_tools_change") {
|
|
18
|
-
activeToolNames = [...entry.activeToolNames];
|
|
19
|
-
}
|
|
1
|
+
import { uuidv7 } from "@draht/ai/utils/uuid";
|
|
2
|
+
import { insertEntry } from "./commit.js";
|
|
3
|
+
import { MutationLine } from "./mutation-line.js";
|
|
4
|
+
import { appendList as appendListWrite, branchTip, deleteList as deleteListWrite, deleteValue as deleteValueWrite, entryLabel, sessionName, setValue as setValueWrite, } from "./values.js";
|
|
5
|
+
/** Durable session state is internally inconsistent and cannot be safely advanced. */
|
|
6
|
+
export class SessionInvariantError extends Error {
|
|
7
|
+
constructor(message) {
|
|
8
|
+
super(message);
|
|
9
|
+
this.name = "SessionInvariantError";
|
|
20
10
|
}
|
|
21
|
-
return { thinkingLevel, model, activeToolNames };
|
|
22
11
|
}
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
}
|
|
12
|
+
/** A requested Branch name is invalid. */
|
|
13
|
+
export class SessionInvalidBranchError extends Error {
|
|
14
|
+
branch;
|
|
15
|
+
reason;
|
|
16
|
+
constructor(branch, reason) {
|
|
17
|
+
super(`Invalid branch ${JSON.stringify(branch)}: ${reason}`);
|
|
18
|
+
this.name = "SessionInvalidBranchError";
|
|
19
|
+
this.branch = branch;
|
|
20
|
+
this.reason = reason;
|
|
29
21
|
}
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
}
|
|
39
|
-
return entries;
|
|
40
|
-
}
|
|
41
|
-
if (compaction.firstKeptEntryId) {
|
|
42
|
-
let foundFirstKept = false;
|
|
43
|
-
for (let i = 0; i < compactionIdx; i++) {
|
|
44
|
-
const entry = pathEntries[i];
|
|
45
|
-
if (entry.id === compaction.firstKeptEntryId)
|
|
46
|
-
foundFirstKept = true;
|
|
47
|
-
if (foundFirstKept)
|
|
48
|
-
entries.push(entry);
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
for (let i = compactionIdx + 1; i < pathEntries.length; i++) {
|
|
52
|
-
entries.push(pathEntries[i]);
|
|
22
|
+
}
|
|
23
|
+
/** A requested branch already exists. */
|
|
24
|
+
export class SessionBranchExistsError extends Error {
|
|
25
|
+
branch;
|
|
26
|
+
constructor(branch) {
|
|
27
|
+
super(`Branch already exists: ${branch}`);
|
|
28
|
+
this.name = "SessionBranchExistsError";
|
|
29
|
+
this.branch = branch;
|
|
53
30
|
}
|
|
54
|
-
return entries;
|
|
55
31
|
}
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
32
|
+
/** A pending assistant message cannot be persisted as a session entry. */
|
|
33
|
+
export class SessionPendingAssistantMessageError extends Error {
|
|
34
|
+
constructor() {
|
|
35
|
+
super("Cannot persist a pending assistant message");
|
|
36
|
+
this.name = "SessionPendingAssistantMessageError";
|
|
60
37
|
}
|
|
61
|
-
return entries;
|
|
62
38
|
}
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
39
|
+
/** A requested session entry target does not exist. */
|
|
40
|
+
export class SessionUnknownTargetError extends Error {
|
|
41
|
+
targetId;
|
|
42
|
+
constructor(targetId) {
|
|
43
|
+
super(`Unknown target: ${targetId}`);
|
|
44
|
+
this.name = "SessionUnknownTargetError";
|
|
45
|
+
this.targetId = targetId;
|
|
66
46
|
}
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
47
|
+
}
|
|
48
|
+
class StorageBackedSessionMutation {
|
|
49
|
+
storage;
|
|
50
|
+
release;
|
|
51
|
+
active = true;
|
|
52
|
+
commitResult;
|
|
53
|
+
endPromise;
|
|
54
|
+
constructor(storage, release) {
|
|
55
|
+
this.storage = storage;
|
|
56
|
+
this.release = release;
|
|
57
|
+
}
|
|
58
|
+
commit(writes, context) {
|
|
59
|
+
this.assertActive();
|
|
60
|
+
if (this.commitResult !== undefined)
|
|
61
|
+
return Promise.reject(new Error("SessionMutator commit already attempted"));
|
|
62
|
+
try {
|
|
63
|
+
for (const write of writes) {
|
|
64
|
+
if (write.kind === "entry" &&
|
|
65
|
+
write.entry.type === "message" &&
|
|
66
|
+
write.entry.message.role === "assistant" &&
|
|
67
|
+
write.entry.message.stopReason === "pending") {
|
|
68
|
+
throw new SessionPendingAssistantMessageError();
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
this.commitResult = this.storage.commit(writes, context);
|
|
72
|
+
}
|
|
73
|
+
catch (error) {
|
|
74
|
+
this.commitResult = Promise.reject(error);
|
|
75
|
+
}
|
|
76
|
+
return this.commitResult;
|
|
71
77
|
}
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
78
|
+
end(_context) {
|
|
79
|
+
if (this.endPromise !== undefined)
|
|
80
|
+
return this.endPromise;
|
|
81
|
+
this.active = false;
|
|
82
|
+
this.endPromise = this.settle().finally(this.release);
|
|
83
|
+
return this.endPromise;
|
|
77
84
|
}
|
|
78
|
-
|
|
79
|
-
|
|
85
|
+
getEntries(ids, context) {
|
|
86
|
+
this.assertActive();
|
|
87
|
+
return this.storage.getEntries(ids, context);
|
|
80
88
|
}
|
|
81
|
-
|
|
82
|
-
|
|
89
|
+
getStats(context) {
|
|
90
|
+
this.assertActive();
|
|
91
|
+
return this.storage.getStats(context);
|
|
83
92
|
}
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
const state = deriveSessionContextState(pathEntries);
|
|
88
|
-
const contextEntries = buildContextEntries(pathEntries, options);
|
|
89
|
-
const messages = contextEntries.flatMap((entry, index) => sessionEntryToContextMessages(entry, index, contextEntries, options));
|
|
90
|
-
return { ...state, messages };
|
|
91
|
-
}
|
|
92
|
-
export class Session {
|
|
93
|
-
constructor(storage, contextBuildOptions = {}) {
|
|
94
|
-
this.storage = storage;
|
|
95
|
-
this.contextBuildOptions = contextBuildOptions;
|
|
93
|
+
getValue(address, context) {
|
|
94
|
+
this.assertActive();
|
|
95
|
+
return this.storage.getValue(address, context);
|
|
96
96
|
}
|
|
97
|
-
|
|
98
|
-
|
|
97
|
+
scanValues(prefix, context) {
|
|
98
|
+
this.assertActive();
|
|
99
|
+
return this.storage.scanValues(prefix, context);
|
|
99
100
|
}
|
|
100
|
-
|
|
101
|
-
|
|
101
|
+
readList(address, options, context) {
|
|
102
|
+
this.assertActive();
|
|
103
|
+
return this.storage.readList(address, options, context);
|
|
102
104
|
}
|
|
103
|
-
|
|
104
|
-
|
|
105
|
+
scanBranch(query, context) {
|
|
106
|
+
this.assertActive();
|
|
107
|
+
return this.storage.scanBranch(query, context);
|
|
105
108
|
}
|
|
106
|
-
|
|
107
|
-
return this.
|
|
109
|
+
settle() {
|
|
110
|
+
return (this.commitResult?.then(() => undefined, () => undefined) ?? Promise.resolve());
|
|
108
111
|
}
|
|
109
|
-
|
|
110
|
-
|
|
112
|
+
assertActive() {
|
|
113
|
+
if (!this.active)
|
|
114
|
+
throw new Error("SessionMutator cannot be used outside its mutation callback");
|
|
111
115
|
}
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
116
|
+
}
|
|
117
|
+
class StorageBackedBranch {
|
|
118
|
+
name;
|
|
119
|
+
session;
|
|
120
|
+
constructor(name, session) {
|
|
121
|
+
this.name = name;
|
|
122
|
+
this.session = session;
|
|
115
123
|
}
|
|
116
|
-
|
|
117
|
-
return
|
|
124
|
+
getTipId(context) {
|
|
125
|
+
return this.session.getBranchTip(this.name, context);
|
|
118
126
|
}
|
|
119
|
-
async
|
|
120
|
-
|
|
127
|
+
async findEntries(query, context) {
|
|
128
|
+
query ??= {};
|
|
129
|
+
const start = query.start ?? (await this.getTipId(context));
|
|
130
|
+
if (start === null)
|
|
131
|
+
return [];
|
|
132
|
+
return this.session.scanBranch({ ...query, start, order: query.order ?? "newestFirst" }, context);
|
|
121
133
|
}
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
entryProjectors: {
|
|
126
|
-
...(this.contextBuildOptions.entryProjectors ?? {}),
|
|
127
|
-
...(options.entryProjectors ?? {}),
|
|
128
|
-
},
|
|
129
|
-
};
|
|
134
|
+
async findEntry(query, context) {
|
|
135
|
+
query ??= {};
|
|
136
|
+
return (await this.findEntries({ ...query, limit: query.limit === undefined ? 1 : Math.min(query.limit, 1) }, context))[0];
|
|
130
137
|
}
|
|
131
|
-
|
|
132
|
-
return this.
|
|
138
|
+
appendMessage(message, context) {
|
|
139
|
+
return this.session.appendToBranch(this.name, { type: "message", message }, context);
|
|
133
140
|
}
|
|
134
|
-
|
|
135
|
-
return this.
|
|
141
|
+
appendCustomEntry(customType, data, context) {
|
|
142
|
+
return this.session.appendToBranch(this.name, { type: "custom", customType, ...(data === undefined ? {} : { data }) }, context);
|
|
136
143
|
}
|
|
137
|
-
|
|
138
|
-
|
|
144
|
+
}
|
|
145
|
+
/** Package-internal typed boundary shared by concrete session repositories. */
|
|
146
|
+
export class StorageBackedSession {
|
|
147
|
+
metadata;
|
|
148
|
+
idGenerator;
|
|
149
|
+
storage;
|
|
150
|
+
mutationLine;
|
|
151
|
+
onClose;
|
|
152
|
+
branches = new Map();
|
|
153
|
+
closedError = new Error("Session is closed");
|
|
154
|
+
state = "open";
|
|
155
|
+
closePromise;
|
|
156
|
+
constructor(metadata, storage, options = {}) {
|
|
157
|
+
this.metadata = metadata;
|
|
158
|
+
this.idGenerator = options.idGenerator ?? { next: uuidv7 };
|
|
159
|
+
this.storage = storage;
|
|
160
|
+
this.mutationLine = options.mutationLine ?? new MutationLine();
|
|
161
|
+
this.onClose = options.onClose;
|
|
162
|
+
}
|
|
163
|
+
async beginMutation(_context) {
|
|
164
|
+
this.assertOpen();
|
|
165
|
+
let grant;
|
|
166
|
+
let rejectGrant;
|
|
167
|
+
const granted = new Promise((resolve, reject) => {
|
|
168
|
+
grant = resolve;
|
|
169
|
+
rejectGrant = reject;
|
|
170
|
+
});
|
|
171
|
+
let release;
|
|
172
|
+
const finished = new Promise((resolve) => {
|
|
173
|
+
release = resolve;
|
|
174
|
+
});
|
|
175
|
+
const line = this.mutationLine.run(async () => {
|
|
176
|
+
grant(new StorageBackedSessionMutation(this.storage, release));
|
|
177
|
+
await finished;
|
|
178
|
+
});
|
|
179
|
+
void line.catch(rejectGrant);
|
|
180
|
+
return granted;
|
|
139
181
|
}
|
|
140
|
-
async
|
|
141
|
-
await this.
|
|
142
|
-
|
|
182
|
+
async mutate(mutation, context) {
|
|
183
|
+
const mutator = await this.beginMutation(context);
|
|
184
|
+
try {
|
|
185
|
+
return await mutation(mutator, context);
|
|
186
|
+
}
|
|
187
|
+
finally {
|
|
188
|
+
await mutator.end(context);
|
|
189
|
+
}
|
|
143
190
|
}
|
|
144
|
-
async
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
id: await this.storage.createEntryId(),
|
|
148
|
-
parentId: await this.storage.getLeafId(),
|
|
149
|
-
timestamp: new Date().toISOString(),
|
|
150
|
-
message,
|
|
151
|
-
});
|
|
191
|
+
async getEntries(ids, context) {
|
|
192
|
+
this.assertOpen();
|
|
193
|
+
return this.storage.getEntries(ids, context);
|
|
152
194
|
}
|
|
153
|
-
async
|
|
154
|
-
return this.
|
|
155
|
-
type: "thinking_level_change",
|
|
156
|
-
id: await this.storage.createEntryId(),
|
|
157
|
-
parentId: await this.storage.getLeafId(),
|
|
158
|
-
timestamp: new Date().toISOString(),
|
|
159
|
-
thinkingLevel,
|
|
160
|
-
});
|
|
195
|
+
async getEntry(id, context) {
|
|
196
|
+
return (await this.getEntries([id], context)).get(id);
|
|
161
197
|
}
|
|
162
|
-
async
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
id: await this.storage.createEntryId(),
|
|
166
|
-
parentId: await this.storage.getLeafId(),
|
|
167
|
-
timestamp: new Date().toISOString(),
|
|
168
|
-
provider,
|
|
169
|
-
modelId,
|
|
170
|
-
});
|
|
198
|
+
async getValue(address, context) {
|
|
199
|
+
this.assertOpen();
|
|
200
|
+
return this.storage.getValue(address, context);
|
|
171
201
|
}
|
|
172
|
-
async
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
id: await this.storage.createEntryId(),
|
|
176
|
-
parentId: await this.storage.getLeafId(),
|
|
177
|
-
timestamp: new Date().toISOString(),
|
|
178
|
-
activeToolNames: [...activeToolNames],
|
|
179
|
-
});
|
|
202
|
+
async scanValues(prefix, context) {
|
|
203
|
+
this.assertOpen();
|
|
204
|
+
return this.storage.scanValues(prefix, context);
|
|
180
205
|
}
|
|
181
|
-
async
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
id: await this.storage.createEntryId(),
|
|
185
|
-
parentId: await this.storage.getLeafId(),
|
|
186
|
-
timestamp: new Date().toISOString(),
|
|
187
|
-
summary,
|
|
188
|
-
firstKeptEntryId,
|
|
189
|
-
tokensBefore,
|
|
190
|
-
retainedTail,
|
|
191
|
-
details,
|
|
192
|
-
usage,
|
|
193
|
-
fromHook,
|
|
194
|
-
});
|
|
206
|
+
async readList(address, options, context) {
|
|
207
|
+
this.assertOpen();
|
|
208
|
+
return this.storage.readList(address, options, context);
|
|
195
209
|
}
|
|
196
|
-
async
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
id: await this.storage.createEntryId(),
|
|
200
|
-
parentId: await this.storage.getLeafId(),
|
|
201
|
-
timestamp: new Date().toISOString(),
|
|
202
|
-
customType,
|
|
203
|
-
data,
|
|
204
|
-
});
|
|
210
|
+
async scanBranch(query, context) {
|
|
211
|
+
this.assertOpen();
|
|
212
|
+
return this.storage.scanBranch(query, context);
|
|
205
213
|
}
|
|
206
|
-
async
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
id: await this.storage.createEntryId(),
|
|
210
|
-
parentId: await this.storage.getLeafId(),
|
|
211
|
-
timestamp: new Date().toISOString(),
|
|
212
|
-
customType,
|
|
213
|
-
content,
|
|
214
|
-
display,
|
|
215
|
-
details,
|
|
216
|
-
});
|
|
214
|
+
async getStats(context) {
|
|
215
|
+
this.assertOpen();
|
|
216
|
+
return this.storage.getStats(context);
|
|
217
217
|
}
|
|
218
|
-
async
|
|
219
|
-
|
|
220
|
-
throw new SessionError("not_found", `Entry ${targetId} not found`);
|
|
221
|
-
}
|
|
222
|
-
return this.appendTypedEntry({
|
|
223
|
-
type: "label",
|
|
224
|
-
id: await this.storage.createEntryId(),
|
|
225
|
-
parentId: await this.storage.getLeafId(),
|
|
226
|
-
timestamp: new Date().toISOString(),
|
|
227
|
-
targetId,
|
|
228
|
-
label,
|
|
229
|
-
});
|
|
218
|
+
async getName(context) {
|
|
219
|
+
return (await this.getValue(sessionName, context))?.value;
|
|
230
220
|
}
|
|
231
|
-
async
|
|
232
|
-
|
|
233
|
-
return this.appendTypedEntry({
|
|
234
|
-
type: "session_info",
|
|
235
|
-
id: await this.storage.createEntryId(),
|
|
236
|
-
parentId: await this.storage.getLeafId(),
|
|
237
|
-
timestamp: new Date().toISOString(),
|
|
238
|
-
name: sanitizedName,
|
|
239
|
-
});
|
|
221
|
+
async getLabel(targetId, context) {
|
|
222
|
+
return (await this.getValue(entryLabel(targetId), context))?.value;
|
|
240
223
|
}
|
|
241
|
-
async
|
|
242
|
-
|
|
243
|
-
|
|
224
|
+
async findEntries(query, context) {
|
|
225
|
+
query ??= {};
|
|
226
|
+
this.assertOpen();
|
|
227
|
+
const order = query.order ?? "desc";
|
|
228
|
+
if (query.cursor !== undefined) {
|
|
229
|
+
if (order === "asc" && query.cursor.seq === Number.MAX_SAFE_INTEGER)
|
|
230
|
+
return [];
|
|
231
|
+
if (order === "desc" && query.cursor.seq <= 1)
|
|
232
|
+
return [];
|
|
244
233
|
}
|
|
245
|
-
|
|
246
|
-
|
|
234
|
+
return this.storage.scanEntries({
|
|
235
|
+
type: query.type,
|
|
236
|
+
customType: query.customType,
|
|
237
|
+
order,
|
|
238
|
+
limit: query.limit,
|
|
239
|
+
...(query.cursor === undefined
|
|
240
|
+
? {}
|
|
241
|
+
: order === "asc"
|
|
242
|
+
? { fromSeq: query.cursor.seq + 1 }
|
|
243
|
+
: { toSeq: query.cursor.seq - 1 }),
|
|
244
|
+
}, context);
|
|
245
|
+
}
|
|
246
|
+
async findEntry(query, context) {
|
|
247
|
+
query ??= {};
|
|
248
|
+
return (await this.findEntries({ ...query, limit: query.limit === undefined ? 1 : Math.min(query.limit, 1) }, context))[0];
|
|
249
|
+
}
|
|
250
|
+
async branch(name, context) {
|
|
251
|
+
this.assertValidBranchName(name);
|
|
252
|
+
if ((await this.getValue(branchTip(name), context)) === undefined)
|
|
247
253
|
return undefined;
|
|
248
|
-
return this.
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
254
|
+
return this.getOrCreateBranchObject(name);
|
|
255
|
+
}
|
|
256
|
+
async createBranch(name, at, context) {
|
|
257
|
+
this.assertOpen();
|
|
258
|
+
this.assertValidBranchName(name);
|
|
259
|
+
await this.mutate(async (mutator) => {
|
|
260
|
+
if ((await mutator.getValue(branchTip(name), context)) !== undefined) {
|
|
261
|
+
throw new SessionBranchExistsError(name);
|
|
262
|
+
}
|
|
263
|
+
if (at !== null && !(await mutator.getEntries([at], context)).has(at)) {
|
|
264
|
+
throw new SessionUnknownTargetError(at);
|
|
265
|
+
}
|
|
266
|
+
await mutator.commit([setValueWrite(branchTip(name), at)], context);
|
|
267
|
+
}, context);
|
|
268
|
+
return this.getOrCreateBranchObject(name);
|
|
269
|
+
}
|
|
270
|
+
setValue(address, next, context) {
|
|
271
|
+
return this.mutate(async (mutator) => {
|
|
272
|
+
await mutator.commit([setValueWrite(address, next)], context);
|
|
273
|
+
}, context);
|
|
274
|
+
}
|
|
275
|
+
deleteValue(address, context) {
|
|
276
|
+
return this.mutate(async (mutator) => {
|
|
277
|
+
await mutator.commit([deleteValueWrite(address)], context);
|
|
278
|
+
}, context);
|
|
279
|
+
}
|
|
280
|
+
appendList(address, element, context) {
|
|
281
|
+
return this.mutate(async (mutator) => {
|
|
282
|
+
await mutator.commit([appendListWrite(address, element)], context);
|
|
283
|
+
}, context);
|
|
284
|
+
}
|
|
285
|
+
deleteList(address, context) {
|
|
286
|
+
return this.mutate(async (mutator) => {
|
|
287
|
+
await mutator.commit([deleteListWrite(address)], context);
|
|
288
|
+
}, context);
|
|
289
|
+
}
|
|
290
|
+
setName(name, context) {
|
|
291
|
+
return name === undefined ? this.deleteValue(sessionName, context) : this.setValue(sessionName, name, context);
|
|
292
|
+
}
|
|
293
|
+
setLabel(targetId, label, context) {
|
|
294
|
+
const address = entryLabel(targetId);
|
|
295
|
+
return label === undefined ? this.deleteValue(address, context) : this.setValue(address, label, context);
|
|
296
|
+
}
|
|
297
|
+
close(context) {
|
|
298
|
+
if (this.closePromise !== undefined)
|
|
299
|
+
return this.closePromise;
|
|
300
|
+
this.state = "closing";
|
|
301
|
+
this.closePromise = this.mutationLine
|
|
302
|
+
.seal(this.closedError)
|
|
303
|
+
.then(() => this.storage.close(context))
|
|
304
|
+
.finally(() => {
|
|
305
|
+
this.state = "closed";
|
|
306
|
+
this.onClose?.();
|
|
258
307
|
});
|
|
308
|
+
return this.closePromise;
|
|
309
|
+
}
|
|
310
|
+
async getBranchTip(name, context) {
|
|
311
|
+
const stored = await this.getValue(branchTip(name), context);
|
|
312
|
+
if (stored === undefined)
|
|
313
|
+
throw new SessionInvariantError(`Unknown branch: ${name}`);
|
|
314
|
+
return stored.value;
|
|
315
|
+
}
|
|
316
|
+
async appendToBranch(name, entry, context) {
|
|
317
|
+
this.assertOpen();
|
|
318
|
+
if (entry.type === "message" && entry.message.role === "assistant" && entry.message.stopReason === "pending") {
|
|
319
|
+
throw new SessionPendingAssistantMessageError();
|
|
320
|
+
}
|
|
321
|
+
const id = this.idGenerator.next();
|
|
322
|
+
await this.mutate(async (mutator) => {
|
|
323
|
+
const tip = await mutator.getValue(branchTip(name), context);
|
|
324
|
+
if (tip === undefined)
|
|
325
|
+
throw new SessionInvariantError(`Unknown branch: ${name}`);
|
|
326
|
+
await mutator.commit([
|
|
327
|
+
insertEntry(entry.type === "message"
|
|
328
|
+
? { id, parentId: tip.value, type: "message", message: entry.message }
|
|
329
|
+
: {
|
|
330
|
+
id,
|
|
331
|
+
parentId: tip.value,
|
|
332
|
+
type: "custom",
|
|
333
|
+
customType: entry.customType,
|
|
334
|
+
...(entry.data === undefined ? {} : { data: entry.data }),
|
|
335
|
+
}),
|
|
336
|
+
setValueWrite(branchTip(name), id),
|
|
337
|
+
], context);
|
|
338
|
+
}, context);
|
|
339
|
+
return id;
|
|
340
|
+
}
|
|
341
|
+
getOrCreateBranchObject(name) {
|
|
342
|
+
let branch = this.branches.get(name);
|
|
343
|
+
if (branch === undefined) {
|
|
344
|
+
branch = new StorageBackedBranch(name, this);
|
|
345
|
+
this.branches.set(name, branch);
|
|
346
|
+
}
|
|
347
|
+
return branch;
|
|
348
|
+
}
|
|
349
|
+
assertValidBranchName(name) {
|
|
350
|
+
if (name.length === 0)
|
|
351
|
+
throw new SessionInvalidBranchError(name, "branch name must not be empty");
|
|
352
|
+
if (name.includes("\u0000")) {
|
|
353
|
+
throw new SessionInvalidBranchError(name, "branch name must not contain \\u0000");
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
assertOpen() {
|
|
357
|
+
if (this.state !== "open")
|
|
358
|
+
throw this.closedError;
|
|
259
359
|
}
|
|
260
360
|
}
|
|
261
361
|
//# sourceMappingURL=session.js.map
|