@theihtisham/agent-shadow-brain 5.2.0 → 6.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +310 -1014
- package/dist/brain/agent-firewall.d.ts +7 -0
- package/dist/brain/agent-firewall.d.ts.map +1 -0
- package/dist/brain/agent-firewall.js +152 -0
- package/dist/brain/agent-firewall.js.map +1 -0
- package/dist/brain/agent-handoff.d.ts +19 -0
- package/dist/brain/agent-handoff.d.ts.map +1 -0
- package/dist/brain/agent-handoff.js +127 -0
- package/dist/brain/agent-handoff.js.map +1 -0
- package/dist/brain/air-gap.d.ts +23 -0
- package/dist/brain/air-gap.d.ts.map +1 -0
- package/dist/brain/air-gap.js +137 -0
- package/dist/brain/air-gap.js.map +1 -0
- package/dist/brain/attention-heatmap.d.ts +24 -0
- package/dist/brain/attention-heatmap.d.ts.map +1 -0
- package/dist/brain/attention-heatmap.js +108 -0
- package/dist/brain/attention-heatmap.js.map +1 -0
- package/dist/brain/auto-setup.js +19 -14
- package/dist/brain/auto-setup.js.map +1 -1
- package/dist/brain/auto-update.js +1 -1
- package/dist/brain/brain-3d.d.ts +79 -0
- package/dist/brain/brain-3d.d.ts.map +1 -0
- package/dist/brain/brain-3d.js +468 -0
- package/dist/brain/brain-3d.js.map +1 -0
- package/dist/brain/brain-active-learner.d.ts +74 -0
- package/dist/brain/brain-active-learner.d.ts.map +1 -0
- package/dist/brain/brain-active-learner.js +425 -0
- package/dist/brain/brain-active-learner.js.map +1 -0
- package/dist/brain/brain-ascii.d.ts +32 -0
- package/dist/brain/brain-ascii.d.ts.map +1 -0
- package/dist/brain/brain-ascii.js +402 -0
- package/dist/brain/brain-ascii.js.map +1 -0
- package/dist/brain/brain-chat.d.ts +42 -0
- package/dist/brain/brain-chat.d.ts.map +1 -0
- package/dist/brain/brain-chat.js +162 -0
- package/dist/brain/brain-chat.js.map +1 -0
- package/dist/brain/brain-cinema.d.ts +45 -0
- package/dist/brain/brain-cinema.d.ts.map +1 -0
- package/dist/brain/brain-cinema.js +393 -0
- package/dist/brain/brain-cinema.js.map +1 -0
- package/dist/brain/brain-coach.d.ts +45 -0
- package/dist/brain/brain-coach.d.ts.map +1 -0
- package/dist/brain/brain-coach.js +383 -0
- package/dist/brain/brain-coach.js.map +1 -0
- package/dist/brain/brain-consolidator.d.ts +56 -0
- package/dist/brain/brain-consolidator.d.ts.map +1 -0
- package/dist/brain/brain-consolidator.js +386 -0
- package/dist/brain/brain-consolidator.js.map +1 -0
- package/dist/brain/brain-contradictions.d.ts +57 -0
- package/dist/brain/brain-contradictions.d.ts.map +1 -0
- package/dist/brain/brain-contradictions.js +443 -0
- package/dist/brain/brain-contradictions.js.map +1 -0
- package/dist/brain/brain-diff.d.ts +61 -0
- package/dist/brain/brain-diff.d.ts.map +1 -0
- package/dist/brain/brain-diff.js +439 -0
- package/dist/brain/brain-diff.js.map +1 -0
- package/dist/brain/brain-dna.d.ts +59 -0
- package/dist/brain/brain-dna.d.ts.map +1 -0
- package/dist/brain/brain-dna.js +336 -0
- package/dist/brain/brain-dna.js.map +1 -0
- package/dist/brain/brain-doppelganger.d.ts +32 -0
- package/dist/brain/brain-doppelganger.d.ts.map +1 -0
- package/dist/brain/brain-doppelganger.js +417 -0
- package/dist/brain/brain-doppelganger.js.map +1 -0
- package/dist/brain/brain-encryption.d.ts +14 -0
- package/dist/brain/brain-encryption.d.ts.map +1 -0
- package/dist/brain/brain-encryption.js +68 -0
- package/dist/brain/brain-encryption.js.map +1 -0
- package/dist/brain/brain-exchange.d.ts +30 -0
- package/dist/brain/brain-exchange.d.ts.map +1 -0
- package/dist/brain/brain-exchange.js +106 -0
- package/dist/brain/brain-exchange.js.map +1 -0
- package/dist/brain/brain-garden.d.ts +18 -0
- package/dist/brain/brain-garden.d.ts.map +1 -0
- package/dist/brain/brain-garden.js +81 -0
- package/dist/brain/brain-garden.js.map +1 -0
- package/dist/brain/brain-graph-walker.d.ts +54 -0
- package/dist/brain/brain-graph-walker.d.ts.map +1 -0
- package/dist/brain/brain-graph-walker.js +412 -0
- package/dist/brain/brain-graph-walker.js.map +1 -0
- package/dist/brain/brain-holiday-card.d.ts +50 -0
- package/dist/brain/brain-holiday-card.d.ts.map +1 -0
- package/dist/brain/brain-holiday-card.js +432 -0
- package/dist/brain/brain-holiday-card.js.map +1 -0
- package/dist/brain/brain-memes.d.ts +44 -0
- package/dist/brain/brain-memes.d.ts.map +1 -0
- package/dist/brain/brain-memes.js +438 -0
- package/dist/brain/brain-memes.js.map +1 -0
- package/dist/brain/brain-memory-tiers.d.ts +67 -0
- package/dist/brain/brain-memory-tiers.d.ts.map +1 -0
- package/dist/brain/brain-memory-tiers.js +292 -0
- package/dist/brain/brain-memory-tiers.js.map +1 -0
- package/dist/brain/brain-notebook.d.ts +68 -0
- package/dist/brain/brain-notebook.d.ts.map +1 -0
- package/dist/brain/brain-notebook.js +379 -0
- package/dist/brain/brain-notebook.js.map +1 -0
- package/dist/brain/brain-portability.js +1 -1
- package/dist/brain/brain-quantize.d.ts +62 -0
- package/dist/brain/brain-quantize.d.ts.map +1 -0
- package/dist/brain/brain-quantize.js +346 -0
- package/dist/brain/brain-quantize.js.map +1 -0
- package/dist/brain/brain-query-expander.d.ts +31 -0
- package/dist/brain/brain-query-expander.d.ts.map +1 -0
- package/dist/brain/brain-query-expander.js +417 -0
- package/dist/brain/brain-query-expander.js.map +1 -0
- package/dist/brain/brain-quest.d.ts +58 -0
- package/dist/brain/brain-quest.d.ts.map +1 -0
- package/dist/brain/brain-quest.js +541 -0
- package/dist/brain/brain-quest.js.map +1 -0
- package/dist/brain/brain-recall-cache.d.ts +73 -0
- package/dist/brain/brain-recall-cache.d.ts.map +1 -0
- package/dist/brain/brain-recall-cache.js +444 -0
- package/dist/brain/brain-recall-cache.js.map +1 -0
- package/dist/brain/brain-reflex.d.ts +55 -0
- package/dist/brain/brain-reflex.d.ts.map +1 -0
- package/dist/brain/brain-reflex.js +364 -0
- package/dist/brain/brain-reflex.js.map +1 -0
- package/dist/brain/brain-replay.d.ts +74 -0
- package/dist/brain/brain-replay.d.ts.map +1 -0
- package/dist/brain/brain-replay.js +336 -0
- package/dist/brain/brain-replay.js.map +1 -0
- package/dist/brain/brain-rerank.d.ts +39 -0
- package/dist/brain/brain-rerank.d.ts.map +1 -0
- package/dist/brain/brain-rerank.js +216 -0
- package/dist/brain/brain-rerank.js.map +1 -0
- package/dist/brain/brain-roast.d.ts +44 -0
- package/dist/brain/brain-roast.d.ts.map +1 -0
- package/dist/brain/brain-roast.js +566 -0
- package/dist/brain/brain-roast.js.map +1 -0
- package/dist/brain/brain-sonification.d.ts +57 -0
- package/dist/brain/brain-sonification.d.ts.map +1 -0
- package/dist/brain/brain-sonification.js +286 -0
- package/dist/brain/brain-sonification.js.map +1 -0
- package/dist/brain/brain-tarot.d.ts +49 -0
- package/dist/brain/brain-tarot.d.ts.map +1 -0
- package/dist/brain/brain-tarot.js +634 -0
- package/dist/brain/brain-tarot.js.map +1 -0
- package/dist/brain/brain-time-capsule.d.ts +80 -0
- package/dist/brain/brain-time-capsule.d.ts.map +1 -0
- package/dist/brain/brain-time-capsule.js +289 -0
- package/dist/brain/brain-time-capsule.js.map +1 -0
- package/dist/brain/brain-trophies.d.ts +60 -0
- package/dist/brain/brain-trophies.d.ts.map +1 -0
- package/dist/brain/brain-trophies.js +431 -0
- package/dist/brain/brain-trophies.js.map +1 -0
- package/dist/brain/brain-working-memory.d.ts +78 -0
- package/dist/brain/brain-working-memory.d.ts.map +1 -0
- package/dist/brain/brain-working-memory.js +367 -0
- package/dist/brain/brain-working-memory.js.map +1 -0
- package/dist/brain/branch-brain.d.ts +23 -0
- package/dist/brain/branch-brain.d.ts.map +1 -0
- package/dist/brain/branch-brain.js +159 -0
- package/dist/brain/branch-brain.js.map +1 -0
- package/dist/brain/calibration-monitor.d.ts +20 -0
- package/dist/brain/calibration-monitor.d.ts.map +1 -0
- package/dist/brain/calibration-monitor.js +144 -0
- package/dist/brain/calibration-monitor.js.map +1 -0
- package/dist/brain/causal-chains.d.ts +37 -0
- package/dist/brain/causal-chains.d.ts.map +1 -0
- package/dist/brain/causal-chains.js +250 -0
- package/dist/brain/causal-chains.js.map +1 -0
- package/dist/brain/collision-detective.d.ts +32 -0
- package/dist/brain/collision-detective.d.ts.map +1 -0
- package/dist/brain/collision-detective.js +233 -0
- package/dist/brain/collision-detective.js.map +1 -0
- package/dist/brain/confidence-gate.d.ts +69 -0
- package/dist/brain/confidence-gate.d.ts.map +1 -0
- package/dist/brain/confidence-gate.js +244 -0
- package/dist/brain/confidence-gate.js.map +1 -0
- package/dist/brain/constitution.d.ts +59 -0
- package/dist/brain/constitution.d.ts.map +1 -0
- package/dist/brain/constitution.js +315 -0
- package/dist/brain/constitution.js.map +1 -0
- package/dist/brain/cost-aware-spawner.d.ts +7 -0
- package/dist/brain/cost-aware-spawner.d.ts.map +1 -0
- package/dist/brain/cost-aware-spawner.js +77 -0
- package/dist/brain/cost-aware-spawner.js.map +1 -0
- package/dist/brain/dream-engine.d.ts +35 -0
- package/dist/brain/dream-engine.d.ts.map +1 -0
- package/dist/brain/dream-engine.js +273 -0
- package/dist/brain/dream-engine.js.map +1 -0
- package/dist/brain/embeddings-v2.d.ts +58 -0
- package/dist/brain/embeddings-v2.d.ts.map +1 -0
- package/dist/brain/embeddings-v2.js +344 -0
- package/dist/brain/embeddings-v2.js.map +1 -0
- package/dist/brain/embeddings.d.ts +27 -0
- package/dist/brain/embeddings.d.ts.map +1 -0
- package/dist/brain/embeddings.js +175 -0
- package/dist/brain/embeddings.js.map +1 -0
- package/dist/brain/forgetting-curve.d.ts +21 -0
- package/dist/brain/forgetting-curve.d.ts.map +1 -0
- package/dist/brain/forgetting-curve.js +174 -0
- package/dist/brain/forgetting-curve.js.map +1 -0
- package/dist/brain/formal-verification-bridge.d.ts +26 -0
- package/dist/brain/formal-verification-bridge.d.ts.map +1 -0
- package/dist/brain/formal-verification-bridge.js +219 -0
- package/dist/brain/formal-verification-bridge.js.map +1 -0
- package/dist/brain/global-brain.d.ts +8 -1
- package/dist/brain/global-brain.d.ts.map +1 -1
- package/dist/brain/global-brain.js +24 -0
- package/dist/brain/global-brain.js.map +1 -1
- package/dist/brain/hallucination-quarantine.d.ts +26 -0
- package/dist/brain/hallucination-quarantine.d.ts.map +1 -0
- package/dist/brain/hallucination-quarantine.js +135 -0
- package/dist/brain/hallucination-quarantine.js.map +1 -0
- package/dist/brain/hive-accelerator.d.ts +39 -0
- package/dist/brain/hive-accelerator.d.ts.map +1 -0
- package/dist/brain/hive-accelerator.js +152 -0
- package/dist/brain/hive-accelerator.js.map +1 -0
- package/dist/brain/hive-voice.d.ts +71 -0
- package/dist/brain/hive-voice.d.ts.map +1 -0
- package/dist/brain/hive-voice.js +352 -0
- package/dist/brain/hive-voice.js.map +1 -0
- package/dist/brain/json-output.d.ts +26 -0
- package/dist/brain/json-output.d.ts.map +1 -0
- package/dist/brain/json-output.js +112 -0
- package/dist/brain/json-output.js.map +1 -0
- package/dist/brain/l0-cache.js +1 -1
- package/dist/brain/l0-cache.js.map +1 -1
- package/dist/brain/local-llm.d.ts +20 -0
- package/dist/brain/local-llm.d.ts.map +1 -0
- package/dist/brain/local-llm.js +132 -0
- package/dist/brain/local-llm.js.map +1 -0
- package/dist/brain/markdown-export.d.ts +48 -0
- package/dist/brain/markdown-export.d.ts.map +1 -0
- package/dist/brain/markdown-export.js +382 -0
- package/dist/brain/markdown-export.js.map +1 -0
- package/dist/brain/mcp-server.d.ts +40 -0
- package/dist/brain/mcp-server.d.ts.map +1 -1
- package/dist/brain/mcp-server.js +395 -12
- package/dist/brain/mcp-server.js.map +1 -1
- package/dist/brain/model-registry.d.ts +96 -0
- package/dist/brain/model-registry.d.ts.map +1 -0
- package/dist/brain/model-registry.js +585 -0
- package/dist/brain/model-registry.js.map +1 -0
- package/dist/brain/multimodal-vision.d.ts +38 -0
- package/dist/brain/multimodal-vision.d.ts.map +1 -0
- package/dist/brain/multimodal-vision.js +257 -0
- package/dist/brain/multimodal-vision.js.map +1 -0
- package/dist/brain/orchestrator.js +1 -1
- package/dist/brain/otel-lite.d.ts +71 -0
- package/dist/brain/otel-lite.d.ts.map +1 -0
- package/dist/brain/otel-lite.js +232 -0
- package/dist/brain/otel-lite.js.map +1 -0
- package/dist/brain/pr-auto-review.d.ts +17 -0
- package/dist/brain/pr-auto-review.d.ts.map +1 -0
- package/dist/brain/pr-auto-review.js +73 -0
- package/dist/brain/pr-auto-review.js.map +1 -0
- package/dist/brain/pre-mortem.d.ts +21 -0
- package/dist/brain/pre-mortem.d.ts.map +1 -0
- package/dist/brain/pre-mortem.js +210 -0
- package/dist/brain/pre-mortem.js.map +1 -0
- package/dist/brain/prompt-cache.d.ts +54 -0
- package/dist/brain/prompt-cache.d.ts.map +1 -0
- package/dist/brain/prompt-cache.js +105 -0
- package/dist/brain/prompt-cache.js.map +1 -0
- package/dist/brain/reputation-ledger.d.ts +42 -0
- package/dist/brain/reputation-ledger.d.ts.map +1 -0
- package/dist/brain/reputation-ledger.js +326 -0
- package/dist/brain/reputation-ledger.js.map +1 -0
- package/dist/brain/session-hooks.d.ts +19 -0
- package/dist/brain/session-hooks.d.ts.map +1 -1
- package/dist/brain/session-hooks.js +249 -18
- package/dist/brain/session-hooks.js.map +1 -1
- package/dist/brain/subagent-bridge.d.ts +46 -0
- package/dist/brain/subagent-bridge.d.ts.map +1 -0
- package/dist/brain/subagent-bridge.js +364 -0
- package/dist/brain/subagent-bridge.js.map +1 -0
- package/dist/brain/swarm-debate.d.ts +22 -0
- package/dist/brain/swarm-debate.d.ts.map +1 -0
- package/dist/brain/swarm-debate.js +134 -0
- package/dist/brain/swarm-debate.js.map +1 -0
- package/dist/brain/team-brain-sync.d.ts +22 -0
- package/dist/brain/team-brain-sync.d.ts.map +1 -0
- package/dist/brain/team-brain-sync.js +132 -0
- package/dist/brain/team-brain-sync.js.map +1 -0
- package/dist/brain/token-economy.d.ts +25 -0
- package/dist/brain/token-economy.d.ts.map +1 -0
- package/dist/brain/token-economy.js +216 -0
- package/dist/brain/token-economy.js.map +1 -0
- package/dist/brain/voice-mode.d.ts +15 -0
- package/dist/brain/voice-mode.d.ts.map +1 -0
- package/dist/brain/voice-mode.js +97 -0
- package/dist/brain/voice-mode.js.map +1 -0
- package/dist/cli.js +1702 -4
- package/dist/cli.js.map +1 -1
- package/dist/dashboard/server.d.ts +6 -0
- package/dist/dashboard/server.d.ts.map +1 -1
- package/dist/dashboard/server.js +1118 -368
- package/dist/dashboard/server.js.map +1 -1
- package/dist/dashboard/v6-dashboard-html.d.ts +2 -0
- package/dist/dashboard/v6-dashboard-html.d.ts.map +1 -0
- package/dist/dashboard/v6-dashboard-html.js +2474 -0
- package/dist/dashboard/v6-dashboard-html.js.map +1 -0
- package/dist/index.d.ts +27 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +29 -1
- package/dist/index.js.map +1 -1
- package/dist/types.d.ts +518 -2
- package/dist/types.d.ts.map +1 -1
- package/package.json +33 -4
package/dist/brain/mcp-server.js
CHANGED
|
@@ -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
|
-
//
|
|
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
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
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
|
|
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
|
|
217
|
-
description: '
|
|
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
|
|
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
|
|
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
|
|
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 = [];
|