claude-flow-novice 2.0.3 โ†’ 2.0.4

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 (272) hide show
  1. package/dist/src/cli/commands/guidance.js +487 -668
  2. package/dist/src/cli/commands/index-validate.js +18 -29
  3. package/dist/src/cli/commands/mcp-troubleshoot.js +230 -282
  4. package/dist/src/cli/commands/neural-goal-init.js +92 -125
  5. package/dist/src/cli/commands/swarm-exec.js +317 -393
  6. package/dist/src/cli/commands/swarm.js +1 -1
  7. package/dist/src/cli/commands/validate-framework.js +983 -1100
  8. package/dist/src/cli/commands/validate.js +144 -223
  9. package/dist/src/cli/simple-commands/__tests__/agent.test.js +265 -277
  10. package/dist/src/cli/simple-commands/__tests__/memory.test.js +6 -7
  11. package/dist/src/cli/simple-commands/__tests__/swarm.test.js +373 -356
  12. package/dist/src/cli/simple-commands/__tests__/task.test.js +6 -7
  13. package/dist/src/cli/simple-commands/agent.js +157 -193
  14. package/dist/src/cli/simple-commands/analysis.js +336 -446
  15. package/dist/src/cli/simple-commands/automation-executor.js +1095 -1339
  16. package/dist/src/cli/simple-commands/automation.js +481 -469
  17. package/dist/src/cli/simple-commands/batch-manager.js +261 -313
  18. package/dist/src/cli/simple-commands/claude-telemetry.js +241 -267
  19. package/dist/src/cli/simple-commands/claude-track.js +68 -90
  20. package/dist/src/cli/simple-commands/concurrent-display.js +266 -320
  21. package/dist/src/cli/simple-commands/config.js +245 -290
  22. package/dist/src/cli/simple-commands/coordination.js +182 -234
  23. package/dist/src/cli/simple-commands/enhanced-ui-views.js +812 -615
  24. package/dist/src/cli/simple-commands/enhanced-webui-complete.js +922 -981
  25. package/dist/src/cli/simple-commands/fix-hook-variables.js +274 -294
  26. package/dist/src/cli/simple-commands/github/gh-coordinator.js +378 -457
  27. package/dist/src/cli/simple-commands/github/github-api.js +535 -574
  28. package/dist/src/cli/simple-commands/github/init.js +276 -303
  29. package/dist/src/cli/simple-commands/github.js +222 -247
  30. package/dist/src/cli/simple-commands/goal.js +51 -63
  31. package/dist/src/cli/simple-commands/hive-mind/auto-save-middleware.js +208 -278
  32. package/dist/src/cli/simple-commands/hive-mind/communication.js +601 -696
  33. package/dist/src/cli/simple-commands/hive-mind/core.js +907 -979
  34. package/dist/src/cli/simple-commands/hive-mind/db-optimizer.js +406 -655
  35. package/dist/src/cli/simple-commands/hive-mind/mcp-wrapper.js +1125 -1245
  36. package/dist/src/cli/simple-commands/hive-mind/memory.js +854 -1090
  37. package/dist/src/cli/simple-commands/hive-mind/performance-optimizer.js +459 -574
  38. package/dist/src/cli/simple-commands/hive-mind/performance-test.js +263 -347
  39. package/dist/src/cli/simple-commands/hive-mind/queen.js +727 -768
  40. package/dist/src/cli/simple-commands/hive-mind/session-manager.js +745 -1049
  41. package/dist/src/cli/simple-commands/hive-mind-optimize.js +227 -283
  42. package/dist/src/cli/simple-commands/hive-mind-wizard.js +174 -217
  43. package/dist/src/cli/simple-commands/hive-mind.js +1842 -2283
  44. package/dist/src/cli/simple-commands/hive.js +90 -79
  45. package/dist/src/cli/simple-commands/hook-safety.js +431 -521
  46. package/dist/src/cli/simple-commands/hooks/session-start-soul.js +203 -254
  47. package/dist/src/cli/simple-commands/hooks.js +1064 -1204
  48. package/dist/src/cli/simple-commands/init/agent-copier.js +294 -319
  49. package/dist/src/cli/simple-commands/init/batch-init.js +496 -562
  50. package/dist/src/cli/simple-commands/init/claude-commands/claude-flow-commands.js +13 -19
  51. package/dist/src/cli/simple-commands/init/claude-commands/optimized-claude-flow-commands.js +13 -19
  52. package/dist/src/cli/simple-commands/init/claude-commands/optimized-slash-commands.js +61 -88
  53. package/dist/src/cli/simple-commands/init/claude-commands/optimized-sparc-commands.js +125 -150
  54. package/dist/src/cli/simple-commands/init/claude-commands/slash-commands.js +42 -49
  55. package/dist/src/cli/simple-commands/init/claude-commands/sparc-commands.js +43 -61
  56. package/dist/src/cli/simple-commands/init/copy-revised-templates.js +141 -147
  57. package/dist/src/cli/simple-commands/init/executable-wrapper.js +31 -44
  58. package/dist/src/cli/simple-commands/init/gitignore-updater.js +64 -90
  59. package/dist/src/cli/simple-commands/init/help.js +104 -107
  60. package/dist/src/cli/simple-commands/init/hive-mind-init.js +509 -528
  61. package/dist/src/cli/simple-commands/init/index.js +1510 -1759
  62. package/dist/src/cli/simple-commands/init/performance-monitor.js +234 -317
  63. package/dist/src/cli/simple-commands/init/rollback/backup-manager.js +441 -504
  64. package/dist/src/cli/simple-commands/init/rollback/index.js +289 -364
  65. package/dist/src/cli/simple-commands/init/rollback/recovery-manager.js +652 -728
  66. package/dist/src/cli/simple-commands/init/rollback/rollback-executor.js +416 -481
  67. package/dist/src/cli/simple-commands/init/rollback/state-tracker.js +369 -448
  68. package/dist/src/cli/simple-commands/init/sparc/roo-readme.js +1 -2
  69. package/dist/src/cli/simple-commands/init/sparc/roomodes-config.js +122 -99
  70. package/dist/src/cli/simple-commands/init/sparc/workflows.js +32 -37
  71. package/dist/src/cli/simple-commands/init/sparc-structure.js +55 -62
  72. package/dist/src/cli/simple-commands/init/template-copier.js +421 -533
  73. package/dist/src/cli/simple-commands/init/templates/coordination-md.js +3 -6
  74. package/dist/src/cli/simple-commands/init/templates/enhanced-templates.js +344 -318
  75. package/dist/src/cli/simple-commands/init/templates/github-safe-enhanced.js +173 -218
  76. package/dist/src/cli/simple-commands/init/templates/github-safe.js +65 -75
  77. package/dist/src/cli/simple-commands/init/templates/memory-bank-md.js +3 -6
  78. package/dist/src/cli/simple-commands/init/templates/readme-files.js +2 -4
  79. package/dist/src/cli/simple-commands/init/templates/safe-hook-patterns.js +187 -230
  80. package/dist/src/cli/simple-commands/init/templates/sparc-modes.js +53 -80
  81. package/dist/src/cli/simple-commands/init/templates/verification-claude-md.js +101 -85
  82. package/dist/src/cli/simple-commands/init/validation/config-validator.js +283 -330
  83. package/dist/src/cli/simple-commands/init/validation/health-checker.js +495 -561
  84. package/dist/src/cli/simple-commands/init/validation/index.js +302 -358
  85. package/dist/src/cli/simple-commands/init/validation/mode-validator.js +308 -359
  86. package/dist/src/cli/simple-commands/init/validation/post-init-validator.js +389 -366
  87. package/dist/src/cli/simple-commands/init/validation/pre-init-validator.js +270 -268
  88. package/dist/src/cli/simple-commands/init/validation/test-runner.js +427 -447
  89. package/dist/src/cli/simple-commands/init.js +1 -2
  90. package/dist/src/cli/simple-commands/mcp-health.js +131 -158
  91. package/dist/src/cli/simple-commands/mcp-integration-layer.js +533 -634
  92. package/dist/src/cli/simple-commands/mcp.js +345 -400
  93. package/dist/src/cli/simple-commands/memory-consolidation.js +426 -537
  94. package/dist/src/cli/simple-commands/memory.js +247 -311
  95. package/dist/src/cli/simple-commands/migrate-hooks.js +39 -46
  96. package/dist/src/cli/simple-commands/monitor.js +294 -363
  97. package/dist/src/cli/simple-commands/neural.js +51 -65
  98. package/dist/src/cli/simple-commands/pair-autofix-only.js +538 -662
  99. package/dist/src/cli/simple-commands/pair-basic.js +528 -656
  100. package/dist/src/cli/simple-commands/pair-old.js +430 -543
  101. package/dist/src/cli/simple-commands/pair-working.js +615 -751
  102. package/dist/src/cli/simple-commands/pair.js +615 -751
  103. package/dist/src/cli/simple-commands/performance-hooks.js +83 -111
  104. package/dist/src/cli/simple-commands/performance-metrics.js +348 -433
  105. package/dist/src/cli/simple-commands/process-ui-enhanced.js +708 -787
  106. package/dist/src/cli/simple-commands/process-ui.js +230 -254
  107. package/dist/src/cli/simple-commands/realtime-update-system.js +525 -611
  108. package/dist/src/cli/simple-commands/sparc/architecture.js +1704 -1530
  109. package/dist/src/cli/simple-commands/sparc/commands.js +438 -516
  110. package/dist/src/cli/simple-commands/sparc/completion.js +1224 -1481
  111. package/dist/src/cli/simple-commands/sparc/coordinator.js +913 -978
  112. package/dist/src/cli/simple-commands/sparc/index.js +241 -298
  113. package/dist/src/cli/simple-commands/sparc/phase-base.js +314 -390
  114. package/dist/src/cli/simple-commands/sparc/pseudocode.js +965 -869
  115. package/dist/src/cli/simple-commands/sparc/refinement.js +980 -1273
  116. package/dist/src/cli/simple-commands/sparc/specification.js +559 -645
  117. package/dist/src/cli/simple-commands/sparc-modes/architect.js +1 -1
  118. package/dist/src/cli/simple-commands/sparc-modes/ask.js +1 -1
  119. package/dist/src/cli/simple-commands/sparc-modes/code.js +1 -1
  120. package/dist/src/cli/simple-commands/sparc-modes/debug.js +1 -1
  121. package/dist/src/cli/simple-commands/sparc-modes/devops.js +1 -1
  122. package/dist/src/cli/simple-commands/sparc-modes/docs-writer.js +1 -1
  123. package/dist/src/cli/simple-commands/sparc-modes/generic.js +1 -1
  124. package/dist/src/cli/simple-commands/sparc-modes/index.js +47 -55
  125. package/dist/src/cli/simple-commands/sparc-modes/integration.js +1 -1
  126. package/dist/src/cli/simple-commands/sparc-modes/mcp.js +1 -1
  127. package/dist/src/cli/simple-commands/sparc-modes/monitoring.js +1 -1
  128. package/dist/src/cli/simple-commands/sparc-modes/optimization.js +1 -1
  129. package/dist/src/cli/simple-commands/sparc-modes/security-review.js +1 -1
  130. package/dist/src/cli/simple-commands/sparc-modes/sparc-orchestrator.js +1 -1
  131. package/dist/src/cli/simple-commands/sparc-modes/spec-pseudocode.js +1 -1
  132. package/dist/src/cli/simple-commands/sparc-modes/supabase-admin.js +1 -1
  133. package/dist/src/cli/simple-commands/sparc-modes/swarm.js +101 -87
  134. package/dist/src/cli/simple-commands/sparc-modes/tdd.js +1 -1
  135. package/dist/src/cli/simple-commands/sparc-modes/tutorial.js +1 -1
  136. package/dist/src/cli/simple-commands/sparc.js +465 -493
  137. package/dist/src/cli/simple-commands/start-ui.js +108 -132
  138. package/dist/src/cli/simple-commands/start-wrapper.js +240 -268
  139. package/dist/src/cli/simple-commands/start.js +1 -1
  140. package/dist/src/cli/simple-commands/status.js +254 -275
  141. package/dist/src/cli/simple-commands/stream-chain-clean.js +128 -171
  142. package/dist/src/cli/simple-commands/stream-chain-fixed.js +61 -82
  143. package/dist/src/cli/simple-commands/stream-chain-real.js +267 -331
  144. package/dist/src/cli/simple-commands/stream-chain-working.js +211 -263
  145. package/dist/src/cli/simple-commands/stream-chain.js +260 -318
  146. package/dist/src/cli/simple-commands/stream-processor.js +290 -315
  147. package/dist/src/cli/simple-commands/swarm-executor.js +189 -222
  148. package/dist/src/cli/simple-commands/swarm-metrics-integration.js +208 -300
  149. package/dist/src/cli/simple-commands/swarm-ui.js +623 -703
  150. package/dist/src/cli/simple-commands/swarm-webui-integration.js +258 -286
  151. package/dist/src/cli/simple-commands/swarm.js +887 -1082
  152. package/dist/src/cli/simple-commands/task.js +161 -206
  153. package/dist/src/cli/simple-commands/timestamp-fix.js +59 -89
  154. package/dist/src/cli/simple-commands/token-tracker.js +258 -316
  155. package/dist/src/cli/simple-commands/tool-execution-framework.js +433 -519
  156. package/dist/src/cli/simple-commands/train-and-stream.js +275 -331
  157. package/dist/src/cli/simple-commands/training-pipeline.js +619 -725
  158. package/dist/src/cli/simple-commands/training.js +170 -227
  159. package/dist/src/cli/simple-commands/verification-hooks.js +261 -284
  160. package/dist/src/cli/simple-commands/verification-integration.js +389 -417
  161. package/dist/src/cli/simple-commands/verification-training-integration.js +486 -606
  162. package/dist/src/cli/simple-commands/verification.js +493 -513
  163. package/dist/src/cli/simple-commands/web-server.js +766 -836
  164. package/dist/src/cli/simple-commands/webui-validator.js +106 -124
  165. package/dist/src/coordination/event-bus/demo-wasm-integration.js +212 -251
  166. package/dist/src/coordination/event-bus/qe-event-bus.js +608 -748
  167. package/dist/src/coordination/event-bus/qe-event-bus.test.js +379 -454
  168. package/dist/src/coordination/iteration-tracker.js +363 -454
  169. package/dist/src/enterprise/analytics-manager.js +1135 -0
  170. package/dist/src/enterprise/audit-manager.js +1115 -0
  171. package/dist/src/enterprise/cloud-manager.js +891 -0
  172. package/dist/src/enterprise/deployment-manager.js +966 -0
  173. package/dist/src/enterprise/index.js +6 -0
  174. package/dist/src/enterprise/project-manager.js +584 -0
  175. package/dist/src/enterprise/security-manager.js +991 -0
  176. package/dist/src/index.js +1 -1
  177. package/dist/src/mcp/DEPRECATED.js +46 -60
  178. package/dist/src/mcp/fixes/mcp-error-fixes.js +115 -134
  179. package/dist/src/mcp/implementations/agent-tracker.js +114 -128
  180. package/dist/src/mcp/implementations/daa-tools.js +292 -350
  181. package/dist/src/mcp/implementations/workflow-tools.js +329 -361
  182. package/dist/src/mcp/mcp-config-manager.js +1183 -1331
  183. package/dist/src/mcp/mcp-server-novice-simplified.js +11 -17
  184. package/dist/src/mcp/mcp-server-novice.js +11 -17
  185. package/dist/src/mcp/mcp-server-sdk.js +11 -17
  186. package/dist/src/mcp/mcp-server.js +1620 -1484
  187. package/dist/src/mcp/ruv-swarm-wrapper.js +209 -239
  188. package/dist/src/memory/advanced-serializer.js +609 -589
  189. package/dist/src/memory/enhanced-examples.js +220 -305
  190. package/dist/src/memory/enhanced-memory.js +295 -336
  191. package/dist/src/memory/enhanced-session-serializer.js +408 -492
  192. package/dist/src/memory/fallback-memory-system.js +900 -1021
  193. package/dist/src/memory/fallback-store.js +93 -131
  194. package/dist/src/memory/high-performance-serialization.js +592 -730
  195. package/dist/src/memory/in-memory-store.js +161 -213
  196. package/dist/src/memory/index.js +123 -157
  197. package/dist/src/memory/lock-free-structures.js +578 -764
  198. package/dist/src/memory/memory-mapped-persistence.js +585 -766
  199. package/dist/src/memory/memory-pressure-manager.js +569 -707
  200. package/dist/src/memory/migration.js +358 -445
  201. package/dist/src/memory/shared-memory.js +641 -768
  202. package/dist/src/memory/sqlite-store.js +245 -325
  203. package/dist/src/memory/sqlite-wrapper.js +122 -151
  204. package/dist/src/memory/swarm-memory.js +470 -603
  205. package/dist/src/memory/test-example.js +126 -134
  206. package/dist/src/memory/ultra-fast-memory-store.js +622 -821
  207. package/dist/src/memory/unified-memory-manager.js +356 -437
  208. package/dist/src/migration/index.js +92 -0
  209. package/dist/src/migration/logger.js +121 -0
  210. package/dist/src/migration/migration-analyzer.js +268 -0
  211. package/dist/src/migration/migration-runner.js +522 -0
  212. package/dist/src/migration/migration-validator.js +285 -0
  213. package/dist/src/migration/progress-reporter.js +150 -0
  214. package/dist/src/migration/rollback-manager.js +321 -0
  215. package/dist/src/migration/tests/migration-system.test.js +7 -0
  216. package/dist/src/migration/types.js +3 -0
  217. package/dist/src/swarm/CodeRefactoringSwarm.js +777 -952
  218. package/dist/src/swarm/__tests__/integration.test.js +227 -0
  219. package/dist/src/swarm/__tests__/prompt-copier.test.js +344 -0
  220. package/dist/src/swarm/advanced-orchestrator.js +1095 -0
  221. package/dist/src/swarm/claude-code-interface.js +961 -0
  222. package/dist/src/swarm/claude-flow-executor.js +229 -0
  223. package/dist/src/swarm/consensus-coordinator.js +475 -0
  224. package/dist/src/swarm/coordinator.js +2993 -0
  225. package/dist/src/swarm/direct-executor.js +1180 -0
  226. package/dist/src/swarm/error-recovery/advanced-error-detection.js +691 -0
  227. package/dist/src/swarm/error-recovery/automated-recovery-workflows.js +998 -0
  228. package/dist/src/swarm/error-recovery/error-recovery-coordinator.js +1197 -0
  229. package/dist/src/swarm/error-recovery/recovery-monitoring.js +772 -0
  230. package/dist/src/swarm/error-recovery/resilience-architecture.js +714 -0
  231. package/dist/src/swarm/error-recovery/self-healing-mechanisms.js +1319 -0
  232. package/dist/src/swarm/error-recovery/test-error-recovery-effectiveness.js +808 -0
  233. package/dist/src/swarm/executor-v2.js +322 -0
  234. package/dist/src/swarm/executor.js +815 -0
  235. package/dist/src/swarm/hive-mind-integration.js +703 -0
  236. package/dist/src/swarm/index.js +41 -0
  237. package/dist/src/swarm/json-output-aggregator.js +267 -0
  238. package/dist/src/swarm/large-scale-coordinator.js +542 -0
  239. package/dist/src/swarm/mcp-integration-wrapper.js +628 -0
  240. package/dist/src/swarm/memory.js +1117 -0
  241. package/dist/src/swarm/optimizations/__tests__/optimization.test.js +348 -0
  242. package/dist/src/swarm/optimizations/async-file-manager.js +285 -0
  243. package/dist/src/swarm/optimizations/circular-buffer.js +162 -0
  244. package/dist/src/swarm/optimizations/connection-pool.js +244 -0
  245. package/dist/src/swarm/optimizations/index.js +28 -0
  246. package/dist/src/swarm/optimizations/optimized-executor.js +320 -0
  247. package/dist/src/swarm/optimizations/ttl-map.js +234 -0
  248. package/dist/src/swarm/prompt-cli.js +200 -0
  249. package/dist/src/swarm/prompt-copier-enhanced.js +202 -0
  250. package/dist/src/swarm/prompt-copier.js +381 -0
  251. package/dist/src/swarm/prompt-manager.js +295 -0
  252. package/dist/src/swarm/prompt-utils.js +310 -0
  253. package/dist/src/swarm/result-aggregator.js +718 -0
  254. package/dist/src/swarm/sparc-executor.js +1568 -0
  255. package/dist/src/swarm/strategies/auto.js +758 -0
  256. package/dist/src/swarm/strategies/base.js +128 -0
  257. package/dist/src/swarm/strategies/research.js +914 -0
  258. package/dist/src/swarm/strategies/strategy-metrics-patch.js +2 -0
  259. package/dist/src/swarm/types.js +52 -0
  260. package/dist/src/swarm/workers/copy-worker.js +56 -0
  261. package/dist/src/utils/__tests__/github-cli-safety-wrapper.test.js +332 -400
  262. package/dist/src/utils/github-cli-safe.js +56 -64
  263. package/dist/src/utils/github-cli-safety-wrapper.js +451 -546
  264. package/dist/src/utils/npx-isolated-cache.js +104 -119
  265. package/dist/src/utils/preference-manager.js +622 -652
  266. package/dist/src/utils/timezone-utils.js +86 -105
  267. package/dist/src/validators/epic-config-schema.js +214 -0
  268. package/dist/src/validators/index.js +10 -0
  269. package/dist/src/validators/swarm-init-validator.js +259 -0
  270. package/dist/src/validators/todowrite-batching-validator.js +215 -0
  271. package/dist/src/validators/todowrite-integration.js +187 -0
  272. package/package.json +2 -2
@@ -1,372 +1,314 @@
1
1
  /**
2
2
  * Real Token Usage Tracking for Claude API Calls
3
3
  * Tracks actual token consumption from Claude Code interactions
4
- */
5
-
6
- import { promises as fs } from 'fs';
7
- import path from 'path';
8
- import { fileURLToPath } from 'url';
9
- import { dirname } from 'path';
10
-
4
+ */ import { promises as fs } from "fs";
5
+ import path from "path";
6
+ import { fileURLToPath } from "url";
7
+ import { dirname } from "path";
11
8
  const __filename = fileURLToPath(import.meta.url);
12
9
  const __dirname = dirname(__filename);
13
-
14
10
  // Token tracking cache
15
11
  let tokenCache = {
16
- sessions: {},
17
- totals: {
18
- input: 0,
19
- output: 0,
20
- total: 0,
21
- },
22
- byAgent: {},
23
- byCommand: {},
24
- history: [],
12
+ sessions: {},
13
+ totals: {
14
+ input: 0,
15
+ output: 0,
16
+ total: 0
17
+ },
18
+ byAgent: {},
19
+ byCommand: {},
20
+ history: []
25
21
  };
26
-
27
22
  // Get metrics directory
28
23
  function getMetricsDir() {
29
- return path.join(process.cwd(), '.claude-flow', 'metrics');
24
+ return path.join(process.cwd(), '.claude-flow', 'metrics');
30
25
  }
31
-
32
26
  // Get token file path
33
27
  function getTokenFilePath() {
34
- return path.join(getMetricsDir(), 'token-usage.json');
28
+ return path.join(getMetricsDir(), 'token-usage.json');
35
29
  }
36
-
37
30
  // Load existing token data
38
31
  export async function loadTokenData() {
39
- try {
40
- const filePath = getTokenFilePath();
41
- const data = await fs.readFile(filePath, 'utf-8');
42
- tokenCache = JSON.parse(data);
43
- return tokenCache;
44
- } catch (error) {
45
- // File doesn't exist or is invalid, use default
46
- return tokenCache;
47
- }
32
+ try {
33
+ const filePath = getTokenFilePath();
34
+ const data = await fs.readFile(filePath, 'utf-8');
35
+ tokenCache = JSON.parse(data);
36
+ return tokenCache;
37
+ } catch (error) {
38
+ // File doesn't exist or is invalid, use default
39
+ return tokenCache;
40
+ }
48
41
  }
49
-
50
42
  // Save token data to disk
51
43
  export async function saveTokenData() {
52
- try {
53
- const dir = getMetricsDir();
54
- await fs.mkdir(dir, { recursive: true });
55
-
56
- const filePath = getTokenFilePath();
57
- await fs.writeFile(filePath, JSON.stringify(tokenCache, null, 2));
58
- } catch (error) {
59
- console.error('Failed to save token data:', error.message);
60
- }
44
+ try {
45
+ const dir = getMetricsDir();
46
+ await fs.mkdir(dir, {
47
+ recursive: true
48
+ });
49
+ const filePath = getTokenFilePath();
50
+ await fs.writeFile(filePath, JSON.stringify(tokenCache, null, 2));
51
+ } catch (error) {
52
+ console.error('Failed to save token data:', error.message);
53
+ }
61
54
  }
62
-
63
55
  /**
64
56
  * Track tokens from a Claude interaction
65
57
  * @param {Object} params Token tracking parameters
66
- */
67
- export async function trackTokens(params) {
68
- const {
69
- sessionId,
70
- agentType = 'general',
71
- command = 'unknown',
72
- inputTokens = 0,
73
- outputTokens = 0,
74
- metadata = {},
75
- } = params;
76
-
77
- // Update totals
78
- tokenCache.totals.input += inputTokens;
79
- tokenCache.totals.output += outputTokens;
80
- tokenCache.totals.total += inputTokens + outputTokens;
81
-
82
- // Track by agent type
83
- if (!tokenCache.byAgent[agentType]) {
84
- tokenCache.byAgent[agentType] = {
85
- input: 0,
86
- output: 0,
87
- total: 0,
88
- count: 0,
89
- };
90
- }
91
- tokenCache.byAgent[agentType].input += inputTokens;
92
- tokenCache.byAgent[agentType].output += outputTokens;
93
- tokenCache.byAgent[agentType].total += inputTokens + outputTokens;
94
- tokenCache.byAgent[agentType].count++;
95
-
96
- // Track by command
97
- if (!tokenCache.byCommand[command]) {
98
- tokenCache.byCommand[command] = {
99
- input: 0,
100
- output: 0,
101
- total: 0,
102
- count: 0,
58
+ */ export async function trackTokens(params) {
59
+ const { sessionId, agentType = 'general', command = 'unknown', inputTokens = 0, outputTokens = 0, metadata = {} } = params;
60
+ // Update totals
61
+ tokenCache.totals.input += inputTokens;
62
+ tokenCache.totals.output += outputTokens;
63
+ tokenCache.totals.total += inputTokens + outputTokens;
64
+ // Track by agent type
65
+ if (!tokenCache.byAgent[agentType]) {
66
+ tokenCache.byAgent[agentType] = {
67
+ input: 0,
68
+ output: 0,
69
+ total: 0,
70
+ count: 0
71
+ };
72
+ }
73
+ tokenCache.byAgent[agentType].input += inputTokens;
74
+ tokenCache.byAgent[agentType].output += outputTokens;
75
+ tokenCache.byAgent[agentType].total += inputTokens + outputTokens;
76
+ tokenCache.byAgent[agentType].count++;
77
+ // Track by command
78
+ if (!tokenCache.byCommand[command]) {
79
+ tokenCache.byCommand[command] = {
80
+ input: 0,
81
+ output: 0,
82
+ total: 0,
83
+ count: 0
84
+ };
85
+ }
86
+ tokenCache.byCommand[command].input += inputTokens;
87
+ tokenCache.byCommand[command].output += outputTokens;
88
+ tokenCache.byCommand[command].total += inputTokens + outputTokens;
89
+ tokenCache.byCommand[command].count++;
90
+ // Add to history
91
+ tokenCache.history.push({
92
+ timestamp: Date.now(),
93
+ sessionId,
94
+ agentType,
95
+ command,
96
+ inputTokens,
97
+ outputTokens,
98
+ metadata
99
+ });
100
+ // Keep only last 1000 entries in history
101
+ if (tokenCache.history.length > 1000) {
102
+ tokenCache.history = tokenCache.history.slice(-1000);
103
+ }
104
+ // Save to disk
105
+ await saveTokenData();
106
+ return {
107
+ sessionTotal: inputTokens + outputTokens,
108
+ grandTotal: tokenCache.totals.total
103
109
  };
104
- }
105
- tokenCache.byCommand[command].input += inputTokens;
106
- tokenCache.byCommand[command].output += outputTokens;
107
- tokenCache.byCommand[command].total += inputTokens + outputTokens;
108
- tokenCache.byCommand[command].count++;
109
-
110
- // Add to history
111
- tokenCache.history.push({
112
- timestamp: Date.now(),
113
- sessionId,
114
- agentType,
115
- command,
116
- inputTokens,
117
- outputTokens,
118
- metadata,
119
- });
120
-
121
- // Keep only last 1000 entries in history
122
- if (tokenCache.history.length > 1000) {
123
- tokenCache.history = tokenCache.history.slice(-1000);
124
- }
125
-
126
- // Save to disk
127
- await saveTokenData();
128
-
129
- return {
130
- sessionTotal: inputTokens + outputTokens,
131
- grandTotal: tokenCache.totals.total,
132
- };
133
110
  }
134
-
135
111
  /**
136
112
  * Get real token usage data
137
113
  * @param {string} agentFilter Filter by agent type
138
- */
139
- export async function getRealTokenUsage(agentFilter = 'all') {
140
- await loadTokenData();
141
-
142
- // If no data tracked yet, check for Claude API logs
143
- if (tokenCache.totals.total === 0) {
144
- // Try to read from Claude Code's own tracking if available
145
- const claudeTokens = await getClaudeCodeTokenUsage();
146
- if (claudeTokens) {
147
- return claudeTokens;
114
+ */ export async function getRealTokenUsage(agentFilter = 'all') {
115
+ await loadTokenData();
116
+ // If no data tracked yet, check for Claude API logs
117
+ if (tokenCache.totals.total === 0) {
118
+ // Try to read from Claude Code's own tracking if available
119
+ const claudeTokens = await getClaudeCodeTokenUsage();
120
+ if (claudeTokens) {
121
+ return claudeTokens;
122
+ }
148
123
  }
149
- }
150
-
151
- // Filter by agent if specified
152
- if (agentFilter !== 'all' && tokenCache.byAgent[agentFilter]) {
153
- const agentData = tokenCache.byAgent[agentFilter];
124
+ // Filter by agent if specified
125
+ if (agentFilter !== 'all' && tokenCache.byAgent[agentFilter]) {
126
+ const agentData = tokenCache.byAgent[agentFilter];
127
+ return {
128
+ total: agentData.total,
129
+ input: agentData.input,
130
+ output: agentData.output,
131
+ byAgent: {
132
+ [agentFilter]: agentData.total
133
+ }
134
+ };
135
+ }
136
+ // Return all data
137
+ const byAgent = {};
138
+ Object.entries(tokenCache.byAgent).forEach(([type, data])=>{
139
+ byAgent[type] = data.total;
140
+ });
154
141
  return {
155
- total: agentData.total,
156
- input: agentData.input,
157
- output: agentData.output,
158
- byAgent: { [agentFilter]: agentData.total },
142
+ total: tokenCache.totals.total,
143
+ input: tokenCache.totals.input,
144
+ output: tokenCache.totals.output,
145
+ byAgent,
146
+ byCommand: tokenCache.byCommand,
147
+ history: tokenCache.history
159
148
  };
160
- }
161
-
162
- // Return all data
163
- const byAgent = {};
164
- Object.entries(tokenCache.byAgent).forEach(([type, data]) => {
165
- byAgent[type] = data.total;
166
- });
167
-
168
- return {
169
- total: tokenCache.totals.total,
170
- input: tokenCache.totals.input,
171
- output: tokenCache.totals.output,
172
- byAgent,
173
- byCommand: tokenCache.byCommand,
174
- history: tokenCache.history,
175
- };
176
149
  }
177
-
178
150
  /**
179
151
  * Try to get token usage from Claude Code's own tracking
180
- */
181
- async function getClaudeCodeTokenUsage() {
182
- try {
183
- // Check common locations for Claude token logs
184
- const possiblePaths = [
185
- path.join(process.env.HOME, '.config', 'claude', 'usage.json'),
186
- path.join(process.env.HOME, '.claude', 'metrics.json'),
187
- path.join(process.cwd(), '.claude', 'usage.json'),
188
- ];
189
-
190
- for (const logPath of possiblePaths) {
191
- try {
192
- const data = await fs.readFile(logPath, 'utf-8');
193
- const usage = JSON.parse(data);
194
-
195
- // Convert Claude's format to our format
196
- if (usage.tokens || usage.usage) {
197
- const tokens = usage.tokens || usage.usage;
198
- return {
199
- total: tokens.total || 0,
200
- input: tokens.input || tokens.prompt_tokens || 0,
201
- output: tokens.output || tokens.completion_tokens || 0,
202
- byAgent: {},
203
- source: 'claude-code',
204
- };
152
+ */ async function getClaudeCodeTokenUsage() {
153
+ try {
154
+ // Check common locations for Claude token logs
155
+ const possiblePaths = [
156
+ path.join(process.env.HOME, '.config', 'claude', 'usage.json'),
157
+ path.join(process.env.HOME, '.claude', 'metrics.json'),
158
+ path.join(process.cwd(), '.claude', 'usage.json')
159
+ ];
160
+ for (const logPath of possiblePaths){
161
+ try {
162
+ const data = await fs.readFile(logPath, 'utf-8');
163
+ const usage = JSON.parse(data);
164
+ // Convert Claude's format to our format
165
+ if (usage.tokens || usage.usage) {
166
+ const tokens = usage.tokens || usage.usage;
167
+ return {
168
+ total: tokens.total || 0,
169
+ input: tokens.input || tokens.prompt_tokens || 0,
170
+ output: tokens.output || tokens.completion_tokens || 0,
171
+ byAgent: {},
172
+ source: 'claude-code'
173
+ };
174
+ }
175
+ } catch (e) {
176
+ // Continue to next path
177
+ }
205
178
  }
206
- } catch (e) {
207
- // Continue to next path
208
- }
209
- }
210
- } catch (error) {
179
+ } catch (error) {
211
180
  // No Claude tracking found
212
- }
213
-
214
- // Return empty if no data found
215
- return {
216
- total: 0,
217
- input: 0,
218
- output: 0,
219
- byAgent: {},
220
- source: 'none',
221
- };
181
+ }
182
+ // Return empty if no data found
183
+ return {
184
+ total: 0,
185
+ input: 0,
186
+ output: 0,
187
+ byAgent: {},
188
+ source: 'none'
189
+ };
222
190
  }
223
-
224
191
  /**
225
192
  * Calculate cost based on token usage
226
193
  * Using Claude 3 pricing (as of 2024)
227
- */
228
- export function calculateCost(tokenData) {
229
- // Claude 3 Opus pricing (per 1M tokens)
230
- const INPUT_COST_PER_1M = 15.0; // $15 per 1M input tokens
231
- const OUTPUT_COST_PER_1M = 75.0; // $75 per 1M output tokens
232
-
233
- const inputCost = (tokenData.input / 1000000) * INPUT_COST_PER_1M;
234
- const outputCost = (tokenData.output / 1000000) * OUTPUT_COST_PER_1M;
235
-
236
- return {
237
- input: inputCost,
238
- output: outputCost,
239
- total: inputCost + outputCost,
240
- };
194
+ */ export function calculateCost(tokenData) {
195
+ // Claude 3 Opus pricing (per 1M tokens)
196
+ const INPUT_COST_PER_1M = 15.0; // $15 per 1M input tokens
197
+ const OUTPUT_COST_PER_1M = 75.0; // $75 per 1M output tokens
198
+ const inputCost = tokenData.input / 1000000 * INPUT_COST_PER_1M;
199
+ const outputCost = tokenData.output / 1000000 * OUTPUT_COST_PER_1M;
200
+ return {
201
+ input: inputCost,
202
+ output: outputCost,
203
+ total: inputCost + outputCost
204
+ };
241
205
  }
242
-
243
206
  /**
244
207
  * Generate optimization suggestions based on real usage
245
- */
246
- export function generateOptimizationSuggestions(tokenData) {
247
- const suggestions = [];
248
-
249
- // Check if there's actual data
250
- if (tokenData.total === 0) {
251
- return ['No token usage data available. Start using Claude Code to track tokens.'];
252
- }
253
-
254
- // Analyze input/output ratio
255
- const outputRatio = tokenData.output / tokenData.total;
256
- if (outputRatio > 0.6) {
257
- suggestions.push(
258
- 'High output ratio detected. Consider more concise prompts to reduce generation.',
259
- );
260
- }
261
-
262
- // Analyze by agent type
263
- if (tokenData.byAgent) {
264
- const sortedAgents = Object.entries(tokenData.byAgent).sort((a, b) => b[1] - a[1]);
265
-
266
- if (sortedAgents.length > 0) {
267
- const [topAgent, topUsage] = sortedAgents[0];
268
- const percentage = (topUsage / tokenData.total) * 100;
269
-
270
- if (percentage > 50) {
271
- suggestions.push(
272
- `${topAgent} agents consume ${percentage.toFixed(0)}% of tokens. Consider optimization or caching.`,
273
- );
274
- }
208
+ */ export function generateOptimizationSuggestions(tokenData) {
209
+ const suggestions = [];
210
+ // Check if there's actual data
211
+ if (tokenData.total === 0) {
212
+ return [
213
+ 'No token usage data available. Start using Claude Code to track tokens.'
214
+ ];
215
+ }
216
+ // Analyze input/output ratio
217
+ const outputRatio = tokenData.output / tokenData.total;
218
+ if (outputRatio > 0.6) {
219
+ suggestions.push('High output ratio detected. Consider more concise prompts to reduce generation.');
220
+ }
221
+ // Analyze by agent type
222
+ if (tokenData.byAgent) {
223
+ const sortedAgents = Object.entries(tokenData.byAgent).sort((a, b)=>b[1] - a[1]);
224
+ if (sortedAgents.length > 0) {
225
+ const [topAgent, topUsage] = sortedAgents[0];
226
+ const percentage = topUsage / tokenData.total * 100;
227
+ if (percentage > 50) {
228
+ suggestions.push(`${topAgent} agents consume ${percentage.toFixed(0)}% of tokens. Consider optimization or caching.`);
229
+ }
230
+ }
231
+ }
232
+ // Check for repeated patterns in history
233
+ if (tokenData.history && tokenData.history.length > 10) {
234
+ const recentCommands = tokenData.history.slice(-20).map((h)=>h.command);
235
+ const duplicates = recentCommands.filter((cmd, i)=>recentCommands.indexOf(cmd) !== i);
236
+ if (duplicates.length > 5) {
237
+ suggestions.push('Repeated commands detected. Consider implementing result caching.');
238
+ }
275
239
  }
276
- }
277
-
278
- // Check for repeated patterns in history
279
- if (tokenData.history && tokenData.history.length > 10) {
280
- const recentCommands = tokenData.history.slice(-20).map((h) => h.command);
281
- const duplicates = recentCommands.filter((cmd, i) => recentCommands.indexOf(cmd) !== i);
282
-
283
- if (duplicates.length > 5) {
284
- suggestions.push('Repeated commands detected. Consider implementing result caching.');
240
+ // Cost optimization
241
+ if (tokenData.total > 100000) {
242
+ suggestions.push('Consider using Claude Haiku for non-critical tasks to reduce costs by ~90%.');
285
243
  }
286
- }
287
-
288
- // Cost optimization
289
- if (tokenData.total > 100000) {
290
- suggestions.push('Consider using Claude Haiku for non-critical tasks to reduce costs by ~90%.');
291
- }
292
-
293
- // General suggestions based on volume
294
- if (tokenData.total > 50000) {
295
- suggestions.push('Implement prompt templates to reduce input token usage.');
296
- suggestions.push('Use streaming responses to optimize output generation.');
297
- }
298
-
299
- return suggestions.length > 0 ? suggestions : ['Token usage is within optimal range.'];
244
+ // General suggestions based on volume
245
+ if (tokenData.total > 50000) {
246
+ suggestions.push('Implement prompt templates to reduce input token usage.');
247
+ suggestions.push('Use streaming responses to optimize output generation.');
248
+ }
249
+ return suggestions.length > 0 ? suggestions : [
250
+ 'Token usage is within optimal range.'
251
+ ];
300
252
  }
301
-
302
253
  /**
303
254
  * Generate detailed token usage report
304
- */
305
- export async function generateTokenUsageReport(tokenData, agentFilter) {
306
- const reportDir = path.join(process.cwd(), 'analysis-reports');
307
- await fs.mkdir(reportDir, { recursive: true });
308
-
309
- const timestamp = Date.now();
310
- const csvPath = path.join(reportDir, `token-usage-${timestamp}.csv`);
311
-
312
- // Create CSV content
313
- let csv = 'Timestamp,Session,Agent,Command,Input Tokens,Output Tokens,Total\n';
314
-
315
- if (tokenData.history) {
316
- tokenData.history.forEach((entry) => {
317
- const date = new Date(entry.timestamp).toISOString();
318
- const total = entry.inputTokens + entry.outputTokens;
319
- csv += `${date},${entry.sessionId},${entry.agentType},${entry.command},${entry.inputTokens},${entry.outputTokens},${total}\n`;
255
+ */ export async function generateTokenUsageReport(tokenData, agentFilter) {
256
+ const reportDir = path.join(process.cwd(), 'analysis-reports');
257
+ await fs.mkdir(reportDir, {
258
+ recursive: true
320
259
  });
321
- }
322
-
323
- // Add summary at the end
324
- csv += '\nSUMMARY\n';
325
- csv += `Total Input Tokens,${tokenData.input}\n`;
326
- csv += `Total Output Tokens,${tokenData.output}\n`;
327
- csv += `Total Tokens,${tokenData.total}\n`;
328
-
329
- if (tokenData.byAgent) {
330
- csv += '\nBY AGENT TYPE\n';
331
- Object.entries(tokenData.byAgent).forEach(([type, usage]) => {
332
- csv += `${type},${usage}\n`;
333
- });
334
- }
335
-
336
- await fs.writeFile(csvPath, csv);
337
- return csvPath;
260
+ const timestamp = Date.now();
261
+ const csvPath = path.join(reportDir, `token-usage-${timestamp}.csv`);
262
+ // Create CSV content
263
+ let csv = 'Timestamp,Session,Agent,Command,Input Tokens,Output Tokens,Total\n';
264
+ if (tokenData.history) {
265
+ tokenData.history.forEach((entry)=>{
266
+ const date = new Date(entry.timestamp).toISOString();
267
+ const total = entry.inputTokens + entry.outputTokens;
268
+ csv += `${date},${entry.sessionId},${entry.agentType},${entry.command},${entry.inputTokens},${entry.outputTokens},${total}\n`;
269
+ });
270
+ }
271
+ // Add summary at the end
272
+ csv += '\nSUMMARY\n';
273
+ csv += `Total Input Tokens,${tokenData.input}\n`;
274
+ csv += `Total Output Tokens,${tokenData.output}\n`;
275
+ csv += `Total Tokens,${tokenData.total}\n`;
276
+ if (tokenData.byAgent) {
277
+ csv += '\nBY AGENT TYPE\n';
278
+ Object.entries(tokenData.byAgent).forEach(([type, usage])=>{
279
+ csv += `${type},${usage}\n`;
280
+ });
281
+ }
282
+ await fs.writeFile(csvPath, csv);
283
+ return csvPath;
338
284
  }
339
-
340
285
  /**
341
286
  * Get icon for agent type
342
- */
343
- export function getAgentIcon(agentType) {
344
- const icons = {
345
- coordinator: '๐ŸŽฏ',
346
- developer: '๐Ÿ‘จโ€๐Ÿ’ป',
347
- researcher: '๐Ÿ”',
348
- analyzer: '๐Ÿ“Š',
349
- tester: '๐Ÿงช',
350
- architect: '๐Ÿ—๏ธ',
351
- general: '๐Ÿค–',
352
- };
353
- return icons[agentType] || '๐Ÿค–';
287
+ */ export function getAgentIcon(agentType) {
288
+ const icons = {
289
+ coordinator: '๐ŸŽฏ',
290
+ developer: '๐Ÿ‘จโ€๐Ÿ’ป',
291
+ researcher: '๐Ÿ”',
292
+ analyzer: '๐Ÿ“Š',
293
+ tester: '๐Ÿงช',
294
+ architect: '๐Ÿ—๏ธ',
295
+ general: '๐Ÿค–'
296
+ };
297
+ return icons[agentType] || '๐Ÿค–';
354
298
  }
355
-
356
299
  /**
357
300
  * Reset token tracking (for testing)
358
- */
359
- export async function resetTokenTracking() {
360
- tokenCache = {
361
- sessions: {},
362
- totals: {
363
- input: 0,
364
- output: 0,
365
- total: 0,
366
- },
367
- byAgent: {},
368
- byCommand: {},
369
- history: [],
370
- };
371
- await saveTokenData();
301
+ */ export async function resetTokenTracking() {
302
+ tokenCache = {
303
+ sessions: {},
304
+ totals: {
305
+ input: 0,
306
+ output: 0,
307
+ total: 0
308
+ },
309
+ byAgent: {},
310
+ byCommand: {},
311
+ history: []
312
+ };
313
+ await saveTokenData();
372
314
  }