@cleocode/core 2026.9.8 → 2026.9.9
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/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 +5100 -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 +64 -0
- package/dist/git/work-tree.d.ts.map +1 -0
- package/dist/git/work-tree.js +111 -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 +2 -0
- package/dist/internal.d.ts.map +1 -1
- package/dist/internal.js +2 -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 +4018 -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 +16 -41
- 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 +16 -3
- package/dist/release/pr-evidence.d.ts.map +1 -1
- package/dist/release/pr-evidence.js +53 -7
- 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 +4026 -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 +6 -2
- 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 +54 -26
- package/dist/tasks/evidence.d.ts.map +1 -1
- package/dist/tasks/evidence.js +292 -40
- 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-runner.d.ts +88 -14
- package/dist/tasks/gate-runner.d.ts.map +1 -1
- package/dist/tasks/gate-runner.js +596 -253
- 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/templates/CLEO-INJECTION.md +103 -101
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"graph-auto-populate.d.ts","sourceRoot":"","sources":["../../src/memory/graph-auto-populate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;
|
|
1
|
+
{"version":3,"file":"graph-auto-populate.d.ts","sourceRoot":"","sources":["../../src/memory/graph-auto-populate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAGH,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AAC1E,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,qCAAqC,CAAC;AAOrF,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AAYrF,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,CAAC;AA6D7C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,wBAAsB,eAAe,CACnC,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,aAAa,EACvB,KAAK,EAAE,MAAM,EACb,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,MAAM,EACf,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAClC,OAAO,CAAC,EAAE,yBAAyB,GAClC,OAAO,CAAC,IAAI,CAAC,CAgEf;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAsB,YAAY,CAChC,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,aAAa,EACvB,MAAM,SAAM,EACZ,UAAU,CAAC,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE,yBAAyB,GAClC,OAAO,CAAC,IAAI,CAAC,CA4Cf;AAiCD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,cAAc,CAClC,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACjC,OAAO,CAAC,IAAI,CAAC,CAcf;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,gBAAgB,CACpC,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,IAAI,CAAC,CAgBf;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,yBAAyB,EAClC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,yBAAyB,CAAC,CAiBpC;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,iBAAiB,CACrC,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC,CAgCf;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,gBAAgB,CACpC,WAAW,EAAE,MAAM,EACnB,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,IAAI,CAAC,CAuBf"}
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* storePattern, storeLearning, and task completion).
|
|
8
8
|
*
|
|
9
9
|
* Design constraints:
|
|
10
|
-
* -
|
|
10
|
+
* - Legacy writes are best-effort; scoped projections propagate failures.
|
|
11
11
|
* - All writes are gated on brain.autoCapture via isAutoCaptureEnabled.
|
|
12
12
|
* - Uses INSERT OR REPLACE (onConflictDoUpdate) for upsert semantics.
|
|
13
13
|
* - Edge inserts are idempotent via the composite PK (fromId, toId, edgeType).
|
|
@@ -16,7 +16,11 @@
|
|
|
16
16
|
* @epic T523
|
|
17
17
|
*/
|
|
18
18
|
import { createHash } from 'node:crypto';
|
|
19
|
+
import { resolveCleoConfig } from '../config/registry.js';
|
|
19
20
|
import { getLogger } from '../logger.js';
|
|
21
|
+
import { generateProjectHash } from '../nexus/hash.js';
|
|
22
|
+
import { worktreeScope } from '../paths.js';
|
|
23
|
+
import { assertOperationWriteFence } from '../store/background-jobs.js';
|
|
20
24
|
import { getBrainDb } from '../store/memory-sqlite.js';
|
|
21
25
|
import { brainPageEdges, brainPageNodes } from '../store/schema/memory-schema.js';
|
|
22
26
|
// Structured (pino) logger — writes directly to stderr, NOT through `console.*`.
|
|
@@ -43,6 +47,40 @@ async function shouldAutoPopulateGraph(projectRoot) {
|
|
|
43
47
|
return false;
|
|
44
48
|
}
|
|
45
49
|
}
|
|
50
|
+
/** Read the captured project's policy without silently treating read failures as disabled. */
|
|
51
|
+
async function scopedGraphEnabled(context) {
|
|
52
|
+
context.assertActive();
|
|
53
|
+
const config = await resolveCleoConfig({
|
|
54
|
+
scope: 'merged',
|
|
55
|
+
projectRoot: context.identity.projectRoot,
|
|
56
|
+
});
|
|
57
|
+
context.assertActive();
|
|
58
|
+
const brain = config['brain'];
|
|
59
|
+
if (brain === undefined)
|
|
60
|
+
return true;
|
|
61
|
+
if (typeof brain !== 'object' || brain === null || Array.isArray(brain)) {
|
|
62
|
+
throw new Error('Invalid brain configuration for graph projection');
|
|
63
|
+
}
|
|
64
|
+
if (!('autoCapture' in brain) || brain.autoCapture === undefined)
|
|
65
|
+
return true;
|
|
66
|
+
if (typeof brain.autoCapture !== 'boolean') {
|
|
67
|
+
throw new Error('Invalid brain.autoCapture configuration for graph projection');
|
|
68
|
+
}
|
|
69
|
+
return brain.autoCapture;
|
|
70
|
+
}
|
|
71
|
+
/** Check cancellation and policy for strict callers; retain legacy best-effort behavior. */
|
|
72
|
+
async function graphWriteEnabled(projectRoot, context) {
|
|
73
|
+
if (!context)
|
|
74
|
+
return shouldAutoPopulateGraph(projectRoot);
|
|
75
|
+
context.assertActive();
|
|
76
|
+
if (projectRoot !== context.identity.projectRoot) {
|
|
77
|
+
throw new Error('Graph projection root differs from captured operation scope');
|
|
78
|
+
}
|
|
79
|
+
if (!(await scopedGraphEnabled(context))) {
|
|
80
|
+
throw new Error('Graph projection policy disabled during execution');
|
|
81
|
+
}
|
|
82
|
+
return true;
|
|
83
|
+
}
|
|
46
84
|
// ---------------------------------------------------------------------------
|
|
47
85
|
// Public API
|
|
48
86
|
// ---------------------------------------------------------------------------
|
|
@@ -58,7 +96,7 @@ async function shouldAutoPopulateGraph(projectRoot) {
|
|
|
58
96
|
* content; their hash will be null so duplicates are not rejected.
|
|
59
97
|
*
|
|
60
98
|
* This function is gated on brain.autoCapture. If the gate is disabled or any
|
|
61
|
-
* error occurs,
|
|
99
|
+
* error occurs, legacy calls return silently. Context-aware calls throw failures.
|
|
62
100
|
*
|
|
63
101
|
* @param projectRoot - Absolute path to the project root directory.
|
|
64
102
|
* @param nodeId - Stable composite ID in the form '<type>:<source-id>'.
|
|
@@ -67,49 +105,77 @@ async function shouldAutoPopulateGraph(projectRoot) {
|
|
|
67
105
|
* @param qualityScore - 0.0 (noise) to 1.0 (canonical).
|
|
68
106
|
* @param content - Canonical text used to derive the content hash.
|
|
69
107
|
* @param metadata - Optional type-specific metadata blob.
|
|
108
|
+
* @param context - Captured scope; when supplied, failures throw and writes check cancellation.
|
|
70
109
|
*
|
|
110
|
+
* @remarks Scoped calls pin storage routing and refuse to join an unowned transaction.
|
|
111
|
+
* @example
|
|
112
|
+
* ```ts
|
|
113
|
+
* await upsertGraphNode(root, 'task:T123', 'task', 'Task', 0.7, '');
|
|
114
|
+
* ```
|
|
71
115
|
* @task T537
|
|
72
116
|
*/
|
|
73
|
-
export async function upsertGraphNode(projectRoot, nodeId, nodeType, label, qualityScore, content, metadata) {
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
metadataJson: metadata ? JSON.stringify(metadata) : null,
|
|
94
|
-
lastActivityAt: now,
|
|
95
|
-
createdAt: now,
|
|
96
|
-
updatedAt: now,
|
|
97
|
-
})
|
|
98
|
-
.onConflictDoUpdate({
|
|
99
|
-
target: brainPageNodes.id,
|
|
100
|
-
set: {
|
|
117
|
+
export async function upsertGraphNode(projectRoot, nodeId, nodeType, label, qualityScore, content, metadata, context) {
|
|
118
|
+
const write = async () => {
|
|
119
|
+
try {
|
|
120
|
+
if (!(await graphWriteEnabled(projectRoot, context)))
|
|
121
|
+
return;
|
|
122
|
+
context?.assertActive();
|
|
123
|
+
const db = await getBrainDb(projectRoot);
|
|
124
|
+
context?.assertActive();
|
|
125
|
+
const now = new Date().toISOString().replace('T', ' ').slice(0, 19);
|
|
126
|
+
// Only compute a content hash for non-trivial content (external reference
|
|
127
|
+
// nodes like task/session/epic may have empty content).
|
|
128
|
+
const trimmed = content.trim().toLowerCase();
|
|
129
|
+
const contentHash = trimmed
|
|
130
|
+
? createHash('sha256').update(trimmed).digest('hex').substring(0, 16)
|
|
131
|
+
: null;
|
|
132
|
+
const query = db
|
|
133
|
+
.insert(brainPageNodes)
|
|
134
|
+
.values({
|
|
135
|
+
id: nodeId,
|
|
136
|
+
nodeType,
|
|
101
137
|
label: label.substring(0, 200),
|
|
102
138
|
qualityScore,
|
|
139
|
+
contentHash,
|
|
140
|
+
metadataJson: metadata ? JSON.stringify(metadata) : null,
|
|
103
141
|
lastActivityAt: now,
|
|
142
|
+
createdAt: now,
|
|
104
143
|
updatedAt: now,
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
144
|
+
})
|
|
145
|
+
.onConflictDoUpdate({
|
|
146
|
+
target: brainPageNodes.id,
|
|
147
|
+
set: {
|
|
148
|
+
label: label.substring(0, 200),
|
|
149
|
+
qualityScore,
|
|
150
|
+
lastActivityAt: now,
|
|
151
|
+
updatedAt: now,
|
|
152
|
+
metadataJson: metadata ? JSON.stringify(metadata) : null,
|
|
153
|
+
},
|
|
154
|
+
});
|
|
155
|
+
if (context) {
|
|
156
|
+
db.transaction((tx) => {
|
|
157
|
+
assertOperationWriteFence(tx, context);
|
|
158
|
+
query.run();
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
else {
|
|
162
|
+
query.run();
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
catch (err) {
|
|
166
|
+
if (context)
|
|
167
|
+
throw err;
|
|
168
|
+
// Log but never surface — this is a best-effort side effect.
|
|
169
|
+
log.warn({ err }, 'upsertGraphNode failed');
|
|
170
|
+
}
|
|
171
|
+
};
|
|
172
|
+
return context
|
|
173
|
+
? worktreeScope.run({
|
|
174
|
+
worktreeRoot: context.identity.projectRoot,
|
|
175
|
+
projectHash: generateProjectHash(context.identity.projectRoot),
|
|
176
|
+
execution: context,
|
|
177
|
+
}, write)
|
|
178
|
+
: write();
|
|
113
179
|
}
|
|
114
180
|
/**
|
|
115
181
|
* Add a directed, typed edge between two graph nodes (idempotent).
|
|
@@ -119,7 +185,7 @@ export async function upsertGraphNode(projectRoot, nodeId, nodeType, label, qual
|
|
|
119
185
|
* multiple times with the same arguments.
|
|
120
186
|
*
|
|
121
187
|
* This function is gated on brain.autoCapture. If the gate is disabled or any
|
|
122
|
-
* error occurs,
|
|
188
|
+
* error occurs, legacy calls return silently. Context-aware calls throw failures.
|
|
123
189
|
*
|
|
124
190
|
* @param projectRoot - Absolute path to the project root directory.
|
|
125
191
|
* @param fromId - Source node ID (brain_page_nodes.id).
|
|
@@ -127,30 +193,58 @@ export async function upsertGraphNode(projectRoot, nodeId, nodeType, label, qual
|
|
|
127
193
|
* @param edgeType - Typed relationship from BRAIN_EDGE_TYPES.
|
|
128
194
|
* @param weight - Edge confidence/weight (0.0–1.0). Defaults to 1.0.
|
|
129
195
|
* @param provenance - Human-readable note on why this edge was emitted.
|
|
196
|
+
* @param context - Captured scope; when supplied, failures throw and writes check cancellation.
|
|
130
197
|
*
|
|
198
|
+
* @remarks Scoped calls pin storage routing and refuse to join an unowned transaction.
|
|
199
|
+
* @example
|
|
200
|
+
* ```ts
|
|
201
|
+
* await addGraphEdge(root, 'task:T123', 'llmtxt:hash', 'embeds');
|
|
202
|
+
* ```
|
|
131
203
|
* @task T537
|
|
132
204
|
*/
|
|
133
|
-
export async function addGraphEdge(projectRoot, fromId, toId, edgeType, weight = 1.0, provenance) {
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
.
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
205
|
+
export async function addGraphEdge(projectRoot, fromId, toId, edgeType, weight = 1.0, provenance, context) {
|
|
206
|
+
const write = async () => {
|
|
207
|
+
try {
|
|
208
|
+
if (!(await graphWriteEnabled(projectRoot, context)))
|
|
209
|
+
return;
|
|
210
|
+
context?.assertActive();
|
|
211
|
+
const db = await getBrainDb(projectRoot);
|
|
212
|
+
context?.assertActive();
|
|
213
|
+
const now = new Date().toISOString().replace('T', ' ').slice(0, 19);
|
|
214
|
+
const query = db
|
|
215
|
+
.insert(brainPageEdges)
|
|
216
|
+
.values({
|
|
217
|
+
fromId,
|
|
218
|
+
toId,
|
|
219
|
+
edgeType,
|
|
220
|
+
weight,
|
|
221
|
+
provenance: provenance ?? null,
|
|
222
|
+
createdAt: now,
|
|
223
|
+
})
|
|
224
|
+
.onConflictDoNothing();
|
|
225
|
+
if (context) {
|
|
226
|
+
db.transaction((tx) => {
|
|
227
|
+
assertOperationWriteFence(tx, context);
|
|
228
|
+
query.run();
|
|
229
|
+
});
|
|
230
|
+
}
|
|
231
|
+
else {
|
|
232
|
+
query.run();
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
catch (err) {
|
|
236
|
+
if (context)
|
|
237
|
+
throw err;
|
|
238
|
+
log.warn({ err }, 'addGraphEdge failed');
|
|
239
|
+
}
|
|
240
|
+
};
|
|
241
|
+
return context
|
|
242
|
+
? worktreeScope.run({
|
|
243
|
+
worktreeRoot: context.identity.projectRoot,
|
|
244
|
+
projectHash: generateProjectHash(context.identity.projectRoot),
|
|
245
|
+
execution: context,
|
|
246
|
+
}, write)
|
|
247
|
+
: write();
|
|
154
248
|
}
|
|
155
249
|
// ---------------------------------------------------------------------------
|
|
156
250
|
// T945 Stage A — universal semantic graph hooks
|
|
@@ -237,6 +331,34 @@ export async function ensureLlmtxtNode(projectRoot, sha256, ownerId, label) {
|
|
|
237
331
|
log.warn({ err }, 'ensureLlmtxtNode failed');
|
|
238
332
|
}
|
|
239
333
|
}
|
|
334
|
+
/**
|
|
335
|
+
* Project a canonical document into the graph with captured scope and visible failures.
|
|
336
|
+
*
|
|
337
|
+
* @remarks Each synchronous write checks the same absolute deadline. This does not preempt
|
|
338
|
+
* SQLite or promise atomicity across the node and edge; a failed edge leaves an
|
|
339
|
+
* idempotently resumable partial projection. Canonical document bytes are untouched.
|
|
340
|
+
*
|
|
341
|
+
* @param context - Caller-owned immutable identity, deadline and cancellation.
|
|
342
|
+
* @param sha256 - Canonical document content hash.
|
|
343
|
+
* @param ownerId - Qualified graph owner identity.
|
|
344
|
+
* @param label - Document display label.
|
|
345
|
+
* @returns Completed or explicitly disabled graph projection in the captured project.
|
|
346
|
+
* @throws Error - Configuration, storage, cancellation or deadline failure.
|
|
347
|
+
* @example
|
|
348
|
+
* ```ts
|
|
349
|
+
* const result = await ensureLlmtxtNodeScoped(context, sha256, 'task:T123', 'Design');
|
|
350
|
+
* ```
|
|
351
|
+
*/
|
|
352
|
+
export async function ensureLlmtxtNodeScoped(context, sha256, ownerId, label) {
|
|
353
|
+
const identity = context.identity;
|
|
354
|
+
const result = { projectId: identity.projectId, projectRoot: identity.projectRoot };
|
|
355
|
+
if (!(await scopedGraphEnabled(context)))
|
|
356
|
+
return { ...result, status: 'disabled' };
|
|
357
|
+
const nodeId = `llmtxt:${sha256}`;
|
|
358
|
+
await upsertGraphNode(identity.projectRoot, nodeId, 'llmtxt', label, 0.8, sha256, { sha256 }, context);
|
|
359
|
+
await addGraphEdge(identity.projectRoot, ownerId, nodeId, 'embeds', 1, 'auto:docs-add', context);
|
|
360
|
+
return { ...result, status: 'completed' };
|
|
361
|
+
}
|
|
240
362
|
/**
|
|
241
363
|
* Upsert a `msg:<id>` graph node for a CONDUIT message and, when the message
|
|
242
364
|
* body references one or more `T###` task IDs, emit `discusses` edges from
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"graph-auto-populate.js","sourceRoot":"","sources":["../../src/memory/graph-auto-populate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"graph-auto-populate.js","sourceRoot":"","sources":["../../src/memory/graph-auto-populate.ts"],"names":[],"mappings":"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"}
|
|
@@ -17,6 +17,7 @@
|
|
|
17
17
|
* @task graph-memory-bridge
|
|
18
18
|
* @epic T523
|
|
19
19
|
*/
|
|
20
|
+
import type { DecisionCodeEvidenceLink } from '@cleocode/contracts';
|
|
20
21
|
import { getNexusNativeDb } from '../store/nexus-sqlite.js';
|
|
21
22
|
/** A single code-reference link created or found by the bridge. */
|
|
22
23
|
export interface CodeReferenceLink {
|
|
@@ -54,6 +55,8 @@ export interface MemoriesForCodeResult {
|
|
|
54
55
|
qualityScore: number;
|
|
55
56
|
edgeWeight: number;
|
|
56
57
|
matchStrategy: string;
|
|
58
|
+
/** Explicit verified source provenance when this is a sourced decision relation. */
|
|
59
|
+
provenance?: DecisionCodeEvidenceLink;
|
|
57
60
|
}>;
|
|
58
61
|
}
|
|
59
62
|
/** Result from queryCodeForMemory. */
|
|
@@ -68,6 +71,8 @@ export interface CodeForMemoryResult {
|
|
|
68
71
|
kind: string;
|
|
69
72
|
edgeWeight: number;
|
|
70
73
|
matchStrategy: string;
|
|
74
|
+
/** Explicit verified source provenance when this is a sourced decision relation. */
|
|
75
|
+
provenance?: DecisionCodeEvidenceLink;
|
|
71
76
|
}>;
|
|
72
77
|
}
|
|
73
78
|
/**
|
|
@@ -98,7 +103,13 @@ export declare function linkMemoryToCode(projectRoot: string, memoryId: string,
|
|
|
98
103
|
* @param filesModifiedJson - JSON array of file paths (may be null)
|
|
99
104
|
* @param projectRoot - Absolute path to project root
|
|
100
105
|
* @param nexusNative - Optional pre-loaded nexus database handle
|
|
101
|
-
* @returns Count of edges
|
|
106
|
+
* @returns Count of newly written edges; repeated calls preserve existing history.
|
|
107
|
+
* @remarks Only canonical file nodes are eligible. File evidence does not establish symbol-level changes;
|
|
108
|
+
* revision is explicitly unrecorded when the observation does not supply one.
|
|
109
|
+
* @example
|
|
110
|
+
* ```ts
|
|
111
|
+
* const written = await linkObservationToModifiedFiles(observationId, filePathsJson, projectRoot, undefined);
|
|
112
|
+
* ```
|
|
102
113
|
*/
|
|
103
114
|
export declare function linkObservationToModifiedFiles(obsId: string, filesModifiedJson: string | null, projectRoot: string, nexusNative?: ReturnType<typeof getNexusNativeDb>): Promise<number>;
|
|
104
115
|
/**
|
|
@@ -176,6 +187,8 @@ export declare function queryMemoriesForCode(projectRoot: string, symbol: string
|
|
|
176
187
|
export declare function queryCodeForMemory(projectRoot: string, memoryId: string): Promise<CodeForMemoryResult>;
|
|
177
188
|
/** A single code-memory link for display. */
|
|
178
189
|
export interface CodeLinkEntry {
|
|
190
|
+
/** Explicit sourced relation metadata, when present. */
|
|
191
|
+
provenance?: DecisionCodeEvidenceLink;
|
|
179
192
|
/** Brain memory node ID. */
|
|
180
193
|
brainNodeId: string;
|
|
181
194
|
/** Brain node type. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"graph-memory-bridge.d.ts","sourceRoot":"","sources":["../../src/memory/graph-memory-bridge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;
|
|
1
|
+
{"version":3,"file":"graph-memory-bridge.d.ts","sourceRoot":"","sources":["../../src/memory/graph-memory-bridge.ts"],"names":[],"mappings":"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"}
|
|
@@ -26,6 +26,7 @@ import { brainPageEdges, brainPageNodes } from '../store/schema/memory-schema.js
|
|
|
26
26
|
import { applyPerfPragmas } from '../store/sqlite-pragmas.js';
|
|
27
27
|
import { typedAll } from '../store/typed-query.js';
|
|
28
28
|
import { withWriterLease } from '../store/writer-lease.js';
|
|
29
|
+
import { isCurrentDecisionCodeEvidence, linkDecisionToCodeEvidence, readDecisionCodeEvidence, } from './decision-cross-link.js';
|
|
29
30
|
const _require = createRequire(import.meta.url);
|
|
30
31
|
const { DatabaseSync } = _require('node:sqlite');
|
|
31
32
|
// ---------------------------------------------------------------------------
|
|
@@ -143,11 +144,19 @@ function metadataText(metaJson) {
|
|
|
143
144
|
* @returns True if the edge was created or already existed; false on error
|
|
144
145
|
*/
|
|
145
146
|
export async function linkMemoryToCode(projectRoot, memoryId, codeSymbol) {
|
|
147
|
+
if (memoryId.startsWith('decision:')) {
|
|
148
|
+
const result = await linkDecisionToCodeEvidence(projectRoot, memoryId, {
|
|
149
|
+
symbols: [codeSymbol],
|
|
150
|
+
apply: true,
|
|
151
|
+
});
|
|
152
|
+
return (result.links.some((link) => link.targetId === codeSymbol) &&
|
|
153
|
+
!result.findings.some((finding) => finding.state === 'failed'));
|
|
154
|
+
}
|
|
146
155
|
try {
|
|
147
156
|
const brainDb = await getBrainDb(projectRoot);
|
|
148
157
|
// Ensure nexus.db is initialized so we can verify the target node exists
|
|
149
|
-
await getNexusDb();
|
|
150
|
-
const nexusNative = getNexusNativeDb();
|
|
158
|
+
await getNexusDb(projectRoot);
|
|
159
|
+
const nexusNative = getNexusNativeDb(projectRoot);
|
|
151
160
|
if (!nexusNative)
|
|
152
161
|
return false;
|
|
153
162
|
// Verify the nexus node exists (read-only check)
|
|
@@ -212,7 +221,13 @@ export async function linkMemoryToCode(projectRoot, memoryId, codeSymbol) {
|
|
|
212
221
|
* @param filesModifiedJson - JSON array of file paths (may be null)
|
|
213
222
|
* @param projectRoot - Absolute path to project root
|
|
214
223
|
* @param nexusNative - Optional pre-loaded nexus database handle
|
|
215
|
-
* @returns Count of edges
|
|
224
|
+
* @returns Count of newly written edges; repeated calls preserve existing history.
|
|
225
|
+
* @remarks Only canonical file nodes are eligible. File evidence does not establish symbol-level changes;
|
|
226
|
+
* revision is explicitly unrecorded when the observation does not supply one.
|
|
227
|
+
* @example
|
|
228
|
+
* ```ts
|
|
229
|
+
* const written = await linkObservationToModifiedFiles(observationId, filePathsJson, projectRoot, undefined);
|
|
230
|
+
* ```
|
|
216
231
|
*/
|
|
217
232
|
export async function linkObservationToModifiedFiles(obsId, filesModifiedJson, projectRoot, nexusNative) {
|
|
218
233
|
let edgeCount = 0;
|
|
@@ -223,7 +238,7 @@ export async function linkObservationToModifiedFiles(obsId, filesModifiedJson, p
|
|
|
223
238
|
const brainNative = getBrainNativeDb(projectRoot);
|
|
224
239
|
if (!brainNative)
|
|
225
240
|
return 0;
|
|
226
|
-
const nexusDb = nexusNative ?? getNexusNativeDb();
|
|
241
|
+
const nexusDb = nexusNative ?? getNexusNativeDb(projectRoot);
|
|
227
242
|
if (!nexusDb)
|
|
228
243
|
return 0;
|
|
229
244
|
const filesArray = JSON.parse(filesModifiedJson);
|
|
@@ -235,20 +250,26 @@ export async function linkObservationToModifiedFiles(obsId, filesModifiedJson, p
|
|
|
235
250
|
continue;
|
|
236
251
|
// Find nexus node by exact file path match
|
|
237
252
|
const nexusNode = nexusDb
|
|
238
|
-
.prepare(
|
|
239
|
-
.get(filePath);
|
|
240
|
-
if (
|
|
253
|
+
.prepare("SELECT id FROM main.nexus_nodes WHERE id = ? AND file_path = ? AND kind = 'file'")
|
|
254
|
+
.get(filePath, filePath);
|
|
255
|
+
if (typeof nexusNode?.id !== 'string')
|
|
241
256
|
continue;
|
|
242
257
|
// Write modified_by edge (file → observation)
|
|
243
258
|
try {
|
|
244
|
-
brainNative
|
|
259
|
+
const inserted = brainNative
|
|
245
260
|
.prepare(`
|
|
246
|
-
INSERT OR IGNORE INTO brain_page_edges
|
|
261
|
+
INSERT OR IGNORE INTO main.brain_page_edges
|
|
247
262
|
(from_id, to_id, edge_type, weight, provenance, created_at)
|
|
248
|
-
VALUES (?, ?, 'modified_by', 1.0,
|
|
263
|
+
VALUES (?, ?, 'modified_by', 1.0, ?, ?)
|
|
249
264
|
`)
|
|
250
|
-
.run(nexusNode.id, obsId,
|
|
251
|
-
|
|
265
|
+
.run(nexusNode.id, obsId, JSON.stringify({
|
|
266
|
+
source: 'observation.files_modified_json',
|
|
267
|
+
observationId: obsId,
|
|
268
|
+
precision: 'file',
|
|
269
|
+
filePath,
|
|
270
|
+
assessedRevision: null,
|
|
271
|
+
}), now);
|
|
272
|
+
edgeCount += Number(inserted.changes);
|
|
252
273
|
}
|
|
253
274
|
catch (err) {
|
|
254
275
|
console.warn('[graph-memory-bridge] modified_by edge insert failed:', err);
|
|
@@ -287,7 +308,7 @@ export async function linkObservationToMentionedSymbols(obsId, text, projectRoot
|
|
|
287
308
|
const brainNative = getBrainNativeDb(projectRoot);
|
|
288
309
|
if (!brainNative)
|
|
289
310
|
return 0;
|
|
290
|
-
const nexusDb = nexusNative ?? getNexusNativeDb();
|
|
311
|
+
const nexusDb = nexusNative ?? getNexusNativeDb(projectRoot);
|
|
291
312
|
if (!nexusDb)
|
|
292
313
|
return 0;
|
|
293
314
|
const nexusNames = typedAll(nexusDb.prepare('SELECT id, name FROM nexus_nodes WHERE name IS NOT NULL LIMIT 10000'));
|
|
@@ -310,7 +331,9 @@ export async function linkObservationToMentionedSymbols(obsId, text, projectRoot
|
|
|
310
331
|
const now = new Date().toISOString().replace('T', ' ').slice(0, 19);
|
|
311
332
|
// Write mentions edges
|
|
312
333
|
for (const name of matches) {
|
|
313
|
-
const
|
|
334
|
+
const matches = nexusNames.filter((node) => node.name === name);
|
|
335
|
+
const qualified = matches.filter((node) => text.includes(node.id));
|
|
336
|
+
const nexusNode = qualified.length === 1 ? qualified[0] : matches.length === 1 ? matches[0] : undefined;
|
|
314
337
|
if (!nexusNode)
|
|
315
338
|
continue;
|
|
316
339
|
try {
|
|
@@ -360,7 +383,7 @@ export async function linkDecisionToSymbols(decisionId, contextText, projectRoot
|
|
|
360
383
|
const brainNative = getBrainNativeDb(projectRoot);
|
|
361
384
|
if (!brainNative)
|
|
362
385
|
return 0;
|
|
363
|
-
const nexusDb = nexusNative ?? getNexusNativeDb();
|
|
386
|
+
const nexusDb = nexusNative ?? getNexusNativeDb(projectRoot);
|
|
364
387
|
if (!nexusDb)
|
|
365
388
|
return 0;
|
|
366
389
|
const nexusNames = typedAll(nexusDb.prepare('SELECT id, name FROM nexus_nodes WHERE name IS NOT NULL LIMIT 10000'));
|
|
@@ -383,7 +406,9 @@ export async function linkDecisionToSymbols(decisionId, contextText, projectRoot
|
|
|
383
406
|
const now = new Date().toISOString().replace('T', ' ').slice(0, 19);
|
|
384
407
|
// Write documents edges
|
|
385
408
|
for (const name of matches) {
|
|
386
|
-
const
|
|
409
|
+
const matches = nexusNames.filter((node) => node.name === name);
|
|
410
|
+
const qualified = matches.filter((node) => contextText.includes(node.id));
|
|
411
|
+
const nexusNode = qualified.length === 1 ? qualified[0] : matches.length === 1 ? matches[0] : undefined;
|
|
387
412
|
if (!nexusNode)
|
|
388
413
|
continue;
|
|
389
414
|
try {
|
|
@@ -432,8 +457,8 @@ export async function autoLinkMemories(projectRoot) {
|
|
|
432
457
|
try {
|
|
433
458
|
await getBrainDb(projectRoot);
|
|
434
459
|
const brainNative = getBrainNativeDb(projectRoot);
|
|
435
|
-
await getNexusDb();
|
|
436
|
-
const nexusNative = getNexusNativeDb();
|
|
460
|
+
await getNexusDb(projectRoot);
|
|
461
|
+
const nexusNative = getNexusNativeDb(projectRoot);
|
|
437
462
|
if (!brainNative || !nexusNative)
|
|
438
463
|
return result;
|
|
439
464
|
// Load all brain page nodes that are memory entity types
|
|
@@ -651,13 +676,18 @@ export async function queryMemoriesForCode(projectRoot, symbol) {
|
|
|
651
676
|
ORDER BY e.weight DESC, n.quality_score DESC
|
|
652
677
|
LIMIT 50
|
|
653
678
|
`), symbol);
|
|
654
|
-
result.memories = rows
|
|
679
|
+
result.memories = rows
|
|
680
|
+
.filter((row) => isCurrentDecisionCodeEvidence(brainNative, row.provenance))
|
|
681
|
+
.map((r) => ({
|
|
655
682
|
nodeId: r.id,
|
|
656
683
|
nodeType: r.node_type,
|
|
657
684
|
label: r.label,
|
|
658
685
|
qualityScore: r.quality_score,
|
|
659
686
|
edgeWeight: r.weight,
|
|
660
|
-
matchStrategy: r.provenance
|
|
687
|
+
matchStrategy: readDecisionCodeEvidence(r.provenance)
|
|
688
|
+
? 'explicit-decision-evidence'
|
|
689
|
+
: (r.provenance?.replace('auto:', '') ?? 'manual'),
|
|
690
|
+
provenance: readDecisionCodeEvidence(r.provenance) ?? undefined,
|
|
661
691
|
}));
|
|
662
692
|
}
|
|
663
693
|
catch (err) {
|
|
@@ -683,8 +713,8 @@ export async function queryCodeForMemory(projectRoot, memoryId) {
|
|
|
683
713
|
try {
|
|
684
714
|
await getBrainDb(projectRoot);
|
|
685
715
|
const brainNative = getBrainNativeDb(projectRoot);
|
|
686
|
-
await getNexusDb();
|
|
687
|
-
const nexusNative = getNexusNativeDb();
|
|
716
|
+
await getNexusDb(projectRoot);
|
|
717
|
+
const nexusNative = getNexusNativeDb(projectRoot);
|
|
688
718
|
if (!brainNative || !nexusNative)
|
|
689
719
|
return result;
|
|
690
720
|
const brainEdges = typedAll(brainNative.prepare(`
|
|
@@ -699,6 +729,8 @@ export async function queryCodeForMemory(projectRoot, memoryId) {
|
|
|
699
729
|
return result;
|
|
700
730
|
// Fetch nexus node metadata for each target (read-only)
|
|
701
731
|
for (const edge of brainEdges) {
|
|
732
|
+
if (!isCurrentDecisionCodeEvidence(brainNative, edge.provenance))
|
|
733
|
+
continue;
|
|
702
734
|
const nexusNode = nexusNative
|
|
703
735
|
.prepare('SELECT id, label, file_path, kind FROM nexus_nodes WHERE id = ? LIMIT 1')
|
|
704
736
|
.get(edge.to_id);
|
|
@@ -709,7 +741,10 @@ export async function queryCodeForMemory(projectRoot, memoryId) {
|
|
|
709
741
|
filePath: nexusNode.file_path,
|
|
710
742
|
kind: nexusNode.kind,
|
|
711
743
|
edgeWeight: edge.weight,
|
|
712
|
-
matchStrategy: edge.provenance
|
|
744
|
+
matchStrategy: readDecisionCodeEvidence(edge.provenance)
|
|
745
|
+
? 'explicit-decision-evidence'
|
|
746
|
+
: (edge.provenance?.replace('auto:', '') ?? 'manual'),
|
|
747
|
+
provenance: readDecisionCodeEvidence(edge.provenance) ?? undefined,
|
|
713
748
|
});
|
|
714
749
|
}
|
|
715
750
|
}
|
|
@@ -733,12 +768,12 @@ export async function listCodeLinks(projectRoot, limit = 100) {
|
|
|
733
768
|
try {
|
|
734
769
|
await getBrainDb(projectRoot);
|
|
735
770
|
const brainNative = getBrainNativeDb(projectRoot);
|
|
736
|
-
await getNexusDb();
|
|
737
|
-
const nexusNative = getNexusNativeDb();
|
|
771
|
+
await getNexusDb(projectRoot);
|
|
772
|
+
const nexusNative = getNexusNativeDb(projectRoot);
|
|
738
773
|
if (!brainNative || !nexusNative)
|
|
739
774
|
return entries;
|
|
740
775
|
const rows = typedAll(brainNative.prepare(`
|
|
741
|
-
SELECT e.from_id, e.to_id, e.weight, e.created_at,
|
|
776
|
+
SELECT e.from_id, e.to_id, e.weight, e.created_at, e.provenance,
|
|
742
777
|
n.node_type, n.label
|
|
743
778
|
FROM brain_page_edges e
|
|
744
779
|
JOIN brain_page_nodes n ON n.id = e.from_id
|
|
@@ -747,10 +782,13 @@ export async function listCodeLinks(projectRoot, limit = 100) {
|
|
|
747
782
|
LIMIT ?
|
|
748
783
|
`), limit);
|
|
749
784
|
for (const row of rows) {
|
|
785
|
+
if (!isCurrentDecisionCodeEvidence(brainNative, row.provenance))
|
|
786
|
+
continue;
|
|
750
787
|
const nexusNode = nexusNative
|
|
751
788
|
.prepare('SELECT id, label, file_path, kind FROM nexus_nodes WHERE id = ? LIMIT 1')
|
|
752
789
|
.get(row.to_id);
|
|
753
790
|
entries.push({
|
|
791
|
+
provenance: readDecisionCodeEvidence(row.provenance) ?? undefined,
|
|
754
792
|
brainNodeId: row.from_id,
|
|
755
793
|
brainNodeType: row.node_type,
|
|
756
794
|
brainNodeLabel: row.label,
|
|
@@ -910,8 +948,8 @@ export async function linkConduitMessagesToSymbols(projectRoot) {
|
|
|
910
948
|
await getBrainDb(projectRoot);
|
|
911
949
|
const brainNative = getBrainNativeDb(projectRoot);
|
|
912
950
|
// Ensure nexus.db is available for symbol lookup
|
|
913
|
-
await getNexusDb();
|
|
914
|
-
const nexusNative = getNexusNativeDb();
|
|
951
|
+
await getNexusDb(projectRoot);
|
|
952
|
+
const nexusNative = getNexusNativeDb(projectRoot);
|
|
915
953
|
if (!brainNative || !nexusNative)
|
|
916
954
|
return result;
|
|
917
955
|
// T11545: plasticity weight lives in the sibling nexus_relation_weights
|