@kybernesis/brain-core 0.2.0 → 0.6.0
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/entity-graph.d.ts +11 -13
- package/dist/entity-graph.d.ts.map +1 -1
- package/dist/entity-graph.js +36 -548
- package/dist/entity-graph.js.map +1 -1
- package/dist/fact-retrieval.d.ts.map +1 -1
- package/dist/fact-retrieval.js +45 -116
- package/dist/fact-retrieval.js.map +1 -1
- package/dist/fact-store.d.ts +5 -0
- package/dist/fact-store.d.ts.map +1 -1
- package/dist/fact-store.js +17 -157
- package/dist/fact-store.js.map +1 -1
- package/dist/fts-sanitizer.d.ts +7 -28
- package/dist/fts-sanitizer.d.ts.map +1 -1
- package/dist/fts-sanitizer.js +7 -57
- package/dist/fts-sanitizer.js.map +1 -1
- package/dist/hybrid-search.d.ts +6 -1
- package/dist/hybrid-search.d.ts.map +1 -1
- package/dist/hybrid-search.js +47 -97
- package/dist/hybrid-search.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/ops.d.ts.map +1 -1
- package/dist/ops.js +10 -34
- package/dist/ops.js.map +1 -1
- package/dist/sleep/db.d.ts +12 -12
- package/dist/sleep/db.d.ts.map +1 -1
- package/dist/sleep/db.js +12 -110
- package/dist/sleep/db.js.map +1 -1
- package/dist/sleep/index.d.ts.map +1 -1
- package/dist/sleep/index.js +29 -45
- package/dist/sleep/index.js.map +1 -1
- package/dist/sleep/steps/consolidate.d.ts.map +1 -1
- package/dist/sleep/steps/consolidate.js +5 -36
- package/dist/sleep/steps/consolidate.js.map +1 -1
- package/dist/sleep/steps/decay.d.ts.map +1 -1
- package/dist/sleep/steps/decay.js +12 -41
- package/dist/sleep/steps/decay.js.map +1 -1
- package/dist/sleep/steps/entity-hygiene.d.ts.map +1 -1
- package/dist/sleep/steps/entity-hygiene.js +22 -64
- package/dist/sleep/steps/entity-hygiene.js.map +1 -1
- package/dist/sleep/steps/link.d.ts.map +1 -1
- package/dist/sleep/steps/link.js +18 -36
- package/dist/sleep/steps/link.js.map +1 -1
- package/dist/sleep/steps/observe.d.ts.map +1 -1
- package/dist/sleep/steps/observe.js +5 -28
- package/dist/sleep/steps/observe.js.map +1 -1
- package/dist/sleep/steps/reasoning.d.ts.map +1 -1
- package/dist/sleep/steps/reasoning.js +3 -9
- package/dist/sleep/steps/reasoning.js.map +1 -1
- package/dist/sleep/steps/summarize.d.ts.map +1 -1
- package/dist/sleep/steps/summarize.js +21 -53
- package/dist/sleep/steps/summarize.js.map +1 -1
- package/dist/sleep/steps/tag.d.ts.map +1 -1
- package/dist/sleep/steps/tag.js +3 -15
- package/dist/sleep/steps/tag.js.map +1 -1
- package/dist/sleep/steps/tier.d.ts.map +1 -1
- package/dist/sleep/steps/tier.js +18 -33
- package/dist/sleep/steps/tier.js.map +1 -1
- package/dist/sleep/utils/checkpoint.d.ts +8 -4
- package/dist/sleep/utils/checkpoint.d.ts.map +1 -1
- package/dist/sleep/utils/checkpoint.js +10 -13
- package/dist/sleep/utils/checkpoint.js.map +1 -1
- package/dist/storage.d.ts +28 -0
- package/dist/storage.d.ts.map +1 -0
- package/dist/storage.js +40 -0
- package/dist/storage.js.map +1 -0
- package/dist/timeline.d.ts +11 -22
- package/dist/timeline.d.ts.map +1 -1
- package/dist/timeline.js +24 -310
- package/dist/timeline.js.map +1 -1
- package/dist/user-profile.d.ts.map +1 -1
- package/dist/user-profile.js +11 -57
- package/dist/user-profile.js.map +1 -1
- package/dist/vectors.d.ts +8 -10
- package/dist/vectors.d.ts.map +1 -1
- package/dist/vectors.js +22 -72
- package/dist/vectors.js.map +1 -1
- package/package.json +6 -6
|
@@ -11,10 +11,9 @@
|
|
|
11
11
|
* LLM preambles.
|
|
12
12
|
*/
|
|
13
13
|
import { promises as fs } from 'node:fs';
|
|
14
|
-
import {
|
|
14
|
+
import { getStorage } from '../../storage.js';
|
|
15
15
|
import { callClaude } from '../../claude-call.js';
|
|
16
16
|
import { withRetry } from '../../utils/retry.js';
|
|
17
|
-
import { ensureSleepSchema } from '../db.js';
|
|
18
17
|
function safeParseArray(json) {
|
|
19
18
|
if (!json)
|
|
20
19
|
return [];
|
|
@@ -30,8 +29,8 @@ function safeParseArray(json) {
|
|
|
30
29
|
return [];
|
|
31
30
|
}
|
|
32
31
|
}
|
|
33
|
-
function markProcessed(
|
|
34
|
-
|
|
32
|
+
async function markProcessed(t, queueId) {
|
|
33
|
+
await getStorage().repositories.sleep.markQueueProcessed(t, queueId);
|
|
35
34
|
}
|
|
36
35
|
function buildSummaryPrompt(content, tier, title, tags, entities, relatedTitles) {
|
|
37
36
|
const context = [];
|
|
@@ -75,51 +74,35 @@ Content:
|
|
|
75
74
|
${content}`;
|
|
76
75
|
}
|
|
77
76
|
export async function runSummarizeStep(t, config) {
|
|
78
|
-
const
|
|
79
|
-
|
|
77
|
+
const sleepRepo = getStorage().repositories.sleep;
|
|
78
|
+
// Self-sufficiency parity: ensure the sleep schema at entry (standalone-safe).
|
|
79
|
+
await sleepRepo.ensureSchema(t);
|
|
80
80
|
let summarized = 0;
|
|
81
81
|
const errors = [];
|
|
82
82
|
const startTime = Date.now();
|
|
83
83
|
try {
|
|
84
|
-
const pendingItems =
|
|
85
|
-
SELECT id as queue_id, item_id
|
|
86
|
-
FROM maintenance_queue
|
|
87
|
-
WHERE task = 'resummarize' AND processed_at IS NULL
|
|
88
|
-
ORDER BY priority DESC
|
|
89
|
-
LIMIT ?
|
|
90
|
-
`).all(config.maxSummariesPerRun);
|
|
84
|
+
const pendingItems = await sleepRepo.fetchResummarizeQueue(t, config.maxSummariesPerRun);
|
|
91
85
|
const remaining = config.maxSummariesPerRun - pendingItems.length;
|
|
92
|
-
const needsSummary = remaining > 0
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
OR length(summary) < 50
|
|
96
|
-
OR summary LIKE '{%'
|
|
97
|
-
OR summary LIKE '# %'
|
|
98
|
-
OR length(summary) > 500)
|
|
99
|
-
AND (last_enriched IS NULL OR last_enriched < datetime('now', '-3 days'))
|
|
100
|
-
ORDER BY priority DESC
|
|
101
|
-
LIMIT ?
|
|
102
|
-
`).all(remaining) : [];
|
|
86
|
+
const needsSummary = remaining > 0
|
|
87
|
+
? await getStorage().domain.sleep.fetchStaleSummaryIds(t, remaining)
|
|
88
|
+
: [];
|
|
103
89
|
const allItemIds = new Set();
|
|
104
90
|
const queueMap = new Map();
|
|
105
91
|
for (const p of pendingItems) {
|
|
106
92
|
allItemIds.add(p.item_id);
|
|
107
93
|
queueMap.set(p.item_id, p.queue_id);
|
|
108
94
|
}
|
|
109
|
-
for (const
|
|
110
|
-
allItemIds.add(
|
|
95
|
+
for (const id of needsSummary) {
|
|
96
|
+
allItemIds.add(id.toString());
|
|
111
97
|
}
|
|
112
98
|
if (allItemIds.size === 0)
|
|
113
99
|
return { count: 0 };
|
|
114
100
|
for (const itemId of allItemIds) {
|
|
115
101
|
try {
|
|
116
|
-
const item =
|
|
117
|
-
SELECT id, source_path, title, tier, summary, tags_json, entities_json
|
|
118
|
-
FROM timeline_events WHERE id = ?
|
|
119
|
-
`).get(parseInt(itemId));
|
|
102
|
+
const item = await sleepRepo.getEventForSummary(t, parseInt(itemId));
|
|
120
103
|
if (!item) {
|
|
121
104
|
if (queueMap.has(itemId))
|
|
122
|
-
markProcessed(
|
|
105
|
+
await markProcessed(t, queueMap.get(itemId));
|
|
123
106
|
continue;
|
|
124
107
|
}
|
|
125
108
|
let content = '';
|
|
@@ -138,28 +121,21 @@ export async function runSummarizeStep(t, config) {
|
|
|
138
121
|
}
|
|
139
122
|
catch {
|
|
140
123
|
if (queueMap.has(itemId))
|
|
141
|
-
markProcessed(
|
|
124
|
+
await markProcessed(t, queueMap.get(itemId));
|
|
142
125
|
continue;
|
|
143
126
|
}
|
|
144
127
|
}
|
|
145
128
|
if (content.length < 20) {
|
|
146
129
|
if (queueMap.has(itemId))
|
|
147
|
-
markProcessed(
|
|
130
|
+
await markProcessed(t, queueMap.get(itemId));
|
|
148
131
|
continue;
|
|
149
132
|
}
|
|
150
133
|
const tags = safeParseArray(item.tags_json);
|
|
151
134
|
const entities = safeParseArray(item.entities_json);
|
|
152
|
-
const edges =
|
|
153
|
-
SELECT
|
|
154
|
-
CASE WHEN from_path = ? THEN to_path ELSE from_path END as related_path,
|
|
155
|
-
shared_tags
|
|
156
|
-
FROM memory_edges
|
|
157
|
-
WHERE from_path = ? OR to_path = ?
|
|
158
|
-
LIMIT 3
|
|
159
|
-
`).all(item.source_path, item.source_path, item.source_path);
|
|
135
|
+
const edges = await sleepRepo.getSummaryEdges(t, item.source_path, 3);
|
|
160
136
|
const relatedTitles = [];
|
|
161
137
|
for (const edge of edges) {
|
|
162
|
-
const related = timeline.
|
|
138
|
+
const related = await getStorage().repositories.timeline.getEventByPath(t, edge.related_path);
|
|
163
139
|
if (related?.title)
|
|
164
140
|
relatedTitles.push(related.title);
|
|
165
141
|
}
|
|
@@ -178,24 +154,16 @@ export async function runSummarizeStep(t, config) {
|
|
|
178
154
|
.replace(/^for Personal Knowledge System[:\s]*/i, '')
|
|
179
155
|
.trim();
|
|
180
156
|
if (newSummary && newSummary.length > 20) {
|
|
181
|
-
|
|
182
|
-
UPDATE timeline_events
|
|
183
|
-
SET summary = ?, last_enriched = datetime('now')
|
|
184
|
-
WHERE id = ?
|
|
185
|
-
`).run(newSummary, item.id);
|
|
157
|
+
await sleepRepo.updateEventSummary(t, item.id, newSummary);
|
|
186
158
|
summarized++;
|
|
187
159
|
}
|
|
188
160
|
if (queueMap.has(itemId))
|
|
189
|
-
markProcessed(
|
|
161
|
+
await markProcessed(t, queueMap.get(itemId));
|
|
190
162
|
}
|
|
191
163
|
catch (err) {
|
|
192
164
|
errors.push(`summarize ${itemId}: ${String(err)}`);
|
|
193
165
|
if (queueMap.has(itemId)) {
|
|
194
|
-
|
|
195
|
-
UPDATE maintenance_queue
|
|
196
|
-
SET processed_at = datetime('now'), error_message = ?
|
|
197
|
-
WHERE id = ?
|
|
198
|
-
`).run(String(err), queueMap.get(itemId));
|
|
166
|
+
await sleepRepo.markQueueError(t, queueMap.get(itemId), String(err));
|
|
199
167
|
}
|
|
200
168
|
}
|
|
201
169
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"summarize.js","sourceRoot":"","sources":["../../../src/sleep/steps/summarize.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"summarize.js","sourceRoot":"","sources":["../../../src/sleep/steps/summarize.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tag.d.ts","sourceRoot":"","sources":["../../../src/sleep/steps/tag.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAKjE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAEhD,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,wBAAsB,UAAU,CAC9B,CAAC,EAAE,aAAa,EAChB,MAAM,EAAE,WAAW,GAClB,OAAO,CAAC,SAAS,CAAC,
|
|
1
|
+
{"version":3,"file":"tag.d.ts","sourceRoot":"","sources":["../../../src/sleep/steps/tag.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAKjE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAEhD,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,wBAAsB,UAAU,CAC9B,CAAC,EAAE,aAAa,EAChB,MAAM,EAAE,WAAW,GAClB,OAAO,CAAC,SAAS,CAAC,CAgEpB"}
|
package/dist/sleep/steps/tag.js
CHANGED
|
@@ -7,26 +7,18 @@
|
|
|
7
7
|
* stored summary/title.
|
|
8
8
|
*/
|
|
9
9
|
import { promises as fs } from 'node:fs';
|
|
10
|
-
import {
|
|
10
|
+
import { getStorage } from '../../storage.js';
|
|
11
11
|
import { callClaude } from '../../claude-call.js';
|
|
12
12
|
import { withRetry } from '../../utils/retry.js';
|
|
13
13
|
import { extractJsonArray } from '../../utils/extract-json.js';
|
|
14
14
|
export async function runTagStep(t, config) {
|
|
15
15
|
if (!config.enableTagging)
|
|
16
16
|
return { count: 0 };
|
|
17
|
-
const db = getDb(t, 'timeline');
|
|
18
17
|
const staleDate = new Date(Date.now() - config.tagStaleDays * 24 * 60 * 60 * 1000).toISOString();
|
|
19
18
|
let tagged = 0;
|
|
20
19
|
const errors = [];
|
|
21
20
|
try {
|
|
22
|
-
const items =
|
|
23
|
-
SELECT id, source_path, title, summary, tags_json, topics_json
|
|
24
|
-
FROM timeline_events
|
|
25
|
-
WHERE (last_enriched IS NULL OR last_enriched < ?)
|
|
26
|
-
OR (tags_json IS NULL OR tags_json = '[]')
|
|
27
|
-
ORDER BY priority DESC
|
|
28
|
-
LIMIT ?
|
|
29
|
-
`).all(staleDate, config.maxTagsPerRun);
|
|
21
|
+
const items = await getStorage().repositories.sleep.fetchTagCandidates(t, staleDate, config.maxTagsPerRun);
|
|
30
22
|
if (items.length === 0)
|
|
31
23
|
return { count: 0 };
|
|
32
24
|
for (const item of items) {
|
|
@@ -61,11 +53,7 @@ Example response: ["meeting", "pricing", "strategy", "planning"]`, { model: 'hai
|
|
|
61
53
|
...tags.filter((x) => typeof x === 'string').map(s => s.toLowerCase()),
|
|
62
54
|
...existingTopics.map(s => s.toLowerCase()),
|
|
63
55
|
])];
|
|
64
|
-
|
|
65
|
-
UPDATE timeline_events
|
|
66
|
-
SET tags_json = ?, last_enriched = datetime('now')
|
|
67
|
-
WHERE id = ?
|
|
68
|
-
`).run(JSON.stringify(allTags), item.id);
|
|
56
|
+
await getStorage().repositories.sleep.updateEventTags(t, item.id, JSON.stringify(allTags));
|
|
69
57
|
tagged++;
|
|
70
58
|
}
|
|
71
59
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tag.js","sourceRoot":"","sources":["../../../src/sleep/steps/tag.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;AAEzC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"tag.js","sourceRoot":"","sources":["../../../src/sleep/steps/tag.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tier.d.ts","sourceRoot":"","sources":["../../../src/sleep/steps/tier.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;
|
|
1
|
+
{"version":3,"file":"tier.d.ts","sourceRoot":"","sources":["../../../src/sleep/steps/tier.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAEjE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAIhD,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,wBAAsB,WAAW,CAC/B,CAAC,EAAE,aAAa,EAChB,MAAM,EAAE,WAAW,GAClB,OAAO,CAAC,UAAU,CAAC,CA8ErB"}
|
package/dist/sleep/steps/tier.js
CHANGED
|
@@ -8,36 +8,29 @@
|
|
|
8
8
|
* edgeCount). A v1 port had AND across these signals, which dropped most
|
|
9
9
|
* promotions — the port-faithful library carries KAD's OR shape verbatim.
|
|
10
10
|
*/
|
|
11
|
-
import {
|
|
12
|
-
import { ensureSleepSchema } from '../db.js';
|
|
11
|
+
import { getStorage } from '../../storage.js';
|
|
13
12
|
export async function runTierStep(t, config) {
|
|
14
|
-
const
|
|
15
|
-
|
|
13
|
+
const sleepRepo = getStorage().repositories.sleep;
|
|
14
|
+
// Self-sufficiency parity: the original step ensured the sleep schema at entry,
|
|
15
|
+
// so a standalone call (outside runSleepCycleNow) doesn't hit 'no such table'.
|
|
16
|
+
await sleepRepo.ensureSchema(t);
|
|
16
17
|
const now = Date.now();
|
|
17
18
|
const DAY_MS = 24 * 60 * 60 * 1000;
|
|
18
19
|
let changed = 0;
|
|
19
20
|
const errors = [];
|
|
20
21
|
try {
|
|
21
|
-
const items =
|
|
22
|
-
SELECT id, source_path, priority, decay_score, tier, last_accessed, access_count, is_pinned
|
|
23
|
-
FROM timeline_events
|
|
24
|
-
LIMIT ?
|
|
25
|
-
`).all(config.batchSize);
|
|
22
|
+
const items = await sleepRepo.fetchTierCandidates(t, config.batchSize);
|
|
26
23
|
for (const item of items) {
|
|
27
24
|
try {
|
|
28
25
|
if (item.is_pinned) {
|
|
29
26
|
if (item.tier !== 'hot') {
|
|
30
|
-
updateTier(
|
|
27
|
+
await updateTier(t, item.id, 'hot', item.tier, 'pinned');
|
|
31
28
|
changed++;
|
|
32
29
|
}
|
|
33
30
|
continue;
|
|
34
31
|
}
|
|
35
|
-
const edgeData =
|
|
36
|
-
|
|
37
|
-
FROM memory_edges
|
|
38
|
-
WHERE from_path = ? OR to_path = ?
|
|
39
|
-
`).get(item.source_path, item.source_path);
|
|
40
|
-
const relationshipScore = edgeData.totalConfidence;
|
|
32
|
+
const edgeData = await sleepRepo.getEdgeStats(t, item.source_path);
|
|
33
|
+
const relationshipScore = edgeData.total_confidence;
|
|
41
34
|
const edgeCount = edgeData.count;
|
|
42
35
|
const daysSinceAccess = item.last_accessed
|
|
43
36
|
? (now - new Date(item.last_accessed + 'Z').getTime()) / DAY_MS
|
|
@@ -77,7 +70,7 @@ export async function runTierStep(t, config) {
|
|
|
77
70
|
else if (newTier === 'archive') {
|
|
78
71
|
reason = 'low_activity';
|
|
79
72
|
}
|
|
80
|
-
updateTier(
|
|
73
|
+
await updateTier(t, item.id, newTier, (item.tier || 'warm'), reason);
|
|
81
74
|
changed++;
|
|
82
75
|
}
|
|
83
76
|
}
|
|
@@ -92,21 +85,13 @@ export async function runTierStep(t, config) {
|
|
|
92
85
|
}
|
|
93
86
|
return { count: changed, errors: errors.length > 0 ? errors : undefined };
|
|
94
87
|
}
|
|
95
|
-
function updateTier(
|
|
96
|
-
timeline
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
sleep
|
|
100
|
-
|
|
101
|
-
(
|
|
102
|
-
|
|
103
|
-
`).run(itemId.toString(), newTier === 'hot' ? 2 : newTier === 'warm' ? 1 : 0);
|
|
104
|
-
try {
|
|
105
|
-
sleep.prepare(`
|
|
106
|
-
INSERT INTO tier_transitions (item_id, from_tier, to_tier, reason)
|
|
107
|
-
VALUES (?, ?, ?, ?)
|
|
108
|
-
`).run(itemId, oldTier, newTier, reason || 'threshold');
|
|
109
|
-
}
|
|
110
|
-
catch { /* non-critical */ }
|
|
88
|
+
async function updateTier(t, itemId, newTier, oldTier, reason) {
|
|
89
|
+
// Cross-kind, best-effort (decision 2): timeline tier write + sleep queue +
|
|
90
|
+
// sleep transition are separate files; the transition insert is non-critical
|
|
91
|
+
// (impl swallows its error), exactly as the original.
|
|
92
|
+
const sleepRepo = getStorage().repositories.sleep;
|
|
93
|
+
await sleepRepo.updateEventTier(t, itemId, newTier);
|
|
94
|
+
await sleepRepo.enqueueResummarize(t, itemId, newTier === 'hot' ? 2 : newTier === 'warm' ? 1 : 0);
|
|
95
|
+
await sleepRepo.recordTierTransition(t, itemId, oldTier, newTier, reason || 'threshold');
|
|
111
96
|
}
|
|
112
97
|
//# sourceMappingURL=tier.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tier.js","sourceRoot":"","sources":["../../../src/sleep/steps/tier.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;
|
|
1
|
+
{"version":3,"file":"tier.js","sourceRoot":"","sources":["../../../src/sleep/steps/tier.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +1,15 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Sleep checkpoint helpers — port of KAD's sleep/utils/checkpoint.ts.
|
|
3
3
|
* Tracks which step is in progress so we can see where a crashed run died.
|
|
4
|
+
*
|
|
5
|
+
* Storage untangle (U3a): the sleep_runs UPDATE/SELECT live behind the storage
|
|
6
|
+
* seam (repositories.sleep); these helpers keep the JSON shape (timestamp
|
|
7
|
+
* injection on save, parse on read) and pass strings across the seam.
|
|
4
8
|
*/
|
|
5
|
-
import type
|
|
6
|
-
export declare function saveCheckpoint(
|
|
7
|
-
export declare function getLastCheckpoint(
|
|
9
|
+
import type { TenantContext } from '@kybernesis/brain-contracts';
|
|
10
|
+
export declare function saveCheckpoint(t: TenantContext, runId: number, step: string, data?: Record<string, unknown>): Promise<void>;
|
|
11
|
+
export declare function getLastCheckpoint(t: TenantContext, runId: number): Promise<{
|
|
8
12
|
step: string;
|
|
9
13
|
data: Record<string, unknown>;
|
|
10
|
-
} | null
|
|
14
|
+
} | null>;
|
|
11
15
|
//# sourceMappingURL=checkpoint.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checkpoint.d.ts","sourceRoot":"","sources":["../../../src/sleep/utils/checkpoint.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"checkpoint.d.ts","sourceRoot":"","sources":["../../../src/sleep/utils/checkpoint.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAGjE,wBAAsB,cAAc,CAClC,CAAC,EAAE,aAAa,EAChB,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,OAAO,CAAC,IAAI,CAAC,CAGf;AAED,wBAAsB,iBAAiB,CACrC,CAAC,EAAE,aAAa,EAChB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,GAAG,IAAI,CAAC,CAOjE"}
|
|
@@ -1,21 +1,18 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Sleep checkpoint helpers — port of KAD's sleep/utils/checkpoint.ts.
|
|
3
3
|
* Tracks which step is in progress so we can see where a crashed run died.
|
|
4
|
+
*
|
|
5
|
+
* Storage untangle (U3a): the sleep_runs UPDATE/SELECT live behind the storage
|
|
6
|
+
* seam (repositories.sleep); these helpers keep the JSON shape (timestamp
|
|
7
|
+
* injection on save, parse on read) and pass strings across the seam.
|
|
4
8
|
*/
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
checkpoint_data = ?
|
|
10
|
-
WHERE id = ?
|
|
11
|
-
`).run(step, JSON.stringify({ timestamp: new Date().toISOString(), ...data }), runId);
|
|
9
|
+
import { getStorage } from '../../storage.js';
|
|
10
|
+
export async function saveCheckpoint(t, runId, step, data) {
|
|
11
|
+
const dataJson = JSON.stringify({ timestamp: new Date().toISOString(), ...data });
|
|
12
|
+
await getStorage().repositories.sleep.saveCheckpoint(t, runId, step, dataJson);
|
|
12
13
|
}
|
|
13
|
-
export function getLastCheckpoint(
|
|
14
|
-
const row =
|
|
15
|
-
SELECT checkpoint_step, checkpoint_data
|
|
16
|
-
FROM sleep_runs
|
|
17
|
-
WHERE id = ?
|
|
18
|
-
`).get(runId);
|
|
14
|
+
export async function getLastCheckpoint(t, runId) {
|
|
15
|
+
const row = await getStorage().repositories.sleep.getLastCheckpoint(t, runId);
|
|
19
16
|
if (!row || !row.checkpoint_step)
|
|
20
17
|
return null;
|
|
21
18
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checkpoint.js","sourceRoot":"","sources":["../../../src/sleep/utils/checkpoint.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"checkpoint.js","sourceRoot":"","sources":["../../../src/sleep/utils/checkpoint.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,CAAgB,EAChB,KAAa,EACb,IAAY,EACZ,IAA8B;IAE9B,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;IAClF,MAAM,UAAU,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;AACjF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,CAAgB,EAChB,KAAa;IAEb,MAAM,GAAG,GAAG,MAAM,UAAU,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IAC9E,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,eAAe;QAAE,OAAO,IAAI,CAAC;IAC9C,OAAO;QACL,IAAI,EAAE,GAAG,CAAC,eAAe;QACzB,IAAI,EAAE,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,EAAE;KACjE,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Storage seam — the swappable DI point for brain storage (Stage 1).
|
|
3
|
+
*
|
|
4
|
+
* Mirrors the LLM/embedding seam (`setLLMProvider` in claude-call.ts), with ONE
|
|
5
|
+
* deliberate difference: storage is load-bearing, so `getStorage()` NEVER returns
|
|
6
|
+
* null — it auto-defaults to the bundled SQLite provider. This is what lets
|
|
7
|
+
* existing consumers (KAD, KBDE, Arcana) adopt the release by bumping a version
|
|
8
|
+
* with ZERO code changes: they never wired storage before, and they still don't
|
|
9
|
+
* have to. A consumer that wants a different backend calls `setStorageProvider`
|
|
10
|
+
* once at startup (Stage 3, libsql).
|
|
11
|
+
*
|
|
12
|
+
* setStorageProvider(createLibsqlStorageProvider(cfg)); // Stage 3, opt-in
|
|
13
|
+
* getStorage(); // always resolves
|
|
14
|
+
* resetStorageProvider(); // tests / afterEach
|
|
15
|
+
*/
|
|
16
|
+
import type { StorageProvider } from '@kybernesis/brain-contracts';
|
|
17
|
+
/** Override the active storage backend (e.g. libsql in Stage 3). */
|
|
18
|
+
export declare function setStorageProvider(p: StorageProvider): void;
|
|
19
|
+
/** Clear the override; the next `getStorage()` re-defaults to SQLite. */
|
|
20
|
+
export declare function resetStorageProvider(): void;
|
|
21
|
+
/** True when an explicit provider has been wired (vs the SQLite auto-default). */
|
|
22
|
+
export declare function storageProviderIsExplicit(): boolean;
|
|
23
|
+
/**
|
|
24
|
+
* The active storage provider. Load-bearing: never null. Falls back to the
|
|
25
|
+
* bundled SQLite provider so brain-core works with zero consumer wiring.
|
|
26
|
+
*/
|
|
27
|
+
export declare function getStorage(): StorageProvider;
|
|
28
|
+
//# sourceMappingURL=storage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAKnE,oEAAoE;AACpE,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,eAAe,GAAG,IAAI,CAE3D;AAED,yEAAyE;AACzE,wBAAgB,oBAAoB,IAAI,IAAI,CAE3C;AAED,kFAAkF;AAClF,wBAAgB,yBAAyB,IAAI,OAAO,CAEnD;AAED;;;GAGG;AACH,wBAAgB,UAAU,IAAI,eAAe,CAK5C"}
|
package/dist/storage.js
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Storage seam — the swappable DI point for brain storage (Stage 1).
|
|
3
|
+
*
|
|
4
|
+
* Mirrors the LLM/embedding seam (`setLLMProvider` in claude-call.ts), with ONE
|
|
5
|
+
* deliberate difference: storage is load-bearing, so `getStorage()` NEVER returns
|
|
6
|
+
* null — it auto-defaults to the bundled SQLite provider. This is what lets
|
|
7
|
+
* existing consumers (KAD, KBDE, Arcana) adopt the release by bumping a version
|
|
8
|
+
* with ZERO code changes: they never wired storage before, and they still don't
|
|
9
|
+
* have to. A consumer that wants a different backend calls `setStorageProvider`
|
|
10
|
+
* once at startup (Stage 3, libsql).
|
|
11
|
+
*
|
|
12
|
+
* setStorageProvider(createLibsqlStorageProvider(cfg)); // Stage 3, opt-in
|
|
13
|
+
* getStorage(); // always resolves
|
|
14
|
+
* resetStorageProvider(); // tests / afterEach
|
|
15
|
+
*/
|
|
16
|
+
import { createSqliteStorageProvider } from '@kybernesis/brain-storage-sqlite';
|
|
17
|
+
let _storage = null;
|
|
18
|
+
/** Override the active storage backend (e.g. libsql in Stage 3). */
|
|
19
|
+
export function setStorageProvider(p) {
|
|
20
|
+
_storage = p;
|
|
21
|
+
}
|
|
22
|
+
/** Clear the override; the next `getStorage()` re-defaults to SQLite. */
|
|
23
|
+
export function resetStorageProvider() {
|
|
24
|
+
_storage = null;
|
|
25
|
+
}
|
|
26
|
+
/** True when an explicit provider has been wired (vs the SQLite auto-default). */
|
|
27
|
+
export function storageProviderIsExplicit() {
|
|
28
|
+
return _storage !== null;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* The active storage provider. Load-bearing: never null. Falls back to the
|
|
32
|
+
* bundled SQLite provider so brain-core works with zero consumer wiring.
|
|
33
|
+
*/
|
|
34
|
+
export function getStorage() {
|
|
35
|
+
if (!_storage) {
|
|
36
|
+
_storage = createSqliteStorageProvider();
|
|
37
|
+
}
|
|
38
|
+
return _storage;
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=storage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage.js","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,OAAO,EAAE,2BAA2B,EAAE,MAAM,kCAAkC,CAAC;AAE/E,IAAI,QAAQ,GAA2B,IAAI,CAAC;AAE5C,oEAAoE;AACpE,MAAM,UAAU,kBAAkB,CAAC,CAAkB;IACnD,QAAQ,GAAG,CAAC,CAAC;AACf,CAAC;AAED,yEAAyE;AACzE,MAAM,UAAU,oBAAoB;IAClC,QAAQ,GAAG,IAAI,CAAC;AAClB,CAAC;AAED,kFAAkF;AAClF,MAAM,UAAU,yBAAyB;IACvC,OAAO,QAAQ,KAAK,IAAI,CAAC;AAC3B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,UAAU;IACxB,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,QAAQ,GAAG,2BAA2B,EAAE,CAAC;IAC3C,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC"}
|
package/dist/timeline.d.ts
CHANGED
|
@@ -1,5 +1,12 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Timeline events — public API. Storage now lives behind the seam
|
|
3
|
+
* (getStorage().repositories.timeline); these are thin, signature-stable delegators plus
|
|
4
|
+
* the higher-level orchestrators (conversation/idea/activity helpers) that
|
|
5
|
+
* compose the store methods (Stage 1, G2).
|
|
6
|
+
*/
|
|
7
|
+
import type { TenantContext, EventType, TimelineEvent, TimelineEventInput } from '@kybernesis/brain-contracts';
|
|
8
|
+
export type { TimelineQuery, TimelineStats } from '@kybernesis/brain-contracts';
|
|
9
|
+
/** Clear the SQLite schema-init cache (test/utility). */
|
|
3
10
|
export declare function resetTimelineDb(t?: TenantContext): void;
|
|
4
11
|
export declare function addToTimeline(t: TenantContext, event: TimelineEventInput): Promise<number>;
|
|
5
12
|
export declare function removeFromTimeline(t: TenantContext, sourcePath: string): Promise<boolean>;
|
|
@@ -7,17 +14,7 @@ export declare function updateTimelineEvent(t: TenantContext, id: number, update
|
|
|
7
14
|
export declare function deleteTimelineEventById(t: TenantContext, id: number): Promise<boolean>;
|
|
8
15
|
export declare function getEventById(t: TenantContext, id: number): Promise<TimelineEvent | null>;
|
|
9
16
|
export declare function getEventByPath(t: TenantContext, sourcePath: string): Promise<TimelineEvent | null>;
|
|
10
|
-
export
|
|
11
|
-
start?: string;
|
|
12
|
-
end?: string;
|
|
13
|
-
type?: EventType;
|
|
14
|
-
search?: string;
|
|
15
|
-
entities?: string[];
|
|
16
|
-
topics?: string[];
|
|
17
|
-
limit?: number;
|
|
18
|
-
offset?: number;
|
|
19
|
-
}
|
|
20
|
-
export declare function queryTimeline(t: TenantContext, query?: TimelineQuery): Promise<TimelineEvent[]>;
|
|
17
|
+
export declare function queryTimeline(t: TenantContext, query?: import('@kybernesis/brain-contracts').TimelineQuery): Promise<TimelineEvent[]>;
|
|
21
18
|
export declare function getRecentActivity(t: TenantContext, limit?: number): Promise<TimelineEvent[]>;
|
|
22
19
|
export declare function getActivityOnDate(t: TenantContext, date: string): Promise<TimelineEvent[]>;
|
|
23
20
|
export declare function getActivityInRange(t: TenantContext, start: string, end: string): Promise<TimelineEvent[]>;
|
|
@@ -30,15 +27,7 @@ export declare function findRecentDuplicate(t: TenantContext, title: string, wit
|
|
|
30
27
|
title: string;
|
|
31
28
|
} | null>;
|
|
32
29
|
export declare function incrementTimelineEventCount(t: TenantContext, eventId: number): Promise<void>;
|
|
33
|
-
export
|
|
34
|
-
totalEvents: number;
|
|
35
|
-
byType: Record<EventType, number>;
|
|
36
|
-
dateRange: {
|
|
37
|
-
earliest: string | null;
|
|
38
|
-
latest: string | null;
|
|
39
|
-
};
|
|
40
|
-
}
|
|
41
|
-
export declare function getTimelineStats(t: TenantContext): Promise<TimelineStats>;
|
|
30
|
+
export declare function getTimelineStats(t: TenantContext): Promise<import('@kybernesis/brain-contracts').TimelineStats>;
|
|
42
31
|
export declare function addConversationToTimeline(t: TenantContext, _conversationId: string, sourcePath: string, startedAt: string, finishedAt: string | undefined, title: string, summary: string, entities: string[], topics: string[], arpMetadata?: {
|
|
43
32
|
project_id?: string;
|
|
44
33
|
tags?: string[];
|
package/dist/timeline.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"timeline.d.ts","sourceRoot":"","sources":["../src/timeline.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"timeline.d.ts","sourceRoot":"","sources":["../src/timeline.ts"],"names":[],"mappings":"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"}
|