@theihtisham/agent-shadow-brain 5.2.0 → 6.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (161) hide show
  1. package/README.md +225 -1029
  2. package/dist/brain/agent-firewall.d.ts +7 -0
  3. package/dist/brain/agent-firewall.d.ts.map +1 -0
  4. package/dist/brain/agent-firewall.js +152 -0
  5. package/dist/brain/agent-firewall.js.map +1 -0
  6. package/dist/brain/agent-handoff.d.ts +19 -0
  7. package/dist/brain/agent-handoff.d.ts.map +1 -0
  8. package/dist/brain/agent-handoff.js +127 -0
  9. package/dist/brain/agent-handoff.js.map +1 -0
  10. package/dist/brain/air-gap.d.ts +23 -0
  11. package/dist/brain/air-gap.d.ts.map +1 -0
  12. package/dist/brain/air-gap.js +137 -0
  13. package/dist/brain/air-gap.js.map +1 -0
  14. package/dist/brain/attention-heatmap.d.ts +24 -0
  15. package/dist/brain/attention-heatmap.d.ts.map +1 -0
  16. package/dist/brain/attention-heatmap.js +108 -0
  17. package/dist/brain/attention-heatmap.js.map +1 -0
  18. package/dist/brain/auto-setup.js +19 -14
  19. package/dist/brain/auto-setup.js.map +1 -1
  20. package/dist/brain/auto-update.js +1 -1
  21. package/dist/brain/brain-chat.d.ts +42 -0
  22. package/dist/brain/brain-chat.d.ts.map +1 -0
  23. package/dist/brain/brain-chat.js +162 -0
  24. package/dist/brain/brain-chat.js.map +1 -0
  25. package/dist/brain/brain-encryption.d.ts +14 -0
  26. package/dist/brain/brain-encryption.d.ts.map +1 -0
  27. package/dist/brain/brain-encryption.js +68 -0
  28. package/dist/brain/brain-encryption.js.map +1 -0
  29. package/dist/brain/brain-exchange.d.ts +30 -0
  30. package/dist/brain/brain-exchange.d.ts.map +1 -0
  31. package/dist/brain/brain-exchange.js +106 -0
  32. package/dist/brain/brain-exchange.js.map +1 -0
  33. package/dist/brain/brain-garden.d.ts +18 -0
  34. package/dist/brain/brain-garden.d.ts.map +1 -0
  35. package/dist/brain/brain-garden.js +81 -0
  36. package/dist/brain/brain-garden.js.map +1 -0
  37. package/dist/brain/brain-portability.js +1 -1
  38. package/dist/brain/branch-brain.d.ts +23 -0
  39. package/dist/brain/branch-brain.d.ts.map +1 -0
  40. package/dist/brain/branch-brain.js +159 -0
  41. package/dist/brain/branch-brain.js.map +1 -0
  42. package/dist/brain/calibration-monitor.d.ts +20 -0
  43. package/dist/brain/calibration-monitor.d.ts.map +1 -0
  44. package/dist/brain/calibration-monitor.js +144 -0
  45. package/dist/brain/calibration-monitor.js.map +1 -0
  46. package/dist/brain/causal-chains.d.ts +37 -0
  47. package/dist/brain/causal-chains.d.ts.map +1 -0
  48. package/dist/brain/causal-chains.js +250 -0
  49. package/dist/brain/causal-chains.js.map +1 -0
  50. package/dist/brain/collision-detective.d.ts +32 -0
  51. package/dist/brain/collision-detective.d.ts.map +1 -0
  52. package/dist/brain/collision-detective.js +233 -0
  53. package/dist/brain/collision-detective.js.map +1 -0
  54. package/dist/brain/cost-aware-spawner.d.ts +7 -0
  55. package/dist/brain/cost-aware-spawner.d.ts.map +1 -0
  56. package/dist/brain/cost-aware-spawner.js +77 -0
  57. package/dist/brain/cost-aware-spawner.js.map +1 -0
  58. package/dist/brain/dream-engine.d.ts +35 -0
  59. package/dist/brain/dream-engine.d.ts.map +1 -0
  60. package/dist/brain/dream-engine.js +273 -0
  61. package/dist/brain/dream-engine.js.map +1 -0
  62. package/dist/brain/embeddings.d.ts +27 -0
  63. package/dist/brain/embeddings.d.ts.map +1 -0
  64. package/dist/brain/embeddings.js +175 -0
  65. package/dist/brain/embeddings.js.map +1 -0
  66. package/dist/brain/forgetting-curve.d.ts +21 -0
  67. package/dist/brain/forgetting-curve.d.ts.map +1 -0
  68. package/dist/brain/forgetting-curve.js +174 -0
  69. package/dist/brain/forgetting-curve.js.map +1 -0
  70. package/dist/brain/formal-verification-bridge.d.ts +26 -0
  71. package/dist/brain/formal-verification-bridge.d.ts.map +1 -0
  72. package/dist/brain/formal-verification-bridge.js +219 -0
  73. package/dist/brain/formal-verification-bridge.js.map +1 -0
  74. package/dist/brain/global-brain.d.ts +8 -1
  75. package/dist/brain/global-brain.d.ts.map +1 -1
  76. package/dist/brain/global-brain.js +24 -0
  77. package/dist/brain/global-brain.js.map +1 -1
  78. package/dist/brain/hallucination-quarantine.d.ts +26 -0
  79. package/dist/brain/hallucination-quarantine.d.ts.map +1 -0
  80. package/dist/brain/hallucination-quarantine.js +135 -0
  81. package/dist/brain/hallucination-quarantine.js.map +1 -0
  82. package/dist/brain/hive-accelerator.d.ts +39 -0
  83. package/dist/brain/hive-accelerator.d.ts.map +1 -0
  84. package/dist/brain/hive-accelerator.js +152 -0
  85. package/dist/brain/hive-accelerator.js.map +1 -0
  86. package/dist/brain/json-output.d.ts +26 -0
  87. package/dist/brain/json-output.d.ts.map +1 -0
  88. package/dist/brain/json-output.js +112 -0
  89. package/dist/brain/json-output.js.map +1 -0
  90. package/dist/brain/l0-cache.js +1 -1
  91. package/dist/brain/l0-cache.js.map +1 -1
  92. package/dist/brain/local-llm.d.ts +20 -0
  93. package/dist/brain/local-llm.d.ts.map +1 -0
  94. package/dist/brain/local-llm.js +132 -0
  95. package/dist/brain/local-llm.js.map +1 -0
  96. package/dist/brain/mcp-server.d.ts +40 -0
  97. package/dist/brain/mcp-server.d.ts.map +1 -1
  98. package/dist/brain/mcp-server.js +395 -12
  99. package/dist/brain/mcp-server.js.map +1 -1
  100. package/dist/brain/model-registry.d.ts +96 -0
  101. package/dist/brain/model-registry.d.ts.map +1 -0
  102. package/dist/brain/model-registry.js +585 -0
  103. package/dist/brain/model-registry.js.map +1 -0
  104. package/dist/brain/orchestrator.js +1 -1
  105. package/dist/brain/pr-auto-review.d.ts +17 -0
  106. package/dist/brain/pr-auto-review.d.ts.map +1 -0
  107. package/dist/brain/pr-auto-review.js +73 -0
  108. package/dist/brain/pr-auto-review.js.map +1 -0
  109. package/dist/brain/pre-mortem.d.ts +21 -0
  110. package/dist/brain/pre-mortem.d.ts.map +1 -0
  111. package/dist/brain/pre-mortem.js +210 -0
  112. package/dist/brain/pre-mortem.js.map +1 -0
  113. package/dist/brain/prompt-cache.d.ts +54 -0
  114. package/dist/brain/prompt-cache.d.ts.map +1 -0
  115. package/dist/brain/prompt-cache.js +105 -0
  116. package/dist/brain/prompt-cache.js.map +1 -0
  117. package/dist/brain/reputation-ledger.d.ts +42 -0
  118. package/dist/brain/reputation-ledger.d.ts.map +1 -0
  119. package/dist/brain/reputation-ledger.js +326 -0
  120. package/dist/brain/reputation-ledger.js.map +1 -0
  121. package/dist/brain/session-hooks.d.ts +19 -0
  122. package/dist/brain/session-hooks.d.ts.map +1 -1
  123. package/dist/brain/session-hooks.js +249 -18
  124. package/dist/brain/session-hooks.js.map +1 -1
  125. package/dist/brain/subagent-bridge.d.ts +46 -0
  126. package/dist/brain/subagent-bridge.d.ts.map +1 -0
  127. package/dist/brain/subagent-bridge.js +364 -0
  128. package/dist/brain/subagent-bridge.js.map +1 -0
  129. package/dist/brain/swarm-debate.d.ts +22 -0
  130. package/dist/brain/swarm-debate.d.ts.map +1 -0
  131. package/dist/brain/swarm-debate.js +134 -0
  132. package/dist/brain/swarm-debate.js.map +1 -0
  133. package/dist/brain/team-brain-sync.d.ts +22 -0
  134. package/dist/brain/team-brain-sync.d.ts.map +1 -0
  135. package/dist/brain/team-brain-sync.js +132 -0
  136. package/dist/brain/team-brain-sync.js.map +1 -0
  137. package/dist/brain/token-economy.d.ts +25 -0
  138. package/dist/brain/token-economy.d.ts.map +1 -0
  139. package/dist/brain/token-economy.js +216 -0
  140. package/dist/brain/token-economy.js.map +1 -0
  141. package/dist/brain/voice-mode.d.ts +15 -0
  142. package/dist/brain/voice-mode.d.ts.map +1 -0
  143. package/dist/brain/voice-mode.js +97 -0
  144. package/dist/brain/voice-mode.js.map +1 -0
  145. package/dist/cli.js +823 -4
  146. package/dist/cli.js.map +1 -1
  147. package/dist/dashboard/server.d.ts +6 -0
  148. package/dist/dashboard/server.d.ts.map +1 -1
  149. package/dist/dashboard/server.js +1118 -368
  150. package/dist/dashboard/server.js.map +1 -1
  151. package/dist/dashboard/v6-dashboard-html.d.ts +2 -0
  152. package/dist/dashboard/v6-dashboard-html.d.ts.map +1 -0
  153. package/dist/dashboard/v6-dashboard-html.js +2474 -0
  154. package/dist/dashboard/v6-dashboard-html.js.map +1 -0
  155. package/dist/index.d.ts +27 -0
  156. package/dist/index.d.ts.map +1 -1
  157. package/dist/index.js +29 -1
  158. package/dist/index.js.map +1 -1
  159. package/dist/types.d.ts +518 -2
  160. package/dist/types.d.ts.map +1 -1
  161. package/package.json +33 -4
@@ -0,0 +1,106 @@
1
+ // src/brain/brain-exchange.ts — Curated shareable brain slices
2
+ // v6.0.0 — Hive Mind Edition
3
+ //
4
+ // Export a curated subset of your brain as a shareable JSON package. Import
5
+ // someone else's package to instantly get expert knowledge for a domain.
6
+ // Zero-server design: packages are plain JSON files on disk (or shared via
7
+ // gist/HTTP/IPFS — transport is up to the user).
8
+ import * as fs from 'fs';
9
+ import * as path from 'path';
10
+ import * as os from 'os';
11
+ import * as crypto from 'crypto';
12
+ import { getGlobalBrain, GlobalBrain } from './global-brain.js';
13
+ const EXCHANGE_DIR = path.join(os.homedir(), '.shadow-brain', 'exchange');
14
+ export class BrainExchange {
15
+ constructor() {
16
+ this.brain = getGlobalBrain();
17
+ }
18
+ async export(opts) {
19
+ await this.brain.init();
20
+ fs.mkdirSync(EXCHANGE_DIR, { recursive: true });
21
+ const categories = opts.categories ?? [];
22
+ const keywords = opts.tags ?? [];
23
+ const limit = opts.limit ?? 500;
24
+ const minImportance = opts.minImportance ?? 0.5;
25
+ let entries = this.brain.recall({ keywords: keywords.length ? keywords : undefined, minImportance, limit });
26
+ if (categories.length) {
27
+ const allowed = new Set(categories.map(c => c.toLowerCase()));
28
+ entries = entries.filter(e => allowed.has(e.category.toLowerCase()));
29
+ }
30
+ const pkg = {
31
+ id: `pkg-${crypto.randomBytes(6).toString('hex')}`,
32
+ name: opts.name,
33
+ description: opts.description,
34
+ author: opts.author,
35
+ version: '1.0.0',
36
+ tags: opts.tags ?? [],
37
+ categories: Array.from(new Set(entries.map(e => e.category))),
38
+ memoryCount: entries.length,
39
+ memories: entries.map(e => ({
40
+ content: this.redact(e.content),
41
+ category: e.category,
42
+ importance: e.importance,
43
+ })),
44
+ createdAt: new Date(),
45
+ license: opts.license ?? 'MIT',
46
+ };
47
+ const safeName = opts.name.toLowerCase().replace(/[^a-z0-9_-]+/g, '-');
48
+ const filePath = path.join(EXCHANGE_DIR, `${safeName}-${pkg.id.slice(-6)}.json`);
49
+ fs.writeFileSync(filePath, JSON.stringify(pkg, null, 2));
50
+ return { filePath, package: pkg };
51
+ }
52
+ async import(filePath, opts = { projectDir: process.cwd() }) {
53
+ await this.brain.init();
54
+ const raw = fs.readFileSync(filePath, 'utf-8');
55
+ const pkg = JSON.parse(raw);
56
+ const projectId = GlobalBrain.projectIdFor(opts.projectDir);
57
+ const projectName = path.basename(opts.projectDir);
58
+ let imported = 0;
59
+ for (const m of pkg.memories) {
60
+ this.brain.writeSync({
61
+ projectId,
62
+ projectName,
63
+ agentTool: opts.agentTool ?? 'claude-code',
64
+ category: m.category,
65
+ content: m.content,
66
+ importance: m.importance,
67
+ metadata: { origin: 'brain-exchange', packageId: pkg.id, packageName: pkg.name, author: pkg.author },
68
+ });
69
+ imported++;
70
+ }
71
+ return { imported, pkg };
72
+ }
73
+ listLocal() {
74
+ fs.mkdirSync(EXCHANGE_DIR, { recursive: true });
75
+ const files = fs.readdirSync(EXCHANGE_DIR).filter(f => f.endsWith('.json'));
76
+ const out = [];
77
+ for (const f of files) {
78
+ try {
79
+ const raw = fs.readFileSync(path.join(EXCHANGE_DIR, f), 'utf-8');
80
+ const pkg = JSON.parse(raw);
81
+ out.push({ ...pkg, createdAt: new Date(pkg.createdAt) });
82
+ }
83
+ catch {
84
+ /* skip */
85
+ }
86
+ }
87
+ return out.sort((a, b) => b.createdAt.getTime() - a.createdAt.getTime());
88
+ }
89
+ redact(content) {
90
+ return content
91
+ .replace(/(api[_-]?key|secret|token|password|passwd|pwd)\s*[:=]\s*["'][^"']{8,}["']/gi, '$1: [REDACTED]')
92
+ .replace(/[A-Za-z0-9+/=]{40,}/g, '[REDACTED_BLOB]')
93
+ .replace(/\b[\w.+-]+@[\w.-]+\.\w{2,}\b/g, '[REDACTED_EMAIL]')
94
+ .replace(/\b(?:\d{1,3}\.){3}\d{1,3}\b/g, '[REDACTED_IP]');
95
+ }
96
+ }
97
+ let _instance = null;
98
+ export function getBrainExchange() {
99
+ if (!_instance)
100
+ _instance = new BrainExchange();
101
+ return _instance;
102
+ }
103
+ export function resetBrainExchangeForTests() {
104
+ _instance = null;
105
+ }
106
+ //# sourceMappingURL=brain-exchange.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"brain-exchange.js","sourceRoot":"","sources":["../../src/brain/brain-exchange.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import { GardenNode } from '../types.js';
2
+ export declare class BrainGarden {
3
+ private brain;
4
+ private forgetting;
5
+ private causal;
6
+ constructor();
7
+ snapshot(limit?: number): Promise<GardenNode[]>;
8
+ /** Compact stats used by the dashboard widget. */
9
+ stats(): Promise<{
10
+ nodes: number;
11
+ avgBloom: number;
12
+ linkedFraction: number;
13
+ }>;
14
+ private kindFromCategory;
15
+ }
16
+ export declare function getBrainGarden(): BrainGarden;
17
+ export declare function resetBrainGardenForTests(): void;
18
+ //# sourceMappingURL=brain-garden.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"brain-garden.d.ts","sourceRoot":"","sources":["../../src/brain/brain-garden.ts"],"names":[],"mappings":"AAQA,OAAO,EACL,UAAU,EACX,MAAM,aAAa,CAAC;AAKrB,qBAAa,WAAW;IACtB,OAAO,CAAC,KAAK,CAAc;IAC3B,OAAO,CAAC,UAAU,CAAkB;IACpC,OAAO,CAAC,MAAM,CAAe;;IAQvB,QAAQ,CAAC,KAAK,SAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAyClD,kDAAkD;IAC5C,KAAK,IAAI,OAAO,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,MAAM,CAAA;KAAE,CAAC;IAUnF,OAAO,CAAC,gBAAgB;CAMzB;AAID,wBAAgB,cAAc,IAAI,WAAW,CAG5C;AAED,wBAAgB,wBAAwB,IAAI,IAAI,CAE/C"}
@@ -0,0 +1,81 @@
1
+ // src/brain/brain-garden.ts — Aesthetic brain-as-garden visualizer data source
2
+ // v6.0.0 — Hive Mind Edition
3
+ //
4
+ // Returns a GardenNode[] snapshot of the brain state formatted for a D3 /
5
+ // three.js / Canvas visualization. Memories "bloom" based on strength; links
6
+ // become "vines" between them. Decaying memories dim. It's a living
7
+ // constellation.
8
+ import { getGlobalBrain } from './global-brain.js';
9
+ import { getForgettingCurve } from './forgetting-curve.js';
10
+ import { getCausalChains } from './causal-chains.js';
11
+ export class BrainGarden {
12
+ constructor() {
13
+ this.brain = getGlobalBrain();
14
+ this.forgetting = getForgettingCurve();
15
+ this.causal = getCausalChains();
16
+ }
17
+ async snapshot(limit = 200) {
18
+ await this.brain.init();
19
+ await this.forgetting.init();
20
+ await this.causal.init();
21
+ const timeline = this.brain.timeline({ limit });
22
+ const nodes = [];
23
+ for (const event of timeline) {
24
+ const state = this.forgetting.getState(event.id);
25
+ const strength = state?.currentStrength ?? event.importance;
26
+ const ageMs = Date.now() - event.createdAt.getTime();
27
+ const ageDays = ageMs / (1000 * 60 * 60 * 24);
28
+ nodes.push({
29
+ id: event.id,
30
+ kind: this.kindFromCategory(event.category),
31
+ label: event.content.slice(0, 80),
32
+ age: +ageDays.toFixed(1),
33
+ strength: +strength.toFixed(3),
34
+ connections: [],
35
+ bloom: Math.max(0.1, Math.min(1, strength * (1 - Math.min(1, ageDays / 90)))),
36
+ });
37
+ }
38
+ // Enrich connections from causal chains (fire-and-forget — keep cheap)
39
+ for (const node of nodes) {
40
+ try {
41
+ const chain = await this.causal.trace(node.id, { maxDepth: 2 });
42
+ node.connections = chain.nodes
43
+ .filter(n => n.id !== node.id)
44
+ .slice(0, 6)
45
+ .map(n => n.id);
46
+ }
47
+ catch {
48
+ node.connections = [];
49
+ }
50
+ }
51
+ return nodes;
52
+ }
53
+ /** Compact stats used by the dashboard widget. */
54
+ async stats() {
55
+ const nodes = await this.snapshot(150);
56
+ if (!nodes.length)
57
+ return { nodes: 0, avgBloom: 0, linkedFraction: 0 };
58
+ const avg = nodes.reduce((a, n) => a + n.bloom, 0) / nodes.length;
59
+ const linked = nodes.filter(n => n.connections.length > 0).length / nodes.length;
60
+ return { nodes: nodes.length, avgBloom: +avg.toFixed(3), linkedFraction: +linked.toFixed(3) };
61
+ }
62
+ // ── Internals ─────────────────────────────────────────────────────────────
63
+ kindFromCategory(category) {
64
+ const c = category.toLowerCase();
65
+ if (c.includes('decision') || c.includes('adr'))
66
+ return 'decision';
67
+ if (c.includes('pattern'))
68
+ return 'pattern';
69
+ return 'memory';
70
+ }
71
+ }
72
+ let _instance = null;
73
+ export function getBrainGarden() {
74
+ if (!_instance)
75
+ _instance = new BrainGarden();
76
+ return _instance;
77
+ }
78
+ export function resetBrainGardenForTests() {
79
+ _instance = null;
80
+ }
81
+ //# sourceMappingURL=brain-garden.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"brain-garden.js","sourceRoot":"","sources":["../../src/brain/brain-garden.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,6BAA6B;AAC7B,EAAE;AACF,0EAA0E;AAC1E,6EAA6E;AAC7E,oEAAoE;AACpE,iBAAiB;AAKjB,OAAO,EAAE,cAAc,EAAe,MAAM,mBAAmB,CAAC;AAChE,OAAO,EAAE,kBAAkB,EAAmB,MAAM,uBAAuB,CAAC;AAC5E,OAAO,EAAE,eAAe,EAAgB,MAAM,oBAAoB,CAAC;AAEnE,MAAM,OAAO,WAAW;IAKtB;QACE,IAAI,CAAC,KAAK,GAAG,cAAc,EAAE,CAAC;QAC9B,IAAI,CAAC,UAAU,GAAG,kBAAkB,EAAE,CAAC;QACvC,IAAI,CAAC,MAAM,GAAG,eAAe,EAAE,CAAC;IAClC,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,KAAK,GAAG,GAAG;QACxB,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QACxB,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;QAC7B,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QAEzB,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;QAChD,MAAM,KAAK,GAAiB,EAAE,CAAC;QAE/B,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;YAC7B,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACjD,MAAM,QAAQ,GAAG,KAAK,EAAE,eAAe,IAAI,KAAK,CAAC,UAAU,CAAC;YAC5D,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;YACrD,MAAM,OAAO,GAAG,KAAK,GAAG,CAAC,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;YAE9C,KAAK,CAAC,IAAI,CAAC;gBACT,EAAE,EAAE,KAAK,CAAC,EAAE;gBACZ,IAAI,EAAE,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,QAAQ,CAAC;gBAC3C,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;gBACjC,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;gBACxB,QAAQ,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;gBAC9B,WAAW,EAAE,EAAE;gBACf,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;aAC9E,CAAC,CAAC;QACL,CAAC;QAED,uEAAuE;QACvE,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;gBAChE,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,KAAK;qBAC3B,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;qBAC7B,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;qBACX,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACpB,CAAC;YAAC,MAAM,CAAC;gBACP,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;YACxB,CAAC;QACH,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAED,kDAAkD;IAClD,KAAK,CAAC,KAAK;QACT,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QACvC,IAAI,CAAC,KAAK,CAAC,MAAM;YAAE,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,cAAc,EAAE,CAAC,EAAE,CAAC;QACvE,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC;QAClE,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;QACjF,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;IAChG,CAAC;IAED,6EAA6E;IAErE,gBAAgB,CAAC,QAAgB;QACvC,MAAM,CAAC,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC;QACjC,IAAI,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC;YAAE,OAAO,UAAU,CAAC;QACnE,IAAI,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC;YAAE,OAAO,SAAS,CAAC;QAC5C,OAAO,QAAQ,CAAC;IAClB,CAAC;CACF;AAED,IAAI,SAAS,GAAuB,IAAI,CAAC;AAEzC,MAAM,UAAU,cAAc;IAC5B,IAAI,CAAC,SAAS;QAAE,SAAS,GAAG,IAAI,WAAW,EAAE,CAAC;IAC9C,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,wBAAwB;IACtC,SAAS,GAAG,IAAI,CAAC;AACnB,CAAC"}
@@ -35,7 +35,7 @@ export class BrainPortability {
35
35
  const fileName = `brain-${projectName}-${timestamp}.json`;
36
36
  const filePath = path.join(this.exportDir, fileName);
37
37
  const data = {
38
- version: '5.0.1',
38
+ version: '5.2.0',
39
39
  exportedAt: new Date(),
40
40
  projectName,
41
41
  projectDir: this.projectDir,
@@ -0,0 +1,23 @@
1
+ import { BranchBrainState, BranchMemoryTag } from '../types.js';
2
+ export declare class BranchBrain {
3
+ private brain;
4
+ private tags;
5
+ private lastBranchByProject;
6
+ private initialized;
7
+ constructor();
8
+ init(): Promise<void>;
9
+ /** Current branch from git for the given project dir. */
10
+ currentBranch(projectDir: string): Promise<string>;
11
+ /** Tag a memory as either global or branch-scoped. */
12
+ tag(memoryId: string, branch: string, scope?: 'branch' | 'global'): Promise<BranchMemoryTag>;
13
+ /** Return the set of memory IDs active for a branch (branch-scoped + global). */
14
+ activeMemoryIds(branch: string): string[];
15
+ /** Compute + return the current branch brain state. */
16
+ getState(projectDir: string): Promise<BranchBrainState>;
17
+ /** Promote a branch-scoped memory to global (e.g., after merging). */
18
+ promoteToGlobal(memoryId: string): Promise<boolean>;
19
+ private persist;
20
+ }
21
+ export declare function getBranchBrain(): BranchBrain;
22
+ export declare function resetBranchBrainForTests(): void;
23
+ //# sourceMappingURL=branch-brain.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"branch-brain.d.ts","sourceRoot":"","sources":["../../src/brain/branch-brain.ts"],"names":[],"mappings":"AAUA,OAAO,EACL,gBAAgB,EAChB,eAAe,EAChB,MAAM,aAAa,CAAC;AAWrB,qBAAa,WAAW;IACtB,OAAO,CAAC,KAAK,CAAc;IAC3B,OAAO,CAAC,IAAI,CAA6C;IACzD,OAAO,CAAC,mBAAmB,CAAkC;IAC7D,OAAO,CAAC,WAAW,CAAS;;IAMtB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAwB3B,yDAAyD;IACnD,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAUxD,sDAAsD;IAChD,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,GAAE,QAAQ,GAAG,QAAmB,GAAG,OAAO,CAAC,eAAe,CAAC;IAe5G,iFAAiF;IACjF,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE;IAazC,uDAAuD;IACjD,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAyC7D,sEAAsE;IAChE,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;YAW3C,OAAO;CAgBtB;AAID,wBAAgB,cAAc,IAAI,WAAW,CAG5C;AAED,wBAAgB,wBAAwB,IAAI,IAAI,CAE/C"}
@@ -0,0 +1,159 @@
1
+ // src/brain/branch-brain.ts — Branch Brains (git-aware memory context)
2
+ // v6.0.0 — Hive Mind Edition
3
+ //
4
+ // When you switch git branches, the brain's active memory set switches too.
5
+ // Memories are tagged `branch:<name>` or `global` when created. Git-aware
6
+ // filtering keeps the mental model aligned with the branch you're on.
7
+ import * as fs from 'fs';
8
+ import * as path from 'path';
9
+ import * as os from 'os';
10
+ import { getGlobalBrain, GlobalBrain } from './global-brain.js';
11
+ const TAGS_PATH = path.join(os.homedir(), '.shadow-brain', 'branch-tags.json');
12
+ export class BranchBrain {
13
+ constructor() {
14
+ this.tags = new Map(); // memoryId → tags
15
+ this.lastBranchByProject = new Map();
16
+ this.initialized = false;
17
+ this.brain = getGlobalBrain();
18
+ }
19
+ async init() {
20
+ if (this.initialized)
21
+ return;
22
+ fs.mkdirSync(path.dirname(TAGS_PATH), { recursive: true });
23
+ await this.brain.init();
24
+ if (fs.existsSync(TAGS_PATH)) {
25
+ try {
26
+ const parsed = JSON.parse(fs.readFileSync(TAGS_PATH, 'utf-8'));
27
+ for (const t of parsed.tags ?? []) {
28
+ const rehy = { ...t, taggedAt: new Date(t.taggedAt) };
29
+ const existing = this.tags.get(rehy.memoryId) ?? [];
30
+ existing.push(rehy);
31
+ this.tags.set(rehy.memoryId, existing);
32
+ }
33
+ for (const [proj, br] of Object.entries(parsed.lastBranchByProject ?? {})) {
34
+ this.lastBranchByProject.set(proj, br);
35
+ }
36
+ }
37
+ catch {
38
+ /* skip */
39
+ }
40
+ }
41
+ this.initialized = true;
42
+ }
43
+ /** Current branch from git for the given project dir. */
44
+ async currentBranch(projectDir) {
45
+ try {
46
+ const { execa } = await import('execa');
47
+ const { stdout } = await execa('git', ['branch', '--show-current'], { cwd: projectDir, reject: false });
48
+ return stdout.trim() || 'HEAD';
49
+ }
50
+ catch {
51
+ return 'HEAD';
52
+ }
53
+ }
54
+ /** Tag a memory as either global or branch-scoped. */
55
+ async tag(memoryId, branch, scope = 'branch') {
56
+ await this.init();
57
+ const tag = {
58
+ memoryId,
59
+ branch,
60
+ scope,
61
+ taggedAt: new Date(),
62
+ };
63
+ const existing = this.tags.get(memoryId) ?? [];
64
+ existing.push(tag);
65
+ this.tags.set(memoryId, existing);
66
+ await this.persist();
67
+ return tag;
68
+ }
69
+ /** Return the set of memory IDs active for a branch (branch-scoped + global). */
70
+ activeMemoryIds(branch) {
71
+ const ids = new Set();
72
+ for (const [memoryId, tagList] of this.tags) {
73
+ for (const t of tagList) {
74
+ if (t.scope === 'global' || t.branch === branch) {
75
+ ids.add(memoryId);
76
+ break;
77
+ }
78
+ }
79
+ }
80
+ return Array.from(ids);
81
+ }
82
+ /** Compute + return the current branch brain state. */
83
+ async getState(projectDir) {
84
+ await this.init();
85
+ const branch = await this.currentBranch(projectDir);
86
+ const projectId = GlobalBrain.projectIdFor(projectDir);
87
+ const last = this.lastBranchByProject.get(projectId);
88
+ let branchCount = 0;
89
+ let globalCount = 0;
90
+ const branchCategories = new Set();
91
+ const activeIds = this.activeMemoryIds(branch);
92
+ const branchActiveOnly = new Set();
93
+ for (const [memoryId, tagList] of this.tags) {
94
+ const hasGlobal = tagList.some(t => t.scope === 'global');
95
+ const hasThisBranch = tagList.some(t => t.scope === 'branch' && t.branch === branch);
96
+ if (hasGlobal)
97
+ globalCount++;
98
+ if (hasThisBranch) {
99
+ branchCount++;
100
+ branchActiveOnly.add(memoryId);
101
+ }
102
+ }
103
+ // Enrich branch categories from the brain
104
+ const branchEntries = this.brain.recallByIds(Array.from(branchActiveOnly));
105
+ for (const e of branchEntries)
106
+ branchCategories.add(e.category);
107
+ if (last !== branch) {
108
+ this.lastBranchByProject.set(projectId, branch);
109
+ await this.persist();
110
+ }
111
+ return {
112
+ currentBranch: branch,
113
+ activeMemoryIds: activeIds,
114
+ branchMemoryCount: branchCount,
115
+ globalMemoryCount: globalCount,
116
+ lastSwitchAt: new Date(),
117
+ branchSpecificCategories: Array.from(branchCategories),
118
+ };
119
+ }
120
+ /** Promote a branch-scoped memory to global (e.g., after merging). */
121
+ async promoteToGlobal(memoryId) {
122
+ await this.init();
123
+ const list = this.tags.get(memoryId);
124
+ if (!list)
125
+ return false;
126
+ list.push({ memoryId, branch: '*', scope: 'global', taggedAt: new Date() });
127
+ await this.persist();
128
+ return true;
129
+ }
130
+ // ── Internals ─────────────────────────────────────────────────────────────
131
+ async persist() {
132
+ try {
133
+ const flat = [];
134
+ for (const list of this.tags.values())
135
+ flat.push(...list);
136
+ const payload = {
137
+ schemaVersion: 1,
138
+ tags: flat,
139
+ lastBranchByProject: Object.fromEntries(this.lastBranchByProject.entries()),
140
+ };
141
+ const tmp = TAGS_PATH + '.tmp';
142
+ fs.writeFileSync(tmp, JSON.stringify(payload, null, 2));
143
+ fs.renameSync(tmp, TAGS_PATH);
144
+ }
145
+ catch {
146
+ /* non-fatal */
147
+ }
148
+ }
149
+ }
150
+ let _instance = null;
151
+ export function getBranchBrain() {
152
+ if (!_instance)
153
+ _instance = new BranchBrain();
154
+ return _instance;
155
+ }
156
+ export function resetBranchBrainForTests() {
157
+ _instance = null;
158
+ }
159
+ //# sourceMappingURL=branch-brain.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"branch-brain.js","sourceRoot":"","sources":["../../src/brain/branch-brain.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import { AgentTool, CalibrationRecord, CalibrationScore } from '../types.js';
2
+ export declare class CalibrationMonitor {
3
+ private records;
4
+ private scores;
5
+ private initialized;
6
+ init(): Promise<void>;
7
+ record(rec: Omit<CalibrationRecord, 'recordedAt'> & {
8
+ recordedAt?: Date;
9
+ }): Promise<CalibrationScore>;
10
+ getScore(agentTool: AgentTool, category: string): CalibrationScore | null;
11
+ listScores(limit?: number): CalibrationScore[];
12
+ /** Multiplicative trust weight for a given agent+category (1.0 = as claimed). */
13
+ trustWeight(agentTool: AgentTool, category: string): number;
14
+ private recomputeScore;
15
+ private keyFor;
16
+ private persist;
17
+ }
18
+ export declare function getCalibrationMonitor(): CalibrationMonitor;
19
+ export declare function resetCalibrationMonitorForTests(): void;
20
+ //# sourceMappingURL=calibration-monitor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"calibration-monitor.d.ts","sourceRoot":"","sources":["../../src/brain/calibration-monitor.ts"],"names":[],"mappings":"AAaA,OAAO,EACL,SAAS,EACT,iBAAiB,EACjB,gBAAgB,EACjB,MAAM,aAAa,CAAC;AAUrB,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,OAAO,CAA2B;IAC1C,OAAO,CAAC,MAAM,CAA4C;IAC1D,OAAO,CAAC,WAAW,CAAS;IAEtB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAqBrB,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,iBAAiB,EAAE,YAAY,CAAC,GAAG;QAAE,UAAU,CAAC,EAAE,IAAI,CAAA;KAAE,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAa3G,QAAQ,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI;IAIzE,UAAU,CAAC,KAAK,SAAK,GAAG,gBAAgB,EAAE;IAM1C,iFAAiF;IACjF,WAAW,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM;IAQ3D,OAAO,CAAC,cAAc;IAiDtB,OAAO,CAAC,MAAM;YAIA,OAAO;CActB;AAID,wBAAgB,qBAAqB,IAAI,kBAAkB,CAG1D;AAED,wBAAgB,+BAA+B,IAAI,IAAI,CAEtD"}
@@ -0,0 +1,144 @@
1
+ // src/brain/calibration-monitor.ts — Confidence calibration tracking
2
+ // v6.0.0 — Hive Mind Edition
3
+ //
4
+ // Does the AI know when it's right? Track every claim's confidence → outcome.
5
+ // Compute the Brier score per agent per category. Auto-adjust trust weights so
6
+ // downstream consumers can discount overconfident agents.
7
+ //
8
+ // Brier = mean squared error between claimed confidence and 0/1 outcome.
9
+ // Lower = better calibrated.
10
+ import * as fs from 'fs';
11
+ import * as path from 'path';
12
+ import * as os from 'os';
13
+ const DATA_PATH = path.join(os.homedir(), '.shadow-brain', 'calibration.json');
14
+ export class CalibrationMonitor {
15
+ constructor() {
16
+ this.records = [];
17
+ this.scores = new Map();
18
+ this.initialized = false;
19
+ }
20
+ async init() {
21
+ if (this.initialized)
22
+ return;
23
+ fs.mkdirSync(path.dirname(DATA_PATH), { recursive: true });
24
+ if (fs.existsSync(DATA_PATH)) {
25
+ try {
26
+ const parsed = JSON.parse(fs.readFileSync(DATA_PATH, 'utf-8'));
27
+ this.records = (parsed.records ?? []).map(r => ({
28
+ ...r,
29
+ recordedAt: new Date(r.recordedAt),
30
+ outcomeAt: new Date(r.outcomeAt),
31
+ }));
32
+ for (const s of parsed.scores ?? []) {
33
+ this.scores.set(this.keyFor(s.agentTool, s.category), { ...s, updatedAt: new Date(s.updatedAt) });
34
+ }
35
+ }
36
+ catch {
37
+ /* skip */
38
+ }
39
+ }
40
+ this.initialized = true;
41
+ }
42
+ async record(rec) {
43
+ await this.init();
44
+ const full = {
45
+ ...rec,
46
+ recordedAt: rec.recordedAt ?? new Date(),
47
+ outcomeAt: rec.outcomeAt ?? new Date(),
48
+ };
49
+ this.records.push(full);
50
+ const score = this.recomputeScore(full.agentTool, full.category);
51
+ await this.persist();
52
+ return score;
53
+ }
54
+ getScore(agentTool, category) {
55
+ return this.scores.get(this.keyFor(agentTool, category)) ?? null;
56
+ }
57
+ listScores(limit = 50) {
58
+ return Array.from(this.scores.values())
59
+ .sort((a, b) => a.brierScore - b.brierScore)
60
+ .slice(0, limit);
61
+ }
62
+ /** Multiplicative trust weight for a given agent+category (1.0 = as claimed). */
63
+ trustWeight(agentTool, category) {
64
+ const s = this.getScore(agentTool, category);
65
+ if (!s)
66
+ return 1.0;
67
+ return s.trustWeight;
68
+ }
69
+ // ── Internals ─────────────────────────────────────────────────────────────
70
+ recomputeScore(agentTool, category) {
71
+ const relevant = this.records.filter(r => r.agentTool === agentTool && r.category === category);
72
+ const sampleSize = relevant.length;
73
+ if (!sampleSize) {
74
+ const blank = {
75
+ agentTool,
76
+ category,
77
+ sampleSize: 0,
78
+ brierScore: 0,
79
+ calibrationError: 0,
80
+ overconfidenceRatio: 0,
81
+ trustWeight: 1.0,
82
+ updatedAt: new Date(),
83
+ };
84
+ this.scores.set(this.keyFor(agentTool, category), blank);
85
+ return blank;
86
+ }
87
+ let brierSum = 0;
88
+ let calErrSum = 0;
89
+ let overconfidentCount = 0;
90
+ for (const r of relevant) {
91
+ const outcomeBinary = r.actualOutcome === 'correct' ? 1 : r.actualOutcome === 'partial' ? 0.5 : 0;
92
+ const delta = r.claimedConfidence - outcomeBinary;
93
+ brierSum += delta * delta;
94
+ calErrSum += Math.abs(delta);
95
+ if (r.claimedConfidence > 0.7 && outcomeBinary < 0.5)
96
+ overconfidentCount++;
97
+ }
98
+ const brier = brierSum / sampleSize;
99
+ const calErr = calErrSum / sampleSize;
100
+ const overconfidenceRatio = overconfidentCount / sampleSize;
101
+ // Trust weight: 1.0 when calibrated, approaches 0.4 when badly over-confident
102
+ const trustWeight = +Math.max(0.4, 1 - calErr * 0.8 - overconfidenceRatio * 0.4).toFixed(3);
103
+ const score = {
104
+ agentTool,
105
+ category,
106
+ sampleSize,
107
+ brierScore: +brier.toFixed(4),
108
+ calibrationError: +calErr.toFixed(4),
109
+ overconfidenceRatio: +overconfidenceRatio.toFixed(3),
110
+ trustWeight,
111
+ updatedAt: new Date(),
112
+ };
113
+ this.scores.set(this.keyFor(agentTool, category), score);
114
+ return score;
115
+ }
116
+ keyFor(agent, category) {
117
+ return `${agent}::${category}`;
118
+ }
119
+ async persist() {
120
+ try {
121
+ const payload = {
122
+ schemaVersion: 1,
123
+ records: this.records,
124
+ scores: Array.from(this.scores.values()),
125
+ };
126
+ const tmp = DATA_PATH + '.tmp';
127
+ fs.writeFileSync(tmp, JSON.stringify(payload, null, 2));
128
+ fs.renameSync(tmp, DATA_PATH);
129
+ }
130
+ catch {
131
+ /* non-fatal */
132
+ }
133
+ }
134
+ }
135
+ let _instance = null;
136
+ export function getCalibrationMonitor() {
137
+ if (!_instance)
138
+ _instance = new CalibrationMonitor();
139
+ return _instance;
140
+ }
141
+ export function resetCalibrationMonitorForTests() {
142
+ _instance = null;
143
+ }
144
+ //# sourceMappingURL=calibration-monitor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"calibration-monitor.js","sourceRoot":"","sources":["../../src/brain/calibration-monitor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ import { CausalLink, CausalChain } from '../types.js';
2
+ import { GlobalBrain } from './global-brain.js';
3
+ export declare class CausalChains {
4
+ private brain;
5
+ private links;
6
+ private byEffect;
7
+ private byCause;
8
+ private initialized;
9
+ constructor(brain?: GlobalBrain);
10
+ init(): Promise<void>;
11
+ /** Record that `effectId` was caused by `causeId`. */
12
+ link(effectId: string, causeId: string, rationale?: string, strength?: number): Promise<CausalLink>;
13
+ /** Walk back from an effect to trace all ancestor causes. */
14
+ trace(effectId: string, opts?: {
15
+ maxDepth?: number;
16
+ }): Promise<CausalChain>;
17
+ /** Walk forward from a cause to find all effects it influenced. */
18
+ influence(causeId: string, opts?: {
19
+ maxDepth?: number;
20
+ }): Promise<CausalChain>;
21
+ /** Simple stats for dashboards. */
22
+ stats(): {
23
+ totalLinks: number;
24
+ effects: number;
25
+ causes: number;
26
+ };
27
+ /** Remove a single link. */
28
+ unlink(linkId: string): Promise<boolean>;
29
+ private index;
30
+ private rebuildIndexes;
31
+ private nodeFromMemoryId;
32
+ private renderDot;
33
+ private persist;
34
+ }
35
+ export declare function getCausalChains(): CausalChains;
36
+ export declare function resetCausalChainsForTests(): void;
37
+ //# sourceMappingURL=causal-chains.d.ts.map