@cleocode/core 2026.8.1 → 2026.8.3
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/bootstrap.d.ts.map +1 -1
- package/dist/bootstrap.js +57 -27
- package/dist/bootstrap.js.map +1 -1
- package/dist/check/pr-gate.d.ts.map +1 -1
- package/dist/check/pr-gate.js +9 -0
- package/dist/check/pr-gate.js.map +1 -1
- package/dist/db/index.d.ts +13 -0
- package/dist/db/index.d.ts.map +1 -1
- package/dist/db/index.js +13 -0
- package/dist/db/index.js.map +1 -1
- package/dist/docs/display-alias.js +1 -1
- package/dist/docs/display-alias.js.map +1 -1
- package/dist/docs/export-document.js +499 -380
- package/dist/docs/export-document.js.map +3 -3
- package/dist/docs/numbering.js +1 -1
- package/dist/docs/numbering.js.map +1 -1
- package/dist/docs/supersede.js +1 -1
- package/dist/docs/supersede.js.map +1 -1
- package/dist/hooks/registry.d.ts +2 -2
- package/dist/hooks/registry.d.ts.map +1 -1
- package/dist/hooks/registry.js +5 -0
- package/dist/hooks/registry.js.map +1 -1
- package/dist/hooks/types.d.ts +59 -0
- package/dist/hooks/types.d.ts.map +1 -1
- package/dist/init/scaffold-workflows.d.ts +12 -0
- package/dist/init/scaffold-workflows.d.ts.map +1 -1
- package/dist/init/scaffold-workflows.js +16 -0
- package/dist/init/scaffold-workflows.js.map +1 -1
- package/dist/init/upgrade-workflows.d.ts.map +1 -1
- package/dist/init/upgrade-workflows.js +16 -0
- package/dist/init/upgrade-workflows.js.map +1 -1
- package/dist/init.d.ts.map +1 -1
- package/dist/init.js +16 -1
- package/dist/init.js.map +1 -1
- package/dist/injection.d.ts.map +1 -1
- package/dist/injection.js +44 -3
- package/dist/injection.js.map +1 -1
- package/dist/internal.d.ts +1 -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/index.js +1 -1
- package/dist/lifecycle/index.js.map +1 -1
- package/dist/llm/credentials.d.ts +16 -1
- package/dist/llm/credentials.d.ts.map +1 -1
- package/dist/llm/credentials.js.map +1 -1
- package/dist/llm/cross-provider-selector.d.ts +25 -0
- package/dist/llm/cross-provider-selector.d.ts.map +1 -1
- package/dist/llm/cross-provider-selector.js +76 -3
- package/dist/llm/cross-provider-selector.js.map +1 -1
- package/dist/llm/local-inference-probe.d.ts +101 -0
- package/dist/llm/local-inference-probe.d.ts.map +1 -0
- package/dist/llm/local-inference-probe.js +174 -0
- package/dist/llm/local-inference-probe.js.map +1 -0
- package/dist/llm/plugin-facade.js +429 -115
- package/dist/llm/plugin-facade.js.map +3 -3
- package/dist/llm/role-executor.d.ts.map +1 -1
- package/dist/llm/role-executor.js +95 -9
- package/dist/llm/role-executor.js.map +1 -1
- package/dist/llm/role-resolver.d.ts +10 -0
- package/dist/llm/role-resolver.d.ts.map +1 -1
- package/dist/llm/role-resolver.js +92 -1
- package/dist/llm/role-resolver.js.map +1 -1
- package/dist/llm/system-resolver.d.ts.map +1 -1
- package/dist/llm/system-resolver.js +2 -0
- package/dist/llm/system-resolver.js.map +1 -1
- package/dist/memory/brain-backfill.js +3 -3
- package/dist/memory/brain-backfill.js.map +1 -1
- package/dist/memory/brain-consolidator.js +2 -2
- package/dist/memory/brain-consolidator.js.map +1 -1
- package/dist/memory/brain-doctor.js +1 -1
- package/dist/memory/brain-doctor.js.map +1 -1
- package/dist/memory/brain-health-dashboard.js +1 -1
- package/dist/memory/brain-health-dashboard.js.map +1 -1
- package/dist/memory/brain-lifecycle.js +10 -10
- package/dist/memory/brain-lifecycle.js.map +1 -1
- package/dist/memory/brain-maintenance.js +1 -1
- package/dist/memory/brain-maintenance.js.map +1 -1
- package/dist/memory/brain-page-nodes.js +4 -4
- package/dist/memory/brain-page-nodes.js.map +1 -1
- package/dist/memory/brain-reasoning.js +1 -1
- package/dist/memory/brain-reasoning.js.map +1 -1
- package/dist/memory/brain-search.d.ts +109 -0
- package/dist/memory/brain-search.d.ts.map +1 -1
- package/dist/memory/brain-search.js +150 -38
- package/dist/memory/brain-search.js.map +1 -1
- package/dist/memory/brain-similarity.js +1 -1
- package/dist/memory/brain-similarity.js.map +1 -1
- package/dist/memory/brain-stdp.js +6 -6
- package/dist/memory/brain-stdp.js.map +1 -1
- package/dist/memory/brain-stub-prune.d.ts +109 -0
- package/dist/memory/brain-stub-prune.d.ts.map +1 -0
- package/dist/memory/brain-stub-prune.js +155 -0
- package/dist/memory/brain-stub-prune.js.map +1 -0
- package/dist/memory/brain-sweep-executor.js +1 -1
- package/dist/memory/brain-sweep-executor.js.map +1 -1
- package/dist/memory/brain-writer-handlers.js +2 -2
- package/dist/memory/brain-writer-handlers.js.map +1 -1
- package/dist/memory/claude-mem-migration.d.ts.map +1 -1
- package/dist/memory/claude-mem-migration.js +2 -2
- package/dist/memory/claude-mem-migration.js.map +1 -1
- package/dist/memory/engine-compat.d.ts.map +1 -1
- package/dist/memory/engine-compat.js +65 -7
- package/dist/memory/engine-compat.js.map +1 -1
- package/dist/memory/extraction-gate.js +3 -3
- package/dist/memory/extraction-gate.js.map +1 -1
- package/dist/memory/graph-memory-bridge.js +9 -9
- package/dist/memory/graph-memory-bridge.js.map +1 -1
- package/dist/memory/graph-queries.js +4 -4
- package/dist/memory/graph-queries.js.map +1 -1
- package/dist/memory/llm-extraction.js +1 -1
- package/dist/memory/llm-extraction.js.map +1 -1
- package/dist/memory/memory-bridge.js +1 -1
- package/dist/memory/memory-bridge.js.map +1 -1
- package/dist/memory/nexus-plasticity.js +1 -1
- package/dist/memory/nexus-plasticity.js.map +1 -1
- package/dist/memory/observer-reflector.js +1 -1
- package/dist/memory/observer-reflector.js.map +1 -1
- package/dist/memory/pipeline-manifest-sqlite.d.ts.map +1 -1
- package/dist/memory/pipeline-manifest-sqlite.js +13 -3
- package/dist/memory/pipeline-manifest-sqlite.js.map +1 -1
- package/dist/memory/quality-feedback.js +4 -4
- package/dist/memory/quality-feedback.js.map +1 -1
- package/dist/memory/retrieval/increment-citation-counts.js +1 -1
- package/dist/memory/retrieval/increment-citation-counts.js.map +1 -1
- package/dist/memory/retrieval/log-retrieval.js +1 -1
- package/dist/memory/retrieval/log-retrieval.js.map +1 -1
- package/dist/memory/retrieval/observe.js +1 -1
- package/dist/memory/retrieval/observe.js.map +1 -1
- package/dist/memory/retrieval/search.js +1 -1
- package/dist/memory/retrieval/search.js.map +1 -1
- package/dist/memory/retrieval/timeline.js +1 -1
- package/dist/memory/retrieval/timeline.js.map +1 -1
- package/dist/memory/sleep-consolidation.js +4 -4
- package/dist/memory/sleep-consolidation.js.map +1 -1
- package/dist/memory/temporal-supersession.js +5 -5
- package/dist/memory/temporal-supersession.js.map +1 -1
- package/dist/memory/transcript-extractor.js +1 -1
- package/dist/memory/transcript-extractor.js.map +1 -1
- package/dist/memory/transcript-ingestor.js +1 -1
- package/dist/memory/transcript-ingestor.js.map +1 -1
- package/dist/memory/transcript-scanner.js +1 -1
- package/dist/memory/transcript-scanner.js.map +1 -1
- package/dist/nexus/analyze-orchestrator.d.ts.map +1 -1
- package/dist/nexus/analyze-orchestrator.js +28 -0
- package/dist/nexus/analyze-orchestrator.js.map +1 -1
- package/dist/nexus/context.d.ts.map +1 -1
- package/dist/nexus/context.js +3 -3
- package/dist/nexus/context.js.map +1 -1
- package/dist/nexus/impact.d.ts.map +1 -1
- package/dist/nexus/impact.js +3 -3
- package/dist/nexus/impact.js.map +1 -1
- package/dist/nexus/living-brain.js +7 -7
- package/dist/nexus/living-brain.js.map +1 -1
- package/dist/nexus/symbol-miss.d.ts +132 -0
- package/dist/nexus/symbol-miss.d.ts.map +1 -0
- package/dist/nexus/symbol-miss.js +168 -0
- package/dist/nexus/symbol-miss.js.map +1 -0
- package/dist/nexus/tasks-bridge.js +4 -4
- package/dist/nexus/tasks-bridge.js.map +1 -1
- package/dist/orchestrate/spawn-ops.d.ts +21 -1
- package/dist/orchestrate/spawn-ops.d.ts.map +1 -1
- package/dist/orchestrate/spawn-ops.js +39 -2
- package/dist/orchestrate/spawn-ops.js.map +1 -1
- package/dist/orchestrate/worker-verify.d.ts.map +1 -1
- package/dist/orchestrate/worker-verify.js +22 -0
- package/dist/orchestrate/worker-verify.js.map +1 -1
- package/dist/release/changesets-aggregator.d.ts.map +1 -1
- package/dist/release/changesets-aggregator.js +15 -1
- package/dist/release/changesets-aggregator.js.map +1 -1
- package/dist/release/open.d.ts +29 -2
- package/dist/release/open.d.ts.map +1 -1
- package/dist/release/open.js +48 -11
- package/dist/release/open.js.map +1 -1
- package/dist/release/reconcile.d.ts.map +1 -1
- package/dist/release/reconcile.js +5 -1
- package/dist/release/reconcile.js.map +1 -1
- package/dist/resources/governor.d.ts +12 -2
- package/dist/resources/governor.d.ts.map +1 -1
- package/dist/resources/governor.js +12 -3
- package/dist/resources/governor.js.map +1 -1
- package/dist/sagas/migrate-containment.d.ts.map +1 -1
- package/dist/sagas/migrate-containment.js +4 -2
- package/dist/sagas/migrate-containment.js.map +1 -1
- package/dist/scaffold/ensure-dirs.d.ts.map +1 -1
- package/dist/scaffold/ensure-dirs.js +15 -3
- package/dist/scaffold/ensure-dirs.js.map +1 -1
- package/dist/scaffold/project-detection.d.ts.map +1 -1
- package/dist/scaffold/project-detection.js +2 -1
- package/dist/scaffold/project-detection.js.map +1 -1
- package/dist/selfimprove/draft-pr.d.ts +14 -1
- package/dist/selfimprove/draft-pr.d.ts.map +1 -1
- package/dist/selfimprove/draft-pr.js.map +1 -1
- package/dist/selfimprove/fix-gen.d.ts +0 -21
- package/dist/selfimprove/fix-gen.d.ts.map +1 -1
- package/dist/selfimprove/fix-gen.js +509 -173
- package/dist/selfimprove/fix-gen.js.map +3 -3
- package/dist/selfimprove/run-loop.d.ts.map +1 -1
- package/dist/selfimprove/run-loop.js +50 -19
- package/dist/selfimprove/run-loop.js.map +1 -1
- package/dist/selfimprove/scenarios/dhq-replay-find/golden.json +114 -4
- package/dist/selfimprove/scenarios/dhq-replay-find/scenario.json +3 -3
- package/dist/sentient/dream-cycle.d.ts +20 -19
- package/dist/sentient/dream-cycle.d.ts.map +1 -1
- package/dist/sentient/dream-cycle.js +323 -12
- package/dist/sentient/dream-cycle.js.map +1 -1
- package/dist/sentient/dream-watermark.d.ts +134 -0
- package/dist/sentient/dream-watermark.d.ts.map +1 -0
- package/dist/sentient/dream-watermark.js +156 -0
- package/dist/sentient/dream-watermark.js.map +1 -0
- package/dist/sentient/hygiene-scan.js +1 -1
- package/dist/sentient/hygiene-scan.js.map +1 -1
- package/dist/sentient/propose-tick.js +3 -3
- package/dist/sentient/propose-tick.js.map +1 -1
- package/dist/sentient/stage-drift-tick.js +1 -1
- package/dist/sentient/stage-drift-tick.js.map +1 -1
- package/dist/sentient/state.d.ts +17 -0
- package/dist/sentient/state.d.ts.map +1 -1
- package/dist/sentient/state.js +22 -3
- package/dist/sentient/state.js.map +1 -1
- package/dist/sentient/tick.d.ts.map +1 -1
- package/dist/sentient/tick.js +79 -2
- package/dist/sentient/tick.js.map +1 -1
- package/dist/sequence/index.js +1 -1
- package/dist/sequence/index.js.map +1 -1
- package/dist/sessions/index.d.ts.map +1 -1
- package/dist/sessions/index.js +5 -1
- package/dist/sessions/index.js.map +1 -1
- package/dist/sessions/snapshot.d.ts.map +1 -1
- package/dist/sessions/snapshot.js +6 -3
- package/dist/sessions/snapshot.js.map +1 -1
- package/dist/store/agent-registry-store.d.ts.map +1 -1
- package/dist/store/agent-registry-store.js +71 -28
- package/dist/store/agent-registry-store.js.map +1 -1
- package/dist/store/attachment-store.js +3 -3
- package/dist/store/attachment-store.js.map +1 -1
- package/dist/store/checkpoint-git-dir.d.ts +95 -0
- package/dist/store/checkpoint-git-dir.d.ts.map +1 -0
- package/dist/store/checkpoint-git-dir.js +111 -0
- package/dist/store/checkpoint-git-dir.js.map +1 -0
- package/dist/store/conduit-sqlite.d.ts +21 -1
- package/dist/store/conduit-sqlite.d.ts.map +1 -1
- package/dist/store/conduit-sqlite.js +42 -56
- package/dist/store/conduit-sqlite.js.map +1 -1
- package/dist/store/dual-scope-db.d.ts +39 -0
- package/dist/store/dual-scope-db.d.ts.map +1 -1
- package/dist/store/dual-scope-db.js +26 -8
- package/dist/store/dual-scope-db.js.map +1 -1
- package/dist/store/git-checkpoint.d.ts.map +1 -1
- package/dist/store/git-checkpoint.js +6 -5
- package/dist/store/git-checkpoint.js.map +1 -1
- package/dist/store/memory-sqlite.d.ts +57 -3
- package/dist/store/memory-sqlite.d.ts.map +1 -1
- package/dist/store/memory-sqlite.js +70 -89
- package/dist/store/memory-sqlite.js.map +1 -1
- package/dist/store/nexus-sqlite.d.ts +42 -0
- package/dist/store/nexus-sqlite.d.ts.map +1 -1
- package/dist/store/nexus-sqlite.js +79 -115
- package/dist/store/nexus-sqlite.js.map +1 -1
- package/dist/store/ports/domain-binding.d.ts +233 -0
- package/dist/store/ports/domain-binding.d.ts.map +1 -0
- package/dist/store/ports/domain-binding.js +500 -0
- package/dist/store/ports/domain-binding.js.map +1 -0
- package/dist/store/ports/fk-integrity.d.ts +155 -0
- package/dist/store/ports/fk-integrity.d.ts.map +1 -0
- package/dist/store/ports/fk-integrity.js +182 -0
- package/dist/store/ports/fk-integrity.js.map +1 -0
- package/dist/store/role-accessors-impl.js +2 -2
- package/dist/store/role-accessors-impl.js.map +1 -1
- package/dist/store/skills-db.d.ts +19 -0
- package/dist/store/skills-db.d.ts.map +1 -1
- package/dist/store/skills-db.js +80 -72
- package/dist/store/skills-db.js.map +1 -1
- package/dist/store/sqlite-backup.js +2 -2
- package/dist/store/sqlite-backup.js.map +1 -1
- package/dist/store/sqlite-data-accessor.js +1 -1
- package/dist/store/sqlite-data-accessor.js.map +1 -1
- package/dist/store/sqlite.d.ts +72 -10
- package/dist/store/sqlite.d.ts.map +1 -1
- package/dist/store/sqlite.js +173 -160
- package/dist/store/sqlite.js.map +1 -1
- package/dist/store/tasks-sqlite.js +2 -2
- package/dist/store/tasks-sqlite.js.map +1 -1
- package/dist/system/health.d.ts +0 -4
- package/dist/system/health.d.ts.map +1 -1
- package/dist/system/health.js +60 -3
- package/dist/system/health.js.map +1 -1
- package/dist/tasks/add.d.ts.map +1 -1
- package/dist/tasks/add.js +40 -4
- package/dist/tasks/add.js.map +1 -1
- package/dist/tasks/collection.d.ts +51 -0
- package/dist/tasks/collection.d.ts.map +1 -0
- package/dist/tasks/collection.js +81 -0
- package/dist/tasks/collection.js.map +1 -0
- package/dist/tasks/complete.d.ts.map +1 -1
- package/dist/tasks/complete.js +8 -3
- package/dist/tasks/complete.js.map +1 -1
- package/dist/tasks/evidence.d.ts.map +1 -1
- package/dist/tasks/evidence.js +17 -0
- package/dist/tasks/evidence.js.map +1 -1
- package/dist/tasks/find.d.ts +50 -0
- package/dist/tasks/find.d.ts.map +1 -1
- package/dist/tasks/find.js +63 -2
- package/dist/tasks/find.js.map +1 -1
- package/dist/tasks/tool-resolver.d.ts +1 -1
- package/dist/tasks/tool-resolver.d.ts.map +1 -1
- package/dist/tasks/tool-resolver.js +83 -0
- package/dist/tasks/tool-resolver.js.map +1 -1
- package/dist/tasks/tool-semaphore.d.ts +82 -12
- package/dist/tasks/tool-semaphore.d.ts.map +1 -1
- package/dist/tasks/tool-semaphore.js +79 -17
- package/dist/tasks/tool-semaphore.js.map +1 -1
- package/dist/upgrade.js +2 -2
- package/dist/upgrade.js.map +1 -1
- package/dist/validation/doctor/checks.d.ts +23 -1
- package/dist/validation/doctor/checks.d.ts.map +1 -1
- package/dist/validation/doctor/checks.js +79 -19
- package/dist/validation/doctor/checks.js.map +1 -1
- package/dist/worktree/list.js +1 -1
- package/dist/worktree/list.js.map +1 -1
- package/package.json +23 -13
- package/templates/CLEO-INJECTION.md +40 -25
- package/templates/workflows/release-prepare.yml.tmpl +73 -16
|
@@ -41,9 +41,23 @@
|
|
|
41
41
|
*/
|
|
42
42
|
import type { DatabaseSync } from 'node:sqlite';
|
|
43
43
|
import type { NodeSQLiteDatabase } from 'drizzle-orm/node-sqlite';
|
|
44
|
+
import { type ProjectStore } from './dual-scope-db.js';
|
|
45
|
+
import { type DomainBinding } from './ports/domain-binding.js';
|
|
44
46
|
import * as brainSchema from './schema/memory-schema.js';
|
|
45
47
|
/** Schema version for newly created brain databases. Single source of truth. */
|
|
46
48
|
export declare const BRAIN_SCHEMA_VERSION = "1.0.0";
|
|
49
|
+
/**
|
|
50
|
+
* The brain domain's bound value: its Drizzle handle plus the per-database
|
|
51
|
+
* `sqlite-vec` availability flag.
|
|
52
|
+
*
|
|
53
|
+
* @task T12038 (E6-L14)
|
|
54
|
+
*/
|
|
55
|
+
export interface BrainDomainHandle {
|
|
56
|
+
/** Drizzle instance typed against the legacy brain schema. */
|
|
57
|
+
readonly drizzle: NodeSQLiteDatabase;
|
|
58
|
+
/** Whether the `sqlite-vec` extension loaded for THIS database. */
|
|
59
|
+
readonly vecLoaded: boolean;
|
|
60
|
+
}
|
|
47
61
|
/**
|
|
48
62
|
* Get the path to the brain-domain SQLite database file.
|
|
49
63
|
*
|
|
@@ -66,9 +80,21 @@ export declare function getBrainDbPath(cwd?: string): string;
|
|
|
66
80
|
*/
|
|
67
81
|
export declare function resolveBrainMigrationsFolder(): string;
|
|
68
82
|
/**
|
|
69
|
-
* Check whether the sqlite-vec extension is loaded for
|
|
83
|
+
* Check whether the `sqlite-vec` extension is loaded for a project's brain
|
|
84
|
+
* database.
|
|
85
|
+
*
|
|
86
|
+
* ## E6-L14 (T12038) — now per-database
|
|
87
|
+
*
|
|
88
|
+
* This used to read a single process-wide boolean, so a project whose vec
|
|
89
|
+
* extension failed to load could report `true` because a DIFFERENT project
|
|
90
|
+
* had loaded it. The flag is now per-binding.
|
|
91
|
+
*
|
|
92
|
+
* Returns `false` when the brain domain is not bound for `cwd` yet — callers
|
|
93
|
+
* must `await getBrainDb(cwd)` / {@link bindBrainDomain} first.
|
|
94
|
+
*
|
|
95
|
+
* @param cwd - Project working directory. Defaults to the ambient project.
|
|
70
96
|
*/
|
|
71
|
-
export declare function isBrainVecLoaded(): boolean;
|
|
97
|
+
export declare function isBrainVecLoaded(cwd?: string): boolean;
|
|
72
98
|
/**
|
|
73
99
|
* Initialize the project-scope BRAIN domain SQLite database (lazy, singleton).
|
|
74
100
|
*
|
|
@@ -96,6 +122,34 @@ export declare function isBrainVecLoaded(): boolean;
|
|
|
96
122
|
* complete (migrations are async).
|
|
97
123
|
*/
|
|
98
124
|
export declare function getBrainDb(cwd?: string): Promise<NodeSQLiteDatabase>;
|
|
125
|
+
/**
|
|
126
|
+
* Bind the legacy brain schema to the {@link ProjectStore} for `cwd` and
|
|
127
|
+
* return the full binding (store + native handle + {@link BrainDomainHandle}).
|
|
128
|
+
*
|
|
129
|
+
* ## E6-L14 cutover (T12038)
|
|
130
|
+
*
|
|
131
|
+
* The ProjectStore-bound typed port that replaces this module's singleton
|
|
132
|
+
* quintet (`_db` / `_nativeDb` / `_dbPath` / `_initPromise` / `_vecLoaded`).
|
|
133
|
+
*
|
|
134
|
+
* The brain domain shares ONE `DatabaseSync` with the tasks domain (both are
|
|
135
|
+
* tables inside the same consolidated `cleo.db`). Under the old design that
|
|
136
|
+
* sharing was implicit and fragile: the tasks side could close the connection
|
|
137
|
+
* while the brain singleton still referenced it, and `observeBrain`'s
|
|
138
|
+
* cross-domain write-guard swallowed the resulting `database is not open` as
|
|
139
|
+
* "session absent" — silently nulling `sourceSessionId` (T12019/T12020).
|
|
140
|
+
* Binding both domains to the SAME store instance makes the sharing explicit:
|
|
141
|
+
* an eviction invalidates both bindings at once, by identity.
|
|
142
|
+
*
|
|
143
|
+
* Prefer this over {@link getBrainDb} when you also need the native handle,
|
|
144
|
+
* the per-database vec flag, or an explicit store for a cross-domain
|
|
145
|
+
* transaction with the tasks domain.
|
|
146
|
+
*
|
|
147
|
+
* @param cwd - Project working directory.
|
|
148
|
+
* @returns The live brain-domain binding.
|
|
149
|
+
*
|
|
150
|
+
* @task T12038 (E6-L14)
|
|
151
|
+
*/
|
|
152
|
+
export declare function bindBrainDomain(cwd?: string): Promise<DomainBinding<BrainDomainHandle, ProjectStore>>;
|
|
99
153
|
/**
|
|
100
154
|
* Close the brain-domain database connection and release resources.
|
|
101
155
|
*
|
|
@@ -127,7 +181,7 @@ export declare function resetBrainDbState(): void;
|
|
|
127
181
|
* Useful for direct PRAGMA calls or raw SQL operations.
|
|
128
182
|
* Returns null if the database hasn't been initialized.
|
|
129
183
|
*/
|
|
130
|
-
export declare function getBrainNativeDb(): DatabaseSync | null;
|
|
184
|
+
export declare function getBrainNativeDb(cwd?: string): DatabaseSync | null;
|
|
131
185
|
export type { NodeSQLiteDatabase };
|
|
132
186
|
/**
|
|
133
187
|
* Re-export brain schema for external use.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory-sqlite.d.ts","sourceRoot":"","sources":["../../src/store/memory-sqlite.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AAKH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAKhD,OAAO,KAAK,EAAwB,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"memory-sqlite.d.ts","sourceRoot":"","sources":["../../src/store/memory-sqlite.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AAKH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAKhD,OAAO,KAAK,EAAwB,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAOxF,OAAO,EAAE,KAAK,YAAY,EAA0B,MAAM,oBAAoB,CAAC;AAU/E,OAAO,EAGL,KAAK,aAAa,EAGnB,MAAM,2BAA2B,CAAC;AAEnC,OAAO,KAAK,WAAW,MAAM,2BAA2B,CAAC;AA8BzD,gFAAgF;AAChF,eAAO,MAAM,oBAAoB,UAAU,CAAC;AAU5C;;;;;GAKG;AACH,MAAM,WAAW,iBAAiB;IAChC,8DAA8D;IAC9D,QAAQ,CAAC,OAAO,EAAE,kBAAkB,CAAC;IACrC,mEAAmE;IACnE,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;CAC7B;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,cAAc,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED;;;;;;;GAOG;AACH,wBAAgB,4BAA4B,IAAI,MAAM,CAErD;AA6OD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAEtD;AA0BD;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAsB,UAAU,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAE1E;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAsB,eAAe,CACnC,GAAG,CAAC,EAAE,MAAM,GACX,OAAO,CAAC,aAAa,CAAC,iBAAiB,EAAE,YAAY,CAAC,CAAC,CAqDzD;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,YAAY,IAAI,IAAI,CAInC;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,IAAI,IAAI,CAExC;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAElE;AAED,YAAY,EAAE,kBAAkB,EAAE,CAAC;AACnC;;GAEG;AACH,OAAO,EAAE,WAAW,EAAE,CAAC"}
|
|
@@ -46,8 +46,11 @@ import { createRequire } from 'node:module';
|
|
|
46
46
|
// native handle and re-wrap it with the legacy brain-schema drizzle instance so
|
|
47
47
|
// existing callers (brainSchema.* queries) compile and run without change.
|
|
48
48
|
import { getLogger } from '../logger.js';
|
|
49
|
-
import {
|
|
49
|
+
import { resolveDualScopeDbPath } from './dual-scope-db.js';
|
|
50
50
|
import { createSafetyBackup, migrateWithRetry, reconcileBrainMigrationsForConsolidatedDb, reconcileJournal, tableExists, } from './migration-manager.js';
|
|
51
|
+
// T12038: the brain domain no longer owns a singleton — the path-keyed binding
|
|
52
|
+
// registry does. This module contributes only its schema reconciliation.
|
|
53
|
+
import { bindProjectDomain, boundProjectNative, peekProjectDomain, releaseDomainBindings, } from './ports/domain-binding.js';
|
|
51
54
|
import { resolveCorePackageMigrationsFolder } from './resolve-migrations-folder.js';
|
|
52
55
|
import * as brainSchema from './schema/memory-schema.js';
|
|
53
56
|
const _require = createRequire(import.meta.url);
|
|
@@ -77,14 +80,6 @@ function _getDrizzle() {
|
|
|
77
80
|
}
|
|
78
81
|
/** Schema version for newly created brain databases. Single source of truth. */
|
|
79
82
|
export const BRAIN_SCHEMA_VERSION = '1.0.0';
|
|
80
|
-
/** Singleton state for lazy initialization. */
|
|
81
|
-
let _db = null;
|
|
82
|
-
let _nativeDb = null;
|
|
83
|
-
let _dbPath = null;
|
|
84
|
-
/** Guard against concurrent initialization (async migration). */
|
|
85
|
-
let _initPromise = null;
|
|
86
|
-
/** Whether sqlite-vec extension loaded successfully. */
|
|
87
|
-
let _vecLoaded = false;
|
|
88
83
|
/**
|
|
89
84
|
* Get the path to the brain-domain SQLite database file.
|
|
90
85
|
*
|
|
@@ -207,7 +202,7 @@ function brainTablesAreConsolidatedShape(nativeDb) {
|
|
|
207
202
|
* @internal
|
|
208
203
|
* @task T11522
|
|
209
204
|
*/
|
|
210
|
-
function establishLegacyBrainSchema(nativeDb, db) {
|
|
205
|
+
function establishLegacyBrainSchema(nativeDb, db, dbPath) {
|
|
211
206
|
const log = getLogger('brain-schema');
|
|
212
207
|
if (brainTablesAreConsolidatedShape(nativeDb)) {
|
|
213
208
|
// Drop the consolidated (exodus-target) brain tables so the legacy
|
|
@@ -268,8 +263,12 @@ function establishLegacyBrainSchema(nativeDb, db) {
|
|
|
268
263
|
// pre-created, so run the full `drizzle-brain` migrate via the generic
|
|
269
264
|
// reconcile (its Scenario-2 orphan-delete is safe here — a standalone brain.db
|
|
270
265
|
// journal contains only brain hashes).
|
|
271
|
-
|
|
272
|
-
|
|
266
|
+
// `dbPath` is passed explicitly (T12038) — it used to be read from the
|
|
267
|
+
// module-global `_dbPath`, which was still `null` on the first open because
|
|
268
|
+
// it was assigned AFTER this reconcile ran, so the safety backup never fired
|
|
269
|
+
// on the very path that needed it.
|
|
270
|
+
if (tableExists(nativeDb, 'brain_decisions')) {
|
|
271
|
+
createSafetyBackup(dbPath);
|
|
273
272
|
}
|
|
274
273
|
reconcileJournal(nativeDb, migrationsFolder, 'brain_decisions', 'brain');
|
|
275
274
|
migrateWithRetry(db, migrationsFolder, nativeDb, 'brain_decisions', 'brain');
|
|
@@ -313,10 +312,22 @@ function initializeBrainVec(nativeDb) {
|
|
|
313
312
|
.run();
|
|
314
313
|
}
|
|
315
314
|
/**
|
|
316
|
-
* Check whether the sqlite-vec extension is loaded for
|
|
315
|
+
* Check whether the `sqlite-vec` extension is loaded for a project's brain
|
|
316
|
+
* database.
|
|
317
|
+
*
|
|
318
|
+
* ## E6-L14 (T12038) — now per-database
|
|
319
|
+
*
|
|
320
|
+
* This used to read a single process-wide boolean, so a project whose vec
|
|
321
|
+
* extension failed to load could report `true` because a DIFFERENT project
|
|
322
|
+
* had loaded it. The flag is now per-binding.
|
|
323
|
+
*
|
|
324
|
+
* Returns `false` when the brain domain is not bound for `cwd` yet — callers
|
|
325
|
+
* must `await getBrainDb(cwd)` / {@link bindBrainDomain} first.
|
|
326
|
+
*
|
|
327
|
+
* @param cwd - Project working directory. Defaults to the ambient project.
|
|
317
328
|
*/
|
|
318
|
-
export function isBrainVecLoaded() {
|
|
319
|
-
return
|
|
329
|
+
export function isBrainVecLoaded(cwd) {
|
|
330
|
+
return peekProjectDomain('brain', cwd)?.db.vecLoaded ?? false;
|
|
320
331
|
}
|
|
321
332
|
/**
|
|
322
333
|
* Initialize the default embedding provider when brain.embedding.enabled is true.
|
|
@@ -369,61 +380,47 @@ async function initEmbeddingProvider(cwd) {
|
|
|
369
380
|
* complete (migrations are async).
|
|
370
381
|
*/
|
|
371
382
|
export async function getBrainDb(cwd) {
|
|
372
|
-
|
|
383
|
+
return (await bindBrainDomain(cwd)).db.drizzle;
|
|
384
|
+
}
|
|
385
|
+
/**
|
|
386
|
+
* Bind the legacy brain schema to the {@link ProjectStore} for `cwd` and
|
|
387
|
+
* return the full binding (store + native handle + {@link BrainDomainHandle}).
|
|
388
|
+
*
|
|
389
|
+
* ## E6-L14 cutover (T12038)
|
|
390
|
+
*
|
|
391
|
+
* The ProjectStore-bound typed port that replaces this module's singleton
|
|
392
|
+
* quintet (`_db` / `_nativeDb` / `_dbPath` / `_initPromise` / `_vecLoaded`).
|
|
393
|
+
*
|
|
394
|
+
* The brain domain shares ONE `DatabaseSync` with the tasks domain (both are
|
|
395
|
+
* tables inside the same consolidated `cleo.db`). Under the old design that
|
|
396
|
+
* sharing was implicit and fragile: the tasks side could close the connection
|
|
397
|
+
* while the brain singleton still referenced it, and `observeBrain`'s
|
|
398
|
+
* cross-domain write-guard swallowed the resulting `database is not open` as
|
|
399
|
+
* "session absent" — silently nulling `sourceSessionId` (T12019/T12020).
|
|
400
|
+
* Binding both domains to the SAME store instance makes the sharing explicit:
|
|
401
|
+
* an eviction invalidates both bindings at once, by identity.
|
|
402
|
+
*
|
|
403
|
+
* Prefer this over {@link getBrainDb} when you also need the native handle,
|
|
404
|
+
* the per-database vec flag, or an explicit store for a cross-domain
|
|
405
|
+
* transaction with the tasks domain.
|
|
406
|
+
*
|
|
407
|
+
* @param cwd - Project working directory.
|
|
408
|
+
* @returns The live brain-domain binding.
|
|
409
|
+
*
|
|
410
|
+
* @task T12038 (E6-L14)
|
|
411
|
+
*/
|
|
412
|
+
export async function bindBrainDomain(cwd) {
|
|
373
413
|
// T1906: guard against prod-DB writes in test mode.
|
|
374
414
|
const { assertTestEnv } = await import('./data-accessor.js');
|
|
375
|
-
assertTestEnv(
|
|
376
|
-
|
|
377
|
-
if (_db && _dbPath !== requestedPath) {
|
|
378
|
-
resetBrainDbState();
|
|
379
|
-
}
|
|
380
|
-
// Liveness guard (T11522): the brain domain shares the consolidated cleo.db
|
|
381
|
-
// handle with the tasks domain. The tasks side may have closed + re-opened the
|
|
382
|
-
// shared `DatabaseSync` (e.g. its `resetDbState()` / auto-recovery path) while
|
|
383
|
-
// our brain singleton still references the now-closed handle. Detect a stale
|
|
384
|
-
// (closed) handle and drop the singleton so we re-derive from the live
|
|
385
|
-
// openDualScopeDb cache below.
|
|
386
|
-
if (_db && (_nativeDb === null || !_nativeDb.isOpen)) {
|
|
387
|
-
resetBrainDbState();
|
|
388
|
-
}
|
|
389
|
-
if (_db)
|
|
390
|
-
return _db;
|
|
391
|
-
// If already initializing, wait for the in-flight init.
|
|
392
|
-
if (_initPromise)
|
|
393
|
-
return _initPromise;
|
|
394
|
-
_initPromise = (async () => {
|
|
395
|
-
// ── Dual-scope chokepoint delegation (T11522 · E6-L2) ─────────────────
|
|
396
|
-
// openDualScopeDb applies the pragma SSoT, creates the directory, runs the
|
|
397
|
-
// consolidated cleo-project migrations (which create the `brain_*` tables),
|
|
398
|
-
// and manages the singleton cache. We extract its native handle so we can
|
|
399
|
-
// re-wrap it with the legacy brain-schema for caller compatibility.
|
|
400
|
-
let nativeDb = null;
|
|
401
|
-
for (let attempt = 0; attempt < 2; attempt += 1) {
|
|
402
|
-
const dualHandle = await openDualScopeDb('project', cwd);
|
|
403
|
-
// Extract the underlying DatabaseSync. Drizzle exposes it via `$client`.
|
|
404
|
-
nativeDb = dualHandle.db.$client ?? null;
|
|
405
|
-
if (!nativeDb) {
|
|
406
|
-
throw new Error('E6-L2: openDualScopeDb returned a handle without $client — ' +
|
|
407
|
-
'cannot extract DatabaseSync for legacy brain-schema wrapping.');
|
|
408
|
-
}
|
|
409
|
-
// A shared handle can be closed after the dual-scope cache checks it but
|
|
410
|
-
// before this await resumes. Re-open once; the cache then evicts the dead
|
|
411
|
-
// entry and returns the current live handle.
|
|
412
|
-
if (nativeDb.isOpen)
|
|
413
|
-
break;
|
|
414
|
-
}
|
|
415
|
-
if (!nativeDb?.isOpen) {
|
|
416
|
-
throw new Error('E6-L2: openDualScopeDb repeatedly returned a closed DatabaseSync handle.');
|
|
417
|
-
}
|
|
418
|
-
_nativeDb = nativeDb;
|
|
419
|
-
_dbPath = requestedPath;
|
|
415
|
+
assertTestEnv(getBrainDbPath(cwd));
|
|
416
|
+
return bindProjectDomain('brain', cwd, (nativeDb, store) => {
|
|
420
417
|
// Load the sqlite-vec extension for vector similarity search (T5157). The
|
|
421
418
|
// dual-scope handle is opened with `allowExtension: true`, so loading is
|
|
422
419
|
// permitted. Non-fatal if unavailable — vec0 tables simply won't be created.
|
|
423
|
-
|
|
420
|
+
const vecLoaded = loadBrainVecExtension(nativeDb);
|
|
424
421
|
// Wrap the native handle with the legacy brain-schema drizzle instance so
|
|
425
422
|
// existing callers (brainSchema.* queries) continue to work unchanged.
|
|
426
|
-
const
|
|
423
|
+
const drizzle = _getDrizzle()({ client: nativeDb });
|
|
427
424
|
// Reconcile the LEGACY brain-domain schema inside the consolidated cleo.db.
|
|
428
425
|
// Since T11647 the consolidated `cleo.db` migration already creates every
|
|
429
426
|
// `brain_*` table in the LEGACY RUNTIME shape (epoch-ms integer timestamps,
|
|
@@ -435,35 +432,27 @@ export async function getBrainDb(cwd) {
|
|
|
435
432
|
// `drizzle-brain` migrate. The pre-T11647 DROP+recreate path is retained as
|
|
436
433
|
// a defensive fallback for any DB still carrying the old consolidated shape.
|
|
437
434
|
// (T11522 · T11647)
|
|
438
|
-
establishLegacyBrainSchema(nativeDb,
|
|
435
|
+
establishLegacyBrainSchema(nativeDb, drizzle, store.dbPath);
|
|
439
436
|
// Create the vec0 virtual table for embeddings if the extension is loaded
|
|
440
437
|
// (T5157). Must run after migrations so the schema is consistent.
|
|
441
|
-
if (
|
|
438
|
+
if (vecLoaded) {
|
|
442
439
|
initializeBrainVec(nativeDb);
|
|
443
440
|
}
|
|
444
441
|
// Seed schema version for new databases (no-op if already set).
|
|
445
442
|
nativeDb
|
|
446
443
|
.prepare(`INSERT OR IGNORE INTO brain_schema_meta (key, value) VALUES ('schemaVersion', '${BRAIN_SCHEMA_VERSION}')`)
|
|
447
444
|
.run();
|
|
448
|
-
// Set singleton only after migrations complete.
|
|
449
|
-
_db = db;
|
|
450
445
|
// Wire the default embedding provider when vec is loaded and embedding is
|
|
451
446
|
// enabled. Best-effort, async, never blocks DB access. (T539)
|
|
452
|
-
if (
|
|
447
|
+
if (vecLoaded) {
|
|
453
448
|
setImmediate(() => {
|
|
454
449
|
initEmbeddingProvider(cwd).catch(() => {
|
|
455
450
|
// Non-fatal — embedding will be unavailable until next startup.
|
|
456
451
|
});
|
|
457
452
|
});
|
|
458
453
|
}
|
|
459
|
-
return
|
|
460
|
-
})
|
|
461
|
-
try {
|
|
462
|
-
return await _initPromise;
|
|
463
|
-
}
|
|
464
|
-
finally {
|
|
465
|
-
_initPromise = null;
|
|
466
|
-
}
|
|
454
|
+
return { drizzle, vecLoaded };
|
|
455
|
+
});
|
|
467
456
|
}
|
|
468
457
|
/**
|
|
469
458
|
* Close the brain-domain database connection and release resources.
|
|
@@ -479,13 +468,9 @@ export async function getBrainDb(cwd) {
|
|
|
479
468
|
* coordinated reset (`closeAllDatabases` → `closeDb` → `_resetDualScopeDbCache`).
|
|
480
469
|
*/
|
|
481
470
|
export function closeBrainDb() {
|
|
482
|
-
// Drop only the brain
|
|
471
|
+
// Drop only the brain-domain binding. Do NOT close the connection — it is
|
|
483
472
|
// the shared dual-scope handle, possibly still in use by the tasks domain.
|
|
484
|
-
|
|
485
|
-
_db = null;
|
|
486
|
-
_dbPath = null;
|
|
487
|
-
_initPromise = null;
|
|
488
|
-
_vecLoaded = false;
|
|
473
|
+
releaseDomainBindings({ scope: 'project', domain: 'brain' });
|
|
489
474
|
}
|
|
490
475
|
/**
|
|
491
476
|
* Reset brain-domain singleton state without saving.
|
|
@@ -499,19 +484,15 @@ export function closeBrainDb() {
|
|
|
499
484
|
* shared with the tasks domain). Mirrors {@link closeBrainDb}.
|
|
500
485
|
*/
|
|
501
486
|
export function resetBrainDbState() {
|
|
502
|
-
|
|
503
|
-
_db = null;
|
|
504
|
-
_dbPath = null;
|
|
505
|
-
_initPromise = null;
|
|
506
|
-
_vecLoaded = false;
|
|
487
|
+
releaseDomainBindings({ scope: 'project', domain: 'brain' });
|
|
507
488
|
}
|
|
508
489
|
/**
|
|
509
490
|
* Get the underlying node:sqlite DatabaseSync instance for brain.db.
|
|
510
491
|
* Useful for direct PRAGMA calls or raw SQL operations.
|
|
511
492
|
* Returns null if the database hasn't been initialized.
|
|
512
493
|
*/
|
|
513
|
-
export function getBrainNativeDb() {
|
|
514
|
-
return
|
|
494
|
+
export function getBrainNativeDb(cwd) {
|
|
495
|
+
return boundProjectNative('brain', cwd);
|
|
515
496
|
}
|
|
516
497
|
/**
|
|
517
498
|
* Re-export brain schema for external use.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory-sqlite.js","sourceRoot":"","sources":["../../src/store/memory-sqlite.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAS5C,yEAAyE;AACzE,2EAA2E;AAC3E,+EAA+E;AAC/E,gFAAgF;AAChF,2EAA2E;AAC3E,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,
|
|
1
|
+
{"version":3,"file":"memory-sqlite.js","sourceRoot":"","sources":["../../src/store/memory-sqlite.ts"],"names":[],"mappings":"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"}
|
|
@@ -69,9 +69,29 @@
|
|
|
69
69
|
*/
|
|
70
70
|
import type { DatabaseSync } from 'node:sqlite';
|
|
71
71
|
import type { NodeSQLiteDatabase } from 'drizzle-orm/node-sqlite';
|
|
72
|
+
import { type ProjectStore } from './dual-scope-db.js';
|
|
73
|
+
import { type DomainBinding } from './ports/domain-binding.js';
|
|
72
74
|
import * as nexusSchema from './schema/nexus-schema.js';
|
|
73
75
|
/** Schema version for newly created nexus databases. Single source of truth. */
|
|
74
76
|
export declare const NEXUS_SCHEMA_VERSION = "1.0.0";
|
|
77
|
+
/**
|
|
78
|
+
* The nexus domain's bound value: its Drizzle handle plus the GLOBAL registry
|
|
79
|
+
* path its ATTACH targets.
|
|
80
|
+
*
|
|
81
|
+
* The registry home (`getCleoHome()`) can change between calls. Carrying it in
|
|
82
|
+
* the binding lets {@link bindNexusDomain} detect the change and re-establish —
|
|
83
|
+
* which re-runs the GLOBAL consolidated migration before re-attaching, where a
|
|
84
|
+
* bare re-attach would bind an unmigrated file (→ "no such table:
|
|
85
|
+
* nexus_project_registry"). ADR-090 · T11648.
|
|
86
|
+
*
|
|
87
|
+
* @task T12039 (E6-L15)
|
|
88
|
+
*/
|
|
89
|
+
export interface NexusDomainHandle {
|
|
90
|
+
/** Drizzle instance typed against the nexus schema. */
|
|
91
|
+
readonly drizzle: NodeSQLiteDatabase;
|
|
92
|
+
/** Absolute path of the GLOBAL `cleo.db` currently ATTACHed. */
|
|
93
|
+
readonly registryPath: string;
|
|
94
|
+
}
|
|
75
95
|
/**
|
|
76
96
|
* Returns the nexus GRAPH DB path — the consolidated PROJECT `cleo.db`
|
|
77
97
|
* (`<projectRoot>/.cleo/cleo.db`), where the four code-graph tables
|
|
@@ -193,6 +213,28 @@ export declare function _resetNestedNexusWarningGate(): void;
|
|
|
193
213
|
* @task T11648 (ADR-090 runtime read half — project-scope graph + global attach)
|
|
194
214
|
*/
|
|
195
215
|
export declare function getNexusDb(): Promise<NodeSQLiteDatabase>;
|
|
216
|
+
/**
|
|
217
|
+
* Bind the nexus schema to the {@link ProjectStore} holding the code graph,
|
|
218
|
+
* with the GLOBAL `cleo.db` ATTACHed for registry/identity reads.
|
|
219
|
+
*
|
|
220
|
+
* ## E6-L15 cutover (T12039)
|
|
221
|
+
*
|
|
222
|
+
* Replaces this module's singleton quintet (`_nexusDb` / `_nexusNativeDb` /
|
|
223
|
+
* `_nexusDbPath` / `_nexusRegistryPath` / `_nexusInitPromise`). Path keying,
|
|
224
|
+
* single-flight, and handle liveness move to the binding registry; this
|
|
225
|
+
* function keeps only what is genuinely nexus-specific — the two-scope open
|
|
226
|
+
* order and the registry ATTACH.
|
|
227
|
+
*
|
|
228
|
+
* The GLOBAL registry path is captured in the bound value rather than a
|
|
229
|
+
* separate module-global, so a `CLEO_HOME` change invalidates exactly this
|
|
230
|
+
* binding (and re-runs the global migration before re-attaching) instead of
|
|
231
|
+
* resetting a process-wide singleton that other projects also depended on.
|
|
232
|
+
*
|
|
233
|
+
* @returns The live nexus-domain binding.
|
|
234
|
+
*
|
|
235
|
+
* @task T12039 (E6-L15)
|
|
236
|
+
*/
|
|
237
|
+
export declare function bindNexusDomain(): Promise<DomainBinding<NexusDomainHandle, ProjectStore>>;
|
|
196
238
|
/**
|
|
197
239
|
* Close the nexus-domain database connection and release resources.
|
|
198
240
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nexus-sqlite.d.ts","sourceRoot":"","sources":["../../src/store/nexus-sqlite.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoEG;AAIH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"nexus-sqlite.d.ts","sourceRoot":"","sources":["../../src/store/nexus-sqlite.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoEG;AAIH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AASlE,OAAO,EAAmB,KAAK,YAAY,EAA0B,MAAM,oBAAoB,CAAC;AAKhG,OAAO,EAGL,KAAK,aAAa,EAGnB,MAAM,2BAA2B,CAAC;AAKnC,OAAO,KAAK,WAAW,MAAM,0BAA0B,CAAC;AAMxD,gFAAgF;AAChF,eAAO,MAAM,oBAAoB,UAAU,CAAC;AAU5C;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,iBAAiB;IAChC,uDAAuD;IACvD,QAAQ,CAAC,OAAO,EAAE,kBAAkB,CAAC;IACrC,gEAAgE;IAChE,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;CAC/B;AAoBD;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,cAAc,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,sBAAsB,IAAI,MAAM,CAe/C;AAuDD;;;;;;;GAOG;AACH,wBAAgB,4BAA4B,IAAI,MAAM,CAErD;AAuBD;;;;;;;;;GASG;AACH,wBAAgB,0BAA0B,IAAI,MAAM,CAEnD;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,0BAA0B,IAAI,OAAO,CA8BpD;AAED;;;;;;GAMG;AACH,wBAAgB,4BAA4B,IAAI,IAAI,CAEnD;AAwVD;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAsB,UAAU,IAAI,OAAO,CAAC,kBAAkB,CAAC,CAE9D;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,aAAa,CAAC,iBAAiB,EAAE,YAAY,CAAC,CAAC,CA4E/F;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,YAAY,IAAI,IAAI,CAInC;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,IAAI,IAAI,CAExC;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,IAAI,YAAY,GAAG,IAAI,CAEtD;AAED,YAAY,EAAE,kBAAkB,EAAE,CAAC;AACnC;;GAEG;AACH,OAAO,EAAE,WAAW,EAAE,CAAC"}
|