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,363 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * Fix hook variable interpolation in Claude Code settings.json files
5
+ * Addresses issue #249 - ${file} and ${command} variables not working
6
+ */
7
+
8
+ import fs from 'fs/promises';
9
+ import path from 'path';
10
+ import { existsSync } from 'fs';
11
+ import chalk from 'chalk';
12
+ import { printSuccess, printError, printWarning } from '../utils.js';
13
+
14
+ // Known working variable syntaxes based on Claude Code version
15
+ const VARIABLE_SYNTAXES = {
16
+ legacy: {
17
+ pattern: /\$\{(\w+)\}/g,
18
+ example: '${file}',
19
+ description: 'Legacy syntax (not working in 1.0.51+)',
20
+ },
21
+ environment: {
22
+ pattern: /\$(\w+)/g,
23
+ example: '$CLAUDE_FILE',
24
+ description: 'Environment variable syntax (unverified)',
25
+ },
26
+ jq: {
27
+ pattern: null,
28
+ example: 'jq parsing of JSON input',
29
+ description: 'Official Claude Code approach using jq',
30
+ },
31
+ wrapper: {
32
+ pattern: null,
33
+ example: 'Use wrapper script',
34
+ description: 'Wrapper script approach',
35
+ },
36
+ };
37
+
38
+ // Mapping of our variables to Claude Code environment variables
39
+ const VARIABLE_MAPPINGS = {
40
+ file: ['CLAUDE_EDITED_FILE', 'CLAUDE_FILE', 'EDITED_FILE'],
41
+ command: ['CLAUDE_COMMAND', 'COMMAND', 'CMD'],
42
+ tool: ['CLAUDE_TOOL', 'TOOL_NAME', 'TOOL'],
43
+ };
44
+
45
+ /**
46
+ * Detect which variable syntax works with current Claude Code version
47
+ */
48
+ async function detectWorkingSyntax() {
49
+ // Based on official Claude Code documentation and testing,
50
+ // JQ parsing is the recommended approach for Claude Code 1.0.51+
51
+ return 'jq';
52
+ }
53
+
54
+ /**
55
+ * Transform hook command to use working variable syntax
56
+ */
57
+ function transformHookCommand(command, fromSyntax, toSyntax) {
58
+ if (fromSyntax === 'legacy' && toSyntax === 'environment') {
59
+ // Replace ${file} with $CLAUDE_EDITED_FILE
60
+ return command.replace(/\$\{(\w+)\}/g, (match, varName) => {
61
+ const mappings = VARIABLE_MAPPINGS[varName];
62
+ if (mappings && mappings[0]) {
63
+ return `$${mappings[0]}`;
64
+ }
65
+ return match; // Keep unchanged if no mapping
66
+ });
67
+ }
68
+
69
+ if (fromSyntax === 'legacy' && toSyntax === 'jq') {
70
+ // Transform to use jq parsing of JSON input
71
+ // Extract the actual command and wrap it with jq parsing
72
+ const fileVarMatch = command.match(/\$\{file\}/);
73
+ const commandVarMatch = command.match(/\$\{command\}/);
74
+
75
+ if (fileVarMatch) {
76
+ // Replace ${file} with jq extraction
77
+ const baseCommand = command.replace(/\$\{file\}/g, '{}');
78
+ return `cat | jq -r '.tool_input.file_path // .tool_input.path // ""' | xargs -I {} ${baseCommand}`;
79
+ } else if (commandVarMatch) {
80
+ // Replace ${command} with jq extraction
81
+ const baseCommand = command.replace(/\$\{command\}/g, '{}');
82
+ return `cat | jq -r '.tool_input.command // ""' | xargs -I {} ${baseCommand}`;
83
+ }
84
+
85
+ // Fallback for other variables
86
+ return `cat | jq -r '.' | xargs -I {} ${command.replace(/\$\{(\w+)\}/g, '{}')}`;
87
+ }
88
+
89
+ if (toSyntax === 'wrapper') {
90
+ // Generate wrapper script path
91
+ const scriptName = command.includes('post-edit')
92
+ ? 'post-edit-hook.sh'
93
+ : command.includes('pre-edit')
94
+ ? 'pre-edit-hook.sh'
95
+ : 'generic-hook.sh';
96
+ return `.claude/hooks/${scriptName}`;
97
+ }
98
+
99
+ return command;
100
+ }
101
+
102
+ /**
103
+ * Create wrapper scripts for hooks
104
+ */
105
+ async function createWrapperScripts(commands) {
106
+ const hooksDir = '.claude/hooks';
107
+ await fs.mkdir(hooksDir, { recursive: true });
108
+
109
+ const wrapperScripts = new Map();
110
+
111
+ for (const command of commands) {
112
+ if (command.includes('post-edit')) {
113
+ const script = `#!/bin/bash
114
+ # Post-edit hook wrapper
115
+ # Handles variable interpolation for Claude Code hooks
116
+
117
+ # Try to get file from various sources
118
+ FILE="$CLAUDE_EDITED_FILE"
119
+ [ -z "$FILE" ] && FILE="$CLAUDE_FILE"
120
+ [ -z "$FILE" ] && FILE="$1"
121
+
122
+ if [ -n "$FILE" ]; then
123
+ ${command.replace('${file}', '"$FILE"')}
124
+ else
125
+ echo "Warning: No file information available for hook" >&2
126
+ fi
127
+ `;
128
+ await fs.writeFile(path.join(hooksDir, 'post-edit-hook.sh'), script, { mode: 0o755 });
129
+ wrapperScripts.set('post-edit', '.claude/hooks/post-edit-hook.sh');
130
+ }
131
+ }
132
+
133
+ return wrapperScripts;
134
+ }
135
+
136
+ /**
137
+ * Fix hook variables in a settings.json file
138
+ */
139
+ async function fixHookVariables(settingsPath, options = {}) {
140
+ const { backup = true, syntax = 'auto' } = options;
141
+
142
+ try {
143
+ // Read settings
144
+ const content = await fs.readFile(settingsPath, 'utf8');
145
+ const settings = JSON.parse(content);
146
+
147
+ if (!settings.hooks) {
148
+ printWarning('No hooks found in settings.json');
149
+ return { success: true, changes: 0 };
150
+ }
151
+
152
+ // Backup if requested
153
+ if (backup) {
154
+ const backupPath = `${settingsPath}.backup-${Date.now()}`;
155
+ await fs.writeFile(backupPath, content);
156
+ console.log(chalk.gray(` Created backup: ${backupPath}`));
157
+ }
158
+
159
+ // Detect working syntax
160
+ const targetSyntax = syntax === 'auto' ? await detectWorkingSyntax() : syntax;
161
+ console.log(chalk.blue(` Using ${targetSyntax} syntax`));
162
+
163
+ // Collect all commands that need transformation
164
+ const commands = [];
165
+ let changes = 0;
166
+
167
+ // Transform hooks
168
+ const transformHooks = (hooks) => {
169
+ if (Array.isArray(hooks)) {
170
+ return hooks.map((hook) => {
171
+ if (hook.hooks && Array.isArray(hook.hooks)) {
172
+ hook.hooks = hook.hooks.map((h) => {
173
+ if (h.command && h.command.includes('${')) {
174
+ commands.push(h.command);
175
+ const newCommand = transformHookCommand(h.command, 'legacy', targetSyntax);
176
+ if (newCommand !== h.command) {
177
+ changes++;
178
+ return { ...h, command: newCommand };
179
+ }
180
+ }
181
+ return h;
182
+ });
183
+ }
184
+ return hook;
185
+ });
186
+ }
187
+ return hooks;
188
+ };
189
+
190
+ // Process all hook types
191
+ for (const [hookType, hooks] of Object.entries(settings.hooks)) {
192
+ settings.hooks[hookType] = transformHooks(hooks);
193
+ }
194
+
195
+ // Create wrapper scripts if needed
196
+ if (targetSyntax === 'wrapper' && commands.length > 0) {
197
+ console.log(chalk.blue(' Creating wrapper scripts...'));
198
+ const scripts = await createWrapperScripts(commands);
199
+ console.log(chalk.green(` Created ${scripts.size} wrapper scripts`));
200
+ }
201
+
202
+ // Save updated settings
203
+ await fs.writeFile(settingsPath, JSON.stringify(settings, null, 2));
204
+
205
+ return { success: true, changes };
206
+ } catch (error) {
207
+ return { success: false, error: error.message };
208
+ }
209
+ }
210
+
211
+ /**
212
+ * Find all settings.json files
213
+ */
214
+ async function findSettingsFiles() {
215
+ const locations = [
216
+ '.claude/settings.json',
217
+ 'settings.json',
218
+ '.vscode/.claude/settings.json',
219
+ path.join(process.env.HOME || '', '.claude', 'settings.json'),
220
+ ];
221
+
222
+ const found = [];
223
+ for (const loc of locations) {
224
+ if (existsSync(loc)) {
225
+ found.push(loc);
226
+ }
227
+ }
228
+
229
+ return found;
230
+ }
231
+
232
+ /**
233
+ * Main command handler
234
+ */
235
+ export async function fixHookVariablesCommand(args = [], flags = {}) {
236
+ console.log(chalk.bold('\n🔧 Fixing Claude Code Hook Variables\n'));
237
+
238
+ const options = {
239
+ backup: !flags['no-backup'],
240
+ syntax: flags.syntax || 'auto',
241
+ test: flags.test || false,
242
+ };
243
+
244
+ // Find files to fix
245
+ let files = args.length > 0 ? args : await findSettingsFiles();
246
+
247
+ if (files.length === 0) {
248
+ printError('No settings.json files found');
249
+ console.log('\nSearched locations:');
250
+ console.log(' - .claude/settings.json');
251
+ console.log(' - settings.json');
252
+ console.log(' - .vscode/.claude/settings.json');
253
+ console.log(` - ${path.join(process.env.HOME || '', '.claude', 'settings.json')}`);
254
+ return;
255
+ }
256
+
257
+ console.log(`Found ${files.length} settings file(s) to process:\n`);
258
+
259
+ let totalChanges = 0;
260
+ let successCount = 0;
261
+
262
+ for (const file of files) {
263
+ console.log(chalk.cyan(`Processing: ${file}`));
264
+
265
+ const result = await fixHookVariables(file, options);
266
+
267
+ if (result.success) {
268
+ successCount++;
269
+ totalChanges += result.changes;
270
+ console.log(chalk.green(` ✅ Fixed ${result.changes} hook commands`));
271
+ } else {
272
+ console.log(chalk.red(` ❌ Error: ${result.error}`));
273
+ }
274
+
275
+ console.log();
276
+ }
277
+
278
+ // Summary
279
+ console.log(chalk.bold('Summary:'));
280
+ console.log(` Files processed: ${files.length}`);
281
+ console.log(` Successful: ${successCount}`);
282
+ console.log(` Total changes: ${totalChanges}`);
283
+
284
+ if (totalChanges > 0) {
285
+ console.log(chalk.yellow('\n⚠️ Important:'));
286
+ console.log(' 1. Restart Claude Code for changes to take effect');
287
+ console.log(' 2. Test your hooks to ensure they work correctly');
288
+ console.log(' 3. Report any issues to: https://github.com/ruvnet/claude-flow/issues');
289
+ }
290
+
291
+ // Test mode
292
+ if (options.test) {
293
+ console.log(chalk.blue('\n🧪 Test Mode - Creating test hook...'));
294
+ await createTestHook();
295
+ }
296
+ }
297
+
298
+ /**
299
+ * Create a test hook to verify variables work
300
+ */
301
+ async function createTestHook() {
302
+ const testSettings = {
303
+ hooks: {
304
+ PostToolUse: [
305
+ {
306
+ matcher: 'Write',
307
+ hooks: [
308
+ {
309
+ type: 'command',
310
+ command:
311
+ 'cat | jq -r \'.tool_input.file_path // .tool_input.path // ""\' | xargs -I {} echo "Hook test - File: {}" >> .claude/hook-test.log',
312
+ },
313
+ ],
314
+ },
315
+ ],
316
+ },
317
+ };
318
+
319
+ await fs.mkdir('.claude', { recursive: true });
320
+ await fs.writeFile('.claude/test-settings.json', JSON.stringify(testSettings, null, 2));
321
+
322
+ console.log('Created test configuration at: .claude/test-settings.json');
323
+ console.log('\nTo test:');
324
+ console.log(' 1. Copy .claude/test-settings.json to .claude/settings.json');
325
+ console.log(' 2. Open Claude Code');
326
+ console.log(' 3. Create or edit any file');
327
+ console.log(' 4. Check .claude/hook-test.log for output');
328
+ }
329
+
330
+ // Export command configuration
331
+ export const fixHookVariablesCommandConfig = {
332
+ description: 'Fix variable interpolation in Claude Code hooks (${file} syntax)',
333
+ usage: 'fix-hook-variables [settings-file...]',
334
+ options: [
335
+ { flag: '--no-backup', description: 'Skip creating backup files' },
336
+ { flag: '--syntax <type>', description: 'Force specific syntax: environment, jq, wrapper' },
337
+ { flag: '--test', description: 'Create test hook configuration' },
338
+ ],
339
+ examples: [
340
+ 'claude-flow fix-hook-variables',
341
+ 'claude-flow fix-hook-variables .claude/settings.json',
342
+ 'claude-flow fix-hook-variables --syntax wrapper',
343
+ 'claude-flow fix-hook-variables --test',
344
+ ],
345
+ details: `
346
+ Fixes the \${file} and \${command} variable interpolation issue in Claude Code hooks.
347
+
348
+ This command will:
349
+ • Detect your Claude Code version
350
+ • Transform hook commands to use working variable syntax
351
+ • Create wrapper scripts if needed
352
+ • Backup original settings files
353
+
354
+ Available syntaxes:
355
+ • environment: Use environment variables like $CLAUDE_EDITED_FILE (unverified)
356
+ • jq: Use official jq JSON parsing approach (recommended)
357
+ • wrapper: Create wrapper scripts to handle variables
358
+
359
+ Note: The 'jq' syntax is based on official Claude Code documentation and is likely
360
+ the most reliable approach for Claude Code 1.0.51+.
361
+
362
+ For more information: https://github.com/ruvnet/claude-flow/issues/249`,
363
+ };