@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.
Files changed (144) hide show
  1. package/README.md +107 -7
  2. package/dist/brain/brain-3d.d.ts +79 -0
  3. package/dist/brain/brain-3d.d.ts.map +1 -0
  4. package/dist/brain/brain-3d.js +468 -0
  5. package/dist/brain/brain-3d.js.map +1 -0
  6. package/dist/brain/brain-active-learner.d.ts +74 -0
  7. package/dist/brain/brain-active-learner.d.ts.map +1 -0
  8. package/dist/brain/brain-active-learner.js +425 -0
  9. package/dist/brain/brain-active-learner.js.map +1 -0
  10. package/dist/brain/brain-ascii.d.ts +32 -0
  11. package/dist/brain/brain-ascii.d.ts.map +1 -0
  12. package/dist/brain/brain-ascii.js +402 -0
  13. package/dist/brain/brain-ascii.js.map +1 -0
  14. package/dist/brain/brain-cinema.d.ts +45 -0
  15. package/dist/brain/brain-cinema.d.ts.map +1 -0
  16. package/dist/brain/brain-cinema.js +393 -0
  17. package/dist/brain/brain-cinema.js.map +1 -0
  18. package/dist/brain/brain-coach.d.ts +45 -0
  19. package/dist/brain/brain-coach.d.ts.map +1 -0
  20. package/dist/brain/brain-coach.js +383 -0
  21. package/dist/brain/brain-coach.js.map +1 -0
  22. package/dist/brain/brain-consolidator.d.ts +56 -0
  23. package/dist/brain/brain-consolidator.d.ts.map +1 -0
  24. package/dist/brain/brain-consolidator.js +386 -0
  25. package/dist/brain/brain-consolidator.js.map +1 -0
  26. package/dist/brain/brain-contradictions.d.ts +57 -0
  27. package/dist/brain/brain-contradictions.d.ts.map +1 -0
  28. package/dist/brain/brain-contradictions.js +443 -0
  29. package/dist/brain/brain-contradictions.js.map +1 -0
  30. package/dist/brain/brain-diff.d.ts +61 -0
  31. package/dist/brain/brain-diff.d.ts.map +1 -0
  32. package/dist/brain/brain-diff.js +439 -0
  33. package/dist/brain/brain-diff.js.map +1 -0
  34. package/dist/brain/brain-dna.d.ts +59 -0
  35. package/dist/brain/brain-dna.d.ts.map +1 -0
  36. package/dist/brain/brain-dna.js +336 -0
  37. package/dist/brain/brain-dna.js.map +1 -0
  38. package/dist/brain/brain-doppelganger.d.ts +32 -0
  39. package/dist/brain/brain-doppelganger.d.ts.map +1 -0
  40. package/dist/brain/brain-doppelganger.js +417 -0
  41. package/dist/brain/brain-doppelganger.js.map +1 -0
  42. package/dist/brain/brain-graph-walker.d.ts +54 -0
  43. package/dist/brain/brain-graph-walker.d.ts.map +1 -0
  44. package/dist/brain/brain-graph-walker.js +412 -0
  45. package/dist/brain/brain-graph-walker.js.map +1 -0
  46. package/dist/brain/brain-holiday-card.d.ts +50 -0
  47. package/dist/brain/brain-holiday-card.d.ts.map +1 -0
  48. package/dist/brain/brain-holiday-card.js +432 -0
  49. package/dist/brain/brain-holiday-card.js.map +1 -0
  50. package/dist/brain/brain-memes.d.ts +44 -0
  51. package/dist/brain/brain-memes.d.ts.map +1 -0
  52. package/dist/brain/brain-memes.js +438 -0
  53. package/dist/brain/brain-memes.js.map +1 -0
  54. package/dist/brain/brain-memory-tiers.d.ts +67 -0
  55. package/dist/brain/brain-memory-tiers.d.ts.map +1 -0
  56. package/dist/brain/brain-memory-tiers.js +292 -0
  57. package/dist/brain/brain-memory-tiers.js.map +1 -0
  58. package/dist/brain/brain-notebook.d.ts +68 -0
  59. package/dist/brain/brain-notebook.d.ts.map +1 -0
  60. package/dist/brain/brain-notebook.js +379 -0
  61. package/dist/brain/brain-notebook.js.map +1 -0
  62. package/dist/brain/brain-quantize.d.ts +62 -0
  63. package/dist/brain/brain-quantize.d.ts.map +1 -0
  64. package/dist/brain/brain-quantize.js +346 -0
  65. package/dist/brain/brain-quantize.js.map +1 -0
  66. package/dist/brain/brain-query-expander.d.ts +31 -0
  67. package/dist/brain/brain-query-expander.d.ts.map +1 -0
  68. package/dist/brain/brain-query-expander.js +417 -0
  69. package/dist/brain/brain-query-expander.js.map +1 -0
  70. package/dist/brain/brain-quest.d.ts +58 -0
  71. package/dist/brain/brain-quest.d.ts.map +1 -0
  72. package/dist/brain/brain-quest.js +541 -0
  73. package/dist/brain/brain-quest.js.map +1 -0
  74. package/dist/brain/brain-recall-cache.d.ts +73 -0
  75. package/dist/brain/brain-recall-cache.d.ts.map +1 -0
  76. package/dist/brain/brain-recall-cache.js +444 -0
  77. package/dist/brain/brain-recall-cache.js.map +1 -0
  78. package/dist/brain/brain-reflex.d.ts +55 -0
  79. package/dist/brain/brain-reflex.d.ts.map +1 -0
  80. package/dist/brain/brain-reflex.js +364 -0
  81. package/dist/brain/brain-reflex.js.map +1 -0
  82. package/dist/brain/brain-replay.d.ts +74 -0
  83. package/dist/brain/brain-replay.d.ts.map +1 -0
  84. package/dist/brain/brain-replay.js +336 -0
  85. package/dist/brain/brain-replay.js.map +1 -0
  86. package/dist/brain/brain-rerank.d.ts +39 -0
  87. package/dist/brain/brain-rerank.d.ts.map +1 -0
  88. package/dist/brain/brain-rerank.js +216 -0
  89. package/dist/brain/brain-rerank.js.map +1 -0
  90. package/dist/brain/brain-roast.d.ts +44 -0
  91. package/dist/brain/brain-roast.d.ts.map +1 -0
  92. package/dist/brain/brain-roast.js +566 -0
  93. package/dist/brain/brain-roast.js.map +1 -0
  94. package/dist/brain/brain-sonification.d.ts +57 -0
  95. package/dist/brain/brain-sonification.d.ts.map +1 -0
  96. package/dist/brain/brain-sonification.js +286 -0
  97. package/dist/brain/brain-sonification.js.map +1 -0
  98. package/dist/brain/brain-tarot.d.ts +49 -0
  99. package/dist/brain/brain-tarot.d.ts.map +1 -0
  100. package/dist/brain/brain-tarot.js +634 -0
  101. package/dist/brain/brain-tarot.js.map +1 -0
  102. package/dist/brain/brain-time-capsule.d.ts +80 -0
  103. package/dist/brain/brain-time-capsule.d.ts.map +1 -0
  104. package/dist/brain/brain-time-capsule.js +289 -0
  105. package/dist/brain/brain-time-capsule.js.map +1 -0
  106. package/dist/brain/brain-trophies.d.ts +60 -0
  107. package/dist/brain/brain-trophies.d.ts.map +1 -0
  108. package/dist/brain/brain-trophies.js +431 -0
  109. package/dist/brain/brain-trophies.js.map +1 -0
  110. package/dist/brain/brain-working-memory.d.ts +78 -0
  111. package/dist/brain/brain-working-memory.d.ts.map +1 -0
  112. package/dist/brain/brain-working-memory.js +367 -0
  113. package/dist/brain/brain-working-memory.js.map +1 -0
  114. package/dist/brain/confidence-gate.d.ts +69 -0
  115. package/dist/brain/confidence-gate.d.ts.map +1 -0
  116. package/dist/brain/confidence-gate.js +244 -0
  117. package/dist/brain/confidence-gate.js.map +1 -0
  118. package/dist/brain/constitution.d.ts +59 -0
  119. package/dist/brain/constitution.d.ts.map +1 -0
  120. package/dist/brain/constitution.js +315 -0
  121. package/dist/brain/constitution.js.map +1 -0
  122. package/dist/brain/embeddings-v2.d.ts +58 -0
  123. package/dist/brain/embeddings-v2.d.ts.map +1 -0
  124. package/dist/brain/embeddings-v2.js +344 -0
  125. package/dist/brain/embeddings-v2.js.map +1 -0
  126. package/dist/brain/hive-voice.d.ts +71 -0
  127. package/dist/brain/hive-voice.d.ts.map +1 -0
  128. package/dist/brain/hive-voice.js +352 -0
  129. package/dist/brain/hive-voice.js.map +1 -0
  130. package/dist/brain/markdown-export.d.ts +48 -0
  131. package/dist/brain/markdown-export.d.ts.map +1 -0
  132. package/dist/brain/markdown-export.js +382 -0
  133. package/dist/brain/markdown-export.js.map +1 -0
  134. package/dist/brain/multimodal-vision.d.ts +38 -0
  135. package/dist/brain/multimodal-vision.d.ts.map +1 -0
  136. package/dist/brain/multimodal-vision.js +257 -0
  137. package/dist/brain/multimodal-vision.js.map +1 -0
  138. package/dist/brain/otel-lite.d.ts +71 -0
  139. package/dist/brain/otel-lite.d.ts.map +1 -0
  140. package/dist/brain/otel-lite.js +232 -0
  141. package/dist/brain/otel-lite.js.map +1 -0
  142. package/dist/cli.js +881 -2
  143. package/dist/cli.js.map +1 -1
  144. package/package.json +2 -2
@@ -0,0 +1,393 @@
1
+ // src/brain/brain-cinema.ts — Brain Cinema (viral feature)
2
+ // v6.0.2
3
+ //
4
+ // Auto-procedural 60-second video of brain growth. Reads the replay event log
5
+ // and emits a SINGLE SVG with embedded SMIL animations (<animate>,
6
+ // <animateTransform>) that plays inline in any modern browser. Generative-art
7
+ // feel: nodes appear scaled to importance, edges draw between related entities,
8
+ // color tone shifts cold-blue (new) → cyan (active) → warm-magenta (mature).
9
+ //
10
+ // Storage (for the mp4 stub):
11
+ // ~/.shadow-brain/cinema/<project_hash>.svg
12
+ // ~/.shadow-brain/cinema/<project_hash>.README.txt (conversion guidance)
13
+ //
14
+ // Independent of brain-dna.ts. Reads via BrainReplay; works gracefully when the
15
+ // project has no events yet.
16
+ import * as fs from 'fs';
17
+ import * as path from 'path';
18
+ import * as os from 'os';
19
+ import * as crypto from 'crypto';
20
+ import { getBrainReplay } from './brain-replay.js';
21
+ const CINEMA_DIR = path.join(os.homedir(), '.shadow-brain', 'cinema');
22
+ const DEFAULT_DURATION_S = 60;
23
+ const DEFAULT_WIDTH = 1920;
24
+ const DEFAULT_HEIGHT = 1080;
25
+ const DEFAULT_SCENE_COUNT = 60;
26
+ const MAX_NODES = 120;
27
+ const MAX_EDGES = 180;
28
+ // ── Class ────────────────────────────────────────────────────────────────────
29
+ export class BrainCinema {
30
+ constructor(replay) {
31
+ this.replay = replay ?? getBrainReplay();
32
+ try {
33
+ fs.mkdirSync(CINEMA_DIR, { recursive: true });
34
+ }
35
+ catch { /* ignore */ }
36
+ }
37
+ /** Generate a 60s SMIL animated SVG of brain growth. */
38
+ async generate(project, opts = {}) {
39
+ const durationS = opts.durationS ?? DEFAULT_DURATION_S;
40
+ const width = opts.width ?? DEFAULT_WIDTH;
41
+ const height = opts.height ?? DEFAULT_HEIGHT;
42
+ const style = opts.style ?? 'rich';
43
+ let events = [];
44
+ try {
45
+ events = this.replay.listEvents(project);
46
+ }
47
+ catch { /* empty */ }
48
+ if (!events.length) {
49
+ const svg = this.renderEmpty(project, width, height, durationS);
50
+ const manifest = {
51
+ durationMs: durationS * 1000,
52
+ frameCount: 0,
53
+ eventsRendered: 0,
54
+ milestones: [],
55
+ style,
56
+ dimensions: { width, height },
57
+ };
58
+ return { svg, manifest };
59
+ }
60
+ const sceneCount = Math.min(DEFAULT_SCENE_COUNT, Math.max(8, events.length));
61
+ const { nodes, edges } = this.buildGraph(events, width, height, durationS, sceneCount);
62
+ const captions = this.buildCaptions(events, durationS, sceneCount);
63
+ const svg = this.renderSvg(project, width, height, durationS, style, nodes, edges, captions, events.length);
64
+ const manifest = {
65
+ durationMs: durationS * 1000,
66
+ frameCount: sceneCount,
67
+ eventsRendered: events.length,
68
+ milestones: captions.map(c => c.label),
69
+ style,
70
+ dimensions: { width, height },
71
+ };
72
+ return { svg, manifest };
73
+ }
74
+ /** Write SVG to disk + a README describing how to rasterize SVG → MP4. */
75
+ async renderMp4Stub(project, opts = {}) {
76
+ const { svg } = await this.generate(project, opts);
77
+ const id = this.projectHash(project);
78
+ const svgPath = path.join(CINEMA_DIR, id + '.svg');
79
+ const readmePath = path.join(CINEMA_DIR, id + '.README.txt');
80
+ try {
81
+ fs.writeFileSync(svgPath, svg, 'utf-8');
82
+ fs.writeFileSync(readmePath, this.mp4Readme(svgPath), 'utf-8');
83
+ }
84
+ catch { /* non-fatal */ }
85
+ return { svgPath, readmePath };
86
+ }
87
+ // ── Internals ──────────────────────────────────────────────────────────────
88
+ projectHash(project) {
89
+ return crypto.createHash('sha1').update(path.resolve(project)).digest('hex').slice(0, 16);
90
+ }
91
+ buildGraph(events, width, height, durationS, sceneCount) {
92
+ const t0 = events[0].ts;
93
+ const t1 = events[events.length - 1].ts;
94
+ const span = Math.max(1, t1 - t0);
95
+ // Compute importance: count per entity key
96
+ const importance = new Map();
97
+ const firstSeenAt = new Map();
98
+ for (const ev of events) {
99
+ const key = this.entityKeyOf(ev);
100
+ if (!key)
101
+ continue;
102
+ importance.set(key, (importance.get(key) ?? 0) + 1);
103
+ if (!firstSeenAt.has(key))
104
+ firstSeenAt.set(key, ev.ts);
105
+ }
106
+ // Pick top N nodes by importance
107
+ const ranked = Array.from(importance.entries())
108
+ .sort((a, b) => b[1] - a[1])
109
+ .slice(0, MAX_NODES);
110
+ const maxImp = Math.max(1, ranked[0]?.[1] ?? 1);
111
+ const cx = width / 2;
112
+ const cy = height / 2;
113
+ const ringRadius = Math.min(width, height) * 0.38;
114
+ const nodes = ranked.map(([id, imp], i) => {
115
+ // Golden-ratio spiral layout for organic look
116
+ const angle = i * 2.39996; // golden angle in radians
117
+ const r = ringRadius * Math.sqrt(i / Math.max(1, ranked.length - 1));
118
+ const seedHash = crypto.createHash('sha1').update(id).digest();
119
+ const jitterX = ((seedHash[0] / 255) - 0.5) * 60;
120
+ const jitterY = ((seedHash[1] / 255) - 0.5) * 60;
121
+ const x = cx + Math.cos(angle) * r + jitterX;
122
+ const y = cy + Math.sin(angle) * r + jitterY;
123
+ const ts = firstSeenAt.get(id) ?? t0;
124
+ const appearAt = ((ts - t0) / span) * durationS;
125
+ const intensity = imp / maxImp;
126
+ const archetypeColor = this.toneAt(appearAt / durationS);
127
+ return {
128
+ id,
129
+ x: Math.max(40, Math.min(width - 40, x)),
130
+ y: Math.max(40, Math.min(height - 80, y)),
131
+ r: 4 + intensity * 18,
132
+ appearAt,
133
+ intensity,
134
+ archetypeColor,
135
+ };
136
+ });
137
+ // Edges: co-occurrence in adjacent events (event chains)
138
+ const idToIdx = new Map();
139
+ nodes.forEach((n, i) => idToIdx.set(n.id, i));
140
+ const edgeSet = new Map();
141
+ let lastKey = null;
142
+ let lastTs = t0;
143
+ for (const ev of events) {
144
+ const key = this.entityKeyOf(ev);
145
+ if (!key)
146
+ continue;
147
+ if (lastKey && lastKey !== key && idToIdx.has(lastKey) && idToIdx.has(key)) {
148
+ const a = idToIdx.get(lastKey);
149
+ const b = idToIdx.get(key);
150
+ const edgeKey = a < b ? a + '-' + b : b + '-' + a;
151
+ if (!edgeSet.has(edgeKey)) {
152
+ const appearAt = ((ev.ts - t0) / span) * durationS;
153
+ edgeSet.set(edgeKey, { fromIdx: Math.min(a, b), toIdx: Math.max(a, b), appearAt });
154
+ }
155
+ }
156
+ lastKey = key;
157
+ lastTs = ev.ts;
158
+ }
159
+ void lastTs; // referenced for potential extension
160
+ const edges = Array.from(edgeSet.values())
161
+ .sort((a, b) => a.appearAt - b.appearAt)
162
+ .slice(0, MAX_EDGES);
163
+ void sceneCount;
164
+ return { nodes, edges };
165
+ }
166
+ buildCaptions(events, durationS, sceneCount) {
167
+ if (!events.length)
168
+ return [];
169
+ const t0 = events[0].ts;
170
+ const t1 = events[events.length - 1].ts;
171
+ const span = Math.max(1, t1 - t0);
172
+ const out = [];
173
+ const seenEntities = new Set();
174
+ let firstMemory = false;
175
+ let firstCollision = false;
176
+ let firstDecision = false;
177
+ let milestoneCount = 0;
178
+ const dayOf = (ts) => Math.max(1, Math.round((ts - t0) / (24 * 60 * 60 * 1000)));
179
+ for (let i = 0; i < events.length; i++) {
180
+ const ev = events[i];
181
+ const key = this.entityKeyOf(ev);
182
+ if (key)
183
+ seenEntities.add(key);
184
+ if (!firstMemory && (ev.type === 'memory.write' || ev.type === 'brain.remember')) {
185
+ out.push({ ts: ev.ts, appearAt: ((ev.ts - t0) / span) * durationS, label: 'First memory · day ' + dayOf(ev.ts) });
186
+ firstMemory = true;
187
+ }
188
+ if (!firstDecision && (ev.type.includes('decision') || ev.type.includes('adr'))) {
189
+ out.push({ ts: ev.ts, appearAt: ((ev.ts - t0) / span) * durationS, label: 'First decision · day ' + dayOf(ev.ts) });
190
+ firstDecision = true;
191
+ }
192
+ if (!firstCollision && ev.type.includes('collision')) {
193
+ out.push({ ts: ev.ts, appearAt: ((ev.ts - t0) / span) * durationS, label: 'First collision · day ' + dayOf(ev.ts) });
194
+ firstCollision = true;
195
+ }
196
+ const milestoneN = [100, 500, 1000, 5000, 10000][milestoneCount];
197
+ if (milestoneN && i + 1 === milestoneN) {
198
+ out.push({ ts: ev.ts, appearAt: ((ev.ts - t0) / span) * durationS, label: milestoneN.toLocaleString() + 'th event · day ' + dayOf(ev.ts) });
199
+ milestoneCount++;
200
+ }
201
+ }
202
+ // Closing milestone
203
+ out.push({
204
+ ts: events[events.length - 1].ts,
205
+ appearAt: durationS - 2,
206
+ label: events.length.toLocaleString() + ' events · ' + seenEntities.size.toLocaleString() + ' entities',
207
+ });
208
+ void sceneCount;
209
+ return out.slice(0, 8);
210
+ }
211
+ entityKeyOf(ev) {
212
+ const p = ev.payload;
213
+ if (!p || typeof p !== 'object')
214
+ return null;
215
+ return p.entity || p.id || p.name || null;
216
+ }
217
+ // Color tone shifts cold-blue → cyan → warm-magenta across [0, 1]
218
+ toneAt(progress) {
219
+ const p = Math.max(0, Math.min(1, progress));
220
+ if (p < 0.5) {
221
+ // cold blue (#3a5fcd) → cyan (#00ffd5)
222
+ const k = p / 0.5;
223
+ const r = Math.round(58 + (0 - 58) * k);
224
+ const g = Math.round(95 + (255 - 95) * k);
225
+ const b = Math.round(205 + (213 - 205) * k);
226
+ return rgbHex(r, g, b);
227
+ }
228
+ // cyan (#00ffd5) → warm magenta (#ff4d8a)
229
+ const k = (p - 0.5) / 0.5;
230
+ const r = Math.round(0 + (255 - 0) * k);
231
+ const g = Math.round(255 + (77 - 255) * k);
232
+ const b = Math.round(213 + (138 - 213) * k);
233
+ return rgbHex(r, g, b);
234
+ }
235
+ // ── Renderers ──────────────────────────────────────────────────────────────
236
+ renderSvg(project, W, H, durationS, style, nodes, edges, captions, eventTotal) {
237
+ const projName = path.basename(path.resolve(project)) || 'unknown-brain';
238
+ const durStr = durationS + 's';
239
+ const accent = style === 'arcade' ? '#ff4d8a' : style === 'minimal' ? '#7dd3fc' : '#00ffd5';
240
+ const bg = style === 'arcade' ? '#1a0726' : '#06121f';
241
+ // Edges (drawn first so nodes sit on top)
242
+ const edgeMarks = [];
243
+ for (const e of edges) {
244
+ const a = nodes[e.fromIdx];
245
+ const b = nodes[e.toIdx];
246
+ if (!a || !b)
247
+ continue;
248
+ const delay = Math.max(0, e.appearAt).toFixed(2) + 's';
249
+ edgeMarks.push(`<line x1="${a.x.toFixed(1)}" y1="${a.y.toFixed(1)}" x2="${a.x.toFixed(1)}" y2="${a.y.toFixed(1)}" stroke="${accent}" stroke-width="0.8" opacity="0">
250
+ <animate attributeName="x2" to="${b.x.toFixed(1)}" begin="${delay}" dur="0.8s" fill="freeze"/>
251
+ <animate attributeName="y2" to="${b.y.toFixed(1)}" begin="${delay}" dur="0.8s" fill="freeze"/>
252
+ <animate attributeName="opacity" from="0" to="0.35" begin="${delay}" dur="0.8s" fill="freeze"/>
253
+ </line>`);
254
+ }
255
+ // Nodes
256
+ const nodeMarks = [];
257
+ for (const n of nodes) {
258
+ const delay = Math.max(0, n.appearAt).toFixed(2) + 's';
259
+ const radius = n.r.toFixed(1);
260
+ nodeMarks.push(`<circle cx="${n.x.toFixed(1)}" cy="${n.y.toFixed(1)}" r="0" fill="${n.archetypeColor}" opacity="0">
261
+ <animate attributeName="r" from="0" to="${radius}" begin="${delay}" dur="0.6s" fill="freeze"/>
262
+ <animate attributeName="opacity" from="0" to="${(0.55 + n.intensity * 0.4).toFixed(2)}" begin="${delay}" dur="0.6s" fill="freeze"/>
263
+ <animate attributeName="r" values="${radius};${(n.r * 1.15).toFixed(1)};${radius}" begin="${delay}" dur="3s" repeatCount="indefinite"/>
264
+ </circle>`);
265
+ }
266
+ // Captions: each appears, holds 4s, fades out
267
+ const captionMarks = [];
268
+ for (let i = 0; i < captions.length; i++) {
269
+ const c = captions[i];
270
+ const delay = Math.max(0, c.appearAt).toFixed(2) + 's';
271
+ captionMarks.push(`<text x="${W / 2}" y="${H - 80}" fill="#e2f5ff" font-size="28" font-family="ui-sans-serif,system-ui" font-weight="600" text-anchor="middle" opacity="0">
272
+ <animate attributeName="opacity" values="0;1;1;0" keyTimes="0;0.1;0.85;1" begin="${delay}" dur="4s" fill="freeze"/>
273
+ ${esc(c.label)}
274
+ </text>`);
275
+ }
276
+ // Final-frame archetype glow: scales in over last 3s
277
+ const finalBegin = (durationS - 3).toFixed(2) + 's';
278
+ const archetypeGlyph = this.deriveArchetype(eventTotal, nodes.length);
279
+ return `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 ${W} ${H}" width="${W}" height="${H}">
280
+ <!-- Brain Cinema · auto-procedural 60s growth animation -->
281
+ <!-- Project: ${esc(projName)} · ${eventTotal.toLocaleString()} events · ${nodes.length} nodes -->
282
+ <defs>
283
+ <radialGradient id="cinema-bg" cx="0.5" cy="0.5" r="0.75">
284
+ <stop offset="0" stop-color="${bg}" stop-opacity="1"/>
285
+ <stop offset="1" stop-color="#020812" stop-opacity="1"/>
286
+ </radialGradient>
287
+ <radialGradient id="cinema-glow" cx="0.5" cy="0.5" r="0.5">
288
+ <stop offset="0" stop-color="${accent}" stop-opacity="0.55"/>
289
+ <stop offset="1" stop-color="${accent}" stop-opacity="0"/>
290
+ </radialGradient>
291
+ <filter id="soft-blur"><feGaussianBlur stdDeviation="2"/></filter>
292
+ </defs>
293
+ <rect width="${W}" height="${H}" fill="url(#cinema-bg)"/>
294
+ <text x="48" y="60" fill="#7dd3fc" font-size="14" font-family="ui-monospace,monospace" letter-spacing="3" opacity="0.7">BRAIN CINEMA · ${durStr}</text>
295
+ <text x="48" y="100" fill="#e2f5ff" font-size="28" font-family="ui-sans-serif,system-ui" font-weight="600">${esc(projName)}</text>
296
+ <g filter="url(#soft-blur)" opacity="0.6">
297
+ ${edgeMarks.join('\n ')}
298
+ </g>
299
+ <g>
300
+ ${nodeMarks.join('\n ')}
301
+ </g>
302
+ <circle cx="${W / 2}" cy="${H / 2}" r="0" fill="url(#cinema-glow)" opacity="0">
303
+ <animate attributeName="r" from="0" to="${(Math.min(W, H) * 0.45).toFixed(0)}" begin="${finalBegin}" dur="3s" fill="freeze"/>
304
+ <animate attributeName="opacity" from="0" to="1" begin="${finalBegin}" dur="3s" fill="freeze"/>
305
+ </circle>
306
+ <text x="${W / 2}" y="${H / 2 + 12}" fill="${accent}" font-size="120" font-family="ui-sans-serif,system-ui" font-weight="800" text-anchor="middle" opacity="0">
307
+ <animate attributeName="opacity" from="0" to="1" begin="${finalBegin}" dur="2s" fill="freeze"/>
308
+ ${esc(archetypeGlyph)}
309
+ </text>
310
+ ${captionMarks.join('\n ')}
311
+ <text x="48" y="${H - 32}" fill="#7dd3fc" font-size="13" font-family="ui-monospace,monospace" opacity="0.55">npm i -g @theihtisham/agent-shadow-brain</text>
312
+ <text x="${W - 48}" y="${H - 32}" fill="${accent}" font-size="13" font-family="ui-monospace,monospace" text-anchor="end" opacity="0.75">style: ${esc(style)}</text>
313
+ </svg>`;
314
+ }
315
+ renderEmpty(project, W, H, durationS) {
316
+ const projName = path.basename(path.resolve(project)) || 'unknown-brain';
317
+ return `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 ${W} ${H}" width="${W}" height="${H}">
318
+ <!-- Brain Cinema · empty state -->
319
+ <defs>
320
+ <radialGradient id="e-bg" cx="0.5" cy="0.5" r="0.75">
321
+ <stop offset="0" stop-color="#06121f"/><stop offset="1" stop-color="#020812"/>
322
+ </radialGradient>
323
+ </defs>
324
+ <rect width="${W}" height="${H}" fill="url(#e-bg)"/>
325
+ <text x="${W / 2}" y="${H / 2 - 20}" fill="#e2f5ff" font-size="42" font-family="ui-sans-serif,system-ui" font-weight="600" text-anchor="middle">${esc(projName)}</text>
326
+ <text x="${W / 2}" y="${H / 2 + 30}" fill="#7dd3fc" font-size="22" font-family="ui-sans-serif,system-ui" text-anchor="middle" opacity="0.8">Your brain is brand new. Come back after some activity.</text>
327
+ <circle cx="${W / 2}" cy="${H / 2 + 130}" r="6" fill="#00ffd5">
328
+ <animate attributeName="r" values="6;18;6" dur="${durationS}s" repeatCount="indefinite"/>
329
+ <animate attributeName="opacity" values="0.8;0.2;0.8" dur="${durationS}s" repeatCount="indefinite"/>
330
+ </circle>
331
+ </svg>`;
332
+ }
333
+ deriveArchetype(eventTotal, nodeCount) {
334
+ if (eventTotal === 0)
335
+ return 'WND';
336
+ if (nodeCount >= 80)
337
+ return 'CTG';
338
+ if (eventTotal >= 1000)
339
+ return 'SCH';
340
+ if (eventTotal >= 200)
341
+ return 'ARC';
342
+ return 'SPD';
343
+ }
344
+ mp4Readme(svgPath) {
345
+ return [
346
+ 'Brain Cinema · SVG → MP4 conversion notes',
347
+ '',
348
+ 'The file at:',
349
+ ' ' + svgPath,
350
+ '',
351
+ 'is a single SVG with SMIL animations (cross-browser-supported).',
352
+ 'It plays natively in Chrome, Safari, Firefox, and Edge.',
353
+ '',
354
+ 'ffmpeg cannot rasterize SMIL on its own — it needs a rendering pass first.',
355
+ 'Recommended conversion paths:',
356
+ '',
357
+ ' 1. rsvg-convert (fast, but only renders single frames — not animation)',
358
+ ' rsvg-convert -w 1920 input.svg -o frame.png',
359
+ '',
360
+ ' 2. Inkscape (single-frame export only)',
361
+ ' inkscape input.svg --export-png=frame.png',
362
+ '',
363
+ ' 3. Puppeteer / Playwright (recommended — captures animation frame-by-frame)',
364
+ ' • Open the SVG in a headless browser',
365
+ ' • Snapshot screen every ~33ms (30 fps)',
366
+ ' • Pipe frames to ffmpeg:',
367
+ ' ffmpeg -framerate 30 -i frame-%04d.png -c:v libx264 -pix_fmt yuv420p output.mp4',
368
+ '',
369
+ ' 4. Or share the SVG directly — most platforms (Twitter web, Discord, GitHub)',
370
+ ' embed inline SVG and play SMIL animations automatically.',
371
+ '',
372
+ 'No external runtime is required to view the animation; only to convert.',
373
+ '',
374
+ ].join('\n');
375
+ }
376
+ }
377
+ // ── Helpers ──────────────────────────────────────────────────────────────────
378
+ function rgbHex(r, g, b) {
379
+ const clamp = (n) => Math.max(0, Math.min(255, n));
380
+ const hex = (n) => clamp(n).toString(16).padStart(2, '0');
381
+ return '#' + hex(r) + hex(g) + hex(b);
382
+ }
383
+ function esc(s) {
384
+ return String(s).replace(/[&<>"']/g, c => ({ '&': '&amp;', '<': '&lt;', '>': '&gt;', '"': '&quot;', "'": '&#39;' }[c]));
385
+ }
386
+ let _instance = null;
387
+ export function getBrainCinema() {
388
+ if (!_instance)
389
+ _instance = new BrainCinema();
390
+ return _instance;
391
+ }
392
+ export function resetBrainCinemaForTests() { _instance = null; }
393
+ //# sourceMappingURL=brain-cinema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"brain-cinema.js","sourceRoot":"","sources":["../../src/brain/brain-cinema.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ export type CoachEventType = 'memory.add' | 'memory.search' | 'memory.unconfirmed' | 'commit' | 'file.touch' | 'file.refactor.start' | 'bug.solved' | 'debug.attempt' | 'capsule.freeze' | 'dna.generate' | 'replay.view' | 'agent.spawn' | 'hive.share' | 'voice.ask' | 'constitution.violation' | 'idle' | 'session.start';
2
+ export type SuggestionKind = 'reminder' | 'pattern-spotted' | 'next-action' | 'warning' | 'celebrate';
3
+ export interface CoachEvent {
4
+ type: CoachEventType;
5
+ ts?: number;
6
+ project?: string;
7
+ payload?: Record<string, unknown>;
8
+ }
9
+ export interface Suggestion {
10
+ id: string;
11
+ kind: SuggestionKind;
12
+ priority: number;
13
+ title: string;
14
+ body: string;
15
+ evidence: string[];
16
+ emoji: string;
17
+ actionHints: string[];
18
+ createdAt: number;
19
+ }
20
+ export declare class BrainCoach {
21
+ private states;
22
+ private rules;
23
+ constructor();
24
+ /** Feed a brain activity event into the coach. */
25
+ observe(event: CoachEvent): void;
26
+ /** Get current suggestions for a project. */
27
+ suggestions(project: string, opts?: {
28
+ topN?: number;
29
+ sinceMs?: number;
30
+ }): Promise<Suggestion[]>;
31
+ /** Mark a suggestion as seen — don't re-surface. */
32
+ dismiss(suggestionId: string, project?: string): void;
33
+ /** List pinned suggestions across all projects. */
34
+ pinned(project?: string): Suggestion[];
35
+ pin(id: string, project?: string): void;
36
+ unpin(id: string, project?: string): void;
37
+ /** Called when the user has been idle — surface what matters now. */
38
+ idleCheck(project: string, idleSinceMs: number): Promise<Suggestion[]>;
39
+ private registerRules;
40
+ private loadState;
41
+ private persist;
42
+ }
43
+ export declare function getBrainCoach(): BrainCoach;
44
+ export declare function resetBrainCoachForTests(): void;
45
+ //# sourceMappingURL=brain-coach.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"brain-coach.d.ts","sourceRoot":"","sources":["../../src/brain/brain-coach.ts"],"names":[],"mappings":"AAmBA,MAAM,MAAM,cAAc,GACtB,YAAY,GAAG,eAAe,GAAG,oBAAoB,GACrD,QAAQ,GAAG,YAAY,GAAG,qBAAqB,GAC/C,YAAY,GAAG,eAAe,GAC9B,gBAAgB,GAAG,cAAc,GAAG,aAAa,GACjD,aAAa,GAAG,YAAY,GAAG,WAAW,GAC1C,wBAAwB,GAAG,MAAM,GAAG,eAAe,CAAC;AAExD,MAAM,MAAM,cAAc,GACtB,UAAU,GAAG,iBAAiB,GAAG,aAAa,GAC9C,SAAS,GAAG,WAAW,CAAC;AAE5B,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,cAAc,CAAC;IACrB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,cAAc,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;CACnB;AAmBD,qBAAa,UAAU;IACrB,OAAO,CAAC,MAAM,CAAwC;IACtD,OAAO,CAAC,KAAK,CAAwB;;IAMrC,kDAAkD;IAClD,OAAO,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IAWhC,6CAA6C;IACvC,WAAW,CACf,OAAO,EAAE,MAAM,EACf,IAAI,GAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAO,GAC7C,OAAO,CAAC,UAAU,EAAE,CAAC;IAqBxB,oDAAoD;IACpD,OAAO,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,SAAY,GAAG,IAAI;IAMxD,mDAAmD;IACnD,MAAM,CAAC,OAAO,SAAY,GAAG,UAAU,EAAE;IAKzC,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,SAAY,GAAG,IAAI;IAa1C,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,SAAY,GAAG,IAAI;IAM5C,qEAAqE;IAC/D,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAQ5E,OAAO,CAAC,aAAa;IAkPrB,OAAO,CAAC,SAAS;IAejB,OAAO,CAAC,OAAO;CAUhB;AAsBD,wBAAgB,aAAa,IAAI,UAAU,CAG1C;AACD,wBAAgB,uBAAuB,IAAI,IAAI,CAAsB"}