@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
@@ -1,6 +1,6 @@
1
1
  // src/brain/mcp-server.ts — JSON-RPC 2.0 MCP server over HTTP
2
2
  // Exposes analysis tools via Model Context Protocol
3
- // v5.0.1 — Infinite Intelligence Edition (Cursor + Claude Code + Kilo Code compatible)
3
+ // v6.0.0 — Hive Mind Edition (Cursor + Claude Code + Codex + Copilot + sub-agent frameworks)
4
4
  import * as http from 'http';
5
5
  export class MCPServer {
6
6
  constructor(orchestrator, options) {
@@ -11,6 +11,8 @@ export class MCPServer {
11
11
  this.options = {
12
12
  port: options?.port ?? 7342,
13
13
  host: options?.host ?? 'localhost',
14
+ authToken: options?.authToken ?? process.env.SHADOW_BRAIN_MCP_TOKEN ?? '',
15
+ corsOrigin: options?.corsOrigin ?? `http://${options?.host ?? 'localhost'}:${options?.port ?? 7342}`,
14
16
  };
15
17
  this.toolHandlers = {
16
18
  analyze: this.handleAnalyze.bind(this),
@@ -37,6 +39,292 @@ export class MCPServer {
37
39
  global_recall: this.handleGlobalRecall.bind(this),
38
40
  global_stats: this.handleGlobalStats.bind(this),
39
41
  attach_status: this.handleAttachStatus.bind(this),
42
+ global_timeline: this.handleGlobalTimeline.bind(this),
43
+ firewall_check: this.handleFirewallCheck.bind(this),
44
+ agent_handoff: this.handleAgentHandoff.bind(this),
45
+ // v6.0.0 — Hive Mind tools
46
+ subagent_sliver: this.handleSubagentSliver.bind(this),
47
+ subagent_quarantine_list: this.handleSubagentQuarantineList.bind(this),
48
+ subagent_graduate: this.handleSubagentGraduate.bind(this),
49
+ subagent_reject: this.handleSubagentReject.bind(this),
50
+ causal_link: this.handleCausalLink.bind(this),
51
+ causal_trace: this.handleCausalTrace.bind(this),
52
+ causal_influence: this.handleCausalInfluence.bind(this),
53
+ collision_declare: this.handleCollisionDeclare.bind(this),
54
+ collision_list: this.handleCollisionList.bind(this),
55
+ dream_run: this.handleDreamRun.bind(this),
56
+ dream_list: this.handleDreamList.bind(this),
57
+ reputation_sign: this.handleReputationSign.bind(this),
58
+ reputation_score: this.handleReputationScore.bind(this),
59
+ reputation_badge: this.handleReputationBadge.bind(this),
60
+ debate_run: this.handleDebateRun.bind(this),
61
+ premortem_run: this.handlePremortemRun.bind(this),
62
+ branch_state: this.handleBranchState.bind(this),
63
+ attention_heatmap: this.handleAttentionHeatmap.bind(this),
64
+ tokens_record: this.handleTokensRecord.bind(this),
65
+ tokens_report: this.handleTokensReport.bind(this),
66
+ forget_consolidate: this.handleForgetConsolidate.bind(this),
67
+ formal_generate: this.handleFormalGenerate.bind(this),
68
+ calibration_record: this.handleCalibrationRecord.bind(this),
69
+ calibration_scores: this.handleCalibrationScores.bind(this),
70
+ airgap_status: this.handleAirGapStatus.bind(this),
71
+ airgap_enable: this.handleAirGapEnable.bind(this),
72
+ airgap_disable: this.handleAirGapDisable.bind(this),
73
+ quarantine_list: this.handleQuarantineList.bind(this),
74
+ quarantine_promote: this.handleQuarantinePromote.bind(this),
75
+ voice_process: this.handleVoiceProcess.bind(this),
76
+ garden_snapshot: this.handleGardenSnapshot.bind(this),
77
+ pr_review_generate: this.handlePRReviewGenerate.bind(this),
78
+ exchange_export: this.handleExchangeExport.bind(this),
79
+ exchange_import: this.handleExchangeImport.bind(this),
80
+ exchange_list: this.handleExchangeList.bind(this),
81
+ hive_status: this.handleHiveStatus.bind(this),
82
+ };
83
+ }
84
+ // ── v6.0 Hive Mind handlers ────────────────────────────────────────────────
85
+ async handleSubagentSliver(params) {
86
+ const { getSubAgentBridge } = await import('./subagent-bridge.js');
87
+ const b = getSubAgentBridge();
88
+ const req = await b.registerSpawn({
89
+ parentAgent: params.parentAgent ?? 'claude-code',
90
+ subAgentId: params.subAgentId ?? `sub-${Date.now()}`,
91
+ framework: params.framework ?? 'claude-code-task',
92
+ taskDescription: params.taskDescription ?? '',
93
+ projectDir: params.projectDir ?? process.cwd(),
94
+ tokenBudget: params.tokenBudget,
95
+ });
96
+ return b.computeSliver(req);
97
+ }
98
+ async handleSubagentQuarantineList(_params) {
99
+ const { getSubAgentBridge } = await import('./subagent-bridge.js');
100
+ const b = getSubAgentBridge();
101
+ await b.init();
102
+ return b.listQuarantine();
103
+ }
104
+ async handleSubagentGraduate(params) {
105
+ const { getSubAgentBridge } = await import('./subagent-bridge.js');
106
+ return { ok: await getSubAgentBridge().graduate(params.memoryId) };
107
+ }
108
+ async handleSubagentReject(params) {
109
+ const { getSubAgentBridge } = await import('./subagent-bridge.js');
110
+ return { ok: await getSubAgentBridge().reject(params.memoryId, params.reason) };
111
+ }
112
+ async handleCausalLink(params) {
113
+ const { getCausalChains } = await import('./causal-chains.js');
114
+ return getCausalChains().link(params.effectId, params.causeId, params.rationale, params.strength ?? 1.0);
115
+ }
116
+ async handleCausalTrace(params) {
117
+ const { getCausalChains } = await import('./causal-chains.js');
118
+ return getCausalChains().trace(params.memoryId, { maxDepth: params.maxDepth ?? 8 });
119
+ }
120
+ async handleCausalInfluence(params) {
121
+ const { getCausalChains } = await import('./causal-chains.js');
122
+ return getCausalChains().influence(params.memoryId, { maxDepth: params.maxDepth ?? 6 });
123
+ }
124
+ async handleCollisionDeclare(params) {
125
+ const { getCollisionDetective } = await import('./collision-detective.js');
126
+ return getCollisionDetective().declareIntent(params.agentTool, params.sessionId, params.filePath, params.startLine, params.endLine, params.intent, params.ttlMs);
127
+ }
128
+ async handleCollisionList(_params) {
129
+ const { getCollisionDetective } = await import('./collision-detective.js');
130
+ const d = getCollisionDetective();
131
+ await d.init();
132
+ return { intents: d.activeIntents(), alerts: d.activeAlerts(), stats: d.getStats() };
133
+ }
134
+ async handleDreamRun(_params) {
135
+ const { getDreamEngine } = await import('./dream-engine.js');
136
+ return getDreamEngine().dreamOnce();
137
+ }
138
+ async handleDreamList(params) {
139
+ const { getDreamEngine } = await import('./dream-engine.js');
140
+ const d = getDreamEngine();
141
+ await d.init();
142
+ return d.listDreams({ unacknowledgedOnly: params.unacknowledgedOnly, limit: params.limit });
143
+ }
144
+ async handleReputationSign(params) {
145
+ const { getReputationLedger } = await import('./reputation-ledger.js');
146
+ return getReputationLedger().sign({
147
+ agentTool: params.agentTool,
148
+ agentVersion: params.agentVersion,
149
+ projectId: params.projectId,
150
+ decision: params.decision,
151
+ category: params.category,
152
+ confidence: params.confidence ?? 0.8,
153
+ });
154
+ }
155
+ async handleReputationScore(params) {
156
+ const { getReputationLedger } = await import('./reputation-ledger.js');
157
+ const l = getReputationLedger();
158
+ await l.init();
159
+ return l.getScore(params.agentTool, params.agentVersion);
160
+ }
161
+ async handleReputationBadge(params) {
162
+ const { getReputationLedger } = await import('./reputation-ledger.js');
163
+ const l = getReputationLedger();
164
+ await l.init();
165
+ return { badge: l.badge(params.agentTool, params.agentVersion) };
166
+ }
167
+ async handleDebateRun(params) {
168
+ const { getSwarmDebate } = await import('./swarm-debate.js');
169
+ return getSwarmDebate().debate(params.question, params.context ?? '', { turns: params.turns ?? 2 });
170
+ }
171
+ async handlePremortemRun(params) {
172
+ const { getPreMortem } = await import('./pre-mortem.js');
173
+ return getPreMortem().run(params.taskDescription, params.projectDir ?? process.cwd());
174
+ }
175
+ async handleBranchState(params) {
176
+ const { getBranchBrain } = await import('./branch-brain.js');
177
+ return getBranchBrain().getState(params.projectDir ?? process.cwd());
178
+ }
179
+ async handleAttentionHeatmap(params) {
180
+ const { getAttentionHeatmap } = await import('./attention-heatmap.js');
181
+ return getAttentionHeatmap().compute({
182
+ decisionText: params.decisionText,
183
+ candidateMemoryIds: params.candidateMemoryIds ?? [],
184
+ agentTool: params.agentTool ?? 'claude-code',
185
+ });
186
+ }
187
+ async handleTokensRecord(params) {
188
+ const { getTokenEconomy } = await import('./token-economy.js');
189
+ return getTokenEconomy().record({
190
+ agentTool: params.agentTool,
191
+ model: params.model,
192
+ inputTokens: params.inputTokens,
193
+ outputTokens: params.outputTokens,
194
+ taskCategory: params.taskCategory,
195
+ });
196
+ }
197
+ async handleTokensReport(_params) {
198
+ const { getTokenEconomy } = await import('./token-economy.js');
199
+ return getTokenEconomy().report();
200
+ }
201
+ async handleForgetConsolidate(_params) {
202
+ const { getForgettingCurve } = await import('./forgetting-curve.js');
203
+ return getForgettingCurve().runConsolidation();
204
+ }
205
+ async handleFormalGenerate(params) {
206
+ const { getFormalBridge } = await import('./formal-verification-bridge.js');
207
+ return getFormalBridge().generateFromText(params.text, params.sourceId);
208
+ }
209
+ async handleCalibrationRecord(params) {
210
+ const { getCalibrationMonitor } = await import('./calibration-monitor.js');
211
+ return getCalibrationMonitor().record({
212
+ agentTool: params.agentTool,
213
+ category: params.category,
214
+ claim: params.claim,
215
+ claimedConfidence: params.claimedConfidence,
216
+ actualOutcome: params.actualOutcome,
217
+ outcomeAt: new Date(),
218
+ });
219
+ }
220
+ async handleCalibrationScores(_params) {
221
+ const { getCalibrationMonitor } = await import('./calibration-monitor.js');
222
+ const m = getCalibrationMonitor();
223
+ await m.init();
224
+ return m.listScores();
225
+ }
226
+ async handleAirGapStatus(_params) {
227
+ const { getAirGapMode } = await import('./air-gap.js');
228
+ const a = getAirGapMode();
229
+ await a.init();
230
+ return a.status();
231
+ }
232
+ async handleAirGapEnable(params) {
233
+ const { getAirGapMode } = await import('./air-gap.js');
234
+ await getAirGapMode().enable(params.policy ?? 'strict');
235
+ return { ok: true };
236
+ }
237
+ async handleAirGapDisable(_params) {
238
+ const { getAirGapMode } = await import('./air-gap.js');
239
+ await getAirGapMode().disable();
240
+ return { ok: true };
241
+ }
242
+ async handleQuarantineList(params) {
243
+ const { getHallucinationQuarantine } = await import('./hallucination-quarantine.js');
244
+ const q = getHallucinationQuarantine();
245
+ await q.init();
246
+ return q.list({ pendingOnly: params.pendingOnly });
247
+ }
248
+ async handleQuarantinePromote(params) {
249
+ const { getHallucinationQuarantine } = await import('./hallucination-quarantine.js');
250
+ return { ok: await getHallucinationQuarantine().promote(params.id, params.projectId, params.agentTool ?? 'claude-code') };
251
+ }
252
+ async handleVoiceProcess(params) {
253
+ const { getVoiceMode } = await import('./voice-mode.js');
254
+ return getVoiceMode().process({ transcript: params.transcript, confidence: params.confidence, projectDir: params.projectDir });
255
+ }
256
+ async handleGardenSnapshot(params) {
257
+ const { getBrainGarden } = await import('./brain-garden.js');
258
+ return getBrainGarden().snapshot(params.limit ?? 100);
259
+ }
260
+ async handlePRReviewGenerate(params) {
261
+ const { getPRAutoReview } = await import('./pr-auto-review.js');
262
+ return getPRAutoReview().generate({
263
+ repo: params.repo,
264
+ prNumber: params.prNumber,
265
+ projectDir: params.projectDir ?? process.cwd(),
266
+ diffSummary: params.diffSummary,
267
+ changedFiles: params.changedFiles ?? [],
268
+ });
269
+ }
270
+ async handleExchangeExport(params) {
271
+ const { getBrainExchange } = await import('./brain-exchange.js');
272
+ return getBrainExchange().export({
273
+ name: params.name,
274
+ description: params.description ?? '',
275
+ author: params.author ?? 'anonymous',
276
+ categories: params.categories,
277
+ tags: params.tags,
278
+ limit: params.limit,
279
+ minImportance: params.minImportance,
280
+ });
281
+ }
282
+ async handleExchangeImport(params) {
283
+ const { getBrainExchange } = await import('./brain-exchange.js');
284
+ return getBrainExchange().import(params.filePath, { projectDir: params.projectDir ?? process.cwd(), agentTool: params.agentTool });
285
+ }
286
+ async handleExchangeList(_params) {
287
+ const { getBrainExchange } = await import('./brain-exchange.js');
288
+ return getBrainExchange().listLocal();
289
+ }
290
+ async handleHiveStatus(_params) {
291
+ const [{ getSubAgentBridge }, { getCausalChains }, { getCollisionDetective }, { getDreamEngine }, { getReputationLedger }, { getTokenEconomy }, { getFormalBridge }, { getAirGapMode }, { getGlobalBrain },] = await Promise.all([
292
+ import('./subagent-bridge.js'),
293
+ import('./causal-chains.js'),
294
+ import('./collision-detective.js'),
295
+ import('./dream-engine.js'),
296
+ import('./reputation-ledger.js'),
297
+ import('./token-economy.js'),
298
+ import('./formal-verification-bridge.js'),
299
+ import('./air-gap.js'),
300
+ import('./global-brain.js'),
301
+ ]);
302
+ const sabb = getSubAgentBridge();
303
+ const causal = getCausalChains();
304
+ const collisions = getCollisionDetective();
305
+ const dream = getDreamEngine();
306
+ const rep = getReputationLedger();
307
+ const tokens = getTokenEconomy();
308
+ const formal = getFormalBridge();
309
+ const airgap = getAirGapMode();
310
+ const brain = getGlobalBrain();
311
+ await Promise.all([sabb.init(), causal.init(), collisions.init(), dream.init(), rep.init(), tokens.init(), formal.init(), airgap.init(), brain.init()]);
312
+ return {
313
+ version: '6.0.0',
314
+ modules: {
315
+ sabb: sabb.getStats(),
316
+ causal: causal.stats(),
317
+ collision: collisions.getStats(),
318
+ dream: dream.getStats(),
319
+ reputation: rep.stats(),
320
+ tokenEconomy: await tokens.report(),
321
+ formalBridge: formal.stats(),
322
+ airGap: airgap.status(),
323
+ },
324
+ localFirst: true,
325
+ totalAgentsConnected: brain.getStats().totalAgents,
326
+ totalMemoriesStored: brain.getStats().totalEntries,
327
+ generatedAt: new Date(),
40
328
  };
41
329
  }
42
330
  // v5.2.0 handlers
@@ -82,6 +370,39 @@ export class MCPServer {
82
370
  const detected = await getHookInstaller().detectInstalled(projectDir);
83
371
  return { detected, projectDir };
84
372
  }
373
+ async handleGlobalTimeline(params) {
374
+ const { getGlobalBrain, GlobalBrain } = await import('./global-brain.js');
375
+ const projectDir = params.projectDir;
376
+ const brain = getGlobalBrain();
377
+ await brain.init();
378
+ return brain.timeline({
379
+ projectId: projectDir ? GlobalBrain.projectIdFor(projectDir) : params.projectId,
380
+ agentTool: params.agentTool,
381
+ category: params.category,
382
+ limit: params.limit ?? 30,
383
+ });
384
+ }
385
+ async handleFirewallCheck(params) {
386
+ const { AgentFirewall } = await import('./agent-firewall.js');
387
+ return new AgentFirewall().check({
388
+ command: params.command,
389
+ filePath: params.filePath,
390
+ url: params.url,
391
+ content: params.content,
392
+ toolName: params.toolName,
393
+ });
394
+ }
395
+ async handleAgentHandoff(params) {
396
+ const { AgentHandoff } = await import('./agent-handoff.js');
397
+ const projectDir = params.projectDir || process.cwd();
398
+ return new AgentHandoff().generate({
399
+ fromAgent: params.fromAgent || 'cursor',
400
+ toAgent: params.toAgent || 'codex',
401
+ projectDir,
402
+ task: params.task,
403
+ limit: params.limit ?? 12,
404
+ });
405
+ }
85
406
  async start() {
86
407
  this.server = http.createServer(async (req, res) => {
87
408
  if (!req.url) {
@@ -89,16 +410,27 @@ export class MCPServer {
89
410
  return;
90
411
  }
91
412
  const url = new URL(req.url, `http://${req.headers.host}`);
92
- // CORS headers — permissive for Cursor, Claude Code, and other AI tools
93
- res.setHeader('Access-Control-Allow-Origin', '*');
94
- res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, DELETE');
95
- res.setHeader('Access-Control-Allow-Headers', 'Content-Type, Authorization, Accept');
413
+ const origin = req.headers.origin;
414
+ const allowedOrigin = this.options.corsOrigin;
415
+ if (!origin || allowedOrigin === origin || allowedOrigin === '*') {
416
+ res.setHeader('Access-Control-Allow-Origin', origin || allowedOrigin);
417
+ }
418
+ res.setHeader('Vary', 'Origin');
419
+ res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS');
420
+ res.setHeader('Access-Control-Allow-Headers', 'Content-Type, Authorization, Accept, X-Shadow-Brain-Token');
96
421
  res.setHeader('Access-Control-Max-Age', '86400');
97
422
  if (req.method === 'OPTIONS') {
98
423
  res.writeHead(204);
99
424
  res.end();
100
425
  return;
101
426
  }
427
+ if (!this.isAuthorized(req)) {
428
+ this.sendJSON(res, 401, {
429
+ error: 'Unauthorized',
430
+ message: 'Set SHADOW_BRAIN_MCP_TOKEN or pass --auth-token, then send Bearer or X-Shadow-Brain-Token.',
431
+ });
432
+ return;
433
+ }
102
434
  if (req.method === 'POST' && (url.pathname === '/mcp' || url.pathname === '/')) {
103
435
  await this.handleHTTPMCPRequest(req, res);
104
436
  }
@@ -109,7 +441,7 @@ export class MCPServer {
109
441
  // Lightweight health endpoint for tool connectivity checks
110
442
  this.sendJSON(res, 200, {
111
443
  status: 'ok',
112
- version: '5.0.1',
444
+ version: '5.2.0',
113
445
  uptime: process.uptime(),
114
446
  tools: Object.keys(this.toolHandlers).length,
115
447
  });
@@ -213,8 +545,8 @@ export class MCPServer {
213
545
  },
214
546
  serverInfo: {
215
547
  name: 'agent-shadow-brain',
216
- version: '5.0.1',
217
- description: 'World\'s #1 AI coding intelligence layer — infinite memory, multi-agent consensus, self-evolving',
548
+ version: '5.2.0',
549
+ description: 'Cross-agent memory and safety layer for AI coding agents',
218
550
  },
219
551
  };
220
552
  }
@@ -502,7 +834,7 @@ export class MCPServer {
502
834
  async handleStatus(params) {
503
835
  const status = this.orchestrator.getStatus?.() || {};
504
836
  return {
505
- version: '5.0.1',
837
+ version: '5.2.0',
506
838
  ...status,
507
839
  };
508
840
  }
@@ -528,7 +860,7 @@ export class MCPServer {
528
860
  const instance = this.orchestrator[mod.key];
529
861
  modules.push({
530
862
  name: mod.name,
531
- version: '5.0.1',
863
+ version: '5.2.0',
532
864
  status: instance ? 'active' : 'idle',
533
865
  });
534
866
  }
@@ -764,6 +1096,48 @@ export class MCPServer {
764
1096
  },
765
1097
  },
766
1098
  },
1099
+ {
1100
+ name: 'global_timeline',
1101
+ description: 'Show the proof timeline of what agents learned and when (v5.2.0)',
1102
+ inputSchema: {
1103
+ type: 'object',
1104
+ properties: {
1105
+ projectDir: { type: 'string' },
1106
+ projectId: { type: 'string' },
1107
+ agentTool: { type: 'string' },
1108
+ category: { type: 'string' },
1109
+ limit: { type: 'number' },
1110
+ },
1111
+ },
1112
+ },
1113
+ {
1114
+ name: 'firewall_check',
1115
+ description: 'Agent Safety Firewall — check a command, file path, URL, or prompt before the agent acts',
1116
+ inputSchema: {
1117
+ type: 'object',
1118
+ properties: {
1119
+ command: { type: 'string' },
1120
+ filePath: { type: 'string' },
1121
+ url: { type: 'string' },
1122
+ content: { type: 'string' },
1123
+ toolName: { type: 'string' },
1124
+ },
1125
+ },
1126
+ },
1127
+ {
1128
+ name: 'agent_handoff',
1129
+ description: 'Create a cross-agent continuation packet from one AI coding agent to another',
1130
+ inputSchema: {
1131
+ type: 'object',
1132
+ properties: {
1133
+ fromAgent: { type: 'string' },
1134
+ toAgent: { type: 'string' },
1135
+ projectDir: { type: 'string' },
1136
+ task: { type: 'string' },
1137
+ limit: { type: 'number' },
1138
+ },
1139
+ },
1140
+ },
767
1141
  ];
768
1142
  }
769
1143
  // ── HTTP Handling ──────────────────────────────────────────────────────
@@ -795,15 +1169,24 @@ export class MCPServer {
795
1169
  'Content-Type': 'text/event-stream',
796
1170
  'Cache-Control': 'no-cache',
797
1171
  Connection: 'keep-alive',
798
- 'Access-Control-Allow-Origin': '*',
1172
+ 'Access-Control-Allow-Origin': this.options.corsOrigin,
799
1173
  });
800
- res.write(`event: connected\ndata: {"clientId":"${clientId}","version":"5.0.1"}\n\n`);
1174
+ res.write(`event: connected\ndata: {"clientId":"${clientId}","version":"5.2.0"}\n\n`);
801
1175
  const client = { res, id: clientId };
802
1176
  this.sseClients.set(clientId, client);
803
1177
  req.on('close', () => {
804
1178
  this.sseClients.delete(clientId);
805
1179
  });
806
1180
  }
1181
+ isAuthorized(req) {
1182
+ if (!this.options.authToken)
1183
+ return true;
1184
+ const auth = req.headers.authorization || '';
1185
+ const tokenHeader = req.headers['x-shadow-brain-token'];
1186
+ const bearer = auth.startsWith('Bearer ') ? auth.slice('Bearer '.length) : '';
1187
+ const token = Array.isArray(tokenHeader) ? tokenHeader[0] : tokenHeader;
1188
+ return bearer === this.options.authToken || token === this.options.authToken;
1189
+ }
807
1190
  broadcastSSE(event, data) {
808
1191
  const payload = `event: ${event}\ndata: ${JSON.stringify(data)}\n\n`;
809
1192
  const deadClients = [];