@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.
Files changed (301) hide show
  1. package/README.md +310 -1014
  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-3d.d.ts +79 -0
  22. package/dist/brain/brain-3d.d.ts.map +1 -0
  23. package/dist/brain/brain-3d.js +468 -0
  24. package/dist/brain/brain-3d.js.map +1 -0
  25. package/dist/brain/brain-active-learner.d.ts +74 -0
  26. package/dist/brain/brain-active-learner.d.ts.map +1 -0
  27. package/dist/brain/brain-active-learner.js +425 -0
  28. package/dist/brain/brain-active-learner.js.map +1 -0
  29. package/dist/brain/brain-ascii.d.ts +32 -0
  30. package/dist/brain/brain-ascii.d.ts.map +1 -0
  31. package/dist/brain/brain-ascii.js +402 -0
  32. package/dist/brain/brain-ascii.js.map +1 -0
  33. package/dist/brain/brain-chat.d.ts +42 -0
  34. package/dist/brain/brain-chat.d.ts.map +1 -0
  35. package/dist/brain/brain-chat.js +162 -0
  36. package/dist/brain/brain-chat.js.map +1 -0
  37. package/dist/brain/brain-cinema.d.ts +45 -0
  38. package/dist/brain/brain-cinema.d.ts.map +1 -0
  39. package/dist/brain/brain-cinema.js +393 -0
  40. package/dist/brain/brain-cinema.js.map +1 -0
  41. package/dist/brain/brain-coach.d.ts +45 -0
  42. package/dist/brain/brain-coach.d.ts.map +1 -0
  43. package/dist/brain/brain-coach.js +383 -0
  44. package/dist/brain/brain-coach.js.map +1 -0
  45. package/dist/brain/brain-consolidator.d.ts +56 -0
  46. package/dist/brain/brain-consolidator.d.ts.map +1 -0
  47. package/dist/brain/brain-consolidator.js +386 -0
  48. package/dist/brain/brain-consolidator.js.map +1 -0
  49. package/dist/brain/brain-contradictions.d.ts +57 -0
  50. package/dist/brain/brain-contradictions.d.ts.map +1 -0
  51. package/dist/brain/brain-contradictions.js +443 -0
  52. package/dist/brain/brain-contradictions.js.map +1 -0
  53. package/dist/brain/brain-diff.d.ts +61 -0
  54. package/dist/brain/brain-diff.d.ts.map +1 -0
  55. package/dist/brain/brain-diff.js +439 -0
  56. package/dist/brain/brain-diff.js.map +1 -0
  57. package/dist/brain/brain-dna.d.ts +59 -0
  58. package/dist/brain/brain-dna.d.ts.map +1 -0
  59. package/dist/brain/brain-dna.js +336 -0
  60. package/dist/brain/brain-dna.js.map +1 -0
  61. package/dist/brain/brain-doppelganger.d.ts +32 -0
  62. package/dist/brain/brain-doppelganger.d.ts.map +1 -0
  63. package/dist/brain/brain-doppelganger.js +417 -0
  64. package/dist/brain/brain-doppelganger.js.map +1 -0
  65. package/dist/brain/brain-encryption.d.ts +14 -0
  66. package/dist/brain/brain-encryption.d.ts.map +1 -0
  67. package/dist/brain/brain-encryption.js +68 -0
  68. package/dist/brain/brain-encryption.js.map +1 -0
  69. package/dist/brain/brain-exchange.d.ts +30 -0
  70. package/dist/brain/brain-exchange.d.ts.map +1 -0
  71. package/dist/brain/brain-exchange.js +106 -0
  72. package/dist/brain/brain-exchange.js.map +1 -0
  73. package/dist/brain/brain-garden.d.ts +18 -0
  74. package/dist/brain/brain-garden.d.ts.map +1 -0
  75. package/dist/brain/brain-garden.js +81 -0
  76. package/dist/brain/brain-garden.js.map +1 -0
  77. package/dist/brain/brain-graph-walker.d.ts +54 -0
  78. package/dist/brain/brain-graph-walker.d.ts.map +1 -0
  79. package/dist/brain/brain-graph-walker.js +412 -0
  80. package/dist/brain/brain-graph-walker.js.map +1 -0
  81. package/dist/brain/brain-holiday-card.d.ts +50 -0
  82. package/dist/brain/brain-holiday-card.d.ts.map +1 -0
  83. package/dist/brain/brain-holiday-card.js +432 -0
  84. package/dist/brain/brain-holiday-card.js.map +1 -0
  85. package/dist/brain/brain-memes.d.ts +44 -0
  86. package/dist/brain/brain-memes.d.ts.map +1 -0
  87. package/dist/brain/brain-memes.js +438 -0
  88. package/dist/brain/brain-memes.js.map +1 -0
  89. package/dist/brain/brain-memory-tiers.d.ts +67 -0
  90. package/dist/brain/brain-memory-tiers.d.ts.map +1 -0
  91. package/dist/brain/brain-memory-tiers.js +292 -0
  92. package/dist/brain/brain-memory-tiers.js.map +1 -0
  93. package/dist/brain/brain-notebook.d.ts +68 -0
  94. package/dist/brain/brain-notebook.d.ts.map +1 -0
  95. package/dist/brain/brain-notebook.js +379 -0
  96. package/dist/brain/brain-notebook.js.map +1 -0
  97. package/dist/brain/brain-portability.js +1 -1
  98. package/dist/brain/brain-quantize.d.ts +62 -0
  99. package/dist/brain/brain-quantize.d.ts.map +1 -0
  100. package/dist/brain/brain-quantize.js +346 -0
  101. package/dist/brain/brain-quantize.js.map +1 -0
  102. package/dist/brain/brain-query-expander.d.ts +31 -0
  103. package/dist/brain/brain-query-expander.d.ts.map +1 -0
  104. package/dist/brain/brain-query-expander.js +417 -0
  105. package/dist/brain/brain-query-expander.js.map +1 -0
  106. package/dist/brain/brain-quest.d.ts +58 -0
  107. package/dist/brain/brain-quest.d.ts.map +1 -0
  108. package/dist/brain/brain-quest.js +541 -0
  109. package/dist/brain/brain-quest.js.map +1 -0
  110. package/dist/brain/brain-recall-cache.d.ts +73 -0
  111. package/dist/brain/brain-recall-cache.d.ts.map +1 -0
  112. package/dist/brain/brain-recall-cache.js +444 -0
  113. package/dist/brain/brain-recall-cache.js.map +1 -0
  114. package/dist/brain/brain-reflex.d.ts +55 -0
  115. package/dist/brain/brain-reflex.d.ts.map +1 -0
  116. package/dist/brain/brain-reflex.js +364 -0
  117. package/dist/brain/brain-reflex.js.map +1 -0
  118. package/dist/brain/brain-replay.d.ts +74 -0
  119. package/dist/brain/brain-replay.d.ts.map +1 -0
  120. package/dist/brain/brain-replay.js +336 -0
  121. package/dist/brain/brain-replay.js.map +1 -0
  122. package/dist/brain/brain-rerank.d.ts +39 -0
  123. package/dist/brain/brain-rerank.d.ts.map +1 -0
  124. package/dist/brain/brain-rerank.js +216 -0
  125. package/dist/brain/brain-rerank.js.map +1 -0
  126. package/dist/brain/brain-roast.d.ts +44 -0
  127. package/dist/brain/brain-roast.d.ts.map +1 -0
  128. package/dist/brain/brain-roast.js +566 -0
  129. package/dist/brain/brain-roast.js.map +1 -0
  130. package/dist/brain/brain-sonification.d.ts +57 -0
  131. package/dist/brain/brain-sonification.d.ts.map +1 -0
  132. package/dist/brain/brain-sonification.js +286 -0
  133. package/dist/brain/brain-sonification.js.map +1 -0
  134. package/dist/brain/brain-tarot.d.ts +49 -0
  135. package/dist/brain/brain-tarot.d.ts.map +1 -0
  136. package/dist/brain/brain-tarot.js +634 -0
  137. package/dist/brain/brain-tarot.js.map +1 -0
  138. package/dist/brain/brain-time-capsule.d.ts +80 -0
  139. package/dist/brain/brain-time-capsule.d.ts.map +1 -0
  140. package/dist/brain/brain-time-capsule.js +289 -0
  141. package/dist/brain/brain-time-capsule.js.map +1 -0
  142. package/dist/brain/brain-trophies.d.ts +60 -0
  143. package/dist/brain/brain-trophies.d.ts.map +1 -0
  144. package/dist/brain/brain-trophies.js +431 -0
  145. package/dist/brain/brain-trophies.js.map +1 -0
  146. package/dist/brain/brain-working-memory.d.ts +78 -0
  147. package/dist/brain/brain-working-memory.d.ts.map +1 -0
  148. package/dist/brain/brain-working-memory.js +367 -0
  149. package/dist/brain/brain-working-memory.js.map +1 -0
  150. package/dist/brain/branch-brain.d.ts +23 -0
  151. package/dist/brain/branch-brain.d.ts.map +1 -0
  152. package/dist/brain/branch-brain.js +159 -0
  153. package/dist/brain/branch-brain.js.map +1 -0
  154. package/dist/brain/calibration-monitor.d.ts +20 -0
  155. package/dist/brain/calibration-monitor.d.ts.map +1 -0
  156. package/dist/brain/calibration-monitor.js +144 -0
  157. package/dist/brain/calibration-monitor.js.map +1 -0
  158. package/dist/brain/causal-chains.d.ts +37 -0
  159. package/dist/brain/causal-chains.d.ts.map +1 -0
  160. package/dist/brain/causal-chains.js +250 -0
  161. package/dist/brain/causal-chains.js.map +1 -0
  162. package/dist/brain/collision-detective.d.ts +32 -0
  163. package/dist/brain/collision-detective.d.ts.map +1 -0
  164. package/dist/brain/collision-detective.js +233 -0
  165. package/dist/brain/collision-detective.js.map +1 -0
  166. package/dist/brain/confidence-gate.d.ts +69 -0
  167. package/dist/brain/confidence-gate.d.ts.map +1 -0
  168. package/dist/brain/confidence-gate.js +244 -0
  169. package/dist/brain/confidence-gate.js.map +1 -0
  170. package/dist/brain/constitution.d.ts +59 -0
  171. package/dist/brain/constitution.d.ts.map +1 -0
  172. package/dist/brain/constitution.js +315 -0
  173. package/dist/brain/constitution.js.map +1 -0
  174. package/dist/brain/cost-aware-spawner.d.ts +7 -0
  175. package/dist/brain/cost-aware-spawner.d.ts.map +1 -0
  176. package/dist/brain/cost-aware-spawner.js +77 -0
  177. package/dist/brain/cost-aware-spawner.js.map +1 -0
  178. package/dist/brain/dream-engine.d.ts +35 -0
  179. package/dist/brain/dream-engine.d.ts.map +1 -0
  180. package/dist/brain/dream-engine.js +273 -0
  181. package/dist/brain/dream-engine.js.map +1 -0
  182. package/dist/brain/embeddings-v2.d.ts +58 -0
  183. package/dist/brain/embeddings-v2.d.ts.map +1 -0
  184. package/dist/brain/embeddings-v2.js +344 -0
  185. package/dist/brain/embeddings-v2.js.map +1 -0
  186. package/dist/brain/embeddings.d.ts +27 -0
  187. package/dist/brain/embeddings.d.ts.map +1 -0
  188. package/dist/brain/embeddings.js +175 -0
  189. package/dist/brain/embeddings.js.map +1 -0
  190. package/dist/brain/forgetting-curve.d.ts +21 -0
  191. package/dist/brain/forgetting-curve.d.ts.map +1 -0
  192. package/dist/brain/forgetting-curve.js +174 -0
  193. package/dist/brain/forgetting-curve.js.map +1 -0
  194. package/dist/brain/formal-verification-bridge.d.ts +26 -0
  195. package/dist/brain/formal-verification-bridge.d.ts.map +1 -0
  196. package/dist/brain/formal-verification-bridge.js +219 -0
  197. package/dist/brain/formal-verification-bridge.js.map +1 -0
  198. package/dist/brain/global-brain.d.ts +8 -1
  199. package/dist/brain/global-brain.d.ts.map +1 -1
  200. package/dist/brain/global-brain.js +24 -0
  201. package/dist/brain/global-brain.js.map +1 -1
  202. package/dist/brain/hallucination-quarantine.d.ts +26 -0
  203. package/dist/brain/hallucination-quarantine.d.ts.map +1 -0
  204. package/dist/brain/hallucination-quarantine.js +135 -0
  205. package/dist/brain/hallucination-quarantine.js.map +1 -0
  206. package/dist/brain/hive-accelerator.d.ts +39 -0
  207. package/dist/brain/hive-accelerator.d.ts.map +1 -0
  208. package/dist/brain/hive-accelerator.js +152 -0
  209. package/dist/brain/hive-accelerator.js.map +1 -0
  210. package/dist/brain/hive-voice.d.ts +71 -0
  211. package/dist/brain/hive-voice.d.ts.map +1 -0
  212. package/dist/brain/hive-voice.js +352 -0
  213. package/dist/brain/hive-voice.js.map +1 -0
  214. package/dist/brain/json-output.d.ts +26 -0
  215. package/dist/brain/json-output.d.ts.map +1 -0
  216. package/dist/brain/json-output.js +112 -0
  217. package/dist/brain/json-output.js.map +1 -0
  218. package/dist/brain/l0-cache.js +1 -1
  219. package/dist/brain/l0-cache.js.map +1 -1
  220. package/dist/brain/local-llm.d.ts +20 -0
  221. package/dist/brain/local-llm.d.ts.map +1 -0
  222. package/dist/brain/local-llm.js +132 -0
  223. package/dist/brain/local-llm.js.map +1 -0
  224. package/dist/brain/markdown-export.d.ts +48 -0
  225. package/dist/brain/markdown-export.d.ts.map +1 -0
  226. package/dist/brain/markdown-export.js +382 -0
  227. package/dist/brain/markdown-export.js.map +1 -0
  228. package/dist/brain/mcp-server.d.ts +40 -0
  229. package/dist/brain/mcp-server.d.ts.map +1 -1
  230. package/dist/brain/mcp-server.js +395 -12
  231. package/dist/brain/mcp-server.js.map +1 -1
  232. package/dist/brain/model-registry.d.ts +96 -0
  233. package/dist/brain/model-registry.d.ts.map +1 -0
  234. package/dist/brain/model-registry.js +585 -0
  235. package/dist/brain/model-registry.js.map +1 -0
  236. package/dist/brain/multimodal-vision.d.ts +38 -0
  237. package/dist/brain/multimodal-vision.d.ts.map +1 -0
  238. package/dist/brain/multimodal-vision.js +257 -0
  239. package/dist/brain/multimodal-vision.js.map +1 -0
  240. package/dist/brain/orchestrator.js +1 -1
  241. package/dist/brain/otel-lite.d.ts +71 -0
  242. package/dist/brain/otel-lite.d.ts.map +1 -0
  243. package/dist/brain/otel-lite.js +232 -0
  244. package/dist/brain/otel-lite.js.map +1 -0
  245. package/dist/brain/pr-auto-review.d.ts +17 -0
  246. package/dist/brain/pr-auto-review.d.ts.map +1 -0
  247. package/dist/brain/pr-auto-review.js +73 -0
  248. package/dist/brain/pr-auto-review.js.map +1 -0
  249. package/dist/brain/pre-mortem.d.ts +21 -0
  250. package/dist/brain/pre-mortem.d.ts.map +1 -0
  251. package/dist/brain/pre-mortem.js +210 -0
  252. package/dist/brain/pre-mortem.js.map +1 -0
  253. package/dist/brain/prompt-cache.d.ts +54 -0
  254. package/dist/brain/prompt-cache.d.ts.map +1 -0
  255. package/dist/brain/prompt-cache.js +105 -0
  256. package/dist/brain/prompt-cache.js.map +1 -0
  257. package/dist/brain/reputation-ledger.d.ts +42 -0
  258. package/dist/brain/reputation-ledger.d.ts.map +1 -0
  259. package/dist/brain/reputation-ledger.js +326 -0
  260. package/dist/brain/reputation-ledger.js.map +1 -0
  261. package/dist/brain/session-hooks.d.ts +19 -0
  262. package/dist/brain/session-hooks.d.ts.map +1 -1
  263. package/dist/brain/session-hooks.js +249 -18
  264. package/dist/brain/session-hooks.js.map +1 -1
  265. package/dist/brain/subagent-bridge.d.ts +46 -0
  266. package/dist/brain/subagent-bridge.d.ts.map +1 -0
  267. package/dist/brain/subagent-bridge.js +364 -0
  268. package/dist/brain/subagent-bridge.js.map +1 -0
  269. package/dist/brain/swarm-debate.d.ts +22 -0
  270. package/dist/brain/swarm-debate.d.ts.map +1 -0
  271. package/dist/brain/swarm-debate.js +134 -0
  272. package/dist/brain/swarm-debate.js.map +1 -0
  273. package/dist/brain/team-brain-sync.d.ts +22 -0
  274. package/dist/brain/team-brain-sync.d.ts.map +1 -0
  275. package/dist/brain/team-brain-sync.js +132 -0
  276. package/dist/brain/team-brain-sync.js.map +1 -0
  277. package/dist/brain/token-economy.d.ts +25 -0
  278. package/dist/brain/token-economy.d.ts.map +1 -0
  279. package/dist/brain/token-economy.js +216 -0
  280. package/dist/brain/token-economy.js.map +1 -0
  281. package/dist/brain/voice-mode.d.ts +15 -0
  282. package/dist/brain/voice-mode.d.ts.map +1 -0
  283. package/dist/brain/voice-mode.js +97 -0
  284. package/dist/brain/voice-mode.js.map +1 -0
  285. package/dist/cli.js +1702 -4
  286. package/dist/cli.js.map +1 -1
  287. package/dist/dashboard/server.d.ts +6 -0
  288. package/dist/dashboard/server.d.ts.map +1 -1
  289. package/dist/dashboard/server.js +1118 -368
  290. package/dist/dashboard/server.js.map +1 -1
  291. package/dist/dashboard/v6-dashboard-html.d.ts +2 -0
  292. package/dist/dashboard/v6-dashboard-html.d.ts.map +1 -0
  293. package/dist/dashboard/v6-dashboard-html.js +2474 -0
  294. package/dist/dashboard/v6-dashboard-html.js.map +1 -0
  295. package/dist/index.d.ts +27 -0
  296. package/dist/index.d.ts.map +1 -1
  297. package/dist/index.js +29 -1
  298. package/dist/index.js.map +1 -1
  299. package/dist/types.d.ts +518 -2
  300. package/dist/types.d.ts.map +1 -1
  301. package/package.json +33 -4
@@ -0,0 +1,364 @@
1
+ // src/brain/subagent-bridge.ts — Sub-Agent Brain Bridge (SABB)
2
+ // v6.0.0 — Hive Mind Edition
3
+ //
4
+ // When a parent agent (Claude Code Task, Cursor Composer, CrewAI, LangGraph, AutoGen)
5
+ // spawns a sub-agent, SABB:
6
+ // 1. Detects the spawn (via MCP handshake or CLI call)
7
+ // 2. Computes a context sliver — the 3–5% of the global brain relevant to THIS task
8
+ // 3. Formats it for injection into the sub-agent's spawn prompt
9
+ // 4. Quarantines new memories from the sub-agent until confidence ≥ 0.7
10
+ // 5. Graduates verified memories back into the global brain
11
+ //
12
+ // No other AI tool syncs memory to sub-agents. Every sub-agent framework today
13
+ // (Claude Task tool, CrewAI, LangGraph, AutoGen) starts sub-agents with zero
14
+ // shared memory. SABB is the first cross-framework brain bridge.
15
+ import * as fs from 'fs';
16
+ import * as path from 'path';
17
+ import * as os from 'os';
18
+ import * as crypto from 'crypto';
19
+ import { GlobalBrain, getGlobalBrain } from './global-brain.js';
20
+ const SABB_DIR = path.join(os.homedir(), '.shadow-brain', 'sabb');
21
+ const QUARANTINE_PATH = path.join(SABB_DIR, 'quarantine.json');
22
+ const SPAWN_LOG_PATH = path.join(SABB_DIR, 'spawns.jsonl');
23
+ const DEFAULT_SLIVER_TOKEN_BUDGET = 300;
24
+ const DEFAULT_GRADUATION_THRESHOLD = 0.7;
25
+ function emptyStats() {
26
+ return {
27
+ totalSpawns: 0,
28
+ totalSlivers: 0,
29
+ quarantined: 0,
30
+ graduated: 0,
31
+ rejected: 0,
32
+ avgSliverTokens: 0,
33
+ avgGraduationMs: 0,
34
+ byFramework: {
35
+ 'claude-code-task': 0,
36
+ 'cursor-composer': 0,
37
+ 'cline-substep': 0,
38
+ 'crewai': 0,
39
+ 'langgraph': 0,
40
+ 'autogen': 0,
41
+ 'generic': 0,
42
+ },
43
+ byParent: {},
44
+ };
45
+ }
46
+ export class SubAgentBridge {
47
+ constructor(brain, opts = {}) {
48
+ this.quarantine = new Map();
49
+ this.stats = emptyStats();
50
+ this.initialized = false;
51
+ this.brain = brain ?? getGlobalBrain();
52
+ this.graduationThreshold = opts.graduationThreshold ?? DEFAULT_GRADUATION_THRESHOLD;
53
+ }
54
+ async init() {
55
+ if (this.initialized)
56
+ return;
57
+ fs.mkdirSync(SABB_DIR, { recursive: true });
58
+ await this.brain.init();
59
+ if (fs.existsSync(QUARANTINE_PATH)) {
60
+ try {
61
+ const raw = fs.readFileSync(QUARANTINE_PATH, 'utf-8');
62
+ const parsed = JSON.parse(raw);
63
+ if (Array.isArray(parsed.quarantine)) {
64
+ for (const q of parsed.quarantine) {
65
+ this.quarantine.set(q.id, {
66
+ ...q,
67
+ createdAt: new Date(q.createdAt),
68
+ graduatedAt: q.graduatedAt ? new Date(q.graduatedAt) : null,
69
+ });
70
+ }
71
+ }
72
+ if (parsed.stats)
73
+ this.stats = { ...emptyStats(), ...parsed.stats };
74
+ }
75
+ catch {
76
+ // Corrupt file — start fresh
77
+ }
78
+ }
79
+ this.initialized = true;
80
+ }
81
+ /** Register a sub-agent spawn. Returns a spawn ID used for later memory quarantine. */
82
+ async registerSpawn(req) {
83
+ await this.init();
84
+ const spawn = {
85
+ ...req,
86
+ spawnTime: req.spawnTime ?? new Date(),
87
+ };
88
+ this.stats.totalSpawns++;
89
+ this.stats.byFramework[spawn.framework]++;
90
+ this.stats.byParent[spawn.parentAgent] = (this.stats.byParent[spawn.parentAgent] ?? 0) + 1;
91
+ // Append to spawn log
92
+ try {
93
+ fs.appendFileSync(SPAWN_LOG_PATH, JSON.stringify(spawn) + '\n');
94
+ }
95
+ catch {
96
+ // Log failures are non-fatal
97
+ }
98
+ await this.flush();
99
+ return spawn;
100
+ }
101
+ /**
102
+ * Compute a context sliver for a sub-agent. Returns a concise, task-focused
103
+ * briefing (default budget: 300 tokens) extracted from the global brain.
104
+ */
105
+ async computeSliver(req, opts = {}) {
106
+ await this.init();
107
+ const budget = opts.tokenBudget ?? req.tokenBudget ?? DEFAULT_SLIVER_TOKEN_BUDGET;
108
+ const projectId = GlobalBrain.projectIdFor(req.projectDir);
109
+ const taskTerms = this.extractKeyTerms(req.taskDescription);
110
+ // Pull recent project memories + keyword-match anything with high importance
111
+ const candidates = this.brain.recall({
112
+ projectId,
113
+ keywords: taskTerms,
114
+ limit: 40,
115
+ minImportance: 0.4,
116
+ });
117
+ const scored = candidates
118
+ .map(entry => ({
119
+ entry,
120
+ score: this.scoreRelevance(entry, taskTerms, req.taskDescription),
121
+ }))
122
+ .filter(x => x.score > 0)
123
+ .sort((a, b) => b.score - a.score);
124
+ const selected = [];
125
+ let tokenCount = 0;
126
+ for (const { entry, score } of scored) {
127
+ const tokens = this.estimateTokens(entry.content);
128
+ if (tokenCount + tokens > budget)
129
+ continue;
130
+ selected.push({
131
+ id: entry.id,
132
+ content: entry.content,
133
+ category: entry.category,
134
+ relevance: Math.min(1, score / 10),
135
+ });
136
+ tokenCount += tokens;
137
+ if (selected.length >= 12)
138
+ break;
139
+ }
140
+ const warnings = this.extractWarnings(candidates);
141
+ const markdown = this.formatSliverMarkdown(req, selected, warnings);
142
+ this.stats.totalSlivers++;
143
+ this.stats.avgSliverTokens = this.rollingAvg(this.stats.avgSliverTokens, tokenCount, this.stats.totalSlivers);
144
+ return {
145
+ subAgentId: req.subAgentId,
146
+ parentAgent: req.parentAgent,
147
+ taskDescription: req.taskDescription,
148
+ memories: selected,
149
+ warnings,
150
+ tokenCount,
151
+ markdown,
152
+ generatedAt: new Date(),
153
+ };
154
+ }
155
+ /** Store a memory from a sub-agent in quarantine. */
156
+ async quarantineMemory(subAgentId, parentAgent, content, category, confidence, evidence = []) {
157
+ await this.init();
158
+ const entry = {
159
+ id: `quar-${crypto.randomBytes(6).toString('hex')}`,
160
+ subAgentId,
161
+ parentAgent,
162
+ content,
163
+ category,
164
+ confidence,
165
+ graduatedAt: null,
166
+ verdict: 'pending',
167
+ evidence,
168
+ createdAt: new Date(),
169
+ };
170
+ this.quarantine.set(entry.id, entry);
171
+ this.stats.quarantined++;
172
+ await this.flush();
173
+ // Auto-graduate if confidence already passes threshold
174
+ if (confidence >= this.graduationThreshold) {
175
+ await this.graduate(entry.id);
176
+ }
177
+ return entry;
178
+ }
179
+ /** Graduate a quarantined memory into the global brain. */
180
+ async graduate(memoryId, overrides = {}) {
181
+ await this.init();
182
+ const entry = this.quarantine.get(memoryId);
183
+ if (!entry)
184
+ return false;
185
+ if (entry.verdict !== 'pending')
186
+ return false;
187
+ const start = Date.now();
188
+ const projectMatch = await this.findProjectForSubAgent(entry.subAgentId);
189
+ this.brain.writeSync({
190
+ projectId: projectMatch?.projectId ?? 'unknown-project',
191
+ projectName: projectMatch?.projectName ?? 'unknown',
192
+ agentTool: overrides.agentTool ?? entry.parentAgent,
193
+ category: entry.category,
194
+ content: entry.content,
195
+ importance: Math.min(1, entry.confidence),
196
+ metadata: {
197
+ ...(overrides.metadata ?? {}),
198
+ origin: 'subagent',
199
+ subAgentId: entry.subAgentId,
200
+ parentAgent: entry.parentAgent,
201
+ quarantineId: entry.id,
202
+ },
203
+ });
204
+ entry.verdict = 'graduated';
205
+ entry.graduatedAt = new Date();
206
+ this.stats.graduated++;
207
+ this.stats.quarantined = Math.max(0, this.stats.quarantined - 1);
208
+ this.stats.avgGraduationMs = this.rollingAvg(this.stats.avgGraduationMs, Date.now() - start, this.stats.graduated);
209
+ await this.flush();
210
+ return true;
211
+ }
212
+ /** Reject a quarantined memory (hallucination, low confidence). */
213
+ async reject(memoryId, reason = 'rejected') {
214
+ await this.init();
215
+ const entry = this.quarantine.get(memoryId);
216
+ if (!entry)
217
+ return false;
218
+ entry.verdict = 'rejected';
219
+ entry.evidence = [...entry.evidence, reason];
220
+ this.stats.rejected++;
221
+ this.stats.quarantined = Math.max(0, this.stats.quarantined - 1);
222
+ await this.flush();
223
+ return true;
224
+ }
225
+ /** List pending quarantined memories. */
226
+ listQuarantine(subAgentId) {
227
+ return Array.from(this.quarantine.values())
228
+ .filter(q => q.verdict === 'pending' && (!subAgentId || q.subAgentId === subAgentId))
229
+ .sort((a, b) => b.createdAt.getTime() - a.createdAt.getTime());
230
+ }
231
+ getStats() {
232
+ return JSON.parse(JSON.stringify(this.stats));
233
+ }
234
+ /** Parse a spawn log into an array of SubAgentSpawnRequest. Useful for auditing. */
235
+ readSpawnLog(limit = 50) {
236
+ if (!fs.existsSync(SPAWN_LOG_PATH))
237
+ return [];
238
+ try {
239
+ const raw = fs.readFileSync(SPAWN_LOG_PATH, 'utf-8');
240
+ return raw
241
+ .split('\n')
242
+ .filter(Boolean)
243
+ .slice(-limit)
244
+ .map(line => {
245
+ const parsed = JSON.parse(line);
246
+ return { ...parsed, spawnTime: new Date(parsed.spawnTime) };
247
+ });
248
+ }
249
+ catch {
250
+ return [];
251
+ }
252
+ }
253
+ // ── Internals ─────────────────────────────────────────────────────────────
254
+ extractKeyTerms(task) {
255
+ const stopwords = new Set(['the', 'a', 'an', 'and', 'or', 'of', 'to', 'for', 'in', 'on', 'is', 'it', 'this', 'that', 'with', 'as', 'from', 'by', 'be', 'do', 'can', 'will', 'should', 'would', 'could', 'i', 'you', 'we', 'they', 'my', 'your']);
256
+ return task
257
+ .toLowerCase()
258
+ .replace(/[^a-z0-9\s-]/g, ' ')
259
+ .split(/\s+/)
260
+ .filter(w => w.length > 2 && !stopwords.has(w))
261
+ .slice(0, 12);
262
+ }
263
+ scoreRelevance(entry, terms, task) {
264
+ let score = 0;
265
+ const content = entry.content.toLowerCase();
266
+ for (const term of terms) {
267
+ if (content.includes(term))
268
+ score += 2;
269
+ }
270
+ // Recency boost: newer entries up-ranked slightly
271
+ const ageDays = (Date.now() - new Date(entry.createdAt).getTime()) / (1000 * 60 * 60 * 24);
272
+ score += Math.max(0, 2 - ageDays / 30);
273
+ // Importance
274
+ score += entry.importance * 3;
275
+ // Category match boost
276
+ const taskLower = task.toLowerCase();
277
+ if (taskLower.includes(entry.category.toLowerCase()))
278
+ score += 2;
279
+ return score;
280
+ }
281
+ extractWarnings(entries) {
282
+ const warningCategories = new Set(['warning', 'pitfall', 'security', 'bug', 'incident', 'failure']);
283
+ const warnings = [];
284
+ for (const e of entries) {
285
+ if (warningCategories.has(e.category.toLowerCase())) {
286
+ warnings.push(`[${e.category}] ${e.content.slice(0, 140)}`);
287
+ }
288
+ if (warnings.length >= 5)
289
+ break;
290
+ }
291
+ return warnings;
292
+ }
293
+ estimateTokens(text) {
294
+ // Rough tokens-per-char heuristic for English: ~4 chars per token
295
+ return Math.ceil(text.length / 4);
296
+ }
297
+ formatSliverMarkdown(req, memories, warnings) {
298
+ const lines = [
299
+ `## Shadow Brain Context Sliver`,
300
+ ``,
301
+ `**Parent:** ${req.parentAgent} · **Framework:** ${req.framework}`,
302
+ `**Task:** ${req.taskDescription}`,
303
+ ``,
304
+ `### What you should know before starting`,
305
+ ];
306
+ if (memories.length === 0) {
307
+ lines.push('_No relevant project memories found. Proceed with general best practices._');
308
+ }
309
+ else {
310
+ for (const m of memories) {
311
+ lines.push(`- **[${m.category}]** ${m.content.slice(0, 220)}${m.content.length > 220 ? '…' : ''}`);
312
+ }
313
+ }
314
+ if (warnings.length) {
315
+ lines.push('', `### Warnings from past work`);
316
+ for (const w of warnings)
317
+ lines.push(`- ${w}`);
318
+ }
319
+ lines.push('', `### Rules for this sub-agent`, '- Use project-specific memory over generic assumptions.', '- Any new learning will be quarantined until confidence ≥ 0.7.', '- Do not access secrets or run destructive commands without explicit approval.', '');
320
+ return lines.join('\n');
321
+ }
322
+ async findProjectForSubAgent(_subAgentId) {
323
+ // Derive project from most recent spawn record for this sub-agent
324
+ const spawns = this.readSpawnLog(200).reverse();
325
+ const match = spawns.find(s => s.subAgentId === _subAgentId);
326
+ if (!match)
327
+ return null;
328
+ return {
329
+ projectId: GlobalBrain.projectIdFor(match.projectDir),
330
+ projectName: path.basename(match.projectDir),
331
+ };
332
+ }
333
+ rollingAvg(currentAvg, newValue, count) {
334
+ if (count <= 1)
335
+ return newValue;
336
+ return currentAvg + (newValue - currentAvg) / count;
337
+ }
338
+ async flush() {
339
+ try {
340
+ const payload = {
341
+ schemaVersion: 1,
342
+ quarantine: Array.from(this.quarantine.values()),
343
+ stats: this.stats,
344
+ };
345
+ const tmp = QUARANTINE_PATH + '.tmp';
346
+ fs.writeFileSync(tmp, JSON.stringify(payload, null, 2));
347
+ fs.renameSync(tmp, QUARANTINE_PATH);
348
+ }
349
+ catch {
350
+ // Persistence failures are non-fatal in v6.0; quarantine lives in-memory
351
+ }
352
+ }
353
+ }
354
+ // Singleton helper — consistent with other v5.2 brain modules
355
+ let _instance = null;
356
+ export function getSubAgentBridge() {
357
+ if (!_instance)
358
+ _instance = new SubAgentBridge();
359
+ return _instance;
360
+ }
361
+ export function resetSubAgentBridgeForTests() {
362
+ _instance = null;
363
+ }
364
+ //# sourceMappingURL=subagent-bridge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subagent-bridge.js","sourceRoot":"","sources":["../../src/brain/subagent-bridge.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import { DebateTranscript } from '../types.js';
2
+ export declare class SwarmDebate {
3
+ private llm;
4
+ private debates;
5
+ private initialized;
6
+ constructor();
7
+ init(): Promise<void>;
8
+ /** Run a debate. Returns a transcript with verdict. */
9
+ debate(question: string, context: string, opts?: {
10
+ turns?: number;
11
+ proLabel?: string;
12
+ conLabel?: string;
13
+ }): Promise<DebateTranscript>;
14
+ listDebates(limit?: number): DebateTranscript[];
15
+ private generateTurn;
16
+ private generateArbiter;
17
+ private fallbackStatement;
18
+ private persist;
19
+ }
20
+ export declare function getSwarmDebate(): SwarmDebate;
21
+ export declare function resetSwarmDebateForTests(): void;
22
+ //# sourceMappingURL=swarm-debate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"swarm-debate.d.ts","sourceRoot":"","sources":["../../src/brain/swarm-debate.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,gBAAgB,EAAc,MAAM,aAAa,CAAC;AAU3D,qBAAa,WAAW;IACtB,OAAO,CAAC,GAAG,CAAW;IACtB,OAAO,CAAC,OAAO,CAA4C;IAC3D,OAAO,CAAC,WAAW,CAAS;;IAMtB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAoB3B,uDAAuD;IACjD,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAO,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAsC/I,WAAW,CAAC,KAAK,SAAK,GAAG,gBAAgB,EAAE;YAQ7B,YAAY;YAeZ,eAAe;IAgB7B,OAAO,CAAC,iBAAiB;YAMX,OAAO;CAUtB;AAID,wBAAgB,cAAc,IAAI,WAAW,CAG5C;AAED,wBAAgB,wBAAwB,IAAI,IAAI,CAE/C"}
@@ -0,0 +1,134 @@
1
+ // src/brain/swarm-debate.ts — Swarm Debate Protocol
2
+ // v6.0.0 — Hive Mind Edition
3
+ //
4
+ // For critical decisions, spawn 2–N sub-agents that DEBATE a question.
5
+ // An arbiter agent reads the transcript and picks a winner with reasoning.
6
+ // Uses Local LLM (Ollama) by default; remote providers opt-in.
7
+ import * as fs from 'fs';
8
+ import * as path from 'path';
9
+ import * as os from 'os';
10
+ import * as crypto from 'crypto';
11
+ import { getLocalLLM } from './local-llm.js';
12
+ const DEBATE_PATH = path.join(os.homedir(), '.shadow-brain', 'debates.json');
13
+ export class SwarmDebate {
14
+ constructor() {
15
+ this.debates = new Map();
16
+ this.initialized = false;
17
+ this.llm = getLocalLLM();
18
+ }
19
+ async init() {
20
+ if (this.initialized)
21
+ return;
22
+ fs.mkdirSync(path.dirname(DEBATE_PATH), { recursive: true });
23
+ if (fs.existsSync(DEBATE_PATH)) {
24
+ try {
25
+ const parsed = JSON.parse(fs.readFileSync(DEBATE_PATH, 'utf-8'));
26
+ for (const d of parsed.debates ?? []) {
27
+ this.debates.set(d.id, {
28
+ ...d,
29
+ createdAt: new Date(d.createdAt),
30
+ turns: d.turns.map(t => ({ ...t, timestamp: new Date(t.timestamp) })),
31
+ });
32
+ }
33
+ }
34
+ catch {
35
+ /* skip */
36
+ }
37
+ }
38
+ this.initialized = true;
39
+ }
40
+ /** Run a debate. Returns a transcript with verdict. */
41
+ async debate(question, context, opts = {}) {
42
+ await this.init();
43
+ const turnCount = opts.turns ?? 2;
44
+ const proLabel = opts.proLabel ?? 'pro';
45
+ const conLabel = opts.conLabel ?? 'con';
46
+ const start = Date.now();
47
+ const turns = [];
48
+ let turnId = 1;
49
+ // Alternate pro/con turns
50
+ for (let i = 0; i < turnCount; i++) {
51
+ const proTurn = await this.generateTurn(turnId++, proLabel, 'pro', question, context, turns);
52
+ turns.push(proTurn);
53
+ const conTurn = await this.generateTurn(turnId++, conLabel, 'con', question, context, turns);
54
+ turns.push(conTurn);
55
+ }
56
+ // Arbiter
57
+ const arbiter = await this.generateArbiter(turnId, question, context, turns);
58
+ turns.push(arbiter);
59
+ const transcript = {
60
+ id: `deb-${crypto.randomBytes(6).toString('hex')}`,
61
+ question,
62
+ context,
63
+ turns,
64
+ verdict: arbiter.statement,
65
+ arbiterConfidence: arbiter.confidence,
66
+ durationMs: Date.now() - start,
67
+ createdAt: new Date(),
68
+ };
69
+ this.debates.set(transcript.id, transcript);
70
+ await this.persist();
71
+ return transcript;
72
+ }
73
+ listDebates(limit = 20) {
74
+ return Array.from(this.debates.values())
75
+ .sort((a, b) => b.createdAt.getTime() - a.createdAt.getTime())
76
+ .slice(0, limit);
77
+ }
78
+ // ── Internals ─────────────────────────────────────────────────────────────
79
+ async generateTurn(turnId, agentLabel, position, question, context, prior) {
80
+ const transcript = prior.map(t => `${t.agentLabel} (${t.position}): ${t.statement}`).join('\n');
81
+ const prompt = `Question: ${question}\nContext: ${context}\n\nPrior turns:\n${transcript || '(no prior turns)'}\n\nYou are arguing ${position}. Respond in 2 short sentences max.`;
82
+ const res = await this.llm.generate(prompt, `You are a terse debater taking the ${position} position.`);
83
+ const statement = res.text.trim() || this.fallbackStatement(position, question);
84
+ return {
85
+ turnId,
86
+ agentLabel,
87
+ position,
88
+ statement: statement.slice(0, 340),
89
+ confidence: res.provider === 'none' ? 0.5 : 0.7,
90
+ timestamp: new Date(),
91
+ };
92
+ }
93
+ async generateArbiter(turnId, question, context, turns) {
94
+ const transcript = turns.map(t => `${t.agentLabel} (${t.position}): ${t.statement}`).join('\n');
95
+ const prompt = `You are an arbiter reading this debate. Pick the stronger side and give a one-sentence verdict.\n\nQuestion: ${question}\nContext: ${context}\n\nTranscript:\n${transcript}\n\nReply: "Winner: <pro|con>. Reason: <one sentence>."`;
96
+ const res = await this.llm.generate(prompt, 'You are a fair, terse arbiter.');
97
+ const text = res.text.trim() || 'Winner: pro. Reason: no clear evidence presented by con side.';
98
+ const confidence = res.provider === 'none' ? 0.5 : 0.75;
99
+ return {
100
+ turnId,
101
+ agentLabel: 'arbiter',
102
+ position: 'arbiter',
103
+ statement: text.slice(0, 340),
104
+ confidence,
105
+ timestamp: new Date(),
106
+ };
107
+ }
108
+ fallbackStatement(position, question) {
109
+ return position === 'pro'
110
+ ? `Proceeding with the proposal for "${question.slice(0, 60)}" is the safer default given existing conventions.`
111
+ : `There is no evidence base for "${question.slice(0, 60)}" — defaulting to the status quo is safer.`;
112
+ }
113
+ async persist() {
114
+ try {
115
+ const payload = { schemaVersion: 1, debates: Array.from(this.debates.values()) };
116
+ const tmp = DEBATE_PATH + '.tmp';
117
+ fs.writeFileSync(tmp, JSON.stringify(payload, null, 2));
118
+ fs.renameSync(tmp, DEBATE_PATH);
119
+ }
120
+ catch {
121
+ /* non-fatal */
122
+ }
123
+ }
124
+ }
125
+ let _instance = null;
126
+ export function getSwarmDebate() {
127
+ if (!_instance)
128
+ _instance = new SwarmDebate();
129
+ return _instance;
130
+ }
131
+ export function resetSwarmDebateForTests() {
132
+ _instance = null;
133
+ }
134
+ //# sourceMappingURL=swarm-debate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"swarm-debate.js","sourceRoot":"","sources":["../../src/brain/swarm-debate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import { TeamPeerInfo, TeamSyncMessage, AgentTool } from '../types.js';
2
+ export declare class TeamBrainSync {
3
+ private peerId;
4
+ private displayName;
5
+ private peers;
6
+ private outbox;
7
+ private initialized;
8
+ constructor();
9
+ init(): Promise<void>;
10
+ setDisplayName(name: string): void;
11
+ selfInfo(): TeamPeerInfo;
12
+ registerPeer(peer: Omit<TeamPeerInfo, 'connectedAt' | 'lastSeenAt'>): Promise<TeamPeerInfo>;
13
+ heartbeat(peerId: string, agentTools?: AgentTool[]): Promise<boolean>;
14
+ enqueue(message: Omit<TeamSyncMessage, 'timestamp'>): Promise<TeamSyncMessage>;
15
+ drainOutbox(): TeamSyncMessage[];
16
+ listPeers(): TeamPeerInfo[];
17
+ getPeerId(): string;
18
+ private persist;
19
+ }
20
+ export declare function getTeamBrainSync(): TeamBrainSync;
21
+ export declare function resetTeamBrainSyncForTests(): void;
22
+ //# sourceMappingURL=team-brain-sync.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"team-brain-sync.d.ts","sourceRoot":"","sources":["../../src/brain/team-brain-sync.ts"],"names":[],"mappings":"AAgBA,OAAO,EACL,YAAY,EACZ,eAAe,EACf,SAAS,EACV,MAAM,aAAa,CAAC;AAYrB,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,KAAK,CAAwC;IACrD,OAAO,CAAC,MAAM,CAAyB;IACvC,OAAO,CAAC,WAAW,CAAS;;IAOtB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAuB3B,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAIlC,QAAQ,IAAI,YAAY;IAWlB,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,YAAY,EAAE,aAAa,GAAG,YAAY,CAAC,GAAG,OAAO,CAAC,YAAY,CAAC;IAY3F,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IAUrE,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,eAAe,EAAE,WAAW,CAAC,GAAG,OAAO,CAAC,eAAe,CAAC;IASpF,WAAW,IAAI,eAAe,EAAE;IAOhC,SAAS,IAAI,YAAY,EAAE;IAI3B,SAAS,IAAI,MAAM;YAIL,OAAO;CAgBtB;AAID,wBAAgB,gBAAgB,IAAI,aAAa,CAGhD;AAED,wBAAgB,0BAA0B,IAAI,IAAI,CAEjD"}