@theihtisham/agent-shadow-brain 5.2.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 +310 -1014
- package/dist/brain/agent-firewall.d.ts +7 -0
- package/dist/brain/agent-firewall.d.ts.map +1 -0
- package/dist/brain/agent-firewall.js +152 -0
- package/dist/brain/agent-firewall.js.map +1 -0
- package/dist/brain/agent-handoff.d.ts +19 -0
- package/dist/brain/agent-handoff.d.ts.map +1 -0
- package/dist/brain/agent-handoff.js +127 -0
- package/dist/brain/agent-handoff.js.map +1 -0
- package/dist/brain/air-gap.d.ts +23 -0
- package/dist/brain/air-gap.d.ts.map +1 -0
- package/dist/brain/air-gap.js +137 -0
- package/dist/brain/air-gap.js.map +1 -0
- package/dist/brain/attention-heatmap.d.ts +24 -0
- package/dist/brain/attention-heatmap.d.ts.map +1 -0
- package/dist/brain/attention-heatmap.js +108 -0
- package/dist/brain/attention-heatmap.js.map +1 -0
- package/dist/brain/auto-setup.js +19 -14
- package/dist/brain/auto-setup.js.map +1 -1
- package/dist/brain/auto-update.js +1 -1
- 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-chat.d.ts +42 -0
- package/dist/brain/brain-chat.d.ts.map +1 -0
- package/dist/brain/brain-chat.js +162 -0
- package/dist/brain/brain-chat.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-encryption.d.ts +14 -0
- package/dist/brain/brain-encryption.d.ts.map +1 -0
- package/dist/brain/brain-encryption.js +68 -0
- package/dist/brain/brain-encryption.js.map +1 -0
- package/dist/brain/brain-exchange.d.ts +30 -0
- package/dist/brain/brain-exchange.d.ts.map +1 -0
- package/dist/brain/brain-exchange.js +106 -0
- package/dist/brain/brain-exchange.js.map +1 -0
- package/dist/brain/brain-garden.d.ts +18 -0
- package/dist/brain/brain-garden.d.ts.map +1 -0
- package/dist/brain/brain-garden.js +81 -0
- package/dist/brain/brain-garden.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-portability.js +1 -1
- 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/branch-brain.d.ts +23 -0
- package/dist/brain/branch-brain.d.ts.map +1 -0
- package/dist/brain/branch-brain.js +159 -0
- package/dist/brain/branch-brain.js.map +1 -0
- package/dist/brain/calibration-monitor.d.ts +20 -0
- package/dist/brain/calibration-monitor.d.ts.map +1 -0
- package/dist/brain/calibration-monitor.js +144 -0
- package/dist/brain/calibration-monitor.js.map +1 -0
- package/dist/brain/causal-chains.d.ts +37 -0
- package/dist/brain/causal-chains.d.ts.map +1 -0
- package/dist/brain/causal-chains.js +250 -0
- package/dist/brain/causal-chains.js.map +1 -0
- package/dist/brain/collision-detective.d.ts +32 -0
- package/dist/brain/collision-detective.d.ts.map +1 -0
- package/dist/brain/collision-detective.js +233 -0
- package/dist/brain/collision-detective.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/cost-aware-spawner.d.ts +7 -0
- package/dist/brain/cost-aware-spawner.d.ts.map +1 -0
- package/dist/brain/cost-aware-spawner.js +77 -0
- package/dist/brain/cost-aware-spawner.js.map +1 -0
- package/dist/brain/dream-engine.d.ts +35 -0
- package/dist/brain/dream-engine.d.ts.map +1 -0
- package/dist/brain/dream-engine.js +273 -0
- package/dist/brain/dream-engine.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/embeddings.d.ts +27 -0
- package/dist/brain/embeddings.d.ts.map +1 -0
- package/dist/brain/embeddings.js +175 -0
- package/dist/brain/embeddings.js.map +1 -0
- package/dist/brain/forgetting-curve.d.ts +21 -0
- package/dist/brain/forgetting-curve.d.ts.map +1 -0
- package/dist/brain/forgetting-curve.js +174 -0
- package/dist/brain/forgetting-curve.js.map +1 -0
- package/dist/brain/formal-verification-bridge.d.ts +26 -0
- package/dist/brain/formal-verification-bridge.d.ts.map +1 -0
- package/dist/brain/formal-verification-bridge.js +219 -0
- package/dist/brain/formal-verification-bridge.js.map +1 -0
- package/dist/brain/global-brain.d.ts +8 -1
- package/dist/brain/global-brain.d.ts.map +1 -1
- package/dist/brain/global-brain.js +24 -0
- package/dist/brain/global-brain.js.map +1 -1
- package/dist/brain/hallucination-quarantine.d.ts +26 -0
- package/dist/brain/hallucination-quarantine.d.ts.map +1 -0
- package/dist/brain/hallucination-quarantine.js +135 -0
- package/dist/brain/hallucination-quarantine.js.map +1 -0
- package/dist/brain/hive-accelerator.d.ts +39 -0
- package/dist/brain/hive-accelerator.d.ts.map +1 -0
- package/dist/brain/hive-accelerator.js +152 -0
- package/dist/brain/hive-accelerator.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/json-output.d.ts +26 -0
- package/dist/brain/json-output.d.ts.map +1 -0
- package/dist/brain/json-output.js +112 -0
- package/dist/brain/json-output.js.map +1 -0
- package/dist/brain/l0-cache.js +1 -1
- package/dist/brain/l0-cache.js.map +1 -1
- package/dist/brain/local-llm.d.ts +20 -0
- package/dist/brain/local-llm.d.ts.map +1 -0
- package/dist/brain/local-llm.js +132 -0
- package/dist/brain/local-llm.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/mcp-server.d.ts +40 -0
- package/dist/brain/mcp-server.d.ts.map +1 -1
- package/dist/brain/mcp-server.js +395 -12
- package/dist/brain/mcp-server.js.map +1 -1
- package/dist/brain/model-registry.d.ts +96 -0
- package/dist/brain/model-registry.d.ts.map +1 -0
- package/dist/brain/model-registry.js +585 -0
- package/dist/brain/model-registry.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/orchestrator.js +1 -1
- 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/brain/pr-auto-review.d.ts +17 -0
- package/dist/brain/pr-auto-review.d.ts.map +1 -0
- package/dist/brain/pr-auto-review.js +73 -0
- package/dist/brain/pr-auto-review.js.map +1 -0
- package/dist/brain/pre-mortem.d.ts +21 -0
- package/dist/brain/pre-mortem.d.ts.map +1 -0
- package/dist/brain/pre-mortem.js +210 -0
- package/dist/brain/pre-mortem.js.map +1 -0
- package/dist/brain/prompt-cache.d.ts +54 -0
- package/dist/brain/prompt-cache.d.ts.map +1 -0
- package/dist/brain/prompt-cache.js +105 -0
- package/dist/brain/prompt-cache.js.map +1 -0
- package/dist/brain/reputation-ledger.d.ts +42 -0
- package/dist/brain/reputation-ledger.d.ts.map +1 -0
- package/dist/brain/reputation-ledger.js +326 -0
- package/dist/brain/reputation-ledger.js.map +1 -0
- package/dist/brain/session-hooks.d.ts +19 -0
- package/dist/brain/session-hooks.d.ts.map +1 -1
- package/dist/brain/session-hooks.js +249 -18
- package/dist/brain/session-hooks.js.map +1 -1
- package/dist/brain/subagent-bridge.d.ts +46 -0
- package/dist/brain/subagent-bridge.d.ts.map +1 -0
- package/dist/brain/subagent-bridge.js +364 -0
- package/dist/brain/subagent-bridge.js.map +1 -0
- package/dist/brain/swarm-debate.d.ts +22 -0
- package/dist/brain/swarm-debate.d.ts.map +1 -0
- package/dist/brain/swarm-debate.js +134 -0
- package/dist/brain/swarm-debate.js.map +1 -0
- package/dist/brain/team-brain-sync.d.ts +22 -0
- package/dist/brain/team-brain-sync.d.ts.map +1 -0
- package/dist/brain/team-brain-sync.js +132 -0
- package/dist/brain/team-brain-sync.js.map +1 -0
- package/dist/brain/token-economy.d.ts +25 -0
- package/dist/brain/token-economy.d.ts.map +1 -0
- package/dist/brain/token-economy.js +216 -0
- package/dist/brain/token-economy.js.map +1 -0
- package/dist/brain/voice-mode.d.ts +15 -0
- package/dist/brain/voice-mode.d.ts.map +1 -0
- package/dist/brain/voice-mode.js +97 -0
- package/dist/brain/voice-mode.js.map +1 -0
- package/dist/cli.js +1702 -4
- package/dist/cli.js.map +1 -1
- package/dist/dashboard/server.d.ts +6 -0
- package/dist/dashboard/server.d.ts.map +1 -1
- package/dist/dashboard/server.js +1118 -368
- package/dist/dashboard/server.js.map +1 -1
- package/dist/dashboard/v6-dashboard-html.d.ts +2 -0
- package/dist/dashboard/v6-dashboard-html.d.ts.map +1 -0
- package/dist/dashboard/v6-dashboard-html.js +2474 -0
- package/dist/dashboard/v6-dashboard-html.js.map +1 -0
- package/dist/index.d.ts +27 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +29 -1
- package/dist/index.js.map +1 -1
- package/dist/types.d.ts +518 -2
- package/dist/types.d.ts.map +1 -1
- package/package.json +33 -4
|
@@ -0,0 +1,336 @@
|
|
|
1
|
+
// src/brain/brain-dna.ts — Brain DNA (viral feature)
|
|
2
|
+
// v6.0.2
|
|
3
|
+
//
|
|
4
|
+
// Spotify-Wrapped-style shareable card for a brain's "personality". Reads the
|
|
5
|
+
// Global Brain (and the Replay log when present) to compute archetypes + a
|
|
6
|
+
// one-page SVG card optimized for Instagram / Twitter / LinkedIn sharing.
|
|
7
|
+
//
|
|
8
|
+
// Pure-SVG, zero new npm deps. Graceful when the brain has zero events.
|
|
9
|
+
import * as fs from 'fs';
|
|
10
|
+
import * as path from 'path';
|
|
11
|
+
import * as os from 'os';
|
|
12
|
+
import { GlobalBrain, getGlobalBrain } from './global-brain.js';
|
|
13
|
+
import { getBrainReplay } from './brain-replay.js';
|
|
14
|
+
const ARCHETYPES = [
|
|
15
|
+
{ name: 'The Debugger', tagline: 'Hunts root causes through collision chains.', accent: '#ff6b8a', glyph: 'DBG' },
|
|
16
|
+
{ name: 'The Architect', tagline: 'Builds decisions into living blueprints.', accent: '#a78bfa', glyph: 'ARC' },
|
|
17
|
+
{ name: 'The Speedster', tagline: 'Sub-millisecond recall, every single call.', accent: '#00ffd5', glyph: 'SPD' },
|
|
18
|
+
{ name: 'The Scholar', tagline: 'Reads more than it writes. Knows why.', accent: '#fbbf24', glyph: 'SCH' },
|
|
19
|
+
{ name: 'The Cartographer', tagline: 'Maps every dependency, every drift.', accent: '#34d399', glyph: 'CTG' },
|
|
20
|
+
{ name: 'The Diplomat', tagline: 'Negotiates handoffs between agents.', accent: '#60a5fa', glyph: 'DIP' },
|
|
21
|
+
{ name: 'The Sentinel', tagline: 'Quarantines hallucinations before they ship.', accent: '#f87171', glyph: 'SEN' },
|
|
22
|
+
{ name: 'The Wanderer', tagline: 'Young brain, vast horizons, no fixed star.', accent: '#7dd3fc', glyph: 'WND' },
|
|
23
|
+
];
|
|
24
|
+
// ── Class ────────────────────────────────────────────────────────────────────
|
|
25
|
+
export class BrainDna {
|
|
26
|
+
constructor(brain, replay) {
|
|
27
|
+
this.brain = brain ?? getGlobalBrain();
|
|
28
|
+
this.replay = replay ?? getBrainReplay();
|
|
29
|
+
}
|
|
30
|
+
/** Generate a DNA card for a project. Returns SVG string + computed stats. */
|
|
31
|
+
generate(project, opts = {}) {
|
|
32
|
+
const stats = this.computeStats(project);
|
|
33
|
+
const style = opts.style ?? 'card';
|
|
34
|
+
const svg = style === 'banner'
|
|
35
|
+
? this.renderBanner(project, stats)
|
|
36
|
+
: style === 'poster'
|
|
37
|
+
? this.renderPoster(project, stats)
|
|
38
|
+
: this.renderCard(project, stats);
|
|
39
|
+
return { svg, stats };
|
|
40
|
+
}
|
|
41
|
+
/** Side-by-side comparison of two projects. */
|
|
42
|
+
compareCards(projectA, projectB) {
|
|
43
|
+
const a = this.computeStats(projectA);
|
|
44
|
+
const b = this.computeStats(projectB);
|
|
45
|
+
const left = this.renderCard(projectA, a, { half: 'left' });
|
|
46
|
+
const right = this.renderCard(projectB, b, { half: 'right' });
|
|
47
|
+
return { svg: this.composeSideBySide(projectA, a, projectB, b, left, right) };
|
|
48
|
+
}
|
|
49
|
+
/** Names of all defined archetypes. */
|
|
50
|
+
topArchetypes() { return ARCHETYPES.map(a => a.name); }
|
|
51
|
+
/** Compute the raw stats (no rendering). Public for tooling/tests. */
|
|
52
|
+
computeStats(project) {
|
|
53
|
+
this.safeInit();
|
|
54
|
+
const projectId = this.resolveProjectId(project);
|
|
55
|
+
const entries = this.brain.recall({ projectId, limit: 5000 });
|
|
56
|
+
let events = [];
|
|
57
|
+
try {
|
|
58
|
+
events = this.replay.listEvents(project);
|
|
59
|
+
}
|
|
60
|
+
catch { /* empty */ }
|
|
61
|
+
const entitySet = new Set();
|
|
62
|
+
const agentCounts = new Map();
|
|
63
|
+
const categoryCounts = new Map();
|
|
64
|
+
const languageCounts = new Map();
|
|
65
|
+
let firstSeen = Number.POSITIVE_INFINITY;
|
|
66
|
+
let lastSeen = 0;
|
|
67
|
+
for (const e of entries) {
|
|
68
|
+
const t = e.createdAt instanceof Date ? e.createdAt.getTime() : Number(e.createdAt);
|
|
69
|
+
if (t < firstSeen)
|
|
70
|
+
firstSeen = t;
|
|
71
|
+
if (t > lastSeen)
|
|
72
|
+
lastSeen = t;
|
|
73
|
+
agentCounts.set(e.agentTool, (agentCounts.get(e.agentTool) ?? 0) + 1);
|
|
74
|
+
categoryCounts.set(e.category, (categoryCounts.get(e.category) ?? 0) + 1);
|
|
75
|
+
entitySet.add(e.id);
|
|
76
|
+
const lang = e.metadata?.language ?? e.metadata?.lang;
|
|
77
|
+
if (lang)
|
|
78
|
+
languageCounts.set(lang, (languageCounts.get(lang) ?? 0) + 1);
|
|
79
|
+
}
|
|
80
|
+
for (const ev of events) {
|
|
81
|
+
const key = ev.payload?.entity
|
|
82
|
+
?? ev.payload?.id;
|
|
83
|
+
if (key)
|
|
84
|
+
entitySet.add(key);
|
|
85
|
+
if (ev.agent)
|
|
86
|
+
agentCounts.set(ev.agent, (agentCounts.get(ev.agent) ?? 0) + 1);
|
|
87
|
+
if (ev.ts < firstSeen)
|
|
88
|
+
firstSeen = ev.ts;
|
|
89
|
+
if (ev.ts > lastSeen)
|
|
90
|
+
lastSeen = ev.ts;
|
|
91
|
+
}
|
|
92
|
+
const hasData = entries.length > 0 || events.length > 0;
|
|
93
|
+
const ageDays = hasData && isFinite(firstSeen)
|
|
94
|
+
? Math.max(0, (lastSeen - firstSeen) / (24 * 60 * 60 * 1000))
|
|
95
|
+
: 0;
|
|
96
|
+
const collisions = events.filter(e => e.type.includes('collision')).length;
|
|
97
|
+
const decisions = entries.filter(e => /decision|adr|architecture/i.test(e.category)).length
|
|
98
|
+
+ events.filter(e => e.type.includes('decision') || e.type.includes('adr')).length;
|
|
99
|
+
const hallucinations = events.filter(e => e.type.includes('hallucination') || e.type.includes('quarantine')).length;
|
|
100
|
+
const totalMemories = entries.length
|
|
101
|
+
+ events.filter(e => e.type === 'memory.write' || e.type === 'brain.remember').length;
|
|
102
|
+
const cacheHits = events.filter(e => e.type === 'cache.hit').length;
|
|
103
|
+
const cacheMisses = events.filter(e => e.type === 'cache.miss').length;
|
|
104
|
+
const cacheTotal = cacheHits + cacheMisses;
|
|
105
|
+
const cacheHitRate = cacheTotal > 0 ? cacheHits / cacheTotal : undefined;
|
|
106
|
+
const archetype = this.pickArchetype({
|
|
107
|
+
collisions, decisions, cacheHitRate, hallucinations,
|
|
108
|
+
totalMemories, ageDays,
|
|
109
|
+
agentVariety: agentCounts.size,
|
|
110
|
+
eventCount: events.length,
|
|
111
|
+
});
|
|
112
|
+
const arc = ARCHETYPES.find(a => a.name === archetype);
|
|
113
|
+
return {
|
|
114
|
+
topEntities: Array.from(entitySet).slice(0, 5),
|
|
115
|
+
dominantPatterns: topN(categoryCounts, 5),
|
|
116
|
+
agentContributions: Array.from(agentCounts.entries())
|
|
117
|
+
.sort((a, b) => b[1] - a[1]).slice(0, 4)
|
|
118
|
+
.map(([agent, count]) => ({ agent, count })),
|
|
119
|
+
totalMemories,
|
|
120
|
+
totalEntities: entitySet.size,
|
|
121
|
+
ageDays: Math.round(ageDays * 10) / 10,
|
|
122
|
+
topLanguages: topN(languageCounts, 3),
|
|
123
|
+
hallucinationsCaught: hallucinations,
|
|
124
|
+
archetype,
|
|
125
|
+
archetypeTagline: arc.tagline,
|
|
126
|
+
cacheHitRate,
|
|
127
|
+
decisionsRecorded: decisions,
|
|
128
|
+
collisionsDetected: collisions,
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
// ── Internals ──────────────────────────────────────────────────────────────
|
|
132
|
+
safeInit() {
|
|
133
|
+
// Brain may be uninitialized; calling recall pre-init returns []. We avoid
|
|
134
|
+
// forcing init() because callers in test contexts may construct mocks.
|
|
135
|
+
try {
|
|
136
|
+
void this.brain.getStats();
|
|
137
|
+
}
|
|
138
|
+
catch { /* swallow */ }
|
|
139
|
+
}
|
|
140
|
+
resolveProjectId(project) {
|
|
141
|
+
try {
|
|
142
|
+
return GlobalBrain.projectIdFor(project);
|
|
143
|
+
}
|
|
144
|
+
catch {
|
|
145
|
+
return '';
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
pickArchetype(s) {
|
|
149
|
+
if (s.eventCount === 0 && s.totalMemories === 0)
|
|
150
|
+
return 'The Wanderer';
|
|
151
|
+
if (s.collisions >= 5 && s.collisions > s.decisions)
|
|
152
|
+
return 'The Debugger';
|
|
153
|
+
if (s.decisions >= 5)
|
|
154
|
+
return 'The Architect';
|
|
155
|
+
if ((s.cacheHitRate ?? 0) >= 0.8)
|
|
156
|
+
return 'The Speedster';
|
|
157
|
+
if (s.hallucinations >= 3)
|
|
158
|
+
return 'The Sentinel';
|
|
159
|
+
if (s.agentVariety >= 3)
|
|
160
|
+
return 'The Diplomat';
|
|
161
|
+
if (s.totalMemories >= 200)
|
|
162
|
+
return 'The Scholar';
|
|
163
|
+
if (s.ageDays >= 30)
|
|
164
|
+
return 'The Cartographer';
|
|
165
|
+
return 'The Wanderer';
|
|
166
|
+
}
|
|
167
|
+
// ── Renderers ──────────────────────────────────────────────────────────────
|
|
168
|
+
renderCard(project, stats, opts = {}) {
|
|
169
|
+
const W = 1080, H = 1080, P = 64;
|
|
170
|
+
const arc = ARCHETYPES.find(a => a.name === stats.archetype);
|
|
171
|
+
const projName = path.basename(path.resolve(project)) || 'unknown-brain';
|
|
172
|
+
const metrics = this.metricGrid(stats);
|
|
173
|
+
const gridStartY = 540;
|
|
174
|
+
const grid = [];
|
|
175
|
+
const cols = 3;
|
|
176
|
+
const cellW = (W - P * 2) / cols;
|
|
177
|
+
const cellH = 130;
|
|
178
|
+
metrics.forEach((m, i) => {
|
|
179
|
+
const x = P + (i % cols) * cellW;
|
|
180
|
+
const y = gridStartY + Math.floor(i / cols) * cellH;
|
|
181
|
+
grid.push(`<g transform="translate(${x},${y})">
|
|
182
|
+
<text x="0" y="22" fill="#7dd3fc" font-size="13" font-family="ui-sans-serif,system-ui" opacity="0.75">${esc(m.label)}</text>
|
|
183
|
+
<text x="0" y="64" fill="#e2f5ff" font-size="34" font-family="ui-monospace,SFMono-Regular,Menlo,monospace" font-weight="700">${esc(m.value)}</text>
|
|
184
|
+
<text x="0" y="86" fill="#7dd3fc" font-size="11" font-family="ui-monospace,monospace" opacity="0.55">${esc(m.sub)}</text>
|
|
185
|
+
</g>`);
|
|
186
|
+
});
|
|
187
|
+
const halfTag = opts.half ? ` data-half="${opts.half}"` : '';
|
|
188
|
+
return `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 ${W} ${H}" width="${W}" height="${H}"${halfTag}>
|
|
189
|
+
<!-- TODO: Ed25519-signed export marker -->
|
|
190
|
+
<defs>
|
|
191
|
+
<linearGradient id="card-bg" x1="0" y1="0" x2="1" y2="1">
|
|
192
|
+
<stop offset="0" stop-color="#061224"/>
|
|
193
|
+
<stop offset="0.5" stop-color="#0a1628"/>
|
|
194
|
+
<stop offset="1" stop-color="#0d2540"/>
|
|
195
|
+
</linearGradient>
|
|
196
|
+
<radialGradient id="halo" cx="0.5" cy="0.32" r="0.55">
|
|
197
|
+
<stop offset="0" stop-color="${arc.accent}" stop-opacity="0.35"/>
|
|
198
|
+
<stop offset="1" stop-color="${arc.accent}" stop-opacity="0"/>
|
|
199
|
+
</radialGradient>
|
|
200
|
+
<linearGradient id="hero" x1="0" y1="0" x2="1" y2="0">
|
|
201
|
+
<stop offset="0" stop-color="${arc.accent}"/>
|
|
202
|
+
<stop offset="1" stop-color="#00ffd5"/>
|
|
203
|
+
</linearGradient>
|
|
204
|
+
</defs>
|
|
205
|
+
<rect width="${W}" height="${H}" fill="url(#card-bg)"/>
|
|
206
|
+
<rect width="${W}" height="${H}" fill="url(#halo)"/>
|
|
207
|
+
<text x="${P}" y="96" fill="#7dd3fc" font-size="14" font-family="ui-monospace,monospace" letter-spacing="3">BRAIN DNA · v6.0.2</text>
|
|
208
|
+
<text x="${P}" y="140" fill="#e2f5ff" font-size="38" font-family="ui-sans-serif,system-ui" font-weight="600">${esc(projName)}</text>
|
|
209
|
+
<text x="${P}" y="170" fill="#7dd3fc" font-size="16" font-family="ui-monospace,monospace" opacity="0.7">${stats.ageDays.toFixed(1)} days alive</text>
|
|
210
|
+
|
|
211
|
+
<g transform="translate(${P},${260})">
|
|
212
|
+
<text x="0" y="0" fill="#7dd3fc" font-size="14" font-family="ui-monospace,monospace" opacity="0.75" letter-spacing="2">PERSONALITY ARCHETYPE</text>
|
|
213
|
+
<text x="0" y="80" fill="url(#hero)" font-size="84" font-family="ui-sans-serif,system-ui" font-weight="800">${esc(stats.archetype)}</text>
|
|
214
|
+
<text x="0" y="120" fill="#cfe9ff" font-size="20" font-family="ui-sans-serif,system-ui" opacity="0.85">${esc(stats.archetypeTagline)}</text>
|
|
215
|
+
<rect x="0" y="150" width="120" height="3" fill="${arc.accent}"/>
|
|
216
|
+
</g>
|
|
217
|
+
|
|
218
|
+
${grid.join('\n ')}
|
|
219
|
+
|
|
220
|
+
<text x="${P}" y="${H - 76}" fill="#7dd3fc" font-size="13" font-family="ui-monospace,monospace" opacity="0.8">Powered by @shadow-brain</text>
|
|
221
|
+
<text x="${P}" y="${H - 52}" fill="#cfe9ff" font-size="14" font-family="ui-monospace,monospace">npm i -g @theihtisham/agent-shadow-brain</text>
|
|
222
|
+
<text x="${W - P}" y="${H - 52}" fill="${arc.accent}" font-size="16" font-family="ui-monospace,monospace" text-anchor="end" font-weight="700">${arc.glyph}</text>
|
|
223
|
+
</svg>`;
|
|
224
|
+
}
|
|
225
|
+
renderBanner(project, stats) {
|
|
226
|
+
const W = 1500, H = 500;
|
|
227
|
+
const arc = ARCHETYPES.find(a => a.name === stats.archetype);
|
|
228
|
+
const projName = path.basename(path.resolve(project)) || 'unknown-brain';
|
|
229
|
+
return `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 ${W} ${H}" width="${W}" height="${H}">
|
|
230
|
+
<!-- TODO: Ed25519-signed export marker -->
|
|
231
|
+
<defs>
|
|
232
|
+
<linearGradient id="b-bg" x1="0" y1="0" x2="1" y2="1">
|
|
233
|
+
<stop offset="0" stop-color="#061224"/><stop offset="1" stop-color="#0d2540"/>
|
|
234
|
+
</linearGradient>
|
|
235
|
+
<linearGradient id="b-hero" x1="0" y1="0" x2="1" y2="0">
|
|
236
|
+
<stop offset="0" stop-color="${arc.accent}"/><stop offset="1" stop-color="#00ffd5"/>
|
|
237
|
+
</linearGradient>
|
|
238
|
+
</defs>
|
|
239
|
+
<rect width="${W}" height="${H}" fill="url(#b-bg)"/>
|
|
240
|
+
<text x="48" y="80" fill="#7dd3fc" font-size="14" font-family="ui-monospace,monospace" letter-spacing="3">BRAIN DNA</text>
|
|
241
|
+
<text x="48" y="160" fill="#e2f5ff" font-size="48" font-family="ui-sans-serif,system-ui" font-weight="600">${esc(projName)}</text>
|
|
242
|
+
<text x="48" y="280" fill="url(#b-hero)" font-size="96" font-family="ui-sans-serif,system-ui" font-weight="800">${esc(stats.archetype)}</text>
|
|
243
|
+
<text x="48" y="320" fill="#cfe9ff" font-size="20" font-family="ui-sans-serif,system-ui" opacity="0.85">${esc(stats.archetypeTagline)}</text>
|
|
244
|
+
<text x="48" y="${H - 40}" fill="#7dd3fc" font-size="14" font-family="ui-monospace,monospace">npm i -g @theihtisham/agent-shadow-brain</text>
|
|
245
|
+
<text x="${W - 48}" y="${H - 40}" fill="${arc.accent}" font-size="18" font-family="ui-monospace,monospace" text-anchor="end" font-weight="700">${stats.totalMemories} memories · ${stats.totalEntities} entities · ${stats.ageDays}d</text>
|
|
246
|
+
</svg>`;
|
|
247
|
+
}
|
|
248
|
+
renderPoster(project, stats) {
|
|
249
|
+
// Poster = vertical 1080x1920 (Story-shaped)
|
|
250
|
+
const W = 1080, H = 1920, P = 72;
|
|
251
|
+
const arc = ARCHETYPES.find(a => a.name === stats.archetype);
|
|
252
|
+
const projName = path.basename(path.resolve(project)) || 'unknown-brain';
|
|
253
|
+
const metrics = this.metricGrid(stats);
|
|
254
|
+
const items = metrics.map((m, i) => `<g transform="translate(${P},${720 + i * 130})">
|
|
255
|
+
<text x="0" y="0" fill="#7dd3fc" font-size="14" font-family="ui-monospace,monospace" opacity="0.7">${esc(m.label)}</text>
|
|
256
|
+
<text x="0" y="48" fill="#e2f5ff" font-size="40" font-family="ui-monospace,monospace" font-weight="700">${esc(m.value)}</text>
|
|
257
|
+
<text x="0" y="74" fill="#7dd3fc" font-size="12" font-family="ui-monospace,monospace" opacity="0.55">${esc(m.sub)}</text>
|
|
258
|
+
</g>`).join('\n ');
|
|
259
|
+
return `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 ${W} ${H}" width="${W}" height="${H}">
|
|
260
|
+
<!-- TODO: Ed25519-signed export marker -->
|
|
261
|
+
<defs>
|
|
262
|
+
<linearGradient id="p-bg" x1="0" y1="0" x2="0" y2="1">
|
|
263
|
+
<stop offset="0" stop-color="#061224"/><stop offset="1" stop-color="#0d2540"/>
|
|
264
|
+
</linearGradient>
|
|
265
|
+
<linearGradient id="p-hero" x1="0" y1="0" x2="1" y2="0">
|
|
266
|
+
<stop offset="0" stop-color="${arc.accent}"/><stop offset="1" stop-color="#00ffd5"/>
|
|
267
|
+
</linearGradient>
|
|
268
|
+
</defs>
|
|
269
|
+
<rect width="${W}" height="${H}" fill="url(#p-bg)"/>
|
|
270
|
+
<text x="${P}" y="160" fill="#7dd3fc" font-size="14" font-family="ui-monospace,monospace" letter-spacing="4">BRAIN DNA · v6.0.2</text>
|
|
271
|
+
<text x="${P}" y="230" fill="#e2f5ff" font-size="56" font-family="ui-sans-serif,system-ui" font-weight="600">${esc(projName)}</text>
|
|
272
|
+
<text x="${P}" y="460" fill="url(#p-hero)" font-size="110" font-family="ui-sans-serif,system-ui" font-weight="800">${esc(stats.archetype)}</text>
|
|
273
|
+
<text x="${P}" y="500" fill="#cfe9ff" font-size="22" font-family="ui-sans-serif,system-ui" opacity="0.85">${esc(stats.archetypeTagline)}</text>
|
|
274
|
+
${items}
|
|
275
|
+
<text x="${P}" y="${H - 80}" fill="#7dd3fc" font-size="14" font-family="ui-monospace,monospace">npm i -g @theihtisham/agent-shadow-brain</text>
|
|
276
|
+
</svg>`;
|
|
277
|
+
}
|
|
278
|
+
composeSideBySide(pA, sA, pB, sB, _leftSvg, _rightSvg) {
|
|
279
|
+
// Compose a fresh side-by-side instead of nesting two large SVGs.
|
|
280
|
+
const W = 2200, H = 1080, gap = 40;
|
|
281
|
+
const inner = (this.renderCard(pA, sA, { half: 'left' }))
|
|
282
|
+
.replace(/^<svg[^>]+>/, '').replace(/<\/svg>\s*$/, '');
|
|
283
|
+
const inner2 = (this.renderCard(pB, sB, { half: 'right' }))
|
|
284
|
+
.replace(/^<svg[^>]+>/, '').replace(/<\/svg>\s*$/, '');
|
|
285
|
+
return `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 ${W} ${H}" width="${W}" height="${H}">
|
|
286
|
+
<rect width="${W}" height="${H}" fill="#020812"/>
|
|
287
|
+
<g transform="translate(0,0)">${inner}</g>
|
|
288
|
+
<g transform="translate(${1080 + gap},0)">${inner2}</g>
|
|
289
|
+
<line x1="${1080 + gap / 2}" y1="40" x2="${1080 + gap / 2}" y2="${H - 40}" stroke="#1a3a5a" stroke-width="1"/>
|
|
290
|
+
</svg>`;
|
|
291
|
+
}
|
|
292
|
+
metricGrid(stats) {
|
|
293
|
+
const topAgent = stats.agentContributions[0];
|
|
294
|
+
const topLang = stats.topLanguages[0] ?? '—';
|
|
295
|
+
return [
|
|
296
|
+
{ label: 'MEMORIES', value: fmt(stats.totalMemories), sub: 'recorded thoughts' },
|
|
297
|
+
{ label: 'ENTITIES', value: fmt(stats.totalEntities), sub: 'tracked symbols' },
|
|
298
|
+
{ label: 'DAYS ALIVE', value: stats.ageDays.toFixed(1), sub: 'since first event' },
|
|
299
|
+
{ label: 'TOP LANGUAGE', value: topLang.toUpperCase().slice(0, 12), sub: 'most-tagged' },
|
|
300
|
+
{ label: 'TOP AGENT', value: (topAgent?.agent ?? 'none').slice(0, 14), sub: `${topAgent?.count ?? 0} contributions` },
|
|
301
|
+
{ label: 'HALLUCINATIONS', value: fmt(stats.hallucinationsCaught), sub: 'caught + quarantined' },
|
|
302
|
+
];
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
// ── Helpers ──────────────────────────────────────────────────────────────────
|
|
306
|
+
function topN(m, n) {
|
|
307
|
+
return Array.from(m.entries()).sort((a, b) => b[1] - a[1]).slice(0, n).map(([k]) => k);
|
|
308
|
+
}
|
|
309
|
+
function fmt(n) {
|
|
310
|
+
if (n >= 1000000)
|
|
311
|
+
return (n / 1000000).toFixed(1) + 'M';
|
|
312
|
+
if (n >= 1000)
|
|
313
|
+
return (n / 1000).toFixed(1) + 'k';
|
|
314
|
+
return String(n);
|
|
315
|
+
}
|
|
316
|
+
function esc(s) {
|
|
317
|
+
return String(s).replace(/[&<>"']/g, c => ({ '&': '&', '<': '<', '>': '>', '"': '"', "'": ''' }[c]));
|
|
318
|
+
}
|
|
319
|
+
// PNG rasterization: only enable if `node-canvas` is present at runtime. Guarded
|
|
320
|
+
// behind a try-import-shaped helper. SVG is always produced.
|
|
321
|
+
export async function rasterizeToPng(_svg) {
|
|
322
|
+
// TODO: detect node-canvas at runtime via createRequire and rasterize.
|
|
323
|
+
// Currently returns null — callers should treat PNG as opt-in.
|
|
324
|
+
void _svg;
|
|
325
|
+
void os;
|
|
326
|
+
void fs;
|
|
327
|
+
return null;
|
|
328
|
+
}
|
|
329
|
+
let _instance = null;
|
|
330
|
+
export function getBrainDna() {
|
|
331
|
+
if (!_instance)
|
|
332
|
+
_instance = new BrainDna();
|
|
333
|
+
return _instance;
|
|
334
|
+
}
|
|
335
|
+
export function resetBrainDnaForTests() { _instance = null; }
|
|
336
|
+
//# sourceMappingURL=brain-dna.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"brain-dna.js","sourceRoot":"","sources":["../../src/brain/brain-dna.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { BrainDna } from './brain-dna.js';
|
|
2
|
+
export type PoolKind = 'local' | 'exchange' | 'all';
|
|
3
|
+
export interface DoppelgangerMatch {
|
|
4
|
+
otherProject: string;
|
|
5
|
+
similarity: number;
|
|
6
|
+
sharedArchetype: boolean;
|
|
7
|
+
sharedEntities: string[];
|
|
8
|
+
divergentEntities: string[];
|
|
9
|
+
compatibilityScore: number;
|
|
10
|
+
blurb: string;
|
|
11
|
+
svg: string;
|
|
12
|
+
}
|
|
13
|
+
export declare class BrainDoppelganger {
|
|
14
|
+
private dna;
|
|
15
|
+
constructor(dna?: BrainDna);
|
|
16
|
+
/** Find similar brains across the chosen pool. */
|
|
17
|
+
findMatches(project: string, opts?: {
|
|
18
|
+
pool?: PoolKind;
|
|
19
|
+
topK?: number;
|
|
20
|
+
minSimilarity?: number;
|
|
21
|
+
}): Promise<DoppelgangerMatch[]>;
|
|
22
|
+
/** Render a 1200x630 horizontal compatibility card for two projects. */
|
|
23
|
+
compatibilityCard(myProject: string, otherProject: string): Promise<{
|
|
24
|
+
svg: string;
|
|
25
|
+
}>;
|
|
26
|
+
private collectPool;
|
|
27
|
+
private collectLocal;
|
|
28
|
+
private collectExchange;
|
|
29
|
+
}
|
|
30
|
+
export declare function getBrainDoppelganger(): BrainDoppelganger;
|
|
31
|
+
export declare function resetBrainDoppelgangerForTests(): void;
|
|
32
|
+
//# sourceMappingURL=brain-doppelganger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"brain-doppelganger.d.ts","sourceRoot":"","sources":["../../src/brain/brain-doppelganger.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,QAAQ,EAA6C,MAAM,gBAAgB,CAAC;AAIrF,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,UAAU,GAAG,KAAK,CAAC;AAEpD,MAAM,WAAW,iBAAiB;IAChC,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,OAAO,CAAC;IACzB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;CACb;AAwBD,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,GAAG,CAAW;gBAEV,GAAG,CAAC,EAAE,QAAQ;IAI1B,kDAAkD;IAC5C,WAAW,CACf,OAAO,EAAE,MAAM,EACf,IAAI,GAAE;QAAE,IAAI,CAAC,EAAE,QAAQ,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,aAAa,CAAC,EAAE,MAAM,CAAA;KAAO,GACpE,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAmE/B,wEAAwE;IAClE,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;YAa5E,WAAW;IAazB,OAAO,CAAC,YAAY;YAuBN,eAAe;CAgB9B;AAmSD,wBAAgB,oBAAoB,IAAI,iBAAiB,CAGxD;AACD,wBAAgB,8BAA8B,IAAI,IAAI,CAAsB"}
|