@claude-flow/cli 3.6.30 → 3.7.0-alpha.10
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/.claude/agents/analysis/analyze-code-quality.md +178 -178
- package/.claude/agents/analysis/code-analyzer.md +209 -209
- package/.claude/agents/analysis/code-review/analyze-code-quality.md +178 -178
- package/.claude/agents/architecture/arch-system-design.md +156 -156
- package/.claude/agents/architecture/system-design/arch-system-design.md +154 -154
- package/.claude/agents/browser/browser-agent.yaml +182 -182
- package/.claude/agents/consensus/byzantine-coordinator.md +62 -62
- package/.claude/agents/consensus/crdt-synchronizer.md +996 -996
- package/.claude/agents/consensus/gossip-coordinator.md +62 -62
- package/.claude/agents/consensus/performance-benchmarker.md +850 -850
- package/.claude/agents/consensus/quorum-manager.md +822 -822
- package/.claude/agents/consensus/raft-manager.md +62 -62
- package/.claude/agents/consensus/security-manager.md +621 -621
- package/.claude/agents/core/coder.md +452 -452
- package/.claude/agents/core/planner.md +374 -374
- package/.claude/agents/core/researcher.md +368 -368
- package/.claude/agents/core/reviewer.md +519 -519
- package/.claude/agents/core/tester.md +511 -511
- package/.claude/agents/custom/test-long-runner.md +44 -44
- package/.claude/agents/data/data-ml-model.md +444 -444
- package/.claude/agents/data/ml/data-ml-model.md +192 -192
- package/.claude/agents/development/backend/dev-backend-api.md +141 -141
- package/.claude/agents/development/dev-backend-api.md +344 -344
- package/.claude/agents/devops/ci-cd/ops-cicd-github.md +163 -163
- package/.claude/agents/devops/ops-cicd-github.md +164 -164
- package/.claude/agents/documentation/api-docs/docs-api-openapi.md +173 -173
- package/.claude/agents/documentation/docs-api-openapi.md +354 -354
- package/.claude/agents/flow-nexus/app-store.md +87 -87
- package/.claude/agents/flow-nexus/authentication.md +68 -68
- package/.claude/agents/flow-nexus/challenges.md +80 -80
- package/.claude/agents/flow-nexus/neural-network.md +87 -87
- package/.claude/agents/flow-nexus/payments.md +82 -82
- package/.claude/agents/flow-nexus/sandbox.md +75 -75
- package/.claude/agents/flow-nexus/swarm.md +75 -75
- package/.claude/agents/flow-nexus/user-tools.md +95 -95
- package/.claude/agents/flow-nexus/workflow.md +83 -83
- package/.claude/agents/github/code-review-swarm.md +377 -377
- package/.claude/agents/github/github-modes.md +172 -172
- package/.claude/agents/github/issue-tracker.md +575 -575
- package/.claude/agents/github/multi-repo-swarm.md +552 -552
- package/.claude/agents/github/pr-manager.md +437 -437
- package/.claude/agents/github/project-board-sync.md +508 -508
- package/.claude/agents/github/release-manager.md +604 -604
- package/.claude/agents/github/release-swarm.md +582 -582
- package/.claude/agents/github/repo-architect.md +397 -397
- package/.claude/agents/github/swarm-issue.md +572 -572
- package/.claude/agents/github/swarm-pr.md +427 -427
- package/.claude/agents/github/sync-coordinator.md +451 -451
- package/.claude/agents/github/workflow-automation.md +902 -902
- package/.claude/agents/goal/agent.md +815 -815
- package/.claude/agents/goal/goal-planner.md +72 -72
- package/.claude/agents/optimization/benchmark-suite.md +664 -664
- package/.claude/agents/optimization/load-balancer.md +430 -430
- package/.claude/agents/optimization/performance-monitor.md +671 -671
- package/.claude/agents/optimization/resource-allocator.md +673 -673
- package/.claude/agents/optimization/topology-optimizer.md +807 -807
- package/.claude/agents/payments/agentic-payments.md +126 -126
- package/.claude/agents/sona/sona-learning-optimizer.md +74 -74
- package/.claude/agents/sparc/architecture.md +698 -698
- package/.claude/agents/sparc/pseudocode.md +519 -519
- package/.claude/agents/sparc/refinement.md +801 -801
- package/.claude/agents/sparc/specification.md +477 -477
- package/.claude/agents/specialized/mobile/spec-mobile-react-native.md +224 -224
- package/.claude/agents/specialized/spec-mobile-react-native.md +226 -226
- package/.claude/agents/sublinear/consensus-coordinator.md +337 -337
- package/.claude/agents/sublinear/matrix-optimizer.md +184 -184
- package/.claude/agents/sublinear/pagerank-analyzer.md +298 -298
- package/.claude/agents/sublinear/performance-optimizer.md +367 -367
- package/.claude/agents/sublinear/trading-predictor.md +245 -245
- package/.claude/agents/swarm/adaptive-coordinator.md +1126 -1126
- package/.claude/agents/swarm/hierarchical-coordinator.md +709 -709
- package/.claude/agents/swarm/mesh-coordinator.md +962 -962
- package/.claude/agents/templates/automation-smart-agent.md +204 -204
- package/.claude/agents/templates/base-template-generator.md +289 -289
- package/.claude/agents/templates/coordinator-swarm-init.md +89 -89
- package/.claude/agents/templates/github-pr-manager.md +176 -176
- package/.claude/agents/templates/implementer-sparc-coder.md +258 -258
- package/.claude/agents/templates/memory-coordinator.md +186 -186
- package/.claude/agents/templates/orchestrator-task.md +138 -138
- package/.claude/agents/templates/performance-analyzer.md +198 -198
- package/.claude/agents/templates/sparc-coordinator.md +513 -513
- package/.claude/agents/testing/production-validator.md +394 -394
- package/.claude/agents/testing/tdd-london-swarm.md +243 -243
- package/.claude/agents/v3/adr-architect.md +184 -184
- package/.claude/agents/v3/aidefence-guardian.md +282 -282
- package/.claude/agents/v3/claims-authorizer.md +208 -208
- package/.claude/agents/v3/collective-intelligence-coordinator.md +993 -993
- package/.claude/agents/v3/ddd-domain-expert.md +220 -220
- package/.claude/agents/v3/injection-analyst.md +236 -236
- package/.claude/agents/v3/memory-specialist.md +995 -995
- package/.claude/agents/v3/performance-engineer.md +1233 -1233
- package/.claude/agents/v3/pii-detector.md +151 -151
- package/.claude/agents/v3/reasoningbank-learner.md +213 -213
- package/.claude/agents/v3/security-architect-aidefence.md +410 -410
- package/.claude/agents/v3/security-architect.md +867 -867
- package/.claude/agents/v3/security-auditor.md +771 -771
- package/.claude/agents/v3/sparc-orchestrator.md +182 -182
- package/.claude/agents/v3/swarm-memory-manager.md +157 -157
- package/.claude/agents/v3/v3-integration-architect.md +205 -205
- package/.claude/commands/agents/README.md +50 -50
- package/.claude/commands/agents/agent-capabilities.md +140 -140
- package/.claude/commands/agents/agent-coordination.md +28 -28
- package/.claude/commands/agents/agent-spawning.md +28 -28
- package/.claude/commands/agents/agent-types.md +216 -216
- package/.claude/commands/agents/health.md +139 -139
- package/.claude/commands/agents/list.md +100 -100
- package/.claude/commands/agents/logs.md +130 -130
- package/.claude/commands/agents/metrics.md +122 -122
- package/.claude/commands/agents/pool.md +127 -127
- package/.claude/commands/agents/spawn.md +140 -140
- package/.claude/commands/agents/status.md +115 -115
- package/.claude/commands/agents/stop.md +102 -102
- package/.claude/commands/analysis/COMMAND_COMPLIANCE_REPORT.md +53 -53
- package/.claude/commands/analysis/README.md +9 -9
- package/.claude/commands/analysis/bottleneck-detect.md +162 -162
- package/.claude/commands/analysis/performance-bottlenecks.md +58 -58
- package/.claude/commands/analysis/performance-report.md +25 -25
- package/.claude/commands/analysis/token-efficiency.md +44 -44
- package/.claude/commands/analysis/token-usage.md +25 -25
- package/.claude/commands/automation/README.md +9 -9
- package/.claude/commands/automation/auto-agent.md +122 -122
- package/.claude/commands/automation/self-healing.md +105 -105
- package/.claude/commands/automation/session-memory.md +89 -89
- package/.claude/commands/automation/smart-agents.md +72 -72
- package/.claude/commands/automation/smart-spawn.md +25 -25
- package/.claude/commands/automation/workflow-select.md +25 -25
- package/.claude/commands/claude-flow-help.md +103 -103
- package/.claude/commands/claude-flow-memory.md +107 -107
- package/.claude/commands/claude-flow-swarm.md +205 -205
- package/.claude/commands/coordination/README.md +9 -9
- package/.claude/commands/coordination/agent-spawn.md +25 -25
- package/.claude/commands/coordination/init.md +44 -44
- package/.claude/commands/coordination/orchestrate.md +43 -43
- package/.claude/commands/coordination/spawn.md +45 -45
- package/.claude/commands/coordination/swarm-init.md +85 -85
- package/.claude/commands/coordination/task-orchestrate.md +25 -25
- package/.claude/commands/flow-nexus/app-store.md +123 -123
- package/.claude/commands/flow-nexus/challenges.md +119 -119
- package/.claude/commands/flow-nexus/login-registration.md +64 -64
- package/.claude/commands/flow-nexus/neural-network.md +133 -133
- package/.claude/commands/flow-nexus/payments.md +115 -115
- package/.claude/commands/flow-nexus/sandbox.md +82 -82
- package/.claude/commands/flow-nexus/swarm.md +86 -86
- package/.claude/commands/flow-nexus/user-tools.md +151 -151
- package/.claude/commands/flow-nexus/workflow.md +114 -114
- package/.claude/commands/github/README.md +11 -11
- package/.claude/commands/github/code-review-swarm.md +513 -513
- package/.claude/commands/github/code-review.md +25 -25
- package/.claude/commands/github/github-modes.md +146 -146
- package/.claude/commands/github/github-swarm.md +121 -121
- package/.claude/commands/github/issue-tracker.md +291 -291
- package/.claude/commands/github/issue-triage.md +25 -25
- package/.claude/commands/github/multi-repo-swarm.md +518 -518
- package/.claude/commands/github/pr-enhance.md +26 -26
- package/.claude/commands/github/pr-manager.md +169 -169
- package/.claude/commands/github/project-board-sync.md +470 -470
- package/.claude/commands/github/release-manager.md +337 -337
- package/.claude/commands/github/release-swarm.md +543 -543
- package/.claude/commands/github/repo-analyze.md +25 -25
- package/.claude/commands/github/repo-architect.md +366 -366
- package/.claude/commands/github/swarm-issue.md +481 -481
- package/.claude/commands/github/swarm-pr.md +284 -284
- package/.claude/commands/github/sync-coordinator.md +300 -300
- package/.claude/commands/github/workflow-automation.md +441 -441
- package/.claude/commands/hive-mind/README.md +17 -17
- package/.claude/commands/hive-mind/hive-mind-consensus.md +8 -8
- package/.claude/commands/hive-mind/hive-mind-init.md +18 -18
- package/.claude/commands/hive-mind/hive-mind-memory.md +8 -8
- package/.claude/commands/hive-mind/hive-mind-metrics.md +8 -8
- package/.claude/commands/hive-mind/hive-mind-resume.md +8 -8
- package/.claude/commands/hive-mind/hive-mind-sessions.md +8 -8
- package/.claude/commands/hive-mind/hive-mind-spawn.md +21 -21
- package/.claude/commands/hive-mind/hive-mind-status.md +8 -8
- package/.claude/commands/hive-mind/hive-mind-stop.md +8 -8
- package/.claude/commands/hive-mind/hive-mind-wizard.md +8 -8
- package/.claude/commands/hive-mind/hive-mind.md +27 -27
- package/.claude/commands/hooks/README.md +11 -11
- package/.claude/commands/hooks/overview.md +57 -57
- package/.claude/commands/hooks/post-edit.md +117 -117
- package/.claude/commands/hooks/post-task.md +112 -112
- package/.claude/commands/hooks/pre-edit.md +113 -113
- package/.claude/commands/hooks/pre-task.md +111 -111
- package/.claude/commands/hooks/session-end.md +118 -118
- package/.claude/commands/hooks/setup.md +102 -102
- package/.claude/commands/memory/README.md +9 -9
- package/.claude/commands/memory/memory-persist.md +25 -25
- package/.claude/commands/memory/memory-search.md +25 -25
- package/.claude/commands/memory/memory-usage.md +25 -25
- package/.claude/commands/memory/neural.md +47 -47
- package/.claude/commands/monitoring/README.md +9 -9
- package/.claude/commands/monitoring/agent-metrics.md +25 -25
- package/.claude/commands/monitoring/agents.md +44 -44
- package/.claude/commands/monitoring/real-time-view.md +25 -25
- package/.claude/commands/monitoring/status.md +46 -46
- package/.claude/commands/monitoring/swarm-monitor.md +25 -25
- package/.claude/commands/optimization/README.md +9 -9
- package/.claude/commands/optimization/auto-topology.md +61 -61
- package/.claude/commands/optimization/cache-manage.md +25 -25
- package/.claude/commands/optimization/parallel-execute.md +25 -25
- package/.claude/commands/optimization/parallel-execution.md +49 -49
- package/.claude/commands/optimization/topology-optimize.md +25 -25
- package/.claude/commands/pair/README.md +260 -260
- package/.claude/commands/pair/commands.md +545 -545
- package/.claude/commands/pair/config.md +509 -509
- package/.claude/commands/pair/examples.md +511 -511
- package/.claude/commands/pair/modes.md +347 -347
- package/.claude/commands/pair/session.md +406 -406
- package/.claude/commands/pair/start.md +208 -208
- package/.claude/commands/sparc/analyzer.md +51 -51
- package/.claude/commands/sparc/architect.md +53 -53
- package/.claude/commands/sparc/ask.md +97 -97
- package/.claude/commands/sparc/batch-executor.md +54 -54
- package/.claude/commands/sparc/code.md +89 -89
- package/.claude/commands/sparc/coder.md +54 -54
- package/.claude/commands/sparc/debug.md +83 -83
- package/.claude/commands/sparc/debugger.md +54 -54
- package/.claude/commands/sparc/designer.md +53 -53
- package/.claude/commands/sparc/devops.md +109 -109
- package/.claude/commands/sparc/docs-writer.md +80 -80
- package/.claude/commands/sparc/documenter.md +54 -54
- package/.claude/commands/sparc/innovator.md +54 -54
- package/.claude/commands/sparc/integration.md +83 -83
- package/.claude/commands/sparc/mcp.md +117 -117
- package/.claude/commands/sparc/memory-manager.md +54 -54
- package/.claude/commands/sparc/optimizer.md +54 -54
- package/.claude/commands/sparc/orchestrator.md +131 -131
- package/.claude/commands/sparc/post-deployment-monitoring-mode.md +83 -83
- package/.claude/commands/sparc/refinement-optimization-mode.md +83 -83
- package/.claude/commands/sparc/researcher.md +54 -54
- package/.claude/commands/sparc/reviewer.md +54 -54
- package/.claude/commands/sparc/security-review.md +80 -80
- package/.claude/commands/sparc/sparc-modes.md +174 -174
- package/.claude/commands/sparc/sparc.md +111 -111
- package/.claude/commands/sparc/spec-pseudocode.md +80 -80
- package/.claude/commands/sparc/supabase-admin.md +348 -348
- package/.claude/commands/sparc/swarm-coordinator.md +54 -54
- package/.claude/commands/sparc/tdd.md +54 -54
- package/.claude/commands/sparc/tester.md +54 -54
- package/.claude/commands/sparc/tutorial.md +79 -79
- package/.claude/commands/sparc/workflow-manager.md +54 -54
- package/.claude/commands/sparc.md +166 -166
- package/.claude/commands/stream-chain/pipeline.md +120 -120
- package/.claude/commands/stream-chain/run.md +69 -69
- package/.claude/commands/swarm/README.md +15 -15
- package/.claude/commands/swarm/analysis.md +95 -95
- package/.claude/commands/swarm/development.md +96 -96
- package/.claude/commands/swarm/examples.md +168 -168
- package/.claude/commands/swarm/maintenance.md +102 -102
- package/.claude/commands/swarm/optimization.md +117 -117
- package/.claude/commands/swarm/research.md +136 -136
- package/.claude/commands/swarm/swarm-analysis.md +8 -8
- package/.claude/commands/swarm/swarm-background.md +8 -8
- package/.claude/commands/swarm/swarm-init.md +19 -19
- package/.claude/commands/swarm/swarm-modes.md +8 -8
- package/.claude/commands/swarm/swarm-monitor.md +8 -8
- package/.claude/commands/swarm/swarm-spawn.md +19 -19
- package/.claude/commands/swarm/swarm-status.md +8 -8
- package/.claude/commands/swarm/swarm-strategies.md +8 -8
- package/.claude/commands/swarm/swarm.md +87 -87
- package/.claude/commands/swarm/testing.md +131 -131
- package/.claude/commands/training/README.md +9 -9
- package/.claude/commands/training/model-update.md +25 -25
- package/.claude/commands/training/neural-patterns.md +107 -107
- package/.claude/commands/training/neural-train.md +75 -75
- package/.claude/commands/training/pattern-learn.md +25 -25
- package/.claude/commands/training/specialization.md +62 -62
- package/.claude/commands/truth/start.md +142 -142
- package/.claude/commands/verify/check.md +49 -49
- package/.claude/commands/verify/start.md +127 -127
- package/.claude/commands/workflows/README.md +9 -9
- package/.claude/commands/workflows/development.md +77 -77
- package/.claude/commands/workflows/research.md +62 -62
- package/.claude/commands/workflows/workflow-create.md +25 -25
- package/.claude/commands/workflows/workflow-execute.md +25 -25
- package/.claude/commands/workflows/workflow-export.md +25 -25
- package/.claude/helpers/README.md +96 -96
- package/.claude/helpers/adr-compliance.sh +186 -186
- package/.claude/helpers/auto-commit.sh +178 -178
- package/.claude/helpers/auto-memory-hook.mjs +368 -368
- package/.claude/helpers/checkpoint-manager.sh +251 -251
- package/.claude/helpers/daemon-manager.sh +252 -252
- package/.claude/helpers/ddd-tracker.sh +144 -144
- package/.claude/helpers/github-safe.js +121 -121
- package/.claude/helpers/github-setup.sh +28 -28
- package/.claude/helpers/guidance-hook.sh +13 -13
- package/.claude/helpers/guidance-hooks.sh +102 -102
- package/.claude/helpers/health-monitor.sh +108 -108
- package/.claude/helpers/hook-handler.cjs +278 -278
- package/.claude/helpers/intelligence.cjs +1031 -1031
- package/.claude/helpers/learning-hooks.sh +329 -329
- package/.claude/helpers/learning-optimizer.sh +127 -127
- package/.claude/helpers/learning-service.mjs +1144 -1144
- package/.claude/helpers/memory.js +83 -83
- package/.claude/helpers/metrics-db.mjs +488 -488
- package/.claude/helpers/pattern-consolidator.sh +86 -86
- package/.claude/helpers/perf-worker.sh +160 -160
- package/.claude/helpers/post-commit +16 -16
- package/.claude/helpers/pre-commit +26 -26
- package/.claude/helpers/quick-start.sh +19 -19
- package/.claude/helpers/router.js +66 -66
- package/.claude/helpers/security-scanner.sh +127 -127
- package/.claude/helpers/session.js +135 -135
- package/.claude/helpers/setup-mcp.sh +18 -18
- package/.claude/helpers/standard-checkpoint-hooks.sh +189 -189
- package/.claude/helpers/statusline-hook.sh +21 -21
- package/.claude/helpers/statusline.cjs +575 -575
- package/.claude/helpers/statusline.js +321 -321
- package/.claude/helpers/swarm-comms.sh +353 -353
- package/.claude/helpers/swarm-hooks.sh +761 -761
- package/.claude/helpers/swarm-monitor.sh +210 -210
- package/.claude/helpers/sync-v3-metrics.sh +245 -245
- package/.claude/helpers/update-v3-progress.sh +165 -165
- package/.claude/helpers/v3-quick-status.sh +57 -57
- package/.claude/helpers/v3.sh +110 -110
- package/.claude/helpers/validate-v3-config.sh +215 -215
- package/.claude/helpers/worker-manager.sh +170 -170
- package/.claude/settings.json +182 -182
- package/.claude/skills/agentdb-advanced/SKILL.md +550 -550
- package/.claude/skills/agentdb-learning/SKILL.md +545 -545
- package/.claude/skills/agentdb-memory-patterns/SKILL.md +339 -339
- package/.claude/skills/agentdb-optimization/SKILL.md +509 -509
- package/.claude/skills/agentdb-vector-search/SKILL.md +339 -339
- package/.claude/skills/agentic-jujutsu/SKILL.md +645 -645
- package/.claude/skills/aidefence-scan.md +151 -151
- package/.claude/skills/aidefence.yaml +297 -297
- package/.claude/skills/browser/SKILL.md +204 -204
- package/.claude/skills/flow-nexus-neural/SKILL.md +738 -738
- package/.claude/skills/flow-nexus-platform/SKILL.md +1157 -1157
- package/.claude/skills/flow-nexus-swarm/SKILL.md +610 -610
- package/.claude/skills/github-code-review/SKILL.md +1140 -1140
- package/.claude/skills/github-multi-repo/SKILL.md +874 -874
- package/.claude/skills/github-project-management/SKILL.md +1290 -1277
- package/.claude/skills/github-release-management/SKILL.md +1081 -1081
- package/.claude/skills/github-workflow-automation/SKILL.md +1065 -1065
- package/.claude/skills/hive-mind-advanced/SKILL.md +712 -712
- package/.claude/skills/hooks-automation/SKILL.md +1201 -1201
- package/.claude/skills/pair-programming/SKILL.md +1202 -1202
- package/.claude/skills/performance-analysis/SKILL.md +563 -563
- package/.claude/skills/reasoningbank-agentdb/SKILL.md +446 -446
- package/.claude/skills/reasoningbank-intelligence/SKILL.md +201 -201
- package/.claude/skills/secure-review.md +181 -181
- package/.claude/skills/skill-builder/SKILL.md +910 -910
- package/.claude/skills/sparc-methodology/SKILL.md +1115 -1115
- package/.claude/skills/stream-chain/SKILL.md +563 -563
- package/.claude/skills/swarm-advanced/SKILL.md +973 -973
- package/.claude/skills/swarm-orchestration/SKILL.md +179 -179
- package/.claude/skills/v3-cli-modernization/SKILL.md +871 -871
- package/.claude/skills/v3-core-implementation/SKILL.md +796 -796
- package/.claude/skills/v3-ddd-architecture/SKILL.md +441 -441
- package/.claude/skills/v3-integration-deep/SKILL.md +240 -240
- package/.claude/skills/v3-mcp-optimization/SKILL.md +776 -776
- package/.claude/skills/v3-memory-unification/SKILL.md +173 -173
- package/.claude/skills/v3-performance-optimization/SKILL.md +389 -389
- package/.claude/skills/v3-security-overhaul/SKILL.md +81 -81
- package/.claude/skills/v3-swarm-coordination/SKILL.md +339 -339
- package/.claude/skills/verification-quality/SKILL.md +649 -649
- package/.claude/skills/worker-benchmarks/skill.md +135 -135
- package/.claude/skills/worker-integration/skill.md +154 -154
- package/README.md +393 -391
- package/bin/cli.js +220 -220
- package/bin/mcp-server.js +224 -224
- package/bin/preinstall.cjs +2 -2
- package/dist/src/commands/agent-wasm.js +2 -2
- package/dist/src/commands/agent-wasm.js.map +1 -1
- package/dist/src/commands/completions.js +409 -409
- package/dist/src/commands/daemon.d.ts.map +1 -1
- package/dist/src/commands/daemon.js +19 -3
- package/dist/src/commands/daemon.js.map +1 -1
- package/dist/src/commands/doctor.d.ts.map +1 -1
- package/dist/src/commands/doctor.js +105 -23
- package/dist/src/commands/doctor.js.map +1 -1
- package/dist/src/commands/embeddings.js +26 -26
- package/dist/src/commands/hive-mind.d.ts.map +1 -1
- package/dist/src/commands/hive-mind.js +122 -104
- package/dist/src/commands/hive-mind.js.map +1 -1
- package/dist/src/commands/hooks.d.ts.map +1 -1
- package/dist/src/commands/hooks.js +34 -21
- package/dist/src/commands/hooks.js.map +1 -1
- package/dist/src/commands/memory.d.ts.map +1 -1
- package/dist/src/commands/memory.js +68 -0
- package/dist/src/commands/memory.js.map +1 -1
- package/dist/src/commands/ruvector/backup.js +23 -23
- package/dist/src/commands/ruvector/benchmark.js +31 -31
- package/dist/src/commands/ruvector/import.js +14 -14
- package/dist/src/commands/ruvector/init.js +115 -115
- package/dist/src/commands/ruvector/migrate.js +99 -99
- package/dist/src/commands/ruvector/optimize.js +51 -51
- package/dist/src/commands/ruvector/setup.js +624 -624
- package/dist/src/commands/ruvector/status.js +38 -38
- package/dist/src/index.d.ts +5 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +59 -18
- package/dist/src/index.js.map +1 -1
- package/dist/src/init/claudemd-generator.js +226 -226
- package/dist/src/init/executor.d.ts.map +1 -1
- package/dist/src/init/executor.js +511 -453
- package/dist/src/init/executor.js.map +1 -1
- package/dist/src/init/helpers-generator.js +645 -645
- package/dist/src/init/settings-generator.d.ts.map +1 -1
- package/dist/src/init/settings-generator.js +11 -5
- package/dist/src/init/settings-generator.js.map +1 -1
- package/dist/src/init/statusline-generator.js +858 -858
- package/dist/src/init/types.d.ts +7 -0
- package/dist/src/init/types.d.ts.map +1 -1
- package/dist/src/init/types.js.map +1 -1
- package/dist/src/mcp-tools/agentdb-tools.d.ts +3 -0
- package/dist/src/mcp-tools/agentdb-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/agentdb-tools.js +108 -0
- package/dist/src/mcp-tools/agentdb-tools.js.map +1 -1
- package/dist/src/mcp-tools/hooks-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/hooks-tools.js +4 -2
- package/dist/src/mcp-tools/hooks-tools.js.map +1 -1
- package/dist/src/mcp-tools/memory-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/memory-tools.js +19 -0
- package/dist/src/mcp-tools/memory-tools.js.map +1 -1
- package/dist/src/mcp-tools/neural-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/neural-tools.js +14 -1
- package/dist/src/mcp-tools/neural-tools.js.map +1 -1
- package/dist/src/mcp-tools/security-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/security-tools.js +28 -3
- package/dist/src/mcp-tools/security-tools.js.map +1 -1
- package/dist/src/mcp-tools/swarm-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/swarm-tools.js +72 -3
- package/dist/src/mcp-tools/swarm-tools.js.map +1 -1
- package/dist/src/mcp-tools/types.d.ts +4 -33
- package/dist/src/mcp-tools/types.d.ts.map +1 -1
- package/dist/src/mcp-tools/types.js +4 -14
- package/dist/src/mcp-tools/types.js.map +1 -1
- package/dist/src/mcp-tools/validate-input.d.ts +5 -57
- package/dist/src/mcp-tools/validate-input.d.ts.map +1 -1
- package/dist/src/mcp-tools/validate-input.js +5 -233
- package/dist/src/mcp-tools/validate-input.js.map +1 -1
- package/dist/src/mcp-tools/wasm-agent-tools.js +1 -1
- package/dist/src/mcp-tools/wasm-agent-tools.js.map +1 -1
- package/dist/src/memory/intelligence.d.ts.map +1 -1
- package/dist/src/memory/intelligence.js +28 -3
- package/dist/src/memory/intelligence.js.map +1 -1
- package/dist/src/memory/memory-bridge.d.ts +69 -0
- package/dist/src/memory/memory-bridge.d.ts.map +1 -1
- package/dist/src/memory/memory-bridge.js +319 -66
- package/dist/src/memory/memory-bridge.js.map +1 -1
- package/dist/src/memory/memory-initializer.d.ts +5 -0
- package/dist/src/memory/memory-initializer.d.ts.map +1 -1
- package/dist/src/memory/memory-initializer.js +369 -363
- package/dist/src/memory/memory-initializer.js.map +1 -1
- package/dist/src/memory/neural-package-bridge.d.ts +48 -0
- package/dist/src/memory/neural-package-bridge.d.ts.map +1 -0
- package/dist/src/memory/neural-package-bridge.js +87 -0
- package/dist/src/memory/neural-package-bridge.js.map +1 -0
- package/dist/src/memory/rabitq-index.js +5 -5
- package/dist/src/memory/sona-optimizer.d.ts.map +1 -1
- package/dist/src/memory/sona-optimizer.js +1 -0
- package/dist/src/memory/sona-optimizer.js.map +1 -1
- package/dist/src/output.d.ts +6 -130
- package/dist/src/output.d.ts.map +1 -1
- package/dist/src/output.js +6 -511
- package/dist/src/output.js.map +1 -1
- package/dist/src/parser.d.ts +9 -0
- package/dist/src/parser.d.ts.map +1 -1
- package/dist/src/parser.js +11 -0
- package/dist/src/parser.js.map +1 -1
- package/dist/src/runtime/headless.js +28 -28
- package/dist/src/ruvector/agent-wasm.d.ts.map +1 -1
- package/dist/src/ruvector/agent-wasm.js +4 -1
- package/dist/src/ruvector/agent-wasm.js.map +1 -1
- package/dist/src/ruvector/index.d.ts +0 -2
- package/dist/src/ruvector/index.d.ts.map +1 -1
- package/dist/src/ruvector/index.js +8 -2
- package/dist/src/ruvector/index.js.map +1 -1
- package/dist/src/ruvector/model-router.d.ts +22 -1
- package/dist/src/ruvector/model-router.d.ts.map +1 -1
- package/dist/src/ruvector/model-router.js +125 -5
- package/dist/src/ruvector/model-router.js.map +1 -1
- package/dist/src/services/headless-worker-executor.js +84 -84
- package/dist/src/transfer/deploy-seraphine.js +23 -23
- package/dist/src/types.d.ts +10 -195
- package/dist/src/types.d.ts.map +1 -1
- package/dist/src/types.js +10 -35
- package/dist/src/types.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +6 -4
- package/scripts/deploy-ipfs-node.sh +153 -153
- package/scripts/postinstall.cjs +153 -153
- package/scripts/publish-registry.ts +345 -345
- package/scripts/publish.sh +57 -57
- package/scripts/setup-ipfs-registry.md +366 -366
- package/dist/src/services/event-stream.d.ts.map +0 -1
- package/dist/src/services/event-stream.js.map +0 -1
- package/dist/src/services/loop-worker-runner.d.ts.map +0 -1
- package/dist/src/services/loop-worker-runner.js.map +0 -1
- package/dist/src/services/runtime-capabilities.d.ts.map +0 -1
- package/dist/src/services/runtime-capabilities.js.map +0 -1
|
@@ -1,278 +1,278 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
/**
|
|
3
|
-
* Claude Flow Hook Handler (Cross-Platform)
|
|
4
|
-
* Dispatches hook events to the appropriate helper modules.
|
|
5
|
-
*
|
|
6
|
-
* Usage: node hook-handler.cjs <command> [args...]
|
|
7
|
-
*
|
|
8
|
-
* Commands:
|
|
9
|
-
* route - Route a task to optimal agent (reads PROMPT from env/stdin)
|
|
10
|
-
* pre-bash - Validate command safety before execution
|
|
11
|
-
* post-edit - Record edit outcome for learning
|
|
12
|
-
* session-restore - Restore previous session state
|
|
13
|
-
* session-end - End session and persist state
|
|
14
|
-
*/
|
|
15
|
-
|
|
16
|
-
const path = require('path');
|
|
17
|
-
const fs = require('fs');
|
|
18
|
-
|
|
19
|
-
const helpersDir = __dirname;
|
|
20
|
-
|
|
21
|
-
// Safe require with stdout suppression - the helper modules have CLI
|
|
22
|
-
// sections that run unconditionally on require(), so we mute console
|
|
23
|
-
// during the require to prevent noisy output.
|
|
24
|
-
function safeRequire(modulePath) {
|
|
25
|
-
try {
|
|
26
|
-
if (fs.existsSync(modulePath)) {
|
|
27
|
-
const origLog = console.log;
|
|
28
|
-
const origError = console.error;
|
|
29
|
-
console.log = () => {};
|
|
30
|
-
console.error = () => {};
|
|
31
|
-
try {
|
|
32
|
-
const mod = require(modulePath);
|
|
33
|
-
return mod;
|
|
34
|
-
} finally {
|
|
35
|
-
console.log = origLog;
|
|
36
|
-
console.error = origError;
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
} catch (e) {
|
|
40
|
-
// silently fail
|
|
41
|
-
}
|
|
42
|
-
return null;
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
const router = safeRequire(path.join(helpersDir, 'router.js'));
|
|
46
|
-
const session = safeRequire(path.join(helpersDir, 'session.js'));
|
|
47
|
-
const memory = safeRequire(path.join(helpersDir, 'memory.js'));
|
|
48
|
-
const intelligence = safeRequire(path.join(helpersDir, 'intelligence.cjs'));
|
|
49
|
-
|
|
50
|
-
// ── Intelligence timeout protection (fixes #1530, #1531) ───────────────────
|
|
51
|
-
const INTELLIGENCE_TIMEOUT_MS = 3000;
|
|
52
|
-
function runWithTimeout(fn, label) {
|
|
53
|
-
// For synchronous blocking calls, we use a global safety timer.
|
|
54
|
-
// The readJSON file-size guard prevents loading huge files, but this
|
|
55
|
-
// is an additional safety net.
|
|
56
|
-
return new Promise((resolve) => {
|
|
57
|
-
const timer = setTimeout(() => {
|
|
58
|
-
process.stderr.write("[WARN] " + label + " timed out after " + INTELLIGENCE_TIMEOUT_MS + "ms, skipping\n");
|
|
59
|
-
resolve(null);
|
|
60
|
-
}, INTELLIGENCE_TIMEOUT_MS);
|
|
61
|
-
try {
|
|
62
|
-
const result = fn();
|
|
63
|
-
clearTimeout(timer);
|
|
64
|
-
resolve(result);
|
|
65
|
-
} catch (e) {
|
|
66
|
-
clearTimeout(timer);
|
|
67
|
-
resolve(null);
|
|
68
|
-
}
|
|
69
|
-
});
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
// Get the command from argv
|
|
74
|
-
const [,, command, ...args] = process.argv;
|
|
75
|
-
|
|
76
|
-
// Read stdin with timeout — Claude Code sends hook data as JSON via stdin.
|
|
77
|
-
// Timeout prevents hanging when stdin is not properly closed (common on Windows).
|
|
78
|
-
async function readStdin() {
|
|
79
|
-
if (process.stdin.isTTY) return '';
|
|
80
|
-
return new Promise((resolve) => {
|
|
81
|
-
let data = '';
|
|
82
|
-
const timer = setTimeout(() => {
|
|
83
|
-
process.stdin.removeAllListeners();
|
|
84
|
-
process.stdin.pause();
|
|
85
|
-
resolve(data);
|
|
86
|
-
}, 500);
|
|
87
|
-
process.stdin.setEncoding('utf8');
|
|
88
|
-
process.stdin.on('data', (chunk) => { data += chunk; });
|
|
89
|
-
process.stdin.on('end', () => { clearTimeout(timer); resolve(data); });
|
|
90
|
-
process.stdin.on('error', () => { clearTimeout(timer); resolve(data); });
|
|
91
|
-
process.stdin.resume();
|
|
92
|
-
});
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
async function main() {
|
|
96
|
-
// Global safety timeout: hooks must NEVER hang (#1530, #1531)
|
|
97
|
-
const safetyTimer = setTimeout(() => {
|
|
98
|
-
process.stderr.write("[WARN] Hook handler global timeout (5s), forcing exit\n");
|
|
99
|
-
process.exit(0);
|
|
100
|
-
}, 5000);
|
|
101
|
-
safetyTimer.unref(); // don't keep process alive just for this timer
|
|
102
|
-
|
|
103
|
-
let stdinData = '';
|
|
104
|
-
try { stdinData = await readStdin(); } catch (e) { /* ignore stdin errors */ }
|
|
105
|
-
|
|
106
|
-
let hookInput = {};
|
|
107
|
-
if (stdinData.trim()) {
|
|
108
|
-
try { hookInput = JSON.parse(stdinData); } catch (e) { /* ignore parse errors */ }
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
// Normalize snake_case/camelCase: Claude Code sends tool_input/tool_name (snake_case)
|
|
112
|
-
const toolInput = hookInput.toolInput || hookInput.tool_input || {};
|
|
113
|
-
const toolName = hookInput.toolName || hookInput.tool_name || '';
|
|
114
|
-
|
|
115
|
-
// Merge stdin data into prompt resolution: prefer stdin fields, then env, then argv
|
|
116
|
-
const prompt = hookInput.prompt || hookInput.command || toolInput
|
|
117
|
-
|| process.env.PROMPT || process.env.TOOL_INPUT_command || args.join(' ') || '';
|
|
118
|
-
|
|
119
|
-
const handlers = {
|
|
120
|
-
'route': () => {
|
|
121
|
-
// Inject ranked intelligence context before routing
|
|
122
|
-
if (intelligence && intelligence.getContext) {
|
|
123
|
-
try {
|
|
124
|
-
const ctx = intelligence.getContext(prompt);
|
|
125
|
-
if (ctx) console.log(ctx);
|
|
126
|
-
} catch (e) { /* non-fatal */ }
|
|
127
|
-
}
|
|
128
|
-
if (router && router.routeTask) {
|
|
129
|
-
const result = router.routeTask(prompt);
|
|
130
|
-
// Format output for Claude Code hook consumption — real data only
|
|
131
|
-
const output = [
|
|
132
|
-
`[INFO] Routing task: ${prompt.substring(0, 80) || '(no prompt)'}`,
|
|
133
|
-
'',
|
|
134
|
-
'+------------------- Primary Recommendation -------------------+',
|
|
135
|
-
`| Agent: ${result.agent.padEnd(53)}|`,
|
|
136
|
-
`| Confidence: ${(result.confidence * 100).toFixed(1)}%${' '.repeat(44)}|`,
|
|
137
|
-
`| Reason: ${(result.reason || '').substring(0, 53).padEnd(53)}|`,
|
|
138
|
-
'+--------------------------------------------------------------+',
|
|
139
|
-
];
|
|
140
|
-
console.log(output.join('\n'));
|
|
141
|
-
} else {
|
|
142
|
-
console.log('[INFO] Router not available, using default routing');
|
|
143
|
-
}
|
|
144
|
-
},
|
|
145
|
-
|
|
146
|
-
'pre-bash': () => {
|
|
147
|
-
// Basic command safety check — prefer stdin command data from Claude Code
|
|
148
|
-
const cmd = (hookInput.command || prompt).toLowerCase();
|
|
149
|
-
const dangerous = ['rm -rf /', 'format c:', 'del /s /q c:\\', ':(){:|:&};:'];
|
|
150
|
-
for (const d of dangerous) {
|
|
151
|
-
if (cmd.includes(d)) {
|
|
152
|
-
console.error(`[BLOCKED] Dangerous command detected: ${d}`);
|
|
153
|
-
process.exit(1);
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
console.log('[OK] Command validated');
|
|
157
|
-
},
|
|
158
|
-
|
|
159
|
-
'post-edit': () => {
|
|
160
|
-
// Record edit for session metrics
|
|
161
|
-
if (session && session.metric) {
|
|
162
|
-
try { session.metric('edits'); } catch (e) { /* no active session */ }
|
|
163
|
-
}
|
|
164
|
-
// Record edit for intelligence consolidation — prefer stdin data from Claude Code
|
|
165
|
-
if (intelligence && intelligence.recordEdit) {
|
|
166
|
-
try {
|
|
167
|
-
const file = hookInput.file_path || toolInput.file_path
|
|
168
|
-
|| process.env.TOOL_INPUT_file_path || args[0] || '';
|
|
169
|
-
intelligence.recordEdit(file);
|
|
170
|
-
} catch (e) { /* non-fatal */ }
|
|
171
|
-
}
|
|
172
|
-
console.log('[OK] Edit recorded');
|
|
173
|
-
},
|
|
174
|
-
|
|
175
|
-
'session-restore': async () => {
|
|
176
|
-
if (session) {
|
|
177
|
-
// Try restore first, fall back to start
|
|
178
|
-
const existing = session.restore && session.restore();
|
|
179
|
-
if (!existing) {
|
|
180
|
-
session.start && session.start();
|
|
181
|
-
}
|
|
182
|
-
} else {
|
|
183
|
-
// Minimal session restore output
|
|
184
|
-
const sessionId = `session-${Date.now()}`;
|
|
185
|
-
console.log(`[INFO] Restoring session: %SESSION_ID%`);
|
|
186
|
-
console.log('');
|
|
187
|
-
console.log(`[OK] Session restored from %SESSION_ID%`);
|
|
188
|
-
console.log(`New session ID: ${sessionId}`);
|
|
189
|
-
console.log('');
|
|
190
|
-
console.log('Restored State');
|
|
191
|
-
console.log('+----------------+-------+');
|
|
192
|
-
console.log('| Item | Count |');
|
|
193
|
-
console.log('+----------------+-------+');
|
|
194
|
-
console.log('| Tasks | 0 |');
|
|
195
|
-
console.log('| Agents | 0 |');
|
|
196
|
-
console.log('| Memory Entries | 0 |');
|
|
197
|
-
console.log('+----------------+-------+');
|
|
198
|
-
}
|
|
199
|
-
// Initialize intelligence graph after session restore (with timeout — #1530)
|
|
200
|
-
if (intelligence && intelligence.init) {
|
|
201
|
-
const initResult = await runWithTimeout(() => intelligence.init(), 'intelligence.init()');
|
|
202
|
-
if (initResult && initResult.nodes > 0) {
|
|
203
|
-
console.log(`[INTELLIGENCE] Loaded ${initResult.nodes} patterns, ${initResult.edges} edges`);
|
|
204
|
-
}
|
|
205
|
-
}
|
|
206
|
-
},
|
|
207
|
-
|
|
208
|
-
'session-end': async () => {
|
|
209
|
-
// Consolidate intelligence before ending session (with timeout — #1530)
|
|
210
|
-
if (intelligence && intelligence.consolidate) {
|
|
211
|
-
const consResult = await runWithTimeout(() => intelligence.consolidate(), 'intelligence.consolidate()');
|
|
212
|
-
if (consResult && consResult.entries > 0) {
|
|
213
|
-
console.log(`[INTELLIGENCE] Consolidated: ${consResult.entries} entries, ${consResult.edges} edges${consResult.newEntries > 0 ? `, ${consResult.newEntries} new` : ''}, PageRank recomputed`);
|
|
214
|
-
}
|
|
215
|
-
}
|
|
216
|
-
if (session && session.end) {
|
|
217
|
-
session.end();
|
|
218
|
-
} else {
|
|
219
|
-
console.log('[OK] Session ended');
|
|
220
|
-
}
|
|
221
|
-
},
|
|
222
|
-
|
|
223
|
-
'pre-task': () => {
|
|
224
|
-
if (session && session.metric) {
|
|
225
|
-
try { session.metric('tasks'); } catch (e) { /* no active session */ }
|
|
226
|
-
}
|
|
227
|
-
// Route the task if router is available
|
|
228
|
-
if (router && router.routeTask && prompt) {
|
|
229
|
-
const result = router.routeTask(prompt);
|
|
230
|
-
console.log(`[INFO] Task routed to: ${result.agent} (confidence: ${result.confidence})`);
|
|
231
|
-
} else {
|
|
232
|
-
console.log('[OK] Task started');
|
|
233
|
-
}
|
|
234
|
-
},
|
|
235
|
-
|
|
236
|
-
'post-task': () => {
|
|
237
|
-
// Implicit success feedback for intelligence
|
|
238
|
-
if (intelligence && intelligence.feedback) {
|
|
239
|
-
try {
|
|
240
|
-
intelligence.feedback(true);
|
|
241
|
-
} catch (e) { /* non-fatal */ }
|
|
242
|
-
}
|
|
243
|
-
console.log('[OK] Task completed');
|
|
244
|
-
},
|
|
245
|
-
|
|
246
|
-
'stats': () => {
|
|
247
|
-
if (intelligence && intelligence.stats) {
|
|
248
|
-
intelligence.stats(args.includes('--json'));
|
|
249
|
-
} else {
|
|
250
|
-
console.log('[WARN] Intelligence module not available. Run session-restore first.');
|
|
251
|
-
}
|
|
252
|
-
},
|
|
253
|
-
};
|
|
254
|
-
|
|
255
|
-
// Execute the handler
|
|
256
|
-
if (command && handlers[command]) {
|
|
257
|
-
try {
|
|
258
|
-
await Promise.resolve(handlers[command]());
|
|
259
|
-
} catch (e) {
|
|
260
|
-
// Hooks should never crash Claude Code - fail silently
|
|
261
|
-
console.log(`[WARN] Hook ${command} encountered an error: ${e.message}`);
|
|
262
|
-
}
|
|
263
|
-
} else if (command) {
|
|
264
|
-
// Unknown command - pass through without error
|
|
265
|
-
console.log(`[OK] Hook: ${command}`);
|
|
266
|
-
} else {
|
|
267
|
-
console.log('Usage: hook-handler.cjs <route|pre-bash|post-edit|session-restore|session-end|pre-task|post-task|stats>');
|
|
268
|
-
}
|
|
269
|
-
}
|
|
270
|
-
|
|
271
|
-
// Hooks must ALWAYS exit 0 — Claude Code treats non-zero as "hook error"
|
|
272
|
-
// and skips all subsequent hooks for the event.
|
|
273
|
-
process.exitCode = 0;
|
|
274
|
-
main().catch((e) => {
|
|
275
|
-
try { console.log(`[WARN] Hook handler error: ${e.message}`); } catch (_) {}
|
|
276
|
-
}).finally(() => {
|
|
277
|
-
process.exit(0);
|
|
278
|
-
});
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Claude Flow Hook Handler (Cross-Platform)
|
|
4
|
+
* Dispatches hook events to the appropriate helper modules.
|
|
5
|
+
*
|
|
6
|
+
* Usage: node hook-handler.cjs <command> [args...]
|
|
7
|
+
*
|
|
8
|
+
* Commands:
|
|
9
|
+
* route - Route a task to optimal agent (reads PROMPT from env/stdin)
|
|
10
|
+
* pre-bash - Validate command safety before execution
|
|
11
|
+
* post-edit - Record edit outcome for learning
|
|
12
|
+
* session-restore - Restore previous session state
|
|
13
|
+
* session-end - End session and persist state
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
const path = require('path');
|
|
17
|
+
const fs = require('fs');
|
|
18
|
+
|
|
19
|
+
const helpersDir = __dirname;
|
|
20
|
+
|
|
21
|
+
// Safe require with stdout suppression - the helper modules have CLI
|
|
22
|
+
// sections that run unconditionally on require(), so we mute console
|
|
23
|
+
// during the require to prevent noisy output.
|
|
24
|
+
function safeRequire(modulePath) {
|
|
25
|
+
try {
|
|
26
|
+
if (fs.existsSync(modulePath)) {
|
|
27
|
+
const origLog = console.log;
|
|
28
|
+
const origError = console.error;
|
|
29
|
+
console.log = () => {};
|
|
30
|
+
console.error = () => {};
|
|
31
|
+
try {
|
|
32
|
+
const mod = require(modulePath);
|
|
33
|
+
return mod;
|
|
34
|
+
} finally {
|
|
35
|
+
console.log = origLog;
|
|
36
|
+
console.error = origError;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
} catch (e) {
|
|
40
|
+
// silently fail
|
|
41
|
+
}
|
|
42
|
+
return null;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
const router = safeRequire(path.join(helpersDir, 'router.js'));
|
|
46
|
+
const session = safeRequire(path.join(helpersDir, 'session.js'));
|
|
47
|
+
const memory = safeRequire(path.join(helpersDir, 'memory.js'));
|
|
48
|
+
const intelligence = safeRequire(path.join(helpersDir, 'intelligence.cjs'));
|
|
49
|
+
|
|
50
|
+
// ── Intelligence timeout protection (fixes #1530, #1531) ───────────────────
|
|
51
|
+
const INTELLIGENCE_TIMEOUT_MS = 3000;
|
|
52
|
+
function runWithTimeout(fn, label) {
|
|
53
|
+
// For synchronous blocking calls, we use a global safety timer.
|
|
54
|
+
// The readJSON file-size guard prevents loading huge files, but this
|
|
55
|
+
// is an additional safety net.
|
|
56
|
+
return new Promise((resolve) => {
|
|
57
|
+
const timer = setTimeout(() => {
|
|
58
|
+
process.stderr.write("[WARN] " + label + " timed out after " + INTELLIGENCE_TIMEOUT_MS + "ms, skipping\n");
|
|
59
|
+
resolve(null);
|
|
60
|
+
}, INTELLIGENCE_TIMEOUT_MS);
|
|
61
|
+
try {
|
|
62
|
+
const result = fn();
|
|
63
|
+
clearTimeout(timer);
|
|
64
|
+
resolve(result);
|
|
65
|
+
} catch (e) {
|
|
66
|
+
clearTimeout(timer);
|
|
67
|
+
resolve(null);
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
// Get the command from argv
|
|
74
|
+
const [,, command, ...args] = process.argv;
|
|
75
|
+
|
|
76
|
+
// Read stdin with timeout — Claude Code sends hook data as JSON via stdin.
|
|
77
|
+
// Timeout prevents hanging when stdin is not properly closed (common on Windows).
|
|
78
|
+
async function readStdin() {
|
|
79
|
+
if (process.stdin.isTTY) return '';
|
|
80
|
+
return new Promise((resolve) => {
|
|
81
|
+
let data = '';
|
|
82
|
+
const timer = setTimeout(() => {
|
|
83
|
+
process.stdin.removeAllListeners();
|
|
84
|
+
process.stdin.pause();
|
|
85
|
+
resolve(data);
|
|
86
|
+
}, 500);
|
|
87
|
+
process.stdin.setEncoding('utf8');
|
|
88
|
+
process.stdin.on('data', (chunk) => { data += chunk; });
|
|
89
|
+
process.stdin.on('end', () => { clearTimeout(timer); resolve(data); });
|
|
90
|
+
process.stdin.on('error', () => { clearTimeout(timer); resolve(data); });
|
|
91
|
+
process.stdin.resume();
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
async function main() {
|
|
96
|
+
// Global safety timeout: hooks must NEVER hang (#1530, #1531)
|
|
97
|
+
const safetyTimer = setTimeout(() => {
|
|
98
|
+
process.stderr.write("[WARN] Hook handler global timeout (5s), forcing exit\n");
|
|
99
|
+
process.exit(0);
|
|
100
|
+
}, 5000);
|
|
101
|
+
safetyTimer.unref(); // don't keep process alive just for this timer
|
|
102
|
+
|
|
103
|
+
let stdinData = '';
|
|
104
|
+
try { stdinData = await readStdin(); } catch (e) { /* ignore stdin errors */ }
|
|
105
|
+
|
|
106
|
+
let hookInput = {};
|
|
107
|
+
if (stdinData.trim()) {
|
|
108
|
+
try { hookInput = JSON.parse(stdinData); } catch (e) { /* ignore parse errors */ }
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
// Normalize snake_case/camelCase: Claude Code sends tool_input/tool_name (snake_case)
|
|
112
|
+
const toolInput = hookInput.toolInput || hookInput.tool_input || {};
|
|
113
|
+
const toolName = hookInput.toolName || hookInput.tool_name || '';
|
|
114
|
+
|
|
115
|
+
// Merge stdin data into prompt resolution: prefer stdin fields, then env, then argv
|
|
116
|
+
const prompt = hookInput.prompt || hookInput.command || toolInput
|
|
117
|
+
|| process.env.PROMPT || process.env.TOOL_INPUT_command || args.join(' ') || '';
|
|
118
|
+
|
|
119
|
+
const handlers = {
|
|
120
|
+
'route': () => {
|
|
121
|
+
// Inject ranked intelligence context before routing
|
|
122
|
+
if (intelligence && intelligence.getContext) {
|
|
123
|
+
try {
|
|
124
|
+
const ctx = intelligence.getContext(prompt);
|
|
125
|
+
if (ctx) console.log(ctx);
|
|
126
|
+
} catch (e) { /* non-fatal */ }
|
|
127
|
+
}
|
|
128
|
+
if (router && router.routeTask) {
|
|
129
|
+
const result = router.routeTask(prompt);
|
|
130
|
+
// Format output for Claude Code hook consumption — real data only
|
|
131
|
+
const output = [
|
|
132
|
+
`[INFO] Routing task: ${prompt.substring(0, 80) || '(no prompt)'}`,
|
|
133
|
+
'',
|
|
134
|
+
'+------------------- Primary Recommendation -------------------+',
|
|
135
|
+
`| Agent: ${result.agent.padEnd(53)}|`,
|
|
136
|
+
`| Confidence: ${(result.confidence * 100).toFixed(1)}%${' '.repeat(44)}|`,
|
|
137
|
+
`| Reason: ${(result.reason || '').substring(0, 53).padEnd(53)}|`,
|
|
138
|
+
'+--------------------------------------------------------------+',
|
|
139
|
+
];
|
|
140
|
+
console.log(output.join('\n'));
|
|
141
|
+
} else {
|
|
142
|
+
console.log('[INFO] Router not available, using default routing');
|
|
143
|
+
}
|
|
144
|
+
},
|
|
145
|
+
|
|
146
|
+
'pre-bash': () => {
|
|
147
|
+
// Basic command safety check — prefer stdin command data from Claude Code
|
|
148
|
+
const cmd = (hookInput.command || prompt).toLowerCase();
|
|
149
|
+
const dangerous = ['rm -rf /', 'format c:', 'del /s /q c:\\', ':(){:|:&};:'];
|
|
150
|
+
for (const d of dangerous) {
|
|
151
|
+
if (cmd.includes(d)) {
|
|
152
|
+
console.error(`[BLOCKED] Dangerous command detected: ${d}`);
|
|
153
|
+
process.exit(1);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
console.log('[OK] Command validated');
|
|
157
|
+
},
|
|
158
|
+
|
|
159
|
+
'post-edit': () => {
|
|
160
|
+
// Record edit for session metrics
|
|
161
|
+
if (session && session.metric) {
|
|
162
|
+
try { session.metric('edits'); } catch (e) { /* no active session */ }
|
|
163
|
+
}
|
|
164
|
+
// Record edit for intelligence consolidation — prefer stdin data from Claude Code
|
|
165
|
+
if (intelligence && intelligence.recordEdit) {
|
|
166
|
+
try {
|
|
167
|
+
const file = hookInput.file_path || toolInput.file_path
|
|
168
|
+
|| process.env.TOOL_INPUT_file_path || args[0] || '';
|
|
169
|
+
intelligence.recordEdit(file);
|
|
170
|
+
} catch (e) { /* non-fatal */ }
|
|
171
|
+
}
|
|
172
|
+
console.log('[OK] Edit recorded');
|
|
173
|
+
},
|
|
174
|
+
|
|
175
|
+
'session-restore': async () => {
|
|
176
|
+
if (session) {
|
|
177
|
+
// Try restore first, fall back to start
|
|
178
|
+
const existing = session.restore && session.restore();
|
|
179
|
+
if (!existing) {
|
|
180
|
+
session.start && session.start();
|
|
181
|
+
}
|
|
182
|
+
} else {
|
|
183
|
+
// Minimal session restore output
|
|
184
|
+
const sessionId = `session-${Date.now()}`;
|
|
185
|
+
console.log(`[INFO] Restoring session: %SESSION_ID%`);
|
|
186
|
+
console.log('');
|
|
187
|
+
console.log(`[OK] Session restored from %SESSION_ID%`);
|
|
188
|
+
console.log(`New session ID: ${sessionId}`);
|
|
189
|
+
console.log('');
|
|
190
|
+
console.log('Restored State');
|
|
191
|
+
console.log('+----------------+-------+');
|
|
192
|
+
console.log('| Item | Count |');
|
|
193
|
+
console.log('+----------------+-------+');
|
|
194
|
+
console.log('| Tasks | 0 |');
|
|
195
|
+
console.log('| Agents | 0 |');
|
|
196
|
+
console.log('| Memory Entries | 0 |');
|
|
197
|
+
console.log('+----------------+-------+');
|
|
198
|
+
}
|
|
199
|
+
// Initialize intelligence graph after session restore (with timeout — #1530)
|
|
200
|
+
if (intelligence && intelligence.init) {
|
|
201
|
+
const initResult = await runWithTimeout(() => intelligence.init(), 'intelligence.init()');
|
|
202
|
+
if (initResult && initResult.nodes > 0) {
|
|
203
|
+
console.log(`[INTELLIGENCE] Loaded ${initResult.nodes} patterns, ${initResult.edges} edges`);
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
},
|
|
207
|
+
|
|
208
|
+
'session-end': async () => {
|
|
209
|
+
// Consolidate intelligence before ending session (with timeout — #1530)
|
|
210
|
+
if (intelligence && intelligence.consolidate) {
|
|
211
|
+
const consResult = await runWithTimeout(() => intelligence.consolidate(), 'intelligence.consolidate()');
|
|
212
|
+
if (consResult && consResult.entries > 0) {
|
|
213
|
+
console.log(`[INTELLIGENCE] Consolidated: ${consResult.entries} entries, ${consResult.edges} edges${consResult.newEntries > 0 ? `, ${consResult.newEntries} new` : ''}, PageRank recomputed`);
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
if (session && session.end) {
|
|
217
|
+
session.end();
|
|
218
|
+
} else {
|
|
219
|
+
console.log('[OK] Session ended');
|
|
220
|
+
}
|
|
221
|
+
},
|
|
222
|
+
|
|
223
|
+
'pre-task': () => {
|
|
224
|
+
if (session && session.metric) {
|
|
225
|
+
try { session.metric('tasks'); } catch (e) { /* no active session */ }
|
|
226
|
+
}
|
|
227
|
+
// Route the task if router is available
|
|
228
|
+
if (router && router.routeTask && prompt) {
|
|
229
|
+
const result = router.routeTask(prompt);
|
|
230
|
+
console.log(`[INFO] Task routed to: ${result.agent} (confidence: ${result.confidence})`);
|
|
231
|
+
} else {
|
|
232
|
+
console.log('[OK] Task started');
|
|
233
|
+
}
|
|
234
|
+
},
|
|
235
|
+
|
|
236
|
+
'post-task': () => {
|
|
237
|
+
// Implicit success feedback for intelligence
|
|
238
|
+
if (intelligence && intelligence.feedback) {
|
|
239
|
+
try {
|
|
240
|
+
intelligence.feedback(true);
|
|
241
|
+
} catch (e) { /* non-fatal */ }
|
|
242
|
+
}
|
|
243
|
+
console.log('[OK] Task completed');
|
|
244
|
+
},
|
|
245
|
+
|
|
246
|
+
'stats': () => {
|
|
247
|
+
if (intelligence && intelligence.stats) {
|
|
248
|
+
intelligence.stats(args.includes('--json'));
|
|
249
|
+
} else {
|
|
250
|
+
console.log('[WARN] Intelligence module not available. Run session-restore first.');
|
|
251
|
+
}
|
|
252
|
+
},
|
|
253
|
+
};
|
|
254
|
+
|
|
255
|
+
// Execute the handler
|
|
256
|
+
if (command && handlers[command]) {
|
|
257
|
+
try {
|
|
258
|
+
await Promise.resolve(handlers[command]());
|
|
259
|
+
} catch (e) {
|
|
260
|
+
// Hooks should never crash Claude Code - fail silently
|
|
261
|
+
console.log(`[WARN] Hook ${command} encountered an error: ${e.message}`);
|
|
262
|
+
}
|
|
263
|
+
} else if (command) {
|
|
264
|
+
// Unknown command - pass through without error
|
|
265
|
+
console.log(`[OK] Hook: ${command}`);
|
|
266
|
+
} else {
|
|
267
|
+
console.log('Usage: hook-handler.cjs <route|pre-bash|post-edit|session-restore|session-end|pre-task|post-task|stats>');
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
// Hooks must ALWAYS exit 0 — Claude Code treats non-zero as "hook error"
|
|
272
|
+
// and skips all subsequent hooks for the event.
|
|
273
|
+
process.exitCode = 0;
|
|
274
|
+
main().catch((e) => {
|
|
275
|
+
try { console.log(`[WARN] Hook handler error: ${e.message}`); } catch (_) {}
|
|
276
|
+
}).finally(() => {
|
|
277
|
+
process.exit(0);
|
|
278
|
+
});
|