@sema-ai/core 1.275.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +5433 -0
- package/LICENSE +27 -0
- package/NOTICE.md +30 -0
- package/README.md +1040 -0
- package/dist/agents/agent-definition.d.ts +10 -0
- package/dist/agents/agent-definition.d.ts.map +1 -0
- package/dist/agents/agent-definition.js +18 -0
- package/dist/agents/agent-definition.js.map +1 -0
- package/dist/agents/builtin-agents.d.ts +69 -0
- package/dist/agents/builtin-agents.d.ts.map +1 -0
- package/dist/agents/builtin-agents.js +177 -0
- package/dist/agents/builtin-agents.js.map +1 -0
- package/dist/agents/cascade.d.ts +101 -0
- package/dist/agents/cascade.d.ts.map +1 -0
- package/dist/agents/cascade.js +189 -0
- package/dist/agents/cascade.js.map +1 -0
- package/dist/agents/observer.d.ts +209 -0
- package/dist/agents/observer.d.ts.map +1 -0
- package/dist/agents/observer.js +495 -0
- package/dist/agents/observer.js.map +1 -0
- package/dist/agents/repair-loop.d.ts +236 -0
- package/dist/agents/repair-loop.d.ts.map +1 -0
- package/dist/agents/repair-loop.js +293 -0
- package/dist/agents/repair-loop.js.map +1 -0
- package/dist/agents/session-util.d.ts +8 -0
- package/dist/agents/session-util.d.ts.map +1 -0
- package/dist/agents/session-util.js +9 -0
- package/dist/agents/session-util.js.map +1 -0
- package/dist/agents/subagent-steps.d.ts +93 -0
- package/dist/agents/subagent-steps.d.ts.map +1 -0
- package/dist/agents/subagent-steps.js +206 -0
- package/dist/agents/subagent-steps.js.map +1 -0
- package/dist/agents/subagent.d.ts +441 -0
- package/dist/agents/subagent.d.ts.map +1 -0
- package/dist/agents/subagent.js +2492 -0
- package/dist/agents/subagent.js.map +1 -0
- package/dist/agents/suspend-guard.d.ts +35 -0
- package/dist/agents/suspend-guard.d.ts.map +1 -0
- package/dist/agents/suspend-guard.js +48 -0
- package/dist/agents/suspend-guard.js.map +1 -0
- package/dist/agents/teacher.d.ts +137 -0
- package/dist/agents/teacher.d.ts.map +1 -0
- package/dist/agents/teacher.js +575 -0
- package/dist/agents/teacher.js.map +1 -0
- package/dist/agents/team.d.ts +211 -0
- package/dist/agents/team.d.ts.map +1 -0
- package/dist/agents/team.js +293 -0
- package/dist/agents/team.js.map +1 -0
- package/dist/agents/tool-filter.d.ts +29 -0
- package/dist/agents/tool-filter.d.ts.map +1 -0
- package/dist/agents/tool-filter.js +50 -0
- package/dist/agents/tool-filter.js.map +1 -0
- package/dist/agents/verify.d.ts +177 -0
- package/dist/agents/verify.d.ts.map +1 -0
- package/dist/agents/verify.js +305 -0
- package/dist/agents/verify.js.map +1 -0
- package/dist/bench/metrics.d.ts +714 -0
- package/dist/bench/metrics.d.ts.map +1 -0
- package/dist/bench/metrics.js +618 -0
- package/dist/bench/metrics.js.map +1 -0
- package/dist/bin/sema-tb.d.ts +3 -0
- package/dist/bin/sema-tb.d.ts.map +1 -0
- package/dist/bin/sema-tb.js +516 -0
- package/dist/bin/sema-tb.js.map +1 -0
- package/dist/bin/tb-env.d.ts +13 -0
- package/dist/bin/tb-env.d.ts.map +1 -0
- package/dist/bin/tb-env.js +26 -0
- package/dist/bin/tb-env.js.map +1 -0
- package/dist/brain/anthropic.d.ts +46 -0
- package/dist/brain/anthropic.d.ts.map +1 -0
- package/dist/brain/anthropic.js +830 -0
- package/dist/brain/anthropic.js.map +1 -0
- package/dist/brain/circuit-breaker.d.ts +46 -0
- package/dist/brain/circuit-breaker.d.ts.map +1 -0
- package/dist/brain/circuit-breaker.js +173 -0
- package/dist/brain/circuit-breaker.js.map +1 -0
- package/dist/brain/degrading.d.ts +98 -0
- package/dist/brain/degrading.d.ts.map +1 -0
- package/dist/brain/degrading.js +249 -0
- package/dist/brain/degrading.js.map +1 -0
- package/dist/brain/errors.d.ts +31 -0
- package/dist/brain/errors.d.ts.map +1 -0
- package/dist/brain/errors.js +58 -0
- package/dist/brain/errors.js.map +1 -0
- package/dist/brain/failover.d.ts +18 -0
- package/dist/brain/failover.d.ts.map +1 -0
- package/dist/brain/failover.js +118 -0
- package/dist/brain/failover.js.map +1 -0
- package/dist/brain/model-presets.d.ts +36 -0
- package/dist/brain/model-presets.d.ts.map +1 -0
- package/dist/brain/model-presets.js +54 -0
- package/dist/brain/model-presets.js.map +1 -0
- package/dist/brain/openai.d.ts +43 -0
- package/dist/brain/openai.d.ts.map +1 -0
- package/dist/brain/openai.js +784 -0
- package/dist/brain/openai.js.map +1 -0
- package/dist/brain/reasoning.d.ts +138 -0
- package/dist/brain/reasoning.d.ts.map +1 -0
- package/dist/brain/reasoning.js +146 -0
- package/dist/brain/reasoning.js.map +1 -0
- package/dist/brain/repetition.d.ts +60 -0
- package/dist/brain/repetition.d.ts.map +1 -0
- package/dist/brain/repetition.js +121 -0
- package/dist/brain/repetition.js.map +1 -0
- package/dist/brain/request-params.d.ts +29 -0
- package/dist/brain/request-params.d.ts.map +1 -0
- package/dist/brain/request-params.js +78 -0
- package/dist/brain/request-params.js.map +1 -0
- package/dist/brain/retry.d.ts +18 -0
- package/dist/brain/retry.d.ts.map +1 -0
- package/dist/brain/retry.js +42 -0
- package/dist/brain/retry.js.map +1 -0
- package/dist/brain/routing.d.ts +19 -0
- package/dist/brain/routing.d.ts.map +1 -0
- package/dist/brain/routing.js +44 -0
- package/dist/brain/routing.js.map +1 -0
- package/dist/brain/status-sink.d.ts +46 -0
- package/dist/brain/status-sink.d.ts.map +1 -0
- package/dist/brain/status-sink.js +36 -0
- package/dist/brain/status-sink.js.map +1 -0
- package/dist/brain/stream-engine.d.ts +85 -0
- package/dist/brain/stream-engine.d.ts.map +1 -0
- package/dist/brain/stream-engine.js +391 -0
- package/dist/brain/stream-engine.js.map +1 -0
- package/dist/brain/timeout.d.ts +44 -0
- package/dist/brain/timeout.d.ts.map +1 -0
- package/dist/brain/timeout.js +41 -0
- package/dist/brain/timeout.js.map +1 -0
- package/dist/brain/tool-call-repair.d.ts +15 -0
- package/dist/brain/tool-call-repair.d.ts.map +1 -0
- package/dist/brain/tool-call-repair.js +67 -0
- package/dist/brain/tool-call-repair.js.map +1 -0
- package/dist/brain/walltime.d.ts +14 -0
- package/dist/brain/walltime.d.ts.map +1 -0
- package/dist/brain/walltime.js +14 -0
- package/dist/brain/walltime.js.map +1 -0
- package/dist/core/arg-summary.d.ts +19 -0
- package/dist/core/arg-summary.d.ts.map +1 -0
- package/dist/core/arg-summary.js +96 -0
- package/dist/core/arg-summary.js.map +1 -0
- package/dist/core/ask-question.d.ts +113 -0
- package/dist/core/ask-question.d.ts.map +1 -0
- package/dist/core/ask-question.js +246 -0
- package/dist/core/ask-question.js.map +1 -0
- package/dist/core/auto-compaction.d.ts +341 -0
- package/dist/core/auto-compaction.d.ts.map +1 -0
- package/dist/core/auto-compaction.js +495 -0
- package/dist/core/auto-compaction.js.map +1 -0
- package/dist/core/auto-promote.d.ts +126 -0
- package/dist/core/auto-promote.d.ts.map +1 -0
- package/dist/core/auto-promote.js +171 -0
- package/dist/core/auto-promote.js.map +1 -0
- package/dist/core/background-shell.d.ts +128 -0
- package/dist/core/background-shell.d.ts.map +1 -0
- package/dist/core/background-shell.js +42 -0
- package/dist/core/background-shell.js.map +1 -0
- package/dist/core/cache-break-detector.d.ts +63 -0
- package/dist/core/cache-break-detector.d.ts.map +1 -0
- package/dist/core/cache-break-detector.js +0 -0
- package/dist/core/cache-break-detector.js.map +1 -0
- package/dist/core/canonical-json.d.ts +45 -0
- package/dist/core/canonical-json.d.ts.map +1 -0
- package/dist/core/canonical-json.js +132 -0
- package/dist/core/canonical-json.js.map +1 -0
- package/dist/core/checkpoint-store.d.ts +1101 -0
- package/dist/core/checkpoint-store.d.ts.map +1 -0
- package/dist/core/checkpoint-store.js +514 -0
- package/dist/core/checkpoint-store.js.map +1 -0
- package/dist/core/consolidate-scope.d.ts +94 -0
- package/dist/core/consolidate-scope.d.ts.map +1 -0
- package/dist/core/consolidate-scope.js +158 -0
- package/dist/core/consolidate-scope.js.map +1 -0
- package/dist/core/context-edit.d.ts +82 -0
- package/dist/core/context-edit.d.ts.map +1 -0
- package/dist/core/context-edit.js +149 -0
- package/dist/core/context-edit.js.map +1 -0
- package/dist/core/context-guard.d.ts +43 -0
- package/dist/core/context-guard.d.ts.map +1 -0
- package/dist/core/context-guard.js +171 -0
- package/dist/core/context-guard.js.map +1 -0
- package/dist/core/dynamic-recall.d.ts +100 -0
- package/dist/core/dynamic-recall.d.ts.map +1 -0
- package/dist/core/dynamic-recall.js +108 -0
- package/dist/core/dynamic-recall.js.map +1 -0
- package/dist/core/exec-gate.d.ts +74 -0
- package/dist/core/exec-gate.d.ts.map +1 -0
- package/dist/core/exec-gate.js +143 -0
- package/dist/core/exec-gate.js.map +1 -0
- package/dist/core/exec-output-tail.d.ts +37 -0
- package/dist/core/exec-output-tail.d.ts.map +1 -0
- package/dist/core/exec-output-tail.js +63 -0
- package/dist/core/exec-output-tail.js.map +1 -0
- package/dist/core/file-snapshot-store.d.ts +137 -0
- package/dist/core/file-snapshot-store.d.ts.map +1 -0
- package/dist/core/file-snapshot-store.js +319 -0
- package/dist/core/file-snapshot-store.js.map +1 -0
- package/dist/core/git-worktree-env.d.ts +41 -0
- package/dist/core/git-worktree-env.d.ts.map +1 -0
- package/dist/core/git-worktree-env.js +64 -0
- package/dist/core/git-worktree-env.js.map +1 -0
- package/dist/core/hooks.d.ts +372 -0
- package/dist/core/hooks.d.ts.map +1 -0
- package/dist/core/hooks.js +269 -0
- package/dist/core/hooks.js.map +1 -0
- package/dist/core/lsp-diagnostics.d.ts +74 -0
- package/dist/core/lsp-diagnostics.d.ts.map +1 -0
- package/dist/core/lsp-diagnostics.js +125 -0
- package/dist/core/lsp-diagnostics.js.map +1 -0
- package/dist/core/lsp-protocol.d.ts +28 -0
- package/dist/core/lsp-protocol.d.ts.map +1 -0
- package/dist/core/lsp-protocol.js +179 -0
- package/dist/core/lsp-protocol.js.map +1 -0
- package/dist/core/lsp-session.d.ts +56 -0
- package/dist/core/lsp-session.d.ts.map +1 -0
- package/dist/core/lsp-session.js +185 -0
- package/dist/core/lsp-session.js.map +1 -0
- package/dist/core/lsp.d.ts +132 -0
- package/dist/core/lsp.d.ts.map +1 -0
- package/dist/core/lsp.js +147 -0
- package/dist/core/lsp.js.map +1 -0
- package/dist/core/mcp.d.ts +294 -0
- package/dist/core/mcp.d.ts.map +1 -0
- package/dist/core/mcp.js +992 -0
- package/dist/core/mcp.js.map +1 -0
- package/dist/core/media-byte-cap.d.ts +34 -0
- package/dist/core/media-byte-cap.d.ts.map +1 -0
- package/dist/core/media-byte-cap.js +76 -0
- package/dist/core/media-byte-cap.js.map +1 -0
- package/dist/core/memory-engine/data-plane.d.ts +103 -0
- package/dist/core/memory-engine/data-plane.d.ts.map +1 -0
- package/dist/core/memory-engine/data-plane.js +272 -0
- package/dist/core/memory-engine/data-plane.js.map +1 -0
- package/dist/core/memory-engine/dual-root.d.ts +40 -0
- package/dist/core/memory-engine/dual-root.d.ts.map +1 -0
- package/dist/core/memory-engine/dual-root.js +95 -0
- package/dist/core/memory-engine/dual-root.js.map +1 -0
- package/dist/core/memory-engine/engine.d.ts +161 -0
- package/dist/core/memory-engine/engine.d.ts.map +1 -0
- package/dist/core/memory-engine/engine.js +1110 -0
- package/dist/core/memory-engine/engine.js.map +1 -0
- package/dist/core/memory-engine/file-backend.d.ts +162 -0
- package/dist/core/memory-engine/file-backend.d.ts.map +1 -0
- package/dist/core/memory-engine/file-backend.js +948 -0
- package/dist/core/memory-engine/file-backend.js.map +1 -0
- package/dist/core/memory-engine/frontmatter.d.ts +24 -0
- package/dist/core/memory-engine/frontmatter.d.ts.map +1 -0
- package/dist/core/memory-engine/frontmatter.js +135 -0
- package/dist/core/memory-engine/frontmatter.js.map +1 -0
- package/dist/core/memory-engine/index.d.ts +13 -0
- package/dist/core/memory-engine/index.d.ts.map +1 -0
- package/dist/core/memory-engine/index.js +28 -0
- package/dist/core/memory-engine/index.js.map +1 -0
- package/dist/core/memory-engine/layout.d.ts +123 -0
- package/dist/core/memory-engine/layout.d.ts.map +1 -0
- package/dist/core/memory-engine/layout.js +643 -0
- package/dist/core/memory-engine/layout.js.map +1 -0
- package/dist/core/memory-engine/memory-backend-contract.d.ts +22 -0
- package/dist/core/memory-engine/memory-backend-contract.d.ts.map +1 -0
- package/dist/core/memory-engine/memory-backend-contract.js +271 -0
- package/dist/core/memory-engine/memory-backend-contract.js.map +1 -0
- package/dist/core/memory-engine/migrate.d.ts +17 -0
- package/dist/core/memory-engine/migrate.d.ts.map +1 -0
- package/dist/core/memory-engine/migrate.js +35 -0
- package/dist/core/memory-engine/migrate.js.map +1 -0
- package/dist/core/memory-engine/scan.d.ts +20 -0
- package/dist/core/memory-engine/scan.d.ts.map +1 -0
- package/dist/core/memory-engine/scan.js +84 -0
- package/dist/core/memory-engine/scan.js.map +1 -0
- package/dist/core/memory-engine/scope-contract.d.ts +104 -0
- package/dist/core/memory-engine/scope-contract.d.ts.map +1 -0
- package/dist/core/memory-engine/scope-contract.js +288 -0
- package/dist/core/memory-engine/scope-contract.js.map +1 -0
- package/dist/core/memory-engine/sync-client.d.ts +100 -0
- package/dist/core/memory-engine/sync-client.d.ts.map +1 -0
- package/dist/core/memory-engine/sync-client.js +328 -0
- package/dist/core/memory-engine/sync-client.js.map +1 -0
- package/dist/core/memory-engine/sync.d.ts +97 -0
- package/dist/core/memory-engine/sync.d.ts.map +1 -0
- package/dist/core/memory-engine/sync.js +91 -0
- package/dist/core/memory-engine/sync.js.map +1 -0
- package/dist/core/memory-engine/types.d.ts +279 -0
- package/dist/core/memory-engine/types.d.ts.map +1 -0
- package/dist/core/memory-engine/types.js +9 -0
- package/dist/core/memory-engine/types.js.map +1 -0
- package/dist/core/memory-recall.d.ts +261 -0
- package/dist/core/memory-recall.d.ts.map +1 -0
- package/dist/core/memory-recall.js +600 -0
- package/dist/core/memory-recall.js.map +1 -0
- package/dist/core/memory-vector.d.ts +24 -0
- package/dist/core/memory-vector.d.ts.map +1 -0
- package/dist/core/memory-vector.js +51 -0
- package/dist/core/memory-vector.js.map +1 -0
- package/dist/core/memory.d.ts +502 -0
- package/dist/core/memory.d.ts.map +1 -0
- package/dist/core/memory.js +881 -0
- package/dist/core/memory.js.map +1 -0
- package/dist/core/message-utils.d.ts +7 -0
- package/dist/core/message-utils.d.ts.map +1 -0
- package/dist/core/message-utils.js +10 -0
- package/dist/core/message-utils.js.map +1 -0
- package/dist/core/oracle-isolation.d.ts +85 -0
- package/dist/core/oracle-isolation.d.ts.map +1 -0
- package/dist/core/oracle-isolation.js +121 -0
- package/dist/core/oracle-isolation.js.map +1 -0
- package/dist/core/permission-rules.d.ts +102 -0
- package/dist/core/permission-rules.d.ts.map +1 -0
- package/dist/core/permission-rules.js +357 -0
- package/dist/core/permission-rules.js.map +1 -0
- package/dist/core/present-plan-tool.d.ts +28 -0
- package/dist/core/present-plan-tool.d.ts.map +1 -0
- package/dist/core/present-plan-tool.js +119 -0
- package/dist/core/present-plan-tool.js.map +1 -0
- package/dist/core/pricing.d.ts +48 -0
- package/dist/core/pricing.d.ts.map +1 -0
- package/dist/core/pricing.js +46 -0
- package/dist/core/pricing.js.map +1 -0
- package/dist/core/property-harness.d.ts +126 -0
- package/dist/core/property-harness.d.ts.map +1 -0
- package/dist/core/property-harness.js +192 -0
- package/dist/core/property-harness.js.map +1 -0
- package/dist/core/push-queue.d.ts +10 -0
- package/dist/core/push-queue.d.ts.map +1 -0
- package/dist/core/push-queue.js +42 -0
- package/dist/core/push-queue.js.map +1 -0
- package/dist/core/remote-env.d.ts +432 -0
- package/dist/core/remote-env.d.ts.map +1 -0
- package/dist/core/remote-env.js +77 -0
- package/dist/core/remote-env.js.map +1 -0
- package/dist/core/roles.d.ts +74 -0
- package/dist/core/roles.d.ts.map +1 -0
- package/dist/core/roles.js +272 -0
- package/dist/core/roles.js.map +1 -0
- package/dist/core/runner/active-skill-scope.d.ts +64 -0
- package/dist/core/runner/active-skill-scope.d.ts.map +1 -0
- package/dist/core/runner/active-skill-scope.js +197 -0
- package/dist/core/runner/active-skill-scope.js.map +1 -0
- package/dist/core/runner/assemble-result.d.ts +191 -0
- package/dist/core/runner/assemble-result.d.ts.map +1 -0
- package/dist/core/runner/assemble-result.js +250 -0
- package/dist/core/runner/assemble-result.js.map +1 -0
- package/dist/core/runner/call-cap.d.ts +130 -0
- package/dist/core/runner/call-cap.d.ts.map +1 -0
- package/dist/core/runner/call-cap.js +151 -0
- package/dist/core/runner/call-cap.js.map +1 -0
- package/dist/core/runner/grounding-signal.d.ts +12 -0
- package/dist/core/runner/grounding-signal.d.ts.map +1 -0
- package/dist/core/runner/grounding-signal.js +94 -0
- package/dist/core/runner/grounding-signal.js.map +1 -0
- package/dist/core/runner/image.d.ts +23 -0
- package/dist/core/runner/image.d.ts.map +1 -0
- package/dist/core/runner/image.js +151 -0
- package/dist/core/runner/image.js.map +1 -0
- package/dist/core/runner/memory-consolidation.d.ts +112 -0
- package/dist/core/runner/memory-consolidation.d.ts.map +1 -0
- package/dist/core/runner/memory-consolidation.js +372 -0
- package/dist/core/runner/memory-consolidation.js.map +1 -0
- package/dist/core/runner/prepare-task.d.ts +583 -0
- package/dist/core/runner/prepare-task.d.ts.map +1 -0
- package/dist/core/runner/prepare-task.js +3612 -0
- package/dist/core/runner/prepare-task.js.map +1 -0
- package/dist/core/runner/prompt-suggestions.d.ts +33 -0
- package/dist/core/runner/prompt-suggestions.d.ts.map +1 -0
- package/dist/core/runner/prompt-suggestions.js +116 -0
- package/dist/core/runner/prompt-suggestions.js.map +1 -0
- package/dist/core/runner/runtask.d.ts +274 -0
- package/dist/core/runner/runtask.d.ts.map +1 -0
- package/dist/core/runner/runtask.js +4606 -0
- package/dist/core/runner/runtask.js.map +1 -0
- package/dist/core/runner/session-rule-policy.d.ts +28 -0
- package/dist/core/runner/session-rule-policy.d.ts.map +1 -0
- package/dist/core/runner/session-rule-policy.js +110 -0
- package/dist/core/runner/session-rule-policy.js.map +1 -0
- package/dist/core/runner/strict-output-schema.d.ts +36 -0
- package/dist/core/runner/strict-output-schema.d.ts.map +1 -0
- package/dist/core/runner/strict-output-schema.js +365 -0
- package/dist/core/runner/strict-output-schema.js.map +1 -0
- package/dist/core/runner/synthetic-tools.d.ts +72 -0
- package/dist/core/runner/synthetic-tools.d.ts.map +1 -0
- package/dist/core/runner/synthetic-tools.js +203 -0
- package/dist/core/runner/synthetic-tools.js.map +1 -0
- package/dist/core/runner/tool-disclosure.d.ts +117 -0
- package/dist/core/runner/tool-disclosure.d.ts.map +1 -0
- package/dist/core/runner/tool-disclosure.js +0 -0
- package/dist/core/runner/tool-disclosure.js.map +1 -0
- package/dist/core/runner/turn-attachments.d.ts +381 -0
- package/dist/core/runner/turn-attachments.d.ts.map +1 -0
- package/dist/core/runner/turn-attachments.js +596 -0
- package/dist/core/runner/turn-attachments.js.map +1 -0
- package/dist/core/runner/usage-accounting.d.ts +35 -0
- package/dist/core/runner/usage-accounting.d.ts.map +1 -0
- package/dist/core/runner/usage-accounting.js +45 -0
- package/dist/core/runner/usage-accounting.js.map +1 -0
- package/dist/core/runtime.d.ts +9 -0
- package/dist/core/runtime.d.ts.map +1 -0
- package/dist/core/runtime.js +17 -0
- package/dist/core/runtime.js.map +1 -0
- package/dist/core/safety-axis-vocab.d.ts +33 -0
- package/dist/core/safety-axis-vocab.d.ts.map +1 -0
- package/dist/core/safety-axis-vocab.js +35 -0
- package/dist/core/safety-axis-vocab.js.map +1 -0
- package/dist/core/safety-merge-corpus.d.ts +48 -0
- package/dist/core/safety-merge-corpus.d.ts.map +1 -0
- package/dist/core/safety-merge-corpus.js +203 -0
- package/dist/core/safety-merge-corpus.js.map +1 -0
- package/dist/core/scheduler.d.ts +126 -0
- package/dist/core/scheduler.d.ts.map +1 -0
- package/dist/core/scheduler.js +54 -0
- package/dist/core/scheduler.js.map +1 -0
- package/dist/core/secret-env.d.ts +23 -0
- package/dist/core/secret-env.d.ts.map +1 -0
- package/dist/core/secret-env.js +35 -0
- package/dist/core/secret-env.js.map +1 -0
- package/dist/core/select-model.d.ts +26 -0
- package/dist/core/select-model.d.ts.map +1 -0
- package/dist/core/select-model.js +58 -0
- package/dist/core/select-model.js.map +1 -0
- package/dist/core/sensitive-path-policy.d.ts +24 -0
- package/dist/core/sensitive-path-policy.d.ts.map +1 -0
- package/dist/core/sensitive-path-policy.js +96 -0
- package/dist/core/sensitive-path-policy.js.map +1 -0
- package/dist/core/session-policy-store.d.ts +102 -0
- package/dist/core/session-policy-store.d.ts.map +1 -0
- package/dist/core/session-policy-store.js +177 -0
- package/dist/core/session-policy-store.js.map +1 -0
- package/dist/core/session-reconcile.d.ts +63 -0
- package/dist/core/session-reconcile.d.ts.map +1 -0
- package/dist/core/session-reconcile.js +71 -0
- package/dist/core/session-reconcile.js.map +1 -0
- package/dist/core/session-store.d.ts +99 -0
- package/dist/core/session-store.d.ts.map +1 -0
- package/dist/core/session-store.js +298 -0
- package/dist/core/session-store.js.map +1 -0
- package/dist/core/session.d.ts +144 -0
- package/dist/core/session.d.ts.map +1 -0
- package/dist/core/session.js +56 -0
- package/dist/core/session.js.map +1 -0
- package/dist/core/spec-contract.d.ts +147 -0
- package/dist/core/spec-contract.d.ts.map +1 -0
- package/dist/core/spec-contract.js +340 -0
- package/dist/core/spec-contract.js.map +1 -0
- package/dist/core/strategy-store.d.ts +50 -0
- package/dist/core/strategy-store.d.ts.map +1 -0
- package/dist/core/strategy-store.js +100 -0
- package/dist/core/strategy-store.js.map +1 -0
- package/dist/core/stub-env.d.ts +35 -0
- package/dist/core/stub-env.d.ts.map +1 -0
- package/dist/core/stub-env.js +69 -0
- package/dist/core/stub-env.js.map +1 -0
- package/dist/core/task-notification.d.ts +115 -0
- package/dist/core/task-notification.d.ts.map +1 -0
- package/dist/core/task-notification.js +247 -0
- package/dist/core/task-notification.js.map +1 -0
- package/dist/core/task-outcome.d.ts +80 -0
- package/dist/core/task-outcome.d.ts.map +1 -0
- package/dist/core/task-outcome.js +40 -0
- package/dist/core/task-outcome.js.map +1 -0
- package/dist/core/task-registry.d.ts +349 -0
- package/dist/core/task-registry.d.ts.map +1 -0
- package/dist/core/task-registry.js +1751 -0
- package/dist/core/task-registry.js.map +1 -0
- package/dist/core/tighten-task-spec.d.ts +27 -0
- package/dist/core/tighten-task-spec.d.ts.map +1 -0
- package/dist/core/tighten-task-spec.js +95 -0
- package/dist/core/tighten-task-spec.js.map +1 -0
- package/dist/core/tool-detach.d.ts +31 -0
- package/dist/core/tool-detach.d.ts.map +1 -0
- package/dist/core/tool-detach.js +62 -0
- package/dist/core/tool-detach.js.map +1 -0
- package/dist/core/tool-errors.d.ts +72 -0
- package/dist/core/tool-errors.d.ts.map +1 -0
- package/dist/core/tool-errors.js +194 -0
- package/dist/core/tool-errors.js.map +1 -0
- package/dist/core/tool-name-aliases.d.ts +5 -0
- package/dist/core/tool-name-aliases.d.ts.map +1 -0
- package/dist/core/tool-name-aliases.js +130 -0
- package/dist/core/tool-name-aliases.js.map +1 -0
- package/dist/core/tool-policy.d.ts +295 -0
- package/dist/core/tool-policy.d.ts.map +1 -0
- package/dist/core/tool-policy.js +567 -0
- package/dist/core/tool-policy.js.map +1 -0
- package/dist/core/tool-result-budget.d.ts +44 -0
- package/dist/core/tool-result-budget.d.ts.map +1 -0
- package/dist/core/tool-result-budget.js +140 -0
- package/dist/core/tool-result-budget.js.map +1 -0
- package/dist/core/tool-result-store.d.ts +136 -0
- package/dist/core/tool-result-store.d.ts.map +1 -0
- package/dist/core/tool-result-store.js +219 -0
- package/dist/core/tool-result-store.js.map +1 -0
- package/dist/core/tools.d.ts +14 -0
- package/dist/core/tools.d.ts.map +1 -0
- package/dist/core/tools.js +98 -0
- package/dist/core/tools.js.map +1 -0
- package/dist/core/trace.d.ts +340 -0
- package/dist/core/trace.d.ts.map +1 -0
- package/dist/core/trace.js +12 -0
- package/dist/core/trace.js.map +1 -0
- package/dist/core/types.d.ts +2828 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +2 -0
- package/dist/core/types.js.map +1 -0
- package/dist/core/untrusted-egress.d.ts +32 -0
- package/dist/core/untrusted-egress.d.ts.map +1 -0
- package/dist/core/untrusted-egress.js +49 -0
- package/dist/core/untrusted-egress.js.map +1 -0
- package/dist/core/untrusted-text.d.ts +64 -0
- package/dist/core/untrusted-text.d.ts.map +1 -0
- package/dist/core/untrusted-text.js +119 -0
- package/dist/core/untrusted-text.js.map +1 -0
- package/dist/core/warm-resume.d.ts +23 -0
- package/dist/core/warm-resume.d.ts.map +1 -0
- package/dist/core/warm-resume.js +28 -0
- package/dist/core/warm-resume.js.map +1 -0
- package/dist/core/with-retry.d.ts +43 -0
- package/dist/core/with-retry.d.ts.map +1 -0
- package/dist/core/with-retry.js +59 -0
- package/dist/core/with-retry.js.map +1 -0
- package/dist/core/workflow-journal-store.d.ts +44 -0
- package/dist/core/workflow-journal-store.d.ts.map +1 -0
- package/dist/core/workflow-journal-store.js +47 -0
- package/dist/core/workflow-journal-store.js.map +1 -0
- package/dist/core/workflow-run-store-contract.d.ts +31 -0
- package/dist/core/workflow-run-store-contract.d.ts.map +1 -0
- package/dist/core/workflow-run-store-contract.js +191 -0
- package/dist/core/workflow-run-store-contract.js.map +1 -0
- package/dist/core/workflow-run-store.d.ts +149 -0
- package/dist/core/workflow-run-store.d.ts.map +1 -0
- package/dist/core/workflow-run-store.js +110 -0
- package/dist/core/workflow-run-store.js.map +1 -0
- package/dist/engine/compaction/compaction.d.ts +139 -0
- package/dist/engine/compaction/compaction.d.ts.map +1 -0
- package/dist/engine/compaction/compaction.js +1030 -0
- package/dist/engine/compaction/compaction.js.map +1 -0
- package/dist/engine/compaction/utils.d.ts +45 -0
- package/dist/engine/compaction/utils.d.ts.map +1 -0
- package/dist/engine/compaction/utils.js +203 -0
- package/dist/engine/compaction/utils.js.map +1 -0
- package/dist/engine/execution-env/kill-tree.d.ts +20 -0
- package/dist/engine/execution-env/kill-tree.d.ts.map +1 -0
- package/dist/engine/execution-env/kill-tree.js +183 -0
- package/dist/engine/execution-env/kill-tree.js.map +1 -0
- package/dist/engine/execution-env/node-execution-env.d.ts +133 -0
- package/dist/engine/execution-env/node-execution-env.d.ts.map +1 -0
- package/dist/engine/execution-env/node-execution-env.js +1031 -0
- package/dist/engine/execution-env/node-execution-env.js.map +1 -0
- package/dist/engine/harness/agent-harness.d.ts +174 -0
- package/dist/engine/harness/agent-harness.d.ts.map +1 -0
- package/dist/engine/harness/agent-harness.js +1053 -0
- package/dist/engine/harness/agent-harness.js.map +1 -0
- package/dist/engine/harness/messages.d.ts +17 -0
- package/dist/engine/harness/messages.d.ts.map +1 -0
- package/dist/engine/harness/messages.js +122 -0
- package/dist/engine/harness/messages.js.map +1 -0
- package/dist/engine/harness/types.d.ts +713 -0
- package/dist/engine/harness/types.d.ts.map +1 -0
- package/dist/engine/harness/types.js +100 -0
- package/dist/engine/harness/types.js.map +1 -0
- package/dist/engine/llm/diagnostics.d.ts +23 -0
- package/dist/engine/llm/diagnostics.d.ts.map +1 -0
- package/dist/engine/llm/diagnostics.js +32 -0
- package/dist/engine/llm/diagnostics.js.map +1 -0
- package/dist/engine/llm/event-stream.d.ts +25 -0
- package/dist/engine/llm/event-stream.d.ts.map +1 -0
- package/dist/engine/llm/event-stream.js +103 -0
- package/dist/engine/llm/event-stream.js.map +1 -0
- package/dist/engine/llm/index.d.ts +12 -0
- package/dist/engine/llm/index.d.ts.map +1 -0
- package/dist/engine/llm/index.js +12 -0
- package/dist/engine/llm/index.js.map +1 -0
- package/dist/engine/llm/types.d.ts +753 -0
- package/dist/engine/llm/types.d.ts.map +1 -0
- package/dist/engine/llm/types.js +2 -0
- package/dist/engine/llm/types.js.map +1 -0
- package/dist/engine/llm/validation.d.ts +8 -0
- package/dist/engine/llm/validation.d.ts.map +1 -0
- package/dist/engine/llm/validation.js +318 -0
- package/dist/engine/llm/validation.js.map +1 -0
- package/dist/engine/loop/agent-loop.d.ts +74 -0
- package/dist/engine/loop/agent-loop.d.ts.map +1 -0
- package/dist/engine/loop/agent-loop.js +1490 -0
- package/dist/engine/loop/agent-loop.js.map +1 -0
- package/dist/engine/loop/runtime-deps.d.ts +17 -0
- package/dist/engine/loop/runtime-deps.d.ts.map +1 -0
- package/dist/engine/loop/runtime-deps.js +21 -0
- package/dist/engine/loop/runtime-deps.js.map +1 -0
- package/dist/engine/loop/types.d.ts +609 -0
- package/dist/engine/loop/types.d.ts.map +1 -0
- package/dist/engine/loop/types.js +2 -0
- package/dist/engine/loop/types.js.map +1 -0
- package/dist/engine/lsp/frame-decoder.d.ts +16 -0
- package/dist/engine/lsp/frame-decoder.d.ts.map +1 -0
- package/dist/engine/lsp/frame-decoder.js +53 -0
- package/dist/engine/lsp/frame-decoder.js.map +1 -0
- package/dist/engine/lsp/node-lsp-manager.d.ts +105 -0
- package/dist/engine/lsp/node-lsp-manager.d.ts.map +1 -0
- package/dist/engine/lsp/node-lsp-manager.js +343 -0
- package/dist/engine/lsp/node-lsp-manager.js.map +1 -0
- package/dist/engine/lsp/stdio-lsp-transport.d.ts +37 -0
- package/dist/engine/lsp/stdio-lsp-transport.d.ts.map +1 -0
- package/dist/engine/lsp/stdio-lsp-transport.js +185 -0
- package/dist/engine/lsp/stdio-lsp-transport.js.map +1 -0
- package/dist/engine/session/import-validate.d.ts +44 -0
- package/dist/engine/session/import-validate.d.ts.map +1 -0
- package/dist/engine/session/import-validate.js +92 -0
- package/dist/engine/session/import-validate.js.map +1 -0
- package/dist/engine/session/memory-repo.d.ts +25 -0
- package/dist/engine/session/memory-repo.d.ts.map +1 -0
- package/dist/engine/session/memory-repo.js +59 -0
- package/dist/engine/session/memory-repo.js.map +1 -0
- package/dist/engine/session/memory-storage.d.ts +14 -0
- package/dist/engine/session/memory-storage.d.ts.map +1 -0
- package/dist/engine/session/memory-storage.js +17 -0
- package/dist/engine/session/memory-storage.js.map +1 -0
- package/dist/engine/session/repo-utils.d.ts +11 -0
- package/dist/engine/session/repo-utils.d.ts.map +1 -0
- package/dist/engine/session/repo-utils.js +40 -0
- package/dist/engine/session/repo-utils.js.map +1 -0
- package/dist/engine/session/session.d.ts +34 -0
- package/dist/engine/session/session.d.ts.map +1 -0
- package/dist/engine/session/session.js +227 -0
- package/dist/engine/session/session.js.map +1 -0
- package/dist/engine/session/storage-base.d.ts +38 -0
- package/dist/engine/session/storage-base.d.ts.map +1 -0
- package/dist/engine/session/storage-base.js +157 -0
- package/dist/engine/session/storage-base.js.map +1 -0
- package/dist/engine/session/timestamps.d.ts +3 -0
- package/dist/engine/session/timestamps.d.ts.map +1 -0
- package/dist/engine/session/timestamps.js +15 -0
- package/dist/engine/session/timestamps.js.map +1 -0
- package/dist/engine/session/uuid.d.ts +2 -0
- package/dist/engine/session/uuid.d.ts.map +1 -0
- package/dist/engine/session/uuid.js +50 -0
- package/dist/engine/session/uuid.js.map +1 -0
- package/dist/index.d.ts +160 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +374 -0
- package/dist/index.js.map +1 -0
- package/dist/internal/harness.d.ts +26 -0
- package/dist/internal/harness.d.ts.map +1 -0
- package/dist/internal/harness.js +24 -0
- package/dist/internal/harness.js.map +1 -0
- package/dist/internal/llm.d.ts +9 -0
- package/dist/internal/llm.d.ts.map +1 -0
- package/dist/internal/llm.js +8 -0
- package/dist/internal/llm.js.map +1 -0
- package/dist/orchestration/builtin-workflows.d.ts +44 -0
- package/dist/orchestration/builtin-workflows.d.ts.map +1 -0
- package/dist/orchestration/builtin-workflows.js +165 -0
- package/dist/orchestration/builtin-workflows.js.map +1 -0
- package/dist/orchestration/dev-vm-script-runner.d.ts +24 -0
- package/dist/orchestration/dev-vm-script-runner.d.ts.map +1 -0
- package/dist/orchestration/dev-vm-script-runner.js +106 -0
- package/dist/orchestration/dev-vm-script-runner.js.map +1 -0
- package/dist/orchestration/goal.d.ts +97 -0
- package/dist/orchestration/goal.d.ts.map +1 -0
- package/dist/orchestration/goal.js +248 -0
- package/dist/orchestration/goal.js.map +1 -0
- package/dist/orchestration/run-spec.d.ts +63 -0
- package/dist/orchestration/run-spec.d.ts.map +1 -0
- package/dist/orchestration/run-spec.js +274 -0
- package/dist/orchestration/run-spec.js.map +1 -0
- package/dist/orchestration/run-workflow-tool.d.ts +187 -0
- package/dist/orchestration/run-workflow-tool.d.ts.map +1 -0
- package/dist/orchestration/run-workflow-tool.js +612 -0
- package/dist/orchestration/run-workflow-tool.js.map +1 -0
- package/dist/orchestration/workflow-governance.d.ts +70 -0
- package/dist/orchestration/workflow-governance.d.ts.map +1 -0
- package/dist/orchestration/workflow-governance.js +176 -0
- package/dist/orchestration/workflow-governance.js.map +1 -0
- package/dist/orchestration/workflow-meta.d.ts +41 -0
- package/dist/orchestration/workflow-meta.d.ts.map +1 -0
- package/dist/orchestration/workflow-meta.js +426 -0
- package/dist/orchestration/workflow-meta.js.map +1 -0
- package/dist/orchestration/workflow-observe.d.ts +77 -0
- package/dist/orchestration/workflow-observe.d.ts.map +1 -0
- package/dist/orchestration/workflow-observe.js +177 -0
- package/dist/orchestration/workflow-observe.js.map +1 -0
- package/dist/orchestration/workflow-primitives.d.ts +31 -0
- package/dist/orchestration/workflow-primitives.d.ts.map +1 -0
- package/dist/orchestration/workflow-primitives.js +104 -0
- package/dist/orchestration/workflow-primitives.js.map +1 -0
- package/dist/orchestration/workflow-sandbox-conformance.d.ts +34 -0
- package/dist/orchestration/workflow-sandbox-conformance.d.ts.map +1 -0
- package/dist/orchestration/workflow-sandbox-conformance.js +301 -0
- package/dist/orchestration/workflow-sandbox-conformance.js.map +1 -0
- package/dist/orchestration/workflow-script-runner.d.ts +127 -0
- package/dist/orchestration/workflow-script-runner.d.ts.map +1 -0
- package/dist/orchestration/workflow-script-runner.js +48 -0
- package/dist/orchestration/workflow-script-runner.js.map +1 -0
- package/dist/orchestration/workflow-script-store.d.ts +99 -0
- package/dist/orchestration/workflow-script-store.d.ts.map +1 -0
- package/dist/orchestration/workflow-script-store.js +133 -0
- package/dist/orchestration/workflow-script-store.js.map +1 -0
- package/dist/orchestration/workflow-size-guideline.d.ts +50 -0
- package/dist/orchestration/workflow-size-guideline.d.ts.map +1 -0
- package/dist/orchestration/workflow-size-guideline.js +78 -0
- package/dist/orchestration/workflow-size-guideline.js.map +1 -0
- package/dist/orchestration/workflow.d.ts +624 -0
- package/dist/orchestration/workflow.d.ts.map +1 -0
- package/dist/orchestration/workflow.js +1596 -0
- package/dist/orchestration/workflow.js.map +1 -0
- package/dist/prompts/default.d.ts +474 -0
- package/dist/prompts/default.d.ts.map +1 -0
- package/dist/prompts/default.js +676 -0
- package/dist/prompts/default.js.map +1 -0
- package/dist/prompts/supervisor.d.ts +60 -0
- package/dist/prompts/supervisor.d.ts.map +1 -0
- package/dist/prompts/supervisor.js +162 -0
- package/dist/prompts/supervisor.js.map +1 -0
- package/dist/scenarios/env.d.ts +41 -0
- package/dist/scenarios/env.d.ts.map +1 -0
- package/dist/scenarios/env.js +65 -0
- package/dist/scenarios/env.js.map +1 -0
- package/dist/scenarios/full-body.d.ts +47 -0
- package/dist/scenarios/full-body.d.ts.map +1 -0
- package/dist/scenarios/full-body.js +36 -0
- package/dist/scenarios/full-body.js.map +1 -0
- package/dist/scenarios/scenario-registry.d.ts +107 -0
- package/dist/scenarios/scenario-registry.d.ts.map +1 -0
- package/dist/scenarios/scenario-registry.js +192 -0
- package/dist/scenarios/scenario-registry.js.map +1 -0
- package/dist/scenarios/teacher-quickstart.d.ts +41 -0
- package/dist/scenarios/teacher-quickstart.d.ts.map +1 -0
- package/dist/scenarios/teacher-quickstart.js +32 -0
- package/dist/scenarios/teacher-quickstart.js.map +1 -0
- package/dist/server/http.d.ts +36 -0
- package/dist/server/http.d.ts.map +1 -0
- package/dist/server/http.js +144 -0
- package/dist/server/http.js.map +1 -0
- package/dist/stores/file/checkpoint-store.d.ts +62 -0
- package/dist/stores/file/checkpoint-store.d.ts.map +1 -0
- package/dist/stores/file/checkpoint-store.js +250 -0
- package/dist/stores/file/checkpoint-store.js.map +1 -0
- package/dist/stores/file/file-snapshot-store.d.ts +43 -0
- package/dist/stores/file/file-snapshot-store.d.ts.map +1 -0
- package/dist/stores/file/file-snapshot-store.js +374 -0
- package/dist/stores/file/file-snapshot-store.js.map +1 -0
- package/dist/stores/file/fs-atomic.d.ts +95 -0
- package/dist/stores/file/fs-atomic.d.ts.map +1 -0
- package/dist/stores/file/fs-atomic.js +415 -0
- package/dist/stores/file/fs-atomic.js.map +1 -0
- package/dist/stores/file/index.d.ts +98 -0
- package/dist/stores/file/index.d.ts.map +1 -0
- package/dist/stores/file/index.js +109 -0
- package/dist/stores/file/index.js.map +1 -0
- package/dist/stores/file/memory-store.d.ts +95 -0
- package/dist/stores/file/memory-store.d.ts.map +1 -0
- package/dist/stores/file/memory-store.js +393 -0
- package/dist/stores/file/memory-store.js.map +1 -0
- package/dist/stores/file/session-policy-store.d.ts +24 -0
- package/dist/stores/file/session-policy-store.d.ts.map +1 -0
- package/dist/stores/file/session-policy-store.js +123 -0
- package/dist/stores/file/session-policy-store.js.map +1 -0
- package/dist/stores/file/session-store.d.ts +34 -0
- package/dist/stores/file/session-store.d.ts.map +1 -0
- package/dist/stores/file/session-store.js +175 -0
- package/dist/stores/file/session-store.js.map +1 -0
- package/dist/stores/file/tool-result-store.d.ts +23 -0
- package/dist/stores/file/tool-result-store.d.ts.map +1 -0
- package/dist/stores/file/tool-result-store.js +61 -0
- package/dist/stores/file/tool-result-store.js.map +1 -0
- package/dist/stores/file/workflow-journal-store.d.ts +36 -0
- package/dist/stores/file/workflow-journal-store.d.ts.map +1 -0
- package/dist/stores/file/workflow-journal-store.js +157 -0
- package/dist/stores/file/workflow-journal-store.js.map +1 -0
- package/dist/stores/file/workflow-run-store.d.ts +58 -0
- package/dist/stores/file/workflow-run-store.d.ts.map +1 -0
- package/dist/stores/file/workflow-run-store.js +178 -0
- package/dist/stores/file/workflow-run-store.js.map +1 -0
- package/dist/stores/pg.d.ts +210 -0
- package/dist/stores/pg.d.ts.map +1 -0
- package/dist/stores/pg.js +652 -0
- package/dist/stores/pg.js.map +1 -0
- package/dist/tools/fs/encoding.d.ts +51 -0
- package/dist/tools/fs/encoding.d.ts.map +1 -0
- package/dist/tools/fs/encoding.js +74 -0
- package/dist/tools/fs/encoding.js.map +1 -0
- package/dist/tools/fs/gh-rate-limit.d.ts +19 -0
- package/dist/tools/fs/gh-rate-limit.d.ts.map +1 -0
- package/dist/tools/fs/gh-rate-limit.js +35 -0
- package/dist/tools/fs/gh-rate-limit.js.map +1 -0
- package/dist/tools/fs/index.d.ts +246 -0
- package/dist/tools/fs/index.d.ts.map +1 -0
- package/dist/tools/fs/index.js +2130 -0
- package/dist/tools/fs/index.js.map +1 -0
- package/dist/tools/fs/pdf.d.ts +106 -0
- package/dist/tools/fs/pdf.d.ts.map +1 -0
- package/dist/tools/fs/pdf.js +178 -0
- package/dist/tools/fs/pdf.js.map +1 -0
- package/dist/tools/fs/repo-map.d.ts +15 -0
- package/dist/tools/fs/repo-map.d.ts.map +1 -0
- package/dist/tools/fs/repo-map.js +251 -0
- package/dist/tools/fs/repo-map.js.map +1 -0
- package/dist/tools/fs/safety.d.ts +168 -0
- package/dist/tools/fs/safety.d.ts.map +1 -0
- package/dist/tools/fs/safety.js +479 -0
- package/dist/tools/fs/safety.js.map +1 -0
- package/dist/tools/fs/search.d.ts +118 -0
- package/dist/tools/fs/search.d.ts.map +1 -0
- package/dist/tools/fs/search.js +650 -0
- package/dist/tools/fs/search.js.map +1 -0
- package/dist/tools/gitea-issue.d.ts +39 -0
- package/dist/tools/gitea-issue.d.ts.map +1 -0
- package/dist/tools/gitea-issue.js +91 -0
- package/dist/tools/gitea-issue.js.map +1 -0
- package/dist/tools/monitor.d.ts +64 -0
- package/dist/tools/monitor.d.ts.map +1 -0
- package/dist/tools/monitor.js +135 -0
- package/dist/tools/monitor.js.map +1 -0
- package/dist/tools/scheduler-tools.d.ts +48 -0
- package/dist/tools/scheduler-tools.d.ts.map +1 -0
- package/dist/tools/scheduler-tools.js +449 -0
- package/dist/tools/scheduler-tools.js.map +1 -0
- package/dist/tools/sql-adapters.d.ts +32 -0
- package/dist/tools/sql-adapters.d.ts.map +1 -0
- package/dist/tools/sql-adapters.js +31 -0
- package/dist/tools/sql-adapters.js.map +1 -0
- package/dist/tools/sql.d.ts +36 -0
- package/dist/tools/sql.d.ts.map +1 -0
- package/dist/tools/sql.js +131 -0
- package/dist/tools/sql.js.map +1 -0
- package/dist/tools/task-list.d.ts +26 -0
- package/dist/tools/task-list.d.ts.map +1 -0
- package/dist/tools/task-list.js +352 -0
- package/dist/tools/task-list.js.map +1 -0
- package/dist/tools/todo.d.ts +11 -0
- package/dist/tools/todo.d.ts.map +1 -0
- package/dist/tools/todo.js +126 -0
- package/dist/tools/todo.js.map +1 -0
- package/dist/tools/web.d.ts +59 -0
- package/dist/tools/web.d.ts.map +1 -0
- package/dist/tools/web.js +607 -0
- package/dist/tools/web.js.map +1 -0
- package/dist/tools/worktree.d.ts +88 -0
- package/dist/tools/worktree.d.ts.map +1 -0
- package/dist/tools/worktree.js +434 -0
- package/dist/tools/worktree.js.map +1 -0
- package/docs/A1-ATTRIBUTION-ROUND1-2026-07-09.md +181 -0
- package/docs/AB-ORACLE-GATE-VERDICT-2026-07-10.md +100 -0
- package/docs/ANCHOR-GAP-INVENTORY-2026-07-09.md +143 -0
- package/docs/ARCHITECTURE.md +125 -0
- package/docs/BUGHUNT-2026-07-05-NIGHT.md +98 -0
- package/docs/BUILD.md +63 -0
- package/docs/CANCEL-ASYNC-ATTRIBUTION-2026-07-09.md +98 -0
- package/docs/CC-198-VS-201-DRIFT-2026-07-09.md +70 -0
- package/docs/CC-BASELINE-FAKE-ZERO-AUDIT-2026-07-09.md +51 -0
- package/docs/CC-DRIFT-198-206-AGENT-TYPES-2026-07-10.md +82 -0
- package/docs/CC-DRIFT-198-206-CHANGELOG-2026-07-10.md +82 -0
- package/docs/CC-DRIFT-198-206-REMINDERS-2026-07-10.md +96 -0
- package/docs/CC-DRIFT-198-206-ROADMAP-2026-07-10.md +110 -0
- package/docs/CC-DRIFT-198-206-TOOL-INVENTORY-2026-07-10.md +53 -0
- package/docs/CC-DRIFT-198-206-USAGE-CONSTANTS-2026-07-10.md +64 -0
- package/docs/CC-DRIFT-198-206-WORKFLOW-2026-07-10.md +83 -0
- package/docs/CC-PARITY-CHECKLIST.md +220 -0
- package/docs/CC-PARITY-DEEP-SWEEP-2026-07-07.md +149 -0
- package/docs/CC-SUBAGENT-PROMPT-STUDY-2026-07-09.md +219 -0
- package/docs/CC-TASK-REMINDER-CADENCE-STUDY-2026-07-09.md +396 -0
- package/docs/CC-TOOL-PARITY-SWEEP-2026-07.md +56 -0
- package/docs/CC-TOOL-PROMPT-DEEP-DIFF-2026-07-08.md +274 -0
- package/docs/CC-TOOLSURFACE-DEEP-DIVE-2026-07-07.md +197 -0
- package/docs/CC206-OBSERVER-ANCHORS-2026-07-11.md +463 -0
- package/docs/CC207-CORE-SWEEP-BACKLOG-2026-07-12.md +155 -0
- package/docs/CENTER-CONTROL-PLANE-SEAM.md +86 -0
- package/docs/CLEANUP-CONTRACT-ANCHOR-2026-07-09.md +83 -0
- package/docs/COLD-START-RSI-2026-07-09.md +72 -0
- package/docs/COMPACTION-LIVE-AUDIT-2026-07-09.md +114 -0
- package/docs/CONTEXT-lifecycle-extension-points-and-stop-attribution.md +71 -0
- package/docs/COREWARS-POLYGLOT-TRIAGE-2026-07-09.md +85 -0
- package/docs/DEADTARGET-OVERFULL-HBOX-2026-07-10.md +92 -0
- package/docs/DEADTARGET-PATH-TRACING-REVERSE-2026-07-10.md +87 -0
- package/docs/DEADTARGET-WINNING-AVG-COREWARS-2026-07-10.md +96 -0
- package/docs/DEEPSEEK-API-LIMITS-PROBE-2026-07-09.md +118 -0
- package/docs/DESIGN-140-MOCK-VERIFY-2026-07-11.md +79 -0
- package/docs/DESIGN-140-VERIFICATION-2026-07-11.md +43 -0
- package/docs/DESIGN-DRAFT-workflow-collab-2026-07-11.md +56 -0
- package/docs/DESIGN-ORACLE-GROUNDING-GATE-2026-07-10.md +167 -0
- package/docs/DESIGN-TFRAG-RECONCILE-SCAFFOLD-2026-07-09.md +102 -0
- package/docs/EXP-PA2-PE-DESIGN-2026-07-11.md +220 -0
- package/docs/EXT-DOGFOOD-2026-07-12.md +50 -0
- package/docs/FINAL-VERIFY-SURFACE-AUDIT-2026-07-09.md +44 -0
- package/docs/FRAG-RECON-INVESTIGATION-2026-07-09.md +183 -0
- package/docs/HANDOFF.md +121 -0
- package/docs/KNOWN-ISSUES.md +96 -0
- package/docs/LEGW-WINDOW-TAX-2026-07-10.md +82 -0
- package/docs/LIVE-PROBE-BATCH-2026-07-11.md +207 -0
- package/docs/M2-CERT-ATTRIBUTION-2026-07-10.md +61 -0
- package/docs/M25-LEG-VARIANCE-ATTRIBUTION-2026-07-10.md +81 -0
- package/docs/MAILMAN-TIMEOUT-ATTRIBUTION-2026-07-10.md +88 -0
- package/docs/MEMORY-BACKEND-DIALECT-NOTES.md +69 -0
- package/docs/MTEB-ESCAPE-HATCH-ATTRIBUTION-2026-07-09.md +57 -0
- package/docs/MTEB-LEADERBOARD-ATTRIBUTION-2026-07-10.md +134 -0
- package/docs/ORACLE-GATE-NEGATIVE-SAMPLE-2026-07-11.md +28 -0
- package/docs/PARITY-CONTEXT-TRANSACTIONS-2026-07-10.md +67 -0
- package/docs/PARITY-PROGRESS-MATRIX-2026-07-10.md +37 -0
- package/docs/PARITY-SPOT-AGENT-TYPES-2026-07-10.md +70 -0
- package/docs/PARITY-SPOT-REMINDERS-2026-07-10.md +144 -0
- package/docs/PARITY-SPOT-TOOL-INVENTORY-2026-07-10.md +61 -0
- package/docs/PARITY-SPOT-USAGE-CONSTANTS-2026-07-10.md +95 -0
- package/docs/PARITY-SPOT-WORKFLOW-2026-07-10.md +93 -0
- package/docs/PASSWORD-RECOVERY-PANEL-VERDICT-2026-07-10.md +62 -0
- package/docs/R8-R9-FINALIZE-COORDINATION-2026-07-09.md +124 -0
- package/docs/REPL-CODE-MODE-EVALUATION-2026-07-10.md +187 -0
- package/docs/REPORT-1249-TARGETED.md +48 -0
- package/docs/RESEARCH-3P-MEMORY-SWAP-2026-07-12.md +273 -0
- package/docs/ROADMAP.md +111 -0
- package/docs/RSI-CLOUD-DEPLOY-2026-07-06.md +289 -0
- package/docs/RSI-PROCESS-AI-COLDSTART-2026-07-11.md +68 -0
- package/docs/S18-THOROUGHNESS-AUDIT-2026-07-09.md +113 -0
- package/docs/SERVICE-INTEGRATION-GUIDE.md +298 -0
- package/docs/SUBAGENT-STREAM-RESILIENCE-PARITY-2026-07-10.md +118 -0
- package/docs/SWEBENCH-PRO-RECON-2026-07-11.md +31 -0
- package/docs/TB-EFFICIENCY-TELEMETRY-2026-07-08.md +114 -0
- package/docs/TB-FAILURE-AUTOPSY-2026-07-05-RERUN.md +67 -0
- package/docs/TB-FAIRNESS-AUDIT-2026-07-08.md +141 -0
- package/docs/TB-FULL-1257-2026-07-08.md +77 -0
- package/docs/TB-LEG-GAP-ATTRIBUTION-1261-1263-2026-07-11.md +154 -0
- package/docs/TB-REGRESSION-DAEMON-KILL-2026-07-08.md +58 -0
- package/docs/TB-RSI-CROSSCHECK-2026-07-06.md +68 -0
- package/docs/TB-RSI-LEDGER.md +30 -0
- package/docs/TB-STABLE-SET-2026-07-08.md +127 -0
- package/docs/TB21-RECON-2026-07-11.md +28 -0
- package/docs/TEST-DESIGN-BATCH-1-2-3.md +97 -0
- package/docs/THIRD-PARTY-INTEGRATION.md +45 -0
- package/docs/TOKEN-ESTIMATE-CALIBRATION-LIVE-2026-07-09.md +102 -0
- package/docs/audit-2026-06-10-/347/254/254/344/272/214/350/275/256-/347/251/272/347/231/275/345/214/272/344/270/216/345/277/230/346/216/245/347/272/277.md +147 -0
- package/docs/audit-2026-06-10-/350/256/241/347/256/227bug/346/211/253/346/217/217.md +163 -0
- package/docs/audit-2026-06-11-/344/277/256/345/244/215/345/244/215/345/256/241/344/270/216/345/233/236/345/275/222/344/270/223/346/211/253.md +95 -0
- package/docs/audit-2026-06-12-design71-P1/346/275/234/344/274/217/351/235/242/350/243/201/345/206/263/344/270/216/345/220/236/351/224/231/345/256/241/350/256/241.md +45 -0
- package/docs/audit-2026-06-12-/345/205/254/345/274/200/346/227/213/351/222/256/346/264/273/346/200/247/344/270/216vendored/346/255/273/350/267/257.md +63 -0
- package/docs/audit-2026-06-15/ADDENDUM-second-pass.md +88 -0
- package/docs/audit-2026-06-15/ARCHITECTURE-AND-ROADMAP.md +187 -0
- package/docs/audit-2026-06-15/DOC-CORRECTIONS.md +105 -0
- package/docs/audit-2026-06-15/INDEX.md +49 -0
- package/docs/audit-2026-06-15/ORCHESTRATION-STATUS.md +98 -0
- package/docs/audit-2026-06-15/PRODUCTION-ISSUES.md +189 -0
- package/docs/audit-2026-06-15/REFERENCES-literature.md +139 -0
- package/docs/audit-2026-06-15/VENDOR-REFACTOR-PLAN.md +96 -0
- package/docs/cc-probe-198/README.md +72 -0
- package/docs/cc-probe-198/STABILITY-AUDIT.md +118 -0
- package/docs/cc-probe-198/live-schema-monitor-worktree-2026-07-09.json +56 -0
- package/docs/cc-probe-198/mount-variants.json +536 -0
- package/docs/cc-probe-198/plan-mode-run.json +1 -0
- package/docs/cc-probe-198/probe-bash-bg.json +224 -0
- package/docs/cc-probe-198/probe-edit-mismatch.json +120 -0
- package/docs/cc-probe-198/probe-read-missing.json +62 -0
- package/docs/cc-probe-198/probe-search-empty.json +127 -0
- package/docs/cc-probe-198/probe-task-family.json +227 -0
- package/docs/cc-probe-198/probes.status +6 -0
- package/docs/cc-probe-198/raw-capture-interactive.json +948 -0
- package/docs/cc-probe-198/raw-capture-print.json +787 -0
- package/docs/cc-probe-198/raw-capture2-interactive.json +948 -0
- package/docs/cc-probe-198/raw-capture2-print.json +787 -0
- package/docs/cc-probe-198/system-prompt.txt +135 -0
- package/docs/cc-probe-198/tools-array.json +962 -0
- package/docs/durability-boundary.md +63 -0
- package/docs/fix-2026-06-10-/350/256/241/347/256/227bug/344/277/256/345/244/215-search/346/211/271.md +75 -0
- package/docs/fix-2026-06-11-/347/254/254/344/272/214/350/275/256-/344/277/256/345/244/215-search/346/211/271.md +62 -0
- package/docs/parity-sweep/REPORT-DYNAMIC.md +97 -0
- package/docs/parity-sweep/REPORT-STATIC-GGB.md +127 -0
- package/docs/parity-sweep/REPORT-STATIC-RWE.md +133 -0
- package/docs/vendor-history.md +385 -0
- package/docs/vendored-upstream-diff-2026-07.md +83 -0
- package/package.json +70 -0
|
@@ -0,0 +1,298 @@
|
|
|
1
|
+
import { InMemorySessionRepo, uuidv7, } from "../internal/harness.js";
|
|
2
|
+
import { isSessionConflict } from "./session.js";
|
|
3
|
+
const DAY_MS = 24 * 60 * 60 * 1000;
|
|
4
|
+
/**
|
|
5
|
+
* TTL-cached {@link SessionStore} over a pluggable {@link SessionRepo}.
|
|
6
|
+
*
|
|
7
|
+
* Sessions are cached in process memory and evicted after `defaultTtlDays` of inactivity. With the
|
|
8
|
+
* default in-memory repo they live only in this process (lost on restart). Supply a **durable** repo
|
|
9
|
+
* and the same caching/concurrency logic becomes a "session center": on `acquire`, a session not in
|
|
10
|
+
* the live cache is **resumed from the repo** (`repo.open`) rather than recreated — so a stateless
|
|
11
|
+
* runner resumes a conversation after a restart or across replicas. The optimistic-lock seam
|
|
12
|
+
* (`SessionWriteOptions.expectedLeafId` → `SessionError("conflict")`) keeps two replicas writing the
|
|
13
|
+
* same session safe; the Runner reconciles a lost CAS and retries.
|
|
14
|
+
*
|
|
15
|
+
* See `design/10-会话持久化与会话中心.md` for the durable-backend (TiDB) contract.
|
|
16
|
+
*/
|
|
17
|
+
export class TtlSessionStore {
|
|
18
|
+
repo;
|
|
19
|
+
entries = new Map();
|
|
20
|
+
/** In-flight acquisitions keyed by id, so concurrent acquire(sameId) share one session. */
|
|
21
|
+
pending = new Map();
|
|
22
|
+
/** Sessions pinned by a design/45 checkpoint — skipped by idle sweep until unpinned (B6/§5). */
|
|
23
|
+
pinned = new Set();
|
|
24
|
+
defaultTtlMs;
|
|
25
|
+
evictPolicy;
|
|
26
|
+
sweepTimer;
|
|
27
|
+
constructor(opts = {}) {
|
|
28
|
+
this.repo = opts.repo ?? new InMemorySessionRepo();
|
|
29
|
+
this.defaultTtlMs = (opts.defaultTtlDays ?? 7) * DAY_MS;
|
|
30
|
+
this.evictPolicy = opts.evict ?? (opts.repo ? "forget" : "delete");
|
|
31
|
+
if (opts.sweepIntervalMs !== undefined && opts.sweepIntervalMs > 0) {
|
|
32
|
+
this.sweepTimer = setInterval(() => this.sweep(), opts.sweepIntervalMs);
|
|
33
|
+
// Do not keep the process alive just for sweeping.
|
|
34
|
+
this.sweepTimer.unref?.();
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
/** Get an existing session by id (resuming from the repo if needed), or create one. */
|
|
38
|
+
async acquire(sessionId, opts) {
|
|
39
|
+
this.sweep();
|
|
40
|
+
if (sessionId) {
|
|
41
|
+
const existing = this.entries.get(sessionId);
|
|
42
|
+
if (existing) {
|
|
43
|
+
existing.lastActiveAt = Date.now();
|
|
44
|
+
return { session: existing.session, sessionId };
|
|
45
|
+
}
|
|
46
|
+
// design/114 Phase3 (F1): a `requireExisting` acquire NEVER creates and can REJECT (not_found). It must
|
|
47
|
+
// bypass the shared create-dedup `pending` — otherwise a concurrent create-capable waiter awaiting that
|
|
48
|
+
// same promise would inherit the not_found rejection instead of creating-on-miss. It never double-creates
|
|
49
|
+
// (it only opens), so skipping the dedup is safe; two concurrent `requireExisting` opens each just
|
|
50
|
+
// repo.open independently (both find-and-cache, or both fail loud) — harmless.
|
|
51
|
+
if (opts?.requireExisting) {
|
|
52
|
+
return { session: await this.openOrCreate(sessionId, true), sessionId };
|
|
53
|
+
}
|
|
54
|
+
// Dedup concurrent create-capable acquisitions of the same id (the open/create below has an await gap).
|
|
55
|
+
const inflight = this.pending.get(sessionId);
|
|
56
|
+
if (inflight) {
|
|
57
|
+
return { session: await inflight, sessionId };
|
|
58
|
+
}
|
|
59
|
+
const p = this.openOrCreate(sessionId, false);
|
|
60
|
+
this.pending.set(sessionId, p);
|
|
61
|
+
try {
|
|
62
|
+
return { session: await p, sessionId };
|
|
63
|
+
}
|
|
64
|
+
finally {
|
|
65
|
+
this.pending.delete(sessionId);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
const session = await this.createAndStore(undefined);
|
|
69
|
+
const meta = await session.getMetadata();
|
|
70
|
+
return { session, sessionId: meta.id };
|
|
71
|
+
}
|
|
72
|
+
/** Resume an existing session from the repo, or create it if the backend has no such id (unless
|
|
73
|
+
* `requireExisting`, in which case a genuinely-missing id fails loud instead — design/114 Phase3). */
|
|
74
|
+
async openOrCreate(id, requireExisting = false) {
|
|
75
|
+
try {
|
|
76
|
+
const session = await this.repo.open({ id, createdAt: "" });
|
|
77
|
+
const meta = await session.getMetadata();
|
|
78
|
+
// Carry the persisted lineage into the cache entry — a reopened fork (post-eviction acquire) must keep
|
|
79
|
+
// its `forkedFrom` in `list()` projections (codex 1.265.0 review F4).
|
|
80
|
+
this.entries.set(id, { session, lastActiveAt: Date.now(), createdAt: meta.createdAt, ...(meta.forkedFrom !== undefined ? { forkedFrom: meta.forkedFrom } : {}) });
|
|
81
|
+
return session;
|
|
82
|
+
}
|
|
83
|
+
catch (err) {
|
|
84
|
+
// `not_found` (or a conflict racing a creator) → create fresh. A real backend error rethrows.
|
|
85
|
+
if (!isNotFound(err) && !isSessionConflict(err)) {
|
|
86
|
+
throw err;
|
|
87
|
+
}
|
|
88
|
+
// design/114 Phase3: `requireExisting` ⇒ FAIL-LOUD on a genuinely missing session — never the silent
|
|
89
|
+
// create-on-miss that turns a reuse-style warm-resume into a fresh empty run ("looks warm, actually fresh").
|
|
90
|
+
// Only `not_found`: a conflict is a racing creator, so the session WILL exist — fall through to resolve it.
|
|
91
|
+
if (requireExisting && isNotFound(err)) {
|
|
92
|
+
throw err;
|
|
93
|
+
}
|
|
94
|
+
return this.createAndStore(id);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
async createAndStore(id) {
|
|
98
|
+
const session = await this.repo.create(id ? { id } : {});
|
|
99
|
+
const meta = await session.getMetadata();
|
|
100
|
+
// Same lineage carry as openOrCreate: `create({id})` on a file-backed repo REOPENS an existing session
|
|
101
|
+
// (idempotent create), which may be a fork whose metadata carries `forkedFrom`.
|
|
102
|
+
this.entries.set(meta.id, { session, lastActiveAt: Date.now(), createdAt: meta.createdAt, ...(meta.forkedFrom !== undefined ? { forkedFrom: meta.forkedFrom } : {}) });
|
|
103
|
+
return session;
|
|
104
|
+
}
|
|
105
|
+
/** Refresh the idle timer for a session. */
|
|
106
|
+
touch(sessionId) {
|
|
107
|
+
const e = this.entries.get(sessionId);
|
|
108
|
+
if (e) {
|
|
109
|
+
e.lastActiveAt = Date.now();
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
/** Record the most recent task run on a cached session (the `/resume` `lastRunId`); also bumps the idle
|
|
113
|
+
* timer. Best-effort — a no-op if the session isn't cached here (the run will still be re-attachable via
|
|
114
|
+
* its checkpoint). */
|
|
115
|
+
noteTaskRun(sessionId, taskId) {
|
|
116
|
+
const e = this.entries.get(sessionId);
|
|
117
|
+
if (e) {
|
|
118
|
+
e.lastTaskId = taskId;
|
|
119
|
+
e.lastActiveAt = Date.now();
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
/** List the live cache as {@link SessionSummary} projections, newest-first by `lastActiveAt` (so a shell's
|
|
123
|
+
* `/resume` shows recent sessions + their last run first). The in-memory store lists only its live cache,
|
|
124
|
+
* not evicted/durable history — a durable backend overrides this to list persisted sessions. */
|
|
125
|
+
async list() {
|
|
126
|
+
return [...this.entries.entries()]
|
|
127
|
+
.map(([sessionId, e]) => ({
|
|
128
|
+
sessionId,
|
|
129
|
+
lastActiveAt: e.lastActiveAt,
|
|
130
|
+
...(e.createdAt !== undefined && e.createdAt !== "" ? { createdAt: e.createdAt } : {}),
|
|
131
|
+
...(e.lastTaskId !== undefined ? { lastTaskId: e.lastTaskId } : {}),
|
|
132
|
+
...(e.forkedFrom !== undefined ? { forkedFrom: e.forkedFrom } : {}),
|
|
133
|
+
}))
|
|
134
|
+
.sort((a, b) => b.lastActiveAt - a.lastActiveAt);
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* design/110 (F3) — FORK a session: copy `sourceId`'s committed history into a NEW session and return its id
|
|
138
|
+
* (or `null` when the source doesn't exist). Delegates to the backing repo's `fork`, so a durable repo persists the
|
|
139
|
+
* branch; the in-memory repo holds it in-process. Registering the result in this cache makes `acquire(forkedId)`
|
|
140
|
+
* hit immediately — the synchronous child run that `Agent(subagent_type:"fork")` launches resumes the fork without a repo round-trip.
|
|
141
|
+
*
|
|
142
|
+
* Adding this method is what makes {@link hasSessionFork} true for a `TtlSessionStore` wrapping ANY repo, so the
|
|
143
|
+
* fork capability mounts (it was INERT before — the durable repo had `fork` but the store never exposed it).
|
|
144
|
+
*/
|
|
145
|
+
async fork(sourceId, owner) {
|
|
146
|
+
// Resume the source from its committed history. A missing id → null: forking a non-existent session must NEVER
|
|
147
|
+
// create-empty (unlike `acquire`/`openOrCreate`, which create-on-miss) — else a fork of a bad id would hand back
|
|
148
|
+
// an empty session masquerading as the parent's context. A real backend error (not `not_found`) is not "source
|
|
149
|
+
// missing" — rethrow it so the fork tool reports a fork FAILURE, not a (wrong) "source not found".
|
|
150
|
+
let source;
|
|
151
|
+
try {
|
|
152
|
+
source = await this.repo.open({ id: sourceId, createdAt: "" });
|
|
153
|
+
}
|
|
154
|
+
catch (err) {
|
|
155
|
+
if (isNotFound(err)) {
|
|
156
|
+
return null;
|
|
157
|
+
}
|
|
158
|
+
throw err;
|
|
159
|
+
}
|
|
160
|
+
// F4: when the source's leaf is an IN-FLIGHT assistant turn (tool calls emitted, results not yet committed —
|
|
161
|
+
// exactly the state while THIS Fork tool's own call executes), fork to its PARENT so the child does not inherit
|
|
162
|
+
// an orphan tool-call that wake/resume reconciliation would taint with an [INTERRUPTED] result. A settled leaf
|
|
163
|
+
// forks whole (`{}`). `/branch` and explicit-entryId callers do not reach this path (they call `repo.fork` directly).
|
|
164
|
+
const forkOptions = await settledForkOptions(source);
|
|
165
|
+
// `owner` scopes the new session for a multi-tenant durable repo. The default-typed `SessionRepo.fork` options
|
|
166
|
+
// (`{entryId?, position?, id?}`) carry no `owner` field — the bundled in-memory/file/pg repos ignore the extra key;
|
|
167
|
+
// a multi-tenant repo reads it. Built as a loose object + cast so the optional `owner` doesn't fight the static type.
|
|
168
|
+
const forkParams = { ...forkOptions, id: uuidv7() };
|
|
169
|
+
if (owner != null) {
|
|
170
|
+
forkParams.owner = owner;
|
|
171
|
+
}
|
|
172
|
+
const forked = await this.repo.fork(await source.getMetadata(), forkParams);
|
|
173
|
+
const meta = await forked.getMetadata();
|
|
174
|
+
// Register the fork in the cache (mirrors createAndStore) so the immediate child `acquire(forkedId)` hits it;
|
|
175
|
+
// a durable repo also persisted it, so a later cross-replica resume re-opens the same history.
|
|
176
|
+
this.entries.set(meta.id, {
|
|
177
|
+
session: forked,
|
|
178
|
+
lastActiveAt: Date.now(),
|
|
179
|
+
createdAt: meta.createdAt,
|
|
180
|
+
// F7 fork-GC seam: prefer the repo-stamped lineage; fall back to the known source for a repo
|
|
181
|
+
// that predates the forkedFrom stamp.
|
|
182
|
+
forkedFrom: meta.forkedFrom ?? sourceId,
|
|
183
|
+
});
|
|
184
|
+
return meta.id;
|
|
185
|
+
}
|
|
186
|
+
/** Drop a session from the live set. With a durable repo (`evict: "forget"`) the history is kept. */
|
|
187
|
+
async release(sessionId) {
|
|
188
|
+
// A pinned session backs a COMMITTED durable checkpoint awaiting resume — never release/delete it (else the
|
|
189
|
+
// checkpoint is orphaned), mirroring sweep()'s pin guard. Reachable when a committed suspend is MASKED by a
|
|
190
|
+
// higher-priority failure status (budget/threw/output.invalid), so a caller's isDurablePause() check on the
|
|
191
|
+
// result status misses it and releases unconditionally (R6 bug-hunt). unpin() (on resume/expiry) re-enables it.
|
|
192
|
+
if (this.pinned.has(sessionId)) {
|
|
193
|
+
return;
|
|
194
|
+
}
|
|
195
|
+
const e = this.entries.get(sessionId);
|
|
196
|
+
if (!e) {
|
|
197
|
+
return;
|
|
198
|
+
}
|
|
199
|
+
this.entries.delete(sessionId);
|
|
200
|
+
if (this.evictPolicy === "delete") {
|
|
201
|
+
await this.repo.delete(await e.session.getMetadata());
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
/** Drop only the cached view — the repo keeps the session regardless of `evictPolicy`, so a re-acquire
|
|
205
|
+
* re-opens the SAME history (B-17: the reconcile retry / prepare-throw paths must never delete). Cost
|
|
206
|
+
* on the default in-memory repo: ONE retained session object **per forgotten id** until process end
|
|
207
|
+
* (invisible to `size`/`sweep`, which track the cache) — accumulation across many distinct forgotten
|
|
208
|
+
* ids is the accepted trade-off vs silent history loss; deployments with churn use a durable repo,
|
|
209
|
+
* where retention is the backend's normal job. A pinned id stays pinned (a forget must never expose a
|
|
210
|
+
* suspended task's session to sweep eviction). */
|
|
211
|
+
forget(sessionId) {
|
|
212
|
+
this.entries.delete(sessionId);
|
|
213
|
+
}
|
|
214
|
+
/** Pin a session so idle sweep can't evict it while a design/45 checkpoint awaits resume (§5). */
|
|
215
|
+
pin(sessionId) {
|
|
216
|
+
this.pinned.add(sessionId);
|
|
217
|
+
}
|
|
218
|
+
/** Release a design/45 pin (on resume or checkpoint expiry); the session resumes normal idle eviction. */
|
|
219
|
+
unpin(sessionId) {
|
|
220
|
+
this.pinned.delete(sessionId);
|
|
221
|
+
}
|
|
222
|
+
/** Evict idle-expired sessions from the cache. Deletes durable history only when `evict: "delete"`. */
|
|
223
|
+
sweep(now = Date.now()) {
|
|
224
|
+
for (const [id, e] of this.entries) {
|
|
225
|
+
// A pinned session backs a suspended task awaiting resume — never evict it on the idle timer (§5).
|
|
226
|
+
if (this.pinned.has(id)) {
|
|
227
|
+
continue;
|
|
228
|
+
}
|
|
229
|
+
if (now - e.lastActiveAt > this.defaultTtlMs) {
|
|
230
|
+
this.entries.delete(id);
|
|
231
|
+
if (this.evictPolicy === "delete") {
|
|
232
|
+
void this.repo.delete({ id, createdAt: "" });
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
get size() {
|
|
238
|
+
return this.entries.size;
|
|
239
|
+
}
|
|
240
|
+
dispose() {
|
|
241
|
+
if (this.sweepTimer) {
|
|
242
|
+
clearInterval(this.sweepTimer);
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* design/110 (F4) — pick the fork point so a child does NOT inherit an in-flight (uncommitted) tool call.
|
|
248
|
+
*
|
|
249
|
+
* The agent loop commits the assistant turn (`message_end` → `appendMessage`) BEFORE it executes that turn's tool
|
|
250
|
+
* calls. So while the Fork tool's own `execute` runs, the source session's LEAF is the assistant message that carries
|
|
251
|
+
* the Fork tool-call (and any sibling parallel calls) with NO tool results behind it yet. Forking the whole log would
|
|
252
|
+
* copy that orphan call into the child, and the child's wake-time `reconcileInterruptedSession` would inject an
|
|
253
|
+
* `[INTERRUPTED]` result for it — polluting the inherited context ("I called Fork → it was interrupted").
|
|
254
|
+
*
|
|
255
|
+
* Detection: leaf is an assistant `message` whose `content` includes a `toolCall` block (the message shape — there is
|
|
256
|
+
* NO `toolCalls` field; tool calls are content blocks, mirroring `agent-loop.ts`'s `content.filter(c => c.type ===
|
|
257
|
+
* "toolCall")`). When so, fork at the leaf's PARENT (`position:"at"` includes the parent, excludes the assistant turn)
|
|
258
|
+
* — the correct fork semantics: "inherit my context up to, but not including, the spawn call". A settled leaf, or an
|
|
259
|
+
* unsettled assistant that is somehow a root (no `parentId`, fail-safe), forks the whole log (`{}`).
|
|
260
|
+
*/
|
|
261
|
+
async function settledForkOptions(source) {
|
|
262
|
+
const storage = source.getStorage();
|
|
263
|
+
// Walk from the leaf to the nearest assistant message. At fork time (mid-Fork-execute) the most-recent assistant
|
|
264
|
+
// turn is the IN-FLIGHT one whose tool calls are still running. A leaf-ONLY check covers the PARALLEL default (all
|
|
265
|
+
// `toolResult`s commit only after Promise.all → leaf IS the assistant) and a Fork-first sequential turn, but MISSES
|
|
266
|
+
// the case where Fork is NOT the turn's first call under SEQUENTIAL execution: an earlier sibling call's `toolResult`
|
|
267
|
+
// has already committed and is the leaf (review-flagged edge). Skip those trailing `toolResult` messages to reach the
|
|
268
|
+
// turn's assistant, then fork at ITS parent — so the child never inherits the orphan Fork call.
|
|
269
|
+
let id = await storage.getLeafId();
|
|
270
|
+
while (id) {
|
|
271
|
+
const entry = await storage.getEntry(id);
|
|
272
|
+
if (!entry || entry.type !== "message") {
|
|
273
|
+
return {};
|
|
274
|
+
}
|
|
275
|
+
if (entry.message.role === "assistant") {
|
|
276
|
+
// The in-flight turn — fork BEFORE it iff it carries a tool call (the Fork call + any siblings). A settled
|
|
277
|
+
// text-only assistant, or one with no parent (fail-safe), forks the whole log (`{}`). `position:"at"` includes
|
|
278
|
+
// the parent + excludes the assistant turn = "inherit my context up to, but not including, the spawn call".
|
|
279
|
+
const hasToolCall = Array.isArray(entry.message.content) &&
|
|
280
|
+
entry.message.content.some((c) => c.type === "toolCall");
|
|
281
|
+
return hasToolCall && entry.parentId ? { entryId: entry.parentId, position: "at" } : {};
|
|
282
|
+
}
|
|
283
|
+
if (entry.message.role !== "toolResult") {
|
|
284
|
+
// A user/other message reached before any assistant ⟹ the leaf is a settled boundary; no in-flight turn.
|
|
285
|
+
return {};
|
|
286
|
+
}
|
|
287
|
+
id = entry.parentId;
|
|
288
|
+
}
|
|
289
|
+
return {};
|
|
290
|
+
}
|
|
291
|
+
/** A repo `open` miss for a missing id. */
|
|
292
|
+
function isNotFound(err) {
|
|
293
|
+
return (typeof err === "object" &&
|
|
294
|
+
err !== null &&
|
|
295
|
+
"code" in err &&
|
|
296
|
+
err.code === "not_found");
|
|
297
|
+
}
|
|
298
|
+
//# sourceMappingURL=session-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-store.js","sourceRoot":"","sources":["../../src/core/session-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
export { Session } from "../internal/harness.js";
|
|
2
|
+
export type { SessionApi } from "../internal/harness.js";
|
|
3
|
+
export { InMemorySessionRepo, InMemorySessionStorage, uuidv7, validateEntriesForImport, StreamingImportValidator, } from "../internal/harness.js";
|
|
4
|
+
export { BaseSessionStorage, leafIdAfterEntry, } from "../internal/harness.js";
|
|
5
|
+
export type { SessionStorage, SessionRepo, SessionMetadata, SessionTreeEntry, } from "../internal/harness.js";
|
|
6
|
+
export { SessionError } from "../internal/harness.js";
|
|
7
|
+
export type { SessionWriteOptions } from "../internal/harness.js";
|
|
8
|
+
import type { SessionApi } from "../internal/harness.js";
|
|
9
|
+
import type { SessionTreeEntry } from "../internal/harness.js";
|
|
10
|
+
/** True when `err` is a session optimistic-lock conflict (a concurrent writer won the branch leaf). */
|
|
11
|
+
export declare function isSessionConflict(err: unknown): boolean;
|
|
12
|
+
/** A session handed back by a {@link SessionStore}: the harness `Session` plus its resolved id. */
|
|
13
|
+
export interface AcquiredSession {
|
|
14
|
+
session: SessionApi;
|
|
15
|
+
sessionId: string;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* A lightweight, read-only projection of one session for a `/resume` list (shell K-5 — re-attach without an
|
|
19
|
+
* N+1 walk). Returned in bulk by {@link SessionStore.list}, newest-first by `lastActiveAt` by convention.
|
|
20
|
+
* `lastTaskId` is the engine's term for what the service/wire surfaces as the session's **`lastRunId`** — the
|
|
21
|
+
* most recent task run on this session, so a shell re-attaches in ONE hop.
|
|
22
|
+
*/
|
|
23
|
+
export interface SessionSummary {
|
|
24
|
+
/** The session id. */
|
|
25
|
+
sessionId: string;
|
|
26
|
+
/** When the session was created ({@link SessionMetadata.createdAt}, ISO string); absent when the backend's
|
|
27
|
+
* cache view doesn't carry it. */
|
|
28
|
+
createdAt?: string;
|
|
29
|
+
/** Epoch ms the session was last acquired / touched / ran — the newest-first sort key for "recent sessions". */
|
|
30
|
+
lastActiveAt: number;
|
|
31
|
+
/** The most recent task run on this session (core's `taskId`; the service projects it as `lastRunId`).
|
|
32
|
+
* Absent until a task has run on the session (recorded via {@link SessionStore.noteTaskRun}). */
|
|
33
|
+
lastTaskId?: string;
|
|
34
|
+
/** F7 fork-GC seam: the parent session this one was forked from ({@link SessionMetadata.forkedFrom}).
|
|
35
|
+
* Lets a consumer render/reap fork lineage; absent on non-forked sessions and on cache views that
|
|
36
|
+
* predate the fork. The durable source of truth is the repo's persisted metadata. */
|
|
37
|
+
forkedFrom?: string;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* The session lifecycle/caching layer the {@link Runner} depends on.
|
|
41
|
+
*
|
|
42
|
+
* `TtlSessionStore` is the default (in-memory, 7-day idle TTL). Provide a custom implementation
|
|
43
|
+
* to back sessions with durable, external storage (the "Session center"): `acquire` reconstructs
|
|
44
|
+
* a session from the persisted event log so any stateless runner instance can resume it.
|
|
45
|
+
*
|
|
46
|
+
* Implementations must be safe under concurrent `acquire` of the same id (return one session).
|
|
47
|
+
*/
|
|
48
|
+
export interface SessionStore {
|
|
49
|
+
/** Get an existing session by id, or create one (optionally with a caller-supplied id). design/114 Phase3:
|
|
50
|
+
* `opts.requireExisting` ⇒ a store MUST fail loud (throw a `not_found` {@link SessionError}) on a genuinely
|
|
51
|
+
* missing id rather than create-on-miss — so a reuse-style warm-resume of a gone session errors instead of
|
|
52
|
+
* silently starting a fresh empty run. A store that cannot honor it MUST still not silently create (either
|
|
53
|
+
* implement the check or reject the option). */
|
|
54
|
+
acquire(sessionId?: string, opts?: {
|
|
55
|
+
requireExisting?: boolean;
|
|
56
|
+
}): Promise<AcquiredSession>;
|
|
57
|
+
/** Mark a session recently active (resets idle TTL where applicable). May be async for durable stores. */
|
|
58
|
+
touch(sessionId: string): void | Promise<void>;
|
|
59
|
+
/** Drop a session from the live set (e.g. a throwaway task). Durable history may be retained by the backend. */
|
|
60
|
+
release(sessionId: string): Promise<void>;
|
|
61
|
+
/**
|
|
62
|
+
* Drop only the CACHED view of a session — **never** deletes history (unlike `release`, which with the
|
|
63
|
+
* in-memory `TtlSessionStore`'s default `evict: "delete"` policy removes the session from the repo too).
|
|
64
|
+
* The Runner uses this where the intent is "discard a stale view and re-wake", and on a prepare-phase
|
|
65
|
+
* throw after acquire (audit B-17 + the 1.93.0 throw-cleanup contract gap: calling `release` there
|
|
66
|
+
* silently DELETED an existing session's whole history on the default store — the re-acquire then
|
|
67
|
+
* continued on an empty same-id session). **Optional, but custom stores SHOULD implement it**: when
|
|
68
|
+
* absent the Runner performs NO fallback (it never substitutes `release`, whose contract permits
|
|
69
|
+
* deletion — B-17 council) — the cached view is simply not dropped, so a persistent reconcile conflict
|
|
70
|
+
* exhausts its retry budget and propagates instead of risking history. A store whose `release` is
|
|
71
|
+
* already history-safe can implement `forget = release`.
|
|
72
|
+
*/
|
|
73
|
+
forget?(sessionId: string): void | Promise<void>;
|
|
74
|
+
/**
|
|
75
|
+
* Protect a session from idle eviction while a design/45 checkpoint references it (a suspended task
|
|
76
|
+
* must still be resumable). `pin` before suspend, `unpin` on resume/expiry. **Optional**: a durable
|
|
77
|
+
* backend that never idle-GCs sessions (service's `tidb-session-store`) implements both as no-ops and
|
|
78
|
+
* is still safe; only the in-memory `TtlSessionStore` needs a real pin (its `sweep` skips pinned ids).
|
|
79
|
+
* See design/45 §5 / M3.
|
|
80
|
+
*/
|
|
81
|
+
pin?(sessionId: string): void | Promise<void>;
|
|
82
|
+
unpin?(sessionId: string): void | Promise<void>;
|
|
83
|
+
/**
|
|
84
|
+
* Record that a task run STARTED on a session (the Runner calls this at task start, when both ids are
|
|
85
|
+
* known) so the store can surface it as {@link SessionSummary.lastTaskId} — letting a `/resume` list
|
|
86
|
+
* re-attach to the most recent run, even one still in-flight or suspended. **Optional + best-effort**: a
|
|
87
|
+
* store that surfaces no session list may ignore it; it MUST NOT throw. The engine's `taskId` is the
|
|
88
|
+
* service's `lastRunId`.
|
|
89
|
+
*/
|
|
90
|
+
noteTaskRun?(sessionId: string, taskId: string): void | Promise<void>;
|
|
91
|
+
/**
|
|
92
|
+
* Enumerate known sessions as lightweight {@link SessionSummary} projections (newest-first by
|
|
93
|
+
* `lastActiveAt`) so a shell's `/resume` lists sessions + their last run in ONE call. **Optional**: the
|
|
94
|
+
* in-memory `TtlSessionStore` lists its live cache; a durable backend lists persisted sessions. A store
|
|
95
|
+
* that cannot enumerate omits this (the shell then has no session-list affordance — honest degrade).
|
|
96
|
+
*/
|
|
97
|
+
list?(): Promise<SessionSummary[]>;
|
|
98
|
+
/**
|
|
99
|
+
* design/110 — FORK a session: copy `sourceId`'s durable history (root→leaf) into a NEW session and return its
|
|
100
|
+
* id (or `null` if the source doesn't exist). The forked session is independent (writes to it don't touch the
|
|
101
|
+
* source). Backs CC `/fork` (continue with the parent's full context) AND the inheriting-context subagent fork
|
|
102
|
+
* (run a child on the fork so it inherits the parent context + shares the prompt-cache prefix). **Optional**:
|
|
103
|
+
* a store implements it only if it can replay history. `TtlSessionStore` DOES — it delegates to its
|
|
104
|
+
* {@link SessionRepo} (so {@link hasSessionFork} is true) — BUT the fork is only as durable as that repo:
|
|
105
|
+
* an in-memory repo forks IN-PROCESS yet loses the copy on restart, while a durable repo (file/pg) makes the
|
|
106
|
+
* fork survive restart/replica. **Capability presence ≠ durability** — a cross-replica consumer (design/114
|
|
107
|
+
* warm-resume) MUST wire a durable repo; core cannot verify durability, only fail-loud on a missing source at
|
|
108
|
+
* fork time (returns `null`). `owner` (if given) scopes the new session for multi-tenant stores. MUST copy the COMMITTED leaf (an in-flight
|
|
109
|
+
* uncommitted turn of an active source is not included — a fork is a snapshot at the fork point).
|
|
110
|
+
*/
|
|
111
|
+
fork?(sourceId: string, owner?: string | null): Promise<string | null>;
|
|
112
|
+
/** Number of live/cached sessions (best-effort). */
|
|
113
|
+
readonly size: number;
|
|
114
|
+
/** Release resources (timers, connections). Best-effort; must not throw. */
|
|
115
|
+
dispose(): void | Promise<void>;
|
|
116
|
+
}
|
|
117
|
+
/** Structural detection: does this store expose the optional {@link SessionStore.fork}? Mounts the fork
|
|
118
|
+
* capability only when true (INERT otherwise — mirrors `hasScheduler`/`hasBackgroundShell`). */
|
|
119
|
+
export declare function hasSessionFork(store: SessionStore): store is SessionStore & {
|
|
120
|
+
fork: NonNullable<SessionStore["fork"]>;
|
|
121
|
+
};
|
|
122
|
+
/**
|
|
123
|
+
* F3 bounded-wake recipe, packaged. Given the **path-ordered** entries of a branch
|
|
124
|
+
* (root→leaf, e.g. `await session.getBranch(leafId)` or a durable store's leaf-walk),
|
|
125
|
+
* returns the smallest self-contained tail a stateless runner needs to resume:
|
|
126
|
+
*
|
|
127
|
+
* - `floorEntryId` = the **latest** compaction's `firstKeptEntryId` (null if never compacted),
|
|
128
|
+
* - `tail` = entries from that floor to the leaf — i.e. the surviving compaction summary
|
|
129
|
+
* plus every message kept after it. Everything before the floor is already folded into
|
|
130
|
+
* that summary, so it can stay cold in durable storage.
|
|
131
|
+
*
|
|
132
|
+
* Hand the result straight to a floored storage:
|
|
133
|
+
* `new InMemorySessionStorage({ entries: tail, floorEntryId })` (or your durable equivalent).
|
|
134
|
+
* `buildContext()` on that is identical to waking from the full tree — see `session-floor.test.ts`.
|
|
135
|
+
*
|
|
136
|
+
* Pure and allocation-light: it scans for the last compaction and slices. If the tree was never
|
|
137
|
+
* compacted (or the floor isn't on this path — shouldn't happen for a real branch) it returns the
|
|
138
|
+
* full input unchanged with `floorEntryId: null`, so callers can always use the result verbatim.
|
|
139
|
+
*/
|
|
140
|
+
export declare function boundedTail(pathEntries: readonly SessionTreeEntry[]): {
|
|
141
|
+
tail: SessionTreeEntry[];
|
|
142
|
+
floorEntryId: string | null;
|
|
143
|
+
};
|
|
144
|
+
//# sourceMappingURL=session.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/core/session.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
// Pluggable session building blocks. A durable backend (e.g. a TiDB session event-log center)
|
|
2
|
+
// is built from these: implement/extend `SessionStorage` (usually `extends BaseSessionStorage`,
|
|
3
|
+
// overriding appendEntry/setLeafId to persist), wrap it in `Session`, and expose it via a
|
|
4
|
+
// `SessionStore` whose `acquire` reconstructs a session from the persisted log (= wake/resume).
|
|
5
|
+
export { Session } from "../internal/harness.js";
|
|
6
|
+
export { InMemorySessionRepo, InMemorySessionStorage, uuidv7, validateEntriesForImport, StreamingImportValidator, } from "../internal/harness.js";
|
|
7
|
+
export { BaseSessionStorage, leafIdAfterEntry, } from "../internal/harness.js";
|
|
8
|
+
// Optimistic-lock seam (F2): durable backends use SessionWriteOptions.expectedLeafId for CAS;
|
|
9
|
+
// a losing concurrent writer gets SessionError("conflict") — detect it with isSessionConflict().
|
|
10
|
+
export { SessionError } from "../internal/harness.js";
|
|
11
|
+
import { SessionError } from "../internal/harness.js";
|
|
12
|
+
/** True when `err` is a session optimistic-lock conflict (a concurrent writer won the branch leaf). */
|
|
13
|
+
export function isSessionConflict(err) {
|
|
14
|
+
return err instanceof SessionError && err.code === "conflict";
|
|
15
|
+
}
|
|
16
|
+
/** Structural detection: does this store expose the optional {@link SessionStore.fork}? Mounts the fork
|
|
17
|
+
* capability only when true (INERT otherwise — mirrors `hasScheduler`/`hasBackgroundShell`). */
|
|
18
|
+
export function hasSessionFork(store) {
|
|
19
|
+
return typeof store.fork === "function";
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* F3 bounded-wake recipe, packaged. Given the **path-ordered** entries of a branch
|
|
23
|
+
* (root→leaf, e.g. `await session.getBranch(leafId)` or a durable store's leaf-walk),
|
|
24
|
+
* returns the smallest self-contained tail a stateless runner needs to resume:
|
|
25
|
+
*
|
|
26
|
+
* - `floorEntryId` = the **latest** compaction's `firstKeptEntryId` (null if never compacted),
|
|
27
|
+
* - `tail` = entries from that floor to the leaf — i.e. the surviving compaction summary
|
|
28
|
+
* plus every message kept after it. Everything before the floor is already folded into
|
|
29
|
+
* that summary, so it can stay cold in durable storage.
|
|
30
|
+
*
|
|
31
|
+
* Hand the result straight to a floored storage:
|
|
32
|
+
* `new InMemorySessionStorage({ entries: tail, floorEntryId })` (or your durable equivalent).
|
|
33
|
+
* `buildContext()` on that is identical to waking from the full tree — see `session-floor.test.ts`.
|
|
34
|
+
*
|
|
35
|
+
* Pure and allocation-light: it scans for the last compaction and slices. If the tree was never
|
|
36
|
+
* compacted (or the floor isn't on this path — shouldn't happen for a real branch) it returns the
|
|
37
|
+
* full input unchanged with `floorEntryId: null`, so callers can always use the result verbatim.
|
|
38
|
+
*/
|
|
39
|
+
export function boundedTail(pathEntries) {
|
|
40
|
+
// Latest compaction wins: a re-compaction's summary already folds in the prior one.
|
|
41
|
+
let lastCompaction;
|
|
42
|
+
for (const e of pathEntries) {
|
|
43
|
+
if (e.type === "compaction")
|
|
44
|
+
lastCompaction = e;
|
|
45
|
+
}
|
|
46
|
+
if (!lastCompaction)
|
|
47
|
+
return { tail: [...pathEntries], floorEntryId: null };
|
|
48
|
+
const floorEntryId = lastCompaction.firstKeptEntryId;
|
|
49
|
+
const floorIdx = pathEntries.findIndex((e) => e.id === floorEntryId);
|
|
50
|
+
if (floorIdx < 0) {
|
|
51
|
+
// Defensive: floor not on this path — don't drop history we can't account for.
|
|
52
|
+
return { tail: [...pathEntries], floorEntryId: null };
|
|
53
|
+
}
|
|
54
|
+
return { tail: pathEntries.slice(floorIdx), floorEntryId };
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=session.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/core/session.ts"],"names":[],"mappings":"AAAA,8FAA8F;AAC9F,gGAAgG;AAChG,0FAA0F;AAC1F,gGAAgG;AAChG,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAIjD,OAAO,EACL,mBAAmB,EACnB,sBAAsB,EACtB,MAAM,EACN,wBAAwB,EACxB,wBAAwB,GACzB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,wBAAwB,CAAC;AAOhC,8FAA8F;AAC9F,iGAAiG;AACjG,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAGtD,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAItD,uGAAuG;AACvG,MAAM,UAAU,iBAAiB,CAAC,GAAY;IAC5C,OAAO,GAAG,YAAY,YAAY,IAAI,GAAG,CAAC,IAAI,KAAK,UAAU,CAAC;AAChE,CAAC;AA4GD;iGACiG;AACjG,MAAM,UAAU,cAAc,CAAC,KAAmB;IAChD,OAAO,OAAQ,KAA4B,CAAC,IAAI,KAAK,UAAU,CAAC;AAClE,CAAC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,WAAW,CAAC,WAAwC;IAIlE,oFAAoF;IACpF,IAAI,cAA2C,CAAC;IAChD,KAAK,MAAM,CAAC,IAAI,WAAW,EAAE,CAAC;QAC5B,IAAI,CAAC,CAAC,IAAI,KAAK,YAAY;YAAE,cAAc,GAAG,CAAoB,CAAC;IACrE,CAAC;IACD,IAAI,CAAC,cAAc;QAAE,OAAO,EAAE,IAAI,EAAE,CAAC,GAAG,WAAW,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;IAE3E,MAAM,YAAY,GAAG,cAAc,CAAC,gBAAgB,CAAC;IACrD,MAAM,QAAQ,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,YAAY,CAAC,CAAC;IACrE,IAAI,QAAQ,GAAG,CAAC,EAAE,CAAC;QACjB,+EAA+E;QAC/E,OAAO,EAAE,IAAI,EAAE,CAAC,GAAG,WAAW,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;IACxD,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,WAAW,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,YAAY,EAAE,CAAC;AAC7D,CAAC"}
|