claude-flow-novice 2.2.4 → 2.2.5

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 (288) hide show
  1. package/package.json +9 -8
  2. package/scripts/.claude-flow/metrics/agent-metrics.json +1 -0
  3. package/scripts/.claude-flow/metrics/performance.json +9 -0
  4. package/scripts/.claude-flow/metrics/task-metrics.json +10 -0
  5. package/scripts/CLEANUP_OPTIMIZATION_REPORT.json +312 -0
  6. package/scripts/CLEANUP_PERFORMANCE_OPTIMIZATION.md +387 -0
  7. package/scripts/CLEANUP_QUICK_START.md +268 -0
  8. package/scripts/CLEANUP_TEST_RESULTS.md +205 -0
  9. package/scripts/README.md +339 -0
  10. package/scripts/ace-query.sh +384 -0
  11. package/scripts/agent-token-analysis.js +430 -0
  12. package/scripts/auto-setup.js +332 -0
  13. package/scripts/build/README.md +167 -0
  14. package/scripts/build/build-config.js +27 -0
  15. package/scripts/build/build-prompt-copier.sh +30 -0
  16. package/scripts/build/performance-monitor.js +869 -0
  17. package/scripts/build/prepare-publish.js +150 -0
  18. package/scripts/build/typescript-fixer.js +621 -0
  19. package/scripts/build/unified-builder.sh +428 -0
  20. package/scripts/build/update-bin-version.js +32 -0
  21. package/scripts/build/validate-agents.js +238 -0
  22. package/scripts/build-index.js +43 -0
  23. package/scripts/build-orchestrator.js +320 -0
  24. package/scripts/check-routing-stats.cjs +122 -0
  25. package/scripts/ci-validation.js +375 -0
  26. package/scripts/cleanup-blocking-coordination.sh +420 -0
  27. package/scripts/cleanup-idle-sessions.sh +59 -0
  28. package/scripts/collect-build-metrics.js +65 -0
  29. package/scripts/demo/README.md +79 -0
  30. package/scripts/demo/autoscaling-demo-simplified.js +963 -0
  31. package/scripts/demo/comprehensive-dashboard-test.js +693 -0
  32. package/scripts/demo/confidence-log.js +87 -0
  33. package/scripts/demo/confidence-report.js +82 -0
  34. package/scripts/demo/demo-multi-swarm-coordination.js +325 -0
  35. package/scripts/demo/demo-production-deployment.js +399 -0
  36. package/scripts/demo/demo-visualization-system.js +149 -0
  37. package/scripts/demo/performance-analysis.cjs +71 -0
  38. package/scripts/demo/performance-analysis.js +71 -0
  39. package/scripts/demo/test-autoscaling-demo.js +314 -0
  40. package/scripts/dependency-optimizer.js +349 -0
  41. package/scripts/dependency-security-assessment.js +331 -0
  42. package/scripts/deploy-sdk.sh +176 -0
  43. package/scripts/deployment-readiness-report.json +179 -0
  44. package/scripts/dev/README.md +264 -0
  45. package/scripts/dev/claude-flow-wrapper.sh +35 -0
  46. package/scripts/dev/claude-monitor.py +419 -0
  47. package/scripts/dev/claude-sparc.sh +562 -0
  48. package/scripts/dev/claude-wrapper.sh +17 -0
  49. package/scripts/dev/demo-phase3-compliance.js +172 -0
  50. package/scripts/dev/demo-task-system.ts +224 -0
  51. package/scripts/dev/deployment-validator.js +315 -0
  52. package/scripts/dev/spawn-claude-terminal.sh +32 -0
  53. package/scripts/dev/start-portal.sh +506 -0
  54. package/scripts/dev/start-web-ui.js +15 -0
  55. package/scripts/dev/stop-portal.sh +311 -0
  56. package/scripts/dev/validate-examples.ts +288 -0
  57. package/scripts/dev/validate-phase2.cjs +451 -0
  58. package/scripts/dev/validate-phase2.js +785 -0
  59. package/scripts/dev/validate-phase3.cjs +208 -0
  60. package/scripts/dev/validate-security-remediation.js +1 -0
  61. package/scripts/ecosystem.config.cjs +90 -0
  62. package/scripts/fix-js-extensions.js +167 -0
  63. package/scripts/generate-basic-types.js +73 -0
  64. package/scripts/generate-changelog.js +318 -0
  65. package/scripts/git-hooks/pre-commit.sh +143 -0
  66. package/scripts/health-checks.js +634 -0
  67. package/scripts/hook-wrapper.sh +54 -0
  68. package/scripts/install/README.md +375 -0
  69. package/scripts/install/REDIS_SETUP_VALIDATION.json +245 -0
  70. package/scripts/install/check-prerequisites.js +303 -0
  71. package/scripts/install/config-wizard.js +606 -0
  72. package/scripts/install/dependency-checker.js +385 -0
  73. package/scripts/install/health-check.js +765 -0
  74. package/scripts/install/install.js +256 -0
  75. package/scripts/install/installation-benchmark.js +461 -0
  76. package/scripts/install/quick-install.js +720 -0
  77. package/scripts/install/quick-start-wizard.js +295 -0
  78. package/scripts/install/redis-cli.js +289 -0
  79. package/scripts/install/redis-install-guides.md +407 -0
  80. package/scripts/install/redis-setup.js +559 -0
  81. package/scripts/install/redis-test.js +278 -0
  82. package/scripts/install/service-manager.js +672 -0
  83. package/scripts/install/setup.js +832 -0
  84. package/scripts/install/uninstall.js +526 -0
  85. package/scripts/install/update.js +461 -0
  86. package/scripts/install-pre-commit-hook.sh +127 -0
  87. package/scripts/legacy/README.md +272 -0
  88. package/scripts/legacy/batch-fix-ts.sh +54 -0
  89. package/scripts/legacy/build-migration.sh +105 -0
  90. package/scripts/legacy/build-monitor.js +209 -0
  91. package/scripts/legacy/build-with-filter.sh +84 -0
  92. package/scripts/legacy/build-workaround.sh +71 -0
  93. package/scripts/legacy/fix-ts-advanced.js +358 -0
  94. package/scripts/legacy/fix-ts-final.sh +50 -0
  95. package/scripts/legacy/fix-ts-targeted.sh +49 -0
  96. package/scripts/legacy/fix-typescript-errors.js +305 -0
  97. package/scripts/legacy/force-build.sh +63 -0
  98. package/scripts/legacy/optimize-performance.js +400 -0
  99. package/scripts/legacy/performance-monitor.js +263 -0
  100. package/scripts/legacy/performance-monitoring.js +532 -0
  101. package/scripts/legacy/performance-test-runner.js +645 -0
  102. package/scripts/legacy/quick-fix-ts.js +281 -0
  103. package/scripts/legacy/safe-build.sh +63 -0
  104. package/scripts/memory-monitor-coordinator.js +322 -0
  105. package/scripts/migrate-to-sdk.sh +520 -0
  106. package/scripts/migration/QUICK-START.md +189 -0
  107. package/scripts/migration/QUICK-START.md.backup-1760135091363 +189 -0
  108. package/scripts/migration/README.md +464 -0
  109. package/scripts/migration/TASK-1.3.2-COMPLETION-REPORT.md +500 -0
  110. package/scripts/migration/TASK-1.3.2-COMPLETION-REPORT.md.backup-1760135091348 +500 -0
  111. package/scripts/migration/UPDATE-PATHS-README.md +464 -0
  112. package/scripts/migration/UPDATE-PATHS-README.md.backup-1760135091337 +464 -0
  113. package/scripts/migration/example-patterns.json +19 -0
  114. package/scripts/migration/install-arm64.js +78 -0
  115. package/scripts/migration/install.js +83 -0
  116. package/scripts/migration/migrate-hooks.js +173 -0
  117. package/scripts/migration/migration-examples.ts +318 -0
  118. package/scripts/migration/reorganize-workspace.js +504 -0
  119. package/scripts/migration/test-update-paths.js +359 -0
  120. package/scripts/migration/update-paths.js +664 -0
  121. package/scripts/migration/validate-migration.js +647 -0
  122. package/scripts/monitor-loop.sh +65 -0
  123. package/scripts/monitor-memory.sh +47 -0
  124. package/scripts/monitor-migration.js +339 -0
  125. package/scripts/monitor.py +43 -0
  126. package/scripts/monitoring/README.md +178 -0
  127. package/scripts/monitoring/alert-monitor.sh +220 -0
  128. package/scripts/monitoring/analyze-resources.sh +199 -0
  129. package/scripts/monitoring/dashboards/rate-limiting-dashboard.json +211 -0
  130. package/scripts/monitoring/dynamic-monitor.sh +85 -0
  131. package/scripts/monitoring/launch-stability-test.sh +184 -0
  132. package/scripts/monitoring/monitor-test.sh +93 -0
  133. package/scripts/monitoring/pre-test-validation.sh +208 -0
  134. package/scripts/monitoring/quick-test-alerting.sh +118 -0
  135. package/scripts/monitoring/quick-test-rate-limiting.sh +206 -0
  136. package/scripts/monitoring/rate-limiting-monitor.sh +380 -0
  137. package/scripts/monitoring/resource-monitor.sh +126 -0
  138. package/scripts/monitoring/stability-monitor.js +429 -0
  139. package/scripts/monitoring/test-monitor-quick.sh +54 -0
  140. package/scripts/monitoring/view-alerts.sh +307 -0
  141. package/scripts/npm-metrics-collector.js +482 -0
  142. package/scripts/npm-package-validation.cjs +299 -0
  143. package/scripts/optimization/build-optimizer.js +438 -0
  144. package/scripts/optimization/config-validator.js +761 -0
  145. package/scripts/optimization/test-optimization.js +432 -0
  146. package/scripts/optimization/unified-activation.js +839 -0
  147. package/scripts/optimize-package-swarm.js +54 -0
  148. package/scripts/performance/ACTIVATION_COMMANDS.md +292 -0
  149. package/scripts/performance/sqlite-enhanced-activation.sh +583 -0
  150. package/scripts/performance/test-enhanced-backend.sh +504 -0
  151. package/scripts/performance-monitor.js +644 -0
  152. package/scripts/performance-test-runner.js +698 -0
  153. package/scripts/post-deployment-monitoring.js +350 -0
  154. package/scripts/post-edit-pipeline.js +2091 -0
  155. package/scripts/post-install-claude-md.js +78 -0
  156. package/scripts/postinstall.js +79 -0
  157. package/scripts/pre-publish-validation.cjs +212 -0
  158. package/scripts/pre-publish-validation.js +429 -0
  159. package/scripts/redis-lua/cleanup-blocking-coordination.lua +198 -0
  160. package/scripts/release-announcement.js +425 -0
  161. package/scripts/release-notification.js +248 -0
  162. package/scripts/release-rollback.js +376 -0
  163. package/scripts/release-validation.js +460 -0
  164. package/scripts/rollback-sdk.sh +66 -0
  165. package/scripts/run-production-validation.ts +590 -0
  166. package/scripts/run-stability-validation.sh +687 -0
  167. package/scripts/security/README.md +339 -0
  168. package/scripts/security/deployment-validation.cjs +279 -0
  169. package/scripts/security/envelope-encryption-confidence-report.cjs +422 -0
  170. package/scripts/security/install-git-hooks.sh +132 -0
  171. package/scripts/security/install-git-secrets.sh +295 -0
  172. package/scripts/security/rotate-api-keys.js +469 -0
  173. package/scripts/security/ruv-swarm-safe.js +74 -0
  174. package/scripts/security/security-audit.cjs +538 -0
  175. package/scripts/security/setup-redis-auth.sh +397 -0
  176. package/scripts/security/validate-envelope-encryption.cjs +340 -0
  177. package/scripts/security-scan.js +492 -0
  178. package/scripts/src/web/frontend/.claude-flow/metrics/agent-metrics.json +1 -0
  179. package/scripts/src/web/frontend/.claude-flow/metrics/performance.json +9 -0
  180. package/scripts/src/web/frontend/.claude-flow/metrics/task-metrics.json +10 -0
  181. package/scripts/switch-api.sh +158 -0
  182. package/scripts/sync-agents.js +290 -0
  183. package/scripts/test/50-agent-test.js +625 -0
  184. package/scripts/test/NEW_STABILITY_TEST_GUIDE.md +407 -0
  185. package/scripts/test/README.md +236 -0
  186. package/scripts/test/STABILITY_TEST_EXAMPLE.md +347 -0
  187. package/scripts/test/STABILITY_TEST_README.md +480 -0
  188. package/scripts/test/agent-worker.js +309 -0
  189. package/scripts/test/ai-coordination-test.js +650 -0
  190. package/scripts/test/ai-mesh-coordination-test.js +416 -0
  191. package/scripts/test/check-links.ts +274 -0
  192. package/scripts/test/check-performance-regression.ts +168 -0
  193. package/scripts/test/cli-agent-coordination-test.js +313 -0
  194. package/scripts/test/coordinator-multilingual-test.js +396 -0
  195. package/scripts/test/coordinator-transparency-demo.js +585 -0
  196. package/scripts/test/coverage-report.ts +692 -0
  197. package/scripts/test/generate-swarm-tests.js +633 -0
  198. package/scripts/test/integration-test-validation.cjs +253 -0
  199. package/scripts/test/load-test-swarm.js +576 -0
  200. package/scripts/test/mesh-coordination-zero-overlap-test.js +740 -0
  201. package/scripts/test/multilingual-hello-world-test.js +390 -0
  202. package/scripts/test/quick-multilingual-demo.js +464 -0
  203. package/scripts/test/real-agent-test.js +312 -0
  204. package/scripts/test/run-phase3-compliance-tests.js +427 -0
  205. package/scripts/test/run-stability-test-examples.sh +292 -0
  206. package/scripts/test/stability-results/stability-metrics.jsonl +83 -0
  207. package/scripts/test/stability-results/stability-test-report.json +128 -0
  208. package/scripts/test/stability-results/stability-test.log +1827 -0
  209. package/scripts/test/stability-test-50-agents.js +734 -0
  210. package/scripts/test/test-batch-tasks.ts +29 -0
  211. package/scripts/test/test-byzantine-resolution.js +246 -0
  212. package/scripts/test/test-claude-spawn-options.sh +63 -0
  213. package/scripts/test/test-cli-wizard.js +331 -0
  214. package/scripts/test/test-comprehensive.js +401 -0
  215. package/scripts/test/test-coordination-features.ts +238 -0
  216. package/scripts/test/test-fallback-systems.js +276 -0
  217. package/scripts/test/test-init-command.ts +302 -0
  218. package/scripts/test/test-mcp.ts +251 -0
  219. package/scripts/test/test-runner.ts +568 -0
  220. package/scripts/test/test-swarm-integration.sh +92 -0
  221. package/scripts/test/test-swarm.ts +142 -0
  222. package/scripts/test/validation-summary.ts +408 -0
  223. package/scripts/test-cleanup-performance.sh +416 -0
  224. package/scripts/test-dashboard-auth.cjs +203 -0
  225. package/scripts/test-docker-deployment.sh +207 -0
  226. package/scripts/test-npm-package.cjs +167 -0
  227. package/scripts/test-provider-routing.cjs +226 -0
  228. package/scripts/test-routing-telemetry.cjs +147 -0
  229. package/scripts/test-runner.cjs +154 -0
  230. package/scripts/test-zai-10k.cjs +81 -0
  231. package/scripts/test-zai-api.cjs +191 -0
  232. package/scripts/test-zai-diagnostic.cjs +151 -0
  233. package/scripts/test-zai-final.cjs +128 -0
  234. package/scripts/test-zai-with-env.cjs +85 -0
  235. package/scripts/utils/README.md +261 -0
  236. package/scripts/utils/clean-build-artifacts.sh +94 -0
  237. package/scripts/utils/cleanup-root.sh +69 -0
  238. package/scripts/utils/fix-cliffy-imports.js +307 -0
  239. package/scripts/utils/fix-duplicate-imports.js +114 -0
  240. package/scripts/utils/fix-error-handling.cjs +70 -0
  241. package/scripts/utils/fix-import-paths.js +104 -0
  242. package/scripts/utils/fix-imports.js +116 -0
  243. package/scripts/utils/fix-shebang.js +78 -0
  244. package/scripts/utils/fix-test-modules.js +27 -0
  245. package/scripts/utils/fix-timezone-issue-246.js +200 -0
  246. package/scripts/utils/fix-ts-comprehensive.py +182 -0
  247. package/scripts/utils/fix-ts-targeted-batch.js +250 -0
  248. package/scripts/utils/remove-benchmark-conflicts.sh +140 -0
  249. package/scripts/utils/simple-test-fixer.js +190 -0
  250. package/scripts/utils/validate-metrics-structure.cjs +144 -0
  251. package/scripts/validate-agent-hooks.js +506 -0
  252. package/scripts/validate-changelog.js +241 -0
  253. package/scripts/validate-coordination-cli.js +69 -0
  254. package/scripts/validate-coordination-toggle-integration.cjs +501 -0
  255. package/scripts/validate-docker-infrastructure.sh +502 -0
  256. package/scripts/validate-entry-points.js +300 -0
  257. package/scripts/validate-stage3-performance.ts +377 -0
  258. package/scripts/validate-template-bundling.js +180 -0
  259. package/scripts/validation/README.md +33 -0
  260. package/scripts/validation/acl-security-validation.cjs +214 -0
  261. package/scripts/validation/acl-security-validation.js +402 -0
  262. package/scripts/validation/byzantine-verification.js +407 -0
  263. package/scripts/validation/final-phase-2-consensus.cjs +219 -0
  264. package/scripts/validation/final-security-validation.js +791 -0
  265. package/scripts/validation/final-wasm-validation.cjs +840 -0
  266. package/scripts/validation/integration-test-analysis.js +105 -0
  267. package/scripts/validation/phase-0-comprehensive-validation.js +474 -0
  268. package/scripts/validation/phase-0-consensus-report.js +139 -0
  269. package/scripts/validation/phase-0-final-report.js +112 -0
  270. package/scripts/validation/phase-0-redis-consensus-report.js +129 -0
  271. package/scripts/validation/phase-0-validation-improved.js +490 -0
  272. package/scripts/validation/phase-0-validation-test.js +65 -0
  273. package/scripts/validation/phase-1-consensus-report.cjs +342 -0
  274. package/scripts/validation/phase-1-consensus-validation.cjs +551 -0
  275. package/scripts/validation/phase-1-consensus-validation.js +551 -0
  276. package/scripts/validation/phase-2-consensus-report.cjs +186 -0
  277. package/scripts/validation/phase-2-validation.cjs +171 -0
  278. package/scripts/validation/phase-2-validation.js +171 -0
  279. package/scripts/validation/phase-4-consensus-report.js +181 -0
  280. package/scripts/validation/phase-4-final-validation.js +351 -0
  281. package/scripts/validation/phase-5-consensus-report.cjs +113 -0
  282. package/scripts/validation/phase-5-consensus-report.js +113 -0
  283. package/scripts/validation/security-analysis.js +49 -0
  284. package/scripts/validation/security-validation.js +492 -0
  285. package/scripts/validation/simple-security-validation.js +464 -0
  286. package/scripts/verify-installation.js +112 -0
  287. package/scripts/verify-mcp-server.js +86 -0
  288. package/scripts/verify-sdk-phase1.cjs +293 -0
@@ -0,0 +1,430 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * Agent Token Analysis Script
5
+ * Analyzes token usage across all agent description fields in .claude/agents directory
6
+ */
7
+
8
+ import fs from 'fs';
9
+ import path from 'path';
10
+ import { fileURLToPath } from 'url';
11
+
12
+ const __filename = fileURLToPath(import.meta.url);
13
+ const __dirname = path.dirname(__filename);
14
+
15
+ class AgentTokenAnalyzer {
16
+ constructor() {
17
+ this.agentData = [];
18
+ this.tokenStats = {
19
+ totalTokens: 0,
20
+ avgTokens: 0,
21
+ minTokens: Infinity,
22
+ maxTokens: 0,
23
+ minDescription: '',
24
+ maxDescription: '',
25
+ tokenDistribution: {},
26
+ componentAnalysis: {}
27
+ };
28
+ }
29
+
30
+ // Extract description from agent file content
31
+ extractDescription(fileContent, filePath) {
32
+ try {
33
+ // Look for YAML frontmatter description
34
+ const yamlMatch = fileContent.match(/^---\s*\n([\s\S]*?)\n---/);
35
+ if (yamlMatch) {
36
+ const yamlContent = yamlMatch[1];
37
+
38
+ // Try to extract description from YAML
39
+ const descMatch = yamlContent.match(/description:\s*["']?(.*?)["']?\s*$/m);
40
+ if (descMatch) {
41
+ return descMatch[1].trim();
42
+ }
43
+
44
+ // Try to extract from metadata section
45
+ const metadataMatch = yamlContent.match(/metadata:\s*\n([\s\S]*?)(?=\n\w|$)/);
46
+ if (metadataMatch) {
47
+ const metadataContent = metadataMatch[1];
48
+ const metaDescMatch = metadataContent.match(/description:\s*["']?(.*?)["']?\s*$/m);
49
+ if (metaDescMatch) {
50
+ return metaDescMatch[1].trim();
51
+ }
52
+ }
53
+ }
54
+
55
+ // Fallback: look for description anywhere in the file
56
+ const generalDescMatch = fileContent.match(/description:\s*["']?(.*?)["']?\s*$/m);
57
+ if (generalDescMatch) {
58
+ return generalDescMatch[1].trim();
59
+ }
60
+
61
+ return null;
62
+ } catch (error) {
63
+ console.error(`Error extracting description from ${filePath}:`, error);
64
+ return null;
65
+ }
66
+ }
67
+
68
+ // Calculate approximate token count (4 chars per token rule)
69
+ calculateTokens(text) {
70
+ if (!text) return 0;
71
+ return Math.ceil(text.length / 4);
72
+ }
73
+
74
+ // Analyze what makes descriptions context-heavy
75
+ analyzeContextHeaviness(description) {
76
+ if (!description) return {};
77
+
78
+ const components = {
79
+ technicalTerms: this.countTechnicalTerms(description),
80
+ sentenceComplexity: this.analyzeSentenceComplexity(description),
81
+ domainSpecificWords: this.countDomainWords(description),
82
+ exampleCode: this.hasCodeExamples(description),
83
+ listItems: this.countListItems(description)
84
+ };
85
+
86
+ return components;
87
+ }
88
+
89
+ countTechnicalTerms(text) {
90
+ const technicalTerms = [
91
+ 'consensus', 'byzantine', 'raft', 'pbft', 'crdt', 'gossip', 'quorum',
92
+ 'distributed', 'protocol', 'algorithm', 'cryptographic', 'threshold',
93
+ 'synchronization', 'replication', 'coordination', 'orchestration',
94
+ 'neural', 'performance', 'security', 'api', 'microservices',
95
+ 'authentication', 'optimization', 'refactoring', 'architecture'
96
+ ];
97
+
98
+ let count = 0;
99
+ technicalTerms.forEach(term => {
100
+ const regex = new RegExp(`\\b${term}\\b`, 'gi');
101
+ const matches = text.match(regex);
102
+ if (matches) count += matches.length;
103
+ });
104
+
105
+ return count;
106
+ }
107
+
108
+ analyzeSentenceComplexity(text) {
109
+ const sentences = text.split(/[.!?]+/).filter(s => s.trim().length > 0);
110
+ const avgWordsPerSentence = sentences.reduce((sum, sentence) => {
111
+ return sum + sentence.trim().split(/\s+/).length;
112
+ }, 0) / sentences.length;
113
+
114
+ return {
115
+ sentenceCount: sentences.length,
116
+ avgWordsPerSentence: Math.round(avgWordsPerSentence * 100) / 100
117
+ };
118
+ }
119
+
120
+ countDomainWords(text) {
121
+ const domainWords = [
122
+ 'agent', 'swarm', 'coordination', 'orchestration', 'management',
123
+ 'analysis', 'monitoring', 'optimization', 'implementation',
124
+ 'validation', 'verification', 'processing', 'execution'
125
+ ];
126
+
127
+ let count = 0;
128
+ domainWords.forEach(word => {
129
+ const regex = new RegExp(`\\b${word}\\b`, 'gi');
130
+ const matches = text.match(regex);
131
+ if (matches) count += matches.length;
132
+ });
133
+
134
+ return count;
135
+ }
136
+
137
+ hasCodeExamples(text) {
138
+ return /```|`[^`]+`/.test(text);
139
+ }
140
+
141
+ countListItems(text) {
142
+ const listMatches = text.match(/^\s*[-*+]\s/gm);
143
+ return listMatches ? listMatches.length : 0;
144
+ }
145
+
146
+ // Process a single agent file
147
+ processAgentFile(filePath) {
148
+ try {
149
+ const content = fs.readFileSync(filePath, 'utf8');
150
+ const description = this.extractDescription(content, filePath);
151
+
152
+ if (!description) {
153
+ console.warn(`No description found in ${filePath}`);
154
+ return null;
155
+ }
156
+
157
+ const tokens = this.calculateTokens(description);
158
+ const contextAnalysis = this.analyzeContextHeaviness(description);
159
+
160
+ const agentInfo = {
161
+ filePath: filePath,
162
+ fileName: path.basename(filePath, '.md'),
163
+ description: description,
164
+ tokenCount: tokens,
165
+ characterCount: description.length,
166
+ contextAnalysis: contextAnalysis
167
+ };
168
+
169
+ // Update global statistics
170
+ this.tokenStats.totalTokens += tokens;
171
+
172
+ if (tokens < this.tokenStats.minTokens) {
173
+ this.tokenStats.minTokens = tokens;
174
+ this.tokenStats.minDescription = description;
175
+ this.tokenStats.minAgent = agentInfo.fileName;
176
+ }
177
+
178
+ if (tokens > this.tokenStats.maxTokens) {
179
+ this.tokenStats.maxTokens = tokens;
180
+ this.tokenStats.maxDescription = description;
181
+ this.tokenStats.maxAgent = agentInfo.fileName;
182
+ }
183
+
184
+ return agentInfo;
185
+ } catch (error) {
186
+ console.error(`Error processing ${filePath}:`, error);
187
+ return null;
188
+ }
189
+ }
190
+
191
+ // Find all agent files recursively
192
+ findAgentFiles(dir) {
193
+ const agentFiles = [];
194
+
195
+ function walkDir(currentDir) {
196
+ const items = fs.readdirSync(currentDir);
197
+
198
+ for (const item of items) {
199
+ const fullPath = path.join(currentDir, item);
200
+ const stat = fs.statSync(fullPath);
201
+
202
+ if (stat.isDirectory()) {
203
+ walkDir(fullPath);
204
+ } else if (item.endsWith('.md') && item !== 'README.md' && item !== 'MIGRATION_SUMMARY.md') {
205
+ agentFiles.push(fullPath);
206
+ }
207
+ }
208
+ }
209
+
210
+ walkDir(dir);
211
+ return agentFiles;
212
+ }
213
+
214
+ // Analyze all agent files
215
+ analyzeAllAgents(agentsDir) {
216
+ console.log(`Starting analysis of agents in ${agentsDir}...`);
217
+
218
+ const agentFiles = this.findAgentFiles(agentsDir);
219
+ console.log(`Found ${agentFiles.length} agent files`);
220
+
221
+ let successCount = 0;
222
+ let failCount = 0;
223
+
224
+ for (const filePath of agentFiles) {
225
+ const result = this.processAgentFile(filePath);
226
+ if (result) {
227
+ this.agentData.push(result);
228
+ successCount++;
229
+ } else {
230
+ failCount++;
231
+ }
232
+ }
233
+
234
+ console.log(`Processed ${successCount} agents successfully, ${failCount} failed`);
235
+
236
+ // Calculate final statistics
237
+ this.calculateFinalStatistics();
238
+
239
+ return this.agentData;
240
+ }
241
+
242
+ calculateFinalStatistics() {
243
+ if (this.agentData.length === 0) {
244
+ console.warn('No agent data to analyze');
245
+ return;
246
+ }
247
+
248
+ // Average tokens
249
+ this.tokenStats.avgTokens = Math.round(this.tokenStats.totalTokens / this.agentData.length * 100) / 100;
250
+
251
+ // Token distribution (group by token ranges)
252
+ const tokenRanges = {
253
+ '0-10': 0,
254
+ '11-20': 0,
255
+ '21-30': 0,
256
+ '31-50': 0,
257
+ '51-100': 0,
258
+ '100+': 0
259
+ };
260
+
261
+ this.agentData.forEach(agent => {
262
+ const tokens = agent.tokenCount;
263
+ if (tokens <= 10) tokenRanges['0-10']++;
264
+ else if (tokens <= 20) tokenRanges['11-20']++;
265
+ else if (tokens <= 30) tokenRanges['21-30']++;
266
+ else if (tokens <= 50) tokenRanges['31-50']++;
267
+ else if (tokens <= 100) tokenRanges['51-100']++;
268
+ else tokenRanges['100+']++;
269
+ });
270
+
271
+ this.tokenStats.tokenDistribution = tokenRanges;
272
+
273
+ // Component analysis aggregation
274
+ const componentTotals = {
275
+ technicalTerms: 0,
276
+ sentenceCount: 0,
277
+ avgWordsPerSentence: 0,
278
+ domainSpecificWords: 0,
279
+ hasCodeExamples: 0,
280
+ listItems: 0
281
+ };
282
+
283
+ this.agentData.forEach(agent => {
284
+ const analysis = agent.contextAnalysis;
285
+ componentTotals.technicalTerms += analysis.technicalTerms || 0;
286
+ componentTotals.sentenceCount += analysis.sentenceComplexity?.sentenceCount || 0;
287
+ componentTotals.avgWordsPerSentence += analysis.sentenceComplexity?.avgWordsPerSentence || 0;
288
+ componentTotals.domainSpecificWords += analysis.domainSpecificWords || 0;
289
+ componentTotals.hasCodeExamples += analysis.exampleCode ? 1 : 0;
290
+ componentTotals.listItems += analysis.listItems || 0;
291
+ });
292
+
293
+ this.tokenStats.componentAnalysis = {
294
+ avgTechnicalTerms: Math.round(componentTotals.technicalTerms / this.agentData.length * 100) / 100,
295
+ avgSentenceCount: Math.round(componentTotals.sentenceCount / this.agentData.length * 100) / 100,
296
+ avgWordsPerSentence: Math.round(componentTotals.avgWordsPerSentence / this.agentData.length * 100) / 100,
297
+ avgDomainWords: Math.round(componentTotals.domainSpecificWords / this.agentData.length * 100) / 100,
298
+ percentWithCodeExamples: Math.round(componentTotals.hasCodeExamples / this.agentData.length * 100),
299
+ avgListItems: Math.round(componentTotals.listItems / this.agentData.length * 100) / 100
300
+ };
301
+ }
302
+
303
+ // Generate comprehensive report
304
+ generateReport() {
305
+ const report = {
306
+ summary: {
307
+ totalAgents: this.agentData.length,
308
+ totalTokens: this.tokenStats.totalTokens,
309
+ averageTokensPerAgent: this.tokenStats.avgTokens,
310
+ contextOverheadEstimate: Math.round(this.tokenStats.totalTokens * 1.2) // 20% overhead for selection logic
311
+ },
312
+ extremes: {
313
+ shortest: {
314
+ agent: this.tokenStats.minAgent,
315
+ tokens: this.tokenStats.minTokens,
316
+ description: this.tokenStats.minDescription
317
+ },
318
+ longest: {
319
+ agent: this.tokenStats.maxAgent,
320
+ tokens: this.tokenStats.maxTokens,
321
+ description: this.tokenStats.maxDescription.substring(0, 200) + '...'
322
+ }
323
+ },
324
+ distribution: this.tokenStats.tokenDistribution,
325
+ contextComponents: this.tokenStats.componentAnalysis,
326
+ topHeavyAgents: this.agentData
327
+ .sort((a, b) => b.tokenCount - a.tokenCount)
328
+ .slice(0, 10)
329
+ .map(agent => ({
330
+ name: agent.fileName,
331
+ tokens: agent.tokenCount,
332
+ description: agent.description.substring(0, 100) + '...'
333
+ }))
334
+ };
335
+
336
+ return report;
337
+ }
338
+
339
+ // Save detailed results to JSON
340
+ saveResults(outputPath) {
341
+ const results = {
342
+ metadata: {
343
+ analysisDate: new Date().toISOString(),
344
+ totalAgentsAnalyzed: this.agentData.length,
345
+ analyzer: 'AgentTokenAnalyzer v1.0'
346
+ },
347
+ summary: this.generateReport(),
348
+ detailedData: this.agentData.map(agent => ({
349
+ fileName: agent.fileName,
350
+ tokenCount: agent.tokenCount,
351
+ characterCount: agent.characterCount,
352
+ description: agent.description,
353
+ contextAnalysis: agent.contextAnalysis
354
+ }))
355
+ };
356
+
357
+ fs.writeFileSync(outputPath, JSON.stringify(results, null, 2));
358
+ console.log(`Results saved to ${outputPath}`);
359
+ }
360
+ }
361
+
362
+ // Main execution
363
+ function main() {
364
+ const analyzer = new AgentTokenAnalyzer();
365
+ const agentsDir = path.join(__dirname, '../.claude/agents');
366
+ const outputPath = path.join(__dirname, 'agent-token-analysis-results.json');
367
+
368
+ console.log('='.repeat(60));
369
+ console.log('AGENT TOKEN USAGE ANALYSIS');
370
+ console.log('='.repeat(60));
371
+
372
+ // Analyze all agents
373
+ analyzer.analyzeAllAgents(agentsDir);
374
+
375
+ // Generate and display report
376
+ const report = analyzer.generateReport();
377
+
378
+ console.log('\nšŸ“Š ANALYSIS RESULTS:');
379
+ console.log('='.repeat(40));
380
+ console.log(`Total Agents Analyzed: ${report.summary.totalAgents}`);
381
+ console.log(`Total Tokens Across All Descriptions: ${report.summary.totalTokens}`);
382
+ console.log(`Average Tokens Per Description: ${report.summary.averageTokensPerAgent}`);
383
+ console.log(`Estimated Context Overhead: ${report.summary.contextOverheadEstimate} tokens`);
384
+
385
+ console.log('\nšŸ” DESCRIPTION LENGTH EXTREMES:');
386
+ console.log('='.repeat(40));
387
+ console.log(`Shortest: ${report.extremes.shortest.agent} (${report.extremes.shortest.tokens} tokens)`);
388
+ console.log(` "${report.extremes.shortest.description}"`);
389
+ console.log(`\nLongest: ${report.extremes.longest.agent} (${report.extremes.longest.tokens} tokens)`);
390
+ console.log(` "${report.extremes.longest.description}"`);
391
+
392
+ console.log('\nšŸ“ˆ TOKEN DISTRIBUTION:');
393
+ console.log('='.repeat(40));
394
+ Object.entries(report.distribution).forEach(([range, count]) => {
395
+ const percentage = Math.round(count / report.summary.totalAgents * 100);
396
+ console.log(`${range.padEnd(8)}: ${count.toString().padStart(3)} agents (${percentage}%)`);
397
+ });
398
+
399
+ console.log('\n🧠 CONTEXT COMPLEXITY ANALYSIS:');
400
+ console.log('='.repeat(40));
401
+ console.log(`Average Technical Terms: ${report.contextComponents.avgTechnicalTerms}`);
402
+ console.log(`Average Sentences: ${report.contextComponents.avgSentenceCount}`);
403
+ console.log(`Average Words Per Sentence: ${report.contextComponents.avgWordsPerSentence}`);
404
+ console.log(`Average Domain-Specific Words: ${report.contextComponents.avgDomainWords}`);
405
+ console.log(`Descriptions with Code Examples: ${report.contextComponents.percentWithCodeExamples}%`);
406
+ console.log(`Average List Items: ${report.contextComponents.avgListItems}`);
407
+
408
+ console.log('\nšŸ† TOP 10 MOST TOKEN-HEAVY AGENTS:');
409
+ console.log('='.repeat(40));
410
+ report.topHeavyAgents.forEach((agent, index) => {
411
+ console.log(`${(index + 1).toString().padStart(2)}. ${agent.name.padEnd(25)} - ${agent.tokens} tokens`);
412
+ console.log(` "${agent.description}"`);
413
+ });
414
+
415
+ console.log('\nšŸ’” CLAUDE CODE CONTEXT IMPACT:');
416
+ console.log('='.repeat(40));
417
+ console.log(`If Claude Code loads all agent descriptions for selection:`);
418
+ console.log(`- Base description tokens: ${report.summary.totalTokens}`);
419
+ console.log(`- With selection logic overhead: ~${report.summary.contextOverheadEstimate} tokens`);
420
+ console.log(`- Percentage of typical context window (8K): ${Math.round(report.summary.contextOverheadEstimate / 8000 * 100)}%`);
421
+ console.log(`- Percentage of large context window (32K): ${Math.round(report.summary.contextOverheadEstimate / 32000 * 100)}%`);
422
+
423
+ // Save detailed results
424
+ analyzer.saveResults(outputPath);
425
+
426
+ console.log('\nāœ… Analysis complete!');
427
+ console.log(`Detailed results saved to: ${outputPath}`);
428
+ }
429
+
430
+ main();