@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,157 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SVC-2 / core [381] item ⑥ (onboarded from service per channel [375]) — FILE-backed durable
|
|
3
|
+
* {@link WorkflowJournalStore} for the LOCAL (DB-less, TOC) backend, so `resumeFromRunId` survives a PROCESS
|
|
4
|
+
* RESTART on a single-user deployment (the shell's monitor `r restart` path). Completes the backend triple:
|
|
5
|
+
* tidb/pg = SQL twins (cross-replica), local = THIS (one box, crash-safe), replacing core's InMemory store
|
|
6
|
+
* (which made a TOC restart silently resolve to an empty journal → full live re-run — safe, but the resume
|
|
7
|
+
* optimization the flywheel asked about never fired across restarts).
|
|
8
|
+
*
|
|
9
|
+
* Layout: ONE append-only JSONL ledger per RUN (`<root>/workflow-journal/<runId>.jsonl` — runId is engine-mint
|
|
10
|
+
* uuid, still passed through core's strict `sanitizePathComponent` backstop). One line = one
|
|
11
|
+
* `{scope, ordinal, callKey, result}` record; replay is last-writer-wins per ordinal (the InMemory
|
|
12
|
+
* `byOrdinal.set` semantics — a resumed run re-appends its replayed prefix verbatim, idempotent). A torn final
|
|
13
|
+
* line (crash mid-append) is dropped on replay, the same crash-safety contract as FileWorkflowRunStore.
|
|
14
|
+
*
|
|
15
|
+
* Contract parity with the twins:
|
|
16
|
+
* - LOAD-BEARING: append/load throw on real I/O failure (a silently-dropped entry would silently re-run work) —
|
|
17
|
+
* EXCEPT an oversize result, which is skip-journaled (shared `oversizeJournalResult` guard: that ordinal is
|
|
18
|
+
* just not cached; the resume re-runs that one agent live).
|
|
19
|
+
* - SCOPE-GUARDED (CORE-9 BLOCKER): `load(runId, scope)` returns [] unless the run's recorded scope matches —
|
|
20
|
+
* an LLM-controlled cross-scope `resumeFromRunId` discloses nothing. A same-run append under a DIFFERENT
|
|
21
|
+
* scope throws (identity bug — matches InMemory).
|
|
22
|
+
* - `deleteByRun` (service GC extra): unlink the run's ledger; idempotent.
|
|
23
|
+
* Files are 0o600 in a 0o700 dir (a journaled TaskResult carries tool output — operator-only, matching the
|
|
24
|
+
* notify-journal posture). Lazily opened fds, closed + evicted on deleteByRun/dispose.
|
|
25
|
+
*/
|
|
26
|
+
import { closeSync, existsSync, fsyncSync, mkdirSync, openSync, readFileSync, unlinkSync, writeSync } from "node:fs";
|
|
27
|
+
import { join } from "node:path";
|
|
28
|
+
import { callKeyOrdinal } from "../../core/workflow-journal-store.js";
|
|
29
|
+
import { sanitizePathComponent } from "./fs-atomic.js";
|
|
30
|
+
/**
|
|
31
|
+
* SVC-2 — the shared size bound for a journaled workflow-agent result, so ALL backends DEGRADE IDENTICALLY on
|
|
32
|
+
* an oversize TaskResult (no dialect divergence). Inlined from service's `workflow-journal-limits` on
|
|
33
|
+
* onboarding (channel [375]) — the 5 MiB figure aligns with TiDB's ~6 MiB per-row txn-entry-size-limit (a row
|
|
34
|
+
* over it is REJECTED with "entry too large"); a LOAD-BEARING `append` that hit that would THROW and kill the
|
|
35
|
+
* whole workflow. PostgreSQL TEXT has no such low limit, so without a shared guard the same large result would
|
|
36
|
+
* journal fine on PG but fail the workflow on TiDB. All backends instead skip-journal a result whose serialized
|
|
37
|
+
* size exceeds {@link MAX_JOURNAL_RESULT_BYTES} (a no-op, never an insert/throw): the agent's ordinal is simply
|
|
38
|
+
* not cached, so a resume re-runs that one agent live. Resume is an optimization — a too-big-to-cache result is
|
|
39
|
+
* a graceful degrade, not a failure. Measured in BYTES (UTF-8) — a multibyte result can be larger than its
|
|
40
|
+
* `.length` in chars.
|
|
41
|
+
*/
|
|
42
|
+
export const MAX_JOURNAL_RESULT_BYTES = 5 * 1024 * 1024;
|
|
43
|
+
/** True when a serialized journal result is too large to store (UTF-8 byte length over {@link MAX_JOURNAL_RESULT_BYTES}). */
|
|
44
|
+
export function oversizeJournalResult(serialized) {
|
|
45
|
+
return Buffer.byteLength(serialized, "utf8") > MAX_JOURNAL_RESULT_BYTES;
|
|
46
|
+
}
|
|
47
|
+
export class FileWorkflowJournalStore {
|
|
48
|
+
fsyncEnabled;
|
|
49
|
+
dir;
|
|
50
|
+
fds = new Map();
|
|
51
|
+
/** Per-run committed scope, cached at first touch — the append-path scope guard must NOT re-read the whole
|
|
52
|
+
* ledger per append (a journaled result can be MBs; a many-agent workflow would go O(n²) on disk). One replay
|
|
53
|
+
* discovers it; every later append compares against the cache. */
|
|
54
|
+
scopes = new Map();
|
|
55
|
+
constructor(root, fsyncEnabled = true) {
|
|
56
|
+
this.fsyncEnabled = fsyncEnabled;
|
|
57
|
+
this.dir = join(root, "workflow-journal");
|
|
58
|
+
mkdirSync(this.dir, { recursive: true, mode: 0o700 });
|
|
59
|
+
}
|
|
60
|
+
pathFor(runId) {
|
|
61
|
+
return join(this.dir, `${sanitizePathComponent(runId)}.jsonl`);
|
|
62
|
+
}
|
|
63
|
+
/** Replay a run's ledger: last-writer-wins per ordinal; a torn/unparsable line is skipped (uncommitted). */
|
|
64
|
+
replay(runId) {
|
|
65
|
+
let path;
|
|
66
|
+
try {
|
|
67
|
+
path = this.pathFor(runId);
|
|
68
|
+
}
|
|
69
|
+
catch {
|
|
70
|
+
// `resumeFromRunId` is LLM-CONTROLLED on the load path — a traversal-shaped id (sanitizePathComponent
|
|
71
|
+
// throws) must degrade to "no journal" (the resume diverges to live), never crash the workflow start.
|
|
72
|
+
// (An engine-minted append id can't hit this; append's own throw discipline is unaffected.)
|
|
73
|
+
return undefined;
|
|
74
|
+
}
|
|
75
|
+
if (!existsSync(path))
|
|
76
|
+
return undefined;
|
|
77
|
+
let scope;
|
|
78
|
+
const byOrdinal = new Map();
|
|
79
|
+
for (const line of readFileSync(path, "utf8").split("\n")) {
|
|
80
|
+
if (!line.trim())
|
|
81
|
+
continue;
|
|
82
|
+
let rec;
|
|
83
|
+
try {
|
|
84
|
+
rec = JSON.parse(line);
|
|
85
|
+
}
|
|
86
|
+
catch {
|
|
87
|
+
continue; // torn crash-tail — not yet committed state
|
|
88
|
+
}
|
|
89
|
+
if (typeof rec.callKey !== "string" || typeof rec.scope !== "string")
|
|
90
|
+
continue;
|
|
91
|
+
scope = scope ?? rec.scope; // first committed writer fixes the run's scope (fail-closed on later mismatch below)
|
|
92
|
+
if (rec.scope !== scope)
|
|
93
|
+
continue; // never mix scopes within one run's replay
|
|
94
|
+
byOrdinal.set(rec.ordinal, { callKey: rec.callKey, result: rec.result });
|
|
95
|
+
}
|
|
96
|
+
return scope === undefined ? undefined : { scope, byOrdinal };
|
|
97
|
+
}
|
|
98
|
+
async append(runId, scope, entry) {
|
|
99
|
+
const serialized = JSON.stringify(entry.result);
|
|
100
|
+
// Shared twin degrade ({@link oversizeJournalResult}): an oversize result is skip-journaled, never
|
|
101
|
+
// insert/throw — its ordinal isn't cached, so a resume re-runs that ONE agent live. Keeps all backends
|
|
102
|
+
// byte-matched.
|
|
103
|
+
if (oversizeJournalResult(serialized))
|
|
104
|
+
return;
|
|
105
|
+
const committed = this.scopes.get(runId) ?? this.replay(runId)?.scope; // cached, else one disk replay
|
|
106
|
+
if (committed !== undefined && committed !== scope) {
|
|
107
|
+
// runId is a fresh uuid per run; a scope collision is a programming/identity bug (matches InMemory's throw).
|
|
108
|
+
throw new Error(`workflow journal: runId ${runId} already recorded under a different scope`);
|
|
109
|
+
}
|
|
110
|
+
this.scopes.set(runId, committed ?? scope);
|
|
111
|
+
let fd = this.fds.get(runId);
|
|
112
|
+
if (fd === undefined) {
|
|
113
|
+
fd = openSync(this.pathFor(runId), "a", 0o600); // owner-only: a TaskResult carries tool output
|
|
114
|
+
this.fds.set(runId, fd);
|
|
115
|
+
}
|
|
116
|
+
// One record = one writeSync of `json + "\n"` (never split) → the only torn line possible is a crash tail,
|
|
117
|
+
// which replay drops. fsync per append: the journal is LOAD-BEARING (an acked-but-lost entry would replay wrong).
|
|
118
|
+
const line = { scope, ordinal: callKeyOrdinal(entry.callKey), callKey: entry.callKey, result: entry.result };
|
|
119
|
+
writeSync(fd, `${JSON.stringify(line)}\n`);
|
|
120
|
+
if (this.fsyncEnabled)
|
|
121
|
+
fsyncSync(fd);
|
|
122
|
+
}
|
|
123
|
+
async load(runId, scope) {
|
|
124
|
+
const rec = this.replay(runId);
|
|
125
|
+
if (!rec || rec.scope !== scope)
|
|
126
|
+
return []; // missing OR cross-scope → empty (the resume safely diverges to live)
|
|
127
|
+
return [...rec.byOrdinal.entries()].sort((a, b) => a[0] - b[0]).map(([, e]) => e);
|
|
128
|
+
}
|
|
129
|
+
/** GC (service extra, mirrors the SQL twins): drop the run's ledger once the run is terminal + retained. */
|
|
130
|
+
async deleteByRun(runId) {
|
|
131
|
+
const fd = this.fds.get(runId);
|
|
132
|
+
if (fd !== undefined) {
|
|
133
|
+
try {
|
|
134
|
+
closeSync(fd);
|
|
135
|
+
}
|
|
136
|
+
catch { /* already closed */ }
|
|
137
|
+
this.fds.delete(runId);
|
|
138
|
+
}
|
|
139
|
+
this.scopes.delete(runId);
|
|
140
|
+
const path = this.pathFor(runId);
|
|
141
|
+
if (!existsSync(path))
|
|
142
|
+
return 0;
|
|
143
|
+
unlinkSync(path);
|
|
144
|
+
return 1;
|
|
145
|
+
}
|
|
146
|
+
/** Release ledger fds (graceful shutdown; parity with the other file stores' dispose). */
|
|
147
|
+
dispose() {
|
|
148
|
+
for (const fd of this.fds.values()) {
|
|
149
|
+
try {
|
|
150
|
+
closeSync(fd);
|
|
151
|
+
}
|
|
152
|
+
catch { /* best-effort */ }
|
|
153
|
+
}
|
|
154
|
+
this.fds.clear();
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
//# sourceMappingURL=workflow-journal-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow-journal-store.js","sourceRoot":"","sources":["../../../src/stores/file/workflow-journal-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { type WorkflowRunStore, type WorkflowRunSummary } from "../../core/workflow-run-store.js";
|
|
2
|
+
import type { WorkflowRun, WorkflowRunStatus } from "../../orchestration/workflow.js";
|
|
3
|
+
export interface FileWorkflowRunStoreOptions {
|
|
4
|
+
/** When false, a ledger append is NOT fsync'd (the observability store is non-engine-critical). Default true. */
|
|
5
|
+
fsync?: boolean;
|
|
6
|
+
/** Compact the ledger into a snapshot once it exceeds this many events (then truncate). Default 1000. */
|
|
7
|
+
compactEvery?: number;
|
|
8
|
+
}
|
|
9
|
+
export declare class FileWorkflowRunStore implements WorkflowRunStore {
|
|
10
|
+
private readonly dir;
|
|
11
|
+
private readonly tmpDir;
|
|
12
|
+
private readonly ledgerPath;
|
|
13
|
+
private readonly snapshotPath;
|
|
14
|
+
private readonly fsyncEnabled;
|
|
15
|
+
private readonly compactEvery;
|
|
16
|
+
/** Authoritative in-memory state (replayed at boot). The CAS reads/writes THIS; disk is the durable log. */
|
|
17
|
+
private readonly runs;
|
|
18
|
+
/** Per-id async mutex chain (identical shape to `FileCheckpointStore.locks`). */
|
|
19
|
+
private readonly locks;
|
|
20
|
+
/** Number of events appended to the live ledger since the last compaction (drives auto-compaction). */
|
|
21
|
+
private ledgerEvents;
|
|
22
|
+
private log;
|
|
23
|
+
constructor(root: string, opts?: FileWorkflowRunStoreOptions);
|
|
24
|
+
/** Rebuild the authoritative map: snapshot first (the compacted base), then the live ledger's events. */
|
|
25
|
+
private replay;
|
|
26
|
+
/** Fold one ledger event into the authoritative map (last-writer-wins by event order). */
|
|
27
|
+
private applyEvent;
|
|
28
|
+
/**
|
|
29
|
+
* Serialize an op behind any in-flight op on the same id (the in-process per-id async mutex — the SAME
|
|
30
|
+
* `Map<id, Promise>` chain shape as `FileCheckpointStore.withLock`). A prior op's rejection never blocks
|
|
31
|
+
* the chain (awaited `.catch`-guarded). The chain entry is GC'd once it is the settled tail.
|
|
32
|
+
*/
|
|
33
|
+
private withLock;
|
|
34
|
+
/** Commit one ledger event (append + fsync) THEN flip the in-memory map (crash-safe ordering). */
|
|
35
|
+
private commit;
|
|
36
|
+
put(id: string, run: WorkflowRun): Promise<void>;
|
|
37
|
+
get(id: string): Promise<WorkflowRun | null>;
|
|
38
|
+
update(id: string, scope: string, run: WorkflowRun, expect?: {
|
|
39
|
+
rev: number;
|
|
40
|
+
}): Promise<boolean>;
|
|
41
|
+
listByScope(scope: string, opts?: {
|
|
42
|
+
status?: WorkflowRunStatus;
|
|
43
|
+
limit?: number;
|
|
44
|
+
}): Promise<WorkflowRunSummary[]>;
|
|
45
|
+
reap(scope: string, now: number, opts?: {
|
|
46
|
+
maxAgeMs?: number;
|
|
47
|
+
keep?: number;
|
|
48
|
+
}): Promise<number>;
|
|
49
|
+
/** Rewrite the snapshot from the current authoritative map (atomic) and truncate the live ledger. */
|
|
50
|
+
private compact;
|
|
51
|
+
/** Force a compaction now (test/inspection). */
|
|
52
|
+
compactNow(): void;
|
|
53
|
+
/** Test/inspection helper: number of stored runs. */
|
|
54
|
+
get size(): number;
|
|
55
|
+
/** Release the append handle (best-effort). The boot LOCK is released by the backend factory. */
|
|
56
|
+
close(): void;
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=workflow-run-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow-run-store.d.ts","sourceRoot":"","sources":["../../../src/stores/file/workflow-run-store.ts"],"names":[],"mappings":"AACA,OAAO,EAIL,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,EACxB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AA6BtF,MAAM,WAAW,2BAA2B;IAC1C,iHAAiH;IACjH,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,yGAAyG;IACzG,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,qBAAa,oBAAqB,YAAW,gBAAgB;IAC3D,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAS;IAC7B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAU;IACvC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IAEtC,4GAA4G;IAC5G,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAkC;IACvD,iFAAiF;IACjF,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAuC;IAC7D,uGAAuG;IACvG,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,GAAG,CAAY;gBAEX,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,2BAAgC;IAahE,yGAAyG;IACzG,OAAO,CAAC,MAAM;IASd,0FAA0F;IAC1F,OAAO,CAAC,UAAU;IASlB;;;;OAIG;IACH,OAAO,CAAC,QAAQ;IAiBhB,kGAAkG;IAClG,OAAO,CAAC,MAAM;IAOR,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAahD,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAK5C,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,CAAC,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IAqB/F,WAAW,CACf,KAAK,EAAE,MAAM,EACb,IAAI,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,iBAAiB,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GACpD,OAAO,CAAC,kBAAkB,EAAE,CAAC;IAU1B,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IAuCpG,qGAAqG;IACrG,OAAO,CAAC,OAAO;IASf,gDAAgD;IAChD,UAAU,IAAI,IAAI;IAIlB,qDAAqD;IACrD,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,iGAAiG;IACjG,KAAK,IAAI,IAAI;CAGd"}
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
import { join } from "node:path";
|
|
2
|
+
import { WorkflowRunStoreError, isTerminalWorkflowStatus, summarizeWorkflowRun, } from "../../core/workflow-run-store.js";
|
|
3
|
+
import { AppendLog, atomicWriteFile, ensureDir, readJsonlRecords } from "./fs-atomic.js";
|
|
4
|
+
export class FileWorkflowRunStore {
|
|
5
|
+
dir;
|
|
6
|
+
tmpDir;
|
|
7
|
+
ledgerPath;
|
|
8
|
+
snapshotPath;
|
|
9
|
+
fsyncEnabled;
|
|
10
|
+
compactEvery;
|
|
11
|
+
/** Authoritative in-memory state (replayed at boot). The CAS reads/writes THIS; disk is the durable log. */
|
|
12
|
+
runs = new Map();
|
|
13
|
+
/** Per-id async mutex chain (identical shape to `FileCheckpointStore.locks`). */
|
|
14
|
+
locks = new Map();
|
|
15
|
+
/** Number of events appended to the live ledger since the last compaction (drives auto-compaction). */
|
|
16
|
+
ledgerEvents = 0;
|
|
17
|
+
log;
|
|
18
|
+
constructor(root, opts = {}) {
|
|
19
|
+
this.dir = join(root, "workflow-runs");
|
|
20
|
+
this.tmpDir = join(root, "tmp");
|
|
21
|
+
this.ledgerPath = join(this.dir, "runs.jsonl");
|
|
22
|
+
this.snapshotPath = join(this.dir, "runs.snapshot.jsonl");
|
|
23
|
+
this.fsyncEnabled = opts.fsync !== false;
|
|
24
|
+
this.compactEvery = opts.compactEvery ?? 1000;
|
|
25
|
+
ensureDir(this.dir);
|
|
26
|
+
ensureDir(this.tmpDir);
|
|
27
|
+
this.replay();
|
|
28
|
+
this.log = new AppendLog(this.ledgerPath);
|
|
29
|
+
}
|
|
30
|
+
/** Rebuild the authoritative map: snapshot first (the compacted base), then the live ledger's events. */
|
|
31
|
+
replay() {
|
|
32
|
+
for (const snap of readJsonlRecords(this.snapshotPath)) {
|
|
33
|
+
this.runs.set(snap.id, snap);
|
|
34
|
+
}
|
|
35
|
+
const events = readJsonlRecords(this.ledgerPath);
|
|
36
|
+
this.ledgerEvents = events.length;
|
|
37
|
+
for (const ev of events)
|
|
38
|
+
this.applyEvent(ev);
|
|
39
|
+
}
|
|
40
|
+
/** Fold one ledger event into the authoritative map (last-writer-wins by event order). */
|
|
41
|
+
applyEvent(ev) {
|
|
42
|
+
if (ev.t === "delete") {
|
|
43
|
+
this.runs.delete(ev.id);
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
// put / update both replace the row (update already carries the bumped rev in its persisted run).
|
|
47
|
+
this.runs.set(ev.id, ev.run);
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Serialize an op behind any in-flight op on the same id (the in-process per-id async mutex — the SAME
|
|
51
|
+
* `Map<id, Promise>` chain shape as `FileCheckpointStore.withLock`). A prior op's rejection never blocks
|
|
52
|
+
* the chain (awaited `.catch`-guarded). The chain entry is GC'd once it is the settled tail.
|
|
53
|
+
*/
|
|
54
|
+
withLock(id, fn) {
|
|
55
|
+
const prev = this.locks.get(id) ?? Promise.resolve();
|
|
56
|
+
const run = prev.then(() => fn(), () => fn());
|
|
57
|
+
const tail = run.then(() => { }, () => { });
|
|
58
|
+
this.locks.set(id, tail);
|
|
59
|
+
void tail.then(() => {
|
|
60
|
+
if (this.locks.get(id) === tail)
|
|
61
|
+
this.locks.delete(id);
|
|
62
|
+
});
|
|
63
|
+
return run;
|
|
64
|
+
}
|
|
65
|
+
/** Commit one ledger event (append + fsync) THEN flip the in-memory map (crash-safe ordering). */
|
|
66
|
+
commit(ev, fsync) {
|
|
67
|
+
this.log.append(ev, fsync); // durable FIRST
|
|
68
|
+
this.applyEvent(ev); // in-memory flip AFTER the fsync'd append
|
|
69
|
+
this.ledgerEvents++;
|
|
70
|
+
if (this.ledgerEvents >= this.compactEvery)
|
|
71
|
+
this.compact();
|
|
72
|
+
}
|
|
73
|
+
async put(id, run) {
|
|
74
|
+
return this.withLock(id, () => {
|
|
75
|
+
if (this.runs.has(id)) {
|
|
76
|
+
throw new WorkflowRunStoreError("workflow_run.already_exists", `workflow run id already exists`);
|
|
77
|
+
}
|
|
78
|
+
// Defensive deep copy + persist the observed rev (default 0) so `update`'s OCC has a base to bump from.
|
|
79
|
+
const stored = structuredClone(run);
|
|
80
|
+
stored.id = id; // the key is authoritative — a payload with a mismatched id must not poison the projection
|
|
81
|
+
stored.rev = run.rev ?? 0;
|
|
82
|
+
this.commit({ t: "put", id, run: stored }, this.fsyncEnabled);
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
async get(id) {
|
|
86
|
+
const run = this.runs.get(id);
|
|
87
|
+
return run ? structuredClone(run) : null;
|
|
88
|
+
}
|
|
89
|
+
async update(id, scope, run, expect) {
|
|
90
|
+
return this.withLock(id, () => {
|
|
91
|
+
const cur = this.runs.get(id);
|
|
92
|
+
// CAS predicate identical to InMemory: scope in the WHERE (multi-tenant isolation); row must exist.
|
|
93
|
+
if (!cur || cur.scope !== scope) {
|
|
94
|
+
return false;
|
|
95
|
+
}
|
|
96
|
+
// OCC guard, evaluated atomically with the CAS (the per-id mutex serializes it, as the DB serializes a
|
|
97
|
+
// conditional UPDATE): a stale-rev update loses (an intervening update bumped the live rev).
|
|
98
|
+
if (expect !== undefined && (cur.rev ?? 0) !== expect.rev) {
|
|
99
|
+
return false;
|
|
100
|
+
}
|
|
101
|
+
const next = structuredClone(run);
|
|
102
|
+
next.id = id; // the key is authoritative — a payload with a mismatched id must not poison the projection
|
|
103
|
+
next.scope = scope; // scope is immutable for a row — never let an update rewrite the partition key
|
|
104
|
+
next.rev = (cur.rev ?? 0) + 1; // monotonic bump — the OCC key for the next update
|
|
105
|
+
this.commit({ t: "update", id, run: next }, this.fsyncEnabled);
|
|
106
|
+
return true;
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
async listByScope(scope, opts) {
|
|
110
|
+
// READ-ONLY query over the authoritative replayed map (no per-id lock, no mutation, no commit/fsync).
|
|
111
|
+
const rows = [...this.runs.values()].filter((r) => r.scope === scope && (opts?.status === undefined || r.status === opts.status));
|
|
112
|
+
rows.sort((a, b) => b.createdAt - a.createdAt); // newest first
|
|
113
|
+
const limited = opts?.limit !== undefined ? rows.slice(0, Math.max(0, opts.limit)) : rows;
|
|
114
|
+
return limited.map(summarizeWorkflowRun); // shared projection — byte-identical to InMemory
|
|
115
|
+
}
|
|
116
|
+
async reap(scope, now, opts) {
|
|
117
|
+
if (opts?.maxAgeMs === undefined && opts?.keep === undefined)
|
|
118
|
+
return 0; // retention is always explicit
|
|
119
|
+
// Compute the doomed set from a snapshot of the terminal rows (a running run is NEVER reaped), then
|
|
120
|
+
// delete each under its own id lock (so the delete serializes against a concurrent put/update on that id).
|
|
121
|
+
const terminal = [...this.runs.values()].filter((r) => r.scope === scope && isTerminalWorkflowStatus(r.status));
|
|
122
|
+
terminal.sort((a, b) => b.createdAt - a.createdAt);
|
|
123
|
+
// Carry the doom REASON so the per-id lock can re-verify it against the live row (codex: a concurrent
|
|
124
|
+
// update could bump a doomed row's endedAt; without re-checking, File would delete a row InMemory's atomic
|
|
125
|
+
// reap would keep). `byAge` is re-checkable per-row; `byKeep` (newest-N) is set-relative, so the snapshot
|
|
126
|
+
// ordering decision stands (a soft retention bound, not a correctness invariant).
|
|
127
|
+
const doomed = [];
|
|
128
|
+
for (let i = 0; i < terminal.length; i++) {
|
|
129
|
+
const r = terminal[i];
|
|
130
|
+
const tooOld = opts.maxAgeMs !== undefined && (r.endedAt ?? r.createdAt) < now - opts.maxAgeMs;
|
|
131
|
+
const overKeep = opts.keep !== undefined && i >= opts.keep;
|
|
132
|
+
if (tooOld || overKeep)
|
|
133
|
+
doomed.push({ id: r.id, byAge: tooOld });
|
|
134
|
+
}
|
|
135
|
+
let n = 0;
|
|
136
|
+
for (const { id, byAge } of doomed) {
|
|
137
|
+
const deleted = await this.withLock(id, () => {
|
|
138
|
+
const live = this.runs.get(id);
|
|
139
|
+
// Re-check under the lock: only delete a still-present terminal row in this scope (a concurrent update
|
|
140
|
+
// may have flipped it back to running, or it was already removed).
|
|
141
|
+
if (!live || live.scope !== scope || !isTerminalWorkflowStatus(live.status))
|
|
142
|
+
return false;
|
|
143
|
+
// If doomed by AGE, re-verify age against the LIVE row (its endedAt may have moved); if doomed by
|
|
144
|
+
// keep-newest-N, the snapshot decision stands (set-relative, can't re-check per-id).
|
|
145
|
+
if (byAge && opts.maxAgeMs !== undefined && (live.endedAt ?? live.createdAt) >= now - opts.maxAgeMs) {
|
|
146
|
+
return false;
|
|
147
|
+
}
|
|
148
|
+
this.commit({ t: "delete", id }, this.fsyncEnabled);
|
|
149
|
+
return true;
|
|
150
|
+
});
|
|
151
|
+
if (deleted)
|
|
152
|
+
n++;
|
|
153
|
+
}
|
|
154
|
+
return n;
|
|
155
|
+
}
|
|
156
|
+
/** Rewrite the snapshot from the current authoritative map (atomic) and truncate the live ledger. */
|
|
157
|
+
compact() {
|
|
158
|
+
const lines = [...this.runs.values()].map((r) => JSON.stringify(r)).join("\n");
|
|
159
|
+
atomicWriteFile(this.tmpDir, this.snapshotPath, lines.length ? `${lines}\n` : "");
|
|
160
|
+
this.log.close();
|
|
161
|
+
atomicWriteFile(this.tmpDir, this.ledgerPath, ""); // atomic replace → empty ledger
|
|
162
|
+
this.log = new AppendLog(this.ledgerPath);
|
|
163
|
+
this.ledgerEvents = 0;
|
|
164
|
+
}
|
|
165
|
+
/** Force a compaction now (test/inspection). */
|
|
166
|
+
compactNow() {
|
|
167
|
+
this.compact();
|
|
168
|
+
}
|
|
169
|
+
/** Test/inspection helper: number of stored runs. */
|
|
170
|
+
get size() {
|
|
171
|
+
return this.runs.size;
|
|
172
|
+
}
|
|
173
|
+
/** Release the append handle (best-effort). The boot LOCK is released by the backend factory. */
|
|
174
|
+
close() {
|
|
175
|
+
this.log.close();
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
//# sourceMappingURL=workflow-run-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow-run-store.js","sourceRoot":"","sources":["../../../src/stores/file/workflow-run-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EACL,qBAAqB,EACrB,wBAAwB,EACxB,oBAAoB,GAGrB,MAAM,kCAAkC,CAAC;AAE1C,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAmCzF,MAAM,OAAO,oBAAoB;IACd,GAAG,CAAS;IACZ,MAAM,CAAS;IACf,UAAU,CAAS;IACnB,YAAY,CAAS;IACrB,YAAY,CAAU;IACtB,YAAY,CAAS;IAEtC,4GAA4G;IAC3F,IAAI,GAAG,IAAI,GAAG,EAAuB,CAAC;IACvD,iFAAiF;IAChE,KAAK,GAAG,IAAI,GAAG,EAA4B,CAAC;IAC7D,uGAAuG;IAC/F,YAAY,GAAG,CAAC,CAAC;IACjB,GAAG,CAAY;IAEvB,YAAY,IAAY,EAAE,OAAoC,EAAE;QAC9D,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;QACvC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAChC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;QAC/C,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,qBAAqB,CAAC,CAAC;QAC1D,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,KAAK,KAAK,KAAK,CAAC;QACzC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC;QAC9C,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACpB,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACvB,IAAI,CAAC,MAAM,EAAE,CAAC;QACd,IAAI,CAAC,GAAG,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC5C,CAAC;IAED,yGAAyG;IACjG,MAAM;QACZ,KAAK,MAAM,IAAI,IAAI,gBAAgB,CAAc,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;YACpE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QAC/B,CAAC;QACD,MAAM,MAAM,GAAG,gBAAgB,CAAc,IAAI,CAAC,UAAU,CAAC,CAAC;QAC9D,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC;QAClC,KAAK,MAAM,EAAE,IAAI,MAAM;YAAE,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;IAC/C,CAAC;IAED,0FAA0F;IAClF,UAAU,CAAC,EAAe;QAChC,IAAI,EAAE,CAAC,CAAC,KAAK,QAAQ,EAAE,CAAC;YACtB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;YACxB,OAAO;QACT,CAAC;QACD,kGAAkG;QAClG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;IAC/B,CAAC;IAED;;;;OAIG;IACK,QAAQ,CAAI,EAAU,EAAE,EAAwB;QACtD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;QACrD,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CACnB,GAAG,EAAE,CAAC,EAAE,EAAE,EACV,GAAG,EAAE,CAAC,EAAE,EAAE,CACX,CAAC;QACF,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CACnB,GAAG,EAAE,GAAE,CAAC,EACR,GAAG,EAAE,GAAE,CAAC,CACT,CAAC;QACF,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QACzB,KAAK,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE;YAClB,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,IAAI;gBAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACzD,CAAC,CAAC,CAAC;QACH,OAAO,GAAG,CAAC;IACb,CAAC;IAED,kGAAkG;IAC1F,MAAM,CAAC,EAAe,EAAE,KAAc;QAC5C,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC,gBAAgB;QAC5C,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,0CAA0C;QAC/D,IAAI,CAAC,YAAY,EAAE,CAAC;QACpB,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY;YAAE,IAAI,CAAC,OAAO,EAAE,CAAC;IAC7D,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,EAAU,EAAE,GAAgB;QACpC,OAAO,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,EAAE;YAC5B,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;gBACtB,MAAM,IAAI,qBAAqB,CAAC,6BAA6B,EAAE,gCAAgC,CAAC,CAAC;YACnG,CAAC;YACD,wGAAwG;YACxG,MAAM,MAAM,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;YACpC,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,2FAA2F;YAC3G,MAAM,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;YAC1B,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;QAChE,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,EAAU;QAClB,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC9B,OAAO,GAAG,CAAC,CAAC,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC3C,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,EAAU,EAAE,KAAa,EAAE,GAAgB,EAAE,MAAwB;QAChF,OAAO,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,EAAE;YAC5B,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAC9B,oGAAoG;YACpG,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,KAAK,KAAK,EAAE,CAAC;gBAChC,OAAO,KAAK,CAAC;YACf,CAAC;YACD,uGAAuG;YACvG,6FAA6F;YAC7F,IAAI,MAAM,KAAK,SAAS,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,KAAK,MAAM,CAAC,GAAG,EAAE,CAAC;gBAC1D,OAAO,KAAK,CAAC;YACf,CAAC;YACD,MAAM,IAAI,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;YAClC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,2FAA2F;YACzG,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,+EAA+E;YACnG,IAAI,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,mDAAmD;YAClF,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;YAC/D,OAAO,IAAI,CAAC;QACd,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,WAAW,CACf,KAAa,EACb,IAAqD;QAErD,sGAAsG;QACtG,MAAM,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CACzC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,KAAK,IAAI,CAAC,IAAI,EAAE,MAAM,KAAK,SAAS,IAAI,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,CAAC,CACrF,CAAC;QACF,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,eAAe;QAC/D,MAAM,OAAO,GAAG,IAAI,EAAE,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAC1F,OAAO,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC,CAAC,iDAAiD;IAC7F,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,KAAa,EAAE,GAAW,EAAE,IAA2C;QAChF,IAAI,IAAI,EAAE,QAAQ,KAAK,SAAS,IAAI,IAAI,EAAE,IAAI,KAAK,SAAS;YAAE,OAAO,CAAC,CAAC,CAAC,+BAA+B;QACvG,oGAAoG;QACpG,2GAA2G;QAC3G,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAC7C,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,KAAK,IAAI,wBAAwB,CAAC,CAAC,CAAC,MAAM,CAAC,CAC/D,CAAC;QACF,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC;QACnD,sGAAsG;QACtG,2GAA2G;QAC3G,0GAA0G;QAC1G,kFAAkF;QAClF,MAAM,MAAM,GAA0C,EAAE,CAAC;QACzD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACzC,MAAM,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAE,CAAC;YACvB,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,KAAK,SAAS,IAAI,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,SAAS,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC;YAC/F,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC;YAC3D,IAAI,MAAM,IAAI,QAAQ;gBAAE,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;QACnE,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,KAAK,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,MAAM,EAAE,CAAC;YACnC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,EAAE;gBAC3C,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBAC/B,uGAAuG;gBACvG,mEAAmE;gBACnE,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,KAAK,KAAK,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,MAAM,CAAC;oBAAE,OAAO,KAAK,CAAC;gBAC1F,kGAAkG;gBAClG,qFAAqF;gBACrF,IAAI,KAAK,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,GAAG,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;oBACpG,OAAO,KAAK,CAAC;gBACf,CAAC;gBACD,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;gBACpD,OAAO,IAAI,CAAC;YACd,CAAC,CAAC,CAAC;YACH,IAAI,OAAO;gBAAE,CAAC,EAAE,CAAC;QACnB,CAAC;QACD,OAAO,CAAC,CAAC;IACX,CAAC;IAED,qGAAqG;IAC7F,OAAO;QACb,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/E,eAAe,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAClF,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;QACjB,eAAe,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,CAAC,gCAAgC;QACnF,IAAI,CAAC,GAAG,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC1C,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;IACxB,CAAC;IAED,gDAAgD;IAChD,UAAU;QACR,IAAI,CAAC,OAAO,EAAE,CAAC;IACjB,CAAC;IAED,qDAAqD;IACrD,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;IACxB,CAAC;IAED,iGAAiG;IACjG,KAAK;QACH,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;IACnB,CAAC;CACF"}
|
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PostgreSQL **reference adapters** for the two durable seams a deployment must supply to make a
|
|
3
|
+
* stateless runner durable (the "session center" + design/45 durable-checkpoint):
|
|
4
|
+
*
|
|
5
|
+
* - {@link PgSessionRepo} — a durable `SessionRepo` (append-only event log). Hand it to the built-in
|
|
6
|
+
* `TtlSessionStore` (`new TtlSessionStore({ repo })`) and you get the full session center: wake on
|
|
7
|
+
* `acquire`, idle-cache, cross-instance optimistic lock. This is the README §11 recipe, on Postgres.
|
|
8
|
+
* - {@link PgCheckpointStore} — a durable `CheckpointStore` (design/45 F4/1C): atomic CAS `resolve`,
|
|
9
|
+
* `expire` fence, deadline `reap`.
|
|
10
|
+
*
|
|
11
|
+
* **Driver-neutral**: this module depends on no Postgres client. Pass any `(text, params) => {rows}`
|
|
12
|
+
* function ({@link PgQueryFn}) — `node-postgres` (`(t, p) => pool.query(t, p)`), `pg-mem` in tests, or
|
|
13
|
+
* a thin wrapper over postgres.js. The SQL sticks to portable basics (text/bigint/jsonb columns,
|
|
14
|
+
* `ON CONFLICT`, conditional `UPDATE … RETURNING`).
|
|
15
|
+
*
|
|
16
|
+
* **Concurrency contract** (mirrors the TiDB backend, README §11 / design/10):
|
|
17
|
+
* - Session appends are serialized by the `(session_id, seq)` primary key: two replicas that woke the
|
|
18
|
+
* same session race their next `INSERT`; the loser hits a unique violation and gets
|
|
19
|
+
* `SessionError("conflict")` (catch with `isSessionConflict`) — never a silent fork.
|
|
20
|
+
* - `resolve`/`expire` are single-row conditional UPDATEs over the same `pending` row, so the DB
|
|
21
|
+
* serializes them: exactly one wins (the once-only foundation, design/45 §2.1).
|
|
22
|
+
*
|
|
23
|
+
* Reference-grade scope (open-source profile): full-tree wake (no F3 bounded-tail query), no
|
|
24
|
+
* connection management (the caller owns the pool), no retention/GC worker (run `reap` + your own
|
|
25
|
+
* retention policy on a schedule).
|
|
26
|
+
*/
|
|
27
|
+
import { Session } from "../internal/harness.js";
|
|
28
|
+
import type { SessionMetadata, SessionRepo } from "../internal/harness.js";
|
|
29
|
+
import { type Checkpoint, type CheckpointStore, type CheckpointSummary, type CheckpointToken, type ReopenReason, type ResolveExpectation, type ResumeOutcome } from "../core/checkpoint-store.js";
|
|
30
|
+
import { type MemoryNoteHeader, type MemoryNoteRecord, type MemoryStore, type MemoryVectorMode, type ScoredMemory, type StructuredNoteInput } from "../core/memory.js";
|
|
31
|
+
import type { ToolResultSlice, ToolResultStore } from "../core/tool-result-store.js";
|
|
32
|
+
/** The subset of a query result this module reads. `rowCount` is deliberately unused (drivers
|
|
33
|
+
* disagree on it); statements that need a count use `RETURNING` and read `rows.length`. */
|
|
34
|
+
export interface PgQueryResult {
|
|
35
|
+
rows: Array<Record<string, unknown>>;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* The only thing the adapters need from your Postgres client: positional-parameter query.
|
|
39
|
+
* `node-postgres`: `const q: PgQueryFn = (text, params) => pool.query(text, params)`.
|
|
40
|
+
*/
|
|
41
|
+
export type PgQueryFn = (text: string, params?: unknown[]) => Promise<PgQueryResult>;
|
|
42
|
+
/** Table names used by {@link ensurePgAgentSchema} and the adapters (single source of truth). */
|
|
43
|
+
export declare const PG_AGENT_TABLES: {
|
|
44
|
+
readonly sessions: "agent_sessions";
|
|
45
|
+
readonly sessionEntries: "agent_session_entries";
|
|
46
|
+
readonly checkpoints: "agent_checkpoints";
|
|
47
|
+
readonly memory: "agent_memory";
|
|
48
|
+
/** design/84 Seam B: per-scope periodic-consolidation cursor (one row per writeScope). */
|
|
49
|
+
readonly memoryCursor: "agent_memory_cursor";
|
|
50
|
+
readonly toolResults: "agent_tool_results";
|
|
51
|
+
};
|
|
52
|
+
/** Options for {@link ensurePgAgentSchema}. */
|
|
53
|
+
export interface PgAgentSchemaOptions {
|
|
54
|
+
/**
|
|
55
|
+
* Shape of the memory `embedding` column:
|
|
56
|
+
* - omitted → `jsonb` (portable mode: vectors stored as JSON, cosine computed in process — works on
|
|
57
|
+
* ANY Postgres, no extension);
|
|
58
|
+
* - `{ dimensions, pgvector: true }` → `CREATE EXTENSION vector` + a `vector(d)` column, so
|
|
59
|
+
* {@link PgMemoryStore} with `pgvectorSql: true` ranks by the native `<=>` cosine-distance operator
|
|
60
|
+
* (index-accelerable with an HNSW/IVFFlat index you add per your scale).
|
|
61
|
+
* Pick once at schema time and keep {@link PgMemoryStoreOptions} consistent with it.
|
|
62
|
+
*/
|
|
63
|
+
memoryVector?: {
|
|
64
|
+
dimensions: number;
|
|
65
|
+
pgvector?: boolean;
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Create the three tables (idempotent, `IF NOT EXISTS`). Call once at startup, or run the same DDL
|
|
70
|
+
* through your own migration tool. JSON payloads are `jsonb`; values are always **passed as JSON
|
|
71
|
+
* strings** (every driver can bind a string; Postgres casts it into the column type).
|
|
72
|
+
*/
|
|
73
|
+
export declare function ensurePgAgentSchema(query: PgQueryFn, opts?: PgAgentSchemaOptions): Promise<void>;
|
|
74
|
+
/** Postgres SQLSTATE 23505; fall back to message sniffing for emulators that don't set `code`.
|
|
75
|
+
* Exported for `MemoryBackend` dialect implementations (the Pg reference implementation moved to
|
|
76
|
+
* @sema-ai/server — see docs/MEMORY-BACKEND-DIALECT-NOTES.md); one sniffing rule, every consumer. */
|
|
77
|
+
export declare function isUniqueViolation(err: unknown): boolean;
|
|
78
|
+
/**
|
|
79
|
+
* Durable `SessionRepo` on Postgres. Plug into the built-in cache:
|
|
80
|
+
* ```ts
|
|
81
|
+
* const repo = new PgSessionRepo((t, p) => pool.query(t, p));
|
|
82
|
+
* const runner = new Runner({ brain, sessionStore: new TtlSessionStore({ repo }) });
|
|
83
|
+
* ```
|
|
84
|
+
* `TtlSessionStore` defaults to `evict: "forget"` for a custom repo, so idle eviction never deletes
|
|
85
|
+
* durable history; `open` of an unknown id throws `not_found` and the store falls back to `create`.
|
|
86
|
+
*/
|
|
87
|
+
export declare class PgSessionRepo implements SessionRepo {
|
|
88
|
+
private readonly query;
|
|
89
|
+
constructor(query: PgQueryFn);
|
|
90
|
+
private load;
|
|
91
|
+
create(options?: {
|
|
92
|
+
id?: string;
|
|
93
|
+
}): Promise<Session>;
|
|
94
|
+
open(metadata: SessionMetadata): Promise<Session>;
|
|
95
|
+
list(): Promise<SessionMetadata[]>;
|
|
96
|
+
delete(metadata: SessionMetadata): Promise<void>;
|
|
97
|
+
/** Fork caveats (1.94.0 review obs#1/#2): an EXPLICIT `options.id` must not be shared with a
|
|
98
|
+
* concurrent `create` of the same id (create's orphan purge can race the in-flight entry batches —
|
|
99
|
+
* unreachable under default uuidv7 ids; explicit-id reuse is a caller contract); and forking onto an
|
|
100
|
+
* id holding orphan residue from a previously failed fork fails LOUD with a unique violation
|
|
101
|
+
* (`create` purges such residue, `fork` deliberately does not — loud beats silently adopting). */
|
|
102
|
+
fork(sourceMetadata: SessionMetadata, options?: {
|
|
103
|
+
entryId?: string;
|
|
104
|
+
position?: "before" | "at";
|
|
105
|
+
id?: string;
|
|
106
|
+
}): Promise<Session>;
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Durable `CheckpointStore` on Postgres (design/45 §2.1). The `status` **column** is authoritative
|
|
110
|
+
* (the CAS target); the `checkpoint` jsonb is the full payload, whose embedded `status` is overwritten
|
|
111
|
+
* from the column on `get`. `resolve` persists the outcome atomically with the status flip (the v2
|
|
112
|
+
* resumable-resume hook the interface reserves).
|
|
113
|
+
*/
|
|
114
|
+
export declare class PgCheckpointStore implements CheckpointStore {
|
|
115
|
+
private readonly query;
|
|
116
|
+
constructor(query: PgQueryFn);
|
|
117
|
+
put(token: CheckpointToken, cp: Checkpoint): Promise<void>;
|
|
118
|
+
get(token: CheckpointToken): Promise<Checkpoint | null>;
|
|
119
|
+
resolve(token: CheckpointToken, scope: string, outcome: ResumeOutcome, expect?: ResolveExpectation): Promise<boolean>;
|
|
120
|
+
reopen(token: CheckpointToken, scope: string, reason: ReopenReason): Promise<boolean>;
|
|
121
|
+
setPendingSteer(token: CheckpointToken, scope: string, steer: {
|
|
122
|
+
text: string;
|
|
123
|
+
trusted: boolean;
|
|
124
|
+
}): Promise<boolean>;
|
|
125
|
+
expire(token: CheckpointToken, scope: string): Promise<boolean>;
|
|
126
|
+
reap(scope: string, cutoff: number): Promise<number>;
|
|
127
|
+
listByScope(scope: string): Promise<CheckpointSummary[]>;
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Durable `ToolResultStore` on Postgres. Required for durable suspend (design/45): the runner refuses
|
|
131
|
+
* to suspend over the default `InMemoryToolResultStore` (its offload refs die with the process and a
|
|
132
|
+
* cross-replica resume could never read them back). Write-once per ref (`ON CONFLICT DO NOTHING`, the
|
|
133
|
+
* interface contract); slicing matches the in-memory store exactly (JS `slice` semantics).
|
|
134
|
+
*/
|
|
135
|
+
export declare class PgToolResultStore implements ToolResultStore {
|
|
136
|
+
private readonly query;
|
|
137
|
+
constructor(query: PgQueryFn);
|
|
138
|
+
put(ref: string, content: string): Promise<void>;
|
|
139
|
+
get(ref: string, opts?: {
|
|
140
|
+
offset?: number;
|
|
141
|
+
limit?: number;
|
|
142
|
+
}): Promise<ToolResultSlice | undefined>;
|
|
143
|
+
}
|
|
144
|
+
/** Produces an embedding for one note/query. `dimensions` must match the schema's `memoryVector`. */
|
|
145
|
+
export interface PgEmbedder {
|
|
146
|
+
embed(text: string): Promise<number[]>;
|
|
147
|
+
dimensions: number;
|
|
148
|
+
}
|
|
149
|
+
/** Options for {@link PgMemoryStore} — pick the recall mode (all three honor the same cosine-distance
|
|
150
|
+
* contract `score ∈ [0,2], 0 = identical`, so the consolidation band needs no recalibration). */
|
|
151
|
+
export interface PgMemoryStoreOptions {
|
|
152
|
+
/**
|
|
153
|
+
* When set, notes are embedded on `append`/`update` and `searchScored` ranks by cosine distance.
|
|
154
|
+
* Without it, `searchScored` falls back to the same lexical (Jaccard) distance as the in-memory
|
|
155
|
+
* reference store — fine for dev, weaker recall.
|
|
156
|
+
*/
|
|
157
|
+
embedder?: PgEmbedder;
|
|
158
|
+
/**
|
|
159
|
+
* `true` → rank in SQL with pgvector's `<=>` operator (schema must have been created with
|
|
160
|
+
* `memoryVector: { pgvector: true }`). `false`/omitted → embeddings live in `jsonb` and cosine is
|
|
161
|
+
* computed in process after fetching the scope (portable: any Postgres, no extension; right up until
|
|
162
|
+
* a scope is huge — then switch pgvector on). Requires `embedder`.
|
|
163
|
+
*
|
|
164
|
+
* Migration note (1.94.0 review obs#3): the SQL path EXCLUDES rows without an embedding
|
|
165
|
+
* (`WHERE embedding IS NOT NULL`) — unlike the in-process path, which keeps such legacy rows as
|
|
166
|
+
* lexical-fallback candidates. **Backfill embeddings before enabling `pgvectorSql`**, or pre-embedder
|
|
167
|
+
* notes silently drop out of consolidation/recall. Conversely, REMOVING the embedder later is a
|
|
168
|
+
* downgrade (obs#4): a subsequent `update` stores `embedding = null` for that note.
|
|
169
|
+
*/
|
|
170
|
+
pgvectorSql?: boolean;
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Durable `MemoryStore` on Postgres — the full surface (L2 read/append, L3 `search`, consolidation
|
|
174
|
+
* trio `searchScored`/`update`/`delete`, design/65 structured notes + manifest), with **switchable
|
|
175
|
+
* recall** (see {@link PgMemoryStoreOptions}): lexical → in-process cosine over `jsonb` embeddings →
|
|
176
|
+
* native pgvector `<=>`. All three return the same cosine-distance scale, so upgrading recall is a
|
|
177
|
+
* config change, not a recalibration.
|
|
178
|
+
*
|
|
179
|
+
* Insertion order is the uuidv7 id order (time-sortable), matching the in-memory store's append order
|
|
180
|
+
* for `read`/`search` output. Concurrency: same-scope writes from different sessions follow the
|
|
181
|
+
* MemoryStore contract's eventual-consistency allowance (at worst a near-duplicate survives one extra
|
|
182
|
+
* consolidation pass); `update` is a single-row UPDATE, never a read-modify-write of the whole scope.
|
|
183
|
+
*/
|
|
184
|
+
export declare class PgMemoryStore implements MemoryStore {
|
|
185
|
+
private readonly query;
|
|
186
|
+
private readonly embedder?;
|
|
187
|
+
private readonly pgvectorSql;
|
|
188
|
+
/** design/81 Slice 5 rung: native when the pgvector `<=>` SQL path is on, portable when an embedder ranks
|
|
189
|
+
* in-process over the jsonb column, lexical when no embedder. */
|
|
190
|
+
get vectorMode(): MemoryVectorMode;
|
|
191
|
+
constructor(query: PgQueryFn, opts?: PgMemoryStoreOptions);
|
|
192
|
+
private embeddingParam;
|
|
193
|
+
read(scope: string): Promise<string | null>;
|
|
194
|
+
append(scope: string, note: string): Promise<string | void>;
|
|
195
|
+
appendStructured(scope: string, note: StructuredNoteInput): Promise<string>;
|
|
196
|
+
private insert;
|
|
197
|
+
clear(scope: string): Promise<void>;
|
|
198
|
+
/** design/84 Seam B: read the per-scope periodic-consolidation cursor (the opaque note-id high-water mark). */
|
|
199
|
+
getConsolidationCursor(scope: string): Promise<string | undefined>;
|
|
200
|
+
/** design/84 Seam B: upsert the per-scope periodic-consolidation cursor (last-writer-wins). */
|
|
201
|
+
setConsolidationCursor(scope: string, cursor: string): Promise<void>;
|
|
202
|
+
search(scope: string, query: string, limit?: number): Promise<string[]>;
|
|
203
|
+
searchScored(scope: string, query: string, limit?: number): Promise<ScoredMemory[]>;
|
|
204
|
+
update(scope: string, id: string, text: string): Promise<void>;
|
|
205
|
+
delete(scope: string, id: string): Promise<void>;
|
|
206
|
+
listStructuredNotes(scope: string): Promise<MemoryNoteHeader[]>;
|
|
207
|
+
getByIds(scope: string, ids: string[]): Promise<MemoryNoteRecord[]>;
|
|
208
|
+
private toHeader;
|
|
209
|
+
}
|
|
210
|
+
//# sourceMappingURL=pg.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pg.d.ts","sourceRoot":"","sources":["../../src/stores/pg.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,OAAO,EAEL,OAAO,EAIR,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EACV,eAAe,EACf,WAAW,EAGZ,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAKL,KAAK,UAAU,EACf,KAAK,eAAe,EACpB,KAAK,iBAAiB,EACtB,KAAK,eAAe,EACpB,KAAK,YAAY,EACjB,KAAK,kBAAkB,EAEvB,KAAK,aAAa,EACnB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAGL,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACrB,KAAK,WAAW,EAChB,KAAK,gBAAgB,EACrB,KAAK,YAAY,EACjB,KAAK,mBAAmB,EACzB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAErF;4FAC4F;AAC5F,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CACtC;AAED;;;GAGG;AACH,MAAM,MAAM,SAAS,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC,aAAa,CAAC,CAAC;AAErF,iGAAiG;AACjG,eAAO,MAAM,eAAe;;;;;IAK1B,0FAA0F;;;CAGlF,CAAC;AAEX,+CAA+C;AAC/C,MAAM,WAAW,oBAAoB;IACnC;;;;;;;;OAQG;IACH,YAAY,CAAC,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;CAC3D;AAED;;;;GAIG;AACH,wBAAsB,mBAAmB,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,GAAE,oBAAyB,GAAG,OAAO,CAAC,IAAI,CAAC,CAkF1G;AAED;;sGAEsG;AACtG,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAMvD;AAkED;;;;;;;;GAQG;AACH,qBAAa,aAAc,YAAW,WAAW;IACnC,OAAO,CAAC,QAAQ,CAAC,KAAK;gBAAL,KAAK,EAAE,SAAS;YAE/B,IAAI;IA2BZ,MAAM,CAAC,OAAO,GAAE;QAAE,EAAE,CAAC,EAAE,MAAM,CAAA;KAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAwBvD,IAAI,CAAC,QAAQ,EAAE,eAAe,GAAG,OAAO,CAAC,OAAO,CAAC;IAcjD,IAAI,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;IAWlC,MAAM,CAAC,QAAQ,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAQtD;;;;uGAImG;IAC7F,IAAI,CACR,cAAc,EAAE,eAAe,EAC/B,OAAO,GAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAC;QAAC,EAAE,CAAC,EAAE,MAAM,CAAA;KAAO,GAC1E,OAAO,CAAC,OAAO,CAAC;CA2BpB;AAED;;;;;GAKG;AACH,qBAAa,iBAAkB,YAAW,eAAe;IAC3C,OAAO,CAAC,QAAQ,CAAC,KAAK;gBAAL,KAAK,EAAE,SAAS;IAEvC,GAAG,CAAC,KAAK,EAAE,eAAe,EAAE,EAAE,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAgB1D,GAAG,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAsBvD,OAAO,CACX,KAAK,EAAE,eAAe,EACtB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,aAAa,EACtB,MAAM,CAAC,EAAE,kBAAkB,GAC1B,OAAO,CAAC,OAAO,CAAC;IA2Bb,MAAM,CAAC,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC;IAkBrF,eAAe,CACnB,KAAK,EAAE,eAAe,EACtB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,GACxC,OAAO,CAAC,OAAO,CAAC;IAoBb,MAAM,CAAC,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAW/D,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAUpD,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC;CAmB/D;AAED;;;;;GAKG;AACH,qBAAa,iBAAkB,YAAW,eAAe;IAC3C,OAAO,CAAC,QAAQ,CAAC,KAAK;gBAAL,KAAK,EAAE,SAAS;IAEvC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQhD,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,eAAe,GAAG,SAAS,CAAC;CAUzG;AAED,qGAAqG;AACrG,MAAM,WAAW,UAAU;IACzB,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACvC,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;kGACkG;AAClG,MAAM,WAAW,oBAAoB;IACnC;;;;OAIG;IACH,QAAQ,CAAC,EAAE,UAAU,CAAC;IACtB;;;;;;;;;;;OAWG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AA0BD;;;;;;;;;;;GAWG;AACH,qBAAa,aAAc,YAAW,WAAW;IAW7C,OAAO,CAAC,QAAQ,CAAC,KAAK;IAVxB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAa;IACvC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAU;IAEtC;sEACkE;IAClE,IAAI,UAAU,IAAI,gBAAgB,CAEjC;gBAGkB,KAAK,EAAE,SAAS,EACjC,IAAI,GAAE,oBAAyB;YASnB,cAAc;IAatB,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAS3C,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAM3D,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,mBAAmB,GAAG,OAAO,CAAC,MAAM,CAAC;YAanE,MAAM;IAwBd,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMzC,+GAA+G;IACzG,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IASxE,+FAA+F;IACzF,sBAAsB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQpE,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAqBnE,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IA4C/E,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAuB9D,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIhD,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAS/D,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAazE,OAAO,CAAC,QAAQ;CAUjB"}
|