@theihtisham/agent-shadow-brain 5.1.1 → 6.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (183) hide show
  1. package/README.md +355 -1095
  2. package/dist/adapters/copilot.d.ts +14 -0
  3. package/dist/adapters/copilot.d.ts.map +1 -0
  4. package/dist/adapters/copilot.js +93 -0
  5. package/dist/adapters/copilot.js.map +1 -0
  6. package/dist/adapters/cursor.d.ts +13 -0
  7. package/dist/adapters/cursor.d.ts.map +1 -0
  8. package/dist/adapters/cursor.js +96 -0
  9. package/dist/adapters/cursor.js.map +1 -0
  10. package/dist/adapters/index.d.ts +4 -1
  11. package/dist/adapters/index.d.ts.map +1 -1
  12. package/dist/adapters/index.js +7 -3
  13. package/dist/adapters/index.js.map +1 -1
  14. package/dist/adapters/windsurf.d.ts +14 -0
  15. package/dist/adapters/windsurf.d.ts.map +1 -0
  16. package/dist/adapters/windsurf.js +107 -0
  17. package/dist/adapters/windsurf.js.map +1 -0
  18. package/dist/brain/agent-firewall.d.ts +7 -0
  19. package/dist/brain/agent-firewall.d.ts.map +1 -0
  20. package/dist/brain/agent-firewall.js +152 -0
  21. package/dist/brain/agent-firewall.js.map +1 -0
  22. package/dist/brain/agent-handoff.d.ts +19 -0
  23. package/dist/brain/agent-handoff.d.ts.map +1 -0
  24. package/dist/brain/agent-handoff.js +127 -0
  25. package/dist/brain/agent-handoff.js.map +1 -0
  26. package/dist/brain/air-gap.d.ts +23 -0
  27. package/dist/brain/air-gap.d.ts.map +1 -0
  28. package/dist/brain/air-gap.js +137 -0
  29. package/dist/brain/air-gap.js.map +1 -0
  30. package/dist/brain/attention-heatmap.d.ts +24 -0
  31. package/dist/brain/attention-heatmap.d.ts.map +1 -0
  32. package/dist/brain/attention-heatmap.js +108 -0
  33. package/dist/brain/attention-heatmap.js.map +1 -0
  34. package/dist/brain/auto-setup.js +19 -14
  35. package/dist/brain/auto-setup.js.map +1 -1
  36. package/dist/brain/auto-update.js +1 -1
  37. package/dist/brain/brain-chat.d.ts +42 -0
  38. package/dist/brain/brain-chat.d.ts.map +1 -0
  39. package/dist/brain/brain-chat.js +162 -0
  40. package/dist/brain/brain-chat.js.map +1 -0
  41. package/dist/brain/brain-encryption.d.ts +14 -0
  42. package/dist/brain/brain-encryption.d.ts.map +1 -0
  43. package/dist/brain/brain-encryption.js +68 -0
  44. package/dist/brain/brain-encryption.js.map +1 -0
  45. package/dist/brain/brain-exchange.d.ts +30 -0
  46. package/dist/brain/brain-exchange.d.ts.map +1 -0
  47. package/dist/brain/brain-exchange.js +106 -0
  48. package/dist/brain/brain-exchange.js.map +1 -0
  49. package/dist/brain/brain-garden.d.ts +18 -0
  50. package/dist/brain/brain-garden.d.ts.map +1 -0
  51. package/dist/brain/brain-garden.js +81 -0
  52. package/dist/brain/brain-garden.js.map +1 -0
  53. package/dist/brain/brain-portability.js +1 -1
  54. package/dist/brain/branch-brain.d.ts +23 -0
  55. package/dist/brain/branch-brain.d.ts.map +1 -0
  56. package/dist/brain/branch-brain.js +159 -0
  57. package/dist/brain/branch-brain.js.map +1 -0
  58. package/dist/brain/calibration-monitor.d.ts +20 -0
  59. package/dist/brain/calibration-monitor.d.ts.map +1 -0
  60. package/dist/brain/calibration-monitor.js +144 -0
  61. package/dist/brain/calibration-monitor.js.map +1 -0
  62. package/dist/brain/causal-chains.d.ts +37 -0
  63. package/dist/brain/causal-chains.d.ts.map +1 -0
  64. package/dist/brain/causal-chains.js +250 -0
  65. package/dist/brain/causal-chains.js.map +1 -0
  66. package/dist/brain/collision-detective.d.ts +32 -0
  67. package/dist/brain/collision-detective.d.ts.map +1 -0
  68. package/dist/brain/collision-detective.js +233 -0
  69. package/dist/brain/collision-detective.js.map +1 -0
  70. package/dist/brain/cost-aware-spawner.d.ts +7 -0
  71. package/dist/brain/cost-aware-spawner.d.ts.map +1 -0
  72. package/dist/brain/cost-aware-spawner.js +77 -0
  73. package/dist/brain/cost-aware-spawner.js.map +1 -0
  74. package/dist/brain/dream-engine.d.ts +35 -0
  75. package/dist/brain/dream-engine.d.ts.map +1 -0
  76. package/dist/brain/dream-engine.js +273 -0
  77. package/dist/brain/dream-engine.js.map +1 -0
  78. package/dist/brain/embeddings.d.ts +27 -0
  79. package/dist/brain/embeddings.d.ts.map +1 -0
  80. package/dist/brain/embeddings.js +175 -0
  81. package/dist/brain/embeddings.js.map +1 -0
  82. package/dist/brain/forgetting-curve.d.ts +21 -0
  83. package/dist/brain/forgetting-curve.d.ts.map +1 -0
  84. package/dist/brain/forgetting-curve.js +174 -0
  85. package/dist/brain/forgetting-curve.js.map +1 -0
  86. package/dist/brain/formal-verification-bridge.d.ts +26 -0
  87. package/dist/brain/formal-verification-bridge.d.ts.map +1 -0
  88. package/dist/brain/formal-verification-bridge.js +219 -0
  89. package/dist/brain/formal-verification-bridge.js.map +1 -0
  90. package/dist/brain/global-brain.d.ts +63 -0
  91. package/dist/brain/global-brain.d.ts.map +1 -0
  92. package/dist/brain/global-brain.js +348 -0
  93. package/dist/brain/global-brain.js.map +1 -0
  94. package/dist/brain/hallucination-quarantine.d.ts +26 -0
  95. package/dist/brain/hallucination-quarantine.d.ts.map +1 -0
  96. package/dist/brain/hallucination-quarantine.js +135 -0
  97. package/dist/brain/hallucination-quarantine.js.map +1 -0
  98. package/dist/brain/hive-accelerator.d.ts +39 -0
  99. package/dist/brain/hive-accelerator.d.ts.map +1 -0
  100. package/dist/brain/hive-accelerator.js +152 -0
  101. package/dist/brain/hive-accelerator.js.map +1 -0
  102. package/dist/brain/json-output.d.ts +26 -0
  103. package/dist/brain/json-output.d.ts.map +1 -0
  104. package/dist/brain/json-output.js +112 -0
  105. package/dist/brain/json-output.js.map +1 -0
  106. package/dist/brain/l0-cache.d.ts +40 -0
  107. package/dist/brain/l0-cache.d.ts.map +1 -0
  108. package/dist/brain/l0-cache.js +176 -0
  109. package/dist/brain/l0-cache.js.map +1 -0
  110. package/dist/brain/local-llm.d.ts +20 -0
  111. package/dist/brain/local-llm.d.ts.map +1 -0
  112. package/dist/brain/local-llm.js +132 -0
  113. package/dist/brain/local-llm.js.map +1 -0
  114. package/dist/brain/mcp-server.d.ts +44 -0
  115. package/dist/brain/mcp-server.d.ts.map +1 -1
  116. package/dist/brain/mcp-server.js +486 -12
  117. package/dist/brain/mcp-server.js.map +1 -1
  118. package/dist/brain/model-registry.d.ts +96 -0
  119. package/dist/brain/model-registry.d.ts.map +1 -0
  120. package/dist/brain/model-registry.js +585 -0
  121. package/dist/brain/model-registry.js.map +1 -0
  122. package/dist/brain/orchestrator.js +1 -1
  123. package/dist/brain/pr-auto-review.d.ts +17 -0
  124. package/dist/brain/pr-auto-review.d.ts.map +1 -0
  125. package/dist/brain/pr-auto-review.js +73 -0
  126. package/dist/brain/pr-auto-review.js.map +1 -0
  127. package/dist/brain/pre-mortem.d.ts +21 -0
  128. package/dist/brain/pre-mortem.d.ts.map +1 -0
  129. package/dist/brain/pre-mortem.js +210 -0
  130. package/dist/brain/pre-mortem.js.map +1 -0
  131. package/dist/brain/prompt-cache.d.ts +54 -0
  132. package/dist/brain/prompt-cache.d.ts.map +1 -0
  133. package/dist/brain/prompt-cache.js +105 -0
  134. package/dist/brain/prompt-cache.js.map +1 -0
  135. package/dist/brain/reputation-ledger.d.ts +42 -0
  136. package/dist/brain/reputation-ledger.d.ts.map +1 -0
  137. package/dist/brain/reputation-ledger.js +326 -0
  138. package/dist/brain/reputation-ledger.js.map +1 -0
  139. package/dist/brain/session-hooks.d.ts +47 -0
  140. package/dist/brain/session-hooks.d.ts.map +1 -0
  141. package/dist/brain/session-hooks.js +706 -0
  142. package/dist/brain/session-hooks.js.map +1 -0
  143. package/dist/brain/subagent-bridge.d.ts +46 -0
  144. package/dist/brain/subagent-bridge.d.ts.map +1 -0
  145. package/dist/brain/subagent-bridge.js +364 -0
  146. package/dist/brain/subagent-bridge.js.map +1 -0
  147. package/dist/brain/subconscious.d.ts +34 -0
  148. package/dist/brain/subconscious.d.ts.map +1 -0
  149. package/dist/brain/subconscious.js +275 -0
  150. package/dist/brain/subconscious.js.map +1 -0
  151. package/dist/brain/swarm-debate.d.ts +22 -0
  152. package/dist/brain/swarm-debate.d.ts.map +1 -0
  153. package/dist/brain/swarm-debate.js +134 -0
  154. package/dist/brain/swarm-debate.js.map +1 -0
  155. package/dist/brain/team-brain-sync.d.ts +22 -0
  156. package/dist/brain/team-brain-sync.d.ts.map +1 -0
  157. package/dist/brain/team-brain-sync.js +132 -0
  158. package/dist/brain/team-brain-sync.js.map +1 -0
  159. package/dist/brain/token-economy.d.ts +25 -0
  160. package/dist/brain/token-economy.d.ts.map +1 -0
  161. package/dist/brain/token-economy.js +216 -0
  162. package/dist/brain/token-economy.js.map +1 -0
  163. package/dist/brain/voice-mode.d.ts +15 -0
  164. package/dist/brain/voice-mode.d.ts.map +1 -0
  165. package/dist/brain/voice-mode.js +97 -0
  166. package/dist/brain/voice-mode.js.map +1 -0
  167. package/dist/cli.js +990 -6
  168. package/dist/cli.js.map +1 -1
  169. package/dist/dashboard/server.d.ts +6 -0
  170. package/dist/dashboard/server.d.ts.map +1 -1
  171. package/dist/dashboard/server.js +1118 -368
  172. package/dist/dashboard/server.js.map +1 -1
  173. package/dist/dashboard/v6-dashboard-html.d.ts +2 -0
  174. package/dist/dashboard/v6-dashboard-html.d.ts.map +1 -0
  175. package/dist/dashboard/v6-dashboard-html.js +2474 -0
  176. package/dist/dashboard/v6-dashboard-html.js.map +1 -0
  177. package/dist/index.d.ts +27 -0
  178. package/dist/index.d.ts.map +1 -1
  179. package/dist/index.js +29 -1
  180. package/dist/index.js.map +1 -1
  181. package/dist/types.d.ts +644 -1
  182. package/dist/types.d.ts.map +1 -1
  183. package/package.json +77 -12
@@ -0,0 +1,25 @@
1
+ import { AgentTool, TokenEconomyStats, TokenSpendRecord } from '../types.js';
2
+ export declare class TokenEconomy {
3
+ private records;
4
+ private savingsOpportunitiesUsd;
5
+ private initialized;
6
+ init(): Promise<void>;
7
+ /** Record a token spend event. */
8
+ record(input: {
9
+ agentTool: AgentTool;
10
+ model: string;
11
+ inputTokens: number;
12
+ outputTokens: number;
13
+ taskCategory?: string;
14
+ }): Promise<TokenSpendRecord>;
15
+ /** Report aggregate spend + projections + savings opportunities. */
16
+ report(): Promise<TokenEconomyStats>;
17
+ /** Total saved by routing to cheaper models (returned as tweetable USD). */
18
+ getSavingsUsd(): number;
19
+ private computeSavings;
20
+ private detectRedundantCalls;
21
+ private persistStats;
22
+ }
23
+ export declare function getTokenEconomy(): TokenEconomy;
24
+ export declare function resetTokenEconomyForTests(): void;
25
+ //# sourceMappingURL=token-economy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token-economy.d.ts","sourceRoot":"","sources":["../../src/brain/token-economy.ts"],"names":[],"mappings":"AAWA,OAAO,EACL,SAAS,EACT,iBAAiB,EACjB,gBAAgB,EACjB,MAAM,aAAa,CAAC;AA2BrB,qBAAa,YAAY;IACvB,OAAO,CAAC,OAAO,CAA0B;IACzC,OAAO,CAAC,uBAAuB,CAAa;IAC5C,OAAO,CAAC,WAAW,CAAS;IAEtB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IA6B3B,kCAAkC;IAC5B,MAAM,CAAC,KAAK,EAAE;QAClB,SAAS,EAAE,SAAS,CAAC;QACrB,KAAK,EAAE,MAAM,CAAC;QACd,WAAW,EAAE,MAAM,CAAC;QACpB,YAAY,EAAE,MAAM,CAAC;QACrB,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IA2B7B,oEAAoE;IAC9D,MAAM,IAAI,OAAO,CAAC,iBAAiB,CAAC;IAmD1C,4EAA4E;IAC5E,aAAa,IAAI,MAAM;IAMvB,OAAO,CAAC,cAAc;IAqCtB,OAAO,CAAC,oBAAoB;YAwBd,YAAY;CAe3B;AAID,wBAAgB,eAAe,IAAI,YAAY,CAG9C;AAED,wBAAgB,yBAAyB,IAAI,IAAI,CAEhD"}
@@ -0,0 +1,216 @@
1
+ // src/brain/token-economy.ts — Cross-agent token spend tracker + cost predictor
2
+ // v6.0.0 — Hive Mind Edition
3
+ //
4
+ // Tracks token usage across every connected agent. Predicts monthly spend,
5
+ // identifies savings opportunities (e.g., calls that could run on cheaper
6
+ // models), and exposes a simple "you saved $X" number for README badges.
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
+ const SPEND_PATH = path.join(os.homedir(), '.shadow-brain', 'token-spend.jsonl');
12
+ const STATS_PATH = path.join(os.homedir(), '.shadow-brain', 'token-economy.json');
13
+ // Per-1M-tokens USD pricing (rough, for projection only)
14
+ const MODEL_PRICING = {
15
+ 'claude-opus-4-7': { input: 15, output: 75 },
16
+ 'claude-sonnet-4-6': { input: 3, output: 15 },
17
+ 'claude-haiku-4-5': { input: 0.8, output: 4 },
18
+ 'gpt-5.4': { input: 10, output: 30 },
19
+ 'gpt-5.4-codex': { input: 10, output: 30 },
20
+ 'glm-5.1': { input: 0.5, output: 2 },
21
+ 'minimax-m2.7': { input: 0.6, output: 2.4 },
22
+ 'gemini-2.5-flash': { input: 0.15, output: 0.6 },
23
+ 'deepseek-671b': { input: 0, output: 0 }, // local/free
24
+ 'qwen2.5-coder:7b': { input: 0, output: 0 }, // local
25
+ 'local': { input: 0, output: 0 },
26
+ };
27
+ export class TokenEconomy {
28
+ constructor() {
29
+ this.records = [];
30
+ this.savingsOpportunitiesUsd = 0;
31
+ this.initialized = false;
32
+ }
33
+ async init() {
34
+ if (this.initialized)
35
+ return;
36
+ fs.mkdirSync(path.dirname(SPEND_PATH), { recursive: true });
37
+ if (fs.existsSync(SPEND_PATH)) {
38
+ try {
39
+ const raw = fs.readFileSync(SPEND_PATH, 'utf-8');
40
+ for (const line of raw.split('\n')) {
41
+ if (!line.trim())
42
+ continue;
43
+ const r = JSON.parse(line);
44
+ this.records.push({ ...r, timestamp: new Date(r.timestamp) });
45
+ }
46
+ }
47
+ catch {
48
+ /* skip */
49
+ }
50
+ }
51
+ if (fs.existsSync(STATS_PATH)) {
52
+ try {
53
+ const parsed = JSON.parse(fs.readFileSync(STATS_PATH, 'utf-8'));
54
+ this.savingsOpportunitiesUsd = parsed.savingsOpportunitiesUsd ?? 0;
55
+ }
56
+ catch {
57
+ /* skip */
58
+ }
59
+ }
60
+ this.initialized = true;
61
+ }
62
+ /** Record a token spend event. */
63
+ async record(input) {
64
+ await this.init();
65
+ const model = input.model || 'local';
66
+ const pricing = MODEL_PRICING[model] ?? { input: 1, output: 3 };
67
+ const cost = (input.inputTokens * pricing.input + input.outputTokens * pricing.output) / 1000000;
68
+ const record = {
69
+ id: `spend-${crypto.randomBytes(6).toString('hex')}`,
70
+ agentTool: input.agentTool,
71
+ model,
72
+ inputTokens: input.inputTokens,
73
+ outputTokens: input.outputTokens,
74
+ estimatedCostUsd: +cost.toFixed(6),
75
+ taskCategory: input.taskCategory ?? 'general',
76
+ timestamp: new Date(),
77
+ };
78
+ this.records.push(record);
79
+ try {
80
+ fs.appendFileSync(SPEND_PATH, JSON.stringify(record) + '\n');
81
+ }
82
+ catch {
83
+ /* non-fatal */
84
+ }
85
+ return record;
86
+ }
87
+ /** Report aggregate spend + projections + savings opportunities. */
88
+ async report() {
89
+ await this.init();
90
+ const byAgent = {};
91
+ const byModel = {};
92
+ const byCategory = {};
93
+ let totalSpend = 0;
94
+ let totalInput = 0;
95
+ let totalOutput = 0;
96
+ for (const r of this.records) {
97
+ totalSpend += r.estimatedCostUsd;
98
+ totalInput += r.inputTokens;
99
+ totalOutput += r.outputTokens;
100
+ byAgent[r.agentTool] = byAgent[r.agentTool] ?? { spendUsd: 0, calls: 0 };
101
+ byAgent[r.agentTool].spendUsd += r.estimatedCostUsd;
102
+ byAgent[r.agentTool].calls++;
103
+ byModel[r.model] = byModel[r.model] ?? { spendUsd: 0, calls: 0 };
104
+ byModel[r.model].spendUsd += r.estimatedCostUsd;
105
+ byModel[r.model].calls++;
106
+ byCategory[r.taskCategory] = byCategory[r.taskCategory] ?? { spendUsd: 0, calls: 0 };
107
+ byCategory[r.taskCategory].spendUsd += r.estimatedCostUsd;
108
+ byCategory[r.taskCategory].calls++;
109
+ }
110
+ // Project monthly spend from last 7 days
111
+ const weekAgo = Date.now() - 7 * 24 * 60 * 60 * 1000;
112
+ const recent = this.records.filter(r => r.timestamp.getTime() >= weekAgo);
113
+ const weeklySpend = recent.reduce((acc, r) => acc + r.estimatedCostUsd, 0);
114
+ const monthlyProjectionUsd = +(weeklySpend * (30 / 7)).toFixed(2);
115
+ const { savings, suggestions } = this.computeSavings(recent);
116
+ this.savingsOpportunitiesUsd = savings;
117
+ await this.persistStats(monthlyProjectionUsd, savings);
118
+ return {
119
+ totalSpendUsd: +totalSpend.toFixed(4),
120
+ totalInputTokens: totalInput,
121
+ totalOutputTokens: totalOutput,
122
+ byAgent,
123
+ byModel,
124
+ byCategory,
125
+ monthlyProjectionUsd,
126
+ savingsOpportunitiesUsd: +savings.toFixed(2),
127
+ suggestions,
128
+ };
129
+ }
130
+ /** Total saved by routing to cheaper models (returned as tweetable USD). */
131
+ getSavingsUsd() {
132
+ return +this.savingsOpportunitiesUsd.toFixed(2);
133
+ }
134
+ // ── Internals ─────────────────────────────────────────────────────────────
135
+ computeSavings(records) {
136
+ const suggestions = [];
137
+ let savings = 0;
138
+ // Opus calls that could pass with Haiku (heuristic: small tasks = general/category)
139
+ const opusCalls = records.filter(r => r.model.includes('opus'));
140
+ if (opusCalls.length) {
141
+ const opusSpend = opusCalls.reduce((acc, r) => acc + r.estimatedCostUsd, 0);
142
+ const haikuPricing = MODEL_PRICING['claude-haiku-4-5'];
143
+ const opusPricing = MODEL_PRICING['claude-opus-4-7'];
144
+ const ratio = (haikuPricing.input + haikuPricing.output) / (opusPricing.input + opusPricing.output);
145
+ const potentialSave = opusSpend * (1 - ratio) * 0.43; // assume 43% are Haiku-able
146
+ savings += potentialSave;
147
+ suggestions.push(`~43% of Opus calls ($${opusSpend.toFixed(2)}) could route to Haiku → ~$${potentialSave.toFixed(2)} saved.`);
148
+ }
149
+ // Calls >1500 tokens → consider MiniMax/GLM
150
+ const bigCalls = records.filter(r => r.inputTokens > 1500 && r.model.includes('gpt'));
151
+ if (bigCalls.length) {
152
+ const bigSpend = bigCalls.reduce((acc, r) => acc + r.estimatedCostUsd, 0);
153
+ const potentialSave = bigSpend * 0.35;
154
+ savings += potentialSave;
155
+ suggestions.push(`${bigCalls.length} GPT calls exceed 1500 input tokens — route large-context to MiniMax/GLM for ~$${potentialSave.toFixed(2)} saved.`);
156
+ }
157
+ // Redundant calls (identical input within 1h) → cache
158
+ const cacheable = this.detectRedundantCalls(records);
159
+ if (cacheable.savings > 0) {
160
+ savings += cacheable.savings;
161
+ suggestions.push(`${cacheable.count} redundant calls detected — Shadow Brain cache could save ~$${cacheable.savings.toFixed(2)}.`);
162
+ }
163
+ if (!suggestions.length)
164
+ suggestions.push('No obvious routing wins. Running lean already.');
165
+ return { savings, suggestions };
166
+ }
167
+ detectRedundantCalls(records) {
168
+ // Simple approximation: calls within 60 min on same agent+category+model
169
+ const buckets = new Map();
170
+ for (const r of records) {
171
+ const key = `${r.agentTool}::${r.model}::${r.taskCategory}`;
172
+ const list = buckets.get(key) ?? [];
173
+ list.push(r);
174
+ buckets.set(key, list);
175
+ }
176
+ let redundant = 0;
177
+ let savings = 0;
178
+ for (const list of buckets.values()) {
179
+ list.sort((a, b) => a.timestamp.getTime() - b.timestamp.getTime());
180
+ for (let i = 1; i < list.length; i++) {
181
+ const gap = list[i].timestamp.getTime() - list[i - 1].timestamp.getTime();
182
+ if (gap < 60 * 60 * 1000) {
183
+ redundant++;
184
+ savings += list[i].estimatedCostUsd * 0.4;
185
+ }
186
+ }
187
+ }
188
+ return { count: redundant, savings };
189
+ }
190
+ async persistStats(monthly, savings) {
191
+ try {
192
+ const shape = {
193
+ schemaVersion: 1,
194
+ monthlyProjectionUsd: monthly,
195
+ savingsOpportunitiesUsd: savings,
196
+ lastRecalculated: new Date().toISOString(),
197
+ };
198
+ const tmp = STATS_PATH + '.tmp';
199
+ fs.writeFileSync(tmp, JSON.stringify(shape, null, 2));
200
+ fs.renameSync(tmp, STATS_PATH);
201
+ }
202
+ catch {
203
+ /* non-fatal */
204
+ }
205
+ }
206
+ }
207
+ let _instance = null;
208
+ export function getTokenEconomy() {
209
+ if (!_instance)
210
+ _instance = new TokenEconomy();
211
+ return _instance;
212
+ }
213
+ export function resetTokenEconomyForTests() {
214
+ _instance = null;
215
+ }
216
+ //# sourceMappingURL=token-economy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token-economy.js","sourceRoot":"","sources":["../../src/brain/token-economy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import { VoiceCommandResult } from '../types.js';
2
+ export interface VoiceProcessInput {
3
+ transcript: string;
4
+ confidence?: number;
5
+ projectDir?: string;
6
+ }
7
+ export declare class VoiceMode {
8
+ private brain;
9
+ constructor();
10
+ process(input: VoiceProcessInput): Promise<VoiceCommandResult>;
11
+ history(limit?: number): VoiceCommandResult[];
12
+ }
13
+ export declare function getVoiceMode(): VoiceMode;
14
+ export declare function resetVoiceModeForTests(): void;
15
+ //# sourceMappingURL=voice-mode.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"voice-mode.d.ts","sourceRoot":"","sources":["../../src/brain/voice-mode.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAKjD,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,qBAAa,SAAS;IACpB,OAAO,CAAC,KAAK,CAAc;;IAMrB,OAAO,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAmDpE,OAAO,CAAC,KAAK,SAAK,GAAG,kBAAkB,EAAE;CAa1C;AAID,wBAAgB,YAAY,IAAI,SAAS,CAGxC;AAED,wBAAgB,sBAAsB,IAAI,IAAI,CAE7C"}
@@ -0,0 +1,97 @@
1
+ // src/brain/voice-mode.ts — Voice command entry point
2
+ // v6.0.0 — Hive Mind Edition
3
+ //
4
+ // Minimal voice integration surface — the CLI and dashboard accept transcribed
5
+ // text and route through the intent engine. Actual audio capture lives in the
6
+ // companion browser bundle (dashboard) or external tools like macOS Dictation.
7
+ // This module provides:
8
+ // - Intent parsing for voice commands
9
+ // - Structured response formatting (ready for TTS)
10
+ // - Persisted command history for dashboard
11
+ import * as fs from 'fs';
12
+ import * as path from 'path';
13
+ import * as os from 'os';
14
+ import { getGlobalBrain } from './global-brain.js';
15
+ const HISTORY_PATH = path.join(os.homedir(), '.shadow-brain', 'voice-history.jsonl');
16
+ export class VoiceMode {
17
+ constructor() {
18
+ this.brain = getGlobalBrain();
19
+ }
20
+ async process(input) {
21
+ await this.brain.init();
22
+ const transcript = input.transcript.trim();
23
+ const lower = transcript.toLowerCase();
24
+ let intent = 'unknown';
25
+ let response = '';
26
+ if (/summariz(e|ed).*yesterday|recap yesterday|what did .+ learn yesterday/.test(lower)) {
27
+ intent = 'recap-yesterday';
28
+ const yesterday = Date.now() - 24 * 60 * 60 * 1000;
29
+ const events = this.brain
30
+ .timeline({ limit: 50 })
31
+ .filter(e => e.createdAt.getTime() >= yesterday);
32
+ response = events.length
33
+ ? `Yesterday: ${events.length} memory events. Top category: ${events[0].category}. First: ${events[0].content.slice(0, 140)}`
34
+ : 'No brain activity from yesterday.';
35
+ }
36
+ else if (/show.*dreams?|what.*dream/.test(lower)) {
37
+ intent = 'show-dreams';
38
+ response = 'Listing recent dream insights via shadow-brain dream list.';
39
+ }
40
+ else if (/brain status|hive mind status|how.*brain/.test(lower)) {
41
+ intent = 'status';
42
+ const stats = this.brain.getStats();
43
+ response = `Hive Mind v6.0: ${stats.totalEntries} memories across ${stats.totalProjects} projects and ${stats.totalAgents} agents. Hit rate ${Math.round(stats.hitRate * 100)}%.`;
44
+ }
45
+ else if (/stop watching|pause brain|quiet mode/.test(lower)) {
46
+ intent = 'pause';
47
+ response = 'Pausing Shadow Brain is not supported from voice in this build. Use: shadow-brain off.';
48
+ }
49
+ else if (/dash(board)?/.test(lower)) {
50
+ intent = 'open-dashboard';
51
+ response = 'The dashboard is at http://localhost:7341 when running.';
52
+ }
53
+ else {
54
+ response = `I heard "${transcript.slice(0, 120)}". Try: "brain status", "recap yesterday", or "show dreams".`;
55
+ }
56
+ const result = {
57
+ transcript,
58
+ confidence: input.confidence ?? 0.9,
59
+ intent,
60
+ response,
61
+ timestamp: new Date(),
62
+ };
63
+ try {
64
+ fs.mkdirSync(path.dirname(HISTORY_PATH), { recursive: true });
65
+ fs.appendFileSync(HISTORY_PATH, JSON.stringify(result) + '\n');
66
+ }
67
+ catch {
68
+ /* non-fatal */
69
+ }
70
+ return result;
71
+ }
72
+ history(limit = 20) {
73
+ if (!fs.existsSync(HISTORY_PATH))
74
+ return [];
75
+ try {
76
+ const raw = fs.readFileSync(HISTORY_PATH, 'utf-8');
77
+ const lines = raw.split('\n').filter(Boolean).slice(-limit);
78
+ return lines.map(l => {
79
+ const p = JSON.parse(l);
80
+ return { ...p, timestamp: new Date(p.timestamp) };
81
+ });
82
+ }
83
+ catch {
84
+ return [];
85
+ }
86
+ }
87
+ }
88
+ let _instance = null;
89
+ export function getVoiceMode() {
90
+ if (!_instance)
91
+ _instance = new VoiceMode();
92
+ return _instance;
93
+ }
94
+ export function resetVoiceModeForTests() {
95
+ _instance = null;
96
+ }
97
+ //# sourceMappingURL=voice-mode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"voice-mode.js","sourceRoot":"","sources":["../../src/brain/voice-mode.ts"],"names":[],"mappings":"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"}