claude-flow-novice 2.0.3 → 2.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/cli/commands/guidance.js +487 -668
- package/dist/src/cli/commands/index-validate.js +18 -29
- package/dist/src/cli/commands/mcp-troubleshoot.js +230 -282
- package/dist/src/cli/commands/neural-goal-init.js +92 -125
- package/dist/src/cli/commands/swarm-exec.js +317 -393
- package/dist/src/cli/commands/swarm.js +1 -1
- package/dist/src/cli/commands/validate-framework.js +983 -1100
- package/dist/src/cli/commands/validate.js +144 -223
- package/dist/src/cli/simple-commands/__tests__/agent.test.js +265 -277
- package/dist/src/cli/simple-commands/__tests__/memory.test.js +6 -7
- package/dist/src/cli/simple-commands/__tests__/swarm.test.js +373 -356
- package/dist/src/cli/simple-commands/__tests__/task.test.js +6 -7
- package/dist/src/cli/simple-commands/agent.js +157 -193
- package/dist/src/cli/simple-commands/analysis.js +336 -446
- package/dist/src/cli/simple-commands/automation-executor.js +1095 -1339
- package/dist/src/cli/simple-commands/automation.js +481 -469
- package/dist/src/cli/simple-commands/batch-manager.js +261 -313
- package/dist/src/cli/simple-commands/claude-telemetry.js +241 -267
- package/dist/src/cli/simple-commands/claude-track.js +68 -90
- package/dist/src/cli/simple-commands/concurrent-display.js +266 -320
- package/dist/src/cli/simple-commands/config.js +245 -290
- package/dist/src/cli/simple-commands/coordination.js +182 -234
- package/dist/src/cli/simple-commands/enhanced-ui-views.js +812 -615
- package/dist/src/cli/simple-commands/enhanced-webui-complete.js +922 -981
- package/dist/src/cli/simple-commands/fix-hook-variables.js +274 -294
- package/dist/src/cli/simple-commands/github/gh-coordinator.js +378 -457
- package/dist/src/cli/simple-commands/github/github-api.js +535 -574
- package/dist/src/cli/simple-commands/github/init.js +276 -303
- package/dist/src/cli/simple-commands/github.js +222 -247
- package/dist/src/cli/simple-commands/goal.js +51 -63
- package/dist/src/cli/simple-commands/hive-mind/auto-save-middleware.js +208 -278
- package/dist/src/cli/simple-commands/hive-mind/communication.js +601 -696
- package/dist/src/cli/simple-commands/hive-mind/core.js +907 -979
- package/dist/src/cli/simple-commands/hive-mind/db-optimizer.js +406 -655
- package/dist/src/cli/simple-commands/hive-mind/mcp-wrapper.js +1125 -1245
- package/dist/src/cli/simple-commands/hive-mind/memory.js +854 -1090
- package/dist/src/cli/simple-commands/hive-mind/performance-optimizer.js +459 -574
- package/dist/src/cli/simple-commands/hive-mind/performance-test.js +263 -347
- package/dist/src/cli/simple-commands/hive-mind/queen.js +727 -768
- package/dist/src/cli/simple-commands/hive-mind/session-manager.js +745 -1049
- package/dist/src/cli/simple-commands/hive-mind-optimize.js +227 -283
- package/dist/src/cli/simple-commands/hive-mind-wizard.js +174 -217
- package/dist/src/cli/simple-commands/hive-mind.js +1842 -2283
- package/dist/src/cli/simple-commands/hive.js +90 -79
- package/dist/src/cli/simple-commands/hook-safety.js +431 -521
- package/dist/src/cli/simple-commands/hooks/session-start-soul.js +203 -254
- package/dist/src/cli/simple-commands/hooks.js +1064 -1204
- package/dist/src/cli/simple-commands/init/agent-copier.js +294 -319
- package/dist/src/cli/simple-commands/init/batch-init.js +496 -562
- package/dist/src/cli/simple-commands/init/claude-commands/claude-flow-commands.js +13 -19
- package/dist/src/cli/simple-commands/init/claude-commands/optimized-claude-flow-commands.js +13 -19
- package/dist/src/cli/simple-commands/init/claude-commands/optimized-slash-commands.js +61 -88
- package/dist/src/cli/simple-commands/init/claude-commands/optimized-sparc-commands.js +125 -150
- package/dist/src/cli/simple-commands/init/claude-commands/slash-commands.js +42 -49
- package/dist/src/cli/simple-commands/init/claude-commands/sparc-commands.js +43 -61
- package/dist/src/cli/simple-commands/init/copy-revised-templates.js +141 -147
- package/dist/src/cli/simple-commands/init/executable-wrapper.js +31 -44
- package/dist/src/cli/simple-commands/init/gitignore-updater.js +64 -90
- package/dist/src/cli/simple-commands/init/help.js +104 -107
- package/dist/src/cli/simple-commands/init/hive-mind-init.js +509 -528
- package/dist/src/cli/simple-commands/init/index.js +1510 -1759
- package/dist/src/cli/simple-commands/init/performance-monitor.js +234 -317
- package/dist/src/cli/simple-commands/init/rollback/backup-manager.js +441 -504
- package/dist/src/cli/simple-commands/init/rollback/index.js +289 -364
- package/dist/src/cli/simple-commands/init/rollback/recovery-manager.js +652 -728
- package/dist/src/cli/simple-commands/init/rollback/rollback-executor.js +416 -481
- package/dist/src/cli/simple-commands/init/rollback/state-tracker.js +369 -448
- package/dist/src/cli/simple-commands/init/sparc/roo-readme.js +1 -2
- package/dist/src/cli/simple-commands/init/sparc/roomodes-config.js +122 -99
- package/dist/src/cli/simple-commands/init/sparc/workflows.js +32 -37
- package/dist/src/cli/simple-commands/init/sparc-structure.js +55 -62
- package/dist/src/cli/simple-commands/init/template-copier.js +421 -533
- package/dist/src/cli/simple-commands/init/templates/coordination-md.js +3 -6
- package/dist/src/cli/simple-commands/init/templates/enhanced-templates.js +344 -318
- package/dist/src/cli/simple-commands/init/templates/github-safe-enhanced.js +173 -218
- package/dist/src/cli/simple-commands/init/templates/github-safe.js +65 -75
- package/dist/src/cli/simple-commands/init/templates/memory-bank-md.js +3 -6
- package/dist/src/cli/simple-commands/init/templates/readme-files.js +2 -4
- package/dist/src/cli/simple-commands/init/templates/safe-hook-patterns.js +187 -230
- package/dist/src/cli/simple-commands/init/templates/sparc-modes.js +53 -80
- package/dist/src/cli/simple-commands/init/templates/verification-claude-md.js +101 -85
- package/dist/src/cli/simple-commands/init/validation/config-validator.js +283 -330
- package/dist/src/cli/simple-commands/init/validation/health-checker.js +495 -561
- package/dist/src/cli/simple-commands/init/validation/index.js +302 -358
- package/dist/src/cli/simple-commands/init/validation/mode-validator.js +308 -359
- package/dist/src/cli/simple-commands/init/validation/post-init-validator.js +389 -366
- package/dist/src/cli/simple-commands/init/validation/pre-init-validator.js +270 -268
- package/dist/src/cli/simple-commands/init/validation/test-runner.js +427 -447
- package/dist/src/cli/simple-commands/init.js +1 -2
- package/dist/src/cli/simple-commands/mcp-health.js +131 -158
- package/dist/src/cli/simple-commands/mcp-integration-layer.js +533 -634
- package/dist/src/cli/simple-commands/mcp.js +345 -400
- package/dist/src/cli/simple-commands/memory-consolidation.js +426 -537
- package/dist/src/cli/simple-commands/memory.js +247 -311
- package/dist/src/cli/simple-commands/migrate-hooks.js +39 -46
- package/dist/src/cli/simple-commands/monitor.js +294 -363
- package/dist/src/cli/simple-commands/neural.js +51 -65
- package/dist/src/cli/simple-commands/pair-autofix-only.js +538 -662
- package/dist/src/cli/simple-commands/pair-basic.js +528 -656
- package/dist/src/cli/simple-commands/pair-old.js +430 -543
- package/dist/src/cli/simple-commands/pair-working.js +615 -751
- package/dist/src/cli/simple-commands/pair.js +615 -751
- package/dist/src/cli/simple-commands/performance-hooks.js +83 -111
- package/dist/src/cli/simple-commands/performance-metrics.js +348 -433
- package/dist/src/cli/simple-commands/process-ui-enhanced.js +708 -787
- package/dist/src/cli/simple-commands/process-ui.js +230 -254
- package/dist/src/cli/simple-commands/realtime-update-system.js +525 -611
- package/dist/src/cli/simple-commands/sparc/architecture.js +1704 -1530
- package/dist/src/cli/simple-commands/sparc/commands.js +438 -516
- package/dist/src/cli/simple-commands/sparc/completion.js +1224 -1481
- package/dist/src/cli/simple-commands/sparc/coordinator.js +913 -978
- package/dist/src/cli/simple-commands/sparc/index.js +241 -298
- package/dist/src/cli/simple-commands/sparc/phase-base.js +314 -390
- package/dist/src/cli/simple-commands/sparc/pseudocode.js +965 -869
- package/dist/src/cli/simple-commands/sparc/refinement.js +980 -1273
- package/dist/src/cli/simple-commands/sparc/specification.js +559 -645
- package/dist/src/cli/simple-commands/sparc-modes/architect.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/ask.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/code.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/debug.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/devops.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/docs-writer.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/generic.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/index.js +47 -55
- package/dist/src/cli/simple-commands/sparc-modes/integration.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/mcp.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/monitoring.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/optimization.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/security-review.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/sparc-orchestrator.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/spec-pseudocode.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/supabase-admin.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/swarm.js +101 -87
- package/dist/src/cli/simple-commands/sparc-modes/tdd.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/tutorial.js +1 -1
- package/dist/src/cli/simple-commands/sparc.js +465 -493
- package/dist/src/cli/simple-commands/start-ui.js +108 -132
- package/dist/src/cli/simple-commands/start-wrapper.js +240 -268
- package/dist/src/cli/simple-commands/start.js +1 -1
- package/dist/src/cli/simple-commands/status.js +254 -275
- package/dist/src/cli/simple-commands/stream-chain-clean.js +128 -171
- package/dist/src/cli/simple-commands/stream-chain-fixed.js +61 -82
- package/dist/src/cli/simple-commands/stream-chain-real.js +267 -331
- package/dist/src/cli/simple-commands/stream-chain-working.js +211 -263
- package/dist/src/cli/simple-commands/stream-chain.js +260 -318
- package/dist/src/cli/simple-commands/stream-processor.js +290 -315
- package/dist/src/cli/simple-commands/swarm-executor.js +189 -222
- package/dist/src/cli/simple-commands/swarm-metrics-integration.js +208 -300
- package/dist/src/cli/simple-commands/swarm-ui.js +623 -703
- package/dist/src/cli/simple-commands/swarm-webui-integration.js +258 -286
- package/dist/src/cli/simple-commands/swarm.js +887 -1082
- package/dist/src/cli/simple-commands/task.js +161 -206
- package/dist/src/cli/simple-commands/timestamp-fix.js +59 -89
- package/dist/src/cli/simple-commands/token-tracker.js +258 -316
- package/dist/src/cli/simple-commands/tool-execution-framework.js +433 -519
- package/dist/src/cli/simple-commands/train-and-stream.js +275 -331
- package/dist/src/cli/simple-commands/training-pipeline.js +619 -725
- package/dist/src/cli/simple-commands/training.js +170 -227
- package/dist/src/cli/simple-commands/verification-hooks.js +261 -284
- package/dist/src/cli/simple-commands/verification-integration.js +389 -417
- package/dist/src/cli/simple-commands/verification-training-integration.js +486 -606
- package/dist/src/cli/simple-commands/verification.js +493 -513
- package/dist/src/cli/simple-commands/web-server.js +766 -836
- package/dist/src/cli/simple-commands/webui-validator.js +106 -124
- package/dist/src/coordination/event-bus/demo-wasm-integration.js +212 -251
- package/dist/src/coordination/event-bus/qe-event-bus.js +608 -748
- package/dist/src/coordination/event-bus/qe-event-bus.test.js +379 -454
- package/dist/src/coordination/iteration-tracker.js +363 -454
- package/dist/src/enterprise/analytics-manager.js +1135 -0
- package/dist/src/enterprise/audit-manager.js +1115 -0
- package/dist/src/enterprise/cloud-manager.js +891 -0
- package/dist/src/enterprise/deployment-manager.js +966 -0
- package/dist/src/enterprise/index.js +6 -0
- package/dist/src/enterprise/project-manager.js +584 -0
- package/dist/src/enterprise/security-manager.js +991 -0
- package/dist/src/index.js +1 -1
- package/dist/src/mcp/DEPRECATED.js +46 -60
- package/dist/src/mcp/fixes/mcp-error-fixes.js +115 -134
- package/dist/src/mcp/implementations/agent-tracker.js +114 -128
- package/dist/src/mcp/implementations/daa-tools.js +292 -350
- package/dist/src/mcp/implementations/workflow-tools.js +329 -361
- package/dist/src/mcp/mcp-config-manager.js +1183 -1331
- package/dist/src/mcp/mcp-server-novice-simplified.js +11 -17
- package/dist/src/mcp/mcp-server-novice.js +11 -17
- package/dist/src/mcp/mcp-server-sdk.js +11 -17
- package/dist/src/mcp/mcp-server.js +1620 -1484
- package/dist/src/mcp/ruv-swarm-wrapper.js +209 -239
- package/dist/src/memory/advanced-serializer.js +609 -589
- package/dist/src/memory/enhanced-examples.js +220 -305
- package/dist/src/memory/enhanced-memory.js +295 -336
- package/dist/src/memory/enhanced-session-serializer.js +408 -492
- package/dist/src/memory/fallback-memory-system.js +900 -1021
- package/dist/src/memory/fallback-store.js +93 -131
- package/dist/src/memory/high-performance-serialization.js +592 -730
- package/dist/src/memory/in-memory-store.js +161 -213
- package/dist/src/memory/index.js +123 -157
- package/dist/src/memory/lock-free-structures.js +578 -764
- package/dist/src/memory/memory-mapped-persistence.js +585 -766
- package/dist/src/memory/memory-pressure-manager.js +569 -707
- package/dist/src/memory/migration.js +358 -445
- package/dist/src/memory/shared-memory.js +641 -768
- package/dist/src/memory/sqlite-store.js +245 -325
- package/dist/src/memory/sqlite-wrapper.js +122 -151
- package/dist/src/memory/swarm-memory.js +470 -603
- package/dist/src/memory/test-example.js +126 -134
- package/dist/src/memory/ultra-fast-memory-store.js +622 -821
- package/dist/src/memory/unified-memory-manager.js +356 -437
- package/dist/src/migration/index.js +92 -0
- package/dist/src/migration/logger.js +121 -0
- package/dist/src/migration/migration-analyzer.js +268 -0
- package/dist/src/migration/migration-runner.js +522 -0
- package/dist/src/migration/migration-validator.js +285 -0
- package/dist/src/migration/progress-reporter.js +150 -0
- package/dist/src/migration/rollback-manager.js +321 -0
- package/dist/src/migration/tests/migration-system.test.js +7 -0
- package/dist/src/migration/types.js +3 -0
- package/dist/src/swarm/CodeRefactoringSwarm.js +777 -952
- package/dist/src/swarm/__tests__/integration.test.js +227 -0
- package/dist/src/swarm/__tests__/prompt-copier.test.js +344 -0
- package/dist/src/swarm/advanced-orchestrator.js +1095 -0
- package/dist/src/swarm/claude-code-interface.js +961 -0
- package/dist/src/swarm/claude-flow-executor.js +229 -0
- package/dist/src/swarm/consensus-coordinator.js +475 -0
- package/dist/src/swarm/coordinator.js +2993 -0
- package/dist/src/swarm/direct-executor.js +1180 -0
- package/dist/src/swarm/error-recovery/advanced-error-detection.js +691 -0
- package/dist/src/swarm/error-recovery/automated-recovery-workflows.js +998 -0
- package/dist/src/swarm/error-recovery/error-recovery-coordinator.js +1197 -0
- package/dist/src/swarm/error-recovery/recovery-monitoring.js +772 -0
- package/dist/src/swarm/error-recovery/resilience-architecture.js +714 -0
- package/dist/src/swarm/error-recovery/self-healing-mechanisms.js +1319 -0
- package/dist/src/swarm/error-recovery/test-error-recovery-effectiveness.js +808 -0
- package/dist/src/swarm/executor-v2.js +322 -0
- package/dist/src/swarm/executor.js +815 -0
- package/dist/src/swarm/hive-mind-integration.js +703 -0
- package/dist/src/swarm/index.js +41 -0
- package/dist/src/swarm/json-output-aggregator.js +267 -0
- package/dist/src/swarm/large-scale-coordinator.js +542 -0
- package/dist/src/swarm/mcp-integration-wrapper.js +628 -0
- package/dist/src/swarm/memory.js +1117 -0
- package/dist/src/swarm/optimizations/__tests__/optimization.test.js +348 -0
- package/dist/src/swarm/optimizations/async-file-manager.js +285 -0
- package/dist/src/swarm/optimizations/circular-buffer.js +162 -0
- package/dist/src/swarm/optimizations/connection-pool.js +244 -0
- package/dist/src/swarm/optimizations/index.js +28 -0
- package/dist/src/swarm/optimizations/optimized-executor.js +320 -0
- package/dist/src/swarm/optimizations/ttl-map.js +234 -0
- package/dist/src/swarm/prompt-cli.js +200 -0
- package/dist/src/swarm/prompt-copier-enhanced.js +202 -0
- package/dist/src/swarm/prompt-copier.js +381 -0
- package/dist/src/swarm/prompt-manager.js +295 -0
- package/dist/src/swarm/prompt-utils.js +310 -0
- package/dist/src/swarm/result-aggregator.js +718 -0
- package/dist/src/swarm/sparc-executor.js +1568 -0
- package/dist/src/swarm/strategies/auto.js +758 -0
- package/dist/src/swarm/strategies/base.js +128 -0
- package/dist/src/swarm/strategies/research.js +914 -0
- package/dist/src/swarm/strategies/strategy-metrics-patch.js +2 -0
- package/dist/src/swarm/types.js +52 -0
- package/dist/src/swarm/workers/copy-worker.js +56 -0
- package/dist/src/utils/__tests__/github-cli-safety-wrapper.test.js +332 -400
- package/dist/src/utils/github-cli-safe.js +56 -64
- package/dist/src/utils/github-cli-safety-wrapper.js +451 -546
- package/dist/src/utils/npx-isolated-cache.js +104 -119
- package/dist/src/utils/preference-manager.js +622 -652
- package/dist/src/utils/timezone-utils.js +86 -105
- package/dist/src/validators/epic-config-schema.js +214 -0
- package/dist/src/validators/index.js +10 -0
- package/dist/src/validators/swarm-init-validator.js +259 -0
- package/dist/src/validators/todowrite-batching-validator.js +215 -0
- package/dist/src/validators/todowrite-integration.js +187 -0
- package/package.json +2 -2
|
@@ -1,116 +1,108 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
|
|
3
2
|
/**
|
|
4
3
|
* Fix hook variable interpolation in Claude Code settings.json files
|
|
5
4
|
* Addresses issue #249 - ${file} and ${command} variables not working
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
import
|
|
9
|
-
import
|
|
10
|
-
import {
|
|
11
|
-
import chalk from 'chalk';
|
|
12
|
-
import { printSuccess, printError, printWarning } from '../utils.js';
|
|
13
|
-
|
|
5
|
+
*/ import fs from "node:fs/promises";
|
|
6
|
+
import path from "path";
|
|
7
|
+
import { existsSync } from "fs";
|
|
8
|
+
import chalk from "chalk";
|
|
9
|
+
import { printError, printWarning } from "../utils.js";
|
|
14
10
|
// Known working variable syntaxes based on Claude Code version
|
|
15
11
|
const VARIABLE_SYNTAXES = {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
12
|
+
legacy: {
|
|
13
|
+
pattern: /\$\{(\w+)\}/g,
|
|
14
|
+
example: '${file}',
|
|
15
|
+
description: 'Legacy syntax (not working in 1.0.51+)'
|
|
16
|
+
},
|
|
17
|
+
environment: {
|
|
18
|
+
pattern: /\$(\w+)/g,
|
|
19
|
+
example: '$CLAUDE_FILE',
|
|
20
|
+
description: 'Environment variable syntax (unverified)'
|
|
21
|
+
},
|
|
22
|
+
jq: {
|
|
23
|
+
pattern: null,
|
|
24
|
+
example: 'jq parsing of JSON input',
|
|
25
|
+
description: 'Official Claude Code approach using jq'
|
|
26
|
+
},
|
|
27
|
+
wrapper: {
|
|
28
|
+
pattern: null,
|
|
29
|
+
example: 'Use wrapper script',
|
|
30
|
+
description: 'Wrapper script approach'
|
|
31
|
+
}
|
|
36
32
|
};
|
|
37
|
-
|
|
38
33
|
// Mapping of our variables to Claude Code environment variables
|
|
39
34
|
const VARIABLE_MAPPINGS = {
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
35
|
+
file: [
|
|
36
|
+
'CLAUDE_EDITED_FILE',
|
|
37
|
+
'CLAUDE_FILE',
|
|
38
|
+
'EDITED_FILE'
|
|
39
|
+
],
|
|
40
|
+
command: [
|
|
41
|
+
'CLAUDE_COMMAND',
|
|
42
|
+
'COMMAND',
|
|
43
|
+
'CMD'
|
|
44
|
+
],
|
|
45
|
+
tool: [
|
|
46
|
+
'CLAUDE_TOOL',
|
|
47
|
+
'TOOL_NAME',
|
|
48
|
+
'TOOL'
|
|
49
|
+
]
|
|
43
50
|
};
|
|
44
|
-
|
|
45
51
|
/**
|
|
46
52
|
* Detect which variable syntax works with current Claude Code version
|
|
47
|
-
*/
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
return 'jq';
|
|
53
|
+
*/ async function detectWorkingSyntax() {
|
|
54
|
+
// Based on official Claude Code documentation and testing,
|
|
55
|
+
// JQ parsing is the recommended approach for Claude Code 1.0.51+
|
|
56
|
+
return 'jq';
|
|
52
57
|
}
|
|
53
|
-
|
|
54
58
|
/**
|
|
55
59
|
* Transform hook command to use working variable syntax
|
|
56
|
-
*/
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
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}`;
|
|
60
|
+
*/ function transformHookCommand(command, fromSyntax, toSyntax) {
|
|
61
|
+
if (fromSyntax === 'legacy' && toSyntax === 'environment') {
|
|
62
|
+
// Replace ${file} with $CLAUDE_EDITED_FILE
|
|
63
|
+
return command.replace(/\$\{(\w+)\}/g, (match, varName)=>{
|
|
64
|
+
const mappings = VARIABLE_MAPPINGS[varName];
|
|
65
|
+
if (mappings && mappings[0]) {
|
|
66
|
+
return `$${mappings[0]}`;
|
|
67
|
+
}
|
|
68
|
+
return match; // Keep unchanged if no mapping
|
|
69
|
+
});
|
|
83
70
|
}
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
71
|
+
if (fromSyntax === 'legacy' && toSyntax === 'jq') {
|
|
72
|
+
// Transform to use jq parsing of JSON input
|
|
73
|
+
// Extract the actual command and wrap it with jq parsing
|
|
74
|
+
const fileVarMatch = command.match(/\$\{file\}/);
|
|
75
|
+
const commandVarMatch = command.match(/\$\{command\}/);
|
|
76
|
+
if (fileVarMatch) {
|
|
77
|
+
// Replace ${file} with jq extraction
|
|
78
|
+
const baseCommand = command.replace(/\$\{file\}/g, '{}');
|
|
79
|
+
return `cat | jq -r '.tool_input.file_path // .tool_input.path // ""' | xargs -I {} ${baseCommand}`;
|
|
80
|
+
} else if (commandVarMatch) {
|
|
81
|
+
// Replace ${command} with jq extraction
|
|
82
|
+
const baseCommand = command.replace(/\$\{command\}/g, '{}');
|
|
83
|
+
return `cat | jq -r '.tool_input.command // ""' | xargs -I {} ${baseCommand}`;
|
|
84
|
+
}
|
|
85
|
+
// Fallback for other variables
|
|
86
|
+
return `cat | jq -r '.' | xargs -I {} ${command.replace(/\$\{(\w+)\}/g, '{}')}`;
|
|
87
|
+
}
|
|
88
|
+
if (toSyntax === 'wrapper') {
|
|
89
|
+
// Generate wrapper script path
|
|
90
|
+
const scriptName = command.includes('post-edit') ? 'post-edit-hook.sh' : command.includes('pre-edit') ? 'pre-edit-hook.sh' : 'generic-hook.sh';
|
|
91
|
+
return `.claude/hooks/${scriptName}`;
|
|
92
|
+
}
|
|
93
|
+
return command;
|
|
100
94
|
}
|
|
101
|
-
|
|
102
95
|
/**
|
|
103
96
|
* Create wrapper scripts for hooks
|
|
104
|
-
*/
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
const script = `#!/bin/bash
|
|
97
|
+
*/ async function createWrapperScripts(commands) {
|
|
98
|
+
const hooksDir = '.claude/hooks';
|
|
99
|
+
await fs.mkdir(hooksDir, {
|
|
100
|
+
recursive: true
|
|
101
|
+
});
|
|
102
|
+
const wrapperScripts = new Map();
|
|
103
|
+
for (const command of commands){
|
|
104
|
+
if (command.includes('post-edit')) {
|
|
105
|
+
const script = `#!/bin/bash
|
|
114
106
|
# Post-edit hook wrapper
|
|
115
107
|
# Handles variable interpolation for Claude Code hooks
|
|
116
108
|
|
|
@@ -125,224 +117,212 @@ else
|
|
|
125
117
|
echo "Warning: No file information available for hook" >&2
|
|
126
118
|
fi
|
|
127
119
|
`;
|
|
128
|
-
|
|
129
|
-
|
|
120
|
+
await fs.writeFile(path.join(hooksDir, 'post-edit-hook.sh'), script, {
|
|
121
|
+
mode: 0o755
|
|
122
|
+
});
|
|
123
|
+
wrapperScripts.set('post-edit', '.claude/hooks/post-edit-hook.sh');
|
|
124
|
+
}
|
|
130
125
|
}
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
return wrapperScripts;
|
|
126
|
+
return wrapperScripts;
|
|
134
127
|
}
|
|
135
|
-
|
|
136
128
|
/**
|
|
137
129
|
* Fix hook variables in a settings.json file
|
|
138
|
-
*/
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
130
|
+
*/ async function fixHookVariables(settingsPath, options = {}) {
|
|
131
|
+
const { backup = true, syntax = 'auto' } = options;
|
|
132
|
+
try {
|
|
133
|
+
// Read settings
|
|
134
|
+
const content = await fs.readFile(settingsPath, 'utf8');
|
|
135
|
+
const settings = JSON.parse(content);
|
|
136
|
+
if (!settings.hooks) {
|
|
137
|
+
printWarning('No hooks found in settings.json');
|
|
138
|
+
return {
|
|
139
|
+
success: true,
|
|
140
|
+
changes: 0
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
// Backup if requested
|
|
144
|
+
if (backup) {
|
|
145
|
+
const backupPath = `${settingsPath}.backup-${Date.now()}`;
|
|
146
|
+
await fs.writeFile(backupPath, content);
|
|
147
|
+
console.log(chalk.gray(` Created backup: ${backupPath}`));
|
|
148
|
+
}
|
|
149
|
+
// Detect working syntax
|
|
150
|
+
const targetSyntax = syntax === 'auto' ? await detectWorkingSyntax() : syntax;
|
|
151
|
+
console.log(chalk.blue(` Using ${targetSyntax} syntax`));
|
|
152
|
+
// Collect all commands that need transformation
|
|
153
|
+
const commands = [];
|
|
154
|
+
let changes = 0;
|
|
155
|
+
// Transform hooks
|
|
156
|
+
const transformHooks = (hooks)=>{
|
|
157
|
+
if (Array.isArray(hooks)) {
|
|
158
|
+
return hooks.map((hook)=>{
|
|
159
|
+
if (hook.hooks && Array.isArray(hook.hooks)) {
|
|
160
|
+
hook.hooks = hook.hooks.map((h)=>{
|
|
161
|
+
if (h.command && h.command.includes('${')) {
|
|
162
|
+
commands.push(h.command);
|
|
163
|
+
const newCommand = transformHookCommand(h.command, 'legacy', targetSyntax);
|
|
164
|
+
if (newCommand !== h.command) {
|
|
165
|
+
changes++;
|
|
166
|
+
return {
|
|
167
|
+
...h,
|
|
168
|
+
command: newCommand
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
return h;
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
return hook;
|
|
176
|
+
});
|
|
177
|
+
}
|
|
178
|
+
return hooks;
|
|
179
|
+
};
|
|
180
|
+
// Process all hook types
|
|
181
|
+
for (const [hookType, hooks] of Object.entries(settings.hooks)){
|
|
182
|
+
settings.hooks[hookType] = transformHooks(hooks);
|
|
183
|
+
}
|
|
184
|
+
// Create wrapper scripts if needed
|
|
185
|
+
if (targetSyntax === 'wrapper' && commands.length > 0) {
|
|
186
|
+
console.log(chalk.blue(' Creating wrapper scripts...'));
|
|
187
|
+
const scripts = await createWrapperScripts(commands);
|
|
188
|
+
console.log(chalk.green(` Created ${scripts.size} wrapper scripts`));
|
|
189
|
+
}
|
|
190
|
+
// Save updated settings
|
|
191
|
+
await fs.writeFile(settingsPath, JSON.stringify(settings, null, 2));
|
|
192
|
+
return {
|
|
193
|
+
success: true,
|
|
194
|
+
changes
|
|
195
|
+
};
|
|
196
|
+
} catch (error) {
|
|
197
|
+
return {
|
|
198
|
+
success: false,
|
|
199
|
+
error: error.message
|
|
200
|
+
};
|
|
193
201
|
}
|
|
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
202
|
}
|
|
210
|
-
|
|
211
203
|
/**
|
|
212
204
|
* Find all settings.json files
|
|
213
|
-
*/
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
found.push(loc);
|
|
205
|
+
*/ async function findSettingsFiles() {
|
|
206
|
+
const locations = [
|
|
207
|
+
'.claude/settings.json',
|
|
208
|
+
'settings.json',
|
|
209
|
+
'.vscode/.claude/settings.json',
|
|
210
|
+
path.join(process.env.HOME || '', '.claude', 'settings.json')
|
|
211
|
+
];
|
|
212
|
+
const found = [];
|
|
213
|
+
for (const loc of locations){
|
|
214
|
+
if (existsSync(loc)) {
|
|
215
|
+
found.push(loc);
|
|
216
|
+
}
|
|
226
217
|
}
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
return found;
|
|
218
|
+
return found;
|
|
230
219
|
}
|
|
231
|
-
|
|
232
220
|
/**
|
|
233
221
|
* Main command handler
|
|
234
|
-
*/
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
console.log(
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
222
|
+
*/ export async function fixHookVariablesCommand(args = [], flags = {}) {
|
|
223
|
+
console.log(chalk.bold('\n🔧 Fixing Claude Code Hook Variables\n'));
|
|
224
|
+
const options = {
|
|
225
|
+
backup: !flags['no-backup'],
|
|
226
|
+
syntax: flags.syntax || 'auto',
|
|
227
|
+
test: flags.test || false
|
|
228
|
+
};
|
|
229
|
+
// Find files to fix
|
|
230
|
+
let files = args.length > 0 ? args : await findSettingsFiles();
|
|
231
|
+
if (files.length === 0) {
|
|
232
|
+
printError('No settings.json files found');
|
|
233
|
+
console.log('\nSearched locations:');
|
|
234
|
+
console.log(' - .claude/settings.json');
|
|
235
|
+
console.log(' - settings.json');
|
|
236
|
+
console.log(' - .vscode/.claude/settings.json');
|
|
237
|
+
console.log(` - ${path.join(process.env.HOME || '', '.claude', 'settings.json')}`);
|
|
238
|
+
return;
|
|
239
|
+
}
|
|
240
|
+
console.log(`Found ${files.length} settings file(s) to process:\n`);
|
|
241
|
+
let totalChanges = 0;
|
|
242
|
+
let successCount = 0;
|
|
243
|
+
for (const file of files){
|
|
244
|
+
console.log(chalk.cyan(`Processing: ${file}`));
|
|
245
|
+
const result = await fixHookVariables(file, options);
|
|
246
|
+
if (result.success) {
|
|
247
|
+
successCount++;
|
|
248
|
+
totalChanges += result.changes;
|
|
249
|
+
console.log(chalk.green(` ✅ Fixed ${result.changes} hook commands`));
|
|
250
|
+
} else {
|
|
251
|
+
console.log(chalk.red(` ❌ Error: ${result.error}`));
|
|
252
|
+
}
|
|
253
|
+
console.log();
|
|
254
|
+
}
|
|
255
|
+
// Summary
|
|
256
|
+
console.log(chalk.bold('Summary:'));
|
|
257
|
+
console.log(` Files processed: ${files.length}`);
|
|
258
|
+
console.log(` Successful: ${successCount}`);
|
|
259
|
+
console.log(` Total changes: ${totalChanges}`);
|
|
260
|
+
if (totalChanges > 0) {
|
|
261
|
+
console.log(chalk.yellow('\n⚠️ Important:'));
|
|
262
|
+
console.log(' 1. Restart Claude Code for changes to take effect');
|
|
263
|
+
console.log(' 2. Test your hooks to ensure they work correctly');
|
|
264
|
+
console.log(' 3. Report any issues to: https://github.com/ruvnet/claude-flow/issues');
|
|
265
|
+
}
|
|
266
|
+
// Test mode
|
|
267
|
+
if (options.test) {
|
|
268
|
+
console.log(chalk.blue('\n🧪 Test Mode - Creating test hook...'));
|
|
269
|
+
await createTestHook();
|
|
273
270
|
}
|
|
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
271
|
}
|
|
297
|
-
|
|
298
272
|
/**
|
|
299
273
|
* Create a test hook to verify variables work
|
|
300
|
-
*/
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
}
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
console.log(' 3. Create or edit any file');
|
|
327
|
-
console.log(' 4. Check .claude/hook-test.log for output');
|
|
274
|
+
*/ async function createTestHook() {
|
|
275
|
+
const testSettings = {
|
|
276
|
+
hooks: {
|
|
277
|
+
PostToolUse: [
|
|
278
|
+
{
|
|
279
|
+
matcher: 'Write',
|
|
280
|
+
hooks: [
|
|
281
|
+
{
|
|
282
|
+
type: 'command',
|
|
283
|
+
command: 'cat | jq -r \'.tool_input.file_path // .tool_input.path // ""\' | xargs -I {} echo "Hook test - File: {}" >> .claude/hook-test.log'
|
|
284
|
+
}
|
|
285
|
+
]
|
|
286
|
+
}
|
|
287
|
+
]
|
|
288
|
+
}
|
|
289
|
+
};
|
|
290
|
+
await fs.mkdir('.claude', {
|
|
291
|
+
recursive: true
|
|
292
|
+
});
|
|
293
|
+
await fs.writeFile('.claude/test-settings.json', JSON.stringify(testSettings, null, 2));
|
|
294
|
+
console.log('Created test configuration at: .claude/test-settings.json');
|
|
295
|
+
console.log('\nTo test:');
|
|
296
|
+
console.log(' 1. Copy .claude/test-settings.json to .claude/settings.json');
|
|
297
|
+
console.log(' 2. Open Claude Code');
|
|
298
|
+
console.log(' 3. Create or edit any file');
|
|
299
|
+
console.log(' 4. Check .claude/hook-test.log for output');
|
|
328
300
|
}
|
|
329
|
-
|
|
330
301
|
// Export command configuration
|
|
331
302
|
export const fixHookVariablesCommandConfig = {
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
303
|
+
description: 'Fix variable interpolation in Claude Code hooks (${file} syntax)',
|
|
304
|
+
usage: 'fix-hook-variables [settings-file...]',
|
|
305
|
+
options: [
|
|
306
|
+
{
|
|
307
|
+
flag: '--no-backup',
|
|
308
|
+
description: 'Skip creating backup files'
|
|
309
|
+
},
|
|
310
|
+
{
|
|
311
|
+
flag: '--syntax <type>',
|
|
312
|
+
description: 'Force specific syntax: environment, jq, wrapper'
|
|
313
|
+
},
|
|
314
|
+
{
|
|
315
|
+
flag: '--test',
|
|
316
|
+
description: 'Create test hook configuration'
|
|
317
|
+
}
|
|
318
|
+
],
|
|
319
|
+
examples: [
|
|
320
|
+
'claude-flow-novice fix-hook-variables',
|
|
321
|
+
'claude-flow-novice fix-hook-variables .claude/settings.json',
|
|
322
|
+
'claude-flow-novice fix-hook-variables --syntax wrapper',
|
|
323
|
+
'claude-flow-novice fix-hook-variables --test'
|
|
324
|
+
],
|
|
325
|
+
details: `
|
|
346
326
|
Fixes the \${file} and \${command} variable interpolation issue in Claude Code hooks.
|
|
347
327
|
|
|
348
328
|
This command will:
|
|
@@ -359,5 +339,5 @@ Available syntaxes:
|
|
|
359
339
|
Note: The 'jq' syntax is based on official Claude Code documentation and is likely
|
|
360
340
|
the most reliable approach for Claude Code 1.0.51+.
|
|
361
341
|
|
|
362
|
-
For more information: https://github.com/ruvnet/claude-flow/issues/249
|
|
342
|
+
For more information: https://github.com/ruvnet/claude-flow/issues/249`
|
|
363
343
|
};
|