claude-flow-novice 1.3.0 โ†’ 1.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (305) hide show
  1. package/.claude-flow-novice/preferences/generation.json +147 -0
  2. package/.claude-flow-novice/preferences/language-configs/javascript.json +51 -0
  3. package/.claude-flow-novice/preferences/language-configs/python.json +50 -0
  4. package/.claude-flow-novice/preferences/language-configs/rust.json +237 -0
  5. package/.claude-flow-novice/preferences/language-configs/typescript.json +54 -0
  6. package/.claude-flow-novice/preferences/project-local.json +91 -0
  7. package/.claude-flow-novice/preferences/resource-delegation.json +120 -0
  8. package/.claude-flow-novice/preferences/team-shared.json +195 -0
  9. package/.claude-flow-novice/preferences/user-global.json +247 -0
  10. package/.claude-flow-novice/templates/claude-md-templates/CLAUDE-JAVASCRIPT.md +769 -0
  11. package/.claude-flow-novice/templates/claude-md-templates/CLAUDE-PYTHON.md +1214 -0
  12. package/.claude-flow-novice/templates/claude-md-templates/CLAUDE-RUST.md +475 -0
  13. package/.claude-flow-novice/templates/claude-md-templates/CLAUDE-TYPESCRIPT.md +851 -0
  14. package/.claude-flow-novice/templates/claude-md-templates/README.md +263 -0
  15. package/CLAUDE.md +81 -0
  16. package/README-NPM.md +0 -0
  17. package/package.json +11 -7
  18. package/scripts/build/README.md +167 -0
  19. package/scripts/build/build-config.js +27 -0
  20. package/scripts/build/build-prompt-copier.sh +30 -0
  21. package/scripts/build/performance-monitor.js +869 -0
  22. package/scripts/build/prepare-publish.js +150 -0
  23. package/scripts/build/typescript-fixer.js +621 -0
  24. package/scripts/build/unified-builder.sh +428 -0
  25. package/scripts/build/update-bin-version.js +32 -0
  26. package/scripts/dev/README.md +264 -0
  27. package/scripts/dev/claude-flow-wrapper.sh +35 -0
  28. package/scripts/dev/claude-monitor.py +419 -0
  29. package/scripts/dev/claude-sparc.sh +562 -0
  30. package/scripts/dev/claude-wrapper.sh +17 -0
  31. package/scripts/dev/demo-phase3-compliance.js +172 -0
  32. package/scripts/dev/demo-task-system.ts +224 -0
  33. package/scripts/dev/deployment-validator.js +315 -0
  34. package/scripts/dev/spawn-claude-terminal.sh +32 -0
  35. package/scripts/dev/start-portal.sh +506 -0
  36. package/scripts/dev/start-web-ui.js +15 -0
  37. package/scripts/dev/stop-portal.sh +311 -0
  38. package/scripts/dev/validate-examples.ts +288 -0
  39. package/scripts/dev/validate-phase2.cjs +451 -0
  40. package/scripts/dev/validate-phase2.js +785 -0
  41. package/scripts/dev/validate-phase3.cjs +208 -0
  42. package/scripts/dev/validate-security-remediation.js +1 -0
  43. package/scripts/legacy/README.md +272 -0
  44. package/scripts/legacy/batch-fix-ts.sh +54 -0
  45. package/scripts/legacy/build-migration.sh +105 -0
  46. package/scripts/legacy/build-monitor.js +209 -0
  47. package/scripts/legacy/build-with-filter.sh +84 -0
  48. package/scripts/legacy/build-workaround.sh +71 -0
  49. package/scripts/legacy/fix-ts-advanced.js +358 -0
  50. package/scripts/legacy/fix-ts-final.sh +50 -0
  51. package/scripts/legacy/fix-ts-targeted.sh +49 -0
  52. package/scripts/legacy/fix-typescript-errors.js +305 -0
  53. package/scripts/legacy/force-build.sh +63 -0
  54. package/scripts/legacy/optimize-performance.js +400 -0
  55. package/scripts/legacy/performance-monitor.js +263 -0
  56. package/scripts/legacy/performance-monitoring.js +532 -0
  57. package/scripts/legacy/performance-test-runner.js +645 -0
  58. package/scripts/legacy/quick-fix-ts.js +281 -0
  59. package/scripts/legacy/safe-build.sh +63 -0
  60. package/scripts/migration/README.md +434 -0
  61. package/scripts/migration/install-arm64.js +78 -0
  62. package/scripts/migration/install.js +83 -0
  63. package/scripts/migration/migrate-hooks.js +173 -0
  64. package/scripts/migration/migration-examples.ts +318 -0
  65. package/scripts/optimization/build-optimizer.js +438 -0
  66. package/scripts/optimization/config-validator.js +761 -0
  67. package/scripts/optimization/test-optimization.js +432 -0
  68. package/scripts/optimization/unified-activation.js +839 -0
  69. package/scripts/performance/ACTIVATION_COMMANDS.md +292 -0
  70. package/scripts/performance/sqlite-enhanced-activation.sh +583 -0
  71. package/scripts/performance/test-enhanced-backend.sh +504 -0
  72. package/scripts/performance-test-runner.js +698 -0
  73. package/scripts/security/README.md +339 -0
  74. package/scripts/security/install-git-hooks.sh +132 -0
  75. package/scripts/security/ruv-swarm-safe.js +74 -0
  76. package/scripts/test/README.md +236 -0
  77. package/scripts/test/check-links.ts +274 -0
  78. package/scripts/test/check-performance-regression.ts +168 -0
  79. package/scripts/test/coverage-report.ts +692 -0
  80. package/scripts/test/generate-swarm-tests.js +633 -0
  81. package/scripts/test/integration-test-validation.cjs +253 -0
  82. package/scripts/test/load-test-swarm.js +576 -0
  83. package/scripts/test/run-phase3-compliance-tests.js +427 -0
  84. package/scripts/test/test-batch-tasks.ts +29 -0
  85. package/scripts/test/test-byzantine-resolution.js +246 -0
  86. package/scripts/test/test-claude-spawn-options.sh +63 -0
  87. package/scripts/test/test-cli-wizard.js +331 -0
  88. package/scripts/test/test-comprehensive.js +401 -0
  89. package/scripts/test/test-coordination-features.ts +238 -0
  90. package/scripts/test/test-fallback-systems.js +276 -0
  91. package/scripts/test/test-init-command.ts +302 -0
  92. package/scripts/test/test-mcp.ts +251 -0
  93. package/scripts/test/test-runner.ts +568 -0
  94. package/scripts/test/test-swarm-integration.sh +92 -0
  95. package/scripts/test/test-swarm.ts +142 -0
  96. package/scripts/test/validation-summary.ts +408 -0
  97. package/scripts/utils/README.md +261 -0
  98. package/scripts/utils/clean-build-artifacts.sh +94 -0
  99. package/scripts/utils/cleanup-root.sh +69 -0
  100. package/scripts/utils/fix-cliffy-imports.js +307 -0
  101. package/scripts/utils/fix-duplicate-imports.js +114 -0
  102. package/scripts/utils/fix-error-handling.cjs +70 -0
  103. package/scripts/utils/fix-import-paths.js +104 -0
  104. package/scripts/utils/fix-imports.js +116 -0
  105. package/scripts/utils/fix-shebang.js +78 -0
  106. package/scripts/utils/fix-test-modules.js +27 -0
  107. package/scripts/utils/fix-timezone-issue-246.js +200 -0
  108. package/scripts/utils/fix-ts-comprehensive.py +182 -0
  109. package/scripts/utils/fix-ts-targeted-batch.js +250 -0
  110. package/scripts/utils/remove-benchmark-conflicts.sh +140 -0
  111. package/scripts/utils/simple-test-fixer.js +190 -0
  112. package/scripts/utils/validate-metrics-structure.cjs +144 -0
  113. package/scripts/verify-mcp-server.js +86 -0
  114. package/src/cli/simple-commands/__tests__/agent.test.js +291 -0
  115. package/src/cli/simple-commands/__tests__/memory.test.js +8 -0
  116. package/src/cli/simple-commands/__tests__/swarm.test.js +371 -0
  117. package/src/cli/simple-commands/__tests__/task.test.js +8 -0
  118. package/src/cli/simple-commands/agent.js +216 -0
  119. package/src/cli/simple-commands/analysis.js +570 -0
  120. package/src/cli/simple-commands/automation-executor.js +1603 -0
  121. package/src/cli/simple-commands/automation.js +627 -0
  122. package/src/cli/simple-commands/batch-manager.js +338 -0
  123. package/src/cli/simple-commands/claude-telemetry.js +311 -0
  124. package/src/cli/simple-commands/claude-track.js +102 -0
  125. package/src/cli/simple-commands/concurrent-display.js +348 -0
  126. package/src/cli/simple-commands/config.js +319 -0
  127. package/src/cli/simple-commands/coordination.js +307 -0
  128. package/src/cli/simple-commands/enhanced-ui-views.js +654 -0
  129. package/src/cli/simple-commands/enhanced-webui-complete.js +1038 -0
  130. package/src/cli/simple-commands/fix-hook-variables.js +363 -0
  131. package/src/cli/simple-commands/github/gh-coordinator.js +605 -0
  132. package/src/cli/simple-commands/github/github-api.js +624 -0
  133. package/src/cli/simple-commands/github/init.js +543 -0
  134. package/src/cli/simple-commands/github.js +377 -0
  135. package/src/cli/simple-commands/goal.js +145 -0
  136. package/src/cli/simple-commands/hive-mind/auto-save-middleware.js +311 -0
  137. package/src/cli/simple-commands/hive-mind/communication.js +740 -0
  138. package/src/cli/simple-commands/hive-mind/core.js +1031 -0
  139. package/src/cli/simple-commands/hive-mind/db-optimizer.js +872 -0
  140. package/src/cli/simple-commands/hive-mind/mcp-wrapper.js +1364 -0
  141. package/src/cli/simple-commands/hive-mind/memory.js +1292 -0
  142. package/src/cli/simple-commands/hive-mind/performance-optimizer.js +618 -0
  143. package/src/cli/simple-commands/hive-mind/performance-test.js +373 -0
  144. package/src/cli/simple-commands/hive-mind/queen.js +809 -0
  145. package/src/cli/simple-commands/hive-mind/session-manager.js +1223 -0
  146. package/src/cli/simple-commands/hive-mind-optimize.js +361 -0
  147. package/src/cli/simple-commands/hive-mind-wizard.js +281 -0
  148. package/src/cli/simple-commands/hive-mind.js +3112 -0
  149. package/src/cli/simple-commands/hive.js +140 -0
  150. package/src/cli/simple-commands/hook-safety.js +671 -0
  151. package/src/cli/simple-commands/hooks.js +1268 -0
  152. package/src/cli/simple-commands/init/.claude/checkpoints/1756224542.json +7 -0
  153. package/src/cli/simple-commands/init/.claude/checkpoints/1756224544.json +8 -0
  154. package/src/cli/simple-commands/init/README.md +106 -0
  155. package/src/cli/simple-commands/init/VALIDATION_ROLLBACK.md +488 -0
  156. package/src/cli/simple-commands/init/agent-copier.js +347 -0
  157. package/src/cli/simple-commands/init/batch-init.js +663 -0
  158. package/src/cli/simple-commands/init/claude-commands/claude-flow-commands.js +438 -0
  159. package/src/cli/simple-commands/init/claude-commands/optimized-claude-flow-commands.js +876 -0
  160. package/src/cli/simple-commands/init/claude-commands/optimized-slash-commands.js +356 -0
  161. package/src/cli/simple-commands/init/claude-commands/optimized-sparc-commands.js +501 -0
  162. package/src/cli/simple-commands/init/claude-commands/slash-commands.js +57 -0
  163. package/src/cli/simple-commands/init/claude-commands/sparc-commands.js +296 -0
  164. package/src/cli/simple-commands/init/copy-revised-templates.js +175 -0
  165. package/src/cli/simple-commands/init/executable-wrapper.js +122 -0
  166. package/src/cli/simple-commands/init/gitignore-updater.js +137 -0
  167. package/src/cli/simple-commands/init/help.js +110 -0
  168. package/src/cli/simple-commands/init/hive-mind-init.js +749 -0
  169. package/src/cli/simple-commands/init/index.js +1953 -0
  170. package/src/cli/simple-commands/init/performance-monitor.js +344 -0
  171. package/src/cli/simple-commands/init/rollback/backup-manager.js +542 -0
  172. package/src/cli/simple-commands/init/rollback/index.js +399 -0
  173. package/src/cli/simple-commands/init/rollback/recovery-manager.js +778 -0
  174. package/src/cli/simple-commands/init/rollback/rollback-executor.js +521 -0
  175. package/src/cli/simple-commands/init/rollback/state-tracker.js +486 -0
  176. package/src/cli/simple-commands/init/sparc/roo-readme.js +61 -0
  177. package/src/cli/simple-commands/init/sparc/roomodes-config.js +102 -0
  178. package/src/cli/simple-commands/init/sparc/workflows.js +40 -0
  179. package/src/cli/simple-commands/init/sparc-structure.js +68 -0
  180. package/src/cli/simple-commands/init/template-copier.js +640 -0
  181. package/src/cli/simple-commands/init/templates/CLAUDE.md +1185 -0
  182. package/src/cli/simple-commands/init/templates/CLAUDE.md.optimized +265 -0
  183. package/src/cli/simple-commands/init/templates/claude-flow-universal +81 -0
  184. package/src/cli/simple-commands/init/templates/claude-flow.bat +18 -0
  185. package/src/cli/simple-commands/init/templates/claude-flow.ps1 +24 -0
  186. package/src/cli/simple-commands/init/templates/claude-md.js +1101 -0
  187. package/src/cli/simple-commands/init/templates/commands/analysis/bottleneck-detect.md +162 -0
  188. package/src/cli/simple-commands/init/templates/commands/automation/auto-agent.md +122 -0
  189. package/src/cli/simple-commands/init/templates/commands/coordination/swarm-init.md +85 -0
  190. package/src/cli/simple-commands/init/templates/commands/github/github-swarm.md +121 -0
  191. package/src/cli/simple-commands/init/templates/commands/helpers/standard-checkpoint-hooks.sh +179 -0
  192. package/src/cli/simple-commands/init/templates/commands/hooks/notification.md +113 -0
  193. package/src/cli/simple-commands/init/templates/commands/hooks/post-command.md +116 -0
  194. package/src/cli/simple-commands/init/templates/commands/hooks/post-edit.md +117 -0
  195. package/src/cli/simple-commands/init/templates/commands/hooks/post-task.md +112 -0
  196. package/src/cli/simple-commands/init/templates/commands/hooks/pre-command.md +113 -0
  197. package/src/cli/simple-commands/init/templates/commands/hooks/pre-edit.md +113 -0
  198. package/src/cli/simple-commands/init/templates/commands/hooks/pre-search.md +112 -0
  199. package/src/cli/simple-commands/init/templates/commands/hooks/pre-task.md +111 -0
  200. package/src/cli/simple-commands/init/templates/commands/hooks/session-end.md +118 -0
  201. package/src/cli/simple-commands/init/templates/commands/hooks/session-restore.md +118 -0
  202. package/src/cli/simple-commands/init/templates/commands/hooks/session-start.md +117 -0
  203. package/src/cli/simple-commands/init/templates/coordination-md.js +340 -0
  204. package/src/cli/simple-commands/init/templates/coordination.md +16 -0
  205. package/src/cli/simple-commands/init/templates/enhanced-templates.js +2347 -0
  206. package/src/cli/simple-commands/init/templates/github-safe-enhanced.js +331 -0
  207. package/src/cli/simple-commands/init/templates/github-safe.js +106 -0
  208. package/src/cli/simple-commands/init/templates/memory-bank-md.js +259 -0
  209. package/src/cli/simple-commands/init/templates/memory-bank.md +16 -0
  210. package/src/cli/simple-commands/init/templates/readme-files.js +72 -0
  211. package/src/cli/simple-commands/init/templates/safe-hook-patterns.js +430 -0
  212. package/src/cli/simple-commands/init/templates/settings.json +109 -0
  213. package/src/cli/simple-commands/init/templates/settings.json.enhanced +35 -0
  214. package/src/cli/simple-commands/init/templates/sparc-modes.js +1401 -0
  215. package/src/cli/simple-commands/init/templates/verification-claude-md.js +432 -0
  216. package/src/cli/simple-commands/init/validation/config-validator.js +354 -0
  217. package/src/cli/simple-commands/init/validation/health-checker.js +599 -0
  218. package/src/cli/simple-commands/init/validation/index.js +388 -0
  219. package/src/cli/simple-commands/init/validation/mode-validator.js +387 -0
  220. package/src/cli/simple-commands/init/validation/post-init-validator.js +390 -0
  221. package/src/cli/simple-commands/init/validation/pre-init-validator.js +290 -0
  222. package/src/cli/simple-commands/init/validation/test-runner.js +488 -0
  223. package/src/cli/simple-commands/init.js +4 -0
  224. package/src/cli/simple-commands/mcp-health.js +163 -0
  225. package/src/cli/simple-commands/mcp-integration-layer.js +689 -0
  226. package/src/cli/simple-commands/mcp.js +420 -0
  227. package/src/cli/simple-commands/memory-consolidation.js +631 -0
  228. package/src/cli/simple-commands/memory.js +345 -0
  229. package/src/cli/simple-commands/migrate-hooks.js +63 -0
  230. package/src/cli/simple-commands/monitor.js +417 -0
  231. package/src/cli/simple-commands/neural.js +148 -0
  232. package/src/cli/simple-commands/pair-autofix-only.js +755 -0
  233. package/src/cli/simple-commands/pair-basic.js +751 -0
  234. package/src/cli/simple-commands/pair-old.js +623 -0
  235. package/src/cli/simple-commands/pair-working.js +849 -0
  236. package/src/cli/simple-commands/pair.js +849 -0
  237. package/src/cli/simple-commands/performance-hooks.js +149 -0
  238. package/src/cli/simple-commands/performance-metrics.js +601 -0
  239. package/src/cli/simple-commands/process-ui-enhanced.js +821 -0
  240. package/src/cli/simple-commands/process-ui.js +274 -0
  241. package/src/cli/simple-commands/realtime-update-system.js +659 -0
  242. package/src/cli/simple-commands/sparc/architecture.js +1750 -0
  243. package/src/cli/simple-commands/sparc/commands.js +575 -0
  244. package/src/cli/simple-commands/sparc/completion.js +1831 -0
  245. package/src/cli/simple-commands/sparc/coordinator.js +1045 -0
  246. package/src/cli/simple-commands/sparc/index.js +321 -0
  247. package/src/cli/simple-commands/sparc/phase-base.js +430 -0
  248. package/src/cli/simple-commands/sparc/pseudocode.js +984 -0
  249. package/src/cli/simple-commands/sparc/refinement.js +1856 -0
  250. package/src/cli/simple-commands/sparc/specification.js +736 -0
  251. package/src/cli/simple-commands/sparc-modes/architect.js +125 -0
  252. package/src/cli/simple-commands/sparc-modes/ask.js +126 -0
  253. package/src/cli/simple-commands/sparc-modes/code.js +148 -0
  254. package/src/cli/simple-commands/sparc-modes/debug.js +112 -0
  255. package/src/cli/simple-commands/sparc-modes/devops.js +137 -0
  256. package/src/cli/simple-commands/sparc-modes/docs-writer.js +38 -0
  257. package/src/cli/simple-commands/sparc-modes/generic.js +34 -0
  258. package/src/cli/simple-commands/sparc-modes/index.js +201 -0
  259. package/src/cli/simple-commands/sparc-modes/integration.js +55 -0
  260. package/src/cli/simple-commands/sparc-modes/mcp.js +38 -0
  261. package/src/cli/simple-commands/sparc-modes/monitoring.js +38 -0
  262. package/src/cli/simple-commands/sparc-modes/optimization.js +38 -0
  263. package/src/cli/simple-commands/sparc-modes/security-review.js +130 -0
  264. package/src/cli/simple-commands/sparc-modes/sparc-orchestrator.js +167 -0
  265. package/src/cli/simple-commands/sparc-modes/spec-pseudocode.js +38 -0
  266. package/src/cli/simple-commands/sparc-modes/supabase-admin.js +149 -0
  267. package/src/cli/simple-commands/sparc-modes/swarm.js +436 -0
  268. package/src/cli/simple-commands/sparc-modes/tdd.js +112 -0
  269. package/src/cli/simple-commands/sparc-modes/tutorial.js +277 -0
  270. package/src/cli/simple-commands/sparc.js +530 -0
  271. package/src/cli/simple-commands/start-ui.js +147 -0
  272. package/src/cli/simple-commands/start-wrapper.js +285 -0
  273. package/src/cli/simple-commands/start.js +2 -0
  274. package/src/cli/simple-commands/status.js +303 -0
  275. package/src/cli/simple-commands/stream-chain-clean.js +221 -0
  276. package/src/cli/simple-commands/stream-chain-fixed.js +89 -0
  277. package/src/cli/simple-commands/stream-chain-real.js +408 -0
  278. package/src/cli/simple-commands/stream-chain-working.js +323 -0
  279. package/src/cli/simple-commands/stream-chain.js +491 -0
  280. package/src/cli/simple-commands/stream-processor.js +340 -0
  281. package/src/cli/simple-commands/swarm-executor.js +253 -0
  282. package/src/cli/simple-commands/swarm-metrics-integration.js +371 -0
  283. package/src/cli/simple-commands/swarm-ui.js +741 -0
  284. package/src/cli/simple-commands/swarm-webui-integration.js +311 -0
  285. package/src/cli/simple-commands/swarm.js +2277 -0
  286. package/src/cli/simple-commands/task.js +228 -0
  287. package/src/cli/simple-commands/templates/mle-star-workflow.json +294 -0
  288. package/src/cli/simple-commands/timestamp-fix.js +104 -0
  289. package/src/cli/simple-commands/token-tracker.js +372 -0
  290. package/src/cli/simple-commands/tool-execution-framework.js +555 -0
  291. package/src/cli/simple-commands/train-and-stream.js +354 -0
  292. package/src/cli/simple-commands/training-pipeline.js +874 -0
  293. package/src/cli/simple-commands/training.js +288 -0
  294. package/src/cli/simple-commands/verification-hooks.js +336 -0
  295. package/src/cli/simple-commands/verification-integration.js +464 -0
  296. package/src/cli/simple-commands/verification-training-integration.js +646 -0
  297. package/src/cli/simple-commands/verification.js +551 -0
  298. package/src/cli/simple-commands/web-server.js +929 -0
  299. package/src/cli/simple-commands/webui-validator.js +136 -0
  300. package/src/language/README.md +503 -0
  301. package/src/language/claude-md-generator.js +618 -0
  302. package/src/language/cli.js +422 -0
  303. package/src/language/example.js +347 -0
  304. package/src/language/integration-system.js +619 -0
  305. package/src/language/language-detector.js +581 -0
@@ -0,0 +1,372 @@
1
+ /**
2
+ * Real Token Usage Tracking for Claude API Calls
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
+
11
+ const __filename = fileURLToPath(import.meta.url);
12
+ const __dirname = dirname(__filename);
13
+
14
+ // Token tracking cache
15
+ let tokenCache = {
16
+ sessions: {},
17
+ totals: {
18
+ input: 0,
19
+ output: 0,
20
+ total: 0,
21
+ },
22
+ byAgent: {},
23
+ byCommand: {},
24
+ history: [],
25
+ };
26
+
27
+ // Get metrics directory
28
+ function getMetricsDir() {
29
+ return path.join(process.cwd(), '.claude-flow', 'metrics');
30
+ }
31
+
32
+ // Get token file path
33
+ function getTokenFilePath() {
34
+ return path.join(getMetricsDir(), 'token-usage.json');
35
+ }
36
+
37
+ // Load existing token data
38
+ 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
+ }
48
+ }
49
+
50
+ // Save token data to disk
51
+ 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
+ }
61
+ }
62
+
63
+ /**
64
+ * Track tokens from a Claude interaction
65
+ * @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,
103
+ };
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
+ }
134
+
135
+ /**
136
+ * Get real token usage data
137
+ * @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;
148
+ }
149
+ }
150
+
151
+ // Filter by agent if specified
152
+ if (agentFilter !== 'all' && tokenCache.byAgent[agentFilter]) {
153
+ const agentData = tokenCache.byAgent[agentFilter];
154
+ return {
155
+ total: agentData.total,
156
+ input: agentData.input,
157
+ output: agentData.output,
158
+ byAgent: { [agentFilter]: agentData.total },
159
+ };
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
+ }
177
+
178
+ /**
179
+ * 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
+ };
205
+ }
206
+ } catch (e) {
207
+ // Continue to next path
208
+ }
209
+ }
210
+ } catch (error) {
211
+ // 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
+ };
222
+ }
223
+
224
+ /**
225
+ * Calculate cost based on token usage
226
+ * 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
+ };
241
+ }
242
+
243
+ /**
244
+ * 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
+ }
275
+ }
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.');
285
+ }
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.'];
300
+ }
301
+
302
+ /**
303
+ * 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`;
320
+ });
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;
338
+ }
339
+
340
+ /**
341
+ * 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] || '๐Ÿค–';
354
+ }
355
+
356
+ /**
357
+ * 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();
372
+ }