@cleocode/core 2026.9.8 → 2026.9.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/audit/reconstruct.d.ts +13 -43
- package/dist/audit/reconstruct.d.ts.map +1 -1
- package/dist/audit/reconstruct.js +295 -290
- package/dist/audit/reconstruct.js.map +1 -1
- package/dist/bootstrap.d.ts.map +1 -1
- package/dist/bootstrap.js +8 -2
- package/dist/bootstrap.js.map +1 -1
- package/dist/compliance/protocol-rules.d.ts.map +1 -1
- package/dist/compliance/protocol-rules.js +3 -1
- package/dist/compliance/protocol-rules.js.map +1 -1
- package/dist/dispatch/mutate-projection.d.ts.map +1 -1
- package/dist/dispatch/mutate-projection.js +12 -0
- package/dist/dispatch/mutate-projection.js.map +1 -1
- package/dist/dispatch/mvi-projection.d.ts +29 -6
- package/dist/dispatch/mvi-projection.d.ts.map +1 -1
- package/dist/dispatch/mvi-projection.js +109 -139
- package/dist/dispatch/mvi-projection.js.map +1 -1
- package/dist/docs/docs-read-model.d.ts +3 -2
- package/dist/docs/docs-read-model.d.ts.map +1 -1
- package/dist/docs/docs-read-model.js +4 -3
- package/dist/docs/docs-read-model.js.map +1 -1
- package/dist/docs/export-document.js +5129 -2297
- package/dist/docs/export-document.js.map +3 -3
- package/dist/docs/projection.d.ts +67 -0
- package/dist/docs/projection.d.ts.map +1 -0
- package/dist/docs/projection.js +370 -0
- package/dist/docs/projection.js.map +1 -0
- package/dist/doctor/acceptance-drift.d.ts +6 -2
- package/dist/doctor/acceptance-drift.d.ts.map +1 -1
- package/dist/doctor/acceptance-drift.js +43 -5
- package/dist/doctor/acceptance-drift.js.map +1 -1
- package/dist/doctor/knowledge-summary.d.ts +41 -0
- package/dist/doctor/knowledge-summary.d.ts.map +1 -0
- package/dist/doctor/knowledge-summary.js +81 -0
- package/dist/doctor/knowledge-summary.js.map +1 -0
- package/dist/doctor/knowledge.d.ts +192 -0
- package/dist/doctor/knowledge.d.ts.map +1 -0
- package/dist/doctor/knowledge.js +1864 -0
- package/dist/doctor/knowledge.js.map +1 -0
- package/dist/git/work-tree.d.ts +169 -0
- package/dist/git/work-tree.d.ts.map +1 -0
- package/dist/git/work-tree.js +341 -0
- package/dist/git/work-tree.js.map +1 -0
- package/dist/hooks/handlers/task-hooks.d.ts +8 -5
- package/dist/hooks/handlers/task-hooks.d.ts.map +1 -1
- package/dist/hooks/handlers/task-hooks.js +15 -60
- package/dist/hooks/handlers/task-hooks.js.map +1 -1
- package/dist/identity/cleo-identity.d.ts +13 -0
- package/dist/identity/cleo-identity.d.ts.map +1 -1
- package/dist/identity/cleo-identity.js +20 -6
- package/dist/identity/cleo-identity.js.map +1 -1
- package/dist/injection.d.ts.map +1 -1
- package/dist/injection.js +29 -13
- package/dist/injection.js.map +1 -1
- package/dist/internal.d.ts +3 -0
- package/dist/internal.d.ts.map +1 -1
- package/dist/internal.js +4 -0
- package/dist/internal.js.map +1 -1
- package/dist/lifecycle/verification/satisfies-validator.d.ts.map +1 -1
- package/dist/lifecycle/verification/satisfies-validator.js +124 -120
- package/dist/lifecycle/verification/satisfies-validator.js.map +1 -1
- package/dist/llm/plugin-facade.js +4047 -1726
- package/dist/llm/plugin-facade.js.map +3 -3
- package/dist/memory/brain-backfill.d.ts +27 -12
- package/dist/memory/brain-backfill.d.ts.map +1 -1
- package/dist/memory/brain-backfill.js +325 -134
- package/dist/memory/brain-backfill.js.map +1 -1
- package/dist/memory/brain-doctor.d.ts +21 -0
- package/dist/memory/brain-doctor.d.ts.map +1 -1
- package/dist/memory/brain-doctor.js +111 -53
- package/dist/memory/brain-doctor.js.map +1 -1
- package/dist/memory/brain-links.d.ts.map +1 -1
- package/dist/memory/brain-links.js +31 -4
- package/dist/memory/brain-links.js.map +1 -1
- package/dist/memory/brain-reasoning.d.ts.map +1 -1
- package/dist/memory/brain-reasoning.js +28 -2
- package/dist/memory/brain-reasoning.js.map +1 -1
- package/dist/memory/brain-reconciler.d.ts +14 -19
- package/dist/memory/brain-reconciler.d.ts.map +1 -1
- package/dist/memory/brain-reconciler.js +70 -97
- package/dist/memory/brain-reconciler.js.map +1 -1
- package/dist/memory/brain-search.d.ts +2 -0
- package/dist/memory/brain-search.d.ts.map +1 -1
- package/dist/memory/brain-search.js +59 -29
- package/dist/memory/brain-search.js.map +1 -1
- package/dist/memory/brain-similarity.d.ts.map +1 -1
- package/dist/memory/brain-similarity.js +5 -4
- package/dist/memory/brain-similarity.js.map +1 -1
- package/dist/memory/brain-stub-prune.d.ts +31 -9
- package/dist/memory/brain-stub-prune.d.ts.map +1 -1
- package/dist/memory/brain-stub-prune.js +65 -18
- package/dist/memory/brain-stub-prune.js.map +1 -1
- package/dist/memory/brain-writer-handlers.d.ts +10 -1
- package/dist/memory/brain-writer-handlers.d.ts.map +1 -1
- package/dist/memory/brain-writer-handlers.js +23 -3
- package/dist/memory/brain-writer-handlers.js.map +1 -1
- package/dist/memory/brain-writer-thread.d.ts +11 -1
- package/dist/memory/brain-writer-thread.d.ts.map +1 -1
- package/dist/memory/brain-writer-thread.js +87 -20
- package/dist/memory/brain-writer-thread.js.map +1 -1
- package/dist/memory/brain-writer-worker.js +8 -1
- package/dist/memory/brain-writer-worker.js.map +1 -1
- package/dist/memory/decision-cross-link.d.ts +39 -0
- package/dist/memory/decision-cross-link.d.ts.map +1 -1
- package/dist/memory/decision-cross-link.js +316 -0
- package/dist/memory/decision-cross-link.js.map +1 -1
- package/dist/memory/decisions.d.ts +4 -1
- package/dist/memory/decisions.d.ts.map +1 -1
- package/dist/memory/decisions.js +7 -24
- package/dist/memory/decisions.js.map +1 -1
- package/dist/memory/dispatch-trace.d.ts +12 -5
- package/dist/memory/dispatch-trace.d.ts.map +1 -1
- package/dist/memory/dispatch-trace.js +17 -7
- package/dist/memory/dispatch-trace.js.map +1 -1
- package/dist/memory/eligibility.d.ts +51 -0
- package/dist/memory/eligibility.d.ts.map +1 -0
- package/dist/memory/eligibility.js +77 -0
- package/dist/memory/eligibility.js.map +1 -0
- package/dist/memory/engine-compat.d.ts +2 -0
- package/dist/memory/engine-compat.d.ts.map +1 -1
- package/dist/memory/engine-compat.js +10 -0
- package/dist/memory/engine-compat.js.map +1 -1
- package/dist/memory/extraction-gate.d.ts +21 -7
- package/dist/memory/extraction-gate.d.ts.map +1 -1
- package/dist/memory/extraction-gate.js +178 -216
- package/dist/memory/extraction-gate.js.map +1 -1
- package/dist/memory/graph-auto-populate.d.ts +38 -5
- package/dist/memory/graph-auto-populate.d.ts.map +1 -1
- package/dist/memory/graph-auto-populate.js +182 -60
- package/dist/memory/graph-auto-populate.js.map +1 -1
- package/dist/memory/graph-memory-bridge.d.ts +14 -1
- package/dist/memory/graph-memory-bridge.d.ts.map +1 -1
- package/dist/memory/graph-memory-bridge.js +66 -28
- package/dist/memory/graph-memory-bridge.js.map +1 -1
- package/dist/memory/index.d.ts +1 -19
- package/dist/memory/index.d.ts.map +1 -1
- package/dist/memory/index.js +1 -50
- package/dist/memory/index.js.map +1 -1
- package/dist/memory/learnings.d.ts.map +1 -1
- package/dist/memory/learnings.js +2 -23
- package/dist/memory/learnings.js.map +1 -1
- package/dist/memory/manifest-filter.d.ts +21 -0
- package/dist/memory/manifest-filter.d.ts.map +1 -0
- package/dist/memory/manifest-filter.js +51 -0
- package/dist/memory/manifest-filter.js.map +1 -0
- package/dist/memory/manifest-ingestion.d.ts +28 -30
- package/dist/memory/manifest-ingestion.d.ts.map +1 -1
- package/dist/memory/manifest-ingestion.js +104 -235
- package/dist/memory/manifest-ingestion.js.map +1 -1
- package/dist/memory/observer-reflector.d.ts +2 -0
- package/dist/memory/observer-reflector.d.ts.map +1 -1
- package/dist/memory/observer-reflector.js +6 -49
- package/dist/memory/observer-reflector.js.map +1 -1
- package/dist/memory/patterns.d.ts +10 -0
- package/dist/memory/patterns.d.ts.map +1 -1
- package/dist/memory/patterns.js +25 -33
- package/dist/memory/patterns.js.map +1 -1
- package/dist/memory/pipeline-manifest-sqlite.d.ts +72 -9
- package/dist/memory/pipeline-manifest-sqlite.d.ts.map +1 -1
- package/dist/memory/pipeline-manifest-sqlite.js +508 -412
- package/dist/memory/pipeline-manifest-sqlite.js.map +1 -1
- package/dist/memory/retrieval/build-retrieval-bundle.d.ts.map +1 -1
- package/dist/memory/retrieval/build-retrieval-bundle.js +16 -15
- package/dist/memory/retrieval/build-retrieval-bundle.js.map +1 -1
- package/dist/memory/retrieval/fetch.d.ts +7 -0
- package/dist/memory/retrieval/fetch.d.ts.map +1 -1
- package/dist/memory/retrieval/fetch.js +14 -11
- package/dist/memory/retrieval/fetch.js.map +1 -1
- package/dist/memory/retrieval/observe.d.ts +7 -1
- package/dist/memory/retrieval/observe.d.ts.map +1 -1
- package/dist/memory/retrieval/observe.js +58 -4
- package/dist/memory/retrieval/observe.js.map +1 -1
- package/dist/memory/retrieval/search.d.ts +14 -1
- package/dist/memory/retrieval/search.d.ts.map +1 -1
- package/dist/memory/retrieval/search.js +133 -69
- package/dist/memory/retrieval/search.js.map +1 -1
- package/dist/memory/retrieval/telemetry.d.ts +31 -0
- package/dist/memory/retrieval/telemetry.d.ts.map +1 -0
- package/dist/memory/retrieval/telemetry.js +53 -0
- package/dist/memory/retrieval/telemetry.js.map +1 -0
- package/dist/nexus/analyze-orchestrator.d.ts +41 -9
- package/dist/nexus/analyze-orchestrator.d.ts.map +1 -1
- package/dist/nexus/analyze-orchestrator.js +257 -58
- package/dist/nexus/analyze-orchestrator.js.map +1 -1
- package/dist/nexus/api-contracts.d.ts +2 -6
- package/dist/nexus/api-contracts.d.ts.map +1 -1
- package/dist/nexus/api-contracts.js +11 -2
- package/dist/nexus/api-contracts.js.map +1 -1
- package/dist/nexus/context.d.ts.map +1 -1
- package/dist/nexus/context.js +14 -37
- package/dist/nexus/context.js.map +1 -1
- package/dist/nexus/diff.d.ts.map +1 -1
- package/dist/nexus/diff.js +2 -1
- package/dist/nexus/diff.js.map +1 -1
- package/dist/nexus/identity.d.ts +29 -3
- package/dist/nexus/identity.d.ts.map +1 -1
- package/dist/nexus/identity.js +63 -12
- package/dist/nexus/identity.js.map +1 -1
- package/dist/nexus/impact.d.ts +21 -19
- package/dist/nexus/impact.d.ts.map +1 -1
- package/dist/nexus/impact.js +96 -192
- package/dist/nexus/impact.js.map +1 -1
- package/dist/nexus/knowledge.d.ts +80 -0
- package/dist/nexus/knowledge.d.ts.map +1 -0
- package/dist/nexus/knowledge.js +786 -0
- package/dist/nexus/knowledge.js.map +1 -0
- package/dist/nexus/living-brain.d.ts +8 -5
- package/dist/nexus/living-brain.d.ts.map +1 -1
- package/dist/nexus/living-brain.js +252 -188
- package/dist/nexus/living-brain.js.map +1 -1
- package/dist/nexus/registry.d.ts +11 -2
- package/dist/nexus/registry.d.ts.map +1 -1
- package/dist/nexus/registry.js +144 -128
- package/dist/nexus/registry.js.map +1 -1
- package/dist/nexus/source-roots.d.ts +16 -0
- package/dist/nexus/source-roots.d.ts.map +1 -0
- package/dist/nexus/source-roots.js +174 -0
- package/dist/nexus/source-roots.js.map +1 -0
- package/dist/nexus/task-evidence.d.ts +22 -0
- package/dist/nexus/task-evidence.d.ts.map +1 -0
- package/dist/nexus/task-evidence.js +210 -0
- package/dist/nexus/task-evidence.js.map +1 -0
- package/dist/nexus/tasks-bridge.d.ts +14 -7
- package/dist/nexus/tasks-bridge.d.ts.map +1 -1
- package/dist/nexus/tasks-bridge.js +81 -40
- package/dist/nexus/tasks-bridge.js.map +1 -1
- package/dist/orchestrate/lifecycle-ops.d.ts.map +1 -1
- package/dist/orchestrate/lifecycle-ops.js +170 -120
- package/dist/orchestrate/lifecycle-ops.js.map +1 -1
- package/dist/orchestrate/query-ops.d.ts +6 -7
- package/dist/orchestrate/query-ops.d.ts.map +1 -1
- package/dist/orchestrate/query-ops.js +509 -532
- package/dist/orchestrate/query-ops.js.map +1 -1
- package/dist/orchestration/bootstrap.d.ts +15 -1
- package/dist/orchestration/bootstrap.d.ts.map +1 -1
- package/dist/orchestration/bootstrap.js +21 -10
- package/dist/orchestration/bootstrap.js.map +1 -1
- package/dist/orchestration/index.d.ts +35 -3
- package/dist/orchestration/index.d.ts.map +1 -1
- package/dist/orchestration/index.js +64 -35
- package/dist/orchestration/index.js.map +1 -1
- package/dist/orchestration/lead-rollup.d.ts +24 -1
- package/dist/orchestration/lead-rollup.d.ts.map +1 -1
- package/dist/orchestration/lead-rollup.js +31 -11
- package/dist/orchestration/lead-rollup.js.map +1 -1
- package/dist/orchestration/spawn-prompt.d.ts.map +1 -1
- package/dist/orchestration/spawn-prompt.js +25 -45
- package/dist/orchestration/spawn-prompt.js.map +1 -1
- package/dist/orchestration/unblock.d.ts +15 -1
- package/dist/orchestration/unblock.d.ts.map +1 -1
- package/dist/orchestration/unblock.js +23 -12
- package/dist/orchestration/unblock.js.map +1 -1
- package/dist/orchestration/validate-spawn.d.ts.map +1 -1
- package/dist/orchestration/validate-spawn.js +3 -3
- package/dist/orchestration/validate-spawn.js.map +1 -1
- package/dist/orchestration/waves.d.ts +29 -13
- package/dist/orchestration/waves.d.ts.map +1 -1
- package/dist/orchestration/waves.js +43 -55
- package/dist/orchestration/waves.js.map +1 -1
- package/dist/paths.d.ts +17 -163
- package/dist/paths.d.ts.map +1 -1
- package/dist/paths.js +145 -496
- package/dist/paths.js.map +1 -1
- package/dist/project-info.d.ts +2 -11
- package/dist/project-info.d.ts.map +1 -1
- package/dist/project-info.js +3 -31
- package/dist/project-info.js.map +1 -1
- package/dist/project-scope.d.ts +239 -0
- package/dist/project-scope.d.ts.map +1 -0
- package/dist/project-scope.js +473 -0
- package/dist/project-scope.js.map +1 -0
- package/dist/release/pr-evidence.d.ts +23 -4
- package/dist/release/pr-evidence.d.ts.map +1 -1
- package/dist/release/pr-evidence.js +65 -9
- package/dist/release/pr-evidence.js.map +1 -1
- package/dist/render/nexus/graph/index.d.ts.map +1 -1
- package/dist/render/nexus/graph/index.js +4 -2
- package/dist/render/nexus/graph/index.js.map +1 -1
- package/dist/render/orchestration/audit-reconstruct.d.ts +11 -0
- package/dist/render/orchestration/audit-reconstruct.d.ts.map +1 -1
- package/dist/render/orchestration/audit-reconstruct.js +21 -6
- package/dist/render/orchestration/audit-reconstruct.js.map +1 -1
- package/dist/render/tasks/show.js +2 -1
- package/dist/render/tasks/show.js.map +1 -1
- package/dist/resources/spawn-wrapper.d.ts +82 -14
- package/dist/resources/spawn-wrapper.d.ts.map +1 -1
- package/dist/resources/spawn-wrapper.js +585 -27
- package/dist/resources/spawn-wrapper.js.map +1 -1
- package/dist/selfimprove/fix-gen.js +4055 -1734
- package/dist/selfimprove/fix-gen.js.map +3 -3
- package/dist/sequence/index.d.ts.map +1 -1
- package/dist/sequence/index.js +76 -68
- package/dist/sequence/index.js.map +1 -1
- package/dist/session/canon-lint.d.ts +24 -3
- package/dist/session/canon-lint.d.ts.map +1 -1
- package/dist/session/canon-lint.js +72 -31
- package/dist/session/canon-lint.js.map +1 -1
- package/dist/session/engine-ops.d.ts +1 -4
- package/dist/session/engine-ops.d.ts.map +1 -1
- package/dist/session/engine-ops.js +42 -6
- package/dist/session/engine-ops.js.map +1 -1
- package/dist/sessions/briefing.d.ts +11 -1
- package/dist/sessions/briefing.d.ts.map +1 -1
- package/dist/sessions/briefing.js +76 -8
- package/dist/sessions/briefing.js.map +1 -1
- package/dist/sessions/handoff.d.ts +3 -1
- package/dist/sessions/handoff.d.ts.map +1 -1
- package/dist/sessions/handoff.js +2 -0
- package/dist/sessions/handoff.js.map +1 -1
- package/dist/shutdown-deadline.d.ts +24 -33
- package/dist/shutdown-deadline.d.ts.map +1 -1
- package/dist/shutdown-deadline.js +71 -14
- package/dist/shutdown-deadline.js.map +1 -1
- package/dist/shutdown.d.ts +21 -10
- package/dist/shutdown.d.ts.map +1 -1
- package/dist/shutdown.js +89 -42
- package/dist/shutdown.js.map +1 -1
- package/dist/skills/index.d.ts +1 -1
- package/dist/skills/index.d.ts.map +1 -1
- package/dist/skills/index.js +1 -1
- package/dist/skills/index.js.map +1 -1
- package/dist/skills/orchestrator/validator.d.ts +87 -20
- package/dist/skills/orchestrator/validator.d.ts.map +1 -1
- package/dist/skills/orchestrator/validator.js +330 -241
- package/dist/skills/orchestrator/validator.js.map +1 -1
- package/dist/store/agent-resolver.d.ts.map +1 -1
- package/dist/store/agent-resolver.js +16 -9
- package/dist/store/agent-resolver.js.map +1 -1
- package/dist/store/attachment-store.d.ts +4 -1
- package/dist/store/attachment-store.d.ts.map +1 -1
- package/dist/store/attachment-store.js +20 -3
- package/dist/store/attachment-store.js.map +1 -1
- package/dist/store/background-jobs.d.ts +426 -105
- package/dist/store/background-jobs.d.ts.map +1 -1
- package/dist/store/background-jobs.js +1208 -252
- package/dist/store/background-jobs.js.map +1 -1
- package/dist/store/background-ops.d.ts +145 -8
- package/dist/store/background-ops.d.ts.map +1 -1
- package/dist/store/background-ops.js +459 -15
- package/dist/store/background-ops.js.map +1 -1
- package/dist/store/backup-inspect.d.ts +48 -4
- package/dist/store/backup-inspect.d.ts.map +1 -1
- package/dist/store/backup-inspect.js +384 -4
- package/dist/store/backup-inspect.js.map +1 -1
- package/dist/store/converters.d.ts.map +1 -1
- package/dist/store/converters.js +19 -2
- package/dist/store/converters.js.map +1 -1
- package/dist/store/data-accessor.d.ts +9 -1
- package/dist/store/data-accessor.d.ts.map +1 -1
- package/dist/store/data-accessor.js +22 -5
- package/dist/store/data-accessor.js.map +1 -1
- package/dist/store/data-safety-central.d.ts.map +1 -1
- package/dist/store/data-safety-central.js +272 -232
- package/dist/store/data-safety-central.js.map +1 -1
- package/dist/store/db-helpers.d.ts +19 -3
- package/dist/store/db-helpers.d.ts.map +1 -1
- package/dist/store/db-helpers.js +42 -58
- package/dist/store/db-helpers.js.map +1 -1
- package/dist/store/dual-scope-db.d.ts +63 -4
- package/dist/store/dual-scope-db.d.ts.map +1 -1
- package/dist/store/dual-scope-db.js +166 -19
- package/dist/store/dual-scope-db.js.map +1 -1
- package/dist/store/exodus/archive.d.ts +21 -7
- package/dist/store/exodus/archive.d.ts.map +1 -1
- package/dist/store/exodus/archive.js +60 -18
- package/dist/store/exodus/archive.js.map +1 -1
- package/dist/store/exodus/migrate.d.ts.map +1 -1
- package/dist/store/exodus/migrate.js +27 -23
- package/dist/store/exodus/migrate.js.map +1 -1
- package/dist/store/exodus/on-open.d.ts +16 -27
- package/dist/store/exodus/on-open.d.ts.map +1 -1
- package/dist/store/exodus/on-open.js +121 -169
- package/dist/store/exodus/on-open.js.map +1 -1
- package/dist/store/exodus/recovery.d.ts +90 -0
- package/dist/store/exodus/recovery.d.ts.map +1 -0
- package/dist/store/exodus/recovery.js +434 -0
- package/dist/store/exodus/recovery.js.map +1 -0
- package/dist/store/exodus/types.d.ts +15 -0
- package/dist/store/exodus/types.d.ts.map +1 -1
- package/dist/store/memory-accessor.d.ts +52 -3
- package/dist/store/memory-accessor.d.ts.map +1 -1
- package/dist/store/memory-accessor.js +122 -7
- package/dist/store/memory-accessor.js.map +1 -1
- package/dist/store/nexus-sqlite.d.ts +24 -6
- package/dist/store/nexus-sqlite.d.ts.map +1 -1
- package/dist/store/nexus-sqlite.js +39 -20
- package/dist/store/nexus-sqlite.js.map +1 -1
- package/dist/store/ports/domain-binding.d.ts.map +1 -1
- package/dist/store/ports/domain-binding.js +27 -5
- package/dist/store/ports/domain-binding.js.map +1 -1
- package/dist/store/schema/background-jobs.d.ts +181 -2
- package/dist/store/schema/background-jobs.d.ts.map +1 -1
- package/dist/store/schema/background-jobs.js +27 -3
- package/dist/store/schema/background-jobs.js.map +1 -1
- package/dist/store/schema/cleo-global/skills.d.ts +2 -2
- package/dist/store/schema/cleo-project/lifecycle.d.ts +2 -2
- package/dist/store/schema/cleo-project/runtime.d.ts +1 -1
- package/dist/store/schema/cleo-project/tasks-core.d.ts +1 -1
- package/dist/store/schema/lifecycle.d.ts +2 -2
- package/dist/store/schema/skills-schema.d.ts +2 -2
- package/dist/store/schema/tasks.d.ts +1 -1
- package/dist/store/session-store.d.ts +3 -1
- package/dist/store/session-store.d.ts.map +1 -1
- package/dist/store/session-store.js +252 -207
- package/dist/store/session-store.js.map +1 -1
- package/dist/store/sqlite-data-accessor.d.ts +39 -4
- package/dist/store/sqlite-data-accessor.d.ts.map +1 -1
- package/dist/store/sqlite-data-accessor.js +689 -527
- package/dist/store/sqlite-data-accessor.js.map +1 -1
- package/dist/store/tasks-sqlite.d.ts +3 -1
- package/dist/store/tasks-sqlite.d.ts.map +1 -1
- package/dist/store/tasks-sqlite.js +309 -279
- package/dist/store/tasks-sqlite.js.map +1 -1
- package/dist/store/validation-schemas.d.ts +8 -8
- package/dist/store/writer-lease.d.ts +80 -8
- package/dist/store/writer-lease.d.ts.map +1 -1
- package/dist/store/writer-lease.js +503 -134
- package/dist/store/writer-lease.js.map +1 -1
- package/dist/system/audit.d.ts +2 -1
- package/dist/system/audit.d.ts.map +1 -1
- package/dist/system/audit.js +118 -71
- package/dist/system/audit.js.map +1 -1
- package/dist/system/backup.d.ts.map +1 -1
- package/dist/system/backup.js +5 -5
- package/dist/system/backup.js.map +1 -1
- package/dist/system/inject-generate.js +1 -1
- package/dist/task-work/index.d.ts +3 -0
- package/dist/task-work/index.d.ts.map +1 -1
- package/dist/task-work/index.js +34 -37
- package/dist/task-work/index.js.map +1 -1
- package/dist/tasks/ac-coverage-gate.d.ts.map +1 -1
- package/dist/tasks/ac-coverage-gate.js +4 -0
- package/dist/tasks/ac-coverage-gate.js.map +1 -1
- package/dist/tasks/ac-immutability.d.ts +7 -4
- package/dist/tasks/ac-immutability.d.ts.map +1 -1
- package/dist/tasks/ac-immutability.js +19 -17
- package/dist/tasks/ac-immutability.js.map +1 -1
- package/dist/tasks/ac-table.d.ts +5 -5
- package/dist/tasks/ac-table.d.ts.map +1 -1
- package/dist/tasks/ac-table.js +26 -12
- package/dist/tasks/ac-table.js.map +1 -1
- package/dist/tasks/acceptance-input.d.ts +52 -0
- package/dist/tasks/acceptance-input.d.ts.map +1 -0
- package/dist/tasks/acceptance-input.js +259 -0
- package/dist/tasks/acceptance-input.js.map +1 -0
- package/dist/tasks/add.d.ts +67 -29
- package/dist/tasks/add.d.ts.map +1 -1
- package/dist/tasks/add.js +255 -97
- package/dist/tasks/add.js.map +1 -1
- package/dist/tasks/complete.d.ts +16 -1
- package/dist/tasks/complete.d.ts.map +1 -1
- package/dist/tasks/complete.js +152 -55
- package/dist/tasks/complete.js.map +1 -1
- package/dist/tasks/decompose.d.ts +103 -0
- package/dist/tasks/decompose.d.ts.map +1 -0
- package/dist/tasks/decompose.js +224 -0
- package/dist/tasks/decompose.js.map +1 -0
- package/dist/tasks/delete.d.ts +5 -8
- package/dist/tasks/delete.d.ts.map +1 -1
- package/dist/tasks/delete.js +4 -3
- package/dist/tasks/delete.js.map +1 -1
- package/dist/tasks/dependency-check.d.ts +59 -0
- package/dist/tasks/dependency-check.d.ts.map +1 -1
- package/dist/tasks/dependency-check.js +73 -0
- package/dist/tasks/dependency-check.js.map +1 -1
- package/dist/tasks/deps-ready.d.ts +13 -1
- package/dist/tasks/deps-ready.d.ts.map +1 -1
- package/dist/tasks/deps-ready.js +16 -5
- package/dist/tasks/deps-ready.js.map +1 -1
- package/dist/tasks/engine-converters.d.ts +7 -0
- package/dist/tasks/engine-converters.d.ts.map +1 -1
- package/dist/tasks/engine-converters.js +8 -1
- package/dist/tasks/engine-converters.js.map +1 -1
- package/dist/tasks/evidence.d.ts +88 -27
- package/dist/tasks/evidence.d.ts.map +1 -1
- package/dist/tasks/evidence.js +344 -43
- package/dist/tasks/evidence.js.map +1 -1
- package/dist/tasks/find.d.ts +16 -12
- package/dist/tasks/find.d.ts.map +1 -1
- package/dist/tasks/find.js +107 -93
- package/dist/tasks/find.js.map +1 -1
- package/dist/tasks/gate-preview.d.ts +73 -0
- package/dist/tasks/gate-preview.d.ts.map +1 -0
- package/dist/tasks/gate-preview.js +119 -0
- package/dist/tasks/gate-preview.js.map +1 -0
- package/dist/tasks/gate-runner.d.ts +88 -14
- package/dist/tasks/gate-runner.d.ts.map +1 -1
- package/dist/tasks/gate-runner.js +719 -250
- package/dist/tasks/gate-runner.js.map +1 -1
- package/dist/tasks/hierarchy-policy.d.ts +8 -0
- package/dist/tasks/hierarchy-policy.d.ts.map +1 -1
- package/dist/tasks/hierarchy-policy.js +9 -2
- package/dist/tasks/hierarchy-policy.js.map +1 -1
- package/dist/tasks/hierarchy.d.ts +67 -1
- package/dist/tasks/hierarchy.d.ts.map +1 -1
- package/dist/tasks/hierarchy.js +81 -1
- package/dist/tasks/hierarchy.js.map +1 -1
- package/dist/tasks/index.d.ts +3 -0
- package/dist/tasks/index.d.ts.map +1 -1
- package/dist/tasks/index.js +3 -0
- package/dist/tasks/index.js.map +1 -1
- package/dist/tasks/infer-add-params.d.ts +1 -20
- package/dist/tasks/infer-add-params.d.ts.map +1 -1
- package/dist/tasks/infer-add-params.js +2 -203
- package/dist/tasks/infer-add-params.js.map +1 -1
- package/dist/tasks/list.d.ts +7 -2
- package/dist/tasks/list.d.ts.map +1 -1
- package/dist/tasks/list.js +24 -36
- package/dist/tasks/list.js.map +1 -1
- package/dist/tasks/ops.d.ts +6 -61
- package/dist/tasks/ops.d.ts.map +1 -1
- package/dist/tasks/ops.js +5 -53
- package/dist/tasks/ops.js.map +1 -1
- package/dist/tasks/plan.d.ts +15 -1
- package/dist/tasks/plan.d.ts.map +1 -1
- package/dist/tasks/plan.js +23 -25
- package/dist/tasks/plan.js.map +1 -1
- package/dist/tasks/population.d.ts +46 -0
- package/dist/tasks/population.d.ts.map +1 -0
- package/dist/tasks/population.js +88 -0
- package/dist/tasks/population.js.map +1 -0
- package/dist/tasks/reconcile-scope.d.ts +157 -0
- package/dist/tasks/reconcile-scope.d.ts.map +1 -0
- package/dist/tasks/reconcile-scope.js +242 -0
- package/dist/tasks/reconcile-scope.js.map +1 -0
- package/dist/tasks/req.d.ts +51 -12
- package/dist/tasks/req.d.ts.map +1 -1
- package/dist/tasks/req.js +125 -69
- package/dist/tasks/req.js.map +1 -1
- package/dist/tasks/session-scope.d.ts +6 -31
- package/dist/tasks/session-scope.d.ts.map +1 -1
- package/dist/tasks/session-scope.js +3 -17
- package/dist/tasks/session-scope.js.map +1 -1
- package/dist/tasks/severity-attestation.d.ts +39 -10
- package/dist/tasks/severity-attestation.d.ts.map +1 -1
- package/dist/tasks/severity-attestation.js +75 -36
- package/dist/tasks/severity-attestation.js.map +1 -1
- package/dist/tasks/task-next.d.ts +5 -0
- package/dist/tasks/task-next.d.ts.map +1 -1
- package/dist/tasks/task-next.js +10 -9
- package/dist/tasks/task-next.js.map +1 -1
- package/dist/tasks/task-reparent.d.ts.map +1 -1
- package/dist/tasks/task-reparent.js +3 -13
- package/dist/tasks/task-reparent.js.map +1 -1
- package/dist/tasks/update.d.ts +20 -43
- package/dist/tasks/update.d.ts.map +1 -1
- package/dist/tasks/update.js +64 -49
- package/dist/tasks/update.js.map +1 -1
- package/dist/validation/engine-ops.d.ts +17 -1
- package/dist/validation/engine-ops.d.ts.map +1 -1
- package/dist/validation/engine-ops.js +149 -11
- package/dist/validation/engine-ops.js.map +1 -1
- package/dist/workgraph/reparent-preflight.d.ts +1 -1
- package/dist/workgraph/reparent-preflight.d.ts.map +1 -1
- package/dist/workgraph/reparent-preflight.js +6 -1
- package/dist/workgraph/reparent-preflight.js.map +1 -1
- package/dist/workgraph/scaffold-apply.d.ts.map +1 -1
- package/dist/workgraph/scaffold-apply.js +81 -76
- package/dist/workgraph/scaffold-apply.js.map +1 -1
- package/dist/workgraph/structure-validation.d.ts +1 -1
- package/dist/workgraph/structure-validation.d.ts.map +1 -1
- package/dist/workgraph/structure-validation.js +6 -1
- package/dist/workgraph/structure-validation.js.map +1 -1
- package/migrations/drizzle-tasks/20260919180000_t12263-job-ownership-fences/migration.sql +34 -0
- package/migrations/drizzle-tasks/20260919184500_t12265-durable-pending-proposals/migration.sql +4 -0
- package/package.json +18 -13
- package/schemas/config.schema.json +2 -2
- package/schemas/project-context.schema.json +12 -0
- package/templates/CLEO-INJECTION.md +114 -101
|
@@ -0,0 +1,434 @@
|
|
|
1
|
+
/** Durable, resource-scoped recovery for Exodus INSERTs (T12260). */
|
|
2
|
+
import { randomUUID } from 'node:crypto';
|
|
3
|
+
import { constants } from 'node:sqlite';
|
|
4
|
+
import { z } from 'zod';
|
|
5
|
+
const RECEIPTS = '_exodus_recovery_rows';
|
|
6
|
+
const identitySchema = z.array(z.tuple([z.enum(['null', 'integer', 'real', 'text', 'blob']), z.string()]));
|
|
7
|
+
/**
|
|
8
|
+
* A copy whose effects cannot be recovered must abort the source transaction.
|
|
9
|
+
* @remarks The migration caller retains its staging journal for explicit recovery.
|
|
10
|
+
*/
|
|
11
|
+
export class ExodusRecoveryError extends Error {
|
|
12
|
+
}
|
|
13
|
+
function identityValues(encoded) {
|
|
14
|
+
return identitySchema.parse(JSON.parse(encoded)).map(([kind, value]) => {
|
|
15
|
+
if (kind === 'null')
|
|
16
|
+
return null;
|
|
17
|
+
if (kind === 'integer')
|
|
18
|
+
return BigInt(value);
|
|
19
|
+
if (kind === 'real')
|
|
20
|
+
return value === '9.0e+999' ? Infinity : value === '-9.0e+999' ? -Infinity : Number(value);
|
|
21
|
+
const bytes = Buffer.from(value, 'hex');
|
|
22
|
+
return kind === 'text' ? bytes.toString('utf8') : bytes;
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
function identifier(value) {
|
|
26
|
+
return `"${value.replaceAll('"', '""')}"`;
|
|
27
|
+
}
|
|
28
|
+
/** SQLite encodes every value without lossy JS numbers or NUL string truncation. */
|
|
29
|
+
function image(columns) {
|
|
30
|
+
return `json_array(${columns
|
|
31
|
+
.map((name) => {
|
|
32
|
+
const col = identifier(name);
|
|
33
|
+
return `json_array(typeof(${col}), CASE WHEN typeof(${col}) IN ('text','blob') THEN hex(${col}) ELSE quote(${col}) END)`;
|
|
34
|
+
})
|
|
35
|
+
.join(',')})`;
|
|
36
|
+
}
|
|
37
|
+
function tableShape(db, schema, table) {
|
|
38
|
+
const sql = db
|
|
39
|
+
.prepare(`SELECT sql FROM ${identifier(schema)}.sqlite_master WHERE type='table' AND name=?`)
|
|
40
|
+
.get(table)?.sql;
|
|
41
|
+
if (typeof sql !== 'string' || /CREATE\s+VIRTUAL\s+TABLE/i.test(sql)) {
|
|
42
|
+
throw new ExodusRecoveryError(`Exodus recovery requires an ordinary table: ${schema}.${table}`);
|
|
43
|
+
}
|
|
44
|
+
const columns = db
|
|
45
|
+
.prepare(`PRAGMA ${identifier(schema)}.table_xinfo(${identifier(table)})`)
|
|
46
|
+
.all();
|
|
47
|
+
const names = columns.map((column) => {
|
|
48
|
+
if (typeof column.name !== 'string')
|
|
49
|
+
throw new ExodusRecoveryError('Invalid Exodus column metadata');
|
|
50
|
+
return column.name;
|
|
51
|
+
});
|
|
52
|
+
const keys = columns
|
|
53
|
+
.filter((column) => Number(column.pk) > 0)
|
|
54
|
+
.sort((a, b) => Number(a.pk) - Number(b.pk))
|
|
55
|
+
.map((column) => String(column.name));
|
|
56
|
+
if (!keys.length)
|
|
57
|
+
throw new ExodusRecoveryError(`Exodus recovery needs a stable row identity: ${schema}.${table}`);
|
|
58
|
+
return { sql, keys, identity: image(keys), row: image(names) };
|
|
59
|
+
}
|
|
60
|
+
function ensureReceipts(db, schema) {
|
|
61
|
+
db.exec(`CREATE TABLE IF NOT EXISTS ${identifier(schema)}.${identifier(RECEIPTS)} (
|
|
62
|
+
id INTEGER PRIMARY KEY,
|
|
63
|
+
operation_id TEXT NOT NULL,
|
|
64
|
+
target_db TEXT NOT NULL,
|
|
65
|
+
target_table TEXT NOT NULL,
|
|
66
|
+
source_db TEXT NOT NULL,
|
|
67
|
+
source_table TEXT NOT NULL,
|
|
68
|
+
table_sql TEXT NOT NULL,
|
|
69
|
+
identity_json TEXT NOT NULL,
|
|
70
|
+
row_json TEXT NOT NULL,
|
|
71
|
+
kind TEXT NOT NULL DEFAULT 'insert' CHECK(kind IN ('insert','handoff_update')),
|
|
72
|
+
before_row_json TEXT,
|
|
73
|
+
before_value TEXT,
|
|
74
|
+
state TEXT NOT NULL DEFAULT 'committed' CHECK(state IN ('committed','rolled_back'))
|
|
75
|
+
)`);
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Inspect durable ownership for an existing staging operation.
|
|
79
|
+
*
|
|
80
|
+
* @param db - Exact target database connection.
|
|
81
|
+
* @param operation - Existing Exodus staging-directory identity.
|
|
82
|
+
* @returns Whether this target records the operation.
|
|
83
|
+
* @remarks A staging journal alone cannot prove ownership of target rows.
|
|
84
|
+
* @example
|
|
85
|
+
* ```ts
|
|
86
|
+
* hasExodusRecovery(db, stagingDirectory);
|
|
87
|
+
* ```
|
|
88
|
+
*/
|
|
89
|
+
export function hasExodusRecovery(db, operation) {
|
|
90
|
+
const present = db
|
|
91
|
+
.prepare("SELECT name FROM main.sqlite_master WHERE type='table' AND name='_exodus_recovery_operations'")
|
|
92
|
+
.get();
|
|
93
|
+
if (!present)
|
|
94
|
+
return false;
|
|
95
|
+
const target = db
|
|
96
|
+
.prepare('PRAGMA database_list')
|
|
97
|
+
.all()
|
|
98
|
+
.find((entry) => entry.name === 'main')?.file;
|
|
99
|
+
return (db
|
|
100
|
+
.prepare('SELECT target_db FROM main._exodus_recovery_operations WHERE operation_id=?')
|
|
101
|
+
.get(operation)?.target_db === target);
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Register the staging operation on the exact target before copying.
|
|
105
|
+
*
|
|
106
|
+
* @param db - Exact target database connection.
|
|
107
|
+
* @param operation - Existing Exodus staging-directory identity.
|
|
108
|
+
* @param schema - Target schema containing the receipt tables.
|
|
109
|
+
* @remarks Call within the source transaction so operation ownership commits with its rows.
|
|
110
|
+
* @example
|
|
111
|
+
* ```ts
|
|
112
|
+
* prepareExodusRecovery(db, stagingDirectory, 'main');
|
|
113
|
+
* ```
|
|
114
|
+
*/
|
|
115
|
+
export function prepareExodusRecovery(db, operation, schema = 'main') {
|
|
116
|
+
ensureReceipts(db, schema);
|
|
117
|
+
db.exec(`CREATE TABLE IF NOT EXISTS ${identifier(schema)}._exodus_recovery_operations (
|
|
118
|
+
operation_id TEXT PRIMARY KEY, target_db TEXT NOT NULL
|
|
119
|
+
)`);
|
|
120
|
+
const target = db
|
|
121
|
+
.prepare('PRAGMA database_list')
|
|
122
|
+
.all()
|
|
123
|
+
.find((entry) => entry.name === schema)?.file;
|
|
124
|
+
if (typeof target !== 'string' || !target)
|
|
125
|
+
throw new ExodusRecoveryError('Exodus recovery needs a durable target database');
|
|
126
|
+
const prior = db
|
|
127
|
+
.prepare(`SELECT target_db FROM ${identifier(schema)}._exodus_recovery_operations WHERE operation_id=?`)
|
|
128
|
+
.get(operation);
|
|
129
|
+
if (prior && prior.target_db !== target)
|
|
130
|
+
throw new ExodusRecoveryError('Exodus recovery operation target changed');
|
|
131
|
+
db.prepare(`INSERT OR IGNORE INTO ${identifier(schema)}._exodus_recovery_operations VALUES (?,?)`).run(operation, target);
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Compile on the dedicated migration handle under SQLite's effect authorizer.
|
|
135
|
+
* Guard triggers are read-only. The only supported extra mutation is the
|
|
136
|
+
* canonical session handoff mirror, whose complete changed-row set is captured
|
|
137
|
+
* below. Extension/UDF functions are refused because their effects are opaque.
|
|
138
|
+
* These dedicated handles are created by Exodus without an existing authorizer;
|
|
139
|
+
* the temporary policy is always removed before receipt statements execute.
|
|
140
|
+
*/
|
|
141
|
+
function inspectEffects(db, sql, schema, table, action) {
|
|
142
|
+
const functions = db.prepare('PRAGMA function_list').all();
|
|
143
|
+
// SQLite retains built-in overloads after an application replaces a name.
|
|
144
|
+
// Refuse the entire overridden name; its runtime dispatch is opaque here.
|
|
145
|
+
const overridden = new Set(functions.filter((row) => row.builtin !== 1).map((row) => row.name));
|
|
146
|
+
const builtins = new Set(functions
|
|
147
|
+
.filter((row) => row.builtin === 1 && !overridden.has(row.name))
|
|
148
|
+
.map((row) => row.name));
|
|
149
|
+
let mirrorsHandoff = false;
|
|
150
|
+
let refusal;
|
|
151
|
+
db.setAuthorizer((code, name, column, dbName, trigger) => {
|
|
152
|
+
if (code === constants.SQLITE_FUNCTION &&
|
|
153
|
+
(!builtins.has(column) || column === 'load_extension')) {
|
|
154
|
+
refusal = `opaque function ${String(column)}`;
|
|
155
|
+
return constants.SQLITE_DENY;
|
|
156
|
+
}
|
|
157
|
+
if ([constants.SQLITE_INSERT, constants.SQLITE_UPDATE, constants.SQLITE_DELETE].includes(code)) {
|
|
158
|
+
if (!trigger && code === action && dbName === schema && name === table)
|
|
159
|
+
return constants.SQLITE_OK;
|
|
160
|
+
if (trigger &&
|
|
161
|
+
action === constants.SQLITE_INSERT &&
|
|
162
|
+
code === constants.SQLITE_UPDATE &&
|
|
163
|
+
dbName === schema &&
|
|
164
|
+
name === 'tasks_sessions' &&
|
|
165
|
+
column === 'handoff_json') {
|
|
166
|
+
mirrorsHandoff = true;
|
|
167
|
+
return constants.SQLITE_OK;
|
|
168
|
+
}
|
|
169
|
+
refusal = `untracked trigger side effects: ${String(dbName)}.${String(name)} ${String(column)}`;
|
|
170
|
+
return constants.SQLITE_DENY;
|
|
171
|
+
}
|
|
172
|
+
return constants.SQLITE_OK;
|
|
173
|
+
});
|
|
174
|
+
try {
|
|
175
|
+
db.prepare(sql);
|
|
176
|
+
}
|
|
177
|
+
catch (error) {
|
|
178
|
+
throw new ExodusRecoveryError(refusal ?? (error instanceof Error ? error.message : String(error)), { cause: error });
|
|
179
|
+
}
|
|
180
|
+
finally {
|
|
181
|
+
db.setAuthorizer(null);
|
|
182
|
+
}
|
|
183
|
+
return mirrorsHandoff;
|
|
184
|
+
}
|
|
185
|
+
function handoffSnapshot(db, schema) {
|
|
186
|
+
const shape = tableShape(db, schema, 'tasks_sessions');
|
|
187
|
+
const rows = db
|
|
188
|
+
.prepare(`SELECT ${shape.identity} AS identity_json,${shape.row} AS row_json,${image(['handoff_json'])} AS handoff_value FROM ${identifier(schema)}.tasks_sessions`)
|
|
189
|
+
.all();
|
|
190
|
+
return {
|
|
191
|
+
shape,
|
|
192
|
+
rows: new Map(rows.map((row) => {
|
|
193
|
+
if (typeof row.identity_json !== 'string' ||
|
|
194
|
+
typeof row.row_json !== 'string' ||
|
|
195
|
+
typeof row.handoff_value !== 'string')
|
|
196
|
+
throw new ExodusRecoveryError('Invalid handoff row image');
|
|
197
|
+
if (identityValues(row.identity_json).includes(null))
|
|
198
|
+
throw new ExodusRecoveryError('Exodus recovery cannot own a nullable primary key');
|
|
199
|
+
return [row.identity_json, { row: row.row_json, value: row.handoff_value }];
|
|
200
|
+
})),
|
|
201
|
+
};
|
|
202
|
+
}
|
|
203
|
+
/**
|
|
204
|
+
* Insert rows with transactional ownership and effect receipts.
|
|
205
|
+
*
|
|
206
|
+
* @param db - Target connection inside the source transaction.
|
|
207
|
+
* @param schema - Target schema receiving rows.
|
|
208
|
+
* @param table - Target table with a stable declared primary key.
|
|
209
|
+
* @param insertSql - Migration INSERT statement whose effects are assessed.
|
|
210
|
+
* @param operation - Existing Exodus staging-directory identity.
|
|
211
|
+
* @param sourceDb - Source database identity recorded as provenance.
|
|
212
|
+
* @param sourceTable - Original source table name.
|
|
213
|
+
* @returns Number of directly inserted rows.
|
|
214
|
+
* @remarks Rows and receipts share a savepoint. Ignored rows have no receipt. Read-only guard triggers and recorded handoff mirrors are supported; other effects are refused.
|
|
215
|
+
* @example
|
|
216
|
+
* ```ts
|
|
217
|
+
* insertWithExodusReceipts(db, 'main', 'tasks_tasks', insertSql, stagingDirectory, sourcePath, 'tasks');
|
|
218
|
+
* ```
|
|
219
|
+
*/
|
|
220
|
+
export function insertWithExodusReceipts(db, schema, table, insertSql, operation, sourceDb, sourceTable) {
|
|
221
|
+
if (!db.isTransaction)
|
|
222
|
+
throw new ExodusRecoveryError('Exodus row receipts require the source transaction');
|
|
223
|
+
const shape = tableShape(db, schema, table);
|
|
224
|
+
const target = db
|
|
225
|
+
.prepare('PRAGMA database_list')
|
|
226
|
+
.all()
|
|
227
|
+
.find((entry) => entry.name === schema)?.file;
|
|
228
|
+
if (typeof target !== 'string' || !target)
|
|
229
|
+
throw new ExodusRecoveryError('Exodus recovery needs a durable target database');
|
|
230
|
+
db.exec('SAVEPOINT exodus_copy_receipts');
|
|
231
|
+
try {
|
|
232
|
+
prepareExodusRecovery(db, operation, schema);
|
|
233
|
+
const record = db.prepare(`INSERT INTO ${identifier(schema)}.${identifier(RECEIPTS)}
|
|
234
|
+
(operation_id,target_db,target_table,source_db,source_table,table_sql,identity_json,row_json)
|
|
235
|
+
VALUES (?,?,?,?,?,?,?,?)`);
|
|
236
|
+
const statement = `${insertSql} RETURNING ${shape.identity} AS identity_json, ${shape.row} AS row_json`;
|
|
237
|
+
const mirrorsHandoff = inspectEffects(db, statement, schema, table, constants.SQLITE_INSERT);
|
|
238
|
+
const before = mirrorsHandoff ? handoffSnapshot(db, schema) : undefined;
|
|
239
|
+
let inserted = 0;
|
|
240
|
+
for (const row of db.prepare(statement).iterate()) {
|
|
241
|
+
if (typeof row.identity_json !== 'string' || typeof row.row_json !== 'string')
|
|
242
|
+
throw new ExodusRecoveryError('Invalid Exodus returned row image');
|
|
243
|
+
if (identityValues(row.identity_json).includes(null))
|
|
244
|
+
throw new ExodusRecoveryError('Exodus recovery cannot own a nullable primary key');
|
|
245
|
+
record.run(operation, target, table, sourceDb, sourceTable, shape.sql, row.identity_json, row.row_json);
|
|
246
|
+
inserted++;
|
|
247
|
+
}
|
|
248
|
+
if (before) {
|
|
249
|
+
const after = handoffSnapshot(db, schema);
|
|
250
|
+
for (const [identity, current] of after.rows) {
|
|
251
|
+
const previous = before.rows.get(identity);
|
|
252
|
+
if (!previous)
|
|
253
|
+
throw new ExodusRecoveryError('Handoff mirror unexpectedly inserted a session');
|
|
254
|
+
if (previous.row === current.row)
|
|
255
|
+
continue;
|
|
256
|
+
db.prepare(`INSERT INTO ${identifier(schema)}.${identifier(RECEIPTS)}
|
|
257
|
+
(operation_id,target_db,target_table,source_db,source_table,table_sql,identity_json,row_json,kind,before_row_json,before_value)
|
|
258
|
+
VALUES (?,?,?,?,?,?,?,?,?,?,?)`).run(operation, target, 'tasks_sessions', sourceDb, sourceTable, before.shape.sql, identity, current.row, 'handoff_update', previous.row, previous.value);
|
|
259
|
+
}
|
|
260
|
+
if (after.rows.size !== before.rows.size)
|
|
261
|
+
throw new ExodusRecoveryError('Handoff mirror unexpectedly removed a session');
|
|
262
|
+
}
|
|
263
|
+
db.exec('RELEASE exodus_copy_receipts');
|
|
264
|
+
return inserted;
|
|
265
|
+
}
|
|
266
|
+
catch (error) {
|
|
267
|
+
db.exec('ROLLBACK TO exodus_copy_receipts');
|
|
268
|
+
db.exec('RELEASE exodus_copy_receipts');
|
|
269
|
+
throw new ExodusRecoveryError(error instanceof Error ? error.message : String(error), {
|
|
270
|
+
cause: error,
|
|
271
|
+
});
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
/**
|
|
275
|
+
* Recover unchanged resources owned by one staging operation.
|
|
276
|
+
*
|
|
277
|
+
* @param db - Exact target database connection.
|
|
278
|
+
* @param operation - Existing Exodus staging-directory identity.
|
|
279
|
+
* @returns Number of reverted inserted rows and mirror effects.
|
|
280
|
+
* @remarks All owned resources are checked before any mutation. Conflicts refuse the whole target scope; unrelated resources remain intact. Separate database files are not one atomic transaction.
|
|
281
|
+
* @example
|
|
282
|
+
* ```ts
|
|
283
|
+
* rollbackExodusReceipts(db, stagingDirectory);
|
|
284
|
+
* ```
|
|
285
|
+
*/
|
|
286
|
+
export function rollbackExodusReceipts(db, operation) {
|
|
287
|
+
const present = db
|
|
288
|
+
.prepare("SELECT name FROM main.sqlite_master WHERE type='table' AND name=?")
|
|
289
|
+
.get(RECEIPTS);
|
|
290
|
+
if (!present)
|
|
291
|
+
throw new ExodusRecoveryError('Exodus recovery receipts missing; automatic destructive recovery refused');
|
|
292
|
+
if (db.isTransaction)
|
|
293
|
+
throw new ExodusRecoveryError('Exodus recovery requires a dedicated idle connection');
|
|
294
|
+
const registered = db
|
|
295
|
+
.prepare('SELECT target_db FROM main._exodus_recovery_operations WHERE operation_id=?')
|
|
296
|
+
.get(operation);
|
|
297
|
+
const actualTarget = db
|
|
298
|
+
.prepare('PRAGMA database_list')
|
|
299
|
+
.all()
|
|
300
|
+
.find((entry) => entry.name === 'main')?.file;
|
|
301
|
+
if (!registered || registered.target_db !== actualTarget)
|
|
302
|
+
throw new ExodusRecoveryError('Exodus recovery operation is not registered on this target');
|
|
303
|
+
const foreignKeys = Number(db.prepare('PRAGMA foreign_keys').get()?.foreign_keys ?? 0);
|
|
304
|
+
db.exec('PRAGMA foreign_keys = OFF');
|
|
305
|
+
db.exec('BEGIN IMMEDIATE');
|
|
306
|
+
try {
|
|
307
|
+
const rows = db
|
|
308
|
+
.prepare(`SELECT * FROM main.${identifier(RECEIPTS)} WHERE operation_id=? AND state='committed' ORDER BY id DESC`)
|
|
309
|
+
.all(operation);
|
|
310
|
+
const target = db
|
|
311
|
+
.prepare('PRAGMA database_list')
|
|
312
|
+
.all()
|
|
313
|
+
.find((entry) => entry.name === 'main')?.file;
|
|
314
|
+
const shapes = new Map();
|
|
315
|
+
const beforeViolations = new Set(db
|
|
316
|
+
.prepare('PRAGMA main.foreign_key_check')
|
|
317
|
+
.all()
|
|
318
|
+
.map((row) => JSON.stringify(row)));
|
|
319
|
+
const simulated = new Map();
|
|
320
|
+
const guarded = rows.map((receipt) => {
|
|
321
|
+
if (receipt.target_db !== target ||
|
|
322
|
+
typeof receipt.target_table !== 'string' ||
|
|
323
|
+
typeof receipt.identity_json !== 'string' ||
|
|
324
|
+
typeof receipt.row_json !== 'string') {
|
|
325
|
+
throw new ExodusRecoveryError('Exodus recovery receipt target or row identity mismatch');
|
|
326
|
+
}
|
|
327
|
+
const shape = shapes.get(receipt.target_table) ?? tableShape(db, 'main', receipt.target_table);
|
|
328
|
+
shapes.set(receipt.target_table, shape);
|
|
329
|
+
if (shape.sql !== receipt.table_sql)
|
|
330
|
+
throw new ExodusRecoveryError(`Exodus recovery schema changed: ${receipt.target_table}`);
|
|
331
|
+
const values = identityValues(receipt.identity_json);
|
|
332
|
+
if (values.length !== shape.keys.length)
|
|
333
|
+
throw new ExodusRecoveryError('Exodus row identity shape changed');
|
|
334
|
+
const predicate = `${shape.keys.map((key) => `${identifier(key)} IS ?`).join(' AND ')} AND ${shape.row}=?`;
|
|
335
|
+
const key = JSON.stringify([receipt.target_table, receipt.identity_json]);
|
|
336
|
+
if (!simulated.has(key)) {
|
|
337
|
+
const actual = db
|
|
338
|
+
.prepare(`SELECT ${shape.row} AS row_json FROM main.${identifier(receipt.target_table)} WHERE ${shape.keys.map((name) => `${identifier(name)} IS ?`).join(' AND ')}`)
|
|
339
|
+
.all(...values);
|
|
340
|
+
if (actual.length !== 1 || typeof actual[0]?.row_json !== 'string')
|
|
341
|
+
throw new ExodusRecoveryError(`Exodus recovery row changed or missing: ${receipt.target_table}`);
|
|
342
|
+
simulated.set(key, actual[0].row_json);
|
|
343
|
+
}
|
|
344
|
+
if (simulated.get(key) !== receipt.row_json)
|
|
345
|
+
throw new ExodusRecoveryError(`Exodus recovery row changed or missing: ${receipt.target_table} receipt ${String(receipt.id)}`);
|
|
346
|
+
if (receipt.kind === 'handoff_update') {
|
|
347
|
+
if (receipt.target_table !== 'tasks_sessions' ||
|
|
348
|
+
typeof receipt.before_row_json !== 'string' ||
|
|
349
|
+
typeof receipt.before_value !== 'string')
|
|
350
|
+
throw new ExodusRecoveryError('Invalid handoff recovery receipt');
|
|
351
|
+
simulated.set(key, receipt.before_row_json);
|
|
352
|
+
}
|
|
353
|
+
else if (receipt.kind === 'insert')
|
|
354
|
+
simulated.set(key, null);
|
|
355
|
+
else
|
|
356
|
+
throw new ExodusRecoveryError('Unsupported Exodus recovery effect');
|
|
357
|
+
return { receipt, predicate, values };
|
|
358
|
+
});
|
|
359
|
+
for (const { receipt, predicate, values } of guarded) {
|
|
360
|
+
const sql = receipt.kind === 'handoff_update'
|
|
361
|
+
? `UPDATE main.tasks_sessions SET handoff_json=? WHERE ${predicate}`
|
|
362
|
+
: `DELETE FROM main.${identifier(String(receipt.target_table))} WHERE ${predicate}`;
|
|
363
|
+
inspectEffects(db, sql, 'main', String(receipt.target_table), receipt.kind === 'handoff_update' ? constants.SQLITE_UPDATE : constants.SQLITE_DELETE);
|
|
364
|
+
const before = receipt.kind === 'handoff_update' ? identityValues(String(receipt.before_value)) : [];
|
|
365
|
+
const changed = db.prepare(sql).run(...before, ...values, receipt.row_json);
|
|
366
|
+
if (Number(changed.changes) !== 1)
|
|
367
|
+
throw new ExodusRecoveryError('Exodus guarded recovery did not affect exactly one row');
|
|
368
|
+
db.prepare(`UPDATE main.${identifier(RECEIPTS)} SET state='rolled_back' WHERE id=?`).run(receipt.id);
|
|
369
|
+
}
|
|
370
|
+
const introduced = db
|
|
371
|
+
.prepare('PRAGMA main.foreign_key_check')
|
|
372
|
+
.all()
|
|
373
|
+
.filter((row) => !beforeViolations.has(JSON.stringify(row)));
|
|
374
|
+
if (introduced.length)
|
|
375
|
+
throw new ExodusRecoveryError('Exodus recovery would orphan unrelated rows');
|
|
376
|
+
db.exec('COMMIT');
|
|
377
|
+
return guarded.length;
|
|
378
|
+
}
|
|
379
|
+
catch (error) {
|
|
380
|
+
db.exec('ROLLBACK');
|
|
381
|
+
throw error;
|
|
382
|
+
}
|
|
383
|
+
finally {
|
|
384
|
+
db.exec(`PRAGMA foreign_keys = ${foreignKeys}`);
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
/**
|
|
388
|
+
* Commit a fresh cutover token before publishing its marker.
|
|
389
|
+
*
|
|
390
|
+
* @param db - Exact target database connection after migration verification.
|
|
391
|
+
* @returns Persisted token identifying this verified cutover.
|
|
392
|
+
* @remarks The marker and target token must agree; replacing or restoring the file invalidates an old marker.
|
|
393
|
+
* @example
|
|
394
|
+
* ```ts
|
|
395
|
+
* const token = sealExodusDatabase(db);
|
|
396
|
+
* ```
|
|
397
|
+
*/
|
|
398
|
+
export function sealExodusDatabase(db) {
|
|
399
|
+
if (db.isTransaction)
|
|
400
|
+
throw new ExodusRecoveryError('Exodus sealing requires a dedicated idle handle');
|
|
401
|
+
const token = randomUUID();
|
|
402
|
+
db.exec('BEGIN IMMEDIATE');
|
|
403
|
+
try {
|
|
404
|
+
db.exec('CREATE TABLE IF NOT EXISTS main._exodus_database_identity(id INTEGER PRIMARY KEY CHECK(id=1),token TEXT NOT NULL)');
|
|
405
|
+
db.prepare('INSERT INTO main._exodus_database_identity VALUES(1,?) ON CONFLICT(id) DO UPDATE SET token=excluded.token').run(token);
|
|
406
|
+
db.exec('COMMIT');
|
|
407
|
+
return token;
|
|
408
|
+
}
|
|
409
|
+
catch (error) {
|
|
410
|
+
db.exec('ROLLBACK');
|
|
411
|
+
throw error;
|
|
412
|
+
}
|
|
413
|
+
}
|
|
414
|
+
/**
|
|
415
|
+
* Check a marker against the current database cutover identity.
|
|
416
|
+
*
|
|
417
|
+
* @param db - Existing caller connection to the target database.
|
|
418
|
+
* @param token - Cutover token read from the completion marker.
|
|
419
|
+
* @returns Whether the current database stores the expected cutover token.
|
|
420
|
+
* @remarks This read never creates missing identity state and does not trust a pathname alone.
|
|
421
|
+
* @example
|
|
422
|
+
* ```ts
|
|
423
|
+
* hasExodusDatabaseIdentity(db, marker.databaseIdentity);
|
|
424
|
+
* ```
|
|
425
|
+
*/
|
|
426
|
+
export function hasExodusDatabaseIdentity(db, token) {
|
|
427
|
+
const present = db
|
|
428
|
+
.prepare("SELECT name FROM main.sqlite_master WHERE type='table' AND name='_exodus_database_identity'")
|
|
429
|
+
.get();
|
|
430
|
+
return Boolean(present &&
|
|
431
|
+
db.prepare('SELECT token FROM main._exodus_database_identity WHERE id=1').get()?.token ===
|
|
432
|
+
token);
|
|
433
|
+
}
|
|
434
|
+
//# sourceMappingURL=recovery.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recovery.js","sourceRoot":"","sources":["../../../src/store/exodus/recovery.ts"],"names":[],"mappings":"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"}
|
|
@@ -198,4 +198,19 @@ export interface ExodusStatusResult {
|
|
|
198
198
|
* refuses cross-version migration unless `--force-cross-version` is passed.
|
|
199
199
|
*/
|
|
200
200
|
export declare const EXODUS_TARGET_SCHEMA_VERSION: "drizzle-v1.0.0-rc.3/dual-scope/2026-05";
|
|
201
|
+
/** Exact-target outcomes of guarded recovery for an existing staging journal. */
|
|
202
|
+
export interface ExodusRecoveryResult {
|
|
203
|
+
/** Existing staging-journal identity whose inserted rows are being reverted. */
|
|
204
|
+
readonly operationId: string;
|
|
205
|
+
/** True only when every target completed its guarded recovery. */
|
|
206
|
+
readonly complete: boolean;
|
|
207
|
+
/** Independently committed target outcomes; a failed scope retains its rows and receipts. */
|
|
208
|
+
readonly scopes: Array<{
|
|
209
|
+
scope: ExodusScope;
|
|
210
|
+
dbPath: string;
|
|
211
|
+
status: 'rolled_back' | 'failed';
|
|
212
|
+
rowsReverted: number;
|
|
213
|
+
error?: string;
|
|
214
|
+
}>;
|
|
215
|
+
}
|
|
201
216
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/store/exodus/types.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/store/exodus/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,0CAA0C;AAC1C,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,QAAQ,CAAC;AAE/C;;;;;GAKG;AACH,MAAM,WAAW,kBAAkB;IACjC,0CAA0C;IAC1C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,8CAA8C;IAC9C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,oEAAoE;IACpE,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;CACnC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,oBAAoB,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,CAAC;AAE9E,0CAA0C;AAC1C,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,MAAM,EAAE,oBAAoB,CAAC;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,yCAAyC;IACzC,SAAS,EAAE,MAAM,CAAC;IAClB,6DAA6D;IAC7D,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;;GAKG;AACH,MAAM,WAAW,aAAa;IAC5B,4DAA4D;IAC5D,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;IACpB,kEAAkE;IAClE,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,iFAAiF;IACjF,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IACrC,yCAAyC;IACzC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,wCAAwC;IACxC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,6DAA6D;IAC7D,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,yCAAyC;IACzC,SAAS,EAAE,MAAM,CAAC;IAClB,oEAAoE;IACpE,MAAM,EAAE,iBAAiB,EAAE,CAAC;CAC7B;AAED;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;;;;GAKG;AACH,MAAM,WAAW,UAAU;IACzB,4EAA4E;IAC5E,QAAQ,CAAC,OAAO,EAAE,kBAAkB,EAAE,CAAC;IACvC,qDAAqD;IACrD,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC;;;;OAIG;IACH,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IACpC;;;;;;OAMG;IACH,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,qDAAqD;IACrD,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,2DAA2D;IAC3D,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;IAChC;;;;;;;OAOG;IACH,QAAQ,CAAC,yBAAyB,EAAE,MAAM,CAAC;IAC3C,8CAA8C;IAC9C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,+EAA+E;IAC/E,QAAQ,CAAC,iBAAiB,EAAE,OAAO,CAAC;IACpC,mDAAmD;IACnD,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,kDAAkD;IAClD,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;CAC/B;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE,eAAe,EAAE,CAAC;IACnC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,WAAW,EAAE,MAAM,EAAE,CAAC;IAC/B,uCAAuC;IACvC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC;IAC5B,yCAAyC;IACzC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,6CAA6C;IAC7C,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,yDAAyD;IACzD,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;CAC9B;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE,iBAAiB,EAAE,CAAC;IACrC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,kFAAkF;IAClF,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,QAAQ,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI,CAAC;IACvC,qEAAqE;IACrE,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC;IAClC,oEAAoE;IACpE,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;IACjC,2CAA2C;IAC3C,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;IACjC,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,OAAO,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACzF;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,4BAA4B,EAAG,wCAAiD,CAAC;AAE9F,iFAAiF;AACjF,MAAM,WAAW,oBAAoB;IACnC,gFAAgF;IAChF,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,kEAAkE;IAClE,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,6FAA6F;IAC7F,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC;QACrB,KAAK,EAAE,WAAW,CAAC;QACnB,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,aAAa,GAAG,QAAQ,CAAC;QACjC,YAAY,EAAE,MAAM,CAAC;QACrB,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC,CAAC;CACJ"}
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
* @epic T5149
|
|
9
9
|
* @task T5128
|
|
10
10
|
*/
|
|
11
|
+
import type { OperationExecutionContext } from '@cleocode/contracts/jobs';
|
|
11
12
|
import type { NodeSQLiteDatabase } from 'drizzle-orm/node-sqlite';
|
|
12
13
|
import type { BrainAttentionRow, BrainConsolidationEventRow, BrainDecisionRow, BrainLearningRow, BrainMemoryLinkRow, BrainModulatorInsert, BrainModulatorRow, BrainObservationRow, BrainPageEdgeRow, BrainPageNodeRow, BrainPatternRow, BrainStickyNoteRow, BrainWeightHistoryInsert, BrainWeightHistoryRow, NewBrainAttentionRow, NewBrainDecisionRow, NewBrainLearningRow, NewBrainMemoryLinkRow, NewBrainObservationRow, NewBrainPageEdgeRow, NewBrainPageNodeRow, NewBrainPatternRow, NewBrainStickyNoteRow } from './schema/memory-schema.js';
|
|
13
14
|
import * as brainSchema from './schema/memory-schema.js';
|
|
@@ -53,6 +54,8 @@ export declare class BrainDataAccessor {
|
|
|
53
54
|
outcome?: (typeof brainSchema.BRAIN_OUTCOME_TYPES)[number];
|
|
54
55
|
contextTaskId?: string;
|
|
55
56
|
limit?: number;
|
|
57
|
+
/** Include invalidated and superseded records for historical inspection. */
|
|
58
|
+
includeHistory?: boolean;
|
|
56
59
|
/**
|
|
57
60
|
* T1830: when false (default), AGT-* agent dispatch rows
|
|
58
61
|
* (`decision_category = 'agent_dispatch'`) are excluded from results.
|
|
@@ -61,24 +64,68 @@ export declare class BrainDataAccessor {
|
|
|
61
64
|
includeAgentDispatch?: boolean;
|
|
62
65
|
}): Promise<BrainDecisionRow[]>;
|
|
63
66
|
updateDecision(id: string, updates: Partial<NewBrainDecisionRow>): Promise<void>;
|
|
64
|
-
|
|
67
|
+
/**
|
|
68
|
+
* Insert and read back a pattern within an optional captured write boundary.
|
|
69
|
+
* @param row - Caller-selected complete pattern row.
|
|
70
|
+
* @param execution - Original lifetime and optional job fence, never renewed.
|
|
71
|
+
* @returns The actual stored row after successful commit.
|
|
72
|
+
* @remarks Scoped insertion and readback share a synchronous transaction. Failure
|
|
73
|
+
* rolls back the transaction; cancellation after commit cannot undo its result.
|
|
74
|
+
* @example
|
|
75
|
+
* ```ts
|
|
76
|
+
* const stored = await accessor.addPattern(row, execution);
|
|
77
|
+
* ```
|
|
78
|
+
*/
|
|
79
|
+
addPattern(row: NewBrainPatternRow, execution?: OperationExecutionContext): Promise<BrainPatternRow>;
|
|
65
80
|
getPattern(id: string): Promise<BrainPatternRow | null>;
|
|
66
81
|
findPatterns(params?: {
|
|
67
82
|
type?: (typeof brainSchema.BRAIN_PATTERN_TYPES)[number];
|
|
68
83
|
impact?: (typeof brainSchema.BRAIN_IMPACT_LEVELS)[number];
|
|
69
84
|
minFrequency?: number;
|
|
70
85
|
limit?: number;
|
|
86
|
+
/** Include invalidated and superseded records for historical inspection. */
|
|
87
|
+
includeHistory?: boolean;
|
|
71
88
|
}): Promise<BrainPatternRow[]>;
|
|
72
|
-
|
|
89
|
+
/**
|
|
90
|
+
* Update a pattern within an optional original operation lifetime.
|
|
91
|
+
* @param id - Existing pattern identity.
|
|
92
|
+
* @param updates - Requested row fields.
|
|
93
|
+
* @param execution - Captured deadline, cancellation and optional job fence.
|
|
94
|
+
* @returns Completion of the committed update, or an explicit failure.
|
|
95
|
+
* @remarks Scoped writes check cancellation and the persisted job fence immediately
|
|
96
|
+
* before synchronous SQL. No timer can preempt a committed synchronous statement.
|
|
97
|
+
* @example
|
|
98
|
+
* ```ts
|
|
99
|
+
* await accessor.updatePattern(id, { frequency: 2 }, execution);
|
|
100
|
+
* ```
|
|
101
|
+
*/
|
|
102
|
+
updatePattern(id: string, updates: Partial<NewBrainPatternRow>, execution?: OperationExecutionContext): Promise<void>;
|
|
73
103
|
addLearning(row: NewBrainLearningRow): Promise<BrainLearningRow>;
|
|
74
104
|
getLearning(id: string): Promise<BrainLearningRow | null>;
|
|
75
105
|
findLearnings(params?: {
|
|
76
106
|
minConfidence?: number;
|
|
77
107
|
actionable?: boolean;
|
|
78
108
|
limit?: number;
|
|
109
|
+
includeHistory?: boolean;
|
|
79
110
|
}): Promise<BrainLearningRow[]>;
|
|
80
111
|
updateLearning(id: string, updates: Partial<NewBrainLearningRow>): Promise<void>;
|
|
81
|
-
|
|
112
|
+
/**
|
|
113
|
+
* Insert and read back one observation with an optional guarded synchronous boundary.
|
|
114
|
+
* @param row - Complete observation payload, including its caller-selected identity.
|
|
115
|
+
* @param execution - Captured lifetime checked immediately before SQL execution.
|
|
116
|
+
* @returns The actual stored row after insertion or an exact fenced replay.
|
|
117
|
+
* @throws Error if cancellation, an existing native transaction, or SQL prevents insertion.
|
|
118
|
+
* @remarks Scoped writes use one synchronous transaction and cannot join an unrelated
|
|
119
|
+
* native transaction. Cancellation during admitted synchronous SQL cannot preempt it;
|
|
120
|
+
* its committed row remains the result. Fenced replay checks all supplied fields
|
|
121
|
+
* except the new attempt timestamp and preserves the original stored timestamp.
|
|
122
|
+
* Conflicting or retracted rows are never overwritten. Legacy callers retain their async path.
|
|
123
|
+
* @example
|
|
124
|
+
* ```ts
|
|
125
|
+
* const stored = await accessor.addObservation(row, execution);
|
|
126
|
+
* ```
|
|
127
|
+
*/
|
|
128
|
+
addObservation(row: NewBrainObservationRow, execution?: OperationExecutionContext): Promise<BrainObservationRow>;
|
|
82
129
|
getObservation(id: string): Promise<BrainObservationRow | null>;
|
|
83
130
|
findObservations(params?: {
|
|
84
131
|
type?: (typeof brainSchema.BRAIN_OBSERVATION_TYPES)[number];
|
|
@@ -88,6 +135,8 @@ export declare class BrainDataAccessor {
|
|
|
88
135
|
/** T417: filter by agent provenance name (Wave 8 mental models). */
|
|
89
136
|
agent?: string;
|
|
90
137
|
limit?: number;
|
|
138
|
+
/** Include invalidated and superseded records for historical inspection. */
|
|
139
|
+
includeHistory?: boolean;
|
|
91
140
|
}): Promise<BrainObservationRow[]>;
|
|
92
141
|
updateObservation(id: string, updates: Partial<NewBrainObservationRow>): Promise<void>;
|
|
93
142
|
addLink(row: NewBrainMemoryLinkRow): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory-accessor.d.ts","sourceRoot":"","sources":["../../src/store/memory-accessor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;
|
|
1
|
+
{"version":3,"file":"memory-accessor.d.ts","sourceRoot":"","sources":["../../src/store/memory-accessor.ts"],"names":[],"mappings":"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"}
|