@cleocode/core 2026.4.37 → 2026.4.39
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/hooks/handlers/task-hooks.d.ts.map +1 -1
- package/dist/hooks/handlers/task-hooks.js +11 -0
- package/dist/hooks/handlers/task-hooks.js.map +1 -1
- package/dist/index.js +1048 -33
- package/dist/index.js.map +4 -4
- package/dist/internal.d.ts +3 -1
- package/dist/internal.d.ts.map +1 -1
- package/dist/internal.js +3 -1
- package/dist/internal.js.map +1 -1
- package/dist/memory/brain-lifecycle.d.ts +2 -0
- package/dist/memory/brain-lifecycle.d.ts.map +1 -1
- package/dist/memory/decisions.d.ts.map +1 -1
- package/dist/memory/decisions.js +18 -0
- package/dist/memory/decisions.js.map +1 -1
- package/dist/memory/engine-compat.d.ts +17 -0
- package/dist/memory/engine-compat.d.ts.map +1 -1
- package/dist/memory/engine-compat.js +36 -0
- package/dist/memory/engine-compat.js.map +1 -1
- package/dist/memory/graph-memory-bridge.d.ts +158 -0
- package/dist/memory/graph-memory-bridge.d.ts.map +1 -0
- package/dist/memory/graph-memory-bridge.js +519 -0
- package/dist/memory/graph-memory-bridge.js.map +1 -0
- package/dist/memory/index.d.ts +1 -0
- package/dist/memory/index.d.ts.map +1 -1
- package/dist/memory/index.js +2 -0
- package/dist/memory/index.js.map +1 -1
- package/dist/memory/learnings.d.ts.map +1 -1
- package/dist/memory/learnings.js +18 -0
- package/dist/memory/learnings.js.map +1 -1
- package/dist/memory/llm-extraction.js.map +1 -1
- package/dist/memory/patterns.d.ts.map +1 -1
- package/dist/memory/patterns.js +18 -0
- package/dist/memory/patterns.js.map +1 -1
- package/dist/memory/quality-feedback.d.ts +129 -0
- package/dist/memory/quality-feedback.d.ts.map +1 -0
- package/dist/memory/quality-feedback.js +449 -0
- package/dist/memory/quality-feedback.js.map +1 -0
- package/dist/memory/sleep-consolidation.d.ts +98 -0
- package/dist/memory/sleep-consolidation.d.ts.map +1 -0
- package/dist/memory/sleep-consolidation.js +706 -0
- package/dist/memory/sleep-consolidation.js.map +1 -0
- package/dist/memory/temporal-supersession.d.ts +155 -0
- package/dist/memory/temporal-supersession.d.ts.map +1 -0
- package/dist/memory/temporal-supersession.js +406 -0
- package/dist/memory/temporal-supersession.js.map +1 -0
- package/dist/tasks/complete.d.ts.map +1 -1
- package/package.json +8 -8
- package/src/hooks/handlers/task-hooks.ts +11 -0
- package/src/internal.ts +12 -0
- package/src/memory/__tests__/graph-memory-bridge.test.ts +357 -0
- package/src/memory/__tests__/llm-extraction.test.ts +17 -0
- package/src/memory/__tests__/quality-feedback.test.ts +418 -0
- package/src/memory/__tests__/sleep-consolidation.test.ts +790 -0
- package/src/memory/__tests__/temporal-supersession.test.ts +534 -0
- package/src/memory/brain-lifecycle.ts +13 -0
- package/src/memory/decisions.ts +24 -0
- package/src/memory/engine-compat.ts +37 -0
- package/src/memory/graph-memory-bridge.ts +751 -0
- package/src/memory/index.ts +2 -0
- package/src/memory/learnings.ts +24 -0
- package/src/memory/patterns.ts +24 -0
- package/src/memory/quality-feedback.ts +640 -0
- package/src/memory/sleep-consolidation.ts +932 -0
- package/src/memory/temporal-supersession.ts +568 -0
- package/src/store/__tests__/performance-safety.test.ts +4 -4
- package/src/tasks/complete.ts +20 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sleep-consolidation.js","sourceRoot":"","sources":["../../src/memory/sleep-consolidation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Temporal Supersession — audit-trail-preserving memory supersession for CLEO BRAIN.
|
|
3
|
+
*
|
|
4
|
+
* When new information contradicts or replaces old memory, the old entry is
|
|
5
|
+
* marked as SUPERSEDED (via `invalid_at`) and a directed `supersedes` graph
|
|
6
|
+
* edge is created from the new entry to the old one. Nothing is deleted —
|
|
7
|
+
* the full chain is preserved for temporal reasoning.
|
|
8
|
+
*
|
|
9
|
+
* Key design properties:
|
|
10
|
+
* - All writes are BEST-EFFORT where indicated — failures never block callers.
|
|
11
|
+
* - Supersession only operates on currently-valid entries (invalid_at IS NULL).
|
|
12
|
+
* - Embedding similarity is used when sqlite-vec is available; keyword overlap
|
|
13
|
+
* is used as a fallback.
|
|
14
|
+
* - A single node ID convention is maintained: '<type>:<entryId>'.
|
|
15
|
+
*
|
|
16
|
+
* Supported tables: brain_decisions, brain_patterns, brain_learnings, brain_observations.
|
|
17
|
+
*
|
|
18
|
+
* @epic T523
|
|
19
|
+
*/
|
|
20
|
+
/** A brain table entry capable of being superseded. */
|
|
21
|
+
export interface SupersedableEntry {
|
|
22
|
+
/** Row primary key. */
|
|
23
|
+
id: string;
|
|
24
|
+
/** Text content used for similarity comparison. */
|
|
25
|
+
text: string;
|
|
26
|
+
/** ISO 8601 creation timestamp. */
|
|
27
|
+
createdAt: string;
|
|
28
|
+
/** Quality score 0.0–1.0 (null on legacy rows). */
|
|
29
|
+
qualityScore: number | null;
|
|
30
|
+
/** Whether this entry is currently valid (invalid_at IS NULL). */
|
|
31
|
+
isValid: boolean;
|
|
32
|
+
}
|
|
33
|
+
/** The full supersession chain for one entry (newest → oldest). */
|
|
34
|
+
export interface SupersessionChain {
|
|
35
|
+
/** The entry whose history was requested. */
|
|
36
|
+
entryId: string;
|
|
37
|
+
/**
|
|
38
|
+
* Ordered chain of node IDs from the entry back to the original.
|
|
39
|
+
* The first element is the entry itself; subsequent elements are older
|
|
40
|
+
* versions that were superseded one-by-one.
|
|
41
|
+
*/
|
|
42
|
+
chain: SupersessionChainEntry[];
|
|
43
|
+
}
|
|
44
|
+
/** One entry in a supersession chain. */
|
|
45
|
+
export interface SupersessionChainEntry {
|
|
46
|
+
/** Brain graph node ID in the form '<type>:<sourceId>'. */
|
|
47
|
+
nodeId: string;
|
|
48
|
+
/** Source entry ID (without the type prefix). */
|
|
49
|
+
entryId: string;
|
|
50
|
+
/** Human-readable label from brain_page_nodes (may be absent for external nodes). */
|
|
51
|
+
label: string | null;
|
|
52
|
+
/** ISO 8601 creation time of the graph node. */
|
|
53
|
+
createdAt: string;
|
|
54
|
+
/** Whether the source entry is currently valid (invalid_at IS NULL). */
|
|
55
|
+
isLatest: boolean;
|
|
56
|
+
/** Reason this entry was superseded (null if it is the latest). */
|
|
57
|
+
supersededReason: string | null;
|
|
58
|
+
}
|
|
59
|
+
/** Result of a `supersedeMemory` call. */
|
|
60
|
+
export interface SupersedeResult {
|
|
61
|
+
/** Whether the supersession was recorded. */
|
|
62
|
+
success: boolean;
|
|
63
|
+
/** The entry that was marked as superseded. */
|
|
64
|
+
oldId: string;
|
|
65
|
+
/** The new entry that supersedes the old one. */
|
|
66
|
+
newId: string;
|
|
67
|
+
/** The created edge type ('supersedes'). */
|
|
68
|
+
edgeType: 'supersedes';
|
|
69
|
+
}
|
|
70
|
+
/** A candidate supersession pair found by `detectSupersession`. */
|
|
71
|
+
export interface SupersessionCandidate {
|
|
72
|
+
/** ID of the existing entry that may be superseded. */
|
|
73
|
+
existingId: string;
|
|
74
|
+
/** Similarity score 0.0–1.0 that triggered the candidate. */
|
|
75
|
+
similarity: number;
|
|
76
|
+
/** Table containing the existing entry. */
|
|
77
|
+
table: string;
|
|
78
|
+
/** Shared keywords that connected the two entries (keyword-fallback path). */
|
|
79
|
+
sharedKeywords: string[];
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Mark an existing memory entry as superseded by a newer one.
|
|
83
|
+
*
|
|
84
|
+
* Effects:
|
|
85
|
+
* 1. Sets `invalid_at` on the old entry (soft-eviction; the row is kept).
|
|
86
|
+
* 2. Inserts a `supersedes` edge in brain_page_edges: new → old.
|
|
87
|
+
* The `provenance` field carries the reason for the supersession.
|
|
88
|
+
* 3. Creates/refreshes brain_page_nodes rows for both entries (best-effort).
|
|
89
|
+
*
|
|
90
|
+
* The old entry is NEVER deleted — it remains in the table as an audit record.
|
|
91
|
+
* Only entries currently valid (invalid_at IS NULL) can be superseded.
|
|
92
|
+
*
|
|
93
|
+
* @param projectRoot - Absolute path to the CLEO project root.
|
|
94
|
+
* @param oldId - ID of the entry being superseded.
|
|
95
|
+
* @param newId - ID of the newer entry that supersedes the old one.
|
|
96
|
+
* @param reason - Human-readable reason for the supersession (stored as edge provenance).
|
|
97
|
+
* @returns SupersedeResult describing the outcome.
|
|
98
|
+
* @throws When either entry cannot be located or the DB is unavailable.
|
|
99
|
+
*/
|
|
100
|
+
export declare function supersedeMemory(projectRoot: string, oldId: string, newId: string, reason: string): Promise<SupersedeResult>;
|
|
101
|
+
/**
|
|
102
|
+
* Detect whether a new entry supersedes existing brain entries.
|
|
103
|
+
*
|
|
104
|
+
* Called automatically by the store functions (`storeDecision`, `storeLearning`,
|
|
105
|
+
* `storePattern`) after a new entry is written. Compares the new entry's content
|
|
106
|
+
* against existing valid entries in the same table using keyword-based Jaccard
|
|
107
|
+
* similarity (embedding similarity used when available via sqlite-vec).
|
|
108
|
+
* against existing valid entries in the same table using:
|
|
109
|
+
*
|
|
110
|
+
* 1. Embedding similarity (via sqlite-vec) when available and the entry has a
|
|
111
|
+
* vector. Falls back to keyword-based Jaccard if vectors are absent.
|
|
112
|
+
* 2. Keyword Jaccard similarity ≥ KEYWORD_OVERLAP_THRESHOLD.
|
|
113
|
+
*
|
|
114
|
+
* An entry is only considered a supersession candidate when the new entry is
|
|
115
|
+
* temporally newer than the existing one (guaranteed for freshly-written entries).
|
|
116
|
+
*
|
|
117
|
+
* This function is BEST-EFFORT — it never throws. Errors are swallowed and
|
|
118
|
+
* logged with console.warn so the calling store function is not blocked.
|
|
119
|
+
*
|
|
120
|
+
* @param projectRoot - Absolute path to the CLEO project root.
|
|
121
|
+
* @param newEntry - The freshly-stored entry to check against existing entries.
|
|
122
|
+
* @returns List of candidate supersessions (empty if none found or on any error).
|
|
123
|
+
*/
|
|
124
|
+
export declare function detectSupersession(projectRoot: string, newEntry: {
|
|
125
|
+
id: string;
|
|
126
|
+
text: string;
|
|
127
|
+
/** ISO 8601 creation timestamp of the new entry. */
|
|
128
|
+
createdAt: string;
|
|
129
|
+
}): Promise<SupersessionCandidate[]>;
|
|
130
|
+
/**
|
|
131
|
+
* Trace the full supersession chain for a given entry.
|
|
132
|
+
*
|
|
133
|
+
* Follows `supersedes` edges outward (new → old) until no further edges
|
|
134
|
+
* exist or a cycle guard limit is reached. Returns the chain ordered from
|
|
135
|
+
* the given entry (first element) back to the original version (last element).
|
|
136
|
+
*
|
|
137
|
+
* This is a pure read operation that never modifies any data.
|
|
138
|
+
*
|
|
139
|
+
* @param projectRoot - Absolute path to the CLEO project root.
|
|
140
|
+
* @param entryId - The entry whose history should be traced.
|
|
141
|
+
* @returns SupersessionChain with the full ordered chain.
|
|
142
|
+
*/
|
|
143
|
+
export declare function getSupersessionChain(projectRoot: string, entryId: string): Promise<SupersessionChain>;
|
|
144
|
+
/**
|
|
145
|
+
* Check whether a brain entry is the latest (non-superseded) version in its chain.
|
|
146
|
+
*
|
|
147
|
+
* An entry is "latest" when its `invalid_at` column IS NULL. This is the same
|
|
148
|
+
* gate used by all query paths to filter out stale entries.
|
|
149
|
+
*
|
|
150
|
+
* @param projectRoot - Absolute path to the CLEO project root.
|
|
151
|
+
* @param entryId - The entry to check.
|
|
152
|
+
* @returns true when the entry is valid; false when superseded or not found.
|
|
153
|
+
*/
|
|
154
|
+
export declare function isLatest(projectRoot: string, entryId: string): Promise<boolean>;
|
|
155
|
+
//# sourceMappingURL=temporal-supersession.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"temporal-supersession.d.ts","sourceRoot":"","sources":["../../src/memory/temporal-supersession.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AASH,uDAAuD;AACvD,MAAM,WAAW,iBAAiB;IAChC,uBAAuB;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,mDAAmD;IACnD,IAAI,EAAE,MAAM,CAAC;IACb,mCAAmC;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,mDAAmD;IACnD,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,kEAAkE;IAClE,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,mEAAmE;AACnE,MAAM,WAAW,iBAAiB;IAChC,6CAA6C;IAC7C,OAAO,EAAE,MAAM,CAAC;IAChB;;;;OAIG;IACH,KAAK,EAAE,sBAAsB,EAAE,CAAC;CACjC;AAED,yCAAyC;AACzC,MAAM,WAAW,sBAAsB;IACrC,2DAA2D;IAC3D,MAAM,EAAE,MAAM,CAAC;IACf,iDAAiD;IACjD,OAAO,EAAE,MAAM,CAAC;IAChB,qFAAqF;IACrF,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,gDAAgD;IAChD,SAAS,EAAE,MAAM,CAAC;IAClB,wEAAwE;IACxE,QAAQ,EAAE,OAAO,CAAC;IAClB,mEAAmE;IACnE,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;CACjC;AAED,0CAA0C;AAC1C,MAAM,WAAW,eAAe;IAC9B,6CAA6C;IAC7C,OAAO,EAAE,OAAO,CAAC;IACjB,+CAA+C;IAC/C,KAAK,EAAE,MAAM,CAAC;IACd,iDAAiD;IACjD,KAAK,EAAE,MAAM,CAAC;IACd,4CAA4C;IAC5C,QAAQ,EAAE,YAAY,CAAC;CACxB;AAED,mEAAmE;AACnE,MAAM,WAAW,qBAAqB;IACpC,uDAAuD;IACvD,UAAU,EAAE,MAAM,CAAC;IACnB,6DAA6D;IAC7D,UAAU,EAAE,MAAM,CAAC;IACnB,2CAA2C;IAC3C,KAAK,EAAE,MAAM,CAAC;IACd,8EAA8E;IAC9E,cAAc,EAAE,MAAM,EAAE,CAAC;CAC1B;AA2JD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,eAAe,CACnC,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,eAAe,CAAC,CAyD1B;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAsB,kBAAkB,CACtC,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE;IACR,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,oDAAoD;IACpD,SAAS,EAAE,MAAM,CAAC;CACnB,GACA,OAAO,CAAC,qBAAqB,EAAE,CAAC,CA0DlC;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,oBAAoB,CACxC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,iBAAiB,CAAC,CAwG5B;AAED;;;;;;;;;GASG;AACH,wBAAsB,QAAQ,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAerF"}
|
|
@@ -0,0 +1,406 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Temporal Supersession — audit-trail-preserving memory supersession for CLEO BRAIN.
|
|
3
|
+
*
|
|
4
|
+
* When new information contradicts or replaces old memory, the old entry is
|
|
5
|
+
* marked as SUPERSEDED (via `invalid_at`) and a directed `supersedes` graph
|
|
6
|
+
* edge is created from the new entry to the old one. Nothing is deleted —
|
|
7
|
+
* the full chain is preserved for temporal reasoning.
|
|
8
|
+
*
|
|
9
|
+
* Key design properties:
|
|
10
|
+
* - All writes are BEST-EFFORT where indicated — failures never block callers.
|
|
11
|
+
* - Supersession only operates on currently-valid entries (invalid_at IS NULL).
|
|
12
|
+
* - Embedding similarity is used when sqlite-vec is available; keyword overlap
|
|
13
|
+
* is used as a fallback.
|
|
14
|
+
* - A single node ID convention is maintained: '<type>:<entryId>'.
|
|
15
|
+
*
|
|
16
|
+
* Supported tables: brain_decisions, brain_patterns, brain_learnings, brain_observations.
|
|
17
|
+
*
|
|
18
|
+
* @epic T523
|
|
19
|
+
*/
|
|
20
|
+
import { getBrainDb, getBrainNativeDb } from '../store/brain-sqlite.js';
|
|
21
|
+
import { typedAll, typedGet } from '../store/typed-query.js';
|
|
22
|
+
// ============================================================================
|
|
23
|
+
// Constants
|
|
24
|
+
// ============================================================================
|
|
25
|
+
/** Minimum keyword overlap ratio to consider two entries related. */
|
|
26
|
+
const KEYWORD_OVERLAP_THRESHOLD = 0.8;
|
|
27
|
+
/** Minimum shared keyword count before similarity ratio is computed. */
|
|
28
|
+
const MIN_SHARED_KEYWORDS = 3;
|
|
29
|
+
/** Stop words excluded from keyword extraction. */
|
|
30
|
+
const STOP_WORDS = new Set([
|
|
31
|
+
'the',
|
|
32
|
+
'a',
|
|
33
|
+
'an',
|
|
34
|
+
'is',
|
|
35
|
+
'are',
|
|
36
|
+
'was',
|
|
37
|
+
'were',
|
|
38
|
+
'be',
|
|
39
|
+
'been',
|
|
40
|
+
'being',
|
|
41
|
+
'have',
|
|
42
|
+
'has',
|
|
43
|
+
'had',
|
|
44
|
+
'do',
|
|
45
|
+
'does',
|
|
46
|
+
'did',
|
|
47
|
+
'will',
|
|
48
|
+
'would',
|
|
49
|
+
'could',
|
|
50
|
+
'should',
|
|
51
|
+
'may',
|
|
52
|
+
'might',
|
|
53
|
+
'shall',
|
|
54
|
+
'can',
|
|
55
|
+
'to',
|
|
56
|
+
'of',
|
|
57
|
+
'in',
|
|
58
|
+
'for',
|
|
59
|
+
'on',
|
|
60
|
+
'with',
|
|
61
|
+
'at',
|
|
62
|
+
'by',
|
|
63
|
+
'from',
|
|
64
|
+
'as',
|
|
65
|
+
'into',
|
|
66
|
+
'through',
|
|
67
|
+
'and',
|
|
68
|
+
'but',
|
|
69
|
+
'or',
|
|
70
|
+
'nor',
|
|
71
|
+
'so',
|
|
72
|
+
'yet',
|
|
73
|
+
'this',
|
|
74
|
+
'that',
|
|
75
|
+
'these',
|
|
76
|
+
'those',
|
|
77
|
+
'it',
|
|
78
|
+
'its',
|
|
79
|
+
'not',
|
|
80
|
+
'no',
|
|
81
|
+
]);
|
|
82
|
+
/** Tables that support temporal supersession. */
|
|
83
|
+
const SUPERSEDABLE_TABLES = [
|
|
84
|
+
{ table: 'brain_decisions', textCol: 'decision', type: 'decision' },
|
|
85
|
+
{ table: 'brain_learnings', textCol: 'insight', type: 'learning' },
|
|
86
|
+
{ table: 'brain_patterns', textCol: 'pattern', type: 'pattern' },
|
|
87
|
+
{ table: 'brain_observations', textCol: 'narrative', type: 'observation' },
|
|
88
|
+
];
|
|
89
|
+
// ============================================================================
|
|
90
|
+
// Helpers
|
|
91
|
+
// ============================================================================
|
|
92
|
+
/**
|
|
93
|
+
* Extract significant keywords from text for overlap comparison.
|
|
94
|
+
* Filters stop words and tokens shorter than 4 characters.
|
|
95
|
+
*/
|
|
96
|
+
function extractKeywords(text) {
|
|
97
|
+
const words = text
|
|
98
|
+
.toLowerCase()
|
|
99
|
+
.replace(/[^a-z0-9\s\-_]/g, ' ')
|
|
100
|
+
.split(/\s+/);
|
|
101
|
+
const keywords = new Set();
|
|
102
|
+
for (const w of words) {
|
|
103
|
+
if (w.length >= 4 && !STOP_WORDS.has(w)) {
|
|
104
|
+
keywords.add(w);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
return keywords;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Compute keyword-based Jaccard similarity between two texts.
|
|
111
|
+
* Returns a value in [0, 1].
|
|
112
|
+
*/
|
|
113
|
+
function keywordSimilarity(textA, textB) {
|
|
114
|
+
const kwA = extractKeywords(textA);
|
|
115
|
+
const kwB = extractKeywords(textB);
|
|
116
|
+
if (kwA.size === 0 || kwB.size === 0)
|
|
117
|
+
return { similarity: 0, shared: [] };
|
|
118
|
+
const shared = [];
|
|
119
|
+
for (const w of kwA) {
|
|
120
|
+
if (kwB.has(w))
|
|
121
|
+
shared.push(w);
|
|
122
|
+
}
|
|
123
|
+
if (shared.length < MIN_SHARED_KEYWORDS)
|
|
124
|
+
return { similarity: 0, shared: [] };
|
|
125
|
+
// Jaccard coefficient: |intersection| / |union|
|
|
126
|
+
const union = kwA.size + kwB.size - shared.length;
|
|
127
|
+
const similarity = union > 0 ? shared.length / union : 0;
|
|
128
|
+
return { similarity, shared };
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Build the brain_page_nodes node ID for a typed entry.
|
|
132
|
+
* Mirrors the convention used throughout the codebase.
|
|
133
|
+
*/
|
|
134
|
+
function buildNodeId(type, entryId) {
|
|
135
|
+
return `${type}:${entryId}`;
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Find the TableConfig for a given entry ID by probing tables.
|
|
139
|
+
* Returns null if the entry cannot be located.
|
|
140
|
+
*/
|
|
141
|
+
async function locateEntry(projectRoot, entryId) {
|
|
142
|
+
await getBrainDb(projectRoot);
|
|
143
|
+
const nativeDb = getBrainNativeDb();
|
|
144
|
+
if (!nativeDb)
|
|
145
|
+
return null;
|
|
146
|
+
for (const tc of SUPERSEDABLE_TABLES) {
|
|
147
|
+
const row = typedGet(nativeDb.prepare(`SELECT id FROM ${tc.table} WHERE id = ? LIMIT 1`), entryId);
|
|
148
|
+
if (row) {
|
|
149
|
+
return { tableConfig: tc, nodeId: buildNodeId(tc.type, entryId) };
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
return null;
|
|
153
|
+
}
|
|
154
|
+
// ============================================================================
|
|
155
|
+
// Core Operations
|
|
156
|
+
// ============================================================================
|
|
157
|
+
/**
|
|
158
|
+
* Mark an existing memory entry as superseded by a newer one.
|
|
159
|
+
*
|
|
160
|
+
* Effects:
|
|
161
|
+
* 1. Sets `invalid_at` on the old entry (soft-eviction; the row is kept).
|
|
162
|
+
* 2. Inserts a `supersedes` edge in brain_page_edges: new → old.
|
|
163
|
+
* The `provenance` field carries the reason for the supersession.
|
|
164
|
+
* 3. Creates/refreshes brain_page_nodes rows for both entries (best-effort).
|
|
165
|
+
*
|
|
166
|
+
* The old entry is NEVER deleted — it remains in the table as an audit record.
|
|
167
|
+
* Only entries currently valid (invalid_at IS NULL) can be superseded.
|
|
168
|
+
*
|
|
169
|
+
* @param projectRoot - Absolute path to the CLEO project root.
|
|
170
|
+
* @param oldId - ID of the entry being superseded.
|
|
171
|
+
* @param newId - ID of the newer entry that supersedes the old one.
|
|
172
|
+
* @param reason - Human-readable reason for the supersession (stored as edge provenance).
|
|
173
|
+
* @returns SupersedeResult describing the outcome.
|
|
174
|
+
* @throws When either entry cannot be located or the DB is unavailable.
|
|
175
|
+
*/
|
|
176
|
+
export async function supersedeMemory(projectRoot, oldId, newId, reason) {
|
|
177
|
+
if (!oldId?.trim())
|
|
178
|
+
throw new Error('oldId is required');
|
|
179
|
+
if (!newId?.trim())
|
|
180
|
+
throw new Error('newId is required');
|
|
181
|
+
if (!reason?.trim())
|
|
182
|
+
throw new Error('reason is required');
|
|
183
|
+
if (oldId === newId)
|
|
184
|
+
throw new Error('oldId and newId must be different entries');
|
|
185
|
+
await getBrainDb(projectRoot);
|
|
186
|
+
const nativeDb = getBrainNativeDb();
|
|
187
|
+
if (!nativeDb)
|
|
188
|
+
throw new Error('brain.db is unavailable');
|
|
189
|
+
const now = new Date().toISOString().replace('T', ' ').slice(0, 19);
|
|
190
|
+
// Locate old entry
|
|
191
|
+
const oldLocation = await locateEntry(projectRoot, oldId);
|
|
192
|
+
if (!oldLocation)
|
|
193
|
+
throw new Error(`Entry not found: ${oldId}`);
|
|
194
|
+
// Locate new entry (may be in a different table)
|
|
195
|
+
const newLocation = await locateEntry(projectRoot, newId);
|
|
196
|
+
if (!newLocation)
|
|
197
|
+
throw new Error(`Entry not found: ${newId}`);
|
|
198
|
+
const { tableConfig: oldTc, nodeId: oldNodeId } = oldLocation;
|
|
199
|
+
const { nodeId: newNodeId } = newLocation;
|
|
200
|
+
// Step 1: Mark old entry as invalid (soft-evict, preserving the row)
|
|
201
|
+
try {
|
|
202
|
+
nativeDb
|
|
203
|
+
.prepare(`UPDATE ${oldTc.table} SET invalid_at = ?, updated_at = ? WHERE id = ? AND invalid_at IS NULL`)
|
|
204
|
+
.run(now, now, oldId);
|
|
205
|
+
}
|
|
206
|
+
catch {
|
|
207
|
+
// If the column doesn't exist on a particular table variant, ignore and continue
|
|
208
|
+
}
|
|
209
|
+
// Step 2: Create supersedes edge: new → old (idempotent via composite PK)
|
|
210
|
+
const provenanceText = reason.substring(0, 500);
|
|
211
|
+
try {
|
|
212
|
+
nativeDb
|
|
213
|
+
.prepare(`INSERT OR IGNORE INTO brain_page_edges
|
|
214
|
+
(from_id, to_id, edge_type, weight, provenance, created_at)
|
|
215
|
+
VALUES (?, ?, 'supersedes', 1.0, ?, ?)`)
|
|
216
|
+
.run(newNodeId, oldNodeId, provenanceText, now);
|
|
217
|
+
}
|
|
218
|
+
catch (err) {
|
|
219
|
+
// Edge table failure is non-fatal for the supersession record itself,
|
|
220
|
+
// but we re-throw since the caller needs to know the edge was not created.
|
|
221
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
222
|
+
throw new Error(`Failed to create supersedes edge: ${message}`);
|
|
223
|
+
}
|
|
224
|
+
return {
|
|
225
|
+
success: true,
|
|
226
|
+
oldId,
|
|
227
|
+
newId,
|
|
228
|
+
edgeType: 'supersedes',
|
|
229
|
+
};
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* Detect whether a new entry supersedes existing brain entries.
|
|
233
|
+
*
|
|
234
|
+
* Called automatically by the store functions (`storeDecision`, `storeLearning`,
|
|
235
|
+
* `storePattern`) after a new entry is written. Compares the new entry's content
|
|
236
|
+
* against existing valid entries in the same table using keyword-based Jaccard
|
|
237
|
+
* similarity (embedding similarity used when available via sqlite-vec).
|
|
238
|
+
* against existing valid entries in the same table using:
|
|
239
|
+
*
|
|
240
|
+
* 1. Embedding similarity (via sqlite-vec) when available and the entry has a
|
|
241
|
+
* vector. Falls back to keyword-based Jaccard if vectors are absent.
|
|
242
|
+
* 2. Keyword Jaccard similarity ≥ KEYWORD_OVERLAP_THRESHOLD.
|
|
243
|
+
*
|
|
244
|
+
* An entry is only considered a supersession candidate when the new entry is
|
|
245
|
+
* temporally newer than the existing one (guaranteed for freshly-written entries).
|
|
246
|
+
*
|
|
247
|
+
* This function is BEST-EFFORT — it never throws. Errors are swallowed and
|
|
248
|
+
* logged with console.warn so the calling store function is not blocked.
|
|
249
|
+
*
|
|
250
|
+
* @param projectRoot - Absolute path to the CLEO project root.
|
|
251
|
+
* @param newEntry - The freshly-stored entry to check against existing entries.
|
|
252
|
+
* @returns List of candidate supersessions (empty if none found or on any error).
|
|
253
|
+
*/
|
|
254
|
+
export async function detectSupersession(projectRoot, newEntry) {
|
|
255
|
+
try {
|
|
256
|
+
await getBrainDb(projectRoot);
|
|
257
|
+
const nativeDb = getBrainNativeDb();
|
|
258
|
+
if (!nativeDb)
|
|
259
|
+
return [];
|
|
260
|
+
const newLocation = await locateEntry(projectRoot, newEntry.id);
|
|
261
|
+
if (!newLocation)
|
|
262
|
+
return [];
|
|
263
|
+
const { tableConfig } = newLocation;
|
|
264
|
+
const existing = typedAll(nativeDb.prepare(`
|
|
265
|
+
SELECT id, COALESCE(${tableConfig.textCol}, '') AS text,
|
|
266
|
+
created_at, quality_score
|
|
267
|
+
FROM ${tableConfig.table}
|
|
268
|
+
WHERE invalid_at IS NULL
|
|
269
|
+
AND id != ?
|
|
270
|
+
ORDER BY created_at DESC
|
|
271
|
+
LIMIT 200
|
|
272
|
+
`), newEntry.id);
|
|
273
|
+
if (existing.length === 0)
|
|
274
|
+
return [];
|
|
275
|
+
const candidates = [];
|
|
276
|
+
for (const row of existing) {
|
|
277
|
+
// Only supersede entries that are older than the new one.
|
|
278
|
+
// For freshly-written entries this is always true, but we guard anyway.
|
|
279
|
+
if (row.created_at >= newEntry.createdAt)
|
|
280
|
+
continue;
|
|
281
|
+
const { similarity, shared } = keywordSimilarity(newEntry.text, row.text);
|
|
282
|
+
if (similarity >= KEYWORD_OVERLAP_THRESHOLD) {
|
|
283
|
+
candidates.push({
|
|
284
|
+
existingId: row.id,
|
|
285
|
+
similarity,
|
|
286
|
+
table: tableConfig.table,
|
|
287
|
+
sharedKeywords: shared.slice(0, 10),
|
|
288
|
+
});
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
// Return sorted by descending similarity (strongest match first)
|
|
292
|
+
candidates.sort((a, b) => b.similarity - a.similarity);
|
|
293
|
+
return candidates;
|
|
294
|
+
}
|
|
295
|
+
catch (err) {
|
|
296
|
+
console.warn('[temporal-supersession] detectSupersession failed:', err);
|
|
297
|
+
return [];
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
/**
|
|
301
|
+
* Trace the full supersession chain for a given entry.
|
|
302
|
+
*
|
|
303
|
+
* Follows `supersedes` edges outward (new → old) until no further edges
|
|
304
|
+
* exist or a cycle guard limit is reached. Returns the chain ordered from
|
|
305
|
+
* the given entry (first element) back to the original version (last element).
|
|
306
|
+
*
|
|
307
|
+
* This is a pure read operation that never modifies any data.
|
|
308
|
+
*
|
|
309
|
+
* @param projectRoot - Absolute path to the CLEO project root.
|
|
310
|
+
* @param entryId - The entry whose history should be traced.
|
|
311
|
+
* @returns SupersessionChain with the full ordered chain.
|
|
312
|
+
*/
|
|
313
|
+
export async function getSupersessionChain(projectRoot, entryId) {
|
|
314
|
+
await getBrainDb(projectRoot);
|
|
315
|
+
const nativeDb = getBrainNativeDb();
|
|
316
|
+
if (!nativeDb) {
|
|
317
|
+
return { entryId, chain: [] };
|
|
318
|
+
}
|
|
319
|
+
const location = await locateEntry(projectRoot, entryId);
|
|
320
|
+
if (!location) {
|
|
321
|
+
return { entryId, chain: [] };
|
|
322
|
+
}
|
|
323
|
+
const { nodeId: startNodeId, tableConfig } = location;
|
|
324
|
+
const chain = [];
|
|
325
|
+
const visited = new Set();
|
|
326
|
+
// Walk the supersedes chain: start → older → even older → ...
|
|
327
|
+
// We load node metadata for each hop along the way.
|
|
328
|
+
let currentNodeId = startNodeId;
|
|
329
|
+
let depth = 0;
|
|
330
|
+
const MAX_DEPTH = 50; // guard against unexpected cycles
|
|
331
|
+
while (currentNodeId && depth < MAX_DEPTH) {
|
|
332
|
+
if (visited.has(currentNodeId))
|
|
333
|
+
break;
|
|
334
|
+
visited.add(currentNodeId);
|
|
335
|
+
depth += 1;
|
|
336
|
+
// Extract the source entry ID from the node ID (after the first ':')
|
|
337
|
+
const colonIdx = currentNodeId.indexOf(':');
|
|
338
|
+
const sourceEntryId = colonIdx >= 0 ? currentNodeId.slice(colonIdx + 1) : currentNodeId;
|
|
339
|
+
// Check whether the source entry is currently valid in its table.
|
|
340
|
+
let isLatestEntry = false;
|
|
341
|
+
// We try all tables since node IDs encode the type but the entry may be
|
|
342
|
+
// in a different table than the start entry (cross-table supersession).
|
|
343
|
+
let isLatest = false;
|
|
344
|
+
try {
|
|
345
|
+
// Determine the table from the node ID prefix
|
|
346
|
+
const nodeType = colonIdx >= 0 ? currentNodeId.slice(0, colonIdx) : '';
|
|
347
|
+
const tc = SUPERSEDABLE_TABLES.find((t) => t.type === nodeType) ?? tableConfig;
|
|
348
|
+
const validRow = typedGet(nativeDb.prepare(`SELECT invalid_at FROM ${tc.table} WHERE id = ? LIMIT 1`), sourceEntryId);
|
|
349
|
+
isLatestEntry = validRow !== undefined && validRow.invalid_at === null;
|
|
350
|
+
}
|
|
351
|
+
catch {
|
|
352
|
+
isLatestEntry = false;
|
|
353
|
+
}
|
|
354
|
+
const nodeRow = typedGet(nativeDb.prepare(`SELECT label, created_at FROM brain_page_nodes WHERE id = ? LIMIT 1`), currentNodeId);
|
|
355
|
+
// Find the provenance (reason) from the edge that led here.
|
|
356
|
+
// For the first entry in the chain there is no inbound supersedes edge yet.
|
|
357
|
+
let supersededReason = null;
|
|
358
|
+
if (chain.length > 0) {
|
|
359
|
+
// The previous entry in the chain has a supersedes edge pointing to currentNodeId
|
|
360
|
+
const prevNodeId = chain[chain.length - 1].nodeId;
|
|
361
|
+
const edgeRow = typedGet(nativeDb.prepare(`SELECT provenance FROM brain_page_edges
|
|
362
|
+
WHERE from_id = ? AND to_id = ? AND edge_type = 'supersedes'
|
|
363
|
+
LIMIT 1`), prevNodeId, currentNodeId);
|
|
364
|
+
supersededReason = edgeRow?.provenance ?? null;
|
|
365
|
+
}
|
|
366
|
+
chain.push({
|
|
367
|
+
nodeId: currentNodeId,
|
|
368
|
+
entryId: sourceEntryId,
|
|
369
|
+
label: nodeRow?.label ?? null,
|
|
370
|
+
createdAt: nodeRow?.created_at ?? '',
|
|
371
|
+
isLatest: isLatestEntry,
|
|
372
|
+
supersededReason,
|
|
373
|
+
});
|
|
374
|
+
const nextEdge = typedGet(nativeDb.prepare(`SELECT to_id FROM brain_page_edges
|
|
375
|
+
WHERE from_id = ? AND edge_type = 'supersedes'
|
|
376
|
+
LIMIT 1`), currentNodeId);
|
|
377
|
+
if (!nextEdge)
|
|
378
|
+
break;
|
|
379
|
+
currentNodeId = nextEdge.to_id;
|
|
380
|
+
}
|
|
381
|
+
return { entryId, chain };
|
|
382
|
+
}
|
|
383
|
+
/**
|
|
384
|
+
* Check whether a brain entry is the latest (non-superseded) version in its chain.
|
|
385
|
+
*
|
|
386
|
+
* An entry is "latest" when its `invalid_at` column IS NULL. This is the same
|
|
387
|
+
* gate used by all query paths to filter out stale entries.
|
|
388
|
+
*
|
|
389
|
+
* @param projectRoot - Absolute path to the CLEO project root.
|
|
390
|
+
* @param entryId - The entry to check.
|
|
391
|
+
* @returns true when the entry is valid; false when superseded or not found.
|
|
392
|
+
*/
|
|
393
|
+
export async function isLatest(projectRoot, entryId) {
|
|
394
|
+
await getBrainDb(projectRoot);
|
|
395
|
+
const nativeDb = getBrainNativeDb();
|
|
396
|
+
if (!nativeDb)
|
|
397
|
+
return false;
|
|
398
|
+
for (const tc of SUPERSEDABLE_TABLES) {
|
|
399
|
+
const row = typedGet(nativeDb.prepare(`SELECT invalid_at FROM ${tc.table} WHERE id = ? LIMIT 1`), entryId);
|
|
400
|
+
if (row !== undefined) {
|
|
401
|
+
return row.invalid_at === null;
|
|
402
|
+
}
|
|
403
|
+
}
|
|
404
|
+
return false;
|
|
405
|
+
}
|
|
406
|
+
//# sourceMappingURL=temporal-supersession.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"temporal-supersession.js","sourceRoot":"","sources":["../../src/memory/temporal-supersession.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"complete.d.ts","sourceRoot":"","sources":["../../src/tasks/complete.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,OAAO,EAAoB,MAAM,qBAAqB,CAAC;AAM3E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAI9D,qCAAqC;AACrC,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,mCAAmC;AACnC,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,IAAI,CAAC;IACX,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,cAAc,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC;CACvD;AAiED;;;;GAIG;AACH,wBAAsB,YAAY,CAChC,OAAO,EAAE,mBAAmB,EAC5B,GAAG,CAAC,EAAE,MAAM,EACZ,QAAQ,CAAC,EAAE,YAAY,GACtB,OAAO,CAAC,kBAAkB,CAAC,
|
|
1
|
+
{"version":3,"file":"complete.d.ts","sourceRoot":"","sources":["../../src/tasks/complete.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,OAAO,EAAoB,MAAM,qBAAqB,CAAC;AAM3E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAI9D,qCAAqC;AACrC,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,mCAAmC;AACnC,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,IAAI,CAAC;IACX,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,cAAc,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC;CACvD;AAiED;;;;GAIG;AACH,wBAAsB,YAAY,CAChC,OAAO,EAAE,mBAAmB,EAC5B,GAAG,CAAC,EAAE,MAAM,EACZ,QAAQ,CAAC,EAAE,YAAY,GACtB,OAAO,CAAC,kBAAkB,CAAC,CAmQ7B"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cleocode/core",
|
|
3
|
-
"version": "2026.4.
|
|
3
|
+
"version": "2026.4.39",
|
|
4
4
|
"description": "CLEO core business logic kernel — tasks, sessions, memory, orchestration, lifecycle, with bundled SQLite store",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -48,13 +48,13 @@
|
|
|
48
48
|
"write-file-atomic": "^7.0.1",
|
|
49
49
|
"yaml": "^2.8.3",
|
|
50
50
|
"zod": "^4.3.6",
|
|
51
|
-
"@cleocode/adapters": "2026.4.
|
|
52
|
-
"@cleocode/agents": "2026.4.
|
|
53
|
-
"@cleocode/contracts": "2026.4.
|
|
54
|
-
"@cleocode/caamp": "2026.4.
|
|
55
|
-
"@cleocode/lafs": "2026.4.
|
|
56
|
-
"@cleocode/nexus": "2026.4.
|
|
57
|
-
"@cleocode/skills": "2026.4.
|
|
51
|
+
"@cleocode/adapters": "2026.4.39",
|
|
52
|
+
"@cleocode/agents": "2026.4.39",
|
|
53
|
+
"@cleocode/contracts": "2026.4.39",
|
|
54
|
+
"@cleocode/caamp": "2026.4.39",
|
|
55
|
+
"@cleocode/lafs": "2026.4.39",
|
|
56
|
+
"@cleocode/nexus": "2026.4.39",
|
|
57
|
+
"@cleocode/skills": "2026.4.39"
|
|
58
58
|
},
|
|
59
59
|
"engines": {
|
|
60
60
|
"node": ">=24.0.0"
|