claude-flow 3.32.9 → 3.32.11
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 +156 -1
- 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 -79
- 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 -192
- 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/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 +31 -10
- 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/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.js +22 -22
- package/v3/@claude-flow/cli/dist/src/memory/memory-bridge.js +248 -158
- package/v3/@claude-flow/cli/dist/src/memory/memory-initializer.js +407 -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 -137
- 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
|
|
|
@@ -851,10 +1002,14 @@ function generateStatusline() {
|
|
|
851
1002
|
if (healthAllGreen) {
|
|
852
1003
|
opsParts.push(c.brightGreen + '🛡 ✓' + c.reset);
|
|
853
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.
|
|
854
1009
|
if (secStatus === 'PENDING') opsParts.push(c.brightYellow + '🛡 scan pending' + c.reset);
|
|
855
1010
|
else if (secStatus === 'IN_PROGRESS') opsParts.push(c.brightYellow + '🛡 scanning…' + c.reset);
|
|
856
1011
|
else if (secStatus === 'ISSUES') opsParts.push(c.brightRed + '🛡 findings' + c.reset);
|
|
857
|
-
else if (secStatus === 'STALE') opsParts.push(c.
|
|
1012
|
+
else if (secStatus === 'STALE') opsParts.push(c.dim + '🛡 scan stale' + c.reset);
|
|
858
1013
|
else if (secStatus !== 'NONE' && secStatus !== 'CLEAN') opsParts.push(c.brightRed + '🛡 ' + secStatus.toLowerCase() + c.reset);
|
|
859
1014
|
if (findings > 0) {
|
|
860
1015
|
opsParts.push(c.brightRed + '⚠ ' + findings + ' finding' + (findings === 1 ? '' : 's') + c.reset);
|