burhan-mop 0.1.0
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/.agents/AGENTS.md +54 -0
- package/.agents/skills/auto-deploy/SKILL.md +48 -0
- package/.agents/skills/autosycn/SKILL.md +75 -0
- package/.agents/skills/mop-help/SKILL.md +35 -0
- package/.agents/skills/ruflo-core/SKILL.md +35 -0
- package/.claude/agents/analysis/analyze-code-quality.md +179 -0
- package/.claude/agents/analysis/code-analyzer.md +210 -0
- package/.claude/agents/analysis/code-review/analyze-code-quality.md +179 -0
- package/.claude/agents/architecture/arch-system-design.md +157 -0
- package/.claude/agents/architecture/system-design/arch-system-design.md +155 -0
- package/.claude/agents/browser/browser-agent.yaml +182 -0
- package/.claude/agents/consensus/byzantine-coordinator.md +63 -0
- package/.claude/agents/consensus/crdt-synchronizer.md +997 -0
- package/.claude/agents/consensus/gossip-coordinator.md +63 -0
- package/.claude/agents/consensus/performance-benchmarker.md +851 -0
- package/.claude/agents/consensus/quorum-manager.md +823 -0
- package/.claude/agents/consensus/raft-manager.md +63 -0
- package/.claude/agents/consensus/security-manager.md +622 -0
- package/.claude/agents/core/planner.md +375 -0
- package/.claude/agents/custom/test-long-runner.md +44 -0
- package/.claude/agents/data/data-ml-model.md +445 -0
- package/.claude/agents/data/ml/data-ml-model.md +193 -0
- package/.claude/agents/development/backend/dev-backend-api.md +142 -0
- package/.claude/agents/development/dev-backend-api.md +345 -0
- package/.claude/agents/devops/ci-cd/ops-cicd-github.md +164 -0
- package/.claude/agents/devops/ops-cicd-github.md +165 -0
- package/.claude/agents/documentation/api-docs/docs-api-openapi.md +174 -0
- package/.claude/agents/documentation/docs-api-openapi.md +355 -0
- package/.claude/agents/flow-nexus/app-store.md +88 -0
- package/.claude/agents/flow-nexus/authentication.md +69 -0
- package/.claude/agents/flow-nexus/challenges.md +81 -0
- package/.claude/agents/flow-nexus/neural-network.md +88 -0
- package/.claude/agents/flow-nexus/payments.md +83 -0
- package/.claude/agents/flow-nexus/sandbox.md +76 -0
- package/.claude/agents/flow-nexus/swarm.md +76 -0
- package/.claude/agents/flow-nexus/user-tools.md +96 -0
- package/.claude/agents/flow-nexus/workflow.md +84 -0
- package/.claude/agents/github/code-review-swarm.md +377 -0
- package/.claude/agents/github/github-modes.md +173 -0
- package/.claude/agents/github/issue-tracker.md +576 -0
- package/.claude/agents/github/multi-repo-swarm.md +553 -0
- package/.claude/agents/github/pr-manager.md +438 -0
- package/.claude/agents/github/project-board-sync.md +509 -0
- package/.claude/agents/github/release-manager.md +605 -0
- package/.claude/agents/github/release-swarm.md +583 -0
- package/.claude/agents/github/repo-architect.md +398 -0
- package/.claude/agents/github/swarm-issue.md +573 -0
- package/.claude/agents/github/swarm-pr.md +428 -0
- package/.claude/agents/github/sync-coordinator.md +452 -0
- package/.claude/agents/github/workflow-automation.md +903 -0
- package/.claude/agents/goal/agent.md +816 -0
- package/.claude/agents/optimization/benchmark-suite.md +665 -0
- package/.claude/agents/optimization/load-balancer.md +431 -0
- package/.claude/agents/optimization/performance-monitor.md +672 -0
- package/.claude/agents/optimization/resource-allocator.md +674 -0
- package/.claude/agents/optimization/topology-optimizer.md +808 -0
- package/.claude/agents/payments/agentic-payments.md +126 -0
- package/.claude/agents/sona/sona-learning-optimizer.md +74 -0
- package/.claude/agents/sparc/architecture.md +699 -0
- package/.claude/agents/sparc/pseudocode.md +520 -0
- package/.claude/agents/sparc/refinement.md +802 -0
- package/.claude/agents/sparc/specification.md +478 -0
- package/.claude/agents/specialized/mobile/spec-mobile-react-native.md +225 -0
- package/.claude/agents/specialized/spec-mobile-react-native.md +227 -0
- package/.claude/agents/sublinear/consensus-coordinator.md +338 -0
- package/.claude/agents/sublinear/matrix-optimizer.md +185 -0
- package/.claude/agents/sublinear/pagerank-analyzer.md +299 -0
- package/.claude/agents/sublinear/performance-optimizer.md +368 -0
- package/.claude/agents/sublinear/trading-predictor.md +246 -0
- package/.claude/agents/swarm/adaptive-coordinator.md +1127 -0
- package/.claude/agents/swarm/hierarchical-coordinator.md +710 -0
- package/.claude/agents/swarm/mesh-coordinator.md +963 -0
- package/.claude/agents/templates/automation-smart-agent.md +205 -0
- package/.claude/agents/templates/base-template-generator.md +289 -0
- package/.claude/agents/templates/coordinator-swarm-init.md +90 -0
- package/.claude/agents/templates/github-pr-manager.md +177 -0
- package/.claude/agents/templates/implementer-sparc-coder.md +259 -0
- package/.claude/agents/templates/memory-coordinator.md +187 -0
- package/.claude/agents/templates/orchestrator-task.md +139 -0
- package/.claude/agents/templates/performance-analyzer.md +199 -0
- package/.claude/agents/templates/sparc-coordinator.md +514 -0
- package/.claude/agents/testing/production-validator.md +395 -0
- package/.claude/agents/testing/tdd-london-swarm.md +244 -0
- package/.claude/agents/v3/aidefence-guardian.md +282 -0
- package/.claude/agents/v3/claims-authorizer.md +208 -0
- package/.claude/agents/v3/collective-intelligence-coordinator.md +993 -0
- package/.claude/agents/v3/ddd-domain-expert.md +220 -0
- package/.claude/agents/v3/injection-analyst.md +236 -0
- package/.claude/agents/v3/performance-engineer.md +1233 -0
- package/.claude/agents/v3/pii-detector.md +151 -0
- package/.claude/agents/v3/reasoningbank-learner.md +213 -0
- package/.claude/agents/v3/security-architect-aidefence.md +410 -0
- package/.claude/agents/v3/security-architect.md +867 -0
- package/.claude/agents/v3/swarm-memory-manager.md +157 -0
- package/.claude/agents/v3/v3-integration-architect.md +205 -0
- package/.claude/commands/agents/README.md +50 -0
- package/.claude/commands/agents/agent-capabilities.md +140 -0
- package/.claude/commands/agents/agent-coordination.md +28 -0
- package/.claude/commands/agents/agent-spawning.md +28 -0
- package/.claude/commands/agents/agent-types.md +216 -0
- package/.claude/commands/agents/health.md +139 -0
- package/.claude/commands/agents/list.md +100 -0
- package/.claude/commands/agents/logs.md +130 -0
- package/.claude/commands/agents/metrics.md +122 -0
- package/.claude/commands/agents/pool.md +127 -0
- package/.claude/commands/agents/spawn.md +140 -0
- package/.claude/commands/agents/status.md +115 -0
- package/.claude/commands/agents/stop.md +102 -0
- package/.claude/commands/analysis/COMMAND_COMPLIANCE_REPORT.md +54 -0
- package/.claude/commands/analysis/README.md +9 -0
- package/.claude/commands/analysis/bottleneck-detect.md +162 -0
- package/.claude/commands/analysis/performance-bottlenecks.md +59 -0
- package/.claude/commands/analysis/performance-report.md +25 -0
- package/.claude/commands/analysis/token-efficiency.md +45 -0
- package/.claude/commands/analysis/token-usage.md +25 -0
- package/.claude/commands/automation/README.md +9 -0
- package/.claude/commands/automation/auto-agent.md +122 -0
- package/.claude/commands/automation/self-healing.md +106 -0
- package/.claude/commands/automation/session-memory.md +90 -0
- package/.claude/commands/automation/smart-agents.md +73 -0
- package/.claude/commands/automation/smart-spawn.md +25 -0
- package/.claude/commands/automation/workflow-select.md +25 -0
- package/.claude/commands/claude-flow-help.md +103 -0
- package/.claude/commands/claude-flow-memory.md +107 -0
- package/.claude/commands/claude-flow-swarm.md +205 -0
- package/.claude/commands/coordination/README.md +9 -0
- package/.claude/commands/coordination/agent-spawn.md +25 -0
- package/.claude/commands/coordination/init.md +44 -0
- package/.claude/commands/coordination/orchestrate.md +43 -0
- package/.claude/commands/coordination/spawn.md +45 -0
- package/.claude/commands/coordination/swarm-init.md +85 -0
- package/.claude/commands/coordination/task-orchestrate.md +25 -0
- package/.claude/commands/github/README.md +11 -0
- package/.claude/commands/github/code-review-swarm.md +514 -0
- package/.claude/commands/github/code-review.md +25 -0
- package/.claude/commands/github/github-modes.md +147 -0
- package/.claude/commands/github/github-swarm.md +121 -0
- package/.claude/commands/github/issue-tracker.md +292 -0
- package/.claude/commands/github/issue-triage.md +25 -0
- package/.claude/commands/github/multi-repo-swarm.md +519 -0
- package/.claude/commands/github/pr-enhance.md +26 -0
- package/.claude/commands/github/pr-manager.md +170 -0
- package/.claude/commands/github/project-board-sync.md +471 -0
- package/.claude/commands/github/release-manager.md +340 -0
- package/.claude/commands/github/release-swarm.md +544 -0
- package/.claude/commands/github/repo-analyze.md +25 -0
- package/.claude/commands/github/repo-architect.md +367 -0
- package/.claude/commands/github/swarm-issue.md +485 -0
- package/.claude/commands/github/swarm-pr.md +288 -0
- package/.claude/commands/github/sync-coordinator.md +303 -0
- package/.claude/commands/github/workflow-automation.md +442 -0
- package/.claude/commands/hive-mind/README.md +17 -0
- package/.claude/commands/hive-mind/hive-mind-consensus.md +8 -0
- package/.claude/commands/hive-mind/hive-mind-init.md +18 -0
- package/.claude/commands/hive-mind/hive-mind-memory.md +8 -0
- package/.claude/commands/hive-mind/hive-mind-metrics.md +8 -0
- package/.claude/commands/hive-mind/hive-mind-resume.md +8 -0
- package/.claude/commands/hive-mind/hive-mind-sessions.md +8 -0
- package/.claude/commands/hive-mind/hive-mind-spawn.md +21 -0
- package/.claude/commands/hive-mind/hive-mind-status.md +8 -0
- package/.claude/commands/hive-mind/hive-mind-stop.md +8 -0
- package/.claude/commands/hive-mind/hive-mind-wizard.md +8 -0
- package/.claude/commands/hive-mind/hive-mind.md +27 -0
- package/.claude/commands/hooks/README.md +11 -0
- package/.claude/commands/hooks/overview.md +58 -0
- package/.claude/commands/hooks/post-edit.md +117 -0
- package/.claude/commands/hooks/post-task.md +112 -0
- package/.claude/commands/hooks/pre-edit.md +113 -0
- package/.claude/commands/hooks/pre-task.md +111 -0
- package/.claude/commands/hooks/session-end.md +118 -0
- package/.claude/commands/hooks/setup.md +103 -0
- package/.claude/commands/memory/README.md +9 -0
- package/.claude/commands/memory/memory-persist.md +25 -0
- package/.claude/commands/memory/memory-search.md +25 -0
- package/.claude/commands/memory/memory-usage.md +25 -0
- package/.claude/commands/memory/neural.md +47 -0
- package/.claude/commands/monitoring/README.md +9 -0
- package/.claude/commands/monitoring/agent-metrics.md +25 -0
- package/.claude/commands/monitoring/agents.md +44 -0
- package/.claude/commands/monitoring/real-time-view.md +25 -0
- package/.claude/commands/monitoring/status.md +46 -0
- package/.claude/commands/monitoring/swarm-monitor.md +25 -0
- package/.claude/commands/optimization/README.md +9 -0
- package/.claude/commands/optimization/auto-topology.md +62 -0
- package/.claude/commands/optimization/cache-manage.md +25 -0
- package/.claude/commands/optimization/parallel-execute.md +25 -0
- package/.claude/commands/optimization/parallel-execution.md +50 -0
- package/.claude/commands/optimization/topology-optimize.md +25 -0
- package/.claude/commands/pair/README.md +261 -0
- package/.claude/commands/pair/commands.md +546 -0
- package/.claude/commands/pair/config.md +510 -0
- package/.claude/commands/pair/examples.md +512 -0
- package/.claude/commands/pair/modes.md +348 -0
- package/.claude/commands/pair/session.md +407 -0
- package/.claude/commands/pair/start.md +209 -0
- package/.claude/commands/sparc/analyzer.md +52 -0
- package/.claude/commands/sparc/architect.md +53 -0
- package/.claude/commands/sparc/ask.md +97 -0
- package/.claude/commands/sparc/batch-executor.md +54 -0
- package/.claude/commands/sparc/code.md +89 -0
- package/.claude/commands/sparc/coder.md +54 -0
- package/.claude/commands/sparc/debug.md +83 -0
- package/.claude/commands/sparc/debugger.md +54 -0
- package/.claude/commands/sparc/designer.md +53 -0
- package/.claude/commands/sparc/devops.md +109 -0
- package/.claude/commands/sparc/docs-writer.md +80 -0
- package/.claude/commands/sparc/documenter.md +54 -0
- package/.claude/commands/sparc/innovator.md +54 -0
- package/.claude/commands/sparc/integration.md +83 -0
- package/.claude/commands/sparc/mcp.md +117 -0
- package/.claude/commands/sparc/memory-manager.md +54 -0
- package/.claude/commands/sparc/optimizer.md +54 -0
- package/.claude/commands/sparc/orchestrator.md +132 -0
- package/.claude/commands/sparc/post-deployment-monitoring-mode.md +83 -0
- package/.claude/commands/sparc/refinement-optimization-mode.md +83 -0
- package/.claude/commands/sparc/researcher.md +54 -0
- package/.claude/commands/sparc/reviewer.md +54 -0
- package/.claude/commands/sparc/security-review.md +80 -0
- package/.claude/commands/sparc/sparc-modes.md +174 -0
- package/.claude/commands/sparc/sparc.md +111 -0
- package/.claude/commands/sparc/spec-pseudocode.md +80 -0
- package/.claude/commands/sparc/supabase-admin.md +348 -0
- package/.claude/commands/sparc/swarm-coordinator.md +54 -0
- package/.claude/commands/sparc/tdd.md +54 -0
- package/.claude/commands/sparc/tester.md +54 -0
- package/.claude/commands/sparc/tutorial.md +79 -0
- package/.claude/commands/sparc/workflow-manager.md +54 -0
- package/.claude/commands/stream-chain/pipeline.md +121 -0
- package/.claude/commands/stream-chain/run.md +70 -0
- package/.claude/commands/swarm/README.md +15 -0
- package/.claude/commands/swarm/analysis.md +95 -0
- package/.claude/commands/swarm/development.md +96 -0
- package/.claude/commands/swarm/examples.md +168 -0
- package/.claude/commands/swarm/maintenance.md +102 -0
- package/.claude/commands/swarm/optimization.md +117 -0
- package/.claude/commands/swarm/research.md +136 -0
- package/.claude/commands/swarm/swarm-analysis.md +8 -0
- package/.claude/commands/swarm/swarm-background.md +8 -0
- package/.claude/commands/swarm/swarm-init.md +19 -0
- package/.claude/commands/swarm/swarm-modes.md +8 -0
- package/.claude/commands/swarm/swarm-monitor.md +8 -0
- package/.claude/commands/swarm/swarm-spawn.md +19 -0
- package/.claude/commands/swarm/swarm-status.md +8 -0
- package/.claude/commands/swarm/swarm-strategies.md +8 -0
- package/.claude/commands/swarm/swarm.md +87 -0
- package/.claude/commands/swarm/testing.md +131 -0
- package/.claude/commands/training/README.md +9 -0
- package/.claude/commands/training/model-update.md +25 -0
- package/.claude/commands/training/neural-patterns.md +108 -0
- package/.claude/commands/training/neural-train.md +75 -0
- package/.claude/commands/training/pattern-learn.md +25 -0
- package/.claude/commands/training/specialization.md +63 -0
- package/.claude/commands/truth/start.md +143 -0
- package/.claude/commands/verify/check.md +50 -0
- package/.claude/commands/verify/start.md +128 -0
- package/.claude/commands/workflows/README.md +9 -0
- package/.claude/commands/workflows/development.md +78 -0
- package/.claude/commands/workflows/research.md +63 -0
- package/.claude/commands/workflows/workflow-create.md +25 -0
- package/.claude/commands/workflows/workflow-execute.md +25 -0
- package/.claude/commands/workflows/workflow-export.md +25 -0
- package/.claude/helpers/README.md +97 -0
- package/.claude/helpers/adr-compliance.sh +186 -0
- package/.claude/helpers/auto-commit.sh +178 -0
- package/.claude/helpers/auto-memory-hook.mjs +368 -0
- package/.claude/helpers/checkpoint-manager.sh +251 -0
- package/.claude/helpers/daemon-manager.sh +252 -0
- package/.claude/helpers/ddd-tracker.sh +144 -0
- package/.claude/helpers/github-safe.js +156 -0
- package/.claude/helpers/github-setup.sh +45 -0
- package/.claude/helpers/guidance-hook.sh +13 -0
- package/.claude/helpers/guidance-hooks.sh +102 -0
- package/.claude/helpers/health-monitor.sh +108 -0
- package/.claude/helpers/hook-handler.cjs +286 -0
- package/.claude/helpers/intelligence.cjs +1031 -0
- package/.claude/helpers/learning-hooks.sh +329 -0
- package/.claude/helpers/learning-optimizer.sh +127 -0
- package/.claude/helpers/learning-service.mjs +1144 -0
- package/.claude/helpers/memory.js +83 -0
- package/.claude/helpers/metrics-db.mjs +488 -0
- package/.claude/helpers/pattern-consolidator.sh +86 -0
- package/.claude/helpers/perf-worker.sh +160 -0
- package/.claude/helpers/post-commit +16 -0
- package/.claude/helpers/pre-commit +26 -0
- package/.claude/helpers/quick-start.sh +19 -0
- package/.claude/helpers/router.js +105 -0
- package/.claude/helpers/ruflo-hook.cjs +59 -0
- package/.claude/helpers/security-scanner.sh +127 -0
- package/.claude/helpers/session.js +157 -0
- package/.claude/helpers/setup-mcp.sh +18 -0
- package/.claude/helpers/standard-checkpoint-hooks.sh +189 -0
- package/.claude/helpers/statusline-hook.sh +21 -0
- package/.claude/helpers/statusline.cjs +693 -0
- package/.claude/helpers/statusline.js +352 -0
- package/.claude/helpers/swarm-comms.sh +353 -0
- package/.claude/helpers/swarm-hooks.sh +761 -0
- package/.claude/helpers/swarm-monitor.sh +211 -0
- package/.claude/helpers/sync-v3-metrics.sh +245 -0
- package/.claude/helpers/update-v3-progress.sh +166 -0
- package/.claude/helpers/v3-quick-status.sh +58 -0
- package/.claude/helpers/v3.sh +111 -0
- package/.claude/helpers/validate-v3-config.sh +216 -0
- package/.claude/helpers/worker-manager.sh +170 -0
- package/.claude/settings.json +285 -0
- package/.claude/skills/agentdb-advanced/SKILL.md +550 -0
- package/.claude/skills/agentdb-learning/SKILL.md +545 -0
- package/.claude/skills/agentdb-memory-patterns/SKILL.md +339 -0
- package/.claude/skills/agentdb-optimization/SKILL.md +509 -0
- package/.claude/skills/agentdb-vector-search/SKILL.md +339 -0
- package/.claude/skills/auto-deploy/SKILL.md +31 -0
- package/.claude/skills/autosycn/SKILL.md +30 -0
- package/.claude/skills/browser/SKILL.md +204 -0
- package/.claude/skills/dual-mode/README.md +71 -0
- package/.claude/skills/dual-mode/dual-collect.md +103 -0
- package/.claude/skills/dual-mode/dual-coordinate.md +85 -0
- package/.claude/skills/dual-mode/dual-spawn.md +81 -0
- package/.claude/skills/flow-nexus-neural/SKILL.md +727 -0
- package/.claude/skills/flow-nexus-platform/SKILL.md +1154 -0
- package/.claude/skills/flow-nexus-swarm/SKILL.md +604 -0
- package/.claude/skills/github-code-review/SKILL.md +1125 -0
- package/.claude/skills/github-multi-repo/SKILL.md +862 -0
- package/.claude/skills/github-project-management/SKILL.md +1262 -0
- package/.claude/skills/github-release-management/SKILL.md +1064 -0
- package/.claude/skills/github-workflow-automation/SKILL.md +1047 -0
- package/.claude/skills/hooks-automation/SKILL.md +1201 -0
- package/.claude/skills/mop-help/SKILL.md +35 -0
- package/.claude/skills/pair-programming/SKILL.md +1202 -0
- package/.claude/skills/reasoningbank-agentdb/SKILL.md +446 -0
- package/.claude/skills/reasoningbank-intelligence/SKILL.md +201 -0
- package/.claude/skills/skill-builder/SKILL.md +910 -0
- package/.claude/skills/sparc-methodology/SKILL.md +1106 -0
- package/.claude/skills/stream-chain/SKILL.md +560 -0
- package/.claude/skills/swarm-advanced/SKILL.md +970 -0
- package/.claude/skills/swarm-orchestration/SKILL.md +179 -0
- package/.claude/skills/v3-cli-modernization/SKILL.md +872 -0
- package/.claude/skills/v3-core-implementation/SKILL.md +797 -0
- package/.claude/skills/v3-ddd-architecture/SKILL.md +442 -0
- package/.claude/skills/v3-integration-deep/SKILL.md +241 -0
- package/.claude/skills/v3-mcp-optimization/SKILL.md +777 -0
- package/.claude/skills/v3-memory-unification/SKILL.md +174 -0
- package/.claude/skills/v3-performance-optimization/SKILL.md +390 -0
- package/.claude/skills/v3-security-overhaul/SKILL.md +82 -0
- package/.claude/skills/v3-swarm-coordination/SKILL.md +340 -0
- package/.claude/skills/verification-quality/SKILL.md +691 -0
- package/.claude-flow/CAPABILITIES.md +403 -0
- package/.claude-flow/config.yaml +43 -0
- package/.claude-flow/metrics/learning.json +17 -0
- package/.claude-flow/metrics/swarm-activity.json +18 -0
- package/.claude-flow/metrics/v3-progress.json +26 -0
- package/.claude-flow/security/audit-status.json +8 -0
- package/.codex/config.toml +39 -0
- package/.gemini/settings.json +49 -0
- package/.mcp.json +55 -0
- package/.memoryofplanet/PROTOCOL.md +436 -0
- package/.memoryofplanet/STATE.json +561 -0
- package/.memoryofplanet/config/defaults.json +46 -0
- package/.memoryofplanet/config/team.json +7 -0
- package/.memoryofplanet/scripts/burhan-mop.mjs +124 -0
- package/.memoryofplanet/scripts/mop-auto-deploy.mjs +153 -0
- package/.memoryofplanet/scripts/mop-autosycn.mjs +617 -0
- package/.memoryofplanet/scripts/mop-core.mjs +774 -0
- package/.memoryofplanet/scripts/mop-workflow.mjs +348 -0
- package/.memoryofplanet/templates/artifacts/adversarial-review.md +33 -0
- package/.memoryofplanet/templates/artifacts/architecture.md +28 -0
- package/.memoryofplanet/templates/artifacts/decision-log.md +21 -0
- package/.memoryofplanet/templates/artifacts/handoff.md +21 -0
- package/.memoryofplanet/templates/artifacts/implementation-notes.md +21 -0
- package/.memoryofplanet/templates/artifacts/prd.md +29 -0
- package/.memoryofplanet/templates/artifacts/product-brief.md +30 -0
- package/.memoryofplanet/templates/artifacts/readiness-report.md +25 -0
- package/.memoryofplanet/templates/artifacts/release-notes.md +21 -0
- package/.memoryofplanet/templates/artifacts/review.md +21 -0
- package/.memoryofplanet/templates/artifacts/story.md +25 -0
- package/.memoryofplanet/templates/artifacts/ux-spec.md +32 -0
- package/AGENTS.md +126 -0
- package/CLAUDE.md +235 -0
- package/GEMINI.md +19 -0
- package/README.md +1096 -0
- package/bin/burhan-mop.mjs +2 -0
- package/bin/mop-core.mjs +2 -0
- package/bin/mop-workflow.mjs +2 -0
- package/package.json +66 -0
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Claude Flow V3 - Performance Benchmark Worker
|
|
3
|
+
# Runs periodic benchmarks and updates metrics using agentic-flow agents
|
|
4
|
+
|
|
5
|
+
set -euo pipefail
|
|
6
|
+
|
|
7
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
8
|
+
PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
|
|
9
|
+
METRICS_DIR="$PROJECT_ROOT/.claude-flow/metrics"
|
|
10
|
+
PERF_FILE="$METRICS_DIR/performance.json"
|
|
11
|
+
LAST_RUN_FILE="$METRICS_DIR/.perf-last-run"
|
|
12
|
+
|
|
13
|
+
mkdir -p "$METRICS_DIR"
|
|
14
|
+
|
|
15
|
+
# Check if we should run (throttle to once per 5 minutes)
|
|
16
|
+
should_run() {
|
|
17
|
+
if [ ! -f "$LAST_RUN_FILE" ]; then
|
|
18
|
+
return 0
|
|
19
|
+
fi
|
|
20
|
+
|
|
21
|
+
local last_run=$(cat "$LAST_RUN_FILE" 2>/dev/null || echo "0")
|
|
22
|
+
local now=$(date +%s)
|
|
23
|
+
local diff=$((now - last_run))
|
|
24
|
+
|
|
25
|
+
# Run every 5 minutes (300 seconds)
|
|
26
|
+
[ "$diff" -ge 300 ]
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
# Simple search benchmark (measures grep/search speed)
|
|
30
|
+
benchmark_search() {
|
|
31
|
+
local start=$(date +%s%3N)
|
|
32
|
+
|
|
33
|
+
# Search through v3 codebase
|
|
34
|
+
find "$PROJECT_ROOT/v3" -name "*.ts" -type f 2>/dev/null | \
|
|
35
|
+
xargs grep -l "function\|class\|interface" 2>/dev/null | \
|
|
36
|
+
wc -l > /dev/null
|
|
37
|
+
|
|
38
|
+
local end=$(date +%s%3N)
|
|
39
|
+
local duration=$((end - start))
|
|
40
|
+
|
|
41
|
+
# Baseline is ~100ms, calculate improvement
|
|
42
|
+
local baseline=100
|
|
43
|
+
if [ "$duration" -gt 0 ]; then
|
|
44
|
+
local improvement=$(echo "scale=2; $baseline / $duration" | bc 2>/dev/null || echo "1.0")
|
|
45
|
+
echo "${improvement}x"
|
|
46
|
+
else
|
|
47
|
+
echo "1.0x"
|
|
48
|
+
fi
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
# Memory efficiency check
|
|
52
|
+
benchmark_memory() {
|
|
53
|
+
local node_mem=$(ps aux 2>/dev/null | grep -E "(node|agentic)" | grep -v grep | awk '{sum += $6} END {print int(sum/1024)}')
|
|
54
|
+
local baseline_mem=4000 # 4GB baseline
|
|
55
|
+
|
|
56
|
+
if [ -n "$node_mem" ] && [ "$node_mem" -gt 0 ]; then
|
|
57
|
+
local reduction=$(echo "scale=0; 100 - ($node_mem * 100 / $baseline_mem)" | bc 2>/dev/null || echo "0")
|
|
58
|
+
if [ "$reduction" -lt 0 ]; then reduction=0; fi
|
|
59
|
+
echo "${reduction}%"
|
|
60
|
+
else
|
|
61
|
+
echo "0%"
|
|
62
|
+
fi
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
# Startup time check
|
|
66
|
+
benchmark_startup() {
|
|
67
|
+
local start=$(date +%s%3N)
|
|
68
|
+
|
|
69
|
+
# Quick check of agentic-flow responsiveness
|
|
70
|
+
timeout 5 npx agentic-flow@alpha --version >/dev/null 2>&1 || true
|
|
71
|
+
|
|
72
|
+
local end=$(date +%s%3N)
|
|
73
|
+
local duration=$((end - start))
|
|
74
|
+
|
|
75
|
+
echo "${duration}ms"
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
# Run benchmarks and update metrics
|
|
79
|
+
run_benchmarks() {
|
|
80
|
+
echo "[$(date +%H:%M:%S)] Running performance benchmarks..."
|
|
81
|
+
|
|
82
|
+
local search_speed=$(benchmark_search)
|
|
83
|
+
local memory_reduction=$(benchmark_memory)
|
|
84
|
+
local startup_time=$(benchmark_startup)
|
|
85
|
+
|
|
86
|
+
# Calculate overall speedup (simplified)
|
|
87
|
+
local speedup_num=$(echo "$search_speed" | tr -d 'x')
|
|
88
|
+
if [ -z "$speedup_num" ] || [ "$speedup_num" = "1.0" ]; then
|
|
89
|
+
speedup_num="1.0"
|
|
90
|
+
fi
|
|
91
|
+
|
|
92
|
+
# Update performance.json
|
|
93
|
+
if [ -f "$PERF_FILE" ] && command -v jq &>/dev/null; then
|
|
94
|
+
jq --arg search "$search_speed" \
|
|
95
|
+
--arg memory "$memory_reduction" \
|
|
96
|
+
--arg startup "$startup_time" \
|
|
97
|
+
--arg speedup "${speedup_num}x" \
|
|
98
|
+
--arg updated "$(date -Iseconds)" \
|
|
99
|
+
'.search.improvement = $search |
|
|
100
|
+
.memory.reduction = $memory |
|
|
101
|
+
.startupTime.current = $startup |
|
|
102
|
+
.flashAttention.speedup = $speedup |
|
|
103
|
+
."last-updated" = $updated' \
|
|
104
|
+
"$PERF_FILE" > "$PERF_FILE.tmp" && mv "$PERF_FILE.tmp" "$PERF_FILE"
|
|
105
|
+
|
|
106
|
+
echo "[$(date +%H:%M:%S)] ✓ Metrics updated: search=$search_speed memory=$memory_reduction startup=$startup_time"
|
|
107
|
+
else
|
|
108
|
+
echo "[$(date +%H:%M:%S)] ⚠ Could not update metrics (missing jq or file)"
|
|
109
|
+
fi
|
|
110
|
+
|
|
111
|
+
# Record last run time
|
|
112
|
+
date +%s > "$LAST_RUN_FILE"
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
# Spawn agentic-flow performance agent for deep analysis
|
|
116
|
+
run_deep_benchmark() {
|
|
117
|
+
echo "[$(date +%H:%M:%S)] Spawning performance-benchmarker agent..."
|
|
118
|
+
|
|
119
|
+
npx agentic-flow@alpha --agent perf-analyzer --task "Analyze current system performance and update metrics" 2>/dev/null &
|
|
120
|
+
local pid=$!
|
|
121
|
+
|
|
122
|
+
# Don't wait, let it run in background
|
|
123
|
+
echo "[$(date +%H:%M:%S)] Agent spawned (PID: $pid)"
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
# Main dispatcher
|
|
127
|
+
case "${1:-check}" in
|
|
128
|
+
"run"|"benchmark")
|
|
129
|
+
run_benchmarks
|
|
130
|
+
;;
|
|
131
|
+
"deep")
|
|
132
|
+
run_deep_benchmark
|
|
133
|
+
;;
|
|
134
|
+
"check")
|
|
135
|
+
if should_run; then
|
|
136
|
+
run_benchmarks
|
|
137
|
+
else
|
|
138
|
+
echo "[$(date +%H:%M:%S)] Skipping benchmark (throttled)"
|
|
139
|
+
fi
|
|
140
|
+
;;
|
|
141
|
+
"force")
|
|
142
|
+
rm -f "$LAST_RUN_FILE"
|
|
143
|
+
run_benchmarks
|
|
144
|
+
;;
|
|
145
|
+
"status")
|
|
146
|
+
if [ -f "$PERF_FILE" ]; then
|
|
147
|
+
jq -r '"Search: \(.search.improvement // "1x") | Memory: \(.memory.reduction // "0%") | Startup: \(.startupTime.current // "N/A")"' "$PERF_FILE" 2>/dev/null
|
|
148
|
+
else
|
|
149
|
+
echo "No metrics available"
|
|
150
|
+
fi
|
|
151
|
+
;;
|
|
152
|
+
*)
|
|
153
|
+
echo "Usage: perf-worker.sh [run|deep|check|force|status]"
|
|
154
|
+
echo " run - Run quick benchmarks"
|
|
155
|
+
echo " deep - Spawn agentic-flow agent for deep analysis"
|
|
156
|
+
echo " check - Run if throttle allows (default)"
|
|
157
|
+
echo " force - Force run ignoring throttle"
|
|
158
|
+
echo " status - Show current metrics"
|
|
159
|
+
;;
|
|
160
|
+
esac
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Claude Flow Post-Commit Hook
|
|
3
|
+
# Records commit metrics and trains patterns
|
|
4
|
+
|
|
5
|
+
COMMIT_HASH=$(git rev-parse HEAD)
|
|
6
|
+
COMMIT_MSG=$(git log -1 --pretty=%B)
|
|
7
|
+
|
|
8
|
+
echo "📊 Recording commit metrics..."
|
|
9
|
+
|
|
10
|
+
# Notify claude-flow of commit
|
|
11
|
+
npx @claude-flow/cli hooks notify \
|
|
12
|
+
--message "Commit: $COMMIT_MSG" \
|
|
13
|
+
--level info \
|
|
14
|
+
--metadata '{"hash": "'$COMMIT_HASH'"}' 2>/dev/null || true
|
|
15
|
+
|
|
16
|
+
echo "✅ Commit recorded"
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Claude Flow Pre-Commit Hook
|
|
3
|
+
# Validates code quality before commit
|
|
4
|
+
|
|
5
|
+
set -e
|
|
6
|
+
|
|
7
|
+
echo "🔍 Running Claude Flow pre-commit checks..."
|
|
8
|
+
|
|
9
|
+
# Get staged files
|
|
10
|
+
STAGED_FILES=$(git diff --cached --name-only --diff-filter=ACM)
|
|
11
|
+
|
|
12
|
+
# Run validation for each staged file
|
|
13
|
+
for FILE in $STAGED_FILES; do
|
|
14
|
+
if [[ "$FILE" =~ \.(ts|js|tsx|jsx)$ ]]; then
|
|
15
|
+
echo " Validating: $FILE"
|
|
16
|
+
npx @claude-flow/cli hooks pre-edit --file "$FILE" --validate-syntax 2>/dev/null || true
|
|
17
|
+
fi
|
|
18
|
+
done
|
|
19
|
+
|
|
20
|
+
# Run tests if available
|
|
21
|
+
if [ -f "package.json" ] && grep -q '"test"' package.json; then
|
|
22
|
+
echo "🧪 Running tests..."
|
|
23
|
+
npm test --if-present 2>/dev/null || echo " Tests skipped or failed"
|
|
24
|
+
fi
|
|
25
|
+
|
|
26
|
+
echo "✅ Pre-commit checks complete"
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Quick start guide for Claude Flow
|
|
3
|
+
|
|
4
|
+
echo "🚀 Claude Flow Quick Start"
|
|
5
|
+
echo "=========================="
|
|
6
|
+
echo ""
|
|
7
|
+
echo "1. Initialize a swarm:"
|
|
8
|
+
echo " npx claude-flow swarm init --topology hierarchical"
|
|
9
|
+
echo ""
|
|
10
|
+
echo "2. Spawn agents:"
|
|
11
|
+
echo " npx claude-flow agent spawn --type coder --name "API Developer""
|
|
12
|
+
echo ""
|
|
13
|
+
echo "3. Orchestrate tasks:"
|
|
14
|
+
echo " npx claude-flow task orchestrate --task "Build REST API""
|
|
15
|
+
echo ""
|
|
16
|
+
echo "4. Monitor progress:"
|
|
17
|
+
echo " npx claude-flow swarm monitor"
|
|
18
|
+
echo ""
|
|
19
|
+
echo "📚 For more examples, see .claude/commands/"
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Claude Flow Agent Router
|
|
4
|
+
*
|
|
5
|
+
* Static keyword router that suggests an agent for a task description.
|
|
6
|
+
* NOTE: This is *not* a learned model. It is a heuristic table; "confidence"
|
|
7
|
+
* is reported as a heuristic prior, not a calibrated probability.
|
|
8
|
+
*
|
|
9
|
+
* #2257 fix: patterns are now word-boundary-anchored so short tokens like
|
|
10
|
+
* `cd`, `ci`, `ui`, `add`, `structure` no longer match inside unrelated
|
|
11
|
+
* words (`decision`, `infrastructure`, `address`, `addendum`). Default
|
|
12
|
+
* confidence dropped from 0.8 to 0.6 to better reflect that this is a
|
|
13
|
+
* static heuristic, not a learned classifier.
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
const AGENT_CAPABILITIES = {
|
|
17
|
+
coder: ['code-generation', 'refactoring', 'debugging', 'implementation'],
|
|
18
|
+
tester: ['unit-testing', 'integration-testing', 'coverage', 'test-generation'],
|
|
19
|
+
reviewer: ['code-review', 'security-audit', 'quality-check', 'best-practices'],
|
|
20
|
+
researcher: ['web-search', 'documentation', 'analysis', 'summarization'],
|
|
21
|
+
architect: ['system-design', 'architecture', 'patterns', 'scalability'],
|
|
22
|
+
'backend-dev': ['api', 'database', 'server', 'authentication'],
|
|
23
|
+
'frontend-dev': ['ui', 'react', 'css', 'components'],
|
|
24
|
+
devops: ['ci-cd', 'docker', 'deployment', 'infrastructure'],
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
// Each entry is an array of tokens. Tokens are alternation-friendly:
|
|
28
|
+
// - multi-word phrases ("unit test") match as phrases
|
|
29
|
+
// - single tokens are wrapped with \b … \b word boundaries at match time
|
|
30
|
+
const TASK_PATTERNS = [
|
|
31
|
+
// Code patterns
|
|
32
|
+
{ tokens: ['implement', 'create', 'build', 'add', 'write code', 'refactor', 'debug'], agent: 'coder' },
|
|
33
|
+
{ tokens: ['test', 'tests', 'spec', 'coverage', 'unit test', 'integration test'], agent: 'tester' },
|
|
34
|
+
{ tokens: ['review', 'audit', 'check', 'validate', 'security'], agent: 'reviewer' },
|
|
35
|
+
{ tokens: ['research', 'find', 'search', 'documentation', 'explore'], agent: 'researcher' },
|
|
36
|
+
{ tokens: ['design', 'architect', 'architecture', 'structure', 'plan'], agent: 'architect' },
|
|
37
|
+
|
|
38
|
+
// Domain patterns
|
|
39
|
+
{ tokens: ['api', 'endpoint', 'server', 'backend', 'database'], agent: 'backend-dev' },
|
|
40
|
+
{ tokens: ['ui', 'frontend', 'component', 'react', 'css', 'style'], agent: 'frontend-dev' },
|
|
41
|
+
// 'cd' / 'ci' are kept but require word boundaries via \b — they will not
|
|
42
|
+
// match inside "decision" or "specific". 'cd' as a literal command in a
|
|
43
|
+
// task description ("set up cd pipeline") still matches.
|
|
44
|
+
{ tokens: ['deploy', 'docker', 'ci', 'cd', 'ci/cd', 'pipeline', 'infrastructure', 'devops'], agent: 'devops' },
|
|
45
|
+
];
|
|
46
|
+
|
|
47
|
+
function escapeRegex(s) {
|
|
48
|
+
return s.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
// Build an anchored alternation regex from a token list.
|
|
52
|
+
// - multi-word phrases (containing whitespace or '/') match literally
|
|
53
|
+
// - single tokens are wrapped with \b boundaries so 'cd' won't match "decide"
|
|
54
|
+
function buildPattern(tokens) {
|
|
55
|
+
const alternatives = tokens.map((tok) => {
|
|
56
|
+
const escaped = escapeRegex(tok.toLowerCase());
|
|
57
|
+
if (/\s|\//.test(tok)) {
|
|
58
|
+
// Phrase: whitespace/'/' on each side acts as a natural boundary
|
|
59
|
+
return escaped;
|
|
60
|
+
}
|
|
61
|
+
return `\\b${escaped}\\b`;
|
|
62
|
+
});
|
|
63
|
+
return new RegExp(`(?:${alternatives.join('|')})`, 'i');
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
const COMPILED_PATTERNS = TASK_PATTERNS.map((entry) => ({
|
|
67
|
+
agent: entry.agent,
|
|
68
|
+
tokens: entry.tokens,
|
|
69
|
+
regex: buildPattern(entry.tokens),
|
|
70
|
+
}));
|
|
71
|
+
|
|
72
|
+
function routeTask(task) {
|
|
73
|
+
const taskLower = String(task ?? '').toLowerCase();
|
|
74
|
+
|
|
75
|
+
for (const entry of COMPILED_PATTERNS) {
|
|
76
|
+
if (entry.regex.test(taskLower)) {
|
|
77
|
+
return {
|
|
78
|
+
agent: entry.agent,
|
|
79
|
+
// Heuristic prior, not a learned probability — see file header.
|
|
80
|
+
confidence: 0.6,
|
|
81
|
+
reason: `Matched keyword(s) from: ${entry.tokens.join('|')}`,
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
return {
|
|
87
|
+
agent: 'coder',
|
|
88
|
+
confidence: 0.3,
|
|
89
|
+
reason: 'Default routing - no specific keyword matched',
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
// CLI
|
|
94
|
+
if (require.main === module) {
|
|
95
|
+
const task = process.argv.slice(2).join(' ');
|
|
96
|
+
if (task) {
|
|
97
|
+
const result = routeTask(task);
|
|
98
|
+
console.log(JSON.stringify(result, null, 2));
|
|
99
|
+
} else {
|
|
100
|
+
console.log('Usage: router.js <task description>');
|
|
101
|
+
console.log('\nAvailable agents:', Object.keys(AGENT_CAPABILITIES).join(', '));
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
module.exports = { routeTask, AGENT_CAPABILITIES, TASK_PATTERNS, buildPattern };
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* ruflo-hook.cjs — cross-platform Node.js port of ruflo-hook.sh (#2132)
|
|
4
|
+
*
|
|
5
|
+
* Deployed to .claude/helpers/ during ruflo init. On Windows, the
|
|
6
|
+
* generated .claude/settings.json hooks point here instead of the
|
|
7
|
+
* plugin's bash-only ruflo-hook.sh.
|
|
8
|
+
*
|
|
9
|
+
* Always exits 0 — hook subcommands are best-effort telemetry and must
|
|
10
|
+
* never block a Claude Code turn.
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
'use strict';
|
|
14
|
+
|
|
15
|
+
const { spawnSync, execSync } = require('child_process');
|
|
16
|
+
const fs = require('fs');
|
|
17
|
+
|
|
18
|
+
function done() { process.exit(0); }
|
|
19
|
+
|
|
20
|
+
function commandExists(cmd) {
|
|
21
|
+
try {
|
|
22
|
+
const r = execSync(
|
|
23
|
+
process.platform === 'win32' ? 'where ' + cmd : 'command -v ' + cmd,
|
|
24
|
+
{ encoding: 'utf8', stdio: ['ignore', 'pipe', 'ignore'] }
|
|
25
|
+
);
|
|
26
|
+
return r.trim().length > 0;
|
|
27
|
+
} catch { return false; }
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
function invokeHook(bin, binArgs, hookArgs, stdinData) {
|
|
31
|
+
const args = [...binArgs, ...hookArgs];
|
|
32
|
+
const result = spawnSync(bin, args, {
|
|
33
|
+
shell: process.platform === 'win32',
|
|
34
|
+
input: stdinData || '',
|
|
35
|
+
encoding: 'utf8',
|
|
36
|
+
stdio: ['pipe', 'ignore', 'ignore'],
|
|
37
|
+
timeout: 30_000,
|
|
38
|
+
});
|
|
39
|
+
return result.status === 0;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
function main() {
|
|
43
|
+
const args = process.argv.slice(2);
|
|
44
|
+
if (args.length === 0) done();
|
|
45
|
+
|
|
46
|
+
const [subcommand, ...rest] = args;
|
|
47
|
+
|
|
48
|
+
let stdinData = '';
|
|
49
|
+
try { stdinData = fs.readFileSync(0, 'utf8'); } catch { stdinData = ''; }
|
|
50
|
+
|
|
51
|
+
const hookArgs = ['hooks', subcommand, ...rest];
|
|
52
|
+
|
|
53
|
+
if (commandExists('ruflo')) { invokeHook('ruflo', [], hookArgs, stdinData); done(); }
|
|
54
|
+
if (commandExists('claude-flow')) { invokeHook('claude-flow', [], hookArgs, stdinData); done(); }
|
|
55
|
+
invokeHook('npx', ['--prefer-offline', '--yes', 'ruflo@latest'], hookArgs, stdinData);
|
|
56
|
+
done();
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
main();
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Claude Flow V3 - Security Scanner Worker
|
|
3
|
+
# Scans for secrets, vulnerabilities, CVE updates
|
|
4
|
+
|
|
5
|
+
set -euo pipefail
|
|
6
|
+
|
|
7
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
8
|
+
PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
|
|
9
|
+
SECURITY_DIR="$PROJECT_ROOT/.claude-flow/security"
|
|
10
|
+
SCAN_FILE="$SECURITY_DIR/scan-results.json"
|
|
11
|
+
LAST_RUN_FILE="$SECURITY_DIR/.scanner-last-run"
|
|
12
|
+
|
|
13
|
+
mkdir -p "$SECURITY_DIR"
|
|
14
|
+
|
|
15
|
+
should_run() {
|
|
16
|
+
if [ ! -f "$LAST_RUN_FILE" ]; then return 0; fi
|
|
17
|
+
local last_run=$(cat "$LAST_RUN_FILE" 2>/dev/null || echo "0")
|
|
18
|
+
local now=$(date +%s)
|
|
19
|
+
[ $((now - last_run)) -ge 1800 ] # 30 minutes
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
scan_secrets() {
|
|
23
|
+
local secrets_found=0
|
|
24
|
+
local patterns=(
|
|
25
|
+
"password\s*=\s*['\"][^'\"]+['\"]"
|
|
26
|
+
"api[_-]?key\s*=\s*['\"][^'\"]+['\"]"
|
|
27
|
+
"secret\s*=\s*['\"][^'\"]+['\"]"
|
|
28
|
+
"token\s*=\s*['\"][^'\"]+['\"]"
|
|
29
|
+
"private[_-]?key"
|
|
30
|
+
)
|
|
31
|
+
|
|
32
|
+
for pattern in "${patterns[@]}"; do
|
|
33
|
+
local count=$(grep -riE "$pattern" "$PROJECT_ROOT/src" "$PROJECT_ROOT/v3" 2>/dev/null | grep -v node_modules | grep -v ".git" | wc -l | tr -d '[:space:]')
|
|
34
|
+
count=${count:-0}
|
|
35
|
+
secrets_found=$((secrets_found + count))
|
|
36
|
+
done
|
|
37
|
+
|
|
38
|
+
echo "$secrets_found"
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
scan_vulnerabilities() {
|
|
42
|
+
local vulns=0
|
|
43
|
+
|
|
44
|
+
# Check for known vulnerable patterns
|
|
45
|
+
# SQL injection patterns
|
|
46
|
+
local sql_count=$(grep -rE "execute\s*\(" "$PROJECT_ROOT/src" "$PROJECT_ROOT/v3" 2>/dev/null | grep -v node_modules | grep -v ".test." | wc -l | tr -d '[:space:]')
|
|
47
|
+
vulns=$((vulns + ${sql_count:-0}))
|
|
48
|
+
|
|
49
|
+
# Command injection patterns
|
|
50
|
+
local cmd_count=$(grep -rE "exec\s*\(|spawn\s*\(" "$PROJECT_ROOT/src" "$PROJECT_ROOT/v3" 2>/dev/null | grep -v node_modules | grep -v ".test." | wc -l | tr -d '[:space:]')
|
|
51
|
+
vulns=$((vulns + ${cmd_count:-0}))
|
|
52
|
+
|
|
53
|
+
# Unsafe eval
|
|
54
|
+
local eval_count=$(grep -rE "\beval\s*\(" "$PROJECT_ROOT/src" "$PROJECT_ROOT/v3" 2>/dev/null | grep -v node_modules | wc -l | tr -d '[:space:]')
|
|
55
|
+
vulns=$((vulns + ${eval_count:-0}))
|
|
56
|
+
|
|
57
|
+
echo "$vulns"
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
check_npm_audit() {
|
|
61
|
+
if [ -f "$PROJECT_ROOT/package-lock.json" ]; then
|
|
62
|
+
# Skip npm audit for speed - it's slow
|
|
63
|
+
echo "0"
|
|
64
|
+
else
|
|
65
|
+
echo "0"
|
|
66
|
+
fi
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
run_scan() {
|
|
70
|
+
echo "[$(date +%H:%M:%S)] Running security scan..."
|
|
71
|
+
|
|
72
|
+
local secrets=$(scan_secrets)
|
|
73
|
+
local vulns=$(scan_vulnerabilities)
|
|
74
|
+
local npm_vulns=$(check_npm_audit)
|
|
75
|
+
|
|
76
|
+
local total_issues=$((secrets + vulns + npm_vulns))
|
|
77
|
+
local status="clean"
|
|
78
|
+
|
|
79
|
+
if [ "$total_issues" -gt 10 ]; then
|
|
80
|
+
status="critical"
|
|
81
|
+
elif [ "$total_issues" -gt 0 ]; then
|
|
82
|
+
status="warning"
|
|
83
|
+
fi
|
|
84
|
+
|
|
85
|
+
# Update audit status
|
|
86
|
+
cat > "$SCAN_FILE" << EOF
|
|
87
|
+
{
|
|
88
|
+
"status": "$status",
|
|
89
|
+
"timestamp": "$(date -Iseconds)",
|
|
90
|
+
"findings": {
|
|
91
|
+
"secrets": $secrets,
|
|
92
|
+
"vulnerabilities": $vulns,
|
|
93
|
+
"npm_audit": $npm_vulns,
|
|
94
|
+
"total": $total_issues
|
|
95
|
+
},
|
|
96
|
+
"cves": {
|
|
97
|
+
"tracked": ["CVE-1", "CVE-2", "CVE-3"],
|
|
98
|
+
"remediated": 3
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
EOF
|
|
102
|
+
|
|
103
|
+
# Update main audit status file
|
|
104
|
+
if [ "$status" = "clean" ]; then
|
|
105
|
+
echo '{"status":"CLEAN","cvesFixed":3}' > "$SECURITY_DIR/audit-status.json"
|
|
106
|
+
else
|
|
107
|
+
echo "{\"status\":\"$status\",\"cvesFixed\":3,\"issues\":$total_issues}" > "$SECURITY_DIR/audit-status.json"
|
|
108
|
+
fi
|
|
109
|
+
|
|
110
|
+
echo "[$(date +%H:%M:%S)] ✓ Security: $status | Secrets: $secrets | Vulns: $vulns | NPM: $npm_vulns"
|
|
111
|
+
|
|
112
|
+
date +%s > "$LAST_RUN_FILE"
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
case "${1:-check}" in
|
|
116
|
+
"run"|"scan") run_scan ;;
|
|
117
|
+
"check") should_run && run_scan || echo "[$(date +%H:%M:%S)] Skipping (throttled)" ;;
|
|
118
|
+
"force") rm -f "$LAST_RUN_FILE"; run_scan ;;
|
|
119
|
+
"status")
|
|
120
|
+
if [ -f "$SCAN_FILE" ]; then
|
|
121
|
+
jq -r '"Status: \(.status) | Secrets: \(.findings.secrets) | Vulns: \(.findings.vulnerabilities) | NPM: \(.findings.npm_audit)"' "$SCAN_FILE"
|
|
122
|
+
else
|
|
123
|
+
echo "No scan data available"
|
|
124
|
+
fi
|
|
125
|
+
;;
|
|
126
|
+
*) echo "Usage: $0 [run|check|force|status]" ;;
|
|
127
|
+
esac
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Claude Flow Session Manager
|
|
4
|
+
* Handles session lifecycle: start, restore, end
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
const fs = require('fs');
|
|
8
|
+
const path = require('path');
|
|
9
|
+
|
|
10
|
+
const SESSION_DIR = path.join(process.cwd(), '.claude-flow', 'sessions');
|
|
11
|
+
const SESSION_FILE = path.join(SESSION_DIR, 'current.json');
|
|
12
|
+
|
|
13
|
+
// #2307: Atomic write — serialize to a per-process temp file, then rename()
|
|
14
|
+
// into place. rename() is atomic on the same filesystem, so concurrent writers
|
|
15
|
+
// (session-restore, metric, daemon workers, teammates) can't interleave partial
|
|
16
|
+
// content. Without this, two non-atomic writeFileSync calls can race so that a
|
|
17
|
+
// shorter payload overwrites a longer one in place, leaving the longer payload's
|
|
18
|
+
// tail dangling past the end (valid JSON + trailing garbage = parse error).
|
|
19
|
+
// Temp name includes process.pid so concurrent writers don't collide on it.
|
|
20
|
+
// Same class as #1707 (metrics) / #1637 (daemon-state) — session.js was missed.
|
|
21
|
+
function atomicWrite(file, data) {
|
|
22
|
+
const tmp = `${file}.tmp.${process.pid}`;
|
|
23
|
+
fs.writeFileSync(tmp, data);
|
|
24
|
+
fs.renameSync(tmp, file);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
const commands = {
|
|
28
|
+
start: () => {
|
|
29
|
+
const sessionId = `session-${Date.now()}`;
|
|
30
|
+
const session = {
|
|
31
|
+
id: sessionId,
|
|
32
|
+
startedAt: new Date().toISOString(),
|
|
33
|
+
cwd: process.cwd(),
|
|
34
|
+
context: {},
|
|
35
|
+
metrics: {
|
|
36
|
+
edits: 0,
|
|
37
|
+
commands: 0,
|
|
38
|
+
tasks: 0,
|
|
39
|
+
errors: 0,
|
|
40
|
+
},
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
fs.mkdirSync(SESSION_DIR, { recursive: true });
|
|
44
|
+
atomicWrite(SESSION_FILE, JSON.stringify(session, null, 2));
|
|
45
|
+
|
|
46
|
+
console.log(`Session started: ${sessionId}`);
|
|
47
|
+
return session;
|
|
48
|
+
},
|
|
49
|
+
|
|
50
|
+
restore: () => {
|
|
51
|
+
if (!fs.existsSync(SESSION_FILE)) {
|
|
52
|
+
console.log('No session to restore');
|
|
53
|
+
return null;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
let session;
|
|
57
|
+
try {
|
|
58
|
+
session = JSON.parse(fs.readFileSync(SESSION_FILE, 'utf-8'));
|
|
59
|
+
} catch (e) {
|
|
60
|
+
// #2307: corrupted session file (e.g. from a pre-atomic-write race).
|
|
61
|
+
// Don't throw — start a fresh session so the hook recovers cleanly.
|
|
62
|
+
console.log(`Session file corrupted (${e.message}); starting fresh`);
|
|
63
|
+
return commands.start();
|
|
64
|
+
}
|
|
65
|
+
session.restoredAt = new Date().toISOString();
|
|
66
|
+
atomicWrite(SESSION_FILE, JSON.stringify(session, null, 2));
|
|
67
|
+
|
|
68
|
+
console.log(`Session restored: ${session.id}`);
|
|
69
|
+
return session;
|
|
70
|
+
},
|
|
71
|
+
|
|
72
|
+
end: () => {
|
|
73
|
+
if (!fs.existsSync(SESSION_FILE)) {
|
|
74
|
+
console.log('No active session');
|
|
75
|
+
return null;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
const session = JSON.parse(fs.readFileSync(SESSION_FILE, 'utf-8'));
|
|
79
|
+
session.endedAt = new Date().toISOString();
|
|
80
|
+
session.duration = Date.now() - new Date(session.startedAt).getTime();
|
|
81
|
+
|
|
82
|
+
// Archive session
|
|
83
|
+
const archivePath = path.join(SESSION_DIR, `${session.id}.json`);
|
|
84
|
+
atomicWrite(archivePath, JSON.stringify(session, null, 2));
|
|
85
|
+
fs.unlinkSync(SESSION_FILE);
|
|
86
|
+
|
|
87
|
+
console.log(`Session ended: ${session.id}`);
|
|
88
|
+
console.log(`Duration: ${Math.round(session.duration / 1000 / 60)} minutes`);
|
|
89
|
+
console.log(`Metrics: ${JSON.stringify(session.metrics)}`);
|
|
90
|
+
|
|
91
|
+
return session;
|
|
92
|
+
},
|
|
93
|
+
|
|
94
|
+
status: () => {
|
|
95
|
+
if (!fs.existsSync(SESSION_FILE)) {
|
|
96
|
+
console.log('No active session');
|
|
97
|
+
return null;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
const session = JSON.parse(fs.readFileSync(SESSION_FILE, 'utf-8'));
|
|
101
|
+
const duration = Date.now() - new Date(session.startedAt).getTime();
|
|
102
|
+
|
|
103
|
+
console.log(`Session: ${session.id}`);
|
|
104
|
+
console.log(`Started: ${session.startedAt}`);
|
|
105
|
+
console.log(`Duration: ${Math.round(duration / 1000 / 60)} minutes`);
|
|
106
|
+
console.log(`Metrics: ${JSON.stringify(session.metrics)}`);
|
|
107
|
+
|
|
108
|
+
return session;
|
|
109
|
+
},
|
|
110
|
+
|
|
111
|
+
update: (key, value) => {
|
|
112
|
+
if (!fs.existsSync(SESSION_FILE)) {
|
|
113
|
+
console.log('No active session');
|
|
114
|
+
return null;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
const session = JSON.parse(fs.readFileSync(SESSION_FILE, 'utf-8'));
|
|
118
|
+
session.context[key] = value;
|
|
119
|
+
session.updatedAt = new Date().toISOString();
|
|
120
|
+
atomicWrite(SESSION_FILE, JSON.stringify(session, null, 2));
|
|
121
|
+
|
|
122
|
+
return session;
|
|
123
|
+
},
|
|
124
|
+
|
|
125
|
+
get: (key) => {
|
|
126
|
+
if (!fs.existsSync(SESSION_FILE)) return null;
|
|
127
|
+
try {
|
|
128
|
+
const session = JSON.parse(fs.readFileSync(SESSION_FILE, 'utf-8'));
|
|
129
|
+
return key ? (session.context || {})[key] : session.context;
|
|
130
|
+
} catch { return null; }
|
|
131
|
+
},
|
|
132
|
+
|
|
133
|
+
metric: (name) => {
|
|
134
|
+
if (!fs.existsSync(SESSION_FILE)) {
|
|
135
|
+
return null;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
const session = JSON.parse(fs.readFileSync(SESSION_FILE, 'utf-8'));
|
|
139
|
+
if (session.metrics[name] !== undefined) {
|
|
140
|
+
session.metrics[name]++;
|
|
141
|
+
atomicWrite(SESSION_FILE, JSON.stringify(session, null, 2));
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
return session;
|
|
145
|
+
},
|
|
146
|
+
};
|
|
147
|
+
|
|
148
|
+
// CLI
|
|
149
|
+
const [,, command, ...args] = process.argv;
|
|
150
|
+
|
|
151
|
+
if (command && commands[command]) {
|
|
152
|
+
commands[command](...args);
|
|
153
|
+
} else {
|
|
154
|
+
console.log('Usage: session.js <start|restore|end|status|update|metric> [args]');
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
module.exports = commands;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Setup MCP server for Claude Flow
|
|
3
|
+
|
|
4
|
+
echo "🚀 Setting up Claude Flow MCP server..."
|
|
5
|
+
|
|
6
|
+
# Check if claude command exists
|
|
7
|
+
if ! command -v claude &> /dev/null; then
|
|
8
|
+
echo "❌ Error: Claude Code CLI not found"
|
|
9
|
+
echo "Please install Claude Code first"
|
|
10
|
+
exit 1
|
|
11
|
+
fi
|
|
12
|
+
|
|
13
|
+
# Add MCP server
|
|
14
|
+
echo "📦 Adding Claude Flow MCP server..."
|
|
15
|
+
claude mcp add claude-flow npx claude-flow mcp start
|
|
16
|
+
|
|
17
|
+
echo "✅ MCP server setup complete!"
|
|
18
|
+
echo "🎯 You can now use mcp__claude-flow__ tools in Claude Code"
|