@theihtisham/agent-shadow-brain 6.0.0 → 6.0.2
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/README.md +107 -7
- package/dist/brain/brain-3d.d.ts +79 -0
- package/dist/brain/brain-3d.d.ts.map +1 -0
- package/dist/brain/brain-3d.js +468 -0
- package/dist/brain/brain-3d.js.map +1 -0
- package/dist/brain/brain-active-learner.d.ts +74 -0
- package/dist/brain/brain-active-learner.d.ts.map +1 -0
- package/dist/brain/brain-active-learner.js +425 -0
- package/dist/brain/brain-active-learner.js.map +1 -0
- package/dist/brain/brain-ascii.d.ts +32 -0
- package/dist/brain/brain-ascii.d.ts.map +1 -0
- package/dist/brain/brain-ascii.js +402 -0
- package/dist/brain/brain-ascii.js.map +1 -0
- package/dist/brain/brain-cinema.d.ts +45 -0
- package/dist/brain/brain-cinema.d.ts.map +1 -0
- package/dist/brain/brain-cinema.js +393 -0
- package/dist/brain/brain-cinema.js.map +1 -0
- package/dist/brain/brain-coach.d.ts +45 -0
- package/dist/brain/brain-coach.d.ts.map +1 -0
- package/dist/brain/brain-coach.js +383 -0
- package/dist/brain/brain-coach.js.map +1 -0
- package/dist/brain/brain-consolidator.d.ts +56 -0
- package/dist/brain/brain-consolidator.d.ts.map +1 -0
- package/dist/brain/brain-consolidator.js +386 -0
- package/dist/brain/brain-consolidator.js.map +1 -0
- package/dist/brain/brain-contradictions.d.ts +57 -0
- package/dist/brain/brain-contradictions.d.ts.map +1 -0
- package/dist/brain/brain-contradictions.js +443 -0
- package/dist/brain/brain-contradictions.js.map +1 -0
- package/dist/brain/brain-diff.d.ts +61 -0
- package/dist/brain/brain-diff.d.ts.map +1 -0
- package/dist/brain/brain-diff.js +439 -0
- package/dist/brain/brain-diff.js.map +1 -0
- package/dist/brain/brain-dna.d.ts +59 -0
- package/dist/brain/brain-dna.d.ts.map +1 -0
- package/dist/brain/brain-dna.js +336 -0
- package/dist/brain/brain-dna.js.map +1 -0
- package/dist/brain/brain-doppelganger.d.ts +32 -0
- package/dist/brain/brain-doppelganger.d.ts.map +1 -0
- package/dist/brain/brain-doppelganger.js +417 -0
- package/dist/brain/brain-doppelganger.js.map +1 -0
- package/dist/brain/brain-graph-walker.d.ts +54 -0
- package/dist/brain/brain-graph-walker.d.ts.map +1 -0
- package/dist/brain/brain-graph-walker.js +412 -0
- package/dist/brain/brain-graph-walker.js.map +1 -0
- package/dist/brain/brain-holiday-card.d.ts +50 -0
- package/dist/brain/brain-holiday-card.d.ts.map +1 -0
- package/dist/brain/brain-holiday-card.js +432 -0
- package/dist/brain/brain-holiday-card.js.map +1 -0
- package/dist/brain/brain-memes.d.ts +44 -0
- package/dist/brain/brain-memes.d.ts.map +1 -0
- package/dist/brain/brain-memes.js +438 -0
- package/dist/brain/brain-memes.js.map +1 -0
- package/dist/brain/brain-memory-tiers.d.ts +67 -0
- package/dist/brain/brain-memory-tiers.d.ts.map +1 -0
- package/dist/brain/brain-memory-tiers.js +292 -0
- package/dist/brain/brain-memory-tiers.js.map +1 -0
- package/dist/brain/brain-notebook.d.ts +68 -0
- package/dist/brain/brain-notebook.d.ts.map +1 -0
- package/dist/brain/brain-notebook.js +379 -0
- package/dist/brain/brain-notebook.js.map +1 -0
- package/dist/brain/brain-quantize.d.ts +62 -0
- package/dist/brain/brain-quantize.d.ts.map +1 -0
- package/dist/brain/brain-quantize.js +346 -0
- package/dist/brain/brain-quantize.js.map +1 -0
- package/dist/brain/brain-query-expander.d.ts +31 -0
- package/dist/brain/brain-query-expander.d.ts.map +1 -0
- package/dist/brain/brain-query-expander.js +417 -0
- package/dist/brain/brain-query-expander.js.map +1 -0
- package/dist/brain/brain-quest.d.ts +58 -0
- package/dist/brain/brain-quest.d.ts.map +1 -0
- package/dist/brain/brain-quest.js +541 -0
- package/dist/brain/brain-quest.js.map +1 -0
- package/dist/brain/brain-recall-cache.d.ts +73 -0
- package/dist/brain/brain-recall-cache.d.ts.map +1 -0
- package/dist/brain/brain-recall-cache.js +444 -0
- package/dist/brain/brain-recall-cache.js.map +1 -0
- package/dist/brain/brain-reflex.d.ts +55 -0
- package/dist/brain/brain-reflex.d.ts.map +1 -0
- package/dist/brain/brain-reflex.js +364 -0
- package/dist/brain/brain-reflex.js.map +1 -0
- package/dist/brain/brain-replay.d.ts +74 -0
- package/dist/brain/brain-replay.d.ts.map +1 -0
- package/dist/brain/brain-replay.js +336 -0
- package/dist/brain/brain-replay.js.map +1 -0
- package/dist/brain/brain-rerank.d.ts +39 -0
- package/dist/brain/brain-rerank.d.ts.map +1 -0
- package/dist/brain/brain-rerank.js +216 -0
- package/dist/brain/brain-rerank.js.map +1 -0
- package/dist/brain/brain-roast.d.ts +44 -0
- package/dist/brain/brain-roast.d.ts.map +1 -0
- package/dist/brain/brain-roast.js +566 -0
- package/dist/brain/brain-roast.js.map +1 -0
- package/dist/brain/brain-sonification.d.ts +57 -0
- package/dist/brain/brain-sonification.d.ts.map +1 -0
- package/dist/brain/brain-sonification.js +286 -0
- package/dist/brain/brain-sonification.js.map +1 -0
- package/dist/brain/brain-tarot.d.ts +49 -0
- package/dist/brain/brain-tarot.d.ts.map +1 -0
- package/dist/brain/brain-tarot.js +634 -0
- package/dist/brain/brain-tarot.js.map +1 -0
- package/dist/brain/brain-time-capsule.d.ts +80 -0
- package/dist/brain/brain-time-capsule.d.ts.map +1 -0
- package/dist/brain/brain-time-capsule.js +289 -0
- package/dist/brain/brain-time-capsule.js.map +1 -0
- package/dist/brain/brain-trophies.d.ts +60 -0
- package/dist/brain/brain-trophies.d.ts.map +1 -0
- package/dist/brain/brain-trophies.js +431 -0
- package/dist/brain/brain-trophies.js.map +1 -0
- package/dist/brain/brain-working-memory.d.ts +78 -0
- package/dist/brain/brain-working-memory.d.ts.map +1 -0
- package/dist/brain/brain-working-memory.js +367 -0
- package/dist/brain/brain-working-memory.js.map +1 -0
- package/dist/brain/confidence-gate.d.ts +69 -0
- package/dist/brain/confidence-gate.d.ts.map +1 -0
- package/dist/brain/confidence-gate.js +244 -0
- package/dist/brain/confidence-gate.js.map +1 -0
- package/dist/brain/constitution.d.ts +59 -0
- package/dist/brain/constitution.d.ts.map +1 -0
- package/dist/brain/constitution.js +315 -0
- package/dist/brain/constitution.js.map +1 -0
- package/dist/brain/embeddings-v2.d.ts +58 -0
- package/dist/brain/embeddings-v2.d.ts.map +1 -0
- package/dist/brain/embeddings-v2.js +344 -0
- package/dist/brain/embeddings-v2.js.map +1 -0
- package/dist/brain/hive-voice.d.ts +71 -0
- package/dist/brain/hive-voice.d.ts.map +1 -0
- package/dist/brain/hive-voice.js +352 -0
- package/dist/brain/hive-voice.js.map +1 -0
- package/dist/brain/markdown-export.d.ts +48 -0
- package/dist/brain/markdown-export.d.ts.map +1 -0
- package/dist/brain/markdown-export.js +382 -0
- package/dist/brain/markdown-export.js.map +1 -0
- package/dist/brain/multimodal-vision.d.ts +38 -0
- package/dist/brain/multimodal-vision.d.ts.map +1 -0
- package/dist/brain/multimodal-vision.js +257 -0
- package/dist/brain/multimodal-vision.js.map +1 -0
- package/dist/brain/otel-lite.d.ts +71 -0
- package/dist/brain/otel-lite.d.ts.map +1 -0
- package/dist/brain/otel-lite.js +232 -0
- package/dist/brain/otel-lite.js.map +1 -0
- package/dist/cli.js +881 -2
- package/dist/cli.js.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,292 @@
|
|
|
1
|
+
// src/brain/brain-memory-tiers.ts — Episodic vs semantic memory split
|
|
2
|
+
// v6.0.2 — Hive Mind Edition
|
|
3
|
+
//
|
|
4
|
+
// Human brains separate episodic memory (what happened, when, by whom) from
|
|
5
|
+
// semantic memory (abstract facts distilled from many episodes). Mixing them
|
|
6
|
+
// poisons recall — every "I solved this last Tuesday" buries the underlying
|
|
7
|
+
// pattern. This module enforces the split with two append-only stores and a
|
|
8
|
+
// promotion path from episodic → semantic when the same fact recurs.
|
|
9
|
+
//
|
|
10
|
+
// Storage layout (under ~/.shadow-brain/memory/):
|
|
11
|
+
// episodic/<project>.jsonl — raw events, daily-rotated
|
|
12
|
+
// episodic/<project>-YYYY-MM-DD.jsonl — rotated archives
|
|
13
|
+
// semantic/<project>.jsonl — curated, mergeable facts
|
|
14
|
+
//
|
|
15
|
+
// Promotion criteria (ALL must hold):
|
|
16
|
+
// 1. accessCount >= 3 — recalled repeatedly
|
|
17
|
+
// 2. importance >= 0.5 — non-trivial
|
|
18
|
+
// 3. linked to >= 2 other memories — connected to the graph
|
|
19
|
+
// 4. lastAccessed within 30 days — still warm
|
|
20
|
+
//
|
|
21
|
+
// New memories always land in episodic. Promotion is explicit (callable) or
|
|
22
|
+
// happens lazily during read() when criteria are met.
|
|
23
|
+
//
|
|
24
|
+
// Exposed: BrainMemoryTiers, getBrainMemoryTiers(), resetBrainMemoryTiersForTests()
|
|
25
|
+
import * as fs from 'fs';
|
|
26
|
+
import * as path from 'path';
|
|
27
|
+
import * as os from 'os';
|
|
28
|
+
const STORE_DIR = path.join(os.homedir(), '.shadow-brain', 'memory');
|
|
29
|
+
const EPISODIC_DIR = path.join(STORE_DIR, 'episodic');
|
|
30
|
+
const SEMANTIC_DIR = path.join(STORE_DIR, 'semantic');
|
|
31
|
+
const DEFAULT_PROJECT = 'default';
|
|
32
|
+
const PROMOTE_MIN_ACCESS = 3;
|
|
33
|
+
const PROMOTE_MIN_IMPORTANCE = 0.5;
|
|
34
|
+
const PROMOTE_MIN_LINKS = 2;
|
|
35
|
+
const PROMOTE_MAX_AGE_DAYS = 30;
|
|
36
|
+
const MS_PER_DAY = 24 * 60 * 60 * 1000;
|
|
37
|
+
export class BrainMemoryTiers {
|
|
38
|
+
constructor() {
|
|
39
|
+
this.initialized = false;
|
|
40
|
+
}
|
|
41
|
+
async init() {
|
|
42
|
+
if (this.initialized)
|
|
43
|
+
return;
|
|
44
|
+
fs.mkdirSync(EPISODIC_DIR, { recursive: true });
|
|
45
|
+
fs.mkdirSync(SEMANTIC_DIR, { recursive: true });
|
|
46
|
+
this.initialized = true;
|
|
47
|
+
}
|
|
48
|
+
/** Write a new memory. Defaults to episodic; module picks tier if not forced. */
|
|
49
|
+
async write(memory) {
|
|
50
|
+
await this.init();
|
|
51
|
+
const project = sanitizeProject(memory.project);
|
|
52
|
+
const now = new Date().toISOString();
|
|
53
|
+
const entry = {
|
|
54
|
+
id: memory.id ?? newId('mem'),
|
|
55
|
+
tier: memory.tier ?? 'episodic',
|
|
56
|
+
content: (memory.content || '').slice(0, 8000),
|
|
57
|
+
project,
|
|
58
|
+
createdAt: now,
|
|
59
|
+
lastAccessed: now,
|
|
60
|
+
accessCount: 0,
|
|
61
|
+
importance: clamp01(memory.importance ?? 0.5),
|
|
62
|
+
sourceAgent: memory.sourceAgent || 'unknown',
|
|
63
|
+
entityRefs: memory.entityRefs ?? [],
|
|
64
|
+
embedding: memory.embedding,
|
|
65
|
+
relatedTo: [],
|
|
66
|
+
};
|
|
67
|
+
this.rotateIfNeeded(project);
|
|
68
|
+
this.appendEntry(entry);
|
|
69
|
+
return entry;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Promote an episodic memory to semantic. If criteria are not met, throws
|
|
73
|
+
* unless the caller already forced it (re-issued with tier='semantic').
|
|
74
|
+
*/
|
|
75
|
+
async promote(memoryId) {
|
|
76
|
+
await this.init();
|
|
77
|
+
const existing = this.findById(memoryId);
|
|
78
|
+
if (!existing)
|
|
79
|
+
throw new Error(`memory ${memoryId} not found`);
|
|
80
|
+
if (existing.tier === 'semantic')
|
|
81
|
+
return existing;
|
|
82
|
+
if (!this.meetsPromotionCriteria(existing)) {
|
|
83
|
+
throw new Error(`memory ${memoryId} does not meet promotion criteria`);
|
|
84
|
+
}
|
|
85
|
+
const promoted = {
|
|
86
|
+
...existing,
|
|
87
|
+
id: newId('sem'),
|
|
88
|
+
tier: 'semantic',
|
|
89
|
+
derivedFromMemoryIds: [...(existing.derivedFromMemoryIds ?? []), existing.id],
|
|
90
|
+
lastAccessed: new Date().toISOString(),
|
|
91
|
+
};
|
|
92
|
+
this.appendEntry(promoted);
|
|
93
|
+
return promoted;
|
|
94
|
+
}
|
|
95
|
+
/** Read memories matching the options. Lazily promotes warm episodic on access. */
|
|
96
|
+
async read(opts = {}) {
|
|
97
|
+
await this.init();
|
|
98
|
+
const project = sanitizeProject(opts.project);
|
|
99
|
+
const wantTier = opts.tier ?? 'all';
|
|
100
|
+
const limit = opts.limit ?? 50;
|
|
101
|
+
const pool = [];
|
|
102
|
+
if (wantTier === 'episodic' || wantTier === 'all') {
|
|
103
|
+
pool.push(...this.loadTier('episodic', project));
|
|
104
|
+
}
|
|
105
|
+
if (wantTier === 'semantic' || wantTier === 'all') {
|
|
106
|
+
pool.push(...this.loadTier('semantic', project));
|
|
107
|
+
}
|
|
108
|
+
let results = pool;
|
|
109
|
+
if (opts.query) {
|
|
110
|
+
const q = opts.query.toLowerCase();
|
|
111
|
+
results = pool.filter(m => m.content.toLowerCase().includes(q));
|
|
112
|
+
}
|
|
113
|
+
// Mark access on the returned slice. (Cheap rewrite of last-accessed; we
|
|
114
|
+
// do NOT persist accessCount mutations here because the store is append-
|
|
115
|
+
// only — instead, we touch a sidecar.) For now, in-process mutation.
|
|
116
|
+
const now = new Date().toISOString();
|
|
117
|
+
const touched = results.slice(0, limit).map(m => ({
|
|
118
|
+
...m,
|
|
119
|
+
lastAccessed: now,
|
|
120
|
+
accessCount: m.accessCount + 1,
|
|
121
|
+
}));
|
|
122
|
+
// Lazy promotion: if an episodic entry now meets criteria, queue a write.
|
|
123
|
+
for (const m of touched) {
|
|
124
|
+
if (m.tier === 'episodic' && this.meetsPromotionCriteria(m)) {
|
|
125
|
+
try {
|
|
126
|
+
await this.promote(m.id);
|
|
127
|
+
}
|
|
128
|
+
catch { /* skip */ }
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
// Sort by importance desc, then recency desc
|
|
132
|
+
touched.sort((a, b) => (b.importance - a.importance) || b.createdAt.localeCompare(a.createdAt));
|
|
133
|
+
return touched;
|
|
134
|
+
}
|
|
135
|
+
stats(project) {
|
|
136
|
+
if (!this.initialized) {
|
|
137
|
+
// best-effort sync init for stats
|
|
138
|
+
try {
|
|
139
|
+
fs.mkdirSync(EPISODIC_DIR, { recursive: true });
|
|
140
|
+
fs.mkdirSync(SEMANTIC_DIR, { recursive: true });
|
|
141
|
+
}
|
|
142
|
+
catch { /* skip */ }
|
|
143
|
+
}
|
|
144
|
+
const proj = sanitizeProject(project);
|
|
145
|
+
const ep = this.loadTier('episodic', proj);
|
|
146
|
+
const sem = this.loadTier('semantic', proj);
|
|
147
|
+
const epStats = bucket(ep);
|
|
148
|
+
const semStats = bucket(sem);
|
|
149
|
+
const totalEpisodic = ep.length + sem.length;
|
|
150
|
+
const promotionRate = totalEpisodic > 0 ? +(sem.length / totalEpisodic).toFixed(3) : 0;
|
|
151
|
+
return { episodic: epStats, semantic: semStats, promotionRate };
|
|
152
|
+
}
|
|
153
|
+
// ── Internals ─────────────────────────────────────────────────────────
|
|
154
|
+
meetsPromotionCriteria(m) {
|
|
155
|
+
if (m.accessCount < PROMOTE_MIN_ACCESS)
|
|
156
|
+
return false;
|
|
157
|
+
if (m.importance < PROMOTE_MIN_IMPORTANCE)
|
|
158
|
+
return false;
|
|
159
|
+
const linkCount = (m.entityRefs?.length ?? 0) + (m.relatedTo?.length ?? 0);
|
|
160
|
+
if (linkCount < PROMOTE_MIN_LINKS)
|
|
161
|
+
return false;
|
|
162
|
+
const ageMs = Date.now() - Date.parse(m.lastAccessed);
|
|
163
|
+
if (!Number.isFinite(ageMs) || ageMs > PROMOTE_MAX_AGE_DAYS * MS_PER_DAY)
|
|
164
|
+
return false;
|
|
165
|
+
return true;
|
|
166
|
+
}
|
|
167
|
+
findById(id) {
|
|
168
|
+
for (const tier of ['episodic', 'semantic']) {
|
|
169
|
+
const dir = tier === 'episodic' ? EPISODIC_DIR : SEMANTIC_DIR;
|
|
170
|
+
if (!fs.existsSync(dir))
|
|
171
|
+
continue;
|
|
172
|
+
for (const file of fs.readdirSync(dir)) {
|
|
173
|
+
if (!file.endsWith('.jsonl'))
|
|
174
|
+
continue;
|
|
175
|
+
try {
|
|
176
|
+
const lines = fs.readFileSync(path.join(dir, file), 'utf-8').split('\n');
|
|
177
|
+
for (const line of lines) {
|
|
178
|
+
if (!line.trim())
|
|
179
|
+
continue;
|
|
180
|
+
try {
|
|
181
|
+
const obj = JSON.parse(line);
|
|
182
|
+
if (obj.id === id)
|
|
183
|
+
return obj;
|
|
184
|
+
}
|
|
185
|
+
catch { /* skip line */ }
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
catch { /* skip file */ }
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
return null;
|
|
192
|
+
}
|
|
193
|
+
loadTier(tier, project) {
|
|
194
|
+
const dir = tier === 'episodic' ? EPISODIC_DIR : SEMANTIC_DIR;
|
|
195
|
+
if (!fs.existsSync(dir))
|
|
196
|
+
return [];
|
|
197
|
+
const out = [];
|
|
198
|
+
const prefix = `${project}`;
|
|
199
|
+
for (const file of fs.readdirSync(dir)) {
|
|
200
|
+
if (!file.endsWith('.jsonl'))
|
|
201
|
+
continue;
|
|
202
|
+
if (!file.startsWith(prefix))
|
|
203
|
+
continue;
|
|
204
|
+
try {
|
|
205
|
+
const lines = fs.readFileSync(path.join(dir, file), 'utf-8').split('\n');
|
|
206
|
+
for (const line of lines) {
|
|
207
|
+
if (!line.trim())
|
|
208
|
+
continue;
|
|
209
|
+
try {
|
|
210
|
+
const obj = JSON.parse(line);
|
|
211
|
+
if (obj.project !== project)
|
|
212
|
+
continue;
|
|
213
|
+
if (obj.tier !== tier)
|
|
214
|
+
continue;
|
|
215
|
+
out.push(obj);
|
|
216
|
+
}
|
|
217
|
+
catch { /* skip bad line */ }
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
catch { /* skip bad file */ }
|
|
221
|
+
}
|
|
222
|
+
return out;
|
|
223
|
+
}
|
|
224
|
+
appendEntry(entry) {
|
|
225
|
+
const dir = entry.tier === 'episodic' ? EPISODIC_DIR : SEMANTIC_DIR;
|
|
226
|
+
const file = path.join(dir, `${entry.project}.jsonl`);
|
|
227
|
+
try {
|
|
228
|
+
fs.appendFileSync(file, JSON.stringify(entry) + '\n');
|
|
229
|
+
}
|
|
230
|
+
catch { /* non-fatal */ }
|
|
231
|
+
}
|
|
232
|
+
rotateIfNeeded(project) {
|
|
233
|
+
// Daily rotation: if today's episodic file exceeds 2MB, archive it.
|
|
234
|
+
const file = path.join(EPISODIC_DIR, `${project}.jsonl`);
|
|
235
|
+
if (!fs.existsSync(file))
|
|
236
|
+
return;
|
|
237
|
+
try {
|
|
238
|
+
const sz = fs.statSync(file).size;
|
|
239
|
+
if (sz < 2 * 1024 * 1024)
|
|
240
|
+
return;
|
|
241
|
+
const stamp = new Date().toISOString().slice(0, 10);
|
|
242
|
+
const dest = path.join(EPISODIC_DIR, `${project}-${stamp}.jsonl`);
|
|
243
|
+
if (!fs.existsSync(dest))
|
|
244
|
+
fs.renameSync(file, dest);
|
|
245
|
+
}
|
|
246
|
+
catch { /* skip */ }
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
function sanitizeProject(p) {
|
|
250
|
+
if (!p)
|
|
251
|
+
return DEFAULT_PROJECT;
|
|
252
|
+
return p.replace(/[^a-zA-Z0-9_-]/g, '_').slice(0, 80) || DEFAULT_PROJECT;
|
|
253
|
+
}
|
|
254
|
+
function clamp01(n) {
|
|
255
|
+
if (!Number.isFinite(n))
|
|
256
|
+
return 0;
|
|
257
|
+
return Math.max(0, Math.min(1, n));
|
|
258
|
+
}
|
|
259
|
+
function newId(prefix) {
|
|
260
|
+
const r = Math.random().toString(36).slice(2, 10);
|
|
261
|
+
const t = Date.now().toString(36);
|
|
262
|
+
return `${prefix}_${t}_${r}`;
|
|
263
|
+
}
|
|
264
|
+
function bucket(entries) {
|
|
265
|
+
if (entries.length === 0) {
|
|
266
|
+
return { count: 0, oldestAt: null, newestAt: null, avgImportance: 0 };
|
|
267
|
+
}
|
|
268
|
+
let oldest = entries[0].createdAt;
|
|
269
|
+
let newest = entries[0].createdAt;
|
|
270
|
+
let impSum = 0;
|
|
271
|
+
for (const e of entries) {
|
|
272
|
+
if (e.createdAt < oldest)
|
|
273
|
+
oldest = e.createdAt;
|
|
274
|
+
if (e.createdAt > newest)
|
|
275
|
+
newest = e.createdAt;
|
|
276
|
+
impSum += e.importance;
|
|
277
|
+
}
|
|
278
|
+
return {
|
|
279
|
+
count: entries.length,
|
|
280
|
+
oldestAt: oldest,
|
|
281
|
+
newestAt: newest,
|
|
282
|
+
avgImportance: +(impSum / entries.length).toFixed(3),
|
|
283
|
+
};
|
|
284
|
+
}
|
|
285
|
+
let _instance = null;
|
|
286
|
+
export function getBrainMemoryTiers() {
|
|
287
|
+
if (!_instance)
|
|
288
|
+
_instance = new BrainMemoryTiers();
|
|
289
|
+
return _instance;
|
|
290
|
+
}
|
|
291
|
+
export function resetBrainMemoryTiersForTests() { _instance = null; }
|
|
292
|
+
//# sourceMappingURL=brain-memory-tiers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"brain-memory-tiers.js","sourceRoot":"","sources":["../../src/brain/brain-memory-tiers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
export type QueryType = 'recall' | 'search' | 'dna' | 'replay' | 'archetype' | 'stats';
|
|
2
|
+
export type Cell = {
|
|
3
|
+
kind: 'markdown';
|
|
4
|
+
source: string;
|
|
5
|
+
} | {
|
|
6
|
+
kind: 'query';
|
|
7
|
+
queryType: QueryType;
|
|
8
|
+
source: string;
|
|
9
|
+
lastResult?: string;
|
|
10
|
+
lastRun?: string;
|
|
11
|
+
} | {
|
|
12
|
+
kind: 'code';
|
|
13
|
+
language: 'ts' | 'py' | 'sh';
|
|
14
|
+
source: string;
|
|
15
|
+
};
|
|
16
|
+
export interface NotebookMetadata {
|
|
17
|
+
project: string;
|
|
18
|
+
created: string;
|
|
19
|
+
modified: string;
|
|
20
|
+
brain_version: string;
|
|
21
|
+
}
|
|
22
|
+
export interface Notebook {
|
|
23
|
+
title: string;
|
|
24
|
+
cells: Cell[];
|
|
25
|
+
metadata: NotebookMetadata;
|
|
26
|
+
}
|
|
27
|
+
export interface NotebookRunResult {
|
|
28
|
+
cells: Array<{
|
|
29
|
+
index: number;
|
|
30
|
+
kind: Cell['kind'];
|
|
31
|
+
result?: string;
|
|
32
|
+
durationMs?: number;
|
|
33
|
+
error?: string;
|
|
34
|
+
}>;
|
|
35
|
+
totalDurationMs: number;
|
|
36
|
+
ranAt: string;
|
|
37
|
+
}
|
|
38
|
+
export declare class BrainNotebook {
|
|
39
|
+
/** Create a starter notebook on disk and return its path. */
|
|
40
|
+
createNotebook(project: string, title: string): Promise<{
|
|
41
|
+
path: string;
|
|
42
|
+
}>;
|
|
43
|
+
/** Parse a notebook from disk. */
|
|
44
|
+
parse(filePath: string): Promise<Notebook>;
|
|
45
|
+
/** Parse a notebook from a raw string (useful for tests). */
|
|
46
|
+
parseString(raw: string, source?: string): Notebook;
|
|
47
|
+
/** Run a single cell. Markdown cells are no-ops; code cells echo with a TODO. */
|
|
48
|
+
runCell(notebook: Notebook, cellIndex: number): Promise<{
|
|
49
|
+
result: string;
|
|
50
|
+
durationMs: number;
|
|
51
|
+
}>;
|
|
52
|
+
/** Run every query cell in order. */
|
|
53
|
+
runAll(notebook: Notebook): Promise<NotebookRunResult>;
|
|
54
|
+
/** Write the notebook back to disk with the latest run results inlined. */
|
|
55
|
+
save(notebook: Notebook, filePath: string): Promise<void>;
|
|
56
|
+
/** Render the notebook as a plain Markdown document. */
|
|
57
|
+
toMarkdown(notebook: Notebook): string;
|
|
58
|
+
private executeQuery;
|
|
59
|
+
private runRecall;
|
|
60
|
+
private runDna;
|
|
61
|
+
private runReplay;
|
|
62
|
+
private runArchetype;
|
|
63
|
+
private runStats;
|
|
64
|
+
private fallbackResult;
|
|
65
|
+
}
|
|
66
|
+
export declare function getBrainNotebook(): BrainNotebook;
|
|
67
|
+
export declare function resetBrainNotebookForTests(): void;
|
|
68
|
+
//# sourceMappingURL=brain-notebook.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"brain-notebook.d.ts","sourceRoot":"","sources":["../../src/brain/brain-notebook.ts"],"names":[],"mappings":"AAiBA,MAAM,MAAM,SAAS,GAAG,QAAQ,GAAG,QAAQ,GAAG,KAAK,GAAG,QAAQ,GAAG,WAAW,GAAG,OAAO,CAAC;AAEvF,MAAM,MAAM,IAAI,GACZ;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACpC;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,SAAS,EAAE,SAAS,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GAC9F;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAEnE,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,QAAQ,EAAE,gBAAgB,CAAC;CAC5B;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC1G,eAAe,EAAE,MAAM,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,qBAAa,aAAa;IACxB,6DAA6D;IACvD,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAgB/E,kCAAkC;IAC5B,KAAK,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IAKhD,6DAA6D;IAC7D,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,SAAY,GAAG,QAAQ;IA2GtD,iFAAiF;IAC3E,OAAO,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;IAkBrG,qCAAqC;IAC/B,MAAM,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAmB5D,2EAA2E;IACrE,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ/D,wDAAwD;IACxD,UAAU,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM;YA2BxB,YAAY;YAyBZ,SAAS;YAiBT,MAAM;YAUN,SAAS;YAUT,YAAY;YAUZ,QAAQ;IAUtB,OAAO,CAAC,cAAc;CAGvB;AA6DD,wBAAgB,gBAAgB,IAAI,aAAa,CAGhD;AACD,wBAAgB,0BAA0B,IAAI,IAAI,CAAsB"}
|