@draht/agent-core 2026.10.20 → 2026.10.23
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 +6 -1
- package/dist/agent-loop.d.ts.map +1 -1
- package/dist/agent-loop.js +16 -2
- package/dist/agent-loop.js.map +1 -1
- package/dist/agent.d.ts +8 -1
- package/dist/agent.d.ts.map +1 -1
- package/dist/agent.js +4 -0
- package/dist/agent.js.map +1 -1
- package/dist/index.d.ts +0 -22
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -20
- package/dist/index.js.map +1 -1
- package/dist/proxy.d.ts +2 -5
- package/dist/proxy.d.ts.map +1 -1
- package/dist/proxy.js +2 -14
- package/dist/proxy.js.map +1 -1
- package/dist/types.d.ts +4 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +4 -47
- package/dist/harness/agent-harness.d.ts +0 -716
- package/dist/harness/agent-harness.d.ts.map +0 -1
- package/dist/harness/agent-harness.js +0 -6
- package/dist/harness/agent-harness.js.map +0 -1
- package/dist/harness/compaction/branch-summarization.d.ts +0 -68
- package/dist/harness/compaction/branch-summarization.d.ts.map +0 -1
- package/dist/harness/compaction/branch-summarization.js +0 -176
- package/dist/harness/compaction/branch-summarization.js.map +0 -1
- package/dist/harness/compaction/compaction.d.ts +0 -126
- package/dist/harness/compaction/compaction.d.ts.map +0 -1
- package/dist/harness/compaction/compaction.js +0 -561
- package/dist/harness/compaction/compaction.js.map +0 -1
- package/dist/harness/compaction/utils.d.ts +0 -28
- package/dist/harness/compaction/utils.d.ts.map +0 -1
- package/dist/harness/compaction/utils.js +0 -123
- package/dist/harness/compaction/utils.js.map +0 -1
- package/dist/harness/config.d.ts +0 -9
- package/dist/harness/config.d.ts.map +0 -1
- package/dist/harness/config.js +0 -35
- package/dist/harness/config.js.map +0 -1
- package/dist/harness/context.d.ts +0 -9
- package/dist/harness/context.d.ts.map +0 -1
- package/dist/harness/context.js +0 -13
- package/dist/harness/context.js.map +0 -1
- package/dist/harness/env/nodejs.d.ts +0 -43
- package/dist/harness/env/nodejs.d.ts.map +0 -1
- package/dist/harness/env/nodejs.js +0 -865
- package/dist/harness/env/nodejs.js.map +0 -1
- package/dist/harness/events.d.ts +0 -24
- package/dist/harness/events.d.ts.map +0 -1
- package/dist/harness/events.js +0 -233
- package/dist/harness/events.js.map +0 -1
- package/dist/harness/execution/assistant.d.ts +0 -42
- package/dist/harness/execution/assistant.d.ts.map +0 -1
- package/dist/harness/execution/assistant.js +0 -82
- package/dist/harness/execution/assistant.js.map +0 -1
- package/dist/harness/execution/effect-gate.d.ts +0 -22
- package/dist/harness/execution/effect-gate.d.ts.map +0 -1
- package/dist/harness/execution/effect-gate.js +0 -49
- package/dist/harness/execution/effect-gate.js.map +0 -1
- package/dist/harness/execution/tools.d.ts +0 -67
- package/dist/harness/execution/tools.d.ts.map +0 -1
- package/dist/harness/execution/tools.js +0 -119
- package/dist/harness/execution/tools.js.map +0 -1
- package/dist/harness/execution-env.d.ts +0 -4
- package/dist/harness/execution-env.d.ts.map +0 -1
- package/dist/harness/execution-env.js +0 -3
- package/dist/harness/execution-env.js.map +0 -1
- package/dist/harness/hooks.d.ts +0 -38
- package/dist/harness/hooks.d.ts.map +0 -1
- package/dist/harness/hooks.js +0 -406
- package/dist/harness/hooks.js.map +0 -1
- package/dist/harness/messages.d.ts +0 -51
- package/dist/harness/messages.d.ts.map +0 -1
- package/dist/harness/messages.js +0 -103
- package/dist/harness/messages.js.map +0 -1
- package/dist/harness/pico3/bash.d.ts +0 -10
- package/dist/harness/pico3/bash.d.ts.map +0 -1
- package/dist/harness/pico3/bash.js +0 -25
- package/dist/harness/pico3/bash.js.map +0 -1
- package/dist/harness/pico3/bounded.d.ts +0 -21
- package/dist/harness/pico3/bounded.d.ts.map +0 -1
- package/dist/harness/pico3/bounded.js +0 -98
- package/dist/harness/pico3/bounded.js.map +0 -1
- package/dist/harness/pico3/chord.d.ts +0 -41
- package/dist/harness/pico3/chord.d.ts.map +0 -1
- package/dist/harness/pico3/chord.js +0 -147
- package/dist/harness/pico3/chord.js.map +0 -1
- package/dist/harness/pico3/context.d.ts +0 -16
- package/dist/harness/pico3/context.d.ts.map +0 -1
- package/dist/harness/pico3/context.js +0 -88
- package/dist/harness/pico3/context.js.map +0 -1
- package/dist/harness/pico3/harness.d.ts +0 -198
- package/dist/harness/pico3/harness.d.ts.map +0 -1
- package/dist/harness/pico3/harness.js +0 -654
- package/dist/harness/pico3/harness.js.map +0 -1
- package/dist/harness/pico3/hooks.d.ts +0 -10
- package/dist/harness/pico3/hooks.d.ts.map +0 -1
- package/dist/harness/pico3/hooks.js +0 -33
- package/dist/harness/pico3/hooks.js.map +0 -1
- package/dist/harness/pico3/index.d.ts +0 -19
- package/dist/harness/pico3/index.d.ts.map +0 -1
- package/dist/harness/pico3/index.js +0 -15
- package/dist/harness/pico3/index.js.map +0 -1
- package/dist/harness/pico3/jsonl.d.ts +0 -58
- package/dist/harness/pico3/jsonl.d.ts.map +0 -1
- package/dist/harness/pico3/jsonl.js +0 -325
- package/dist/harness/pico3/jsonl.js.map +0 -1
- package/dist/harness/pico3/kinds/collapse.d.ts +0 -49
- package/dist/harness/pico3/kinds/collapse.d.ts.map +0 -1
- package/dist/harness/pico3/kinds/collapse.js +0 -191
- package/dist/harness/pico3/kinds/collapse.js.map +0 -1
- package/dist/harness/pico3/kinds/entries.d.ts +0 -78
- package/dist/harness/pico3/kinds/entries.d.ts.map +0 -1
- package/dist/harness/pico3/kinds/entries.js +0 -13
- package/dist/harness/pico3/kinds/entries.js.map +0 -1
- package/dist/harness/pico3/kinds/frames.d.ts +0 -9
- package/dist/harness/pico3/kinds/frames.d.ts.map +0 -1
- package/dist/harness/pico3/kinds/frames.js +0 -75
- package/dist/harness/pico3/kinds/frames.js.map +0 -1
- package/dist/harness/pico3/kinds/generation.d.ts +0 -94
- package/dist/harness/pico3/kinds/generation.d.ts.map +0 -1
- package/dist/harness/pico3/kinds/generation.js +0 -504
- package/dist/harness/pico3/kinds/generation.js.map +0 -1
- package/dist/harness/pico3/kinds/job.d.ts +0 -44
- package/dist/harness/pico3/kinds/job.d.ts.map +0 -1
- package/dist/harness/pico3/kinds/job.js +0 -143
- package/dist/harness/pico3/kinds/job.js.map +0 -1
- package/dist/harness/pico3/kinds/plugin.d.ts +0 -15
- package/dist/harness/pico3/kinds/plugin.d.ts.map +0 -1
- package/dist/harness/pico3/kinds/plugin.js +0 -35
- package/dist/harness/pico3/kinds/plugin.js.map +0 -1
- package/dist/harness/pico3/kinds/post-tools.d.ts +0 -22
- package/dist/harness/pico3/kinds/post-tools.d.ts.map +0 -1
- package/dist/harness/pico3/kinds/post-tools.js +0 -145
- package/dist/harness/pico3/kinds/post-tools.js.map +0 -1
- package/dist/harness/pico3/kinds/task-api.d.ts +0 -3
- package/dist/harness/pico3/kinds/task-api.d.ts.map +0 -1
- package/dist/harness/pico3/kinds/task-api.js +0 -45
- package/dist/harness/pico3/kinds/task-api.js.map +0 -1
- package/dist/harness/pico3/kinds/tool.d.ts +0 -43
- package/dist/harness/pico3/kinds/tool.d.ts.map +0 -1
- package/dist/harness/pico3/kinds/tool.js +0 -373
- package/dist/harness/pico3/kinds/tool.js.map +0 -1
- package/dist/harness/pico3/legacy-tracker.d.ts +0 -11
- package/dist/harness/pico3/legacy-tracker.d.ts.map +0 -1
- package/dist/harness/pico3/legacy-tracker.js +0 -41
- package/dist/harness/pico3/legacy-tracker.js.map +0 -1
- package/dist/harness/pico3/membrane.d.ts +0 -23
- package/dist/harness/pico3/membrane.d.ts.map +0 -1
- package/dist/harness/pico3/membrane.js +0 -141
- package/dist/harness/pico3/membrane.js.map +0 -1
- package/dist/harness/pico3/memory.d.ts +0 -53
- package/dist/harness/pico3/memory.d.ts.map +0 -1
- package/dist/harness/pico3/memory.js +0 -264
- package/dist/harness/pico3/memory.js.map +0 -1
- package/dist/harness/pico3/scheduler.d.ts +0 -49
- package/dist/harness/pico3/scheduler.d.ts.map +0 -1
- package/dist/harness/pico3/scheduler.js +0 -438
- package/dist/harness/pico3/scheduler.js.map +0 -1
- package/dist/harness/pico3/session.d.ts +0 -264
- package/dist/harness/pico3/session.d.ts.map +0 -1
- package/dist/harness/pico3/session.js +0 -1348
- package/dist/harness/pico3/session.js.map +0 -1
- package/dist/harness/pico3/system.d.ts +0 -126
- package/dist/harness/pico3/system.d.ts.map +0 -1
- package/dist/harness/pico3/system.js +0 -244
- package/dist/harness/pico3/system.js.map +0 -1
- package/dist/harness/pico3/types.d.ts +0 -973
- package/dist/harness/pico3/types.d.ts.map +0 -1
- package/dist/harness/pico3/types.js +0 -106
- package/dist/harness/pico3/types.js.map +0 -1
- package/dist/harness/pico3/view.d.ts +0 -34
- package/dist/harness/pico3/view.d.ts.map +0 -1
- package/dist/harness/pico3/view.js +0 -411
- package/dist/harness/pico3/view.js.map +0 -1
- package/dist/harness/prompt-templates.d.ts +0 -49
- package/dist/harness/prompt-templates.d.ts.map +0 -1
- package/dist/harness/prompt-templates.js +0 -225
- package/dist/harness/prompt-templates.js.map +0 -1
- package/dist/harness/result.d.ts +0 -133
- package/dist/harness/result.d.ts.map +0 -1
- package/dist/harness/result.js +0 -81
- package/dist/harness/result.js.map +0 -1
- package/dist/harness/runtime/drive/boundary.d.ts +0 -28
- package/dist/harness/runtime/drive/boundary.d.ts.map +0 -1
- package/dist/harness/runtime/drive/boundary.js +0 -173
- package/dist/harness/runtime/drive/boundary.js.map +0 -1
- package/dist/harness/runtime/drive/checkpoint.d.ts +0 -8
- package/dist/harness/runtime/drive/checkpoint.d.ts.map +0 -1
- package/dist/harness/runtime/drive/checkpoint.js +0 -133
- package/dist/harness/runtime/drive/checkpoint.js.map +0 -1
- package/dist/harness/runtime/drive/deferred.d.ts +0 -15
- package/dist/harness/runtime/drive/deferred.d.ts.map +0 -1
- package/dist/harness/runtime/drive/deferred.js +0 -179
- package/dist/harness/runtime/drive/deferred.js.map +0 -1
- package/dist/harness/runtime/drive/generation.d.ts +0 -8
- package/dist/harness/runtime/drive/generation.d.ts.map +0 -1
- package/dist/harness/runtime/drive/generation.js +0 -205
- package/dist/harness/runtime/drive/generation.js.map +0 -1
- package/dist/harness/runtime/drive/reconcile.d.ts +0 -5
- package/dist/harness/runtime/drive/reconcile.d.ts.map +0 -1
- package/dist/harness/runtime/drive/reconcile.js +0 -140
- package/dist/harness/runtime/drive/reconcile.js.map +0 -1
- package/dist/harness/runtime/drive/recovery.d.ts +0 -8
- package/dist/harness/runtime/drive/recovery.d.ts.map +0 -1
- package/dist/harness/runtime/drive/recovery.js +0 -85
- package/dist/harness/runtime/drive/recovery.js.map +0 -1
- package/dist/harness/runtime/drive/response.d.ts +0 -23
- package/dist/harness/runtime/drive/response.d.ts.map +0 -1
- package/dist/harness/runtime/drive/response.js +0 -394
- package/dist/harness/runtime/drive/response.js.map +0 -1
- package/dist/harness/runtime/drive/retry.d.ts +0 -4
- package/dist/harness/runtime/drive/retry.d.ts.map +0 -1
- package/dist/harness/runtime/drive/retry.js +0 -34
- package/dist/harness/runtime/drive/retry.js.map +0 -1
- package/dist/harness/runtime/drive/structural.d.ts +0 -32
- package/dist/harness/runtime/drive/structural.d.ts.map +0 -1
- package/dist/harness/runtime/drive/structural.js +0 -929
- package/dist/harness/runtime/drive/structural.js.map +0 -1
- package/dist/harness/runtime/drive/terminal.d.ts +0 -7
- package/dist/harness/runtime/drive/terminal.d.ts.map +0 -1
- package/dist/harness/runtime/drive/terminal.js +0 -49
- package/dist/harness/runtime/drive/terminal.js.map +0 -1
- package/dist/harness/runtime/drive/tool-placement.d.ts +0 -14
- package/dist/harness/runtime/drive/tool-placement.d.ts.map +0 -1
- package/dist/harness/runtime/drive/tool-placement.js +0 -219
- package/dist/harness/runtime/drive/tool-placement.js.map +0 -1
- package/dist/harness/runtime/drive/tools.d.ts +0 -6
- package/dist/harness/runtime/drive/tools.d.ts.map +0 -1
- package/dist/harness/runtime/drive/tools.js +0 -449
- package/dist/harness/runtime/drive/tools.js.map +0 -1
- package/dist/harness/runtime/drive.d.ts +0 -6
- package/dist/harness/runtime/drive.d.ts.map +0 -1
- package/dist/harness/runtime/drive.js +0 -93
- package/dist/harness/runtime/drive.js.map +0 -1
- package/dist/harness/runtime/harness.d.ts +0 -59
- package/dist/harness/runtime/harness.d.ts.map +0 -1
- package/dist/harness/runtime/harness.js +0 -311
- package/dist/harness/runtime/harness.js.map +0 -1
- package/dist/harness/runtime/index.d.ts +0 -2
- package/dist/harness/runtime/index.d.ts.map +0 -1
- package/dist/harness/runtime/index.js +0 -2
- package/dist/harness/runtime/index.js.map +0 -1
- package/dist/harness/runtime/lane.d.ts +0 -118
- package/dist/harness/runtime/lane.d.ts.map +0 -1
- package/dist/harness/runtime/lane.js +0 -1575
- package/dist/harness/runtime/lane.js.map +0 -1
- package/dist/harness/runtime/progress.d.ts +0 -15
- package/dist/harness/runtime/progress.d.ts.map +0 -1
- package/dist/harness/runtime/progress.js +0 -66
- package/dist/harness/runtime/progress.js.map +0 -1
- package/dist/harness/runtime/reducer.d.ts +0 -5
- package/dist/harness/runtime/reducer.d.ts.map +0 -1
- package/dist/harness/runtime/reducer.js +0 -240
- package/dist/harness/runtime/reducer.js.map +0 -1
- package/dist/harness/runtime/restore.d.ts +0 -24
- package/dist/harness/runtime/restore.d.ts.map +0 -1
- package/dist/harness/runtime/restore.js +0 -117
- package/dist/harness/runtime/restore.js.map +0 -1
- package/dist/harness/runtime/transcript.d.ts +0 -21
- package/dist/harness/runtime/transcript.d.ts.map +0 -1
- package/dist/harness/runtime/transcript.js +0 -72
- package/dist/harness/runtime/transcript.js.map +0 -1
- package/dist/harness/runtime/types.d.ts +0 -105
- package/dist/harness/runtime/types.d.ts.map +0 -1
- package/dist/harness/runtime/types.js +0 -61
- package/dist/harness/runtime/types.js.map +0 -1
- package/dist/harness/session/commit.d.ts +0 -53
- package/dist/harness/session/commit.d.ts.map +0 -1
- package/dist/harness/session/commit.js +0 -57
- package/dist/harness/session/commit.js.map +0 -1
- package/dist/harness/session/context.d.ts +0 -10
- package/dist/harness/session/context.d.ts.map +0 -1
- package/dist/harness/session/context.js +0 -49
- package/dist/harness/session/context.js.map +0 -1
- package/dist/harness/session/fork-policy.d.ts +0 -21
- package/dist/harness/session/fork-policy.d.ts.map +0 -1
- package/dist/harness/session/fork-policy.js +0 -55
- package/dist/harness/session/fork-policy.js.map +0 -1
- package/dist/harness/session/fork.d.ts +0 -16
- package/dist/harness/session/fork.d.ts.map +0 -1
- package/dist/harness/session/fork.js +0 -79
- package/dist/harness/session/fork.js.map +0 -1
- package/dist/harness/session/in-memory-storage-state.d.ts +0 -39
- package/dist/harness/session/in-memory-storage-state.d.ts.map +0 -1
- package/dist/harness/session/in-memory-storage-state.js +0 -276
- package/dist/harness/session/in-memory-storage-state.js.map +0 -1
- package/dist/harness/session/index.d.ts +0 -11
- package/dist/harness/session/index.d.ts.map +0 -1
- package/dist/harness/session/index.js +0 -9
- package/dist/harness/session/index.js.map +0 -1
- package/dist/harness/session/jsonl/codec.d.ts +0 -21
- package/dist/harness/session/jsonl/codec.d.ts.map +0 -1
- package/dist/harness/session/jsonl/codec.js +0 -45
- package/dist/harness/session/jsonl/codec.js.map +0 -1
- package/dist/harness/session/jsonl/fork.d.ts +0 -38
- package/dist/harness/session/jsonl/fork.d.ts.map +0 -1
- package/dist/harness/session/jsonl/fork.js +0 -264
- package/dist/harness/session/jsonl/fork.js.map +0 -1
- package/dist/harness/session/jsonl/index.d.ts +0 -4
- package/dist/harness/session/jsonl/index.d.ts.map +0 -1
- package/dist/harness/session/jsonl/index.js +0 -4
- package/dist/harness/session/jsonl/index.js.map +0 -1
- package/dist/harness/session/jsonl/io.d.ts +0 -14
- package/dist/harness/session/jsonl/io.d.ts.map +0 -1
- package/dist/harness/session/jsonl/io.js +0 -86
- package/dist/harness/session/jsonl/io.js.map +0 -1
- package/dist/harness/session/jsonl/legacy-v3.d.ts +0 -44
- package/dist/harness/session/jsonl/legacy-v3.d.ts.map +0 -1
- package/dist/harness/session/jsonl/legacy-v3.js +0 -462
- package/dist/harness/session/jsonl/legacy-v3.js.map +0 -1
- package/dist/harness/session/jsonl/repo.d.ts +0 -35
- package/dist/harness/session/jsonl/repo.d.ts.map +0 -1
- package/dist/harness/session/jsonl/repo.js +0 -301
- package/dist/harness/session/jsonl/repo.js.map +0 -1
- package/dist/harness/session/jsonl/storage.d.ts +0 -41
- package/dist/harness/session/jsonl/storage.d.ts.map +0 -1
- package/dist/harness/session/jsonl/storage.js +0 -200
- package/dist/harness/session/jsonl/storage.js.map +0 -1
- package/dist/harness/session/jsonl/types.d.ts +0 -39
- package/dist/harness/session/jsonl/types.d.ts.map +0 -1
- package/dist/harness/session/jsonl/types.js +0 -3
- package/dist/harness/session/jsonl/types.js.map +0 -1
- package/dist/harness/session/memory.d.ts +0 -48
- package/dist/harness/session/memory.d.ts.map +0 -1
- package/dist/harness/session/memory.js +0 -369
- package/dist/harness/session/memory.js.map +0 -1
- package/dist/harness/session/mutation-line.d.ts +0 -8
- package/dist/harness/session/mutation-line.d.ts.map +0 -1
- package/dist/harness/session/mutation-line.js +0 -21
- package/dist/harness/session/mutation-line.js.map +0 -1
- package/dist/harness/session/session.d.ts +0 -82
- package/dist/harness/session/session.d.ts.map +0 -1
- package/dist/harness/session/session.js +0 -361
- package/dist/harness/session/session.js.map +0 -1
- package/dist/harness/session/testing/benchmark/datasets.d.ts +0 -12
- package/dist/harness/session/testing/benchmark/datasets.d.ts.map +0 -1
- package/dist/harness/session/testing/benchmark/datasets.js +0 -24
- package/dist/harness/session/testing/benchmark/datasets.js.map +0 -1
- package/dist/harness/session/testing/benchmark/session-repo.d.ts +0 -42
- package/dist/harness/session/testing/benchmark/session-repo.d.ts.map +0 -1
- package/dist/harness/session/testing/benchmark/session-repo.js +0 -127
- package/dist/harness/session/testing/benchmark/session-repo.js.map +0 -1
- package/dist/harness/session/testing/benchmark/storage.d.ts +0 -25
- package/dist/harness/session/testing/benchmark/storage.d.ts.map +0 -1
- package/dist/harness/session/testing/benchmark/storage.js +0 -114
- package/dist/harness/session/testing/benchmark/storage.js.map +0 -1
- package/dist/harness/session/testing/conformance/session-repo.d.ts +0 -23
- package/dist/harness/session/testing/conformance/session-repo.d.ts.map +0 -1
- package/dist/harness/session/testing/conformance/session-repo.js +0 -809
- package/dist/harness/session/testing/conformance/session-repo.js.map +0 -1
- package/dist/harness/session/testing/conformance/storage.d.ts +0 -4
- package/dist/harness/session/testing/conformance/storage.d.ts.map +0 -1
- package/dist/harness/session/testing/conformance/storage.js +0 -600
- package/dist/harness/session/testing/conformance/storage.js.map +0 -1
- package/dist/harness/session/testing/gating-storage.d.ts +0 -26
- package/dist/harness/session/testing/gating-storage.d.ts.map +0 -1
- package/dist/harness/session/testing/gating-storage.js +0 -100
- package/dist/harness/session/testing/gating-storage.js.map +0 -1
- package/dist/harness/session/testing/index.d.ts +0 -10
- package/dist/harness/session/testing/index.d.ts.map +0 -1
- package/dist/harness/session/testing/index.js +0 -9
- package/dist/harness/session/testing/index.js.map +0 -1
- package/dist/harness/session/testing/instrumented-storage.d.ts +0 -11
- package/dist/harness/session/testing/instrumented-storage.d.ts.map +0 -1
- package/dist/harness/session/testing/instrumented-storage.js +0 -16
- package/dist/harness/session/testing/instrumented-storage.js.map +0 -1
- package/dist/harness/session/testing/storage-decorator.d.ts +0 -20
- package/dist/harness/session/testing/storage-decorator.d.ts.map +0 -1
- package/dist/harness/session/testing/storage-decorator.js +0 -41
- package/dist/harness/session/testing/storage-decorator.js.map +0 -1
- package/dist/harness/session/testing/types.d.ts +0 -12
- package/dist/harness/session/testing/types.d.ts.map +0 -1
- package/dist/harness/session/testing/types.js +0 -2
- package/dist/harness/session/testing/types.js.map +0 -1
- package/dist/harness/session/types.d.ts +0 -512
- package/dist/harness/session/types.d.ts.map +0 -1
- package/dist/harness/session/types.js +0 -9
- package/dist/harness/session/types.js.map +0 -1
- package/dist/harness/session/values.d.ts +0 -95
- package/dist/harness/session/values.d.ts.map +0 -1
- package/dist/harness/session/values.js +0 -81
- package/dist/harness/session/values.js.map +0 -1
- package/dist/harness/skills.d.ts +0 -46
- package/dist/harness/skills.d.ts.map +0 -1
- package/dist/harness/skills.js +0 -326
- package/dist/harness/skills.js.map +0 -1
- package/dist/harness/system-prompt.d.ts +0 -3
- package/dist/harness/system-prompt.d.ts.map +0 -1
- package/dist/harness/system-prompt.js +0 -30
- package/dist/harness/system-prompt.js.map +0 -1
- package/dist/harness/telemetry.d.ts +0 -1242
- package/dist/harness/telemetry.d.ts.map +0 -1
- package/dist/harness/telemetry.js +0 -527
- package/dist/harness/telemetry.js.map +0 -1
- package/dist/harness/tools/bash.d.ts +0 -27
- package/dist/harness/tools/bash.d.ts.map +0 -1
- package/dist/harness/tools/bash.js +0 -105
- package/dist/harness/tools/bash.js.map +0 -1
- package/dist/harness/tools/edit-diff.d.ts +0 -89
- package/dist/harness/tools/edit-diff.d.ts.map +0 -1
- package/dist/harness/tools/edit-diff.js +0 -386
- package/dist/harness/tools/edit-diff.js.map +0 -1
- package/dist/harness/tools/edit.d.ts +0 -19
- package/dist/harness/tools/edit.d.ts.map +0 -1
- package/dist/harness/tools/edit.js +0 -108
- package/dist/harness/tools/edit.js.map +0 -1
- package/dist/harness/tools/file-mutation-queue.d.ts +0 -5
- package/dist/harness/tools/file-mutation-queue.d.ts.map +0 -1
- package/dist/harness/tools/file-mutation-queue.js +0 -46
- package/dist/harness/tools/file-mutation-queue.js.map +0 -1
- package/dist/harness/tools/image.d.ts +0 -3
- package/dist/harness/tools/image.d.ts.map +0 -1
- package/dist/harness/tools/image.js +0 -106
- package/dist/harness/tools/image.js.map +0 -1
- package/dist/harness/tools/index.d.ts +0 -6
- package/dist/harness/tools/index.d.ts.map +0 -1
- package/dist/harness/tools/index.js +0 -5
- package/dist/harness/tools/index.js.map +0 -1
- package/dist/harness/tools/path-utils.d.ts +0 -5
- package/dist/harness/tools/path-utils.d.ts.map +0 -1
- package/dist/harness/tools/path-utils.js +0 -26
- package/dist/harness/tools/path-utils.js.map +0 -1
- package/dist/harness/tools/read.d.ts +0 -35
- package/dist/harness/tools/read.d.ts.map +0 -1
- package/dist/harness/tools/read.js +0 -108
- package/dist/harness/tools/read.js.map +0 -1
- package/dist/harness/tools/tool-context.d.ts +0 -6
- package/dist/harness/tools/tool-context.d.ts.map +0 -1
- package/dist/harness/tools/tool-context.js +0 -2
- package/dist/harness/tools/tool-context.js.map +0 -1
- package/dist/harness/tools/write.d.ts +0 -11
- package/dist/harness/tools/write.d.ts.map +0 -1
- package/dist/harness/tools/write.js +0 -31
- package/dist/harness/tools/write.js.map +0 -1
- package/dist/harness/types.d.ts +0 -305
- package/dist/harness/types.d.ts.map +0 -1
- package/dist/harness/types.js +0 -75
- package/dist/harness/types.js.map +0 -1
- package/dist/harness/utils/adaptive-publisher.d.ts +0 -24
- package/dist/harness/utils/adaptive-publisher.d.ts.map +0 -1
- package/dist/harness/utils/adaptive-publisher.js +0 -79
- package/dist/harness/utils/adaptive-publisher.js.map +0 -1
- package/dist/harness/utils/output-capture.d.ts +0 -31
- package/dist/harness/utils/output-capture.d.ts.map +0 -1
- package/dist/harness/utils/output-capture.js +0 -217
- package/dist/harness/utils/output-capture.js.map +0 -1
- package/dist/harness/utils/shell-output.d.ts +0 -29
- package/dist/harness/utils/shell-output.d.ts.map +0 -1
- package/dist/harness/utils/shell-output.js +0 -71
- package/dist/harness/utils/shell-output.js.map +0 -1
- package/dist/harness/utils/truncate.d.ts +0 -71
- package/dist/harness/utils/truncate.d.ts.map +0 -1
- package/dist/harness/utils/truncate.js +0 -296
- package/dist/harness/utils/truncate.js.map +0 -1
- package/dist/harness/utils/usage.d.ts +0 -4
- package/dist/harness/utils/usage.d.ts.map +0 -1
- package/dist/harness/utils/usage.js +0 -33
- package/dist/harness/utils/usage.js.map +0 -1
- package/dist/node.d.ts +0 -3
- package/dist/node.d.ts.map +0 -1
- package/dist/node.js +0 -3
- package/dist/node.js.map +0 -1
- package/dist/search/index.d.ts +0 -29
- package/dist/search/index.d.ts.map +0 -1
- package/dist/search/index.js +0 -2
- package/dist/search/index.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"storage.js","sourceRoot":"","sources":["../../../../src/harness/session/jsonl/storage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAG9C,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAuB,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAc1F,OAAO,EACN,SAAS,EACT,qBAAqB,EACrB,qBAAqB,EACrB,YAAY,EACZ,eAAe,EACf,yBAAyB,GACzB,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,qBAAqB,EAAqD,MAAM,YAAY,CAAC;AAEtG,SAAS,kBAAkB,CAAC,OAAe;IAC1C,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;IAC5F,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IAC9C,IAAI,WAAW,KAAK,CAAC,CAAC;QAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IACzD,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AACzE,CAAC;AAID,iEAAiE;AACjE,MAAM,OAAO,YAAY;IACP,UAAU,CAAa;IACvB,IAAI,CAAS;IACb,GAAG,CAAe;IAC1B,MAAM,CAAqB;IAC5B,OAAO,CAAe;IACb,YAAY,GAAG,IAAI,oBAAoB,EAAE,CAAC;IACnD,WAAW,GAAkB,OAAO,CAAC,OAAO,EAAE,CAAC;IAC/C,KAAK,GAAkC,MAAM,CAAC;IAC9C,YAAY,CAA4B;IAEhD,YAAoB,OAA4B,EAAE,MAA0B,EAAE,OAAqB;QAClG,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;QACrC,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;QACzB,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC;QACnC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACxB,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,MAAM,CAClB,OAA4B,EAC5B,MAA0B,EAC1B,aAAsB,EACtB,OAAgB;QAEhB,MAAM,OAAO,GAAG,IAAI,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAClE,MAAM,QAAQ,GAAG,OAAO,CAAC,YAAY,CAAC,aAAa,CAAC,aAAa,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QAClF,MAAM,YAAY,CAAC,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;YACtF,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC;gBAAE,MAAM,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACjE,CAAC,CAAC,CAAC;QACH,OAAO,CAAC,YAAY,CAAC,cAAc,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACrD,OAAO,OAAO,CAAC;IAChB,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,OAA4B,EAAE,OAAgB;QAC/D,MAAM,MAAM,GAAG,SAAS,CACvB,MAAM,OAAO,CAAC,UAAU,CAAC,kBAAkB,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,EAClE,gCAAgC,OAAO,CAAC,IAAI,EAAE,CAC9C,CAAC;QACF,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QACzG,OAAO,MAAM,CAAC,MAAM,KAAK,WAAW;YACnC,CAAC,CAAC,YAAY,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC;YAC7C,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACzD,CAAC;IAEO,MAAM,CAAC,KAAK,CAAC,MAAM,CAC1B,OAA4B,EAC5B,MAA0B,EAC1B,OAAgB;QAEhB,MAAM,OAAO,GAAG,SAAS,CACxB,MAAM,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,EAC5D,gCAAgC,OAAO,CAAC,IAAI,EAAE,CAC9C,CAAC;QACF,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;QACpD,IAAI,MAAM,CAAC,cAAc,KAAK,qBAAqB,EAAE,CAAC;YACrD,MAAM,IAAI,KAAK,CAAC,WAAW,MAAM,CAAC,EAAE,qCAAqC,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC;QACnG,CAAC;QACD,MAAM,OAAO,GAAG,IAAI,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAClE,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;YACnD,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAE,CAAC;YAC3B,IAAI,CAAC;gBACJ,OAAO,CAAC,eAAe,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC,CAAC;YACtD,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBAChB,MAAM,IAAI,KAAK,CAAC,yBAAyB,OAAO,CAAC,IAAI,UAAU,KAAK,GAAG,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;YAC/F,CAAC;QACF,CAAC;QACD,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS;YAAE,OAAO,CAAC,YAAY,CAAC,cAAc,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACtF,IAAI,IAAI,EAAE,CAAC;YACV,MAAM,qBAAqB,CAAC,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,MAAM,EAAE,EAAE,CACjF,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAC/B,CAAC;QACH,CAAC;QACD,OAAO,OAAO,CAAC;IAChB,CAAC;IAEO,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,OAA4B,EAAE,OAAgB;QAC/E,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACpF,MAAM,OAAO,GAAG,IAAI,YAAY,CAAC,OAAO,EAAE,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;QACjH,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;YAAE,OAAO,CAAC,eAAe,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;QACnF,OAAO,OAAO,CAAC;IAChB,CAAC;IAEO,eAAe,CAAC,MAAiC;QACxD,IAAI,CAAC,YAAY,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;QAC5C,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;IAC1C,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,MAAe,EAAE,OAAgB;QAC7C,IAAI,IAAI,CAAC,KAAK,KAAK,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;QACrE,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;QAC9E,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,IAAI,CAC7B,GAAG,EAAE,CAAC,SAAS,EACf,GAAG,EAAE,CAAC,SAAS,CACf,CAAC;QACF,OAAO,MAAM,CAAC;IACf,CAAC;IAEO,KAAK,CAAC,WAAW,CAAC,MAAe,EAAE,OAAgB;QAC1D,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,KAAK,IAAI,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvD,OAAO,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;QACvE,CAAC;QACD,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;QACrE,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAClC,SAAS,CACR,MAAM,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,yBAAyB,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,EACvG,kCAAkC,IAAI,CAAC,IAAI,EAAE,CAC7C,CAAC;QACH,CAAC;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAChE,OAAO,EAAE,GAAG,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,EAAE,CAAC;IACrE,CAAC;IAED,oGAAoG;IAC5F,KAAK,CAAC,mBAAmB,CAChC,MAAsB,EACtB,YAAqB,EACrB,OAAgB;QAEhB,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,aAAa,CAC/C;YACC,WAAW,CAAC;gBACX,EAAE,EAAE,MAAM,CAAC,SAAS,CAAC;gBACrB,KAAK,EAAE,MAAM,CAAC,aAAa;gBAC3B,UAAU,EAAE,IAAI;gBAChB,OAAO,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE;aAChC,CAAC;YACF,GAAG,YAAY;SACf,EACD,SAAS,CACT,CAAC;QAEF,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC;QAClE,MAAM,cAAc,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC;QACnD,MAAM,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;YACxF,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;gBAAE,MAAM,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;YACxE,MAAM,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC/B,CAAC,CAAC,CAAC;QAEH,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAChE,IAAI,CAAC,OAAO,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;QAC9B,mGAAmG;QACnG,OAAO;YACN,GAAG,QAAQ,CAAC,MAAM;YAClB,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,QAAQ,GAAG,CAAC;YACtC,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;YACnC,KAAK;SACL,CAAC;IACH,CAAC;IAED,UAAU,CAAC,GAAa,EAAE,QAAiB;QAC1C,IAAI,IAAI,CAAC,KAAK,KAAK,MAAM;YAAE,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC,CAAC;QACtF,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3D,CAAC;IAED,QAAQ,CAAI,OAAiB,EAAE,QAAiB;QAC/C,IAAI,IAAI,CAAC,KAAK,KAAK,MAAM;YAAE,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC,CAAC;QACtF,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;IAC7D,CAAC;IAED,UAAU,CAAI,MAAgB,EAAE,QAAiB;QAChD,IAAI,IAAI,CAAC,KAAK,KAAK,MAAM;YAAE,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC,CAAC;QACtF,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;IAC9D,CAAC;IAED,KAAK,CAAC,QAAQ,CACb,OAAqB,EACrB,OAAoC,EACpC,QAAiB;QAEjB,IAAI,IAAI,CAAC,KAAK,KAAK,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;QACrE,OAAO,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACrD,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,KAAwB,EAAE,QAAiB;QAC3D,IAAI,IAAI,CAAC,KAAK,KAAK,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;QACrE,OAAO,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IAC5C,CAAC;IAED,KAAK,CAAC,mBAAmB,CAAC,KAAwB,EAAE,QAAiB;QACpE,IAAI,IAAI,CAAC,KAAK,KAAK,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;QACrE,OAAO,IAAI,CAAC,YAAY,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;IACrD,CAAC;IAED,WAAW,CAAC,KAAgB,EAAE,QAAiB;QAC9C,IAAI,IAAI,CAAC,KAAK,KAAK,MAAM;YAAE,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC,CAAC;QACtF,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;IAC9D,CAAC;IAED,SAAS,CAAC,KAAgB,EAAE,QAAiB;QAC5C,IAAI,IAAI,CAAC,KAAK,KAAK,MAAM;YAAE,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC,CAAC;QACtF,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;IAC5D,CAAC;IAED,QAAQ,CAAC,QAAiB;QACzB,IAAI,IAAI,CAAC,KAAK,KAAK,MAAM;YAAE,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC,CAAC;QACtF,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;IAC9E,CAAC;IAEO,iBAAiB,CAAC,KAAmB;QAC5C,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC;IACpG,CAAC;IAED,UAAU;QACT,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,KAAK,IAAI,CAAC;IACnC,CAAC;IAED,kEAAkE;IAClE,kBAAkB,CAAC,QAAiB;QACnC,IAAI,IAAI,CAAC,KAAK,KAAK,MAAM;YAAE,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC,CAAC;QACtF,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,CAAC,CAAC;QAC3E,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,IAAI,CAC7B,GAAG,EAAE,CAAC,SAAS,EACf,GAAG,EAAE,CAAC,SAAS,CACf,CAAC;QACF,OAAO,MAAM,CAAC;IACf,CAAC;IAED,KAAK,CAAC,QAAiB;QACtB,IAAI,IAAI,CAAC,YAAY,KAAK,SAAS;YAAE,OAAO,IAAI,CAAC,YAAY,CAAC;QAC9D,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;QACvB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,EAAE;YAC9C,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC;QACvB,CAAC,CAAC,CAAC;QACH,OAAO,IAAI,CAAC,YAAY,CAAC;IAC1B,CAAC;CACD","sourcesContent":["import { uuidv7 } from \"@draht/ai/utils/uuid\";\nimport type { Context } from \"../../context.ts\";\nimport type { FileSystem } from \"../../types.ts\";\nimport { insertUsage } from \"../commit.ts\";\nimport { type CommittedWrite, InMemoryStorageState } from \"../in-memory-storage-state.ts\";\nimport type {\n\tCommitResult,\n\tEntry,\n\tEntryScan,\n\tEntryStructure,\n\tSessionStats,\n\tStorage,\n\tStorageBranchScan,\n\tUsageRow,\n\tUsageScan,\n\tWrite,\n} from \"../types.ts\";\nimport type { ListElement, ListReadOptions, StoredValue, Value, ValueList } from \"../values.ts\";\nimport {\n\tfileValue,\n\tparseJsonlTransaction,\n\tpublishFileAtomically,\n\tpublishJsonl,\n\treadJsonlHeader,\n\tserializeJsonlTransaction,\n} from \"./io.ts\";\nimport { LegacyV3Source } from \"./legacy-v3.ts\";\nimport { JSONL_STORAGE_VERSION, type JsonlStorageHeader, type JsonlStorageOptions } from \"./types.ts\";\n\nfunction splitCompleteLines(content: string): { lines: string[]; torn: boolean } {\n\tif (content.endsWith(\"\\n\")) return { lines: content.slice(0, -1).split(\"\\n\"), torn: false };\n\tconst lastNewline = content.lastIndexOf(\"\\n\");\n\tif (lastNewline === -1) return { lines: [], torn: true };\n\treturn { lines: content.slice(0, lastNewline).split(\"\\n\"), torn: true };\n}\n\ntype JsonlBacking = { kind: \"v4\" } | { kind: \"v3\"; source: LegacyV3Source };\n\n/** JSONL storage backed by an injected filesystem capability. */\nexport class JsonlStorage implements Storage {\n\tprivate readonly fileSystem: FileSystem;\n\tprivate readonly path: string;\n\tprivate readonly now: () => number;\n\treadonly header: JsonlStorageHeader;\n\tprivate backing: JsonlBacking;\n\tprivate readonly storageState = new InMemoryStorageState();\n\tprivate commitQueue: Promise<void> = Promise.resolve();\n\tprivate state: \"open\" | \"closing\" | \"closed\" = \"open\";\n\tprivate closePromise: Promise<void> | undefined;\n\n\tprivate constructor(options: JsonlStorageOptions, header: JsonlStorageHeader, backing: JsonlBacking) {\n\t\tthis.fileSystem = options.fileSystem;\n\t\tthis.path = options.path;\n\t\tthis.now = options.now ?? Date.now;\n\t\tthis.header = header;\n\t\tthis.backing = backing;\n\t}\n\n\tstatic async create(\n\t\toptions: JsonlStorageOptions,\n\t\theader: JsonlStorageHeader,\n\t\tinitialWrites: Write[],\n\t\tcontext: Context,\n\t): Promise<JsonlStorage> {\n\t\tconst storage = new JsonlStorage(options, header, { kind: \"v4\" });\n\t\tconst prepared = storage.storageState.prepareCommit(initialWrites, storage.now());\n\t\tawait publishJsonl(options.fileSystem, options.path, header, context, async (append) => {\n\t\t\tif (prepared.writes.length !== 0) await append(prepared.writes);\n\t\t});\n\t\tstorage.storageState.applyValidated(prepared.writes);\n\t\treturn storage;\n\t}\n\n\tstatic async open(options: JsonlStorageOptions, context: Context): Promise<JsonlStorage> {\n\t\tconst reader = fileValue(\n\t\t\tawait options.fileSystem.openTextLineReader(options.path, context),\n\t\t\t`Failed to read JSONL storage ${options.path}`,\n\t\t);\n\t\tconst parsed = await readJsonlHeader(reader, options.path, context).finally(() => reader.close(context));\n\t\treturn parsed.format === \"v3-legacy\"\n\t\t\t? JsonlStorage.openLegacyV3(options, context)\n\t\t\t: JsonlStorage.openV4(options, parsed.header, context);\n\t}\n\n\tprivate static async openV4(\n\t\toptions: JsonlStorageOptions,\n\t\theader: JsonlStorageHeader,\n\t\tcontext: Context,\n\t): Promise<JsonlStorage> {\n\t\tconst content = fileValue(\n\t\t\tawait options.fileSystem.readTextFile(options.path, context),\n\t\t\t`Failed to read JSONL storage ${options.path}`,\n\t\t);\n\t\tconst { lines, torn } = splitCompleteLines(content);\n\t\tif (header.storageVersion !== JSONL_STORAGE_VERSION) {\n\t\t\tthrow new Error(`Session ${header.id} uses unsupported storage version ${header.storageVersion}`);\n\t\t}\n\t\tconst storage = new JsonlStorage(options, header, { kind: \"v4\" });\n\t\tfor (let index = 1; index < lines.length; index++) {\n\t\t\tconst line = lines[index]!;\n\t\t\ttry {\n\t\t\t\tstorage.replayCommitted(parseJsonlTransaction(line));\n\t\t\t} catch (error) {\n\t\t\t\tthrow new Error(`Invalid JSONL storage ${options.path}: line ${index + 1}`, { cause: error });\n\t\t\t}\n\t\t}\n\t\tif (header.nextSeq !== undefined) storage.storageState.advanceNextSeq(header.nextSeq);\n\t\tif (torn) {\n\t\t\tawait publishFileAtomically(options.fileSystem, options.path, context, (append) =>\n\t\t\t\tappend(`${lines.join(\"\\n\")}\\n`),\n\t\t\t);\n\t\t}\n\t\treturn storage;\n\t}\n\n\tprivate static async openLegacyV3(options: JsonlStorageOptions, context: Context): Promise<JsonlStorage> {\n\t\tconst source = await LegacyV3Source.read(options.fileSystem, options.path, context);\n\t\tconst storage = new JsonlStorage(options, { ...source.header, nextSeq: source.nextSeq }, { kind: \"v3\", source });\n\t\tfor await (const write of source.writes(context)) storage.replayCommitted([write]);\n\t\treturn storage;\n\t}\n\n\tprivate replayCommitted(writes: readonly CommittedWrite[]): void {\n\t\tthis.storageState.validateCommitted(writes);\n\t\tthis.storageState.applyValidated(writes);\n\t}\n\n\tasync commit(writes: Write[], context: Context): Promise<CommitResult> {\n\t\tif (this.state !== \"open\") throw new Error(\"JsonlStorage is closed\");\n\t\tconst result = this.commitQueue.then(() => this.applyCommit(writes, context));\n\t\tthis.commitQueue = result.then(\n\t\t\t() => undefined,\n\t\t\t() => undefined,\n\t\t);\n\t\treturn result;\n\t}\n\n\tprivate async applyCommit(writes: Write[], context: Context): Promise<CommitResult> {\n\t\tif (this.backing.kind === \"v3\" && writes.length !== 0) {\n\t\t\treturn this.upgradeLegacyV3ToV4(this.backing.source, writes, context);\n\t\t}\n\t\tconst prepared = this.storageState.prepareCommit(writes, this.now());\n\t\tif (prepared.writes.length !== 0) {\n\t\t\tfileValue(\n\t\t\t\tawait this.fileSystem.appendFile(this.path, `${serializeJsonlTransaction(prepared.writes)}\\n`, context),\n\t\t\t\t`Failed to append JSONL storage ${this.path}`,\n\t\t\t);\n\t\t}\n\t\tconst stats = this.storageState.applyValidated(prepared.writes);\n\t\treturn { ...prepared.result, stats: this.withImportedUsage(stats) };\n\t}\n\n\t/** Atomically upgrade legacy v3 backing and preserve the first caller write as a v4 transaction. */\n\tprivate async upgradeLegacyV3ToV4(\n\t\tsource: LegacyV3Source,\n\t\tcallerWrites: Write[],\n\t\tcontext: Context,\n\t): Promise<CommitResult> {\n\t\tconst timestamp = this.now();\n\t\tconst prepared = this.storageState.prepareCommit(\n\t\t\t[\n\t\t\t\tinsertUsage({\n\t\t\t\t\tid: uuidv7(timestamp),\n\t\t\t\t\tusage: source.importedUsage,\n\t\t\t\t\tadjustment: true,\n\t\t\t\t\tdetails: { source: \"v3-import\" },\n\t\t\t\t}),\n\t\t\t\t...callerWrites,\n\t\t\t],\n\t\t\ttimestamp,\n\t\t);\n\n\t\tconst nextSeq = prepared.result.firstSeq + prepared.writes.length;\n\t\tconst upgradedHeader = { ...this.header, nextSeq };\n\t\tawait publishJsonl(this.fileSystem, this.path, upgradedHeader, context, async (append) => {\n\t\t\tfor await (const write of source.writes(context)) await append([write]);\n\t\t\tawait append(prepared.writes);\n\t\t});\n\n\t\tconst stats = this.storageState.applyValidated(prepared.writes);\n\t\tthis.backing = { kind: \"v4\" };\n\t\t// The first sequence belongs to the internal usage adjustment; return only caller-write sequences.\n\t\treturn {\n\t\t\t...prepared.result,\n\t\t\tfirstSeq: prepared.result.firstSeq + 1,\n\t\t\tseqs: prepared.result.seqs.slice(1),\n\t\t\tstats,\n\t\t};\n\t}\n\n\tgetEntries(ids: string[], _context: Context): Promise<Map<string, Entry>> {\n\t\tif (this.state !== \"open\") return Promise.reject(new Error(\"JsonlStorage is closed\"));\n\t\treturn Promise.resolve(this.storageState.getEntries(ids));\n\t}\n\n\tgetValue<T>(address: Value<T>, _context: Context): Promise<StoredValue<T> | undefined> {\n\t\tif (this.state !== \"open\") return Promise.reject(new Error(\"JsonlStorage is closed\"));\n\t\treturn Promise.resolve(this.storageState.getValue(address));\n\t}\n\n\tscanValues<T>(prefix: Value<T>, _context: Context): Promise<StoredValue<T>[]> {\n\t\tif (this.state !== \"open\") return Promise.reject(new Error(\"JsonlStorage is closed\"));\n\t\treturn Promise.resolve(this.storageState.scanValues(prefix));\n\t}\n\n\tasync readList<T>(\n\t\taddress: ValueList<T>,\n\t\toptions: ListReadOptions | undefined,\n\t\t_context: Context,\n\t): Promise<ListElement<T>[]> {\n\t\tif (this.state !== \"open\") throw new Error(\"JsonlStorage is closed\");\n\t\treturn this.storageState.readList(address, options);\n\t}\n\n\tasync scanBranch(query: StorageBranchScan, _context: Context): Promise<Entry[]> {\n\t\tif (this.state !== \"open\") throw new Error(\"JsonlStorage is closed\");\n\t\treturn this.storageState.scanBranch(query);\n\t}\n\n\tasync scanBranchStructure(query: StorageBranchScan, _context: Context): Promise<EntryStructure[]> {\n\t\tif (this.state !== \"open\") throw new Error(\"JsonlStorage is closed\");\n\t\treturn this.storageState.scanBranchStructure(query);\n\t}\n\n\tscanEntries(query: EntryScan, _context: Context): Promise<Entry[]> {\n\t\tif (this.state !== \"open\") return Promise.reject(new Error(\"JsonlStorage is closed\"));\n\t\treturn Promise.resolve(this.storageState.scanEntries(query));\n\t}\n\n\tscanUsage(query: UsageScan, _context: Context): Promise<UsageRow[]> {\n\t\tif (this.state !== \"open\") return Promise.reject(new Error(\"JsonlStorage is closed\"));\n\t\treturn Promise.resolve(this.storageState.scanUsage(query));\n\t}\n\n\tgetStats(_context: Context): Promise<SessionStats> {\n\t\tif (this.state !== \"open\") return Promise.reject(new Error(\"JsonlStorage is closed\"));\n\t\treturn Promise.resolve(this.withImportedUsage(this.storageState.getStats()));\n\t}\n\n\tprivate withImportedUsage(stats: SessionStats): SessionStats {\n\t\treturn this.backing.kind === \"v4\" ? stats : { ...stats, usage: this.backing.source.importedUsage };\n\t}\n\n\tisLegacyV3(): boolean {\n\t\treturn this.backing.kind === \"v3\";\n\t}\n\n\t/** Capture the first sequence a later source commit would use. */\n\tcaptureForkNextSeq(_context: Context): Promise<number> {\n\t\tif (this.state !== \"open\") return Promise.reject(new Error(\"JsonlStorage is closed\"));\n\t\tconst result = this.commitQueue.then(() => this.storageState.getNextSeq());\n\t\tthis.commitQueue = result.then(\n\t\t\t() => undefined,\n\t\t\t() => undefined,\n\t\t);\n\t\treturn result;\n\t}\n\n\tclose(_context: Context): Promise<void> {\n\t\tif (this.closePromise !== undefined) return this.closePromise;\n\t\tthis.state = \"closing\";\n\t\tthis.closePromise = this.commitQueue.then(() => {\n\t\t\tthis.state = \"closed\";\n\t\t});\n\t\treturn this.closePromise;\n\t}\n}\n"]}
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
import type { FileSystem } from "../../types.ts";
|
|
2
|
-
import type { SessionCreateOptions, SessionMetadata } from "../types.ts";
|
|
3
|
-
export declare const JSONL_FORMAT_VERSION = 4;
|
|
4
|
-
export declare const JSONL_STORAGE_VERSION = 1;
|
|
5
|
-
export interface JsonlStorageHeader {
|
|
6
|
-
v: typeof JSONL_FORMAT_VERSION;
|
|
7
|
-
kind: "header";
|
|
8
|
-
id: string;
|
|
9
|
-
storageVersion: number;
|
|
10
|
-
createdAt: number;
|
|
11
|
-
cwd: string;
|
|
12
|
-
parentSessionId?: string;
|
|
13
|
-
legacyParentSessionPath?: string;
|
|
14
|
-
/** Sequence high-water mark written by snapshot rewrites. */
|
|
15
|
-
nextSeq?: number;
|
|
16
|
-
}
|
|
17
|
-
export interface JsonlStorageOptions {
|
|
18
|
-
fileSystem: FileSystem;
|
|
19
|
-
path: string;
|
|
20
|
-
now?: () => number;
|
|
21
|
-
}
|
|
22
|
-
export interface JsonlSessionMetadata extends SessionMetadata {
|
|
23
|
-
cwd: string;
|
|
24
|
-
path: string;
|
|
25
|
-
/** Filesystem modification time as milliseconds since Unix epoch. */
|
|
26
|
-
modifiedAt: number;
|
|
27
|
-
}
|
|
28
|
-
export interface JsonlSessionCreateOptions extends SessionCreateOptions {
|
|
29
|
-
cwd: string;
|
|
30
|
-
}
|
|
31
|
-
export interface JsonlSessionListOptions {
|
|
32
|
-
cwd?: string;
|
|
33
|
-
}
|
|
34
|
-
export interface JsonlSessionRepoOptions {
|
|
35
|
-
fileSystem: FileSystem;
|
|
36
|
-
sessionsRoot: string;
|
|
37
|
-
now?: () => number;
|
|
38
|
-
}
|
|
39
|
-
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/harness/session/jsonl/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,KAAK,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEzE,eAAO,MAAM,oBAAoB,IAAI,CAAC;AACtC,eAAO,MAAM,qBAAqB,IAAI,CAAC;AAEvC,MAAM,WAAW,kBAAkB;IAClC,CAAC,EAAE,OAAO,oBAAoB,CAAC;IAC/B,IAAI,EAAE,QAAQ,CAAC;IACf,EAAE,EAAE,MAAM,CAAC;IACX,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,6DAA6D;IAC7D,OAAO,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,mBAAmB;IACnC,UAAU,EAAE,UAAU,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,oBAAqB,SAAQ,eAAe;IAC5D,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,qEAAqE;IACrE,UAAU,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,yBAA0B,SAAQ,oBAAoB;IACtE,GAAG,EAAE,MAAM,CAAC;CACZ;AAED,MAAM,WAAW,uBAAuB;IACvC,GAAG,CAAC,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,uBAAuB;IACvC,UAAU,EAAE,UAAU,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CACnB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/harness/session/jsonl/types.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC;AACtC,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC","sourcesContent":["import type { FileSystem } from \"../../types.ts\";\nimport type { SessionCreateOptions, SessionMetadata } from \"../types.ts\";\n\nexport const JSONL_FORMAT_VERSION = 4;\nexport const JSONL_STORAGE_VERSION = 1;\n\nexport interface JsonlStorageHeader {\n\tv: typeof JSONL_FORMAT_VERSION;\n\tkind: \"header\";\n\tid: string;\n\tstorageVersion: number;\n\tcreatedAt: number;\n\tcwd: string;\n\tparentSessionId?: string;\n\tlegacyParentSessionPath?: string;\n\t/** Sequence high-water mark written by snapshot rewrites. */\n\tnextSeq?: number;\n}\n\nexport interface JsonlStorageOptions {\n\tfileSystem: FileSystem;\n\tpath: string;\n\tnow?: () => number;\n}\n\nexport interface JsonlSessionMetadata extends SessionMetadata {\n\tcwd: string;\n\tpath: string;\n\t/** Filesystem modification time as milliseconds since Unix epoch. */\n\tmodifiedAt: number;\n}\n\nexport interface JsonlSessionCreateOptions extends SessionCreateOptions {\n\tcwd: string;\n}\n\nexport interface JsonlSessionListOptions {\n\tcwd?: string;\n}\n\nexport interface JsonlSessionRepoOptions {\n\tfileSystem: FileSystem;\n\tsessionsRoot: string;\n\tnow?: () => number;\n}\n"]}
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
import type { Context } from "../context.ts";
|
|
2
|
-
import type { CommitResult, Entry, EntryScan, EntryStructure, ForkOptions, Session, SessionCreateOptions, SessionMetadata, SessionRepo, SessionStats, Storage, StorageBranchScan, UsageRow, UsageScan, Write } from "./types.ts";
|
|
3
|
-
import type { ListElement, ListReadOptions, StoredValue, Value, ValueList } from "./values.ts";
|
|
4
|
-
export interface MemoryStorageOptions {
|
|
5
|
-
now?: () => number;
|
|
6
|
-
}
|
|
7
|
-
export interface MemorySessionRepoOptions {
|
|
8
|
-
now?: () => number;
|
|
9
|
-
}
|
|
10
|
-
export declare class MemoryStorage implements Storage {
|
|
11
|
-
private readonly now;
|
|
12
|
-
private storageState;
|
|
13
|
-
private commitQueue;
|
|
14
|
-
private state;
|
|
15
|
-
private closePromise;
|
|
16
|
-
constructor(options?: MemoryStorageOptions);
|
|
17
|
-
commit(writes: Write[], _context: Context): Promise<CommitResult>;
|
|
18
|
-
getEntries(ids: string[], _context: Context): Promise<Map<string, Entry>>;
|
|
19
|
-
getValue<T>(address: Value<T>, _context: Context): Promise<StoredValue<T> | undefined>;
|
|
20
|
-
scanValues<T>(prefix: Value<T>, _context: Context): Promise<StoredValue<T>[]>;
|
|
21
|
-
readList<T>(address: ValueList<T>, options: ListReadOptions | undefined, _context: Context): Promise<ListElement<T>[]>;
|
|
22
|
-
scanBranch(query: StorageBranchScan, _context: Context): Promise<Entry[]>;
|
|
23
|
-
scanBranchStructure(query: StorageBranchScan, _context: Context): Promise<EntryStructure[]>;
|
|
24
|
-
scanEntries(query: EntryScan, _context: Context): Promise<Entry[]>;
|
|
25
|
-
scanUsage(query: UsageScan, _context: Context): Promise<UsageRow[]>;
|
|
26
|
-
getStats(_context: Context): Promise<SessionStats>;
|
|
27
|
-
/** Construct a destination storage at one serialized boundary between source commits. */
|
|
28
|
-
fork(options: ForkOptions): Promise<MemoryStorage>;
|
|
29
|
-
close(_context: Context): Promise<void>;
|
|
30
|
-
}
|
|
31
|
-
export declare class MemorySessionRepo implements SessionRepo {
|
|
32
|
-
private readonly now;
|
|
33
|
-
private readonly sessions;
|
|
34
|
-
private readonly pendingIds;
|
|
35
|
-
private closed;
|
|
36
|
-
private closePromise;
|
|
37
|
-
constructor(options?: MemorySessionRepoOptions);
|
|
38
|
-
create(options: SessionCreateOptions, context: Context): Promise<Session>;
|
|
39
|
-
open(metadata: SessionMetadata, _context: Context): Promise<Session>;
|
|
40
|
-
list(_options: undefined, _context: Context): Promise<SessionMetadata[]>;
|
|
41
|
-
delete(metadata: SessionMetadata, context: Context): Promise<void>;
|
|
42
|
-
fork(source: SessionMetadata, options: ForkOptions, _context: Context): Promise<Session>;
|
|
43
|
-
close(context: Context): Promise<void>;
|
|
44
|
-
private openRecord;
|
|
45
|
-
private reserveId;
|
|
46
|
-
private assertOpen;
|
|
47
|
-
}
|
|
48
|
-
//# sourceMappingURL=memory.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../../src/harness/session/memory.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,369 +0,0 @@
|
|
|
1
|
-
import { uuidv7 } from "@draht/ai/utils/uuid";
|
|
2
|
-
import { InMemoryStorageState } from "./in-memory-storage-state.js";
|
|
3
|
-
import { StorageBackedSession } from "./session.js";
|
|
4
|
-
export class MemoryStorage {
|
|
5
|
-
now;
|
|
6
|
-
storageState = new InMemoryStorageState();
|
|
7
|
-
commitQueue = Promise.resolve();
|
|
8
|
-
state = "open";
|
|
9
|
-
closePromise;
|
|
10
|
-
constructor(options = {}) {
|
|
11
|
-
this.now = options.now ?? Date.now;
|
|
12
|
-
}
|
|
13
|
-
async commit(writes, _context) {
|
|
14
|
-
if (this.state !== "open")
|
|
15
|
-
throw new Error("MemoryStorage is closed");
|
|
16
|
-
const result = this.commitQueue.then(() => {
|
|
17
|
-
const prepared = this.storageState.prepareCommit(writes, this.now());
|
|
18
|
-
const stats = this.storageState.applyValidated(prepared.writes);
|
|
19
|
-
return { ...prepared.result, stats };
|
|
20
|
-
});
|
|
21
|
-
this.commitQueue = result.then(() => undefined, () => undefined);
|
|
22
|
-
return result;
|
|
23
|
-
}
|
|
24
|
-
getEntries(ids, _context) {
|
|
25
|
-
if (this.state !== "open")
|
|
26
|
-
return Promise.reject(new Error("MemoryStorage is closed"));
|
|
27
|
-
return Promise.resolve(this.storageState.getEntries(ids));
|
|
28
|
-
}
|
|
29
|
-
getValue(address, _context) {
|
|
30
|
-
if (this.state !== "open")
|
|
31
|
-
return Promise.reject(new Error("MemoryStorage is closed"));
|
|
32
|
-
return Promise.resolve(this.storageState.getValue(address));
|
|
33
|
-
}
|
|
34
|
-
scanValues(prefix, _context) {
|
|
35
|
-
if (this.state !== "open")
|
|
36
|
-
return Promise.reject(new Error("MemoryStorage is closed"));
|
|
37
|
-
return Promise.resolve(this.storageState.scanValues(prefix));
|
|
38
|
-
}
|
|
39
|
-
async readList(address, options, _context) {
|
|
40
|
-
if (this.state !== "open")
|
|
41
|
-
throw new Error("MemoryStorage is closed");
|
|
42
|
-
return this.storageState.readList(address, options);
|
|
43
|
-
}
|
|
44
|
-
async scanBranch(query, _context) {
|
|
45
|
-
if (this.state !== "open")
|
|
46
|
-
throw new Error("MemoryStorage is closed");
|
|
47
|
-
return this.storageState.scanBranch(query);
|
|
48
|
-
}
|
|
49
|
-
async scanBranchStructure(query, _context) {
|
|
50
|
-
if (this.state !== "open")
|
|
51
|
-
throw new Error("MemoryStorage is closed");
|
|
52
|
-
return this.storageState.scanBranchStructure(query);
|
|
53
|
-
}
|
|
54
|
-
scanEntries(query, _context) {
|
|
55
|
-
if (this.state !== "open")
|
|
56
|
-
return Promise.reject(new Error("MemoryStorage is closed"));
|
|
57
|
-
return Promise.resolve(this.storageState.scanEntries(query));
|
|
58
|
-
}
|
|
59
|
-
scanUsage(query, _context) {
|
|
60
|
-
if (this.state !== "open")
|
|
61
|
-
return Promise.reject(new Error("MemoryStorage is closed"));
|
|
62
|
-
return Promise.resolve(this.storageState.scanUsage(query));
|
|
63
|
-
}
|
|
64
|
-
getStats(_context) {
|
|
65
|
-
if (this.state !== "open")
|
|
66
|
-
return Promise.reject(new Error("MemoryStorage is closed"));
|
|
67
|
-
return Promise.resolve(this.storageState.getStats());
|
|
68
|
-
}
|
|
69
|
-
/** Construct a destination storage at one serialized boundary between source commits. */
|
|
70
|
-
fork(options) {
|
|
71
|
-
if (this.state !== "open")
|
|
72
|
-
return Promise.reject(new Error("MemoryStorage is closed"));
|
|
73
|
-
const result = this.commitQueue.then(() => {
|
|
74
|
-
const destination = new MemoryStorage({ now: this.now });
|
|
75
|
-
destination.storageState = this.storageState.createFork(options);
|
|
76
|
-
return destination;
|
|
77
|
-
});
|
|
78
|
-
this.commitQueue = result.then(() => undefined, () => undefined);
|
|
79
|
-
return result;
|
|
80
|
-
}
|
|
81
|
-
close(_context) {
|
|
82
|
-
if (this.closePromise !== undefined)
|
|
83
|
-
return this.closePromise;
|
|
84
|
-
this.state = "closing";
|
|
85
|
-
this.closePromise = this.commitQueue.then(() => {
|
|
86
|
-
this.state = "closed";
|
|
87
|
-
});
|
|
88
|
-
return this.closePromise;
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
const MEMORY_STORAGE_VERSION = 1;
|
|
92
|
-
class MemorySessionFacade {
|
|
93
|
-
metadata;
|
|
94
|
-
idGenerator;
|
|
95
|
-
session;
|
|
96
|
-
onClose;
|
|
97
|
-
admitted = new Set();
|
|
98
|
-
closedError = new Error("Session is closed");
|
|
99
|
-
state = "open";
|
|
100
|
-
closePromise;
|
|
101
|
-
constructor(session, onClose) {
|
|
102
|
-
this.session = session;
|
|
103
|
-
this.metadata = session.metadata;
|
|
104
|
-
this.idGenerator = session.idGenerator;
|
|
105
|
-
this.onClose = onClose;
|
|
106
|
-
}
|
|
107
|
-
async beginMutation(context) {
|
|
108
|
-
let resolveFinished;
|
|
109
|
-
const finished = new Promise((resolve) => {
|
|
110
|
-
resolveFinished = resolve;
|
|
111
|
-
});
|
|
112
|
-
this.admitted.add(finished);
|
|
113
|
-
let source;
|
|
114
|
-
try {
|
|
115
|
-
source = await this.admit(() => this.session.beginMutation(context));
|
|
116
|
-
}
|
|
117
|
-
catch (error) {
|
|
118
|
-
this.admitted.delete(finished);
|
|
119
|
-
resolveFinished();
|
|
120
|
-
throw error;
|
|
121
|
-
}
|
|
122
|
-
if (this.state !== "open") {
|
|
123
|
-
await source.end(context);
|
|
124
|
-
this.admitted.delete(finished);
|
|
125
|
-
resolveFinished();
|
|
126
|
-
throw this.closedError;
|
|
127
|
-
}
|
|
128
|
-
let ended = false;
|
|
129
|
-
return {
|
|
130
|
-
commit: (writes, commitContext) => source.commit(writes, commitContext),
|
|
131
|
-
end: async (endContext) => {
|
|
132
|
-
try {
|
|
133
|
-
await source.end(endContext);
|
|
134
|
-
}
|
|
135
|
-
finally {
|
|
136
|
-
if (!ended) {
|
|
137
|
-
ended = true;
|
|
138
|
-
this.admitted.delete(finished);
|
|
139
|
-
resolveFinished();
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
},
|
|
143
|
-
getEntries: (ids, readContext) => source.getEntries(ids, readContext),
|
|
144
|
-
getStats: (readContext) => source.getStats(readContext),
|
|
145
|
-
getValue: (address, readContext) => source.getValue(address, readContext),
|
|
146
|
-
scanValues: (prefix, readContext) => source.scanValues(prefix, readContext),
|
|
147
|
-
readList: (address, options, readContext) => source.readList(address, options, readContext),
|
|
148
|
-
scanBranch: (query, readContext) => source.scanBranch(query, readContext),
|
|
149
|
-
};
|
|
150
|
-
}
|
|
151
|
-
mutate(mutation, context) {
|
|
152
|
-
return this.admit(() => this.session.mutate((mutator, mutationContext) => {
|
|
153
|
-
if (this.state !== "open")
|
|
154
|
-
throw this.closedError;
|
|
155
|
-
return mutation(mutator, mutationContext);
|
|
156
|
-
}, context));
|
|
157
|
-
}
|
|
158
|
-
getEntries(ids, context) {
|
|
159
|
-
return this.admit(() => this.session.getEntries(ids, context));
|
|
160
|
-
}
|
|
161
|
-
getEntry(id, context) {
|
|
162
|
-
return this.admit(() => this.session.getEntry(id, context));
|
|
163
|
-
}
|
|
164
|
-
getValue(address, context) {
|
|
165
|
-
return this.admit(() => this.session.getValue(address, context));
|
|
166
|
-
}
|
|
167
|
-
scanValues(prefix, context) {
|
|
168
|
-
return this.admit(() => this.session.scanValues(prefix, context));
|
|
169
|
-
}
|
|
170
|
-
readList(address, options, context) {
|
|
171
|
-
return this.admit(() => this.session.readList(address, options, context));
|
|
172
|
-
}
|
|
173
|
-
scanBranch(query, context) {
|
|
174
|
-
return this.admit(() => this.session.scanBranch(query, context));
|
|
175
|
-
}
|
|
176
|
-
getStats(context) {
|
|
177
|
-
return this.admit(() => this.session.getStats(context));
|
|
178
|
-
}
|
|
179
|
-
getName(context) {
|
|
180
|
-
return this.admit(() => this.session.getName(context));
|
|
181
|
-
}
|
|
182
|
-
getLabel(targetId, context) {
|
|
183
|
-
return this.admit(() => this.session.getLabel(targetId, context));
|
|
184
|
-
}
|
|
185
|
-
findEntries(query, context) {
|
|
186
|
-
return this.admit(() => this.session.findEntries(query, context));
|
|
187
|
-
}
|
|
188
|
-
findEntry(query, context) {
|
|
189
|
-
return this.admit(() => this.session.findEntry(query, context));
|
|
190
|
-
}
|
|
191
|
-
async branch(name, context) {
|
|
192
|
-
const branch = await this.admit(() => this.session.branch(name, context));
|
|
193
|
-
return branch === undefined ? undefined : this.wrapBranch(branch);
|
|
194
|
-
}
|
|
195
|
-
async createBranch(name, at, context) {
|
|
196
|
-
return this.wrapBranch(await this.admit(() => this.session.createBranch(name, at, context)));
|
|
197
|
-
}
|
|
198
|
-
setValue(address, next, context) {
|
|
199
|
-
return this.admit(() => this.session.setValue(address, next, context));
|
|
200
|
-
}
|
|
201
|
-
deleteValue(address, context) {
|
|
202
|
-
return this.admit(() => this.session.deleteValue(address, context));
|
|
203
|
-
}
|
|
204
|
-
appendList(address, element, context) {
|
|
205
|
-
return this.admit(() => this.session.appendList(address, element, context));
|
|
206
|
-
}
|
|
207
|
-
deleteList(address, context) {
|
|
208
|
-
return this.admit(() => this.session.deleteList(address, context));
|
|
209
|
-
}
|
|
210
|
-
setName(name, context) {
|
|
211
|
-
return this.admit(() => this.session.setName(name, context));
|
|
212
|
-
}
|
|
213
|
-
setLabel(targetId, label, context) {
|
|
214
|
-
return this.admit(() => this.session.setLabel(targetId, label, context));
|
|
215
|
-
}
|
|
216
|
-
close(_context) {
|
|
217
|
-
if (this.closePromise !== undefined)
|
|
218
|
-
return this.closePromise;
|
|
219
|
-
this.state = "closing";
|
|
220
|
-
this.closePromise = Promise.allSettled([...this.admitted]).then(() => {
|
|
221
|
-
this.state = "closed";
|
|
222
|
-
this.onClose();
|
|
223
|
-
});
|
|
224
|
-
return this.closePromise;
|
|
225
|
-
}
|
|
226
|
-
wrapBranch(branch) {
|
|
227
|
-
return {
|
|
228
|
-
name: branch.name,
|
|
229
|
-
getTipId: (context) => this.admit(() => branch.getTipId(context)),
|
|
230
|
-
findEntries: (query, context) => this.admit(() => branch.findEntries(query, context)),
|
|
231
|
-
findEntry: (query, context) => this.admit(() => branch.findEntry(query, context)),
|
|
232
|
-
appendMessage: (message, context) => this.admit(() => branch.appendMessage(message, context)),
|
|
233
|
-
appendCustomEntry: (customType, data, context) => this.admit(() => branch.appendCustomEntry(customType, data, context)),
|
|
234
|
-
};
|
|
235
|
-
}
|
|
236
|
-
admit(operation) {
|
|
237
|
-
if (this.state !== "open")
|
|
238
|
-
return Promise.reject(this.closedError);
|
|
239
|
-
let result;
|
|
240
|
-
try {
|
|
241
|
-
result = operation();
|
|
242
|
-
}
|
|
243
|
-
catch (error) {
|
|
244
|
-
result = Promise.reject(error);
|
|
245
|
-
}
|
|
246
|
-
this.admitted.add(result);
|
|
247
|
-
void result.then(() => this.admitted.delete(result), () => this.admitted.delete(result));
|
|
248
|
-
return result;
|
|
249
|
-
}
|
|
250
|
-
}
|
|
251
|
-
export class MemorySessionRepo {
|
|
252
|
-
now;
|
|
253
|
-
sessions = new Map();
|
|
254
|
-
pendingIds = new Set();
|
|
255
|
-
closed = false;
|
|
256
|
-
closePromise;
|
|
257
|
-
constructor(options = {}) {
|
|
258
|
-
this.now = options.now ?? Date.now;
|
|
259
|
-
}
|
|
260
|
-
async create(options, context) {
|
|
261
|
-
this.assertOpen();
|
|
262
|
-
const createdAt = this.now();
|
|
263
|
-
const id = options.id ?? uuidv7(createdAt);
|
|
264
|
-
this.reserveId(id);
|
|
265
|
-
const metadata = {
|
|
266
|
-
id,
|
|
267
|
-
createdAt,
|
|
268
|
-
storageVersion: MEMORY_STORAGE_VERSION,
|
|
269
|
-
...(options.parentSessionId === undefined ? {} : { parentSessionId: options.parentSessionId }),
|
|
270
|
-
};
|
|
271
|
-
const storage = new MemoryStorage({ now: this.now });
|
|
272
|
-
const session = new StorageBackedSession(metadata, storage);
|
|
273
|
-
try {
|
|
274
|
-
const record = {
|
|
275
|
-
metadata,
|
|
276
|
-
storage,
|
|
277
|
-
session,
|
|
278
|
-
open: true,
|
|
279
|
-
};
|
|
280
|
-
this.sessions.set(id, record);
|
|
281
|
-
return this.openRecord(record);
|
|
282
|
-
}
|
|
283
|
-
catch (error) {
|
|
284
|
-
await session.close(context);
|
|
285
|
-
throw error;
|
|
286
|
-
}
|
|
287
|
-
finally {
|
|
288
|
-
this.pendingIds.delete(id);
|
|
289
|
-
}
|
|
290
|
-
}
|
|
291
|
-
open(metadata, _context) {
|
|
292
|
-
// Memory sessions are always created at the current storage version, so
|
|
293
|
-
// persistent-backend version gating does not apply here.
|
|
294
|
-
this.assertOpen();
|
|
295
|
-
const record = this.sessions.get(metadata.id);
|
|
296
|
-
if (record === undefined)
|
|
297
|
-
return Promise.reject(new Error(`Unknown session: ${metadata.id}`));
|
|
298
|
-
if (record.open)
|
|
299
|
-
return Promise.reject(new Error(`Session is already open: ${metadata.id}`));
|
|
300
|
-
record.open = true;
|
|
301
|
-
return Promise.resolve(this.openRecord(record));
|
|
302
|
-
}
|
|
303
|
-
list(_options, _context) {
|
|
304
|
-
this.assertOpen();
|
|
305
|
-
return Promise.resolve([...this.sessions.values()].map(({ metadata }) => metadata));
|
|
306
|
-
}
|
|
307
|
-
async delete(metadata, context) {
|
|
308
|
-
this.assertOpen();
|
|
309
|
-
const record = this.sessions.get(metadata.id);
|
|
310
|
-
if (record === undefined)
|
|
311
|
-
throw new Error(`Unknown session: ${metadata.id}`);
|
|
312
|
-
if (record.open)
|
|
313
|
-
throw new Error(`Session is open: ${metadata.id}`);
|
|
314
|
-
await record.session.close(context);
|
|
315
|
-
this.sessions.delete(metadata.id);
|
|
316
|
-
}
|
|
317
|
-
async fork(source, options, _context) {
|
|
318
|
-
this.assertOpen();
|
|
319
|
-
const sourceRecord = this.sessions.get(source.id);
|
|
320
|
-
if (sourceRecord === undefined)
|
|
321
|
-
throw new Error(`Unknown session: ${source.id}`);
|
|
322
|
-
const createdAt = this.now();
|
|
323
|
-
const id = options.id ?? uuidv7(createdAt);
|
|
324
|
-
this.reserveId(id);
|
|
325
|
-
try {
|
|
326
|
-
const storage = await sourceRecord.storage.fork(options);
|
|
327
|
-
const metadata = {
|
|
328
|
-
id,
|
|
329
|
-
createdAt,
|
|
330
|
-
storageVersion: MEMORY_STORAGE_VERSION,
|
|
331
|
-
parentSessionId: sourceRecord.metadata.id,
|
|
332
|
-
};
|
|
333
|
-
const session = new StorageBackedSession(metadata, storage);
|
|
334
|
-
const record = {
|
|
335
|
-
metadata,
|
|
336
|
-
storage,
|
|
337
|
-
session,
|
|
338
|
-
open: true,
|
|
339
|
-
};
|
|
340
|
-
this.sessions.set(id, record);
|
|
341
|
-
return this.openRecord(record);
|
|
342
|
-
}
|
|
343
|
-
finally {
|
|
344
|
-
this.pendingIds.delete(id);
|
|
345
|
-
}
|
|
346
|
-
}
|
|
347
|
-
close(context) {
|
|
348
|
-
if (this.closePromise !== undefined)
|
|
349
|
-
return this.closePromise;
|
|
350
|
-
this.closed = true;
|
|
351
|
-
this.closePromise = Promise.all([...this.sessions.values()].map(({ session }) => session.close(context))).then(() => undefined);
|
|
352
|
-
return this.closePromise;
|
|
353
|
-
}
|
|
354
|
-
openRecord(record) {
|
|
355
|
-
return new MemorySessionFacade(record.session, () => {
|
|
356
|
-
record.open = false;
|
|
357
|
-
});
|
|
358
|
-
}
|
|
359
|
-
reserveId(id) {
|
|
360
|
-
if (this.sessions.has(id) || this.pendingIds.has(id))
|
|
361
|
-
throw new Error(`Session already exists: ${id}`);
|
|
362
|
-
this.pendingIds.add(id);
|
|
363
|
-
}
|
|
364
|
-
assertOpen() {
|
|
365
|
-
if (this.closed)
|
|
366
|
-
throw new Error("MemorySessionRepo is closed");
|
|
367
|
-
}
|
|
368
|
-
}
|
|
369
|
-
//# sourceMappingURL=memory.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"memory.js","sourceRoot":"","sources":["../../../src/harness/session/memory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAE9C,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAiCpD,MAAM,OAAO,aAAa;IACR,GAAG,CAAe;IAC3B,YAAY,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC1C,WAAW,GAAkB,OAAO,CAAC,OAAO,EAAE,CAAC;IAC/C,KAAK,GAAkC,MAAM,CAAC;IAC9C,YAAY,CAA4B;IAEhD,YAAY,OAAO,GAAyB,EAAE;QAC7C,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC;IACpC,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,MAAe,EAAE,QAAiB;QAC9C,IAAI,IAAI,CAAC,KAAK,KAAK,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;QACtE,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,EAAE;YACzC,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;YACrE,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YAChE,OAAO,EAAE,GAAG,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC;QACtC,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,IAAI,CAC7B,GAAG,EAAE,CAAC,SAAS,EACf,GAAG,EAAE,CAAC,SAAS,CACf,CAAC;QACF,OAAO,MAAM,CAAC;IACf,CAAC;IAED,UAAU,CAAC,GAAa,EAAE,QAAiB;QAC1C,IAAI,IAAI,CAAC,KAAK,KAAK,MAAM;YAAE,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC,CAAC;QACvF,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3D,CAAC;IAED,QAAQ,CAAI,OAAiB,EAAE,QAAiB;QAC/C,IAAI,IAAI,CAAC,KAAK,KAAK,MAAM;YAAE,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC,CAAC;QACvF,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;IAC7D,CAAC;IAED,UAAU,CAAI,MAAgB,EAAE,QAAiB;QAChD,IAAI,IAAI,CAAC,KAAK,KAAK,MAAM;YAAE,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC,CAAC;QACvF,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;IAC9D,CAAC;IAED,KAAK,CAAC,QAAQ,CACb,OAAqB,EACrB,OAAoC,EACpC,QAAiB;QAEjB,IAAI,IAAI,CAAC,KAAK,KAAK,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;QACtE,OAAO,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACrD,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,KAAwB,EAAE,QAAiB;QAC3D,IAAI,IAAI,CAAC,KAAK,KAAK,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;QACtE,OAAO,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IAC5C,CAAC;IAED,KAAK,CAAC,mBAAmB,CAAC,KAAwB,EAAE,QAAiB;QACpE,IAAI,IAAI,CAAC,KAAK,KAAK,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;QACtE,OAAO,IAAI,CAAC,YAAY,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;IACrD,CAAC;IAED,WAAW,CAAC,KAAgB,EAAE,QAAiB;QAC9C,IAAI,IAAI,CAAC,KAAK,KAAK,MAAM;YAAE,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC,CAAC;QACvF,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;IAC9D,CAAC;IAED,SAAS,CAAC,KAAgB,EAAE,QAAiB;QAC5C,IAAI,IAAI,CAAC,KAAK,KAAK,MAAM;YAAE,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC,CAAC;QACvF,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;IAC5D,CAAC;IAED,QAAQ,CAAC,QAAiB;QACzB,IAAI,IAAI,CAAC,KAAK,KAAK,MAAM;YAAE,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC,CAAC;QACvF,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC,CAAC;IACtD,CAAC;IAED,yFAAyF;IACzF,IAAI,CAAC,OAAoB;QACxB,IAAI,IAAI,CAAC,KAAK,KAAK,MAAM;YAAE,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC,CAAC;QACvF,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,EAAE;YACzC,MAAM,WAAW,GAAG,IAAI,aAAa,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;YACzD,WAAW,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;YACjE,OAAO,WAAW,CAAC;QACpB,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,IAAI,CAC7B,GAAG,EAAE,CAAC,SAAS,EACf,GAAG,EAAE,CAAC,SAAS,CACf,CAAC;QACF,OAAO,MAAM,CAAC;IACf,CAAC;IAED,KAAK,CAAC,QAAiB;QACtB,IAAI,IAAI,CAAC,YAAY,KAAK,SAAS;YAAE,OAAO,IAAI,CAAC,YAAY,CAAC;QAC9D,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;QACvB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,EAAE;YAC9C,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC;QACvB,CAAC,CAAC,CAAC;QACH,OAAO,IAAI,CAAC,YAAY,CAAC;IAC1B,CAAC;CACD;AAED,MAAM,sBAAsB,GAAG,CAAC,CAAC;AASjC,MAAM,mBAAmB;IACf,QAAQ,CAAkB;IAC1B,WAAW,CAAc;IACjB,OAAO,CAAuB;IAC9B,OAAO,CAAa;IACpB,QAAQ,GAAG,IAAI,GAAG,EAAoB,CAAC;IACvC,WAAW,GAAG,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;IACtD,KAAK,GAAkC,MAAM,CAAC;IAC9C,YAAY,CAA4B;IAEhD,YAAY,OAA6B,EAAE,OAAmB;QAC7D,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;QACjC,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;QACvC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACxB,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,OAAgB;QACnC,IAAI,eAA4B,CAAC;QACjC,MAAM,QAAQ,GAAG,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;YAC9C,eAAe,GAAG,OAAO,CAAC;QAC3B,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC5B,IAAI,MAAuB,CAAC;QAC5B,IAAI,CAAC;YACJ,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC;QACtE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC/B,eAAe,EAAE,CAAC;YAClB,MAAM,KAAK,CAAC;QACb,CAAC;QACD,IAAI,IAAI,CAAC,KAAK,KAAK,MAAM,EAAE,CAAC;YAC3B,MAAM,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAC1B,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC/B,eAAe,EAAE,CAAC;YAClB,MAAM,IAAI,CAAC,WAAW,CAAC;QACxB,CAAC;QACD,IAAI,KAAK,GAAG,KAAK,CAAC;QAClB,OAAO;YACN,MAAM,EAAE,CAAC,MAAM,EAAE,aAAa,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC;YACvE,GAAG,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE;gBACzB,IAAI,CAAC;oBACJ,MAAM,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;gBAC9B,CAAC;wBAAS,CAAC;oBACV,IAAI,CAAC,KAAK,EAAE,CAAC;wBACZ,KAAK,GAAG,IAAI,CAAC;wBACb,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;wBAC/B,eAAe,EAAE,CAAC;oBACnB,CAAC;gBACF,CAAC;YACF,CAAC;YACD,UAAU,EAAE,CAAC,GAAG,EAAE,WAAW,EAAE,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,WAAW,CAAC;YACrE,QAAQ,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC;YACvD,QAAQ,EAAE,CAAC,OAAO,EAAE,WAAW,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC;YACzE,UAAU,EAAE,CAAC,MAAM,EAAE,WAAW,EAAE,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,WAAW,CAAC;YAC3E,QAAQ,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,EAAE,WAAW,CAAC;YAC3F,UAAU,EAAE,CAAC,KAAK,EAAE,WAAW,EAAE,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,WAAW,CAAC;SACzE,CAAC;IACH,CAAC;IAED,MAAM,CAAI,QAAoC,EAAE,OAAgB;QAC/D,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CACtB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,eAAe,EAAE,EAAE;YAChD,IAAI,IAAI,CAAC,KAAK,KAAK,MAAM;gBAAE,MAAM,IAAI,CAAC,WAAW,CAAC;YAClD,OAAO,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;QAC3C,CAAC,EAAE,OAAO,CAAC,CACX,CAAC;IACH,CAAC;IAED,UAAU,CAAC,GAAa,EAAE,OAAgB;QACzC,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC;IAChE,CAAC;IAED,QAAQ,CAAC,EAAU,EAAE,OAAgB;QACpC,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC;IAC7D,CAAC;IAED,QAAQ,CAAI,OAAiB,EAAE,OAAgB;QAC9C,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;IAClE,CAAC;IAED,UAAU,CAAI,MAAgB,EAAE,OAAgB;QAC/C,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACnE,CAAC;IAED,QAAQ,CACP,OAAqB,EACrB,OAAoC,EACpC,OAAgB;QAEhB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;IAC3E,CAAC;IAED,UAAU,CAAC,KAAwB,EAAE,OAAgB;QACpD,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;IAClE,CAAC;IAED,QAAQ,CAAC,OAAgB;QACxB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;IACzD,CAAC;IAED,OAAO,CAAC,OAAgB;QACvB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;IACxD,CAAC;IAED,QAAQ,CAAC,QAAgB,EAAE,OAAgB;QAC1C,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;IACnE,CAAC;IAED,WAAW,CAAC,KAA6B,EAAE,OAAgB;QAC1D,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;IACnE,CAAC;IAED,SAAS,CAAC,KAA6B,EAAE,OAAgB;QACxD,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;IACjE,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,IAAY,EAAE,OAAgB;QAC1C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;QAC1E,OAAO,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;IACnE,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,IAAY,EAAE,EAAiB,EAAE,OAAgB;QACnE,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IAC9F,CAAC;IAED,QAAQ,CAAI,OAAiB,EAAE,IAAgB,EAAE,OAAgB;QAChE,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;IACxE,CAAC;IAED,WAAW,CAAI,OAAiB,EAAE,OAAgB;QACjD,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;IACrE,CAAC;IAED,UAAU,CAAI,OAAqB,EAAE,OAAmB,EAAE,OAAgB;QACzE,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;IAC7E,CAAC;IAED,UAAU,CAAI,OAAqB,EAAE,OAAgB;QACpD,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;IACpE,CAAC;IAED,OAAO,CAAC,IAAwB,EAAE,OAAgB;QACjD,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;IAC9D,CAAC;IAED,QAAQ,CAAC,QAAgB,EAAE,KAAyB,EAAE,OAAgB;QACrE,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;IAC1E,CAAC;IAED,KAAK,CAAC,QAAiB;QACtB,IAAI,IAAI,CAAC,YAAY,KAAK,SAAS;YAAE,OAAO,IAAI,CAAC,YAAY,CAAC;QAC9D,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;QACvB,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE;YACpE,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC;YACtB,IAAI,CAAC,OAAO,EAAE,CAAC;QAChB,CAAC,CAAC,CAAC;QACH,OAAO,IAAI,CAAC,YAAY,CAAC;IAC1B,CAAC;IAEO,UAAU,CAAC,MAAc;QAChC,OAAO;YACN,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,QAAQ,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YACjE,WAAW,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;YACrF,SAAS,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;YACjF,aAAa,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC7F,iBAAiB,EAAE,CAAC,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,CAChD,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,iBAAiB,CAAC,UAAU,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;SACtE,CAAC;IACH,CAAC;IAEO,KAAK,CAAI,SAA2B;QAC3C,IAAI,IAAI,CAAC,KAAK,KAAK,MAAM;YAAE,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACnE,IAAI,MAAkB,CAAC;QACvB,IAAI,CAAC;YACJ,MAAM,GAAG,SAAS,EAAE,CAAC;QACtB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAChC,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC1B,KAAK,MAAM,CAAC,IAAI,CACf,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,EAClC,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAClC,CAAC;QACF,OAAO,MAAM,CAAC;IACf,CAAC;CACD;AAED,MAAM,OAAO,iBAAiB;IACZ,GAAG,CAAe;IAClB,QAAQ,GAAG,IAAI,GAAG,EAA+B,CAAC;IAClD,UAAU,GAAG,IAAI,GAAG,EAAU,CAAC;IACxC,MAAM,GAAG,KAAK,CAAC;IACf,YAAY,CAA4B;IAEhD,YAAY,OAAO,GAA6B,EAAE;QACjD,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC;IACpC,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,OAA6B,EAAE,OAAgB;QAC3D,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,MAAM,EAAE,GAAG,OAAO,CAAC,EAAE,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC;QAC3C,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QACnB,MAAM,QAAQ,GAAoB;YACjC,EAAE;YACF,SAAS;YACT,cAAc,EAAE,sBAAsB;YACtC,GAAG,CAAC,OAAO,CAAC,eAAe,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,OAAO,CAAC,eAAe,EAAE,CAAC;SAC9F,CAAC;QACF,MAAM,OAAO,GAAG,IAAI,aAAa,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;QACrD,MAAM,OAAO,GAAG,IAAI,oBAAoB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC5D,IAAI,CAAC;YACJ,MAAM,MAAM,GAAwB;gBACnC,QAAQ;gBACR,OAAO;gBACP,OAAO;gBACP,IAAI,EAAE,IAAI;aACV,CAAC;YACF,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;YAC9B,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QAChC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,MAAM,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC7B,MAAM,KAAK,CAAC;QACb,CAAC;gBAAS,CAAC;YACV,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC5B,CAAC;IACF,CAAC;IAED,IAAI,CAAC,QAAyB,EAAE,QAAiB;QAChD,wEAAwE;QACxE,yDAAyD;QACzD,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QAC9C,IAAI,MAAM,KAAK,SAAS;YAAE,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,oBAAoB,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QAC9F,IAAI,MAAM,CAAC,IAAI;YAAE,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,4BAA4B,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QAC7F,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC;QACnB,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;IACjD,CAAC;IAED,IAAI,CAAC,QAAmB,EAAE,QAAiB;QAC1C,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,OAAO,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IACrF,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,QAAyB,EAAE,OAAgB;QACvD,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QAC9C,IAAI,MAAM,KAAK,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,oBAAoB,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC;QAC7E,IAAI,MAAM,CAAC,IAAI;YAAE,MAAM,IAAI,KAAK,CAAC,oBAAoB,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC;QACpE,MAAM,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACpC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IACnC,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,MAAuB,EAAE,OAAoB,EAAE,QAAiB;QAC1E,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAClD,IAAI,YAAY,KAAK,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,oBAAoB,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;QACjF,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,MAAM,EAAE,GAAG,OAAO,CAAC,EAAE,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC;QAC3C,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QAEnB,IAAI,CAAC;YACJ,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACzD,MAAM,QAAQ,GAAoB;gBACjC,EAAE;gBACF,SAAS;gBACT,cAAc,EAAE,sBAAsB;gBACtC,eAAe,EAAE,YAAY,CAAC,QAAQ,CAAC,EAAE;aACzC,CAAC;YACF,MAAM,OAAO,GAAG,IAAI,oBAAoB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YAC5D,MAAM,MAAM,GAAwB;gBACnC,QAAQ;gBACR,OAAO;gBACP,OAAO;gBACP,IAAI,EAAE,IAAI;aACV,CAAC;YACF,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;YAC9B,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QAChC,CAAC;gBAAS,CAAC;YACV,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC5B,CAAC;IACF,CAAC;IAED,KAAK,CAAC,OAAgB;QACrB,IAAI,IAAI,CAAC,YAAY,KAAK,SAAS;YAAE,OAAO,IAAI,CAAC,YAAY,CAAC;QAC9D,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACnB,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAC7G,GAAG,EAAE,CAAC,SAAS,CACf,CAAC;QACF,OAAO,IAAI,CAAC,YAAY,CAAC;IAC1B,CAAC;IAEO,UAAU,CAAC,MAA2B;QAC7C,OAAO,IAAI,mBAAmB,CAAC,MAAM,CAAC,OAAO,EAAE,GAAG,EAAE;YACnD,MAAM,CAAC,IAAI,GAAG,KAAK,CAAC;QACrB,CAAC,CAAC,CAAC;IACJ,CAAC;IAEO,SAAS,CAAC,EAAU;QAC3B,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,2BAA2B,EAAE,EAAE,CAAC,CAAC;QACvG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACzB,CAAC;IAEO,UAAU;QACjB,IAAI,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;IACjE,CAAC;CACD","sourcesContent":["import { uuidv7 } from \"@draht/ai/utils/uuid\";\nimport type { Context } from \"../context.ts\";\nimport { InMemoryStorageState } from \"./in-memory-storage-state.ts\";\nimport { StorageBackedSession } from \"./session.ts\";\nimport type {\n\tBranch,\n\tCommitResult,\n\tEntry,\n\tEntryQuery,\n\tEntryScan,\n\tEntryStructure,\n\tForkOptions,\n\tIdGenerator,\n\tSession,\n\tSessionCreateOptions,\n\tSessionMetadata,\n\tSessionMutation,\n\tSessionMutationCallback,\n\tSessionRepo,\n\tSessionStats,\n\tStorage,\n\tStorageBranchScan,\n\tUsageRow,\n\tUsageScan,\n\tWrite,\n} from \"./types.ts\";\nimport type { ListElement, ListReadOptions, StoredValue, Value, ValueList } from \"./values.ts\";\n\nexport interface MemoryStorageOptions {\n\tnow?: () => number;\n}\n\nexport interface MemorySessionRepoOptions {\n\tnow?: () => number;\n}\n\nexport class MemoryStorage implements Storage {\n\tprivate readonly now: () => number;\n\tprivate storageState = new InMemoryStorageState();\n\tprivate commitQueue: Promise<void> = Promise.resolve();\n\tprivate state: \"open\" | \"closing\" | \"closed\" = \"open\";\n\tprivate closePromise: Promise<void> | undefined;\n\n\tconstructor(options: MemoryStorageOptions = {}) {\n\t\tthis.now = options.now ?? Date.now;\n\t}\n\n\tasync commit(writes: Write[], _context: Context): Promise<CommitResult> {\n\t\tif (this.state !== \"open\") throw new Error(\"MemoryStorage is closed\");\n\t\tconst result = this.commitQueue.then(() => {\n\t\t\tconst prepared = this.storageState.prepareCommit(writes, this.now());\n\t\t\tconst stats = this.storageState.applyValidated(prepared.writes);\n\t\t\treturn { ...prepared.result, stats };\n\t\t});\n\t\tthis.commitQueue = result.then(\n\t\t\t() => undefined,\n\t\t\t() => undefined,\n\t\t);\n\t\treturn result;\n\t}\n\n\tgetEntries(ids: string[], _context: Context): Promise<Map<string, Entry>> {\n\t\tif (this.state !== \"open\") return Promise.reject(new Error(\"MemoryStorage is closed\"));\n\t\treturn Promise.resolve(this.storageState.getEntries(ids));\n\t}\n\n\tgetValue<T>(address: Value<T>, _context: Context): Promise<StoredValue<T> | undefined> {\n\t\tif (this.state !== \"open\") return Promise.reject(new Error(\"MemoryStorage is closed\"));\n\t\treturn Promise.resolve(this.storageState.getValue(address));\n\t}\n\n\tscanValues<T>(prefix: Value<T>, _context: Context): Promise<StoredValue<T>[]> {\n\t\tif (this.state !== \"open\") return Promise.reject(new Error(\"MemoryStorage is closed\"));\n\t\treturn Promise.resolve(this.storageState.scanValues(prefix));\n\t}\n\n\tasync readList<T>(\n\t\taddress: ValueList<T>,\n\t\toptions: ListReadOptions | undefined,\n\t\t_context: Context,\n\t): Promise<ListElement<T>[]> {\n\t\tif (this.state !== \"open\") throw new Error(\"MemoryStorage is closed\");\n\t\treturn this.storageState.readList(address, options);\n\t}\n\n\tasync scanBranch(query: StorageBranchScan, _context: Context): Promise<Entry[]> {\n\t\tif (this.state !== \"open\") throw new Error(\"MemoryStorage is closed\");\n\t\treturn this.storageState.scanBranch(query);\n\t}\n\n\tasync scanBranchStructure(query: StorageBranchScan, _context: Context): Promise<EntryStructure[]> {\n\t\tif (this.state !== \"open\") throw new Error(\"MemoryStorage is closed\");\n\t\treturn this.storageState.scanBranchStructure(query);\n\t}\n\n\tscanEntries(query: EntryScan, _context: Context): Promise<Entry[]> {\n\t\tif (this.state !== \"open\") return Promise.reject(new Error(\"MemoryStorage is closed\"));\n\t\treturn Promise.resolve(this.storageState.scanEntries(query));\n\t}\n\n\tscanUsage(query: UsageScan, _context: Context): Promise<UsageRow[]> {\n\t\tif (this.state !== \"open\") return Promise.reject(new Error(\"MemoryStorage is closed\"));\n\t\treturn Promise.resolve(this.storageState.scanUsage(query));\n\t}\n\n\tgetStats(_context: Context): Promise<SessionStats> {\n\t\tif (this.state !== \"open\") return Promise.reject(new Error(\"MemoryStorage is closed\"));\n\t\treturn Promise.resolve(this.storageState.getStats());\n\t}\n\n\t/** Construct a destination storage at one serialized boundary between source commits. */\n\tfork(options: ForkOptions): Promise<MemoryStorage> {\n\t\tif (this.state !== \"open\") return Promise.reject(new Error(\"MemoryStorage is closed\"));\n\t\tconst result = this.commitQueue.then(() => {\n\t\t\tconst destination = new MemoryStorage({ now: this.now });\n\t\t\tdestination.storageState = this.storageState.createFork(options);\n\t\t\treturn destination;\n\t\t});\n\t\tthis.commitQueue = result.then(\n\t\t\t() => undefined,\n\t\t\t() => undefined,\n\t\t);\n\t\treturn result;\n\t}\n\n\tclose(_context: Context): Promise<void> {\n\t\tif (this.closePromise !== undefined) return this.closePromise;\n\t\tthis.state = \"closing\";\n\t\tthis.closePromise = this.commitQueue.then(() => {\n\t\t\tthis.state = \"closed\";\n\t\t});\n\t\treturn this.closePromise;\n\t}\n}\n\nconst MEMORY_STORAGE_VERSION = 1;\n\ninterface MemorySessionRecord {\n\tmetadata: SessionMetadata;\n\tstorage: MemoryStorage;\n\tsession: StorageBackedSession;\n\topen: boolean;\n}\n\nclass MemorySessionFacade implements Session {\n\treadonly metadata: SessionMetadata;\n\treadonly idGenerator: IdGenerator;\n\tprivate readonly session: StorageBackedSession;\n\tprivate readonly onClose: () => void;\n\tprivate readonly admitted = new Set<Promise<unknown>>();\n\tprivate readonly closedError = new Error(\"Session is closed\");\n\tprivate state: \"open\" | \"closing\" | \"closed\" = \"open\";\n\tprivate closePromise: Promise<void> | undefined;\n\n\tconstructor(session: StorageBackedSession, onClose: () => void) {\n\t\tthis.session = session;\n\t\tthis.metadata = session.metadata;\n\t\tthis.idGenerator = session.idGenerator;\n\t\tthis.onClose = onClose;\n\t}\n\n\tasync beginMutation(context: Context): Promise<SessionMutation> {\n\t\tlet resolveFinished!: () => void;\n\t\tconst finished = new Promise<void>((resolve) => {\n\t\t\tresolveFinished = resolve;\n\t\t});\n\t\tthis.admitted.add(finished);\n\t\tlet source: SessionMutation;\n\t\ttry {\n\t\t\tsource = await this.admit(() => this.session.beginMutation(context));\n\t\t} catch (error) {\n\t\t\tthis.admitted.delete(finished);\n\t\t\tresolveFinished();\n\t\t\tthrow error;\n\t\t}\n\t\tif (this.state !== \"open\") {\n\t\t\tawait source.end(context);\n\t\t\tthis.admitted.delete(finished);\n\t\t\tresolveFinished();\n\t\t\tthrow this.closedError;\n\t\t}\n\t\tlet ended = false;\n\t\treturn {\n\t\t\tcommit: (writes, commitContext) => source.commit(writes, commitContext),\n\t\t\tend: async (endContext) => {\n\t\t\t\ttry {\n\t\t\t\t\tawait source.end(endContext);\n\t\t\t\t} finally {\n\t\t\t\t\tif (!ended) {\n\t\t\t\t\t\tended = true;\n\t\t\t\t\t\tthis.admitted.delete(finished);\n\t\t\t\t\t\tresolveFinished();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\tgetEntries: (ids, readContext) => source.getEntries(ids, readContext),\n\t\t\tgetStats: (readContext) => source.getStats(readContext),\n\t\t\tgetValue: (address, readContext) => source.getValue(address, readContext),\n\t\t\tscanValues: (prefix, readContext) => source.scanValues(prefix, readContext),\n\t\t\treadList: (address, options, readContext) => source.readList(address, options, readContext),\n\t\t\tscanBranch: (query, readContext) => source.scanBranch(query, readContext),\n\t\t};\n\t}\n\n\tmutate<T>(mutation: SessionMutationCallback<T>, context: Context): Promise<T> {\n\t\treturn this.admit(() =>\n\t\t\tthis.session.mutate((mutator, mutationContext) => {\n\t\t\t\tif (this.state !== \"open\") throw this.closedError;\n\t\t\t\treturn mutation(mutator, mutationContext);\n\t\t\t}, context),\n\t\t);\n\t}\n\n\tgetEntries(ids: string[], context: Context): Promise<Map<string, Entry>> {\n\t\treturn this.admit(() => this.session.getEntries(ids, context));\n\t}\n\n\tgetEntry(id: string, context: Context): Promise<Entry | undefined> {\n\t\treturn this.admit(() => this.session.getEntry(id, context));\n\t}\n\n\tgetValue<T>(address: Value<T>, context: Context): Promise<StoredValue<T> | undefined> {\n\t\treturn this.admit(() => this.session.getValue(address, context));\n\t}\n\n\tscanValues<T>(prefix: Value<T>, context: Context): Promise<StoredValue<T>[]> {\n\t\treturn this.admit(() => this.session.scanValues(prefix, context));\n\t}\n\n\treadList<T>(\n\t\taddress: ValueList<T>,\n\t\toptions: ListReadOptions | undefined,\n\t\tcontext: Context,\n\t): Promise<ListElement<T>[]> {\n\t\treturn this.admit(() => this.session.readList(address, options, context));\n\t}\n\n\tscanBranch(query: StorageBranchScan, context: Context): Promise<Entry[]> {\n\t\treturn this.admit(() => this.session.scanBranch(query, context));\n\t}\n\n\tgetStats(context: Context): Promise<SessionStats> {\n\t\treturn this.admit(() => this.session.getStats(context));\n\t}\n\n\tgetName(context: Context): Promise<string | undefined> {\n\t\treturn this.admit(() => this.session.getName(context));\n\t}\n\n\tgetLabel(targetId: string, context: Context): Promise<string | undefined> {\n\t\treturn this.admit(() => this.session.getLabel(targetId, context));\n\t}\n\n\tfindEntries(query: EntryQuery | undefined, context: Context): Promise<Entry[]> {\n\t\treturn this.admit(() => this.session.findEntries(query, context));\n\t}\n\n\tfindEntry(query: EntryQuery | undefined, context: Context): Promise<Entry | undefined> {\n\t\treturn this.admit(() => this.session.findEntry(query, context));\n\t}\n\n\tasync branch(name: string, context: Context): Promise<Branch | undefined> {\n\t\tconst branch = await this.admit(() => this.session.branch(name, context));\n\t\treturn branch === undefined ? undefined : this.wrapBranch(branch);\n\t}\n\n\tasync createBranch(name: string, at: string | null, context: Context): Promise<Branch> {\n\t\treturn this.wrapBranch(await this.admit(() => this.session.createBranch(name, at, context)));\n\t}\n\n\tsetValue<T>(address: Value<T>, next: NoInfer<T>, context: Context): Promise<void> {\n\t\treturn this.admit(() => this.session.setValue(address, next, context));\n\t}\n\n\tdeleteValue<T>(address: Value<T>, context: Context): Promise<void> {\n\t\treturn this.admit(() => this.session.deleteValue(address, context));\n\t}\n\n\tappendList<T>(address: ValueList<T>, element: NoInfer<T>, context: Context): Promise<void> {\n\t\treturn this.admit(() => this.session.appendList(address, element, context));\n\t}\n\n\tdeleteList<T>(address: ValueList<T>, context: Context): Promise<void> {\n\t\treturn this.admit(() => this.session.deleteList(address, context));\n\t}\n\n\tsetName(name: string | undefined, context: Context): Promise<void> {\n\t\treturn this.admit(() => this.session.setName(name, context));\n\t}\n\n\tsetLabel(targetId: string, label: string | undefined, context: Context): Promise<void> {\n\t\treturn this.admit(() => this.session.setLabel(targetId, label, context));\n\t}\n\n\tclose(_context: Context): Promise<void> {\n\t\tif (this.closePromise !== undefined) return this.closePromise;\n\t\tthis.state = \"closing\";\n\t\tthis.closePromise = Promise.allSettled([...this.admitted]).then(() => {\n\t\t\tthis.state = \"closed\";\n\t\t\tthis.onClose();\n\t\t});\n\t\treturn this.closePromise;\n\t}\n\n\tprivate wrapBranch(branch: Branch): Branch {\n\t\treturn {\n\t\t\tname: branch.name,\n\t\t\tgetTipId: (context) => this.admit(() => branch.getTipId(context)),\n\t\t\tfindEntries: (query, context) => this.admit(() => branch.findEntries(query, context)),\n\t\t\tfindEntry: (query, context) => this.admit(() => branch.findEntry(query, context)),\n\t\t\tappendMessage: (message, context) => this.admit(() => branch.appendMessage(message, context)),\n\t\t\tappendCustomEntry: (customType, data, context) =>\n\t\t\t\tthis.admit(() => branch.appendCustomEntry(customType, data, context)),\n\t\t};\n\t}\n\n\tprivate admit<T>(operation: () => Promise<T>): Promise<T> {\n\t\tif (this.state !== \"open\") return Promise.reject(this.closedError);\n\t\tlet result: Promise<T>;\n\t\ttry {\n\t\t\tresult = operation();\n\t\t} catch (error) {\n\t\t\tresult = Promise.reject(error);\n\t\t}\n\t\tthis.admitted.add(result);\n\t\tvoid result.then(\n\t\t\t() => this.admitted.delete(result),\n\t\t\t() => this.admitted.delete(result),\n\t\t);\n\t\treturn result;\n\t}\n}\n\nexport class MemorySessionRepo implements SessionRepo {\n\tprivate readonly now: () => number;\n\tprivate readonly sessions = new Map<string, MemorySessionRecord>();\n\tprivate readonly pendingIds = new Set<string>();\n\tprivate closed = false;\n\tprivate closePromise: Promise<void> | undefined;\n\n\tconstructor(options: MemorySessionRepoOptions = {}) {\n\t\tthis.now = options.now ?? Date.now;\n\t}\n\n\tasync create(options: SessionCreateOptions, context: Context): Promise<Session> {\n\t\tthis.assertOpen();\n\t\tconst createdAt = this.now();\n\t\tconst id = options.id ?? uuidv7(createdAt);\n\t\tthis.reserveId(id);\n\t\tconst metadata: SessionMetadata = {\n\t\t\tid,\n\t\t\tcreatedAt,\n\t\t\tstorageVersion: MEMORY_STORAGE_VERSION,\n\t\t\t...(options.parentSessionId === undefined ? {} : { parentSessionId: options.parentSessionId }),\n\t\t};\n\t\tconst storage = new MemoryStorage({ now: this.now });\n\t\tconst session = new StorageBackedSession(metadata, storage);\n\t\ttry {\n\t\t\tconst record: MemorySessionRecord = {\n\t\t\t\tmetadata,\n\t\t\t\tstorage,\n\t\t\t\tsession,\n\t\t\t\topen: true,\n\t\t\t};\n\t\t\tthis.sessions.set(id, record);\n\t\t\treturn this.openRecord(record);\n\t\t} catch (error) {\n\t\t\tawait session.close(context);\n\t\t\tthrow error;\n\t\t} finally {\n\t\t\tthis.pendingIds.delete(id);\n\t\t}\n\t}\n\n\topen(metadata: SessionMetadata, _context: Context): Promise<Session> {\n\t\t// Memory sessions are always created at the current storage version, so\n\t\t// persistent-backend version gating does not apply here.\n\t\tthis.assertOpen();\n\t\tconst record = this.sessions.get(metadata.id);\n\t\tif (record === undefined) return Promise.reject(new Error(`Unknown session: ${metadata.id}`));\n\t\tif (record.open) return Promise.reject(new Error(`Session is already open: ${metadata.id}`));\n\t\trecord.open = true;\n\t\treturn Promise.resolve(this.openRecord(record));\n\t}\n\n\tlist(_options: undefined, _context: Context): Promise<SessionMetadata[]> {\n\t\tthis.assertOpen();\n\t\treturn Promise.resolve([...this.sessions.values()].map(({ metadata }) => metadata));\n\t}\n\n\tasync delete(metadata: SessionMetadata, context: Context): Promise<void> {\n\t\tthis.assertOpen();\n\t\tconst record = this.sessions.get(metadata.id);\n\t\tif (record === undefined) throw new Error(`Unknown session: ${metadata.id}`);\n\t\tif (record.open) throw new Error(`Session is open: ${metadata.id}`);\n\t\tawait record.session.close(context);\n\t\tthis.sessions.delete(metadata.id);\n\t}\n\n\tasync fork(source: SessionMetadata, options: ForkOptions, _context: Context): Promise<Session> {\n\t\tthis.assertOpen();\n\t\tconst sourceRecord = this.sessions.get(source.id);\n\t\tif (sourceRecord === undefined) throw new Error(`Unknown session: ${source.id}`);\n\t\tconst createdAt = this.now();\n\t\tconst id = options.id ?? uuidv7(createdAt);\n\t\tthis.reserveId(id);\n\n\t\ttry {\n\t\t\tconst storage = await sourceRecord.storage.fork(options);\n\t\t\tconst metadata: SessionMetadata = {\n\t\t\t\tid,\n\t\t\t\tcreatedAt,\n\t\t\t\tstorageVersion: MEMORY_STORAGE_VERSION,\n\t\t\t\tparentSessionId: sourceRecord.metadata.id,\n\t\t\t};\n\t\t\tconst session = new StorageBackedSession(metadata, storage);\n\t\t\tconst record: MemorySessionRecord = {\n\t\t\t\tmetadata,\n\t\t\t\tstorage,\n\t\t\t\tsession,\n\t\t\t\topen: true,\n\t\t\t};\n\t\t\tthis.sessions.set(id, record);\n\t\t\treturn this.openRecord(record);\n\t\t} finally {\n\t\t\tthis.pendingIds.delete(id);\n\t\t}\n\t}\n\n\tclose(context: Context): Promise<void> {\n\t\tif (this.closePromise !== undefined) return this.closePromise;\n\t\tthis.closed = true;\n\t\tthis.closePromise = Promise.all([...this.sessions.values()].map(({ session }) => session.close(context))).then(\n\t\t\t() => undefined,\n\t\t);\n\t\treturn this.closePromise;\n\t}\n\n\tprivate openRecord(record: MemorySessionRecord): Session {\n\t\treturn new MemorySessionFacade(record.session, () => {\n\t\t\trecord.open = false;\n\t\t});\n\t}\n\n\tprivate reserveId(id: string): void {\n\t\tif (this.sessions.has(id) || this.pendingIds.has(id)) throw new Error(`Session already exists: ${id}`);\n\t\tthis.pendingIds.add(id);\n\t}\n\n\tprivate assertOpen(): void {\n\t\tif (this.closed) throw new Error(\"MemorySessionRepo is closed\");\n\t}\n}\n"]}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
/** Serializes complete read-modify-write jobs for one Session. */
|
|
2
|
-
export declare class MutationLine {
|
|
3
|
-
private tail;
|
|
4
|
-
private sealedError;
|
|
5
|
-
run<T>(operation: () => T | Promise<T>): Promise<T>;
|
|
6
|
-
seal(error: Error): Promise<void>;
|
|
7
|
-
}
|
|
8
|
-
//# sourceMappingURL=mutation-line.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mutation-line.d.ts","sourceRoot":"","sources":["../../../src/harness/session/mutation-line.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,qBAAa,YAAY;IACxB,OAAO,CAAC,IAAI,CAAoC;IAChD,OAAO,CAAC,WAAW,CAAoB;IAEvC,GAAG,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAWlD;IAED,IAAI,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAGhC;CACD"}
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
/** Serializes complete read-modify-write jobs for one Session. */
|
|
2
|
-
export class MutationLine {
|
|
3
|
-
tail = Promise.resolve();
|
|
4
|
-
sealedError;
|
|
5
|
-
run(operation) {
|
|
6
|
-
if (this.sealedError !== undefined)
|
|
7
|
-
return Promise.reject(this.sealedError);
|
|
8
|
-
const result = this.tail.then(() => {
|
|
9
|
-
if (this.sealedError !== undefined)
|
|
10
|
-
throw this.sealedError;
|
|
11
|
-
return operation();
|
|
12
|
-
});
|
|
13
|
-
this.tail = result.then(() => undefined, () => undefined);
|
|
14
|
-
return result;
|
|
15
|
-
}
|
|
16
|
-
seal(error) {
|
|
17
|
-
this.sealedError ??= error;
|
|
18
|
-
return this.tail;
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
//# sourceMappingURL=mutation-line.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mutation-line.js","sourceRoot":"","sources":["../../../src/harness/session/mutation-line.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,MAAM,OAAO,YAAY;IAChB,IAAI,GAAkB,OAAO,CAAC,OAAO,EAAE,CAAC;IACxC,WAAW,CAAoB;IAEvC,GAAG,CAAI,SAA+B;QACrC,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS;YAAE,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC5E,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE;YAClC,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS;gBAAE,MAAM,IAAI,CAAC,WAAW,CAAC;YAC3D,OAAO,SAAS,EAAE,CAAC;QACpB,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CACtB,GAAG,EAAE,CAAC,SAAS,EACf,GAAG,EAAE,CAAC,SAAS,CACf,CAAC;QACF,OAAO,MAAM,CAAC;IACf,CAAC;IAED,IAAI,CAAC,KAAY;QAChB,IAAI,CAAC,WAAW,KAAK,KAAK,CAAC;QAC3B,OAAO,IAAI,CAAC,IAAI,CAAC;IAClB,CAAC;CACD","sourcesContent":["/** Serializes complete read-modify-write jobs for one Session. */\nexport class MutationLine {\n\tprivate tail: Promise<void> = Promise.resolve();\n\tprivate sealedError: Error | undefined;\n\n\trun<T>(operation: () => T | Promise<T>): Promise<T> {\n\t\tif (this.sealedError !== undefined) return Promise.reject(this.sealedError);\n\t\tconst result = this.tail.then(() => {\n\t\t\tif (this.sealedError !== undefined) throw this.sealedError;\n\t\t\treturn operation();\n\t\t});\n\t\tthis.tail = result.then(\n\t\t\t() => undefined,\n\t\t\t() => undefined,\n\t\t);\n\t\treturn result;\n\t}\n\n\tseal(error: Error): Promise<void> {\n\t\tthis.sealedError ??= error;\n\t\treturn this.tail;\n\t}\n}\n"]}
|