@theihtisham/agent-shadow-brain 6.0.0 → 6.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (191) hide show
  1. package/CHANGELOG.md +372 -0
  2. package/README.md +366 -355
  3. package/dist/brain/auto-update.js +1 -1
  4. package/dist/brain/brain-3d.d.ts +79 -0
  5. package/dist/brain/brain-3d.d.ts.map +1 -0
  6. package/dist/brain/brain-3d.js +468 -0
  7. package/dist/brain/brain-3d.js.map +1 -0
  8. package/dist/brain/brain-active-learner.d.ts +74 -0
  9. package/dist/brain/brain-active-learner.d.ts.map +1 -0
  10. package/dist/brain/brain-active-learner.js +425 -0
  11. package/dist/brain/brain-active-learner.js.map +1 -0
  12. package/dist/brain/brain-ascii.d.ts +32 -0
  13. package/dist/brain/brain-ascii.d.ts.map +1 -0
  14. package/dist/brain/brain-ascii.js +402 -0
  15. package/dist/brain/brain-ascii.js.map +1 -0
  16. package/dist/brain/brain-cinema.d.ts +45 -0
  17. package/dist/brain/brain-cinema.d.ts.map +1 -0
  18. package/dist/brain/brain-cinema.js +393 -0
  19. package/dist/brain/brain-cinema.js.map +1 -0
  20. package/dist/brain/brain-coach.d.ts +45 -0
  21. package/dist/brain/brain-coach.d.ts.map +1 -0
  22. package/dist/brain/brain-coach.js +383 -0
  23. package/dist/brain/brain-coach.js.map +1 -0
  24. package/dist/brain/brain-consolidator.d.ts +56 -0
  25. package/dist/brain/brain-consolidator.d.ts.map +1 -0
  26. package/dist/brain/brain-consolidator.js +386 -0
  27. package/dist/brain/brain-consolidator.js.map +1 -0
  28. package/dist/brain/brain-contradictions.d.ts +57 -0
  29. package/dist/brain/brain-contradictions.d.ts.map +1 -0
  30. package/dist/brain/brain-contradictions.js +443 -0
  31. package/dist/brain/brain-contradictions.js.map +1 -0
  32. package/dist/brain/brain-diff.d.ts +61 -0
  33. package/dist/brain/brain-diff.d.ts.map +1 -0
  34. package/dist/brain/brain-diff.js +439 -0
  35. package/dist/brain/brain-diff.js.map +1 -0
  36. package/dist/brain/brain-dna.d.ts +59 -0
  37. package/dist/brain/brain-dna.d.ts.map +1 -0
  38. package/dist/brain/brain-dna.js +336 -0
  39. package/dist/brain/brain-dna.js.map +1 -0
  40. package/dist/brain/brain-doppelganger.d.ts +32 -0
  41. package/dist/brain/brain-doppelganger.d.ts.map +1 -0
  42. package/dist/brain/brain-doppelganger.js +417 -0
  43. package/dist/brain/brain-doppelganger.js.map +1 -0
  44. package/dist/brain/brain-graph-walker.d.ts +54 -0
  45. package/dist/brain/brain-graph-walker.d.ts.map +1 -0
  46. package/dist/brain/brain-graph-walker.js +412 -0
  47. package/dist/brain/brain-graph-walker.js.map +1 -0
  48. package/dist/brain/brain-holiday-card.d.ts +50 -0
  49. package/dist/brain/brain-holiday-card.d.ts.map +1 -0
  50. package/dist/brain/brain-holiday-card.js +432 -0
  51. package/dist/brain/brain-holiday-card.js.map +1 -0
  52. package/dist/brain/brain-memes.d.ts +44 -0
  53. package/dist/brain/brain-memes.d.ts.map +1 -0
  54. package/dist/brain/brain-memes.js +438 -0
  55. package/dist/brain/brain-memes.js.map +1 -0
  56. package/dist/brain/brain-memory-tiers.d.ts +67 -0
  57. package/dist/brain/brain-memory-tiers.d.ts.map +1 -0
  58. package/dist/brain/brain-memory-tiers.js +292 -0
  59. package/dist/brain/brain-memory-tiers.js.map +1 -0
  60. package/dist/brain/brain-notebook.d.ts +68 -0
  61. package/dist/brain/brain-notebook.d.ts.map +1 -0
  62. package/dist/brain/brain-notebook.js +379 -0
  63. package/dist/brain/brain-notebook.js.map +1 -0
  64. package/dist/brain/brain-portability.js +3 -3
  65. package/dist/brain/brain-portability.js.map +1 -1
  66. package/dist/brain/brain-quantize.d.ts +62 -0
  67. package/dist/brain/brain-quantize.d.ts.map +1 -0
  68. package/dist/brain/brain-quantize.js +346 -0
  69. package/dist/brain/brain-quantize.js.map +1 -0
  70. package/dist/brain/brain-query-expander.d.ts +31 -0
  71. package/dist/brain/brain-query-expander.d.ts.map +1 -0
  72. package/dist/brain/brain-query-expander.js +417 -0
  73. package/dist/brain/brain-query-expander.js.map +1 -0
  74. package/dist/brain/brain-quest.d.ts +58 -0
  75. package/dist/brain/brain-quest.d.ts.map +1 -0
  76. package/dist/brain/brain-quest.js +541 -0
  77. package/dist/brain/brain-quest.js.map +1 -0
  78. package/dist/brain/brain-recall-cache.d.ts +73 -0
  79. package/dist/brain/brain-recall-cache.d.ts.map +1 -0
  80. package/dist/brain/brain-recall-cache.js +444 -0
  81. package/dist/brain/brain-recall-cache.js.map +1 -0
  82. package/dist/brain/brain-reflex.d.ts +55 -0
  83. package/dist/brain/brain-reflex.d.ts.map +1 -0
  84. package/dist/brain/brain-reflex.js +364 -0
  85. package/dist/brain/brain-reflex.js.map +1 -0
  86. package/dist/brain/brain-replay.d.ts +74 -0
  87. package/dist/brain/brain-replay.d.ts.map +1 -0
  88. package/dist/brain/brain-replay.js +336 -0
  89. package/dist/brain/brain-replay.js.map +1 -0
  90. package/dist/brain/brain-rerank.d.ts +39 -0
  91. package/dist/brain/brain-rerank.d.ts.map +1 -0
  92. package/dist/brain/brain-rerank.js +216 -0
  93. package/dist/brain/brain-rerank.js.map +1 -0
  94. package/dist/brain/brain-roast.d.ts +44 -0
  95. package/dist/brain/brain-roast.d.ts.map +1 -0
  96. package/dist/brain/brain-roast.js +566 -0
  97. package/dist/brain/brain-roast.js.map +1 -0
  98. package/dist/brain/brain-sonification.d.ts +57 -0
  99. package/dist/brain/brain-sonification.d.ts.map +1 -0
  100. package/dist/brain/brain-sonification.js +286 -0
  101. package/dist/brain/brain-sonification.js.map +1 -0
  102. package/dist/brain/brain-tarot.d.ts +49 -0
  103. package/dist/brain/brain-tarot.d.ts.map +1 -0
  104. package/dist/brain/brain-tarot.js +634 -0
  105. package/dist/brain/brain-tarot.js.map +1 -0
  106. package/dist/brain/brain-time-capsule.d.ts +80 -0
  107. package/dist/brain/brain-time-capsule.d.ts.map +1 -0
  108. package/dist/brain/brain-time-capsule.js +289 -0
  109. package/dist/brain/brain-time-capsule.js.map +1 -0
  110. package/dist/brain/brain-trophies.d.ts +60 -0
  111. package/dist/brain/brain-trophies.d.ts.map +1 -0
  112. package/dist/brain/brain-trophies.js +431 -0
  113. package/dist/brain/brain-trophies.js.map +1 -0
  114. package/dist/brain/brain-working-memory.d.ts +78 -0
  115. package/dist/brain/brain-working-memory.d.ts.map +1 -0
  116. package/dist/brain/brain-working-memory.js +367 -0
  117. package/dist/brain/brain-working-memory.js.map +1 -0
  118. package/dist/brain/confidence-gate.d.ts +69 -0
  119. package/dist/brain/confidence-gate.d.ts.map +1 -0
  120. package/dist/brain/confidence-gate.js +244 -0
  121. package/dist/brain/confidence-gate.js.map +1 -0
  122. package/dist/brain/constitution.d.ts +59 -0
  123. package/dist/brain/constitution.d.ts.map +1 -0
  124. package/dist/brain/constitution.js +315 -0
  125. package/dist/brain/constitution.js.map +1 -0
  126. package/dist/brain/context-continuity.d.ts +78 -0
  127. package/dist/brain/context-continuity.d.ts.map +1 -0
  128. package/dist/brain/context-continuity.js +341 -0
  129. package/dist/brain/context-continuity.js.map +1 -0
  130. package/dist/brain/embeddings-v2.d.ts +58 -0
  131. package/dist/brain/embeddings-v2.d.ts.map +1 -0
  132. package/dist/brain/embeddings-v2.js +344 -0
  133. package/dist/brain/embeddings-v2.js.map +1 -0
  134. package/dist/brain/global-brain.d.ts.map +1 -1
  135. package/dist/brain/global-brain.js +35 -9
  136. package/dist/brain/global-brain.js.map +1 -1
  137. package/dist/brain/hive-voice.d.ts +71 -0
  138. package/dist/brain/hive-voice.d.ts.map +1 -0
  139. package/dist/brain/hive-voice.js +352 -0
  140. package/dist/brain/hive-voice.js.map +1 -0
  141. package/dist/brain/live-brain.d.ts +119 -0
  142. package/dist/brain/live-brain.d.ts.map +1 -0
  143. package/dist/brain/live-brain.js +405 -0
  144. package/dist/brain/live-brain.js.map +1 -0
  145. package/dist/brain/markdown-export.d.ts +48 -0
  146. package/dist/brain/markdown-export.d.ts.map +1 -0
  147. package/dist/brain/markdown-export.js +382 -0
  148. package/dist/brain/markdown-export.js.map +1 -0
  149. package/dist/brain/mcp-server.d.ts +4 -0
  150. package/dist/brain/mcp-server.d.ts.map +1 -1
  151. package/dist/brain/mcp-server.js +81 -5
  152. package/dist/brain/mcp-server.js.map +1 -1
  153. package/dist/brain/memory-seeder.d.ts +78 -0
  154. package/dist/brain/memory-seeder.d.ts.map +1 -0
  155. package/dist/brain/memory-seeder.js +326 -0
  156. package/dist/brain/memory-seeder.js.map +1 -0
  157. package/dist/brain/multimodal-vision.d.ts +38 -0
  158. package/dist/brain/multimodal-vision.d.ts.map +1 -0
  159. package/dist/brain/multimodal-vision.js +257 -0
  160. package/dist/brain/multimodal-vision.js.map +1 -0
  161. package/dist/brain/orchestrator.js +1 -1
  162. package/dist/brain/otel-lite.d.ts +71 -0
  163. package/dist/brain/otel-lite.d.ts.map +1 -0
  164. package/dist/brain/otel-lite.js +232 -0
  165. package/dist/brain/otel-lite.js.map +1 -0
  166. package/dist/brain/token-economy.d.ts +2 -0
  167. package/dist/brain/token-economy.d.ts.map +1 -1
  168. package/dist/brain/token-economy.js +80 -24
  169. package/dist/brain/token-economy.js.map +1 -1
  170. package/dist/cli.js +1120 -32
  171. package/dist/cli.js.map +1 -1
  172. package/dist/dashboard/server.d.ts +5 -0
  173. package/dist/dashboard/server.d.ts.map +1 -1
  174. package/dist/dashboard/server.js +355 -2
  175. package/dist/dashboard/server.js.map +1 -1
  176. package/dist/dashboard/v6-dashboard-html.d.ts +1 -1
  177. package/dist/dashboard/v6-dashboard-html.d.ts.map +1 -1
  178. package/dist/dashboard/v6-dashboard-html.js +755 -85
  179. package/dist/dashboard/v6-dashboard-html.js.map +1 -1
  180. package/dist/index.d.ts +4 -0
  181. package/dist/index.d.ts.map +1 -1
  182. package/dist/index.js +4 -0
  183. package/dist/index.js.map +1 -1
  184. package/dist/types.d.ts +17 -12
  185. package/dist/types.d.ts.map +1 -1
  186. package/docs/launch/README.md +61 -0
  187. package/docs/launch/RELEASE_CHECKLIST_v6.0.3.md +102 -0
  188. package/docs/launch/RELEASE_NOTES_v6.0.3.md +111 -0
  189. package/package.json +25 -13
  190. package/tools/export-resume-pack.mjs +56 -0
  191. package/tools/record-global-memory.mjs +72 -0
@@ -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":"AAAA,2DAA2D;AAC3D,SAAS;AACT,EAAE;AACF,8EAA8E;AAC9E,mEAAmE;AACnE,8EAA8E;AAC9E,gFAAgF;AAChF,6EAA6E;AAC7E,EAAE;AACF,8BAA8B;AAC9B,8CAA8C;AAC9C,2EAA2E;AAC3E,EAAE;AACF,gFAAgF;AAChF,6BAA6B;AAE7B,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AACjC,OAAO,EAAe,cAAc,EAAe,MAAM,mBAAmB,CAAC;AAE7E,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,eAAe,EAAE,QAAQ,CAAC,CAAC;AACtE,MAAM,kBAAkB,GAAG,EAAE,CAAC;AAC9B,MAAM,aAAa,GAAG,IAAI,CAAC;AAC3B,MAAM,cAAc,GAAG,IAAI,CAAC;AAC5B,MAAM,mBAAmB,GAAG,EAAE,CAAC;AAC/B,MAAM,SAAS,GAAG,GAAG,CAAC;AACtB,MAAM,SAAS,GAAG,GAAG,CAAC;AA4CtB,gFAAgF;AAEhF,MAAM,OAAO,WAAW;IAGtB,YAAY,MAAoB;QAC9B,IAAI,CAAC,MAAM,GAAG,MAAM,IAAI,cAAc,EAAE,CAAC;QACzC,IAAI,CAAC;YAAC,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;IAC/E,CAAC;IAED,wDAAwD;IACxD,KAAK,CAAC,QAAQ,CAAC,OAAe,EAAE,OAAsB,EAAE;QACtD,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,kBAAkB,CAAC;QACvD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,aAAa,CAAC;QAC1C,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,cAAc,CAAC;QAC7C,MAAM,KAAK,GAAgB,IAAI,CAAC,KAAK,IAAI,MAAM,CAAC;QAEhD,IAAI,MAAM,GAAkB,EAAE,CAAC;QAC/B,IAAI,CAAC;YAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC,CAAC,WAAW,CAAC,CAAC;QAEvE,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YACnB,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;YAChE,MAAM,QAAQ,GAAmB;gBAC/B,UAAU,EAAE,SAAS,GAAG,IAAI;gBAC5B,UAAU,EAAE,CAAC;gBACb,cAAc,EAAE,CAAC;gBACjB,UAAU,EAAE,EAAE;gBACd,KAAK;gBACL,UAAU,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE;aAC9B,CAAC;YACF,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC;QAC3B,CAAC;QAED,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,mBAAmB,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;QAC7E,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;QACvF,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;QAEnE,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QAE5G,MAAM,QAAQ,GAAmB;YAC/B,UAAU,EAAE,SAAS,GAAG,IAAI;YAC5B,UAAU,EAAE,UAAU;YACtB,cAAc,EAAE,MAAM,CAAC,MAAM;YAC7B,UAAU,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;YACtC,KAAK;YACL,UAAU,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE;SAC9B,CAAC;QACF,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC;IAC3B,CAAC;IAED,0EAA0E;IAC1E,KAAK,CAAC,aAAa,CAAC,OAAe,EAAE,OAAsB,EAAE;QAC3D,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QACnD,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QACrC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,GAAG,MAAM,CAAC,CAAC;QACnD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,GAAG,aAAa,CAAC,CAAC;QAC7D,IAAI,CAAC;YACH,EAAE,CAAC,aAAa,CAAC,OAAO,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;YACxC,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC;QACjE,CAAC;QAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC;QAC3B,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC;IACjC,CAAC;IAED,8EAA8E;IAEtE,WAAW,CAAC,OAAe;QACjC,OAAO,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC5F,CAAC;IAEO,UAAU,CAChB,MAAqB,EACrB,KAAa,EACb,MAAc,EACd,SAAiB,EACjB,UAAkB;QAElB,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACxB,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QACxC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;QAElC,2CAA2C;QAC3C,MAAM,UAAU,GAAG,IAAI,GAAG,EAAkB,CAAC;QAC7C,MAAM,WAAW,GAAG,IAAI,GAAG,EAAkB,CAAC;QAC9C,KAAK,MAAM,EAAE,IAAI,MAAM,EAAE,CAAC;YACxB,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;YACjC,IAAI,CAAC,GAAG;gBAAE,SAAS;YACnB,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACpD,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC;gBAAE,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;QACzD,CAAC;QAED,iCAAiC;QACjC,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;aAC5C,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;aAC3B,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;QACvB,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QAEhD,MAAM,EAAE,GAAG,KAAK,GAAG,CAAC,CAAC;QACrB,MAAM,EAAE,GAAG,MAAM,GAAG,CAAC,CAAC;QACtB,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC;QAElD,MAAM,KAAK,GAAiB,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;YACtD,8CAA8C;YAC9C,MAAM,KAAK,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC,0BAA0B;YACrD,MAAM,CAAC,GAAG,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;YACrE,MAAM,QAAQ,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;YAC/D,MAAM,OAAO,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,EAAE,CAAC;YACjD,MAAM,OAAO,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,EAAE,CAAC;YACjD,MAAM,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC;YAC7C,MAAM,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC;YAC7C,MAAM,EAAE,GAAG,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;YACrC,MAAM,QAAQ,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,SAAS,CAAC;YAChD,MAAM,SAAS,GAAG,GAAG,GAAG,MAAM,CAAC;YAC/B,MAAM,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,GAAG,SAAS,CAAC,CAAC;YACzD,OAAO;gBACL,EAAE;gBACF,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;gBACxC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;gBACzC,CAAC,EAAE,CAAC,GAAG,SAAS,GAAG,EAAE;gBACrB,QAAQ;gBACR,SAAS;gBACT,cAAc;aACf,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,yDAAyD;QACzD,MAAM,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAC;QAC1C,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;QAE9C,MAAM,OAAO,GAAG,IAAI,GAAG,EAAsB,CAAC;QAC9C,IAAI,OAAO,GAAkB,IAAI,CAAC;QAClC,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,KAAK,MAAM,EAAE,IAAI,MAAM,EAAE,CAAC;YACxB,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;YACjC,IAAI,CAAC,GAAG;gBAAE,SAAS;YACnB,IAAI,OAAO,IAAI,OAAO,KAAK,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC3E,MAAM,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAE,CAAC;gBAChC,MAAM,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAE,CAAC;gBAC5B,MAAM,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;gBAClD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;oBAC1B,MAAM,QAAQ,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,SAAS,CAAC;oBACnD,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;gBACrF,CAAC;YACH,CAAC;YACD,OAAO,GAAG,GAAG,CAAC;YACd,MAAM,GAAG,EAAE,CAAC,EAAE,CAAC;QACjB,CAAC;QACD,KAAK,MAAM,CAAC,CAAC,qCAAqC;QAElD,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;aACvC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC;aACvC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;QAEvB,KAAK,UAAU,CAAC;QAChB,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;IAC1B,CAAC;IAEO,aAAa,CAAC,MAAqB,EAAE,SAAiB,EAAE,UAAkB;QAChF,IAAI,CAAC,MAAM,CAAC,MAAM;YAAE,OAAO,EAAE,CAAC;QAC9B,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACxB,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QACxC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;QAElC,MAAM,GAAG,GAAmB,EAAE,CAAC;QAC/B,MAAM,YAAY,GAAG,IAAI,GAAG,EAAU,CAAC;QACvC,IAAI,WAAW,GAAG,KAAK,CAAC;QACxB,IAAI,cAAc,GAAG,KAAK,CAAC;QAC3B,IAAI,aAAa,GAAG,KAAK,CAAC;QAC1B,IAAI,cAAc,GAAG,CAAC,CAAC;QAEvB,MAAM,KAAK,GAAG,CAAC,EAAU,EAAU,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QAEjG,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACvC,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;YACrB,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;YACjC,IAAI,GAAG;gBAAE,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAE/B,IAAI,CAAC,WAAW,IAAI,CAAC,EAAE,CAAC,IAAI,KAAK,cAAc,IAAI,EAAE,CAAC,IAAI,KAAK,gBAAgB,CAAC,EAAE,CAAC;gBACjF,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,SAAS,EAAE,KAAK,EAAE,qBAAqB,GAAG,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;gBAClH,WAAW,GAAG,IAAI,CAAC;YACrB,CAAC;YACD,IAAI,CAAC,aAAa,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;gBAChF,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,SAAS,EAAE,KAAK,EAAE,uBAAuB,GAAG,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;gBACpH,aAAa,GAAG,IAAI,CAAC;YACvB,CAAC;YACD,IAAI,CAAC,cAAc,IAAI,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;gBACrD,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,SAAS,EAAE,KAAK,EAAE,wBAAwB,GAAG,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;gBACrH,cAAc,GAAG,IAAI,CAAC;YACxB,CAAC;YACD,MAAM,UAAU,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,cAAc,CAAC,CAAC;YACjE,IAAI,UAAU,IAAI,CAAC,GAAG,CAAC,KAAK,UAAU,EAAE,CAAC;gBACvC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,SAAS,EAAE,KAAK,EAAE,UAAU,CAAC,cAAc,EAAE,GAAG,iBAAiB,GAAG,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;gBAC5I,cAAc,EAAE,CAAC;YACnB,CAAC;QACH,CAAC;QAED,oBAAoB;QACpB,GAAG,CAAC,IAAI,CAAC;YACP,EAAE,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE;YAChC,QAAQ,EAAE,SAAS,GAAG,CAAC;YACvB,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,cAAc,EAAE,GAAG,YAAY,GAAG,YAAY,CAAC,IAAI,CAAC,cAAc,EAAE,GAAG,WAAW;SACxG,CAAC,CAAC;QAEH,KAAK,UAAU,CAAC;QAChB,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACzB,CAAC;IAEO,WAAW,CAAC,EAAe;QACjC,MAAM,CAAC,GAAG,EAAE,CAAC,OAAqD,CAAC;QACnE,IAAI,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC;QAC7C,OAAQ,CAAC,CAAC,MAAiB,IAAK,CAAC,CAAC,EAAa,IAAK,CAAC,CAAC,IAAe,IAAI,IAAI,CAAC;IAChF,CAAC;IAED,kEAAkE;IAC1D,MAAM,CAAC,QAAgB;QAC7B,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC;QAC7C,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC;YACZ,uCAAuC;YACvC,MAAM,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;YAClB,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;YACxC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;YAC1C,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;YAC5C,OAAO,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACzB,CAAC;QACD,0CAA0C;QAC1C,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;QAC1B,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACxC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QAC3C,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QAC5C,OAAO,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACzB,CAAC;IAED,8EAA8E;IAEtE,SAAS,CACf,OAAe,EACf,CAAS,EACT,CAAS,EACT,SAAiB,EACjB,KAAkB,EAClB,KAAmB,EACnB,KAAmB,EACnB,QAAwB,EACxB,UAAkB;QAElB,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,eAAe,CAAC;QACzE,MAAM,MAAM,GAAG,SAAS,GAAG,GAAG,CAAC;QAC/B,MAAM,MAAM,GAAG,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;QAC5F,MAAM,EAAE,GAAG,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;QAEtD,0CAA0C;QAC1C,MAAM,SAAS,GAAa,EAAE,CAAC;QAC/B,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;YACtB,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;YAC3B,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;YACzB,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;gBAAE,SAAS;YACvB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;YACvD,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,aAAa,MAAM;sCAClG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY,KAAK;sCAC/B,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY,KAAK;iEACJ,KAAK;UAC5D,CAAC,CAAC;QACR,CAAC;QAED,QAAQ;QACR,MAAM,SAAS,GAAa,EAAE,CAAC;QAC/B,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;YACtB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;YACvD,MAAM,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YAC9B,SAAS,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,cAAc;8CAC5D,MAAM,YAAY,KAAK;oDACjB,CAAC,IAAI,GAAG,CAAC,CAAC,SAAS,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY,KAAK;yCACjE,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,MAAM,YAAY,KAAK;YACzF,CAAC,CAAC;QACV,CAAC;QAED,8CAA8C;QAC9C,MAAM,YAAY,GAAa,EAAE,CAAC;QAClC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACzC,MAAM,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;YACtB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;YACvD,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,EAAE;uFACgC,KAAK;MACtF,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC;UACR,CAAC,CAAC;QACR,CAAC;QAED,qDAAqD;QACrD,MAAM,UAAU,GAAG,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;QACpD,MAAM,cAAc,GAAG,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;QAEtE,OAAO,wDAAwD,CAAC,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC;;kBAElF,GAAG,CAAC,QAAQ,CAAC,MAAM,UAAU,CAAC,cAAc,EAAE,aAAa,KAAK,CAAC,MAAM;;;qCAGpD,EAAE;;;;qCAIF,MAAM;qCACN,MAAM;;;;iBAI1B,CAAC,aAAa,CAAC;2IAC2G,MAAM;+GAClC,GAAG,CAAC,QAAQ,CAAC;;MAEtH,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;;;MAGxB,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;;gBAEd,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC;8CACW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY,UAAU;8DACxC,UAAU;;aAE3D,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,WAAW,MAAM;8DACS,UAAU;MAClE,GAAG,CAAC,cAAc,CAAC;;IAErB,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC;oBACT,CAAC,GAAG,EAAE;aACb,CAAC,GAAG,EAAE,QAAQ,CAAC,GAAG,EAAE,WAAW,MAAM,iGAAiG,GAAG,CAAC,KAAK,CAAC;OACtJ,CAAC;IACN,CAAC;IAEO,WAAW,CAAC,OAAe,EAAE,CAAS,EAAE,CAAS,EAAE,SAAiB;QAC1E,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,eAAe,CAAC;QACzE,OAAO,wDAAwD,CAAC,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC;;;;;;;iBAOnF,CAAC,aAAa,CAAC;aACnB,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,gHAAgH,GAAG,CAAC,QAAQ,CAAC;aACpJ,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE;gBACpB,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,GAAG;sDACa,SAAS;iEACE,SAAS;;OAEnE,CAAC;IACN,CAAC;IAEO,eAAe,CAAC,UAAkB,EAAE,SAAiB;QAC3D,IAAI,UAAU,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC;QACnC,IAAI,SAAS,IAAI,EAAE;YAAE,OAAO,KAAK,CAAC;QAClC,IAAI,UAAU,IAAI,IAAI;YAAE,OAAO,KAAK,CAAC;QACrC,IAAI,UAAU,IAAI,GAAG;YAAE,OAAO,KAAK,CAAC;QACpC,OAAO,KAAK,CAAC;IACf,CAAC;IAEO,SAAS,CAAC,OAAe;QAC/B,OAAO;YACL,2CAA2C;YAC3C,EAAE;YACF,cAAc;YACd,IAAI,GAAG,OAAO;YACd,EAAE;YACF,iEAAiE;YACjE,yDAAyD;YACzD,EAAE;YACF,4EAA4E;YAC5E,+BAA+B;YAC/B,EAAE;YACF,0EAA0E;YAC1E,kDAAkD;YAClD,EAAE;YACF,0CAA0C;YAC1C,gDAAgD;YAChD,EAAE;YACF,+EAA+E;YAC/E,2CAA2C;YAC3C,6CAA6C;YAC7C,+BAA+B;YAC/B,0FAA0F;YAC1F,EAAE;YACF,gFAAgF;YAChF,+DAA+D;YAC/D,EAAE;YACF,yEAAyE;YACzE,EAAE;SACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACf,CAAC;CACF;AAED,gFAAgF;AAEhF,SAAS,MAAM,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS;IAC7C,MAAM,KAAK,GAAG,CAAC,CAAS,EAAU,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;IACnE,MAAM,GAAG,GAAG,CAAC,CAAS,EAAU,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAC1E,OAAO,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;AACxC,CAAC;AAED,SAAS,GAAG,CAAC,CAAS;IACpB,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,CAAC,CAAY,CAAA,CAAC,CAAC;AACpI,CAAC;AAED,IAAI,SAAS,GAAuB,IAAI,CAAC;AACzC,MAAM,UAAU,cAAc;IAC5B,IAAI,CAAC,SAAS;QAAE,SAAS,GAAG,IAAI,WAAW,EAAE,CAAC;IAC9C,OAAO,SAAS,CAAC;AACnB,CAAC;AACD,MAAM,UAAU,wBAAwB,KAAW,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC"}
@@ -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"}