claude-flow 3.32.8 → 3.32.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/.proven-config-version +1 -0
- package/.claude/agents/MIGRATION_SUMMARY.md +221 -221
- package/.claude/agents/analysis/analyze-code-quality.md +57 -57
- package/.claude/agents/analysis/code-analyzer.md +188 -188
- package/.claude/agents/analysis/code-review/analyze-code-quality.md +57 -57
- package/.claude/agents/architecture/system-design/arch-system-design.md +35 -35
- package/.claude/agents/base-template-generator.md +41 -41
- package/.claude/agents/consensus/byzantine-coordinator.md +42 -42
- package/.claude/agents/consensus/crdt-synchronizer.md +976 -976
- package/.claude/agents/consensus/gossip-coordinator.md +42 -42
- package/.claude/agents/consensus/performance-benchmarker.md +830 -830
- package/.claude/agents/consensus/quorum-manager.md +802 -802
- package/.claude/agents/consensus/raft-manager.md +42 -42
- package/.claude/agents/consensus/security-manager.md +601 -601
- package/.claude/agents/core/coder.md +254 -254
- package/.claude/agents/core/planner.md +151 -151
- package/.claude/agents/core/researcher.md +173 -173
- package/.claude/agents/core/reviewer.md +308 -308
- package/.claude/agents/core/tester.md +299 -299
- package/.claude/agents/custom/test-long-runner.md +43 -43
- package/.claude/agents/data/ml/data-ml-model.md +75 -75
- package/.claude/agents/database-specialist.md +9 -9
- package/.claude/agents/development/backend/dev-backend-api.md +28 -28
- package/.claude/agents/development/dev-backend-api.md +177 -177
- package/.claude/agents/devops/ci-cd/ops-cicd-github.md +51 -51
- package/.claude/agents/documentation/api-docs/docs-api-openapi.md +62 -62
- package/.claude/agents/dual-mode/codex-coordinator.md +206 -206
- package/.claude/agents/dual-mode/codex-worker.md +190 -190
- package/.claude/agents/dual-mode/dual-orchestrator.md +253 -253
- 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 +520 -520
- package/.claude/agents/github/github-modes.md +153 -153
- package/.claude/agents/github/issue-tracker.md +298 -298
- package/.claude/agents/github/multi-repo-swarm.md +524 -524
- package/.claude/agents/github/pr-manager.md +162 -162
- package/.claude/agents/github/project-board-sync.md +477 -477
- package/.claude/agents/github/release-manager.md +337 -337
- package/.claude/agents/github/release-swarm.md +550 -550
- package/.claude/agents/github/repo-architect.md +364 -364
- package/.claude/agents/github/swarm-issue.md +550 -550
- package/.claude/agents/github/swarm-pr.md +401 -401
- package/.claude/agents/github/sync-coordinator.md +424 -424
- package/.claude/agents/github/workflow-automation.md +604 -604
- package/.claude/agents/goal/agent.md +816 -816
- package/.claude/agents/goal/code-goal-planner.md +444 -444
- package/.claude/agents/goal/goal-planner.md +167 -167
- package/.claude/agents/hive-mind/collective-intelligence-coordinator.md +128 -128
- package/.claude/agents/hive-mind/queen-coordinator.md +201 -201
- package/.claude/agents/hive-mind/scout-explorer.md +240 -240
- package/.claude/agents/hive-mind/swarm-memory-manager.md +191 -191
- package/.claude/agents/hive-mind/worker-specialist.md +215 -215
- package/.claude/agents/neural/safla-neural.md +73 -73
- package/.claude/agents/optimization/benchmark-suite.md +662 -662
- package/.claude/agents/optimization/load-balancer.md +428 -428
- package/.claude/agents/optimization/performance-monitor.md +669 -669
- package/.claude/agents/optimization/resource-allocator.md +671 -671
- package/.claude/agents/optimization/topology-optimizer.md +805 -805
- package/.claude/agents/payments/agentic-payments.md +126 -126
- package/.claude/agents/project-coordinator.md +8 -8
- package/.claude/agents/python-specialist.md +9 -9
- package/.claude/agents/reasoning/agent.md +816 -816
- package/.claude/agents/reasoning/goal-planner.md +72 -72
- package/.claude/agents/security-auditor.md +9 -9
- package/.claude/agents/sona/sona-learning-optimizer.md +65 -65
- package/.claude/agents/sparc/architecture.md +452 -452
- package/.claude/agents/sparc/pseudocode.md +298 -298
- package/.claude/agents/sparc/refinement.md +503 -503
- package/.claude/agents/sparc/specification.md +257 -257
- package/.claude/agents/specialized/mobile/spec-mobile-react-native.md +87 -87
- 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 +363 -363
- package/.claude/agents/swarm/hierarchical-coordinator.md +299 -299
- package/.claude/agents/swarm/mesh-coordinator.md +362 -362
- package/.claude/agents/templates/automation-smart-agent.md +184 -184
- package/.claude/agents/templates/coordinator-swarm-init.md +82 -82
- package/.claude/agents/templates/github-pr-manager.md +154 -154
- package/.claude/agents/templates/implementer-sparc-coder.md +242 -242
- package/.claude/agents/templates/memory-coordinator.md +162 -162
- package/.claude/agents/templates/migration-plan.md +723 -723
- package/.claude/agents/templates/orchestrator-task.md +119 -119
- package/.claude/agents/templates/performance-analyzer.md +178 -178
- package/.claude/agents/templates/sparc-coordinator.md +162 -162
- package/.claude/agents/testing/production-validator.md +372 -372
- package/.claude/agents/testing/tdd-london-swarm.md +221 -221
- package/.claude/agents/testing/unit/tdd-london-swarm.md +221 -221
- package/.claude/agents/testing/validation/production-validator.md +372 -372
- package/.claude/agents/typescript-specialist.md +9 -9
- package/.claude/agents/v3/database-specialist.md +9 -9
- package/.claude/agents/v3/project-coordinator.md +8 -8
- package/.claude/agents/v3/python-specialist.md +9 -9
- package/.claude/agents/v3/test-architect.md +9 -9
- package/.claude/agents/v3/typescript-specialist.md +9 -9
- package/.claude/agents/v3/v3-integration-architect.md +311 -311
- package/.claude/agents/v3/v3-memory-specialist.md +280 -280
- package/.claude/agents/v3/v3-performance-engineer.md +362 -362
- package/.claude/agents/v3/v3-queen-coordinator.md +62 -62
- package/.claude/agents/v3/v3-security-architect.md +139 -139
- package/.claude/checkpoints/1767754460.json +8 -8
- package/.claude/commands/agents/README.md +10 -10
- package/.claude/commands/agents/agent-capabilities.md +21 -21
- 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 +26 -26
- 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 +27 -27
- 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 +73 -73
- package/.claude/commands/training/neural-train.md +25 -25
- 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/config/v3-dependency-optimization.json +265 -265
- package/.claude/config/v3-performance-targets.json +250 -250
- package/.claude/helpers/.LOCKED +2 -2
- package/.claude/helpers/.helpers-version +1 -0
- package/.claude/helpers/README.md +96 -96
- package/.claude/helpers/adr-compliance.sh +186 -186
- package/.claude/helpers/aggressive-microcompact.mjs +36 -36
- package/.claude/helpers/auto-commit.sh +178 -178
- package/.claude/helpers/auto-memory-hook.mjs +430 -430
- package/.claude/helpers/checkpoint-manager.sh +251 -251
- package/.claude/helpers/context-persistence-hook.mjs +2001 -2001
- package/.claude/helpers/daemon-manager.sh +252 -252
- package/.claude/helpers/ddd-tracker.sh +144 -144
- package/.claude/helpers/github-safe.js +156 -156
- package/.claude/helpers/github-setup.sh +45 -45
- 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/helpers.manifest.json +13 -0
- package/.claude/helpers/hook-handler.cjs +464 -464
- package/.claude/helpers/intelligence.cjs +1058 -1058
- 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.cjs +84 -84
- package/.claude/helpers/metrics-db.mjs +503 -503
- package/.claude/helpers/patch-aggressive-prune.mjs +184 -184
- package/.claude/helpers/pattern-consolidator.sh +86 -86
- package/.claude/helpers/perf-worker.sh +160 -160
- package/.claude/helpers/quick-start.sh +19 -19
- package/.claude/helpers/router.cjs +62 -62
- package/.claude/helpers/security-scanner.sh +127 -127
- package/.claude/helpers/session.cjs +125 -125
- package/.claude/helpers/setup-mcp.sh +18 -18
- package/.claude/helpers/standard-checkpoint-hooks.sh +189 -189
- package/.claude/helpers/statusline.cjs +211 -2
- 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/mcp.json +12 -12
- package/.claude/proven-config.json +42 -0
- package/.claude/settings.json +284 -284
- package/.claude/settings.json.bak +526 -526
- 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/browser/SKILL.md +204 -204
- package/.claude/skills/dual-mode/README.md +71 -71
- package/.claude/skills/dual-mode/dual-collect.md +103 -103
- package/.claude/skills/dual-mode/dual-coordinate.md +85 -85
- package/.claude/skills/dual-mode/dual-spawn.md +81 -81
- package/.claude/skills/flow-nexus-neural/SKILL.md +727 -727
- package/.claude/skills/flow-nexus-platform/SKILL.md +1154 -1154
- package/.claude/skills/flow-nexus-swarm/SKILL.md +604 -604
- package/.claude/skills/github-code-review/SKILL.md +1125 -1125
- package/.claude/skills/github-multi-repo/SKILL.md +862 -862
- package/.claude/skills/github-project-management/SKILL.md +1262 -1262
- package/.claude/skills/github-release-management/SKILL.md +1064 -1064
- package/.claude/skills/github-workflow-automation/SKILL.md +1047 -1047
- package/.claude/skills/hive-mind-advanced/SKILL.md +709 -709
- 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 +560 -560
- package/.claude/skills/reasoningbank-agentdb/SKILL.md +446 -446
- package/.claude/skills/reasoningbank-intelligence/SKILL.md +201 -201
- package/.claude/skills/skill-builder/SKILL.md +910 -910
- package/.claude/skills/sparc-methodology/SKILL.md +1106 -1106
- package/.claude/skills/stream-chain/SKILL.md +560 -560
- package/.claude/skills/swarm-advanced/SKILL.md +970 -970
- 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 +691 -691
- package/.claude/skills/worker-benchmarks/SKILL.md +129 -129
- package/.claude/skills/worker-integration/SKILL.md +147 -147
- package/.claude/statusline-command.sh +176 -176
- package/.claude/statusline.mjs +109 -109
- package/.claude/statusline.sh +431 -431
- package/.claude/workflows/full-system-test.js +65 -65
- package/.claude/workflows/intelligence-system-hardening.js +120 -120
- package/.claude/workflows/plugin-contract-audit.js +91 -91
- package/.claude-plugin/README.md +720 -720
- package/.claude-plugin/docs/INSTALLATION.md +261 -261
- package/.claude-plugin/docs/PLUGIN_SUMMARY.md +361 -361
- package/.claude-plugin/docs/QUICKSTART.md +361 -361
- package/.claude-plugin/docs/STRUCTURE.md +128 -128
- package/.claude-plugin/hooks/hooks.json +79 -77
- package/.claude-plugin/marketplace.json +185 -185
- package/.claude-plugin/plugin.json +71 -71
- package/.claude-plugin/scripts/install.sh +234 -234
- package/.claude-plugin/scripts/ruflo-hook.cjs +166 -166
- package/.claude-plugin/scripts/ruflo-hook.sh +52 -52
- package/.claude-plugin/scripts/uninstall.sh +36 -36
- package/.claude-plugin/scripts/verify.sh +108 -108
- package/LICENSE +21 -21
- package/README.md +419 -419
- package/bin/cli.js +11 -11
- package/bin/npx-repair.js +7 -7
- package/bin/npx-safe-launch.js +9 -9
- package/package.json +192 -186
- package/v3/@claude-flow/cli/README.md +419 -419
- package/v3/@claude-flow/cli/bin/cli.js +314 -314
- package/v3/@claude-flow/cli/bin/mcp-server.js +224 -224
- package/v3/@claude-flow/cli/bin/preinstall.cjs +2 -2
- package/v3/@claude-flow/cli/catalog-manifest.json +2 -2
- package/v3/@claude-flow/cli/dist/src/autopilot-state.js +24 -7
- package/v3/@claude-flow/cli/dist/src/benchmarks/gaia-critic.js +24 -24
- package/v3/@claude-flow/cli/dist/src/business-pods/bbs-budget-tracker.js +53 -53
- package/v3/@claude-flow/cli/dist/src/commands/completions.js +409 -409
- package/v3/@claude-flow/cli/dist/src/commands/daemon.js +44 -44
- package/v3/@claude-flow/cli/dist/src/commands/doctor.js +267 -20
- package/v3/@claude-flow/cli/dist/src/commands/embeddings.js +26 -26
- package/v3/@claude-flow/cli/dist/src/commands/hive-mind.js +97 -97
- package/v3/@claude-flow/cli/dist/src/commands/hooks.js +74 -11
- package/v3/@claude-flow/cli/dist/src/commands/init.js +202 -34
- package/v3/@claude-flow/cli/dist/src/commands/memory.js +12 -1
- package/v3/@claude-flow/cli/dist/src/commands/ruvector/backup.js +23 -23
- package/v3/@claude-flow/cli/dist/src/commands/ruvector/benchmark.js +31 -31
- package/v3/@claude-flow/cli/dist/src/commands/ruvector/import.js +14 -14
- package/v3/@claude-flow/cli/dist/src/commands/ruvector/init.js +115 -115
- package/v3/@claude-flow/cli/dist/src/commands/ruvector/migrate.js +99 -99
- package/v3/@claude-flow/cli/dist/src/commands/ruvector/optimize.js +51 -51
- package/v3/@claude-flow/cli/dist/src/commands/ruvector/setup.js +624 -624
- package/v3/@claude-flow/cli/dist/src/commands/ruvector/status.js +38 -38
- package/v3/@claude-flow/cli/dist/src/config/proven-config.js +2 -2
- package/v3/@claude-flow/cli/dist/src/funnel/disclosure.js +13 -2
- package/v3/@claude-flow/cli/dist/src/funnel/message-transport.d.ts +11 -4
- package/v3/@claude-flow/cli/dist/src/funnel/message-transport.js +11 -4
- package/v3/@claude-flow/cli/dist/src/funnel/messages.d.ts +12 -10
- package/v3/@claude-flow/cli/dist/src/funnel/messages.js +83 -11
- package/v3/@claude-flow/cli/dist/src/init/claudemd-generator.js +231 -231
- package/v3/@claude-flow/cli/dist/src/init/executor.js +453 -453
- package/v3/@claude-flow/cli/dist/src/init/helper-signing.js +2 -2
- package/v3/@claude-flow/cli/dist/src/init/helpers-generator.js +751 -751
- package/v3/@claude-flow/cli/dist/src/init/statusline-generator.js +24 -24
- package/v3/@claude-flow/cli/dist/src/mcp-tools/agentdb-tools.js +15 -15
- package/v3/@claude-flow/cli/dist/src/mcp-tools/browser-intent-tools.js +19 -19
- package/v3/@claude-flow/cli/dist/src/mcp-tools/browser-tools.js +8 -0
- package/v3/@claude-flow/cli/dist/src/mcp-tools/hooks-tools.js +21 -0
- package/v3/@claude-flow/cli/dist/src/mcp-tools/memory-tools.js +4 -3
- package/v3/@claude-flow/cli/dist/src/memory/graph-edge-writer.d.ts +9 -0
- package/v3/@claude-flow/cli/dist/src/memory/graph-edge-writer.js +35 -22
- package/v3/@claude-flow/cli/dist/src/memory/memory-bridge.js +189 -93
- package/v3/@claude-flow/cli/dist/src/memory/memory-initializer.js +479 -407
- package/v3/@claude-flow/cli/dist/src/memory/rabitq-index.js +5 -5
- package/v3/@claude-flow/cli/dist/src/parser.js +25 -9
- package/v3/@claude-flow/cli/dist/src/proxy/verify.js +2 -2
- package/v3/@claude-flow/cli/dist/src/runtime/headless.js +28 -28
- package/v3/@claude-flow/cli/dist/src/services/distill-tuning.js +7 -7
- package/v3/@claude-flow/cli/dist/src/services/headless-worker-executor.js +84 -84
- package/v3/@claude-flow/cli/dist/src/services/memory-distillation.js +4 -4
- package/v3/@claude-flow/cli/dist/src/services/worker-daemon.js +7 -4
- package/v3/@claude-flow/cli/dist/src/transfer/deploy-seraphine.js +23 -23
- package/v3/@claude-flow/cli/package.json +137 -135
- package/v3/@claude-flow/guidance/README.md +1195 -1195
- package/v3/@claude-flow/guidance/package.json +198 -198
- package/v3/@claude-flow/shared/README.md +323 -323
- package/v3/@claude-flow/shared/dist/events/event-store.js +31 -31
- package/v3/@claude-flow/shared/dist/hooks/safety/git-commit.js +3 -3
- package/v3/@claude-flow/shared/package.json +43 -43
- package/v3/README.md +493 -493
|
@@ -1,189 +1,189 @@
|
|
|
1
|
-
#!/bin/bash
|
|
2
|
-
# Standard checkpoint hook functions for Claude settings.json (without GitHub features)
|
|
3
|
-
|
|
4
|
-
# Function to handle pre-edit checkpoints
|
|
5
|
-
pre_edit_checkpoint() {
|
|
6
|
-
local tool_input="$1"
|
|
7
|
-
# Handle both JSON input and plain file path
|
|
8
|
-
if echo "$tool_input" | jq -e . >/dev/null 2>&1; then
|
|
9
|
-
local file=$(echo "$tool_input" | jq -r '.file_path // empty')
|
|
10
|
-
else
|
|
11
|
-
local file="$tool_input"
|
|
12
|
-
fi
|
|
13
|
-
|
|
14
|
-
if [ -n "$file" ]; then
|
|
15
|
-
local checkpoint_branch="checkpoint/pre-edit-$(date +%Y%m%d-%H%M%S)"
|
|
16
|
-
local current_branch=$(git branch --show-current)
|
|
17
|
-
|
|
18
|
-
# Create checkpoint
|
|
19
|
-
git add -A
|
|
20
|
-
git stash push -m "Pre-edit checkpoint for $file" >/dev/null 2>&1
|
|
21
|
-
git branch "$checkpoint_branch"
|
|
22
|
-
|
|
23
|
-
# Store metadata
|
|
24
|
-
mkdir -p .claude/checkpoints
|
|
25
|
-
cat > ".claude/checkpoints/$(date +%s).json" <<EOF
|
|
26
|
-
{
|
|
27
|
-
"branch": "$checkpoint_branch",
|
|
28
|
-
"file": "$file",
|
|
29
|
-
"timestamp": "$(date -u +%Y-%m-%dT%H:%M:%SZ)",
|
|
30
|
-
"type": "pre-edit",
|
|
31
|
-
"original_branch": "$current_branch"
|
|
32
|
-
}
|
|
33
|
-
EOF
|
|
34
|
-
|
|
35
|
-
# Restore working directory
|
|
36
|
-
git stash pop --quiet >/dev/null 2>&1 || true
|
|
37
|
-
|
|
38
|
-
echo "✅ Created checkpoint: $checkpoint_branch for $file"
|
|
39
|
-
fi
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
# Function to handle post-edit checkpoints
|
|
43
|
-
post_edit_checkpoint() {
|
|
44
|
-
local tool_input="$1"
|
|
45
|
-
# Handle both JSON input and plain file path
|
|
46
|
-
if echo "$tool_input" | jq -e . >/dev/null 2>&1; then
|
|
47
|
-
local file=$(echo "$tool_input" | jq -r '.file_path // empty')
|
|
48
|
-
else
|
|
49
|
-
local file="$tool_input"
|
|
50
|
-
fi
|
|
51
|
-
|
|
52
|
-
if [ -n "$file" ] && [ -f "$file" ]; then
|
|
53
|
-
# Check if file was modified - first check if file is tracked
|
|
54
|
-
if ! git ls-files --error-unmatch "$file" >/dev/null 2>&1; then
|
|
55
|
-
# File is not tracked, add it first
|
|
56
|
-
git add "$file"
|
|
57
|
-
fi
|
|
58
|
-
|
|
59
|
-
# Now check if there are changes
|
|
60
|
-
if git diff --cached --quiet "$file" 2>/dev/null && git diff --quiet "$file" 2>/dev/null; then
|
|
61
|
-
echo "ℹ️ No changes to checkpoint for $file"
|
|
62
|
-
else
|
|
63
|
-
local tag_name="checkpoint-$(date +%Y%m%d-%H%M%S)"
|
|
64
|
-
local current_branch=$(git branch --show-current)
|
|
65
|
-
|
|
66
|
-
# Create commit
|
|
67
|
-
git add "$file"
|
|
68
|
-
if git commit -m "🔖 Checkpoint: Edit $file
|
|
69
|
-
|
|
70
|
-
Automatic checkpoint created by Claude
|
|
71
|
-
- File: $file
|
|
72
|
-
- Branch: $current_branch
|
|
73
|
-
- Timestamp: $(date -u +%Y-%m-%dT%H:%M:%SZ)
|
|
74
|
-
|
|
75
|
-
[Auto-checkpoint]" --quiet; then
|
|
76
|
-
# Create tag only if commit succeeded
|
|
77
|
-
git tag -a "$tag_name" -m "Checkpoint after editing $file"
|
|
78
|
-
|
|
79
|
-
# Store metadata
|
|
80
|
-
mkdir -p .claude/checkpoints
|
|
81
|
-
local diff_stats=$(git diff HEAD~1 --stat | tr '\n' ' ' | sed 's/"/\"/g')
|
|
82
|
-
cat > ".claude/checkpoints/$(date +%s).json" <<EOF
|
|
83
|
-
{
|
|
84
|
-
"tag": "$tag_name",
|
|
85
|
-
"file": "$file",
|
|
86
|
-
"timestamp": "$(date -u +%Y-%m-%dT%H:%M:%SZ)",
|
|
87
|
-
"type": "post-edit",
|
|
88
|
-
"branch": "$current_branch",
|
|
89
|
-
"diff_summary": "$diff_stats"
|
|
90
|
-
}
|
|
91
|
-
EOF
|
|
92
|
-
|
|
93
|
-
echo "✅ Created checkpoint: $tag_name for $file"
|
|
94
|
-
else
|
|
95
|
-
echo "ℹ️ No commit created (no changes or commit failed)"
|
|
96
|
-
fi
|
|
97
|
-
fi
|
|
98
|
-
fi
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
# Function to handle task checkpoints
|
|
102
|
-
task_checkpoint() {
|
|
103
|
-
local user_prompt="$1"
|
|
104
|
-
local task=$(echo "$user_prompt" | head -c 100 | tr '\n' ' ')
|
|
105
|
-
|
|
106
|
-
if [ -n "$task" ]; then
|
|
107
|
-
local checkpoint_name="task-$(date +%Y%m%d-%H%M%S)"
|
|
108
|
-
|
|
109
|
-
# Commit current state
|
|
110
|
-
git add -A
|
|
111
|
-
git commit -m "🔖 Task checkpoint: $task..." --quiet || true
|
|
112
|
-
|
|
113
|
-
# Store metadata
|
|
114
|
-
mkdir -p .claude/checkpoints
|
|
115
|
-
cat > ".claude/checkpoints/task-$(date +%s).json" <<EOF
|
|
116
|
-
{
|
|
117
|
-
"checkpoint": "$checkpoint_name",
|
|
118
|
-
"task": "$task",
|
|
119
|
-
"timestamp": "$(date -u +%Y-%m-%dT%H:%M:%SZ)",
|
|
120
|
-
"commit": "$(git rev-parse HEAD)"
|
|
121
|
-
}
|
|
122
|
-
EOF
|
|
123
|
-
|
|
124
|
-
echo "✅ Created task checkpoint: $checkpoint_name"
|
|
125
|
-
fi
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
# Function to handle session end
|
|
129
|
-
session_end_checkpoint() {
|
|
130
|
-
local session_id="session-$(date +%Y%m%d-%H%M%S)"
|
|
131
|
-
local summary_file=".claude/checkpoints/summary-$session_id.md"
|
|
132
|
-
|
|
133
|
-
mkdir -p .claude/checkpoints
|
|
134
|
-
|
|
135
|
-
# Create summary
|
|
136
|
-
cat > "$summary_file" <<EOF
|
|
137
|
-
# Session Summary - $(date +'%Y-%m-%d %H:%M:%S')
|
|
138
|
-
|
|
139
|
-
## Checkpoints Created
|
|
140
|
-
$(find .claude/checkpoints -name '*.json' -mtime -1 -exec basename {} \; | sort)
|
|
141
|
-
|
|
142
|
-
## Files Modified
|
|
143
|
-
$(git diff --name-only $(git log --format=%H -n 1 --before="1 hour ago" 2>/dev/null) 2>/dev/null || echo "No files tracked")
|
|
144
|
-
|
|
145
|
-
## Recent Commits
|
|
146
|
-
$(git log --oneline -10 --grep="Checkpoint" || echo "No checkpoint commits")
|
|
147
|
-
|
|
148
|
-
## Rollback Instructions
|
|
149
|
-
To rollback to a specific checkpoint:
|
|
150
|
-
\`\`\`bash
|
|
151
|
-
# List all checkpoints
|
|
152
|
-
git tag -l 'checkpoint-*' | sort -r
|
|
153
|
-
|
|
154
|
-
# Rollback to a checkpoint
|
|
155
|
-
git checkout checkpoint-YYYYMMDD-HHMMSS
|
|
156
|
-
|
|
157
|
-
# Or reset to a checkpoint (destructive)
|
|
158
|
-
git reset --hard checkpoint-YYYYMMDD-HHMMSS
|
|
159
|
-
\`\`\`
|
|
160
|
-
EOF
|
|
161
|
-
|
|
162
|
-
# Create final checkpoint
|
|
163
|
-
git add -A
|
|
164
|
-
git commit -m "🏁 Session end checkpoint: $session_id" --quiet || true
|
|
165
|
-
git tag -a "session-end-$session_id" -m "End of Claude session"
|
|
166
|
-
|
|
167
|
-
echo "✅ Session summary saved to: $summary_file"
|
|
168
|
-
echo "📌 Final checkpoint: session-end-$session_id"
|
|
169
|
-
}
|
|
170
|
-
|
|
171
|
-
# Main entry point
|
|
172
|
-
case "$1" in
|
|
173
|
-
pre-edit)
|
|
174
|
-
pre_edit_checkpoint "$2"
|
|
175
|
-
;;
|
|
176
|
-
post-edit)
|
|
177
|
-
post_edit_checkpoint "$2"
|
|
178
|
-
;;
|
|
179
|
-
task)
|
|
180
|
-
task_checkpoint "$2"
|
|
181
|
-
;;
|
|
182
|
-
session-end)
|
|
183
|
-
session_end_checkpoint
|
|
184
|
-
;;
|
|
185
|
-
*)
|
|
186
|
-
echo "Usage: $0 {pre-edit|post-edit|task|session-end} [input]"
|
|
187
|
-
exit 1
|
|
188
|
-
;;
|
|
189
|
-
esac
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Standard checkpoint hook functions for Claude settings.json (without GitHub features)
|
|
3
|
+
|
|
4
|
+
# Function to handle pre-edit checkpoints
|
|
5
|
+
pre_edit_checkpoint() {
|
|
6
|
+
local tool_input="$1"
|
|
7
|
+
# Handle both JSON input and plain file path
|
|
8
|
+
if echo "$tool_input" | jq -e . >/dev/null 2>&1; then
|
|
9
|
+
local file=$(echo "$tool_input" | jq -r '.file_path // empty')
|
|
10
|
+
else
|
|
11
|
+
local file="$tool_input"
|
|
12
|
+
fi
|
|
13
|
+
|
|
14
|
+
if [ -n "$file" ]; then
|
|
15
|
+
local checkpoint_branch="checkpoint/pre-edit-$(date +%Y%m%d-%H%M%S)"
|
|
16
|
+
local current_branch=$(git branch --show-current)
|
|
17
|
+
|
|
18
|
+
# Create checkpoint
|
|
19
|
+
git add -A
|
|
20
|
+
git stash push -m "Pre-edit checkpoint for $file" >/dev/null 2>&1
|
|
21
|
+
git branch "$checkpoint_branch"
|
|
22
|
+
|
|
23
|
+
# Store metadata
|
|
24
|
+
mkdir -p .claude/checkpoints
|
|
25
|
+
cat > ".claude/checkpoints/$(date +%s).json" <<EOF
|
|
26
|
+
{
|
|
27
|
+
"branch": "$checkpoint_branch",
|
|
28
|
+
"file": "$file",
|
|
29
|
+
"timestamp": "$(date -u +%Y-%m-%dT%H:%M:%SZ)",
|
|
30
|
+
"type": "pre-edit",
|
|
31
|
+
"original_branch": "$current_branch"
|
|
32
|
+
}
|
|
33
|
+
EOF
|
|
34
|
+
|
|
35
|
+
# Restore working directory
|
|
36
|
+
git stash pop --quiet >/dev/null 2>&1 || true
|
|
37
|
+
|
|
38
|
+
echo "✅ Created checkpoint: $checkpoint_branch for $file"
|
|
39
|
+
fi
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
# Function to handle post-edit checkpoints
|
|
43
|
+
post_edit_checkpoint() {
|
|
44
|
+
local tool_input="$1"
|
|
45
|
+
# Handle both JSON input and plain file path
|
|
46
|
+
if echo "$tool_input" | jq -e . >/dev/null 2>&1; then
|
|
47
|
+
local file=$(echo "$tool_input" | jq -r '.file_path // empty')
|
|
48
|
+
else
|
|
49
|
+
local file="$tool_input"
|
|
50
|
+
fi
|
|
51
|
+
|
|
52
|
+
if [ -n "$file" ] && [ -f "$file" ]; then
|
|
53
|
+
# Check if file was modified - first check if file is tracked
|
|
54
|
+
if ! git ls-files --error-unmatch "$file" >/dev/null 2>&1; then
|
|
55
|
+
# File is not tracked, add it first
|
|
56
|
+
git add "$file"
|
|
57
|
+
fi
|
|
58
|
+
|
|
59
|
+
# Now check if there are changes
|
|
60
|
+
if git diff --cached --quiet "$file" 2>/dev/null && git diff --quiet "$file" 2>/dev/null; then
|
|
61
|
+
echo "ℹ️ No changes to checkpoint for $file"
|
|
62
|
+
else
|
|
63
|
+
local tag_name="checkpoint-$(date +%Y%m%d-%H%M%S)"
|
|
64
|
+
local current_branch=$(git branch --show-current)
|
|
65
|
+
|
|
66
|
+
# Create commit
|
|
67
|
+
git add "$file"
|
|
68
|
+
if git commit -m "🔖 Checkpoint: Edit $file
|
|
69
|
+
|
|
70
|
+
Automatic checkpoint created by Claude
|
|
71
|
+
- File: $file
|
|
72
|
+
- Branch: $current_branch
|
|
73
|
+
- Timestamp: $(date -u +%Y-%m-%dT%H:%M:%SZ)
|
|
74
|
+
|
|
75
|
+
[Auto-checkpoint]" --quiet; then
|
|
76
|
+
# Create tag only if commit succeeded
|
|
77
|
+
git tag -a "$tag_name" -m "Checkpoint after editing $file"
|
|
78
|
+
|
|
79
|
+
# Store metadata
|
|
80
|
+
mkdir -p .claude/checkpoints
|
|
81
|
+
local diff_stats=$(git diff HEAD~1 --stat | tr '\n' ' ' | sed 's/"/\"/g')
|
|
82
|
+
cat > ".claude/checkpoints/$(date +%s).json" <<EOF
|
|
83
|
+
{
|
|
84
|
+
"tag": "$tag_name",
|
|
85
|
+
"file": "$file",
|
|
86
|
+
"timestamp": "$(date -u +%Y-%m-%dT%H:%M:%SZ)",
|
|
87
|
+
"type": "post-edit",
|
|
88
|
+
"branch": "$current_branch",
|
|
89
|
+
"diff_summary": "$diff_stats"
|
|
90
|
+
}
|
|
91
|
+
EOF
|
|
92
|
+
|
|
93
|
+
echo "✅ Created checkpoint: $tag_name for $file"
|
|
94
|
+
else
|
|
95
|
+
echo "ℹ️ No commit created (no changes or commit failed)"
|
|
96
|
+
fi
|
|
97
|
+
fi
|
|
98
|
+
fi
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
# Function to handle task checkpoints
|
|
102
|
+
task_checkpoint() {
|
|
103
|
+
local user_prompt="$1"
|
|
104
|
+
local task=$(echo "$user_prompt" | head -c 100 | tr '\n' ' ')
|
|
105
|
+
|
|
106
|
+
if [ -n "$task" ]; then
|
|
107
|
+
local checkpoint_name="task-$(date +%Y%m%d-%H%M%S)"
|
|
108
|
+
|
|
109
|
+
# Commit current state
|
|
110
|
+
git add -A
|
|
111
|
+
git commit -m "🔖 Task checkpoint: $task..." --quiet || true
|
|
112
|
+
|
|
113
|
+
# Store metadata
|
|
114
|
+
mkdir -p .claude/checkpoints
|
|
115
|
+
cat > ".claude/checkpoints/task-$(date +%s).json" <<EOF
|
|
116
|
+
{
|
|
117
|
+
"checkpoint": "$checkpoint_name",
|
|
118
|
+
"task": "$task",
|
|
119
|
+
"timestamp": "$(date -u +%Y-%m-%dT%H:%M:%SZ)",
|
|
120
|
+
"commit": "$(git rev-parse HEAD)"
|
|
121
|
+
}
|
|
122
|
+
EOF
|
|
123
|
+
|
|
124
|
+
echo "✅ Created task checkpoint: $checkpoint_name"
|
|
125
|
+
fi
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
# Function to handle session end
|
|
129
|
+
session_end_checkpoint() {
|
|
130
|
+
local session_id="session-$(date +%Y%m%d-%H%M%S)"
|
|
131
|
+
local summary_file=".claude/checkpoints/summary-$session_id.md"
|
|
132
|
+
|
|
133
|
+
mkdir -p .claude/checkpoints
|
|
134
|
+
|
|
135
|
+
# Create summary
|
|
136
|
+
cat > "$summary_file" <<EOF
|
|
137
|
+
# Session Summary - $(date +'%Y-%m-%d %H:%M:%S')
|
|
138
|
+
|
|
139
|
+
## Checkpoints Created
|
|
140
|
+
$(find .claude/checkpoints -name '*.json' -mtime -1 -exec basename {} \; | sort)
|
|
141
|
+
|
|
142
|
+
## Files Modified
|
|
143
|
+
$(git diff --name-only $(git log --format=%H -n 1 --before="1 hour ago" 2>/dev/null) 2>/dev/null || echo "No files tracked")
|
|
144
|
+
|
|
145
|
+
## Recent Commits
|
|
146
|
+
$(git log --oneline -10 --grep="Checkpoint" || echo "No checkpoint commits")
|
|
147
|
+
|
|
148
|
+
## Rollback Instructions
|
|
149
|
+
To rollback to a specific checkpoint:
|
|
150
|
+
\`\`\`bash
|
|
151
|
+
# List all checkpoints
|
|
152
|
+
git tag -l 'checkpoint-*' | sort -r
|
|
153
|
+
|
|
154
|
+
# Rollback to a checkpoint
|
|
155
|
+
git checkout checkpoint-YYYYMMDD-HHMMSS
|
|
156
|
+
|
|
157
|
+
# Or reset to a checkpoint (destructive)
|
|
158
|
+
git reset --hard checkpoint-YYYYMMDD-HHMMSS
|
|
159
|
+
\`\`\`
|
|
160
|
+
EOF
|
|
161
|
+
|
|
162
|
+
# Create final checkpoint
|
|
163
|
+
git add -A
|
|
164
|
+
git commit -m "🏁 Session end checkpoint: $session_id" --quiet || true
|
|
165
|
+
git tag -a "session-end-$session_id" -m "End of Claude session"
|
|
166
|
+
|
|
167
|
+
echo "✅ Session summary saved to: $summary_file"
|
|
168
|
+
echo "📌 Final checkpoint: session-end-$session_id"
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
# Main entry point
|
|
172
|
+
case "$1" in
|
|
173
|
+
pre-edit)
|
|
174
|
+
pre_edit_checkpoint "$2"
|
|
175
|
+
;;
|
|
176
|
+
post-edit)
|
|
177
|
+
post_edit_checkpoint "$2"
|
|
178
|
+
;;
|
|
179
|
+
task)
|
|
180
|
+
task_checkpoint "$2"
|
|
181
|
+
;;
|
|
182
|
+
session-end)
|
|
183
|
+
session_end_checkpoint
|
|
184
|
+
;;
|
|
185
|
+
*)
|
|
186
|
+
echo "Usage: $0 {pre-edit|post-edit|task|session-end} [input]"
|
|
187
|
+
exit 1
|
|
188
|
+
;;
|
|
189
|
+
esac
|
|
@@ -404,6 +404,154 @@ function getLocalIntegration() {
|
|
|
404
404
|
return integration;
|
|
405
405
|
}
|
|
406
406
|
|
|
407
|
+
// ─── Security freshness overlay (ruvnet/ruflo#2776) ──────────────
|
|
408
|
+
// The shipped CLI producer (dist/src/funnel/local-signals.js getSecurityStatus)
|
|
409
|
+
// only ever emits PENDING / CLEAN / ISSUES — it captures `scannedAt` but never
|
|
410
|
+
// inspects it, so a year-old scan renders 🛡 ✓ forever and the renderer's
|
|
411
|
+
// STALE / IN_PROGRESS branches are unreachable. Worse, when CLI delegation
|
|
412
|
+
// fails, the stale-while-revalidate cache (readCache() below) keeps serving
|
|
413
|
+
// the pre-scan PENDING pill indefinitely, so a user who runs the advertised
|
|
414
|
+
// `ruflo security scan` sees no change — the pill freezes at "scan pending".
|
|
415
|
+
//
|
|
416
|
+
// This overlay recomputes the security block from disk on EVERY render (same
|
|
417
|
+
// pattern as adrs/agentdb/tests/hooks above), which:
|
|
418
|
+
// 1) Makes STALE reachable — when the newest scan is older than
|
|
419
|
+
// RUFLO_SCAN_STALE_HOURS (default 24h — matches the CVE feed refresh
|
|
420
|
+
// cadence), report STALE regardless of what the cached CLI JSON says.
|
|
421
|
+
// 2) Makes IN_PROGRESS reachable — when a `scan-in-progress` marker file
|
|
422
|
+
// exists and is younger than SECURITY_IN_PROGRESS_MAX_MIN (guards against
|
|
423
|
+
// a crashed scan leaving the marker behind).
|
|
424
|
+
// 3) Caps the "scan pending" display window — if PENDING has been shown for
|
|
425
|
+
// >RUFLO_SCAN_PENDING_CAP_MIN (default 30) without a completion write,
|
|
426
|
+
// switch to STALE and stop rendering the yellow indicator. The tracker
|
|
427
|
+
// lives in ~/.ruflo/statusline-scan-pending-since.json, keyed by CWD
|
|
428
|
+
// hash so multiple project checkouts don't collide.
|
|
429
|
+
// 4) Since this runs AFTER readCache() serves stale data, it bypasses the
|
|
430
|
+
// "pill freezes at PENDING" freeze in defect 2 — the overlay reads
|
|
431
|
+
// fresh disk state even when the CLI delegation is broken.
|
|
432
|
+
const SECURITY_STALE_HOURS = Math.max(1, parseInt(process.env.RUFLO_SCAN_STALE_HOURS || '24', 10) || 24);
|
|
433
|
+
const SECURITY_PENDING_CAP_MIN = Math.max(1, parseInt(process.env.RUFLO_SCAN_PENDING_CAP_MIN || '30', 10) || 30);
|
|
434
|
+
const SECURITY_IN_PROGRESS_MAX_MIN = 30; // marker older than this = crashed scan; treat as absent
|
|
435
|
+
const PENDING_TRACK_FILE = path.join(os.homedir(), '.ruflo', 'statusline-scan-pending-since.json');
|
|
436
|
+
const CWD_KEY = require('crypto').createHash('md5').update(CWD).digest('hex').slice(0, 12);
|
|
437
|
+
|
|
438
|
+
function readPendingSince() {
|
|
439
|
+
try {
|
|
440
|
+
if (!fs.existsSync(PENDING_TRACK_FILE)) return null;
|
|
441
|
+
const raw = JSON.parse(fs.readFileSync(PENDING_TRACK_FILE, 'utf-8'));
|
|
442
|
+
if (raw && typeof raw === 'object' && typeof raw[CWD_KEY] === 'number') return raw[CWD_KEY];
|
|
443
|
+
} catch { /* ignore */ }
|
|
444
|
+
return null;
|
|
445
|
+
}
|
|
446
|
+
|
|
447
|
+
function writePendingSince(ts) {
|
|
448
|
+
try {
|
|
449
|
+
let obj = {};
|
|
450
|
+
if (fs.existsSync(PENDING_TRACK_FILE)) {
|
|
451
|
+
try { obj = JSON.parse(fs.readFileSync(PENDING_TRACK_FILE, 'utf-8')) || {}; } catch { obj = {}; }
|
|
452
|
+
}
|
|
453
|
+
if (ts === null) { delete obj[CWD_KEY]; } else { obj[CWD_KEY] = ts; }
|
|
454
|
+
fs.mkdirSync(path.dirname(PENDING_TRACK_FILE), { recursive: true, mode: 0o700 });
|
|
455
|
+
fs.writeFileSync(PENDING_TRACK_FILE, JSON.stringify(obj), { encoding: 'utf-8', mode: 0o600 });
|
|
456
|
+
} catch { /* ignore */ }
|
|
457
|
+
}
|
|
458
|
+
|
|
459
|
+
function getLocalSecurity(cliSecurity) {
|
|
460
|
+
const base = (cliSecurity && typeof cliSecurity === 'object')
|
|
461
|
+
? Object.assign({}, cliSecurity)
|
|
462
|
+
: { status: 'NONE', findings: 0, cvesFixed: 0, totalCves: 0 };
|
|
463
|
+
base.findings = Math.max(0, base.findings || 0);
|
|
464
|
+
|
|
465
|
+
const scanDir = path.join(CWD, '.claude', 'security-scans');
|
|
466
|
+
|
|
467
|
+
// Detect a live in-progress marker (writer opts-in by writing this file).
|
|
468
|
+
let inProgress = false;
|
|
469
|
+
try {
|
|
470
|
+
const marker = path.join(scanDir, 'scan-in-progress');
|
|
471
|
+
if (fs.existsSync(marker)) {
|
|
472
|
+
const ageMin = (Date.now() - fs.statSync(marker).mtimeMs) / 60000;
|
|
473
|
+
if (ageMin < SECURITY_IN_PROGRESS_MAX_MIN) inProgress = true;
|
|
474
|
+
}
|
|
475
|
+
} catch { /* ignore */ }
|
|
476
|
+
|
|
477
|
+
// Find newest scan-*.json by mtime and read its findings/timestamp.
|
|
478
|
+
let newestPath = null;
|
|
479
|
+
let newestMtime = 0;
|
|
480
|
+
try {
|
|
481
|
+
if (fs.existsSync(scanDir)) {
|
|
482
|
+
for (const name of fs.readdirSync(scanDir)) {
|
|
483
|
+
if (!name.startsWith('scan-') || !name.endsWith('.json')) continue;
|
|
484
|
+
try {
|
|
485
|
+
const st = fs.statSync(path.join(scanDir, name));
|
|
486
|
+
if (st.mtimeMs > newestMtime) { newestMtime = st.mtimeMs; newestPath = path.join(scanDir, name); }
|
|
487
|
+
} catch { /* ignore */ }
|
|
488
|
+
}
|
|
489
|
+
}
|
|
490
|
+
} catch { /* ignore */ }
|
|
491
|
+
|
|
492
|
+
if (newestPath) {
|
|
493
|
+
// We have a scan on disk — the never-scanned pending tracker is no longer
|
|
494
|
+
// relevant. Clear it so a re-created directory can start a fresh window.
|
|
495
|
+
writePendingSince(null);
|
|
496
|
+
|
|
497
|
+
let scannedAtMs = newestMtime;
|
|
498
|
+
let findings = base.findings;
|
|
499
|
+
try {
|
|
500
|
+
const j = JSON.parse(fs.readFileSync(newestPath, 'utf-8'));
|
|
501
|
+
// scannedAt (CLI producer's field name) OR timestamp (writer's field name).
|
|
502
|
+
const isoStr = (j && (j.scannedAt || j.timestamp)) || null;
|
|
503
|
+
if (isoStr) {
|
|
504
|
+
const t = Date.parse(isoStr);
|
|
505
|
+
if (!isNaN(t)) scannedAtMs = t;
|
|
506
|
+
}
|
|
507
|
+
// findings may be a number, an array, or nested in summary.total.
|
|
508
|
+
if (j) {
|
|
509
|
+
if (typeof j.findings === 'number') findings = j.findings;
|
|
510
|
+
else if (Array.isArray(j.findings)) findings = j.findings.length;
|
|
511
|
+
else if (j.summary && typeof j.summary.total === 'number') findings = j.summary.total;
|
|
512
|
+
}
|
|
513
|
+
} catch { /* ignore parse — fall back to mtime + cached findings */ }
|
|
514
|
+
|
|
515
|
+
base.findings = Math.max(0, findings || 0);
|
|
516
|
+
base.scannedAt = new Date(scannedAtMs).toISOString();
|
|
517
|
+
|
|
518
|
+
const ageHours = (Date.now() - scannedAtMs) / 3600000;
|
|
519
|
+
if (ageHours >= SECURITY_STALE_HOURS) {
|
|
520
|
+
// Stale but findings still render red (a year-old ISSUES scan is still bad).
|
|
521
|
+
base.status = 'STALE';
|
|
522
|
+
} else if (inProgress) {
|
|
523
|
+
base.status = 'IN_PROGRESS';
|
|
524
|
+
} else if (base.findings > 0) {
|
|
525
|
+
base.status = 'ISSUES';
|
|
526
|
+
} else {
|
|
527
|
+
base.status = 'CLEAN';
|
|
528
|
+
}
|
|
529
|
+
return base;
|
|
530
|
+
}
|
|
531
|
+
|
|
532
|
+
// No scan file. If a live marker exists, we're mid-scan.
|
|
533
|
+
if (inProgress) {
|
|
534
|
+
base.status = 'IN_PROGRESS';
|
|
535
|
+
// Reset the pending tracker so, if the scan crashes mid-flight, the next
|
|
536
|
+
// render starts a fresh N-minute pending window instead of an already-expired one.
|
|
537
|
+
writePendingSince(null);
|
|
538
|
+
return base;
|
|
539
|
+
}
|
|
540
|
+
|
|
541
|
+
// Truly never-scanned: track how long we've shown PENDING. After the cap,
|
|
542
|
+
// escalate to STALE with the dim/gray glyph so the pill visibly stops
|
|
543
|
+
// shouting for attention — the user has either ignored it for 30 min or
|
|
544
|
+
// the scan is silently failing to write.
|
|
545
|
+
let pendingSince = readPendingSince();
|
|
546
|
+
if (pendingSince === null || typeof pendingSince !== 'number') {
|
|
547
|
+
pendingSince = Date.now();
|
|
548
|
+
writePendingSince(pendingSince);
|
|
549
|
+
}
|
|
550
|
+
const pendingAgeMin = (Date.now() - pendingSince) / 60000;
|
|
551
|
+
base.status = (pendingAgeMin >= SECURITY_PENDING_CAP_MIN) ? 'STALE' : 'PENDING';
|
|
552
|
+
return base;
|
|
553
|
+
}
|
|
554
|
+
|
|
407
555
|
// Overlay every locally-derived block onto the CLI data (mutates in place).
|
|
408
556
|
function applyLocalOverlays(data) {
|
|
409
557
|
data.adrs = getLocalADRCount();
|
|
@@ -411,6 +559,9 @@ function applyLocalOverlays(data) {
|
|
|
411
559
|
data.tests = getLocalTests();
|
|
412
560
|
data.hooks = getLocalHooks();
|
|
413
561
|
data.integration = getLocalIntegration();
|
|
562
|
+
// Security overlay: recompute freshness from disk on every render so cached
|
|
563
|
+
// CLI JSON can never freeze the pill at PENDING. See getLocalSecurity() above.
|
|
564
|
+
data.security = getLocalSecurity(data.security);
|
|
414
565
|
return data;
|
|
415
566
|
}
|
|
416
567
|
|
|
@@ -633,12 +784,55 @@ function compareVersions(a, b) {
|
|
|
633
784
|
return 0;
|
|
634
785
|
}
|
|
635
786
|
|
|
787
|
+
// #2742: when CWD is a linked git worktree, it has no node_modules of its
|
|
788
|
+
// own (worktrees don't get their own `npm install`), so every CWD-relative
|
|
789
|
+
// probe in getPkgVersion() misses and the version silently falls back to
|
|
790
|
+
// the baked-in default — even though the main repo's install a few
|
|
791
|
+
// directories away is perfectly resolvable. A linked worktree's `.git` is
|
|
792
|
+
// a plain FILE (not a directory) containing `gitdir: <main>/.git/worktrees/
|
|
793
|
+
// <name>`; walk up from CWD to find it, parse the pointer, and strip the
|
|
794
|
+
// trailing `.git/worktrees/<name>` segment to recover the main repo root.
|
|
795
|
+
// Pure fs — no `git rev-parse` spawn (statusline renders are latency-
|
|
796
|
+
// sensitive; this doc comment's neighbors are explicit about avoiding
|
|
797
|
+
// spawns in the render path).
|
|
798
|
+
function resolveWorktreeMainRoot() {
|
|
799
|
+
try {
|
|
800
|
+
let dir = CWD;
|
|
801
|
+
for (;;) {
|
|
802
|
+
const dotGit = path.join(dir, '.git');
|
|
803
|
+
if (fs.existsSync(dotGit)) {
|
|
804
|
+
if (fs.statSync(dotGit).isFile()) {
|
|
805
|
+
const contents = fs.readFileSync(dotGit, 'utf-8');
|
|
806
|
+
const m = contents.match(/^gitdir:\s*(.+)$/m);
|
|
807
|
+
const wtGitDir = m && m[1].trim();
|
|
808
|
+
if (wtGitDir) {
|
|
809
|
+
// Git writes this pointer with forward slashes even on Windows
|
|
810
|
+
// (a git-for-windows convention for its own internal files) —
|
|
811
|
+
// path.sep (backslash on win32) never matches, so normalize
|
|
812
|
+
// before searching rather than building an OS-specific marker.
|
|
813
|
+
const normalized = wtGitDir.replace(/\\/g, '/');
|
|
814
|
+
const marker = '/.git/worktrees/';
|
|
815
|
+
const idx = normalized.lastIndexOf(marker);
|
|
816
|
+
if (idx > 0) return normalized.slice(0, idx);
|
|
817
|
+
}
|
|
818
|
+
}
|
|
819
|
+
return null; // a real (non-worktree) .git dir — nothing to resolve
|
|
820
|
+
}
|
|
821
|
+
const parent = path.dirname(dir);
|
|
822
|
+
if (parent === dir) return null; // reached filesystem root
|
|
823
|
+
dir = parent;
|
|
824
|
+
}
|
|
825
|
+
} catch {
|
|
826
|
+
return null;
|
|
827
|
+
}
|
|
828
|
+
}
|
|
829
|
+
|
|
636
830
|
function getPkgVersion() {
|
|
637
831
|
// Baked in at generation time from the real running CLI's own resolved
|
|
638
832
|
// version (see generateStatuslineScript()'s doc comment) — correct even
|
|
639
833
|
// when this renders via a pure npx invocation with no local install for
|
|
640
834
|
// the candidate scan below to find.
|
|
641
|
-
let ver = "3.
|
|
835
|
+
let ver = "3.32.8";
|
|
642
836
|
try {
|
|
643
837
|
const home = os.homedir();
|
|
644
838
|
const pkgPaths = [
|
|
@@ -647,6 +841,17 @@ function getPkgVersion() {
|
|
|
647
841
|
path.join(CWD, 'node_modules', 'ruflo', 'package.json'),
|
|
648
842
|
path.join(CWD, 'v3', '@claude-flow', 'cli', 'package.json'),
|
|
649
843
|
];
|
|
844
|
+
// #2742: CWD is a linked git worktree with no node_modules of its own —
|
|
845
|
+
// probe the main repo's install too, so a worktree session shows the
|
|
846
|
+
// same version a main-repo session would.
|
|
847
|
+
const worktreeMainRoot = resolveWorktreeMainRoot();
|
|
848
|
+
if (worktreeMainRoot) {
|
|
849
|
+
pkgPaths.push(
|
|
850
|
+
path.join(worktreeMainRoot, 'node_modules', '@claude-flow', 'cli', 'package.json'),
|
|
851
|
+
path.join(worktreeMainRoot, 'node_modules', 'ruflo', 'package.json'),
|
|
852
|
+
path.join(worktreeMainRoot, 'v3', '@claude-flow', 'cli', 'package.json'),
|
|
853
|
+
);
|
|
854
|
+
}
|
|
650
855
|
// #2221: global installs (npm i -g ruflo) live outside CWD/node_modules, so the
|
|
651
856
|
// probes above all miss and the version falls back to the hard-coded default.
|
|
652
857
|
// Derive the global node_modules dir from the running node binary (no npm spawn —
|
|
@@ -797,10 +1002,14 @@ function generateStatusline() {
|
|
|
797
1002
|
if (healthAllGreen) {
|
|
798
1003
|
opsParts.push(c.brightGreen + '🛡 ✓' + c.reset);
|
|
799
1004
|
} else {
|
|
1005
|
+
// #2776: STALE gets dim/gray (distinct from the actionable yellow of
|
|
1006
|
+
// PENDING/IN_PROGRESS) so a stale pill visibly stops shouting for
|
|
1007
|
+
// attention — the user can act on the "run ruflo security scan" prompt or
|
|
1008
|
+
// ignore it without a permanently-yellow indicator.
|
|
800
1009
|
if (secStatus === 'PENDING') opsParts.push(c.brightYellow + '🛡 scan pending' + c.reset);
|
|
801
1010
|
else if (secStatus === 'IN_PROGRESS') opsParts.push(c.brightYellow + '🛡 scanning…' + c.reset);
|
|
802
1011
|
else if (secStatus === 'ISSUES') opsParts.push(c.brightRed + '🛡 findings' + c.reset);
|
|
803
|
-
else if (secStatus === 'STALE') opsParts.push(c.
|
|
1012
|
+
else if (secStatus === 'STALE') opsParts.push(c.dim + '🛡 scan stale' + c.reset);
|
|
804
1013
|
else if (secStatus !== 'NONE' && secStatus !== 'CLEAN') opsParts.push(c.brightRed + '🛡 ' + secStatus.toLowerCase() + c.reset);
|
|
805
1014
|
if (findings > 0) {
|
|
806
1015
|
opsParts.push(c.brightRed + '⚠ ' + findings + ' finding' + (findings === 1 ? '' : 's') + c.reset);
|