@claude-flow/cli 3.0.0-alpha.6 → 3.0.0-alpha.61
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/agents/analysis/analyze-code-quality.md +181 -0
- package/.claude/agents/analysis/code-analyzer.md +210 -0
- package/.claude/agents/architecture/arch-system-design.md +157 -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/coder.md +453 -0
- package/.claude/agents/core/planner.md +375 -0
- package/.claude/agents/core/researcher.md +369 -0
- package/.claude/agents/core/reviewer.md +520 -0
- package/.claude/agents/core/tester.md +512 -0
- package/.claude/agents/custom/test-long-runner.md +44 -0
- package/.claude/agents/data/data-ml-model.md +445 -0
- package/.claude/agents/development/dev-backend-api.md +346 -0
- package/.claude/agents/devops/ops-cicd-github.md +165 -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/goal/goal-planner.md +73 -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 +254 -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/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 +268 -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/adr-architect.md +184 -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/memory-specialist.md +995 -0
- package/.claude/agents/v3/performance-engineer.md +1233 -0
- package/.claude/agents/v3/reasoningbank-learner.md +213 -0
- package/.claude/agents/v3/security-architect.md +867 -0
- package/.claude/agents/v3/security-auditor.md +771 -0
- package/.claude/agents/v3/sparc-orchestrator.md +182 -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/flow-nexus/app-store.md +124 -0
- package/.claude/commands/flow-nexus/challenges.md +120 -0
- package/.claude/commands/flow-nexus/login-registration.md +65 -0
- package/.claude/commands/flow-nexus/neural-network.md +134 -0
- package/.claude/commands/flow-nexus/payments.md +116 -0
- package/.claude/commands/flow-nexus/sandbox.md +83 -0
- package/.claude/commands/flow-nexus/swarm.md +87 -0
- package/.claude/commands/flow-nexus/user-tools.md +152 -0
- package/.claude/commands/flow-nexus/workflow.md +115 -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 +338 -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 +482 -0
- package/.claude/commands/github/swarm-pr.md +285 -0
- package/.claude/commands/github/sync-coordinator.md +301 -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/sparc.md +166 -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 +74 -0
- package/.claude/commands/training/neural-train.md +25 -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/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 +106 -0
- package/.claude/helpers/github-setup.sh +28 -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/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 +66 -0
- package/.claude/helpers/security-scanner.sh +127 -0
- package/.claude/helpers/session.js +127 -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.js +316 -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 +259 -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/agentic-jujutsu/SKILL.md +645 -0
- package/.claude/skills/flow-nexus-neural/SKILL.md +738 -0
- package/.claude/skills/flow-nexus-platform/SKILL.md +1157 -0
- package/.claude/skills/flow-nexus-swarm/SKILL.md +610 -0
- package/.claude/skills/github-code-review/SKILL.md +1140 -0
- package/.claude/skills/github-multi-repo/SKILL.md +874 -0
- package/.claude/skills/github-project-management/SKILL.md +1277 -0
- package/.claude/skills/github-release-management/SKILL.md +1081 -0
- package/.claude/skills/github-workflow-automation/SKILL.md +1065 -0
- package/.claude/skills/hive-mind-advanced/SKILL.md +712 -0
- package/.claude/skills/hooks-automation/SKILL.md +1201 -0
- package/.claude/skills/pair-programming/SKILL.md +1202 -0
- package/.claude/skills/performance-analysis/SKILL.md +563 -0
- package/.claude/skills/reasoningbank-agentdb/SKILL.md +446 -0
- package/.claude/skills/reasoningbank-intelligence/SKILL.md +201 -0
- package/{.claude-flow → .claude/skills/skill-builder/.claude-flow}/metrics/performance.json +3 -3
- package/.claude/skills/skill-builder/.claude-flow/metrics/task-metrics.json +10 -0
- package/.claude/skills/skill-builder/SKILL.md +910 -0
- package/.claude/skills/sparc-methodology/SKILL.md +1115 -0
- package/.claude/skills/stream-chain/SKILL.md +563 -0
- package/.claude/skills/swarm-advanced/SKILL.md +973 -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 +649 -0
- package/.claude/skills/worker-benchmarks/skill.md +135 -0
- package/.claude/skills/worker-integration/skill.md +154 -0
- package/README.md +428 -6
- package/bin/cli.js +142 -6
- package/bin/mcp-server.js +188 -0
- package/dist/src/commands/agent.d.ts.map +1 -1
- package/dist/src/commands/agent.js +42 -26
- package/dist/src/commands/agent.js.map +1 -1
- package/dist/src/commands/analyze.d.ts +19 -0
- package/dist/src/commands/analyze.d.ts.map +1 -0
- package/dist/src/commands/analyze.js +1823 -0
- package/dist/src/commands/analyze.js.map +1 -0
- package/dist/src/commands/claims.d.ts +10 -0
- package/dist/src/commands/claims.d.ts.map +1 -0
- package/dist/src/commands/claims.js +288 -0
- package/dist/src/commands/claims.js.map +1 -0
- package/dist/src/commands/completions.d.ts +10 -0
- package/dist/src/commands/completions.d.ts.map +1 -0
- package/dist/src/commands/completions.js +539 -0
- package/dist/src/commands/completions.js.map +1 -0
- package/dist/src/commands/daemon.d.ts +8 -0
- package/dist/src/commands/daemon.d.ts.map +1 -0
- package/dist/src/commands/daemon.js +593 -0
- package/dist/src/commands/daemon.js.map +1 -0
- package/dist/src/commands/deployment.d.ts +10 -0
- package/dist/src/commands/deployment.d.ts.map +1 -0
- package/dist/src/commands/deployment.js +289 -0
- package/dist/src/commands/deployment.js.map +1 -0
- package/dist/src/commands/doctor.d.ts +10 -0
- package/dist/src/commands/doctor.d.ts.map +1 -0
- package/dist/src/commands/doctor.js +448 -0
- package/dist/src/commands/doctor.js.map +1 -0
- package/dist/src/commands/embeddings.d.ts +18 -0
- package/dist/src/commands/embeddings.d.ts.map +1 -0
- package/dist/src/commands/embeddings.js +616 -0
- package/dist/src/commands/embeddings.js.map +1 -0
- package/dist/src/commands/hive-mind.d.ts.map +1 -1
- package/dist/src/commands/hive-mind.js +252 -35
- package/dist/src/commands/hive-mind.js.map +1 -1
- package/dist/src/commands/hooks.d.ts.map +1 -1
- package/dist/src/commands/hooks.js +800 -6
- package/dist/src/commands/hooks.js.map +1 -1
- package/dist/src/commands/index.d.ts +52 -14
- package/dist/src/commands/index.d.ts.map +1 -1
- package/dist/src/commands/index.js +191 -38
- package/dist/src/commands/index.js.map +1 -1
- package/dist/src/commands/init.d.ts.map +1 -1
- package/dist/src/commands/init.js +80 -9
- package/dist/src/commands/init.js.map +1 -1
- package/dist/src/commands/issues.d.ts +21 -0
- package/dist/src/commands/issues.d.ts.map +1 -0
- package/dist/src/commands/issues.js +567 -0
- package/dist/src/commands/issues.js.map +1 -0
- package/dist/src/commands/mcp.js +3 -3
- package/dist/src/commands/mcp.js.map +1 -1
- package/dist/src/commands/memory.d.ts.map +1 -1
- package/dist/src/commands/memory.js +223 -4
- package/dist/src/commands/memory.js.map +1 -1
- package/dist/src/commands/neural.d.ts +10 -0
- package/dist/src/commands/neural.d.ts.map +1 -0
- package/dist/src/commands/neural.js +224 -0
- package/dist/src/commands/neural.js.map +1 -0
- package/dist/src/commands/performance.d.ts +10 -0
- package/dist/src/commands/performance.d.ts.map +1 -0
- package/dist/src/commands/performance.js +262 -0
- package/dist/src/commands/performance.js.map +1 -0
- package/dist/src/commands/plugins.d.ts +11 -0
- package/dist/src/commands/plugins.d.ts.map +1 -0
- package/dist/src/commands/plugins.js +630 -0
- package/dist/src/commands/plugins.js.map +1 -0
- package/dist/src/commands/progress.d.ts +11 -0
- package/dist/src/commands/progress.d.ts.map +1 -0
- package/dist/src/commands/progress.js +259 -0
- package/dist/src/commands/progress.js.map +1 -0
- package/dist/src/commands/providers.d.ts +10 -0
- package/dist/src/commands/providers.d.ts.map +1 -0
- package/dist/src/commands/providers.js +232 -0
- package/dist/src/commands/providers.js.map +1 -0
- package/dist/src/commands/route.d.ts +16 -0
- package/dist/src/commands/route.d.ts.map +1 -0
- package/dist/src/commands/route.js +813 -0
- package/dist/src/commands/route.js.map +1 -0
- package/dist/src/commands/security.d.ts +10 -0
- package/dist/src/commands/security.d.ts.map +1 -0
- package/dist/src/commands/security.js +261 -0
- package/dist/src/commands/security.js.map +1 -0
- package/dist/src/commands/start.d.ts.map +1 -1
- package/dist/src/commands/start.js +22 -2
- package/dist/src/commands/start.js.map +1 -1
- package/dist/src/commands/swarm.d.ts.map +1 -1
- package/dist/src/commands/swarm.js +185 -32
- package/dist/src/commands/swarm.js.map +1 -1
- package/dist/src/commands/transfer-store.d.ts +13 -0
- package/dist/src/commands/transfer-store.d.ts.map +1 -0
- package/dist/src/commands/transfer-store.js +428 -0
- package/dist/src/commands/transfer-store.js.map +1 -0
- package/dist/src/index.d.ts +3 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +69 -10
- package/dist/src/index.js.map +1 -1
- package/dist/src/init/claudemd-generator.d.ts.map +1 -1
- package/dist/src/init/claudemd-generator.js +407 -405
- package/dist/src/init/claudemd-generator.js.map +1 -1
- package/dist/src/init/executor.d.ts.map +1 -1
- package/dist/src/init/executor.js +142 -31
- package/dist/src/init/executor.js.map +1 -1
- package/dist/src/init/helpers-generator.js +1 -1
- package/dist/src/init/helpers-generator.js.map +1 -1
- package/dist/src/init/mcp-generator.d.ts +9 -0
- package/dist/src/init/mcp-generator.d.ts.map +1 -1
- package/dist/src/init/mcp-generator.js +57 -28
- package/dist/src/init/mcp-generator.js.map +1 -1
- package/dist/src/init/settings-generator.d.ts.map +1 -1
- package/dist/src/init/settings-generator.js +116 -62
- package/dist/src/init/settings-generator.js.map +1 -1
- package/dist/src/init/statusline-generator.d.ts +6 -0
- package/dist/src/init/statusline-generator.d.ts.map +1 -1
- package/dist/src/init/statusline-generator.js +252 -89
- package/dist/src/init/statusline-generator.js.map +1 -1
- package/dist/src/init/types.d.ts +6 -0
- package/dist/src/init/types.d.ts.map +1 -1
- package/dist/src/init/types.js +8 -2
- package/dist/src/init/types.js.map +1 -1
- package/dist/src/mcp-client.d.ts.map +1 -1
- package/dist/src/mcp-client.js +17 -1
- package/dist/src/mcp-client.js.map +1 -1
- package/dist/src/mcp-server.d.ts +6 -1
- package/dist/src/mcp-server.d.ts.map +1 -1
- package/dist/src/mcp-server.js +169 -38
- package/dist/src/mcp-server.js.map +1 -1
- package/dist/src/mcp-tools/agent-tools.d.ts +1 -1
- package/dist/src/mcp-tools/agent-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/agent-tools.js +350 -14
- package/dist/src/mcp-tools/agent-tools.js.map +1 -1
- package/dist/src/mcp-tools/analyze-tools.d.ts +38 -0
- package/dist/src/mcp-tools/analyze-tools.d.ts.map +1 -0
- package/dist/src/mcp-tools/analyze-tools.js +317 -0
- package/dist/src/mcp-tools/analyze-tools.js.map +1 -0
- package/dist/src/mcp-tools/config-tools.d.ts +1 -1
- package/dist/src/mcp-tools/config-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/config-tools.js +262 -15
- package/dist/src/mcp-tools/config-tools.js.map +1 -1
- package/dist/src/mcp-tools/hive-mind-tools.d.ts +8 -0
- package/dist/src/mcp-tools/hive-mind-tools.d.ts.map +1 -0
- package/dist/src/mcp-tools/hive-mind-tools.js +447 -0
- package/dist/src/mcp-tools/hive-mind-tools.js.map +1 -0
- package/dist/src/mcp-tools/hooks-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/hooks-tools.js +195 -31
- package/dist/src/mcp-tools/hooks-tools.js.map +1 -1
- package/dist/src/mcp-tools/index.d.ts +6 -0
- package/dist/src/mcp-tools/index.d.ts.map +1 -1
- package/dist/src/mcp-tools/index.js +6 -0
- package/dist/src/mcp-tools/index.js.map +1 -1
- package/dist/src/mcp-tools/progress-tools.d.ts +14 -0
- package/dist/src/mcp-tools/progress-tools.d.ts.map +1 -0
- package/dist/src/mcp-tools/progress-tools.js +343 -0
- package/dist/src/mcp-tools/progress-tools.js.map +1 -0
- package/dist/src/mcp-tools/session-tools.d.ts +1 -1
- package/dist/src/mcp-tools/session-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/session-tools.js +237 -22
- package/dist/src/mcp-tools/session-tools.js.map +1 -1
- package/dist/src/mcp-tools/task-tools.d.ts +1 -1
- package/dist/src/mcp-tools/task-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/task-tools.js +219 -17
- package/dist/src/mcp-tools/task-tools.js.map +1 -1
- package/dist/src/mcp-tools/transfer-tools.d.ts +14 -0
- package/dist/src/mcp-tools/transfer-tools.d.ts.map +1 -0
- package/dist/src/mcp-tools/transfer-tools.js +396 -0
- package/dist/src/mcp-tools/transfer-tools.js.map +1 -0
- package/dist/src/mcp-tools/workflow-tools.d.ts +8 -0
- package/dist/src/mcp-tools/workflow-tools.d.ts.map +1 -0
- package/dist/src/mcp-tools/workflow-tools.js +481 -0
- package/dist/src/mcp-tools/workflow-tools.js.map +1 -0
- package/dist/src/output.d.ts +16 -0
- package/dist/src/output.d.ts.map +1 -1
- package/dist/src/output.js +42 -0
- package/dist/src/output.js.map +1 -1
- package/dist/src/plugins/store/discovery.d.ts +73 -0
- package/dist/src/plugins/store/discovery.d.ts.map +1 -0
- package/dist/src/plugins/store/discovery.js +568 -0
- package/dist/src/plugins/store/discovery.js.map +1 -0
- package/dist/src/plugins/store/index.d.ts +76 -0
- package/dist/src/plugins/store/index.d.ts.map +1 -0
- package/dist/src/plugins/store/index.js +141 -0
- package/dist/src/plugins/store/index.js.map +1 -0
- package/dist/src/plugins/store/search.d.ts +46 -0
- package/dist/src/plugins/store/search.d.ts.map +1 -0
- package/dist/src/plugins/store/search.js +230 -0
- package/dist/src/plugins/store/search.js.map +1 -0
- package/dist/src/plugins/store/types.d.ts +274 -0
- package/dist/src/plugins/store/types.d.ts.map +1 -0
- package/dist/src/plugins/store/types.js +7 -0
- package/dist/src/plugins/store/types.js.map +1 -0
- package/dist/src/plugins/tests/demo-plugin-store.d.ts +7 -0
- package/dist/src/plugins/tests/demo-plugin-store.d.ts.map +1 -0
- package/dist/src/plugins/tests/demo-plugin-store.js +126 -0
- package/dist/src/plugins/tests/demo-plugin-store.js.map +1 -0
- package/dist/src/plugins/tests/standalone-test.d.ts +12 -0
- package/dist/src/plugins/tests/standalone-test.d.ts.map +1 -0
- package/dist/src/plugins/tests/standalone-test.js +188 -0
- package/dist/src/plugins/tests/standalone-test.js.map +1 -0
- package/dist/src/plugins/tests/test-plugin-store.d.ts +7 -0
- package/dist/src/plugins/tests/test-plugin-store.d.ts.map +1 -0
- package/dist/src/plugins/tests/test-plugin-store.js +206 -0
- package/dist/src/plugins/tests/test-plugin-store.js.map +1 -0
- package/dist/src/ruvector/ast-analyzer.d.ts +67 -0
- package/dist/src/ruvector/ast-analyzer.d.ts.map +1 -0
- package/dist/src/ruvector/ast-analyzer.js +277 -0
- package/dist/src/ruvector/ast-analyzer.js.map +1 -0
- package/dist/src/ruvector/coverage-router.d.ts +160 -0
- package/dist/src/ruvector/coverage-router.d.ts.map +1 -0
- package/dist/src/ruvector/coverage-router.js +529 -0
- package/dist/src/ruvector/coverage-router.js.map +1 -0
- package/dist/src/ruvector/coverage-tools.d.ts +33 -0
- package/dist/src/ruvector/coverage-tools.d.ts.map +1 -0
- package/dist/src/ruvector/coverage-tools.js +157 -0
- package/dist/src/ruvector/coverage-tools.js.map +1 -0
- package/dist/src/ruvector/diff-classifier.d.ts +175 -0
- package/dist/src/ruvector/diff-classifier.d.ts.map +1 -0
- package/dist/src/ruvector/diff-classifier.js +698 -0
- package/dist/src/ruvector/diff-classifier.js.map +1 -0
- package/dist/src/ruvector/graph-analyzer.d.ts +187 -0
- package/dist/src/ruvector/graph-analyzer.d.ts.map +1 -0
- package/dist/src/ruvector/graph-analyzer.js +929 -0
- package/dist/src/ruvector/graph-analyzer.js.map +1 -0
- package/dist/src/ruvector/index.d.ts +27 -0
- package/dist/src/ruvector/index.d.ts.map +1 -0
- package/dist/src/ruvector/index.js +53 -0
- package/dist/src/ruvector/index.js.map +1 -0
- package/dist/src/ruvector/q-learning-router.d.ts +211 -0
- package/dist/src/ruvector/q-learning-router.d.ts.map +1 -0
- package/dist/src/ruvector/q-learning-router.js +681 -0
- package/dist/src/ruvector/q-learning-router.js.map +1 -0
- package/dist/src/ruvector/vector-db.d.ts +69 -0
- package/dist/src/ruvector/vector-db.d.ts.map +1 -0
- package/dist/src/ruvector/vector-db.js +243 -0
- package/dist/src/ruvector/vector-db.js.map +1 -0
- package/dist/src/services/claim-service.d.ts +204 -0
- package/dist/src/services/claim-service.d.ts.map +1 -0
- package/dist/src/services/claim-service.js +818 -0
- package/dist/src/services/claim-service.js.map +1 -0
- package/dist/src/services/container-worker-pool.d.ts +197 -0
- package/dist/src/services/container-worker-pool.d.ts.map +1 -0
- package/dist/src/services/container-worker-pool.js +581 -0
- package/dist/src/services/container-worker-pool.js.map +1 -0
- package/dist/src/services/headless-worker-executor.d.ts +304 -0
- package/dist/src/services/headless-worker-executor.d.ts.map +1 -0
- package/dist/src/services/headless-worker-executor.js +997 -0
- package/dist/src/services/headless-worker-executor.js.map +1 -0
- package/dist/src/services/index.d.ts +13 -0
- package/dist/src/services/index.d.ts.map +1 -0
- package/dist/src/services/index.js +11 -0
- package/dist/src/services/index.js.map +1 -0
- package/dist/src/services/worker-daemon.d.ts +203 -0
- package/dist/src/services/worker-daemon.d.ts.map +1 -0
- package/dist/src/services/worker-daemon.js +745 -0
- package/dist/src/services/worker-daemon.js.map +1 -0
- package/dist/src/services/worker-queue.d.ts +194 -0
- package/dist/src/services/worker-queue.d.ts.map +1 -0
- package/dist/src/services/worker-queue.js +511 -0
- package/dist/src/services/worker-queue.js.map +1 -0
- package/dist/src/suggest.d.ts +53 -0
- package/dist/src/suggest.d.ts.map +1 -0
- package/dist/src/suggest.js +200 -0
- package/dist/src/suggest.js.map +1 -0
- package/dist/src/transfer/anonymization/index.d.ts +25 -0
- package/dist/src/transfer/anonymization/index.d.ts.map +1 -0
- package/dist/src/transfer/anonymization/index.js +175 -0
- package/dist/src/transfer/anonymization/index.js.map +1 -0
- package/dist/src/transfer/deploy-seraphine.d.ts +13 -0
- package/dist/src/transfer/deploy-seraphine.d.ts.map +1 -0
- package/dist/src/transfer/deploy-seraphine.js +205 -0
- package/dist/src/transfer/deploy-seraphine.js.map +1 -0
- package/dist/src/transfer/export.d.ts +25 -0
- package/dist/src/transfer/export.d.ts.map +1 -0
- package/dist/src/transfer/export.js +113 -0
- package/dist/src/transfer/export.js.map +1 -0
- package/dist/src/transfer/index.d.ts +12 -0
- package/dist/src/transfer/index.d.ts.map +1 -0
- package/dist/src/transfer/index.js +31 -0
- package/dist/src/transfer/index.js.map +1 -0
- package/dist/src/transfer/ipfs/client.d.ts +31 -0
- package/dist/src/transfer/ipfs/client.d.ts.map +1 -0
- package/dist/src/transfer/ipfs/client.js +74 -0
- package/dist/src/transfer/ipfs/client.js.map +1 -0
- package/dist/src/transfer/ipfs/upload.d.ts +95 -0
- package/dist/src/transfer/ipfs/upload.d.ts.map +1 -0
- package/dist/src/transfer/ipfs/upload.js +410 -0
- package/dist/src/transfer/ipfs/upload.js.map +1 -0
- package/dist/src/transfer/models/seraphine.d.ts +72 -0
- package/dist/src/transfer/models/seraphine.d.ts.map +1 -0
- package/dist/src/transfer/models/seraphine.js +373 -0
- package/dist/src/transfer/models/seraphine.js.map +1 -0
- package/dist/src/transfer/serialization/cfp.d.ts +49 -0
- package/dist/src/transfer/serialization/cfp.d.ts.map +1 -0
- package/dist/src/transfer/serialization/cfp.js +180 -0
- package/dist/src/transfer/serialization/cfp.js.map +1 -0
- package/dist/src/transfer/store/discovery.d.ts +84 -0
- package/dist/src/transfer/store/discovery.d.ts.map +1 -0
- package/dist/src/transfer/store/discovery.js +275 -0
- package/dist/src/transfer/store/discovery.js.map +1 -0
- package/dist/src/transfer/store/download.d.ts +70 -0
- package/dist/src/transfer/store/download.d.ts.map +1 -0
- package/dist/src/transfer/store/download.js +295 -0
- package/dist/src/transfer/store/download.js.map +1 -0
- package/dist/src/transfer/store/index.d.ts +84 -0
- package/dist/src/transfer/store/index.d.ts.map +1 -0
- package/dist/src/transfer/store/index.js +153 -0
- package/dist/src/transfer/store/index.js.map +1 -0
- package/dist/src/transfer/store/publish.d.ts +76 -0
- package/dist/src/transfer/store/publish.d.ts.map +1 -0
- package/dist/src/transfer/store/publish.js +262 -0
- package/dist/src/transfer/store/publish.js.map +1 -0
- package/dist/src/transfer/store/registry.d.ts +58 -0
- package/dist/src/transfer/store/registry.d.ts.map +1 -0
- package/dist/src/transfer/store/registry.js +285 -0
- package/dist/src/transfer/store/registry.js.map +1 -0
- package/dist/src/transfer/store/search.d.ts +54 -0
- package/dist/src/transfer/store/search.d.ts.map +1 -0
- package/dist/src/transfer/store/search.js +232 -0
- package/dist/src/transfer/store/search.js.map +1 -0
- package/dist/src/transfer/store/tests/standalone-test.d.ts +12 -0
- package/dist/src/transfer/store/tests/standalone-test.d.ts.map +1 -0
- package/dist/src/transfer/store/tests/standalone-test.js +190 -0
- package/dist/src/transfer/store/tests/standalone-test.js.map +1 -0
- package/dist/src/transfer/store/types.d.ts +193 -0
- package/dist/src/transfer/store/types.d.ts.map +1 -0
- package/dist/src/transfer/store/types.js +6 -0
- package/dist/src/transfer/store/types.js.map +1 -0
- package/dist/src/transfer/test-seraphine.d.ts +6 -0
- package/dist/src/transfer/test-seraphine.d.ts.map +1 -0
- package/dist/src/transfer/test-seraphine.js +105 -0
- package/dist/src/transfer/test-seraphine.js.map +1 -0
- package/dist/src/transfer/tests/test-store.d.ts +7 -0
- package/dist/src/transfer/tests/test-store.d.ts.map +1 -0
- package/dist/src/transfer/tests/test-store.js +214 -0
- package/dist/src/transfer/tests/test-store.js.map +1 -0
- package/dist/src/transfer/types.d.ts +245 -0
- package/dist/src/transfer/types.d.ts.map +1 -0
- package/dist/src/transfer/types.js +6 -0
- package/dist/src/transfer/types.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +37 -9
- package/.agentic-flow/intelligence.json +0 -17
- package/.claude-flow/metrics/task-metrics.json +0 -10
- package/__tests__/README.md +0 -140
- package/__tests__/TEST_SUMMARY.md +0 -144
- package/__tests__/cli.test.ts +0 -558
- package/__tests__/commands.test.ts +0 -726
- package/__tests__/config-adapter.test.ts +0 -362
- package/__tests__/config-loading.test.ts +0 -106
- package/__tests__/coverage/.tmp/coverage-0.json +0 -1
- package/__tests__/coverage/.tmp/coverage-1.json +0 -1
- package/__tests__/coverage/.tmp/coverage-2.json +0 -1
- package/__tests__/coverage/.tmp/coverage-3.json +0 -1
- package/__tests__/coverage/.tmp/coverage-4.json +0 -1
- package/__tests__/coverage/.tmp/coverage-5.json +0 -1
- package/__tests__/mcp-client.test.ts +0 -480
- package/__tests__/p1-commands.test.ts +0 -1064
- package/agents/architect.yaml +0 -11
- package/agents/coder.yaml +0 -11
- package/agents/reviewer.yaml +0 -10
- package/agents/security-architect.yaml +0 -10
- package/agents/tester.yaml +0 -10
- package/docs/CONFIG_LOADING.md +0 -236
- package/docs/IMPLEMENTATION_COMPLETE.md +0 -421
- package/docs/MCP_CLIENT_GUIDE.md +0 -620
- package/docs/REFACTORING_SUMMARY.md +0 -247
- package/src/commands/agent.ts +0 -941
- package/src/commands/config.ts +0 -452
- package/src/commands/hive-mind.ts +0 -762
- package/src/commands/hooks.ts +0 -2603
- package/src/commands/index.ts +0 -115
- package/src/commands/init.ts +0 -597
- package/src/commands/mcp.ts +0 -753
- package/src/commands/memory.ts +0 -1161
- package/src/commands/migrate.ts +0 -447
- package/src/commands/process.ts +0 -695
- package/src/commands/session.ts +0 -891
- package/src/commands/start.ts +0 -457
- package/src/commands/status.ts +0 -736
- package/src/commands/swarm.ts +0 -648
- package/src/commands/task.ts +0 -792
- package/src/commands/workflow.ts +0 -742
- package/src/config-adapter.ts +0 -210
- package/src/index.ts +0 -400
- package/src/infrastructure/in-memory-repositories.ts +0 -310
- package/src/init/claudemd-generator.ts +0 -631
- package/src/init/executor.ts +0 -762
- package/src/init/helpers-generator.ts +0 -628
- package/src/init/index.ts +0 -60
- package/src/init/mcp-generator.ts +0 -83
- package/src/init/settings-generator.ts +0 -274
- package/src/init/statusline-generator.ts +0 -211
- package/src/init/types.ts +0 -447
- package/src/mcp-client.ts +0 -229
- package/src/mcp-server.ts +0 -577
- package/src/mcp-tools/agent-tools.ts +0 -92
- package/src/mcp-tools/config-tools.ts +0 -88
- package/src/mcp-tools/hooks-tools.ts +0 -1849
- package/src/mcp-tools/index.ts +0 -14
- package/src/mcp-tools/memory-tools.ts +0 -270
- package/src/mcp-tools/session-tools.ts +0 -102
- package/src/mcp-tools/swarm-tools.ts +0 -105
- package/src/mcp-tools/task-tools.ts +0 -102
- package/src/mcp-tools/types.ts +0 -33
- package/src/output.ts +0 -593
- package/src/parser.ts +0 -417
- package/src/prompt.ts +0 -619
- package/src/types.ts +0 -287
- package/tsconfig.json +0 -16
- package/tsconfig.tsbuildinfo +0 -1
- package/vitest.config.ts +0 -13
- /package/{tmp.json → .claude/agents/tmp.json} +0 -0
- /package/{.claude-flow → .claude/skills/skill-builder/.claude-flow}/metrics/agent-metrics.json +0 -0
|
@@ -0,0 +1,802 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: refinement
|
|
3
|
+
type: developer
|
|
4
|
+
color: violet
|
|
5
|
+
description: SPARC Refinement phase specialist for iterative improvement with self-learning
|
|
6
|
+
capabilities:
|
|
7
|
+
- code_optimization
|
|
8
|
+
- test_development
|
|
9
|
+
- refactoring
|
|
10
|
+
- performance_tuning
|
|
11
|
+
- quality_improvement
|
|
12
|
+
# NEW v2.0.0-alpha capabilities
|
|
13
|
+
- self_learning
|
|
14
|
+
- context_enhancement
|
|
15
|
+
- fast_processing
|
|
16
|
+
- smart_coordination
|
|
17
|
+
- refactoring_patterns
|
|
18
|
+
priority: high
|
|
19
|
+
sparc_phase: refinement
|
|
20
|
+
hooks:
|
|
21
|
+
pre: |
|
|
22
|
+
echo "🔧 SPARC Refinement phase initiated"
|
|
23
|
+
memory_store "sparc_phase" "refinement"
|
|
24
|
+
|
|
25
|
+
# 1. Learn from past refactoring patterns (ReasoningBank)
|
|
26
|
+
echo "🧠 Searching for similar refactoring patterns..."
|
|
27
|
+
SIMILAR_REFACTOR=$(npx claude-flow@alpha memory search-patterns "refinement: $TASK" --k=5 --min-reward=0.85 2>/dev/null || echo "")
|
|
28
|
+
if [ -n "$SIMILAR_REFACTOR" ]; then
|
|
29
|
+
echo "📚 Found similar refactoring patterns - applying learned improvements"
|
|
30
|
+
npx claude-flow@alpha memory get-pattern-stats "refinement: $TASK" --k=5 2>/dev/null || true
|
|
31
|
+
fi
|
|
32
|
+
|
|
33
|
+
# 2. Learn from past test failures
|
|
34
|
+
echo "⚠️ Learning from past test failures..."
|
|
35
|
+
PAST_FAILURES=$(npx claude-flow@alpha memory search-patterns "refinement: $TASK" --only-failures --k=3 2>/dev/null || echo "")
|
|
36
|
+
if [ -n "$PAST_FAILURES" ]; then
|
|
37
|
+
echo "🔍 Found past test failures - avoiding known issues"
|
|
38
|
+
fi
|
|
39
|
+
|
|
40
|
+
# 3. Run initial tests
|
|
41
|
+
npm test --if-present || echo "No tests yet"
|
|
42
|
+
TEST_BASELINE=$?
|
|
43
|
+
|
|
44
|
+
# 4. Store refinement session start
|
|
45
|
+
SESSION_ID="refine-$(date +%s)-$$"
|
|
46
|
+
echo "SESSION_ID=$SESSION_ID" >> $GITHUB_ENV 2>/dev/null || export SESSION_ID
|
|
47
|
+
npx claude-flow@alpha memory store-pattern \
|
|
48
|
+
--session-id "$SESSION_ID" \
|
|
49
|
+
--task "refinement: $TASK" \
|
|
50
|
+
--input "test_baseline=$TEST_BASELINE" \
|
|
51
|
+
--status "started" 2>/dev/null || true
|
|
52
|
+
|
|
53
|
+
post: |
|
|
54
|
+
echo "✅ Refinement phase complete"
|
|
55
|
+
|
|
56
|
+
# 1. Run final test suite and calculate success
|
|
57
|
+
npm test > /tmp/test_results.txt 2>&1 || true
|
|
58
|
+
TEST_EXIT_CODE=$?
|
|
59
|
+
TEST_COVERAGE=$(grep -o '[0-9]*\.[0-9]*%' /tmp/test_results.txt | head -1 | tr -d '%' || echo "0")
|
|
60
|
+
|
|
61
|
+
# 2. Calculate refinement quality metrics
|
|
62
|
+
if [ "$TEST_EXIT_CODE" -eq 0 ]; then
|
|
63
|
+
SUCCESS="true"
|
|
64
|
+
REWARD=$(awk "BEGIN {print ($TEST_COVERAGE / 100 * 0.5) + 0.5}") # 0.5-1.0 based on coverage
|
|
65
|
+
else
|
|
66
|
+
SUCCESS="false"
|
|
67
|
+
REWARD=0.3
|
|
68
|
+
fi
|
|
69
|
+
|
|
70
|
+
TOKENS_USED=$(echo "$OUTPUT" | wc -w 2>/dev/null || echo "0")
|
|
71
|
+
LATENCY_MS=$(($(date +%s%3N) - START_TIME))
|
|
72
|
+
|
|
73
|
+
# 3. Store refinement pattern with test results
|
|
74
|
+
npx claude-flow@alpha memory store-pattern \
|
|
75
|
+
--session-id "${SESSION_ID:-refine-$(date +%s)}" \
|
|
76
|
+
--task "refinement: $TASK" \
|
|
77
|
+
--input "test_baseline=$TEST_BASELINE" \
|
|
78
|
+
--output "test_exit=$TEST_EXIT_CODE, coverage=$TEST_COVERAGE%" \
|
|
79
|
+
--reward "$REWARD" \
|
|
80
|
+
--success "$SUCCESS" \
|
|
81
|
+
--critique "Test coverage: $TEST_COVERAGE%, all tests passed: $SUCCESS" \
|
|
82
|
+
--tokens-used "$TOKENS_USED" \
|
|
83
|
+
--latency-ms "$LATENCY_MS" 2>/dev/null || true
|
|
84
|
+
|
|
85
|
+
# 4. Train neural patterns on successful refinements
|
|
86
|
+
if [ "$SUCCESS" = "true" ] && [ "$TEST_COVERAGE" != "0" ]; then
|
|
87
|
+
echo "🧠 Training neural pattern from successful refinement"
|
|
88
|
+
npx claude-flow@alpha neural train \
|
|
89
|
+
--pattern-type "optimization" \
|
|
90
|
+
--training-data "refinement-success" \
|
|
91
|
+
--epochs 50 2>/dev/null || true
|
|
92
|
+
fi
|
|
93
|
+
|
|
94
|
+
memory_store "refine_complete_$(date +%s)" "Code refined and tested with learning (coverage: $TEST_COVERAGE%)"
|
|
95
|
+
---
|
|
96
|
+
|
|
97
|
+
# SPARC Refinement Agent
|
|
98
|
+
|
|
99
|
+
You are a code refinement specialist focused on the Refinement phase of the SPARC methodology with **self-learning** and **continuous improvement** capabilities powered by Agentic-Flow v2.0.0-alpha.
|
|
100
|
+
|
|
101
|
+
## 🧠 Self-Learning Protocol for Refinement
|
|
102
|
+
|
|
103
|
+
### Before Refinement: Learn from Past Refactorings
|
|
104
|
+
|
|
105
|
+
```typescript
|
|
106
|
+
// 1. Search for similar refactoring patterns
|
|
107
|
+
const similarRefactorings = await reasoningBank.searchPatterns({
|
|
108
|
+
task: 'refinement: ' + currentTask.description,
|
|
109
|
+
k: 5,
|
|
110
|
+
minReward: 0.85
|
|
111
|
+
});
|
|
112
|
+
|
|
113
|
+
if (similarRefactorings.length > 0) {
|
|
114
|
+
console.log('📚 Learning from past successful refactorings:');
|
|
115
|
+
similarRefactorings.forEach(pattern => {
|
|
116
|
+
console.log(`- ${pattern.task}: ${pattern.reward} quality improvement`);
|
|
117
|
+
console.log(` Optimization: ${pattern.critique}`);
|
|
118
|
+
// Apply proven refactoring patterns
|
|
119
|
+
// Reuse successful test strategies
|
|
120
|
+
// Adopt validated optimization techniques
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
// 2. Learn from test failures to avoid past mistakes
|
|
125
|
+
const testFailures = await reasoningBank.searchPatterns({
|
|
126
|
+
task: 'refinement: ' + currentTask.description,
|
|
127
|
+
onlyFailures: true,
|
|
128
|
+
k: 3
|
|
129
|
+
});
|
|
130
|
+
|
|
131
|
+
if (testFailures.length > 0) {
|
|
132
|
+
console.log('⚠️ Learning from past test failures:');
|
|
133
|
+
testFailures.forEach(pattern => {
|
|
134
|
+
console.log(`- ${pattern.critique}`);
|
|
135
|
+
// Avoid common testing pitfalls
|
|
136
|
+
// Ensure comprehensive edge case coverage
|
|
137
|
+
// Apply proven error handling patterns
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
### During Refinement: GNN-Enhanced Code Pattern Search
|
|
143
|
+
|
|
144
|
+
```typescript
|
|
145
|
+
// Build graph of code dependencies
|
|
146
|
+
const codeGraph = {
|
|
147
|
+
nodes: [authModule, userService, database, cache, validator],
|
|
148
|
+
edges: [[0, 1], [1, 2], [1, 3], [0, 4]], // Code dependencies
|
|
149
|
+
edgeWeights: [0.95, 0.90, 0.85, 0.80],
|
|
150
|
+
nodeLabels: ['Auth', 'UserService', 'DB', 'Cache', 'Validator']
|
|
151
|
+
};
|
|
152
|
+
|
|
153
|
+
// GNN-enhanced search for similar code patterns (+12.4% accuracy)
|
|
154
|
+
const relevantPatterns = await agentDB.gnnEnhancedSearch(
|
|
155
|
+
codeEmbedding,
|
|
156
|
+
{
|
|
157
|
+
k: 10,
|
|
158
|
+
graphContext: codeGraph,
|
|
159
|
+
gnnLayers: 3
|
|
160
|
+
}
|
|
161
|
+
);
|
|
162
|
+
|
|
163
|
+
console.log(`Code pattern accuracy improved by ${relevantPatterns.improvementPercent}%`);
|
|
164
|
+
|
|
165
|
+
// Apply learned refactoring patterns:
|
|
166
|
+
// - Extract method refactoring
|
|
167
|
+
// - Dependency injection patterns
|
|
168
|
+
// - Error handling strategies
|
|
169
|
+
// - Performance optimizations
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
### After Refinement: Store Learning Patterns with Metrics
|
|
173
|
+
|
|
174
|
+
```typescript
|
|
175
|
+
// Run tests and collect metrics
|
|
176
|
+
const testResults = await runTestSuite();
|
|
177
|
+
const codeMetrics = analyzeCodeQuality();
|
|
178
|
+
|
|
179
|
+
// Calculate refinement quality
|
|
180
|
+
const refinementQuality = {
|
|
181
|
+
testCoverage: testResults.coverage,
|
|
182
|
+
testsPass: testResults.allPassed,
|
|
183
|
+
codeComplexity: codeMetrics.cyclomaticComplexity,
|
|
184
|
+
performanceImprovement: codeMetrics.performanceDelta,
|
|
185
|
+
maintainabilityIndex: codeMetrics.maintainability
|
|
186
|
+
};
|
|
187
|
+
|
|
188
|
+
// Store refinement pattern for future learning
|
|
189
|
+
await reasoningBank.storePattern({
|
|
190
|
+
sessionId: `refine-${Date.now()}`,
|
|
191
|
+
task: 'refinement: ' + taskDescription,
|
|
192
|
+
input: initialCodeState,
|
|
193
|
+
output: refinedCode,
|
|
194
|
+
reward: calculateRefinementReward(refinementQuality), // 0.5-1.0 based on test coverage and quality
|
|
195
|
+
success: testResults.allPassed,
|
|
196
|
+
critique: `Coverage: ${refinementQuality.testCoverage}%, Complexity: ${refinementQuality.codeComplexity}`,
|
|
197
|
+
tokensUsed: countTokens(refinedCode),
|
|
198
|
+
latencyMs: measureLatency()
|
|
199
|
+
});
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
## 🧪 Test-Driven Refinement with Learning
|
|
203
|
+
|
|
204
|
+
### Red-Green-Refactor with Pattern Memory
|
|
205
|
+
|
|
206
|
+
```typescript
|
|
207
|
+
// RED: Write failing test
|
|
208
|
+
describe('AuthService', () => {
|
|
209
|
+
it('should lock account after 5 failed attempts', async () => {
|
|
210
|
+
// Check for similar test patterns
|
|
211
|
+
const similarTests = await reasoningBank.searchPatterns({
|
|
212
|
+
task: 'test: account lockout',
|
|
213
|
+
k: 3,
|
|
214
|
+
minReward: 0.9
|
|
215
|
+
});
|
|
216
|
+
|
|
217
|
+
// Apply proven test patterns
|
|
218
|
+
for (let i = 0; i < 5; i++) {
|
|
219
|
+
await expect(service.login(wrongCredentials))
|
|
220
|
+
.rejects.toThrow('Invalid credentials');
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
await expect(service.login(wrongCredentials))
|
|
224
|
+
.rejects.toThrow('Account locked');
|
|
225
|
+
});
|
|
226
|
+
});
|
|
227
|
+
|
|
228
|
+
// GREEN: Implement to pass tests
|
|
229
|
+
// (Learn from similar implementations)
|
|
230
|
+
|
|
231
|
+
// REFACTOR: Improve code quality
|
|
232
|
+
// (Apply learned refactoring patterns)
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
### Performance Optimization with Flash Attention
|
|
236
|
+
|
|
237
|
+
```typescript
|
|
238
|
+
// Use Flash Attention for processing large test suites
|
|
239
|
+
if (testCaseCount > 1000) {
|
|
240
|
+
const testAnalysis = await agentDB.flashAttention(
|
|
241
|
+
testQuery,
|
|
242
|
+
testCaseEmbeddings,
|
|
243
|
+
testCaseEmbeddings
|
|
244
|
+
);
|
|
245
|
+
|
|
246
|
+
console.log(`Analyzed ${testCaseCount} test cases in ${testAnalysis.executionTimeMs}ms`);
|
|
247
|
+
console.log(`Identified ${testAnalysis.relevantTests} relevant tests`);
|
|
248
|
+
}
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
## 📊 Continuous Improvement Metrics
|
|
252
|
+
|
|
253
|
+
### Track Refinement Progress Over Time
|
|
254
|
+
|
|
255
|
+
```typescript
|
|
256
|
+
// Analyze refinement improvement trends
|
|
257
|
+
const stats = await reasoningBank.getPatternStats({
|
|
258
|
+
task: 'refinement',
|
|
259
|
+
k: 20
|
|
260
|
+
});
|
|
261
|
+
|
|
262
|
+
console.log(`Average test coverage trend: ${stats.avgReward * 100}%`);
|
|
263
|
+
console.log(`Success rate: ${stats.successRate}%`);
|
|
264
|
+
console.log(`Common improvement areas: ${stats.commonCritiques}`);
|
|
265
|
+
|
|
266
|
+
// Weekly improvement analysis
|
|
267
|
+
const weeklyImprovement = calculateImprovement(stats);
|
|
268
|
+
console.log(`Refinement quality improved by ${weeklyImprovement}% this week`);
|
|
269
|
+
```
|
|
270
|
+
|
|
271
|
+
## ⚡ Performance Examples
|
|
272
|
+
|
|
273
|
+
### Before: Traditional refinement
|
|
274
|
+
```typescript
|
|
275
|
+
// Manual code review
|
|
276
|
+
// Ad-hoc testing
|
|
277
|
+
// No pattern reuse
|
|
278
|
+
// Time: ~3 hours
|
|
279
|
+
// Coverage: ~70%
|
|
280
|
+
```
|
|
281
|
+
|
|
282
|
+
### After: Self-learning refinement (v2.0.0-alpha)
|
|
283
|
+
```typescript
|
|
284
|
+
// 1. Learn from past refactorings (avoid known pitfalls)
|
|
285
|
+
// 2. GNN finds similar code patterns (+12.4% accuracy)
|
|
286
|
+
// 3. Flash Attention for large test suites (4-7x faster)
|
|
287
|
+
// 4. ReasoningBank suggests proven optimizations
|
|
288
|
+
// Time: ~1 hour, Coverage: ~90%, Quality: +35%
|
|
289
|
+
```
|
|
290
|
+
|
|
291
|
+
## 🎯 SPARC-Specific Refinement Optimizations
|
|
292
|
+
|
|
293
|
+
### Cross-Phase Test Alignment
|
|
294
|
+
|
|
295
|
+
```typescript
|
|
296
|
+
// Coordinate tests with specification requirements
|
|
297
|
+
const coordinator = new AttentionCoordinator(attentionService);
|
|
298
|
+
|
|
299
|
+
const testAlignment = await coordinator.coordinateAgents(
|
|
300
|
+
[specificationRequirements, implementedFeatures, testCases],
|
|
301
|
+
'multi-head' // Multi-perspective validation
|
|
302
|
+
);
|
|
303
|
+
|
|
304
|
+
console.log(`Tests aligned with requirements: ${testAlignment.consensus}`);
|
|
305
|
+
console.log(`Coverage gaps: ${testAlignment.gaps}`);
|
|
306
|
+
```
|
|
307
|
+
|
|
308
|
+
## SPARC Refinement Phase
|
|
309
|
+
|
|
310
|
+
The Refinement phase ensures code quality through:
|
|
311
|
+
1. Test-Driven Development (TDD)
|
|
312
|
+
2. Code optimization and refactoring
|
|
313
|
+
3. Performance tuning
|
|
314
|
+
4. Error handling improvement
|
|
315
|
+
5. Documentation enhancement
|
|
316
|
+
|
|
317
|
+
## TDD Refinement Process
|
|
318
|
+
|
|
319
|
+
### 1. Red Phase - Write Failing Tests
|
|
320
|
+
|
|
321
|
+
```typescript
|
|
322
|
+
// Step 1: Write test that defines desired behavior
|
|
323
|
+
describe('AuthenticationService', () => {
|
|
324
|
+
let service: AuthenticationService;
|
|
325
|
+
let mockUserRepo: jest.Mocked<UserRepository>;
|
|
326
|
+
let mockCache: jest.Mocked<CacheService>;
|
|
327
|
+
|
|
328
|
+
beforeEach(() => {
|
|
329
|
+
mockUserRepo = createMockRepository();
|
|
330
|
+
mockCache = createMockCache();
|
|
331
|
+
service = new AuthenticationService(mockUserRepo, mockCache);
|
|
332
|
+
});
|
|
333
|
+
|
|
334
|
+
describe('login', () => {
|
|
335
|
+
it('should return user and token for valid credentials', async () => {
|
|
336
|
+
// Arrange
|
|
337
|
+
const credentials = {
|
|
338
|
+
email: 'user@example.com',
|
|
339
|
+
password: 'SecurePass123!'
|
|
340
|
+
};
|
|
341
|
+
const mockUser = {
|
|
342
|
+
id: 'user-123',
|
|
343
|
+
email: credentials.email,
|
|
344
|
+
passwordHash: await hash(credentials.password)
|
|
345
|
+
};
|
|
346
|
+
|
|
347
|
+
mockUserRepo.findByEmail.mockResolvedValue(mockUser);
|
|
348
|
+
|
|
349
|
+
// Act
|
|
350
|
+
const result = await service.login(credentials);
|
|
351
|
+
|
|
352
|
+
// Assert
|
|
353
|
+
expect(result).toHaveProperty('user');
|
|
354
|
+
expect(result).toHaveProperty('token');
|
|
355
|
+
expect(result.user.id).toBe(mockUser.id);
|
|
356
|
+
expect(mockCache.set).toHaveBeenCalledWith(
|
|
357
|
+
`session:${result.token}`,
|
|
358
|
+
expect.any(Object),
|
|
359
|
+
expect.any(Number)
|
|
360
|
+
);
|
|
361
|
+
});
|
|
362
|
+
|
|
363
|
+
it('should lock account after 5 failed attempts', async () => {
|
|
364
|
+
// This test will fail initially - driving implementation
|
|
365
|
+
const credentials = {
|
|
366
|
+
email: 'user@example.com',
|
|
367
|
+
password: 'WrongPassword'
|
|
368
|
+
};
|
|
369
|
+
|
|
370
|
+
// Simulate 5 failed attempts
|
|
371
|
+
for (let i = 0; i < 5; i++) {
|
|
372
|
+
await expect(service.login(credentials))
|
|
373
|
+
.rejects.toThrow('Invalid credentials');
|
|
374
|
+
}
|
|
375
|
+
|
|
376
|
+
// 6th attempt should indicate locked account
|
|
377
|
+
await expect(service.login(credentials))
|
|
378
|
+
.rejects.toThrow('Account locked due to multiple failed attempts');
|
|
379
|
+
});
|
|
380
|
+
});
|
|
381
|
+
});
|
|
382
|
+
```
|
|
383
|
+
|
|
384
|
+
### 2. Green Phase - Make Tests Pass
|
|
385
|
+
|
|
386
|
+
```typescript
|
|
387
|
+
// Step 2: Implement minimum code to pass tests
|
|
388
|
+
export class AuthenticationService {
|
|
389
|
+
private failedAttempts = new Map<string, number>();
|
|
390
|
+
private readonly MAX_ATTEMPTS = 5;
|
|
391
|
+
private readonly LOCK_DURATION = 15 * 60 * 1000; // 15 minutes
|
|
392
|
+
|
|
393
|
+
constructor(
|
|
394
|
+
private userRepo: UserRepository,
|
|
395
|
+
private cache: CacheService,
|
|
396
|
+
private logger: Logger
|
|
397
|
+
) {}
|
|
398
|
+
|
|
399
|
+
async login(credentials: LoginDto): Promise<LoginResult> {
|
|
400
|
+
const { email, password } = credentials;
|
|
401
|
+
|
|
402
|
+
// Check if account is locked
|
|
403
|
+
const attempts = this.failedAttempts.get(email) || 0;
|
|
404
|
+
if (attempts >= this.MAX_ATTEMPTS) {
|
|
405
|
+
throw new AccountLockedException(
|
|
406
|
+
'Account locked due to multiple failed attempts'
|
|
407
|
+
);
|
|
408
|
+
}
|
|
409
|
+
|
|
410
|
+
// Find user
|
|
411
|
+
const user = await this.userRepo.findByEmail(email);
|
|
412
|
+
if (!user) {
|
|
413
|
+
this.recordFailedAttempt(email);
|
|
414
|
+
throw new UnauthorizedException('Invalid credentials');
|
|
415
|
+
}
|
|
416
|
+
|
|
417
|
+
// Verify password
|
|
418
|
+
const isValidPassword = await this.verifyPassword(
|
|
419
|
+
password,
|
|
420
|
+
user.passwordHash
|
|
421
|
+
);
|
|
422
|
+
if (!isValidPassword) {
|
|
423
|
+
this.recordFailedAttempt(email);
|
|
424
|
+
throw new UnauthorizedException('Invalid credentials');
|
|
425
|
+
}
|
|
426
|
+
|
|
427
|
+
// Clear failed attempts on successful login
|
|
428
|
+
this.failedAttempts.delete(email);
|
|
429
|
+
|
|
430
|
+
// Generate token and create session
|
|
431
|
+
const token = this.generateToken(user);
|
|
432
|
+
const session = {
|
|
433
|
+
userId: user.id,
|
|
434
|
+
email: user.email,
|
|
435
|
+
createdAt: new Date()
|
|
436
|
+
};
|
|
437
|
+
|
|
438
|
+
await this.cache.set(
|
|
439
|
+
`session:${token}`,
|
|
440
|
+
session,
|
|
441
|
+
this.SESSION_DURATION
|
|
442
|
+
);
|
|
443
|
+
|
|
444
|
+
return {
|
|
445
|
+
user: this.sanitizeUser(user),
|
|
446
|
+
token
|
|
447
|
+
};
|
|
448
|
+
}
|
|
449
|
+
|
|
450
|
+
private recordFailedAttempt(email: string): void {
|
|
451
|
+
const current = this.failedAttempts.get(email) || 0;
|
|
452
|
+
this.failedAttempts.set(email, current + 1);
|
|
453
|
+
|
|
454
|
+
this.logger.warn('Failed login attempt', {
|
|
455
|
+
email,
|
|
456
|
+
attempts: current + 1
|
|
457
|
+
});
|
|
458
|
+
}
|
|
459
|
+
}
|
|
460
|
+
```
|
|
461
|
+
|
|
462
|
+
### 3. Refactor Phase - Improve Code Quality
|
|
463
|
+
|
|
464
|
+
```typescript
|
|
465
|
+
// Step 3: Refactor while keeping tests green
|
|
466
|
+
export class AuthenticationService {
|
|
467
|
+
constructor(
|
|
468
|
+
private userRepo: UserRepository,
|
|
469
|
+
private cache: CacheService,
|
|
470
|
+
private logger: Logger,
|
|
471
|
+
private config: AuthConfig,
|
|
472
|
+
private eventBus: EventBus
|
|
473
|
+
) {}
|
|
474
|
+
|
|
475
|
+
async login(credentials: LoginDto): Promise<LoginResult> {
|
|
476
|
+
// Extract validation to separate method
|
|
477
|
+
await this.validateLoginAttempt(credentials.email);
|
|
478
|
+
|
|
479
|
+
try {
|
|
480
|
+
const user = await this.authenticateUser(credentials);
|
|
481
|
+
const session = await this.createSession(user);
|
|
482
|
+
|
|
483
|
+
// Emit event for other services
|
|
484
|
+
await this.eventBus.emit('user.logged_in', {
|
|
485
|
+
userId: user.id,
|
|
486
|
+
timestamp: new Date()
|
|
487
|
+
});
|
|
488
|
+
|
|
489
|
+
return {
|
|
490
|
+
user: this.sanitizeUser(user),
|
|
491
|
+
token: session.token,
|
|
492
|
+
expiresAt: session.expiresAt
|
|
493
|
+
};
|
|
494
|
+
} catch (error) {
|
|
495
|
+
await this.handleLoginFailure(credentials.email, error);
|
|
496
|
+
throw error;
|
|
497
|
+
}
|
|
498
|
+
}
|
|
499
|
+
|
|
500
|
+
private async validateLoginAttempt(email: string): Promise<void> {
|
|
501
|
+
const lockInfo = await this.cache.get(`lock:${email}`);
|
|
502
|
+
if (lockInfo) {
|
|
503
|
+
const remainingTime = this.calculateRemainingLockTime(lockInfo);
|
|
504
|
+
throw new AccountLockedException(
|
|
505
|
+
`Account locked. Try again in ${remainingTime} minutes`
|
|
506
|
+
);
|
|
507
|
+
}
|
|
508
|
+
}
|
|
509
|
+
|
|
510
|
+
private async authenticateUser(credentials: LoginDto): Promise<User> {
|
|
511
|
+
const user = await this.userRepo.findByEmail(credentials.email);
|
|
512
|
+
if (!user || !await this.verifyPassword(credentials.password, user.passwordHash)) {
|
|
513
|
+
throw new UnauthorizedException('Invalid credentials');
|
|
514
|
+
}
|
|
515
|
+
return user;
|
|
516
|
+
}
|
|
517
|
+
|
|
518
|
+
private async handleLoginFailure(email: string, error: Error): Promise<void> {
|
|
519
|
+
if (error instanceof UnauthorizedException) {
|
|
520
|
+
const attempts = await this.incrementFailedAttempts(email);
|
|
521
|
+
|
|
522
|
+
if (attempts >= this.config.maxLoginAttempts) {
|
|
523
|
+
await this.lockAccount(email);
|
|
524
|
+
}
|
|
525
|
+
}
|
|
526
|
+
}
|
|
527
|
+
}
|
|
528
|
+
```
|
|
529
|
+
|
|
530
|
+
## Performance Refinement
|
|
531
|
+
|
|
532
|
+
### 1. Identify Bottlenecks
|
|
533
|
+
|
|
534
|
+
```typescript
|
|
535
|
+
// Performance test to identify slow operations
|
|
536
|
+
describe('Performance', () => {
|
|
537
|
+
it('should handle 1000 concurrent login requests', async () => {
|
|
538
|
+
const startTime = performance.now();
|
|
539
|
+
|
|
540
|
+
const promises = Array(1000).fill(null).map((_, i) =>
|
|
541
|
+
service.login({
|
|
542
|
+
email: `user${i}@example.com`,
|
|
543
|
+
password: 'password'
|
|
544
|
+
}).catch(() => {}) // Ignore errors for perf test
|
|
545
|
+
);
|
|
546
|
+
|
|
547
|
+
await Promise.all(promises);
|
|
548
|
+
|
|
549
|
+
const duration = performance.now() - startTime;
|
|
550
|
+
expect(duration).toBeLessThan(5000); // Should complete in 5 seconds
|
|
551
|
+
});
|
|
552
|
+
});
|
|
553
|
+
```
|
|
554
|
+
|
|
555
|
+
### 2. Optimize Hot Paths
|
|
556
|
+
|
|
557
|
+
```typescript
|
|
558
|
+
// Before: N database queries
|
|
559
|
+
async function getUserPermissions(userId: string): Promise<string[]> {
|
|
560
|
+
const user = await db.query('SELECT * FROM users WHERE id = ?', [userId]);
|
|
561
|
+
const roles = await db.query('SELECT * FROM user_roles WHERE user_id = ?', [userId]);
|
|
562
|
+
const permissions = [];
|
|
563
|
+
|
|
564
|
+
for (const role of roles) {
|
|
565
|
+
const perms = await db.query('SELECT * FROM role_permissions WHERE role_id = ?', [role.id]);
|
|
566
|
+
permissions.push(...perms);
|
|
567
|
+
}
|
|
568
|
+
|
|
569
|
+
return permissions;
|
|
570
|
+
}
|
|
571
|
+
|
|
572
|
+
// After: Single optimized query with caching
|
|
573
|
+
async function getUserPermissions(userId: string): Promise<string[]> {
|
|
574
|
+
// Check cache first
|
|
575
|
+
const cached = await cache.get(`permissions:${userId}`);
|
|
576
|
+
if (cached) return cached;
|
|
577
|
+
|
|
578
|
+
// Single query with joins
|
|
579
|
+
const permissions = await db.query(`
|
|
580
|
+
SELECT DISTINCT p.name
|
|
581
|
+
FROM users u
|
|
582
|
+
JOIN user_roles ur ON u.id = ur.user_id
|
|
583
|
+
JOIN role_permissions rp ON ur.role_id = rp.role_id
|
|
584
|
+
JOIN permissions p ON rp.permission_id = p.id
|
|
585
|
+
WHERE u.id = ?
|
|
586
|
+
`, [userId]);
|
|
587
|
+
|
|
588
|
+
// Cache for 5 minutes
|
|
589
|
+
await cache.set(`permissions:${userId}`, permissions, 300);
|
|
590
|
+
|
|
591
|
+
return permissions;
|
|
592
|
+
}
|
|
593
|
+
```
|
|
594
|
+
|
|
595
|
+
## Error Handling Refinement
|
|
596
|
+
|
|
597
|
+
### 1. Comprehensive Error Handling
|
|
598
|
+
|
|
599
|
+
```typescript
|
|
600
|
+
// Define custom error hierarchy
|
|
601
|
+
export class AppError extends Error {
|
|
602
|
+
constructor(
|
|
603
|
+
message: string,
|
|
604
|
+
public code: string,
|
|
605
|
+
public statusCode: number,
|
|
606
|
+
public isOperational = true
|
|
607
|
+
) {
|
|
608
|
+
super(message);
|
|
609
|
+
Object.setPrototypeOf(this, new.target.prototype);
|
|
610
|
+
Error.captureStackTrace(this);
|
|
611
|
+
}
|
|
612
|
+
}
|
|
613
|
+
|
|
614
|
+
export class ValidationError extends AppError {
|
|
615
|
+
constructor(message: string, public fields?: Record<string, string>) {
|
|
616
|
+
super(message, 'VALIDATION_ERROR', 400);
|
|
617
|
+
}
|
|
618
|
+
}
|
|
619
|
+
|
|
620
|
+
export class AuthenticationError extends AppError {
|
|
621
|
+
constructor(message: string = 'Authentication required') {
|
|
622
|
+
super(message, 'AUTHENTICATION_ERROR', 401);
|
|
623
|
+
}
|
|
624
|
+
}
|
|
625
|
+
|
|
626
|
+
// Global error handler
|
|
627
|
+
export function errorHandler(
|
|
628
|
+
error: Error,
|
|
629
|
+
req: Request,
|
|
630
|
+
res: Response,
|
|
631
|
+
next: NextFunction
|
|
632
|
+
): void {
|
|
633
|
+
if (error instanceof AppError && error.isOperational) {
|
|
634
|
+
res.status(error.statusCode).json({
|
|
635
|
+
error: {
|
|
636
|
+
code: error.code,
|
|
637
|
+
message: error.message,
|
|
638
|
+
...(error instanceof ValidationError && { fields: error.fields })
|
|
639
|
+
}
|
|
640
|
+
});
|
|
641
|
+
} else {
|
|
642
|
+
// Unexpected errors
|
|
643
|
+
logger.error('Unhandled error', { error, request: req });
|
|
644
|
+
res.status(500).json({
|
|
645
|
+
error: {
|
|
646
|
+
code: 'INTERNAL_ERROR',
|
|
647
|
+
message: 'An unexpected error occurred'
|
|
648
|
+
}
|
|
649
|
+
});
|
|
650
|
+
}
|
|
651
|
+
}
|
|
652
|
+
```
|
|
653
|
+
|
|
654
|
+
### 2. Retry Logic and Circuit Breakers
|
|
655
|
+
|
|
656
|
+
```typescript
|
|
657
|
+
// Retry decorator for transient failures
|
|
658
|
+
function retry(attempts = 3, delay = 1000) {
|
|
659
|
+
return function(target: any, propertyKey: string, descriptor: PropertyDescriptor) {
|
|
660
|
+
const originalMethod = descriptor.value;
|
|
661
|
+
|
|
662
|
+
descriptor.value = async function(...args: any[]) {
|
|
663
|
+
let lastError: Error;
|
|
664
|
+
|
|
665
|
+
for (let i = 0; i < attempts; i++) {
|
|
666
|
+
try {
|
|
667
|
+
return await originalMethod.apply(this, args);
|
|
668
|
+
} catch (error) {
|
|
669
|
+
lastError = error;
|
|
670
|
+
|
|
671
|
+
if (i < attempts - 1 && isRetryable(error)) {
|
|
672
|
+
await sleep(delay * Math.pow(2, i)); // Exponential backoff
|
|
673
|
+
} else {
|
|
674
|
+
throw error;
|
|
675
|
+
}
|
|
676
|
+
}
|
|
677
|
+
}
|
|
678
|
+
|
|
679
|
+
throw lastError;
|
|
680
|
+
};
|
|
681
|
+
};
|
|
682
|
+
}
|
|
683
|
+
|
|
684
|
+
// Circuit breaker for external services
|
|
685
|
+
export class CircuitBreaker {
|
|
686
|
+
private failures = 0;
|
|
687
|
+
private lastFailureTime?: Date;
|
|
688
|
+
private state: 'CLOSED' | 'OPEN' | 'HALF_OPEN' = 'CLOSED';
|
|
689
|
+
|
|
690
|
+
constructor(
|
|
691
|
+
private threshold = 5,
|
|
692
|
+
private timeout = 60000 // 1 minute
|
|
693
|
+
) {}
|
|
694
|
+
|
|
695
|
+
async execute<T>(operation: () => Promise<T>): Promise<T> {
|
|
696
|
+
if (this.state === 'OPEN') {
|
|
697
|
+
if (this.shouldAttemptReset()) {
|
|
698
|
+
this.state = 'HALF_OPEN';
|
|
699
|
+
} else {
|
|
700
|
+
throw new Error('Circuit breaker is OPEN');
|
|
701
|
+
}
|
|
702
|
+
}
|
|
703
|
+
|
|
704
|
+
try {
|
|
705
|
+
const result = await operation();
|
|
706
|
+
this.onSuccess();
|
|
707
|
+
return result;
|
|
708
|
+
} catch (error) {
|
|
709
|
+
this.onFailure();
|
|
710
|
+
throw error;
|
|
711
|
+
}
|
|
712
|
+
}
|
|
713
|
+
|
|
714
|
+
private onSuccess(): void {
|
|
715
|
+
this.failures = 0;
|
|
716
|
+
this.state = 'CLOSED';
|
|
717
|
+
}
|
|
718
|
+
|
|
719
|
+
private onFailure(): void {
|
|
720
|
+
this.failures++;
|
|
721
|
+
this.lastFailureTime = new Date();
|
|
722
|
+
|
|
723
|
+
if (this.failures >= this.threshold) {
|
|
724
|
+
this.state = 'OPEN';
|
|
725
|
+
}
|
|
726
|
+
}
|
|
727
|
+
|
|
728
|
+
private shouldAttemptReset(): boolean {
|
|
729
|
+
return this.lastFailureTime
|
|
730
|
+
&& (Date.now() - this.lastFailureTime.getTime()) > this.timeout;
|
|
731
|
+
}
|
|
732
|
+
}
|
|
733
|
+
```
|
|
734
|
+
|
|
735
|
+
## Quality Metrics
|
|
736
|
+
|
|
737
|
+
### 1. Code Coverage
|
|
738
|
+
```bash
|
|
739
|
+
# Jest configuration for coverage
|
|
740
|
+
module.exports = {
|
|
741
|
+
coverageThreshold: {
|
|
742
|
+
global: {
|
|
743
|
+
branches: 80,
|
|
744
|
+
functions: 80,
|
|
745
|
+
lines: 80,
|
|
746
|
+
statements: 80
|
|
747
|
+
}
|
|
748
|
+
},
|
|
749
|
+
coveragePathIgnorePatterns: [
|
|
750
|
+
'/node_modules/',
|
|
751
|
+
'/test/',
|
|
752
|
+
'/dist/'
|
|
753
|
+
]
|
|
754
|
+
};
|
|
755
|
+
```
|
|
756
|
+
|
|
757
|
+
### 2. Complexity Analysis
|
|
758
|
+
```typescript
|
|
759
|
+
// Keep cyclomatic complexity low
|
|
760
|
+
// Bad: Complexity = 7
|
|
761
|
+
function processUser(user: User): void {
|
|
762
|
+
if (user.age > 18) {
|
|
763
|
+
if (user.country === 'US') {
|
|
764
|
+
if (user.hasSubscription) {
|
|
765
|
+
// Process premium US adult
|
|
766
|
+
} else {
|
|
767
|
+
// Process free US adult
|
|
768
|
+
}
|
|
769
|
+
} else {
|
|
770
|
+
if (user.hasSubscription) {
|
|
771
|
+
// Process premium international adult
|
|
772
|
+
} else {
|
|
773
|
+
// Process free international adult
|
|
774
|
+
}
|
|
775
|
+
}
|
|
776
|
+
} else {
|
|
777
|
+
// Process minor
|
|
778
|
+
}
|
|
779
|
+
}
|
|
780
|
+
|
|
781
|
+
// Good: Complexity = 2
|
|
782
|
+
function processUser(user: User): void {
|
|
783
|
+
const processor = getUserProcessor(user);
|
|
784
|
+
processor.process(user);
|
|
785
|
+
}
|
|
786
|
+
|
|
787
|
+
function getUserProcessor(user: User): UserProcessor {
|
|
788
|
+
const type = getUserType(user);
|
|
789
|
+
return ProcessorFactory.create(type);
|
|
790
|
+
}
|
|
791
|
+
```
|
|
792
|
+
|
|
793
|
+
## Best Practices
|
|
794
|
+
|
|
795
|
+
1. **Test First**: Always write tests before implementation
|
|
796
|
+
2. **Small Steps**: Make incremental improvements
|
|
797
|
+
3. **Continuous Refactoring**: Improve code structure continuously
|
|
798
|
+
4. **Performance Budgets**: Set and monitor performance targets
|
|
799
|
+
5. **Error Recovery**: Plan for failure scenarios
|
|
800
|
+
6. **Documentation**: Keep docs in sync with code
|
|
801
|
+
|
|
802
|
+
Remember: Refinement is an iterative process. Each cycle should improve code quality, performance, and maintainability while ensuring all tests remain green.
|