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,102 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Guidance Hooks for Claude Flow V3
|
|
3
|
+
# Provides context and routing for Claude Code operations
|
|
4
|
+
|
|
5
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
6
|
+
PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
|
|
7
|
+
CACHE_DIR="$PROJECT_ROOT/.claude-flow"
|
|
8
|
+
|
|
9
|
+
# Ensure cache directory exists
|
|
10
|
+
mkdir -p "$CACHE_DIR" 2>/dev/null || true
|
|
11
|
+
|
|
12
|
+
# Color codes
|
|
13
|
+
CYAN='\033[0;36m'
|
|
14
|
+
GREEN='\033[0;32m'
|
|
15
|
+
YELLOW='\033[1;33m'
|
|
16
|
+
RED='\033[0;31m'
|
|
17
|
+
RESET='\033[0m'
|
|
18
|
+
DIM='\033[2m'
|
|
19
|
+
|
|
20
|
+
# Get command
|
|
21
|
+
COMMAND="${1:-help}"
|
|
22
|
+
shift || true
|
|
23
|
+
|
|
24
|
+
case "$COMMAND" in
|
|
25
|
+
pre-edit)
|
|
26
|
+
FILE_PATH="$1"
|
|
27
|
+
if [[ -n "$FILE_PATH" ]]; then
|
|
28
|
+
if [[ "$FILE_PATH" =~ (config|secret|credential|password|key|auth) ]]; then
|
|
29
|
+
echo -e "${YELLOW}[Guidance] Security-sensitive file${RESET}"
|
|
30
|
+
fi
|
|
31
|
+
if [[ "$FILE_PATH" =~ ^v3/ ]]; then
|
|
32
|
+
echo -e "${CYAN}[Guidance] V3 module - follow ADR guidelines${RESET}"
|
|
33
|
+
fi
|
|
34
|
+
fi
|
|
35
|
+
exit 0
|
|
36
|
+
;;
|
|
37
|
+
|
|
38
|
+
post-edit)
|
|
39
|
+
FILE_PATH="$1"
|
|
40
|
+
echo "$(date -Iseconds) edit $FILE_PATH" >> "$CACHE_DIR/edit-history.log" 2>/dev/null || true
|
|
41
|
+
exit 0
|
|
42
|
+
;;
|
|
43
|
+
|
|
44
|
+
pre-command)
|
|
45
|
+
COMMAND_STR="$1"
|
|
46
|
+
if [[ "$COMMAND_STR" =~ (rm -rf|sudo|chmod 777) ]]; then
|
|
47
|
+
echo -e "${RED}[Guidance] High-risk command${RESET}"
|
|
48
|
+
fi
|
|
49
|
+
exit 0
|
|
50
|
+
;;
|
|
51
|
+
|
|
52
|
+
route)
|
|
53
|
+
TASK="$1"
|
|
54
|
+
[[ -z "$TASK" ]] && exit 0
|
|
55
|
+
if [[ "$TASK" =~ (security|CVE|vulnerability) ]]; then
|
|
56
|
+
echo -e "${DIM}[Route] security-architect${RESET}"
|
|
57
|
+
elif [[ "$TASK" =~ (memory|AgentDB|HNSW|vector) ]]; then
|
|
58
|
+
echo -e "${DIM}[Route] memory-specialist${RESET}"
|
|
59
|
+
elif [[ "$TASK" =~ (performance|optimize|benchmark) ]]; then
|
|
60
|
+
echo -e "${DIM}[Route] performance-engineer${RESET}"
|
|
61
|
+
elif [[ "$TASK" =~ (test|TDD|spec) ]]; then
|
|
62
|
+
echo -e "${DIM}[Route] test-architect${RESET}"
|
|
63
|
+
fi
|
|
64
|
+
exit 0
|
|
65
|
+
;;
|
|
66
|
+
|
|
67
|
+
session-context)
|
|
68
|
+
cat << 'EOF'
|
|
69
|
+
## V3 Development Context
|
|
70
|
+
|
|
71
|
+
**Architecture**: Domain-Driven Design with 15 @claude-flow modules
|
|
72
|
+
**Priority**: Security-first (CVE-1, CVE-2, CVE-3 remediation)
|
|
73
|
+
**Performance Targets**:
|
|
74
|
+
- HNSW search: 150x-12,500x faster
|
|
75
|
+
- Flash Attention: 2.49x-7.47x speedup
|
|
76
|
+
- Memory: 50-75% reduction
|
|
77
|
+
|
|
78
|
+
**Active Patterns**:
|
|
79
|
+
- Use TDD London School (mock-first)
|
|
80
|
+
- Event sourcing for state changes
|
|
81
|
+
- agentic-flow@alpha as core foundation
|
|
82
|
+
- Bounded contexts with clear interfaces
|
|
83
|
+
|
|
84
|
+
**Code Quality Rules**:
|
|
85
|
+
- Files under 500 lines
|
|
86
|
+
- No hardcoded secrets
|
|
87
|
+
- Input validation at boundaries
|
|
88
|
+
- Typed interfaces for all public APIs
|
|
89
|
+
|
|
90
|
+
**Learned Patterns**: 17 available for reference
|
|
91
|
+
EOF
|
|
92
|
+
exit 0
|
|
93
|
+
;;
|
|
94
|
+
|
|
95
|
+
user-prompt)
|
|
96
|
+
exit 0
|
|
97
|
+
;;
|
|
98
|
+
|
|
99
|
+
*)
|
|
100
|
+
exit 0
|
|
101
|
+
;;
|
|
102
|
+
esac
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Claude Flow V3 - Health Monitor Worker
|
|
3
|
+
# Checks disk space, memory pressure, process health
|
|
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
|
+
HEALTH_FILE="$METRICS_DIR/health.json"
|
|
11
|
+
LAST_RUN_FILE="$METRICS_DIR/.health-last-run"
|
|
12
|
+
|
|
13
|
+
mkdir -p "$METRICS_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 300 ] # 5 minutes
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
check_health() {
|
|
23
|
+
echo "[$(date +%H:%M:%S)] Running health check..."
|
|
24
|
+
|
|
25
|
+
# Disk usage
|
|
26
|
+
local disk_usage=$(df -h "$PROJECT_ROOT" 2>/dev/null | awk 'NR==2 {print $5}' | tr -d '%')
|
|
27
|
+
local disk_free=$(df -h "$PROJECT_ROOT" 2>/dev/null | awk 'NR==2 {print $4}')
|
|
28
|
+
|
|
29
|
+
# Memory usage
|
|
30
|
+
local mem_total=$(free -m 2>/dev/null | awk '/Mem:/ {print $2}' || echo "0")
|
|
31
|
+
local mem_used=$(free -m 2>/dev/null | awk '/Mem:/ {print $3}' || echo "0")
|
|
32
|
+
local mem_pct=$((mem_used * 100 / (mem_total + 1)))
|
|
33
|
+
|
|
34
|
+
# Process counts
|
|
35
|
+
local node_procs=$(pgrep -c node 2>/dev/null || echo "0")
|
|
36
|
+
local agentic_procs=$(ps aux 2>/dev/null | grep -c "agentic-flow" | grep -v grep || echo "0")
|
|
37
|
+
|
|
38
|
+
# CPU load
|
|
39
|
+
local load_avg=$(cat /proc/loadavg 2>/dev/null | awk '{print $1}' || echo "0")
|
|
40
|
+
|
|
41
|
+
# File descriptor usage
|
|
42
|
+
local fd_used=$(ls /proc/$$/fd 2>/dev/null | wc -l || echo "0")
|
|
43
|
+
|
|
44
|
+
# Determine health status
|
|
45
|
+
local status="healthy"
|
|
46
|
+
local warnings=""
|
|
47
|
+
|
|
48
|
+
if [ "$disk_usage" -gt 90 ]; then
|
|
49
|
+
status="critical"
|
|
50
|
+
warnings="$warnings disk_full"
|
|
51
|
+
elif [ "$disk_usage" -gt 80 ]; then
|
|
52
|
+
status="warning"
|
|
53
|
+
warnings="$warnings disk_high"
|
|
54
|
+
fi
|
|
55
|
+
|
|
56
|
+
if [ "$mem_pct" -gt 90 ]; then
|
|
57
|
+
status="critical"
|
|
58
|
+
warnings="$warnings memory_full"
|
|
59
|
+
elif [ "$mem_pct" -gt 80 ]; then
|
|
60
|
+
[ "$status" != "critical" ] && status="warning"
|
|
61
|
+
warnings="$warnings memory_high"
|
|
62
|
+
fi
|
|
63
|
+
|
|
64
|
+
# Write health metrics
|
|
65
|
+
cat > "$HEALTH_FILE" << EOF
|
|
66
|
+
{
|
|
67
|
+
"status": "$status",
|
|
68
|
+
"timestamp": "$(date -Iseconds)",
|
|
69
|
+
"disk": {
|
|
70
|
+
"usage_pct": $disk_usage,
|
|
71
|
+
"free": "$disk_free"
|
|
72
|
+
},
|
|
73
|
+
"memory": {
|
|
74
|
+
"total_mb": $mem_total,
|
|
75
|
+
"used_mb": $mem_used,
|
|
76
|
+
"usage_pct": $mem_pct
|
|
77
|
+
},
|
|
78
|
+
"processes": {
|
|
79
|
+
"node": $node_procs,
|
|
80
|
+
"agentic_flow": $agentic_procs
|
|
81
|
+
},
|
|
82
|
+
"load_avg": $load_avg,
|
|
83
|
+
"fd_used": $fd_used,
|
|
84
|
+
"warnings": "$(echo $warnings | xargs)"
|
|
85
|
+
}
|
|
86
|
+
EOF
|
|
87
|
+
|
|
88
|
+
echo "[$(date +%H:%M:%S)] ✓ Health: $status | Disk: ${disk_usage}% | Memory: ${mem_pct}% | Load: $load_avg"
|
|
89
|
+
|
|
90
|
+
date +%s > "$LAST_RUN_FILE"
|
|
91
|
+
|
|
92
|
+
# Return non-zero if unhealthy
|
|
93
|
+
[ "$status" = "healthy" ] && return 0 || return 1
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
case "${1:-check}" in
|
|
97
|
+
"run") check_health ;;
|
|
98
|
+
"check") should_run && check_health || echo "[$(date +%H:%M:%S)] Skipping (throttled)" ;;
|
|
99
|
+
"force") rm -f "$LAST_RUN_FILE"; check_health ;;
|
|
100
|
+
"status")
|
|
101
|
+
if [ -f "$HEALTH_FILE" ]; then
|
|
102
|
+
jq -r '"Status: \(.status) | Disk: \(.disk.usage_pct)% | Memory: \(.memory.usage_pct)% | Load: \(.load_avg)"' "$HEALTH_FILE"
|
|
103
|
+
else
|
|
104
|
+
echo "No health data available"
|
|
105
|
+
fi
|
|
106
|
+
;;
|
|
107
|
+
*) echo "Usage: $0 [run|check|force|status]" ;;
|
|
108
|
+
esac
|
|
@@ -0,0 +1,286 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Claude Flow Hook Handler (Cross-Platform)
|
|
4
|
+
* Dispatches hook events to the appropriate helper modules.
|
|
5
|
+
*
|
|
6
|
+
* Usage: node hook-handler.cjs <command> [args...]
|
|
7
|
+
*
|
|
8
|
+
* Commands:
|
|
9
|
+
* route - Route a task to optimal agent (reads PROMPT from env/stdin)
|
|
10
|
+
* pre-bash - Validate command safety before execution
|
|
11
|
+
* post-edit - Record edit outcome for learning
|
|
12
|
+
* session-restore - Restore previous session state
|
|
13
|
+
* session-end - End session and persist state
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
const path = require('path');
|
|
17
|
+
const fs = require('fs');
|
|
18
|
+
|
|
19
|
+
const helpersDir = __dirname;
|
|
20
|
+
|
|
21
|
+
// Safe require with stdout suppression - the helper modules have CLI
|
|
22
|
+
// sections that run unconditionally on require(), so we mute console
|
|
23
|
+
// during the require to prevent noisy output.
|
|
24
|
+
function safeRequire(modulePath) {
|
|
25
|
+
try {
|
|
26
|
+
if (fs.existsSync(modulePath)) {
|
|
27
|
+
const origLog = console.log;
|
|
28
|
+
const origError = console.error;
|
|
29
|
+
console.log = () => {};
|
|
30
|
+
console.error = () => {};
|
|
31
|
+
try {
|
|
32
|
+
const mod = require(modulePath);
|
|
33
|
+
return mod;
|
|
34
|
+
} finally {
|
|
35
|
+
console.log = origLog;
|
|
36
|
+
console.error = origError;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
} catch (e) {
|
|
40
|
+
// silently fail
|
|
41
|
+
}
|
|
42
|
+
return null;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
const router = safeRequire(path.join(helpersDir, 'router.js'));
|
|
46
|
+
const session = safeRequire(path.join(helpersDir, 'session.js'));
|
|
47
|
+
const memory = safeRequire(path.join(helpersDir, 'memory.js'));
|
|
48
|
+
const intelligence = safeRequire(path.join(helpersDir, 'intelligence.cjs'));
|
|
49
|
+
|
|
50
|
+
// ── Intelligence timeout protection (fixes #1530, #1531) ───────────────────
|
|
51
|
+
const INTELLIGENCE_TIMEOUT_MS = 3000;
|
|
52
|
+
function runWithTimeout(fn, label) {
|
|
53
|
+
// For synchronous blocking calls, we use a global safety timer.
|
|
54
|
+
// The readJSON file-size guard prevents loading huge files, but this
|
|
55
|
+
// is an additional safety net.
|
|
56
|
+
return new Promise((resolve) => {
|
|
57
|
+
const timer = setTimeout(() => {
|
|
58
|
+
process.stderr.write("[WARN] " + label + " timed out after " + INTELLIGENCE_TIMEOUT_MS + "ms, skipping\n");
|
|
59
|
+
resolve(null);
|
|
60
|
+
}, INTELLIGENCE_TIMEOUT_MS);
|
|
61
|
+
try {
|
|
62
|
+
const result = fn();
|
|
63
|
+
clearTimeout(timer);
|
|
64
|
+
resolve(result);
|
|
65
|
+
} catch (e) {
|
|
66
|
+
clearTimeout(timer);
|
|
67
|
+
resolve(null);
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
// Get the command from argv
|
|
74
|
+
const [,, command, ...args] = process.argv;
|
|
75
|
+
|
|
76
|
+
// Read stdin with timeout — Claude Code sends hook data as JSON via stdin.
|
|
77
|
+
// Timeout prevents hanging when stdin is not properly closed (common on Windows).
|
|
78
|
+
async function readStdin() {
|
|
79
|
+
if (process.stdin.isTTY) return '';
|
|
80
|
+
return new Promise((resolve) => {
|
|
81
|
+
let data = '';
|
|
82
|
+
const timer = setTimeout(() => {
|
|
83
|
+
process.stdin.removeAllListeners();
|
|
84
|
+
process.stdin.pause();
|
|
85
|
+
resolve(data);
|
|
86
|
+
}, 500);
|
|
87
|
+
process.stdin.setEncoding('utf8');
|
|
88
|
+
process.stdin.on('data', (chunk) => { data += chunk; });
|
|
89
|
+
process.stdin.on('end', () => { clearTimeout(timer); resolve(data); });
|
|
90
|
+
process.stdin.on('error', () => { clearTimeout(timer); resolve(data); });
|
|
91
|
+
process.stdin.resume();
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
async function main() {
|
|
96
|
+
// Global safety timeout: hooks must NEVER hang (#1530, #1531)
|
|
97
|
+
const safetyTimer = setTimeout(() => {
|
|
98
|
+
process.stderr.write("[WARN] Hook handler global timeout (5s), forcing exit\n");
|
|
99
|
+
process.exit(0);
|
|
100
|
+
}, 5000);
|
|
101
|
+
safetyTimer.unref(); // don't keep process alive just for this timer
|
|
102
|
+
|
|
103
|
+
let stdinData = '';
|
|
104
|
+
try { stdinData = await readStdin(); } catch (e) { /* ignore stdin errors */ }
|
|
105
|
+
|
|
106
|
+
let hookInput = {};
|
|
107
|
+
if (stdinData.trim()) {
|
|
108
|
+
try { hookInput = JSON.parse(stdinData); } catch (e) { /* ignore parse errors */ }
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
// Normalize snake_case/camelCase: Claude Code sends tool_input/tool_name (snake_case)
|
|
112
|
+
const toolInput = hookInput.toolInput || hookInput.tool_input || {};
|
|
113
|
+
const toolName = hookInput.toolName || hookInput.tool_name || '';
|
|
114
|
+
|
|
115
|
+
// Merge stdin data into prompt resolution: prefer stdin fields, then env, then argv.
|
|
116
|
+
// `toolInput` is an object (e.g. {command:"ls"}) — it's truthy but not a string,
|
|
117
|
+
// so falling back to it directly bound `prompt` to the object and tripped
|
|
118
|
+
// `.toLowerCase()` / `.substring()` on every Bash hook (#1944). Use the
|
|
119
|
+
// `.command` field instead, which is the actual string the hook needs.
|
|
120
|
+
const prompt = hookInput.prompt || hookInput.command || toolInput.command
|
|
121
|
+
|| process.env.PROMPT || process.env.TOOL_INPUT_command || args.join(' ') || '';
|
|
122
|
+
|
|
123
|
+
const handlers = {
|
|
124
|
+
'route': () => {
|
|
125
|
+
// Inject ranked intelligence context before routing
|
|
126
|
+
if (intelligence && intelligence.getContext) {
|
|
127
|
+
try {
|
|
128
|
+
const ctx = intelligence.getContext(prompt);
|
|
129
|
+
if (ctx) console.log(ctx);
|
|
130
|
+
} catch (e) { /* non-fatal */ }
|
|
131
|
+
}
|
|
132
|
+
if (router && router.routeTask) {
|
|
133
|
+
const result = router.routeTask(prompt);
|
|
134
|
+
// Format output for Claude Code hook consumption — real data only
|
|
135
|
+
const output = [
|
|
136
|
+
`[INFO] Routing task: ${prompt.substring(0, 80) || '(no prompt)'}`,
|
|
137
|
+
'',
|
|
138
|
+
'+------------------- Primary Recommendation -------------------+',
|
|
139
|
+
`| Agent: ${result.agent.padEnd(53)}|`,
|
|
140
|
+
`| Confidence: ${(result.confidence * 100).toFixed(1)}%${' '.repeat(44)}|`,
|
|
141
|
+
`| Reason: ${(result.reason || '').substring(0, 53).padEnd(53)}|`,
|
|
142
|
+
'+--------------------------------------------------------------+',
|
|
143
|
+
];
|
|
144
|
+
console.log(output.join('\n'));
|
|
145
|
+
} else {
|
|
146
|
+
console.log('[INFO] Router not available, using default routing');
|
|
147
|
+
}
|
|
148
|
+
},
|
|
149
|
+
|
|
150
|
+
'pre-bash': () => {
|
|
151
|
+
// Basic command safety check — prefer stdin command data from Claude Code.
|
|
152
|
+
// String() wrap is belt-and-suspenders for #2017: even if a future regression
|
|
153
|
+
// re-binds `prompt` or `hookInput.command` to a non-string, `.toLowerCase()`
|
|
154
|
+
// can no longer throw a TypeError that the global try/catch would swallow
|
|
155
|
+
// (silently exiting 0 and letting the dangerous command through).
|
|
156
|
+
const cmd = String(hookInput.command || toolInput.command || prompt || '').toLowerCase();
|
|
157
|
+
const dangerous = ['rm -rf /', 'format c:', 'del /s /q c:\\', ':(){:|:&};:'];
|
|
158
|
+
for (const d of dangerous) {
|
|
159
|
+
if (cmd.includes(d)) {
|
|
160
|
+
console.error(`[BLOCKED] Dangerous command detected: ${d}`);
|
|
161
|
+
process.exit(1);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
console.log('[OK] Command validated');
|
|
165
|
+
},
|
|
166
|
+
|
|
167
|
+
'post-edit': () => {
|
|
168
|
+
// Record edit for session metrics
|
|
169
|
+
if (session && session.metric) {
|
|
170
|
+
try { session.metric('edits'); } catch (e) { /* no active session */ }
|
|
171
|
+
}
|
|
172
|
+
// Record edit for intelligence consolidation — prefer stdin data from Claude Code
|
|
173
|
+
if (intelligence && intelligence.recordEdit) {
|
|
174
|
+
try {
|
|
175
|
+
const file = hookInput.file_path || toolInput.file_path
|
|
176
|
+
|| process.env.TOOL_INPUT_file_path || args[0] || '';
|
|
177
|
+
intelligence.recordEdit(file);
|
|
178
|
+
} catch (e) { /* non-fatal */ }
|
|
179
|
+
}
|
|
180
|
+
console.log('[OK] Edit recorded');
|
|
181
|
+
},
|
|
182
|
+
|
|
183
|
+
'session-restore': async () => {
|
|
184
|
+
if (session) {
|
|
185
|
+
// Try restore first, fall back to start
|
|
186
|
+
const existing = session.restore && session.restore();
|
|
187
|
+
if (!existing) {
|
|
188
|
+
session.start && session.start();
|
|
189
|
+
}
|
|
190
|
+
} else {
|
|
191
|
+
// Minimal session restore output
|
|
192
|
+
const sessionId = `session-${Date.now()}`;
|
|
193
|
+
console.log(`[INFO] Restoring session: %SESSION_ID%`);
|
|
194
|
+
console.log('');
|
|
195
|
+
console.log(`[OK] Session restored from %SESSION_ID%`);
|
|
196
|
+
console.log(`New session ID: ${sessionId}`);
|
|
197
|
+
console.log('');
|
|
198
|
+
console.log('Restored State');
|
|
199
|
+
console.log('+----------------+-------+');
|
|
200
|
+
console.log('| Item | Count |');
|
|
201
|
+
console.log('+----------------+-------+');
|
|
202
|
+
console.log('| Tasks | 0 |');
|
|
203
|
+
console.log('| Agents | 0 |');
|
|
204
|
+
console.log('| Memory Entries | 0 |');
|
|
205
|
+
console.log('+----------------+-------+');
|
|
206
|
+
}
|
|
207
|
+
// Initialize intelligence graph after session restore (with timeout — #1530)
|
|
208
|
+
if (intelligence && intelligence.init) {
|
|
209
|
+
const initResult = await runWithTimeout(() => intelligence.init(), 'intelligence.init()');
|
|
210
|
+
if (initResult && initResult.nodes > 0) {
|
|
211
|
+
console.log(`[INTELLIGENCE] Loaded ${initResult.nodes} patterns, ${initResult.edges} edges`);
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
},
|
|
215
|
+
|
|
216
|
+
'session-end': async () => {
|
|
217
|
+
// Consolidate intelligence before ending session (with timeout — #1530)
|
|
218
|
+
if (intelligence && intelligence.consolidate) {
|
|
219
|
+
const consResult = await runWithTimeout(() => intelligence.consolidate(), 'intelligence.consolidate()');
|
|
220
|
+
if (consResult && consResult.entries > 0) {
|
|
221
|
+
console.log(`[INTELLIGENCE] Consolidated: ${consResult.entries} entries, ${consResult.edges} edges${consResult.newEntries > 0 ? `, ${consResult.newEntries} new` : ''}, PageRank recomputed`);
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
if (session && session.end) {
|
|
225
|
+
session.end();
|
|
226
|
+
} else {
|
|
227
|
+
console.log('[OK] Session ended');
|
|
228
|
+
}
|
|
229
|
+
},
|
|
230
|
+
|
|
231
|
+
'pre-task': () => {
|
|
232
|
+
if (session && session.metric) {
|
|
233
|
+
try { session.metric('tasks'); } catch (e) { /* no active session */ }
|
|
234
|
+
}
|
|
235
|
+
// Route the task if router is available
|
|
236
|
+
if (router && router.routeTask && prompt) {
|
|
237
|
+
const result = router.routeTask(prompt);
|
|
238
|
+
console.log(`[INFO] Task routed to: ${result.agent} (confidence: ${result.confidence})`);
|
|
239
|
+
} else {
|
|
240
|
+
console.log('[OK] Task started');
|
|
241
|
+
}
|
|
242
|
+
},
|
|
243
|
+
|
|
244
|
+
'post-task': () => {
|
|
245
|
+
// Implicit success feedback for intelligence
|
|
246
|
+
if (intelligence && intelligence.feedback) {
|
|
247
|
+
try {
|
|
248
|
+
intelligence.feedback(true);
|
|
249
|
+
} catch (e) { /* non-fatal */ }
|
|
250
|
+
}
|
|
251
|
+
console.log('[OK] Task completed');
|
|
252
|
+
},
|
|
253
|
+
|
|
254
|
+
'stats': () => {
|
|
255
|
+
if (intelligence && intelligence.stats) {
|
|
256
|
+
intelligence.stats(args.includes('--json'));
|
|
257
|
+
} else {
|
|
258
|
+
console.log('[WARN] Intelligence module not available. Run session-restore first.');
|
|
259
|
+
}
|
|
260
|
+
},
|
|
261
|
+
};
|
|
262
|
+
|
|
263
|
+
// Execute the handler
|
|
264
|
+
if (command && handlers[command]) {
|
|
265
|
+
try {
|
|
266
|
+
await Promise.resolve(handlers[command]());
|
|
267
|
+
} catch (e) {
|
|
268
|
+
// Hooks should never crash Claude Code - fail silently
|
|
269
|
+
console.log(`[WARN] Hook ${command} encountered an error: ${e.message}`);
|
|
270
|
+
}
|
|
271
|
+
} else if (command) {
|
|
272
|
+
// Unknown command - pass through without error
|
|
273
|
+
console.log(`[OK] Hook: ${command}`);
|
|
274
|
+
} else {
|
|
275
|
+
console.log('Usage: hook-handler.cjs <route|pre-bash|post-edit|session-restore|session-end|pre-task|post-task|stats>');
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
// Hooks must ALWAYS exit 0 — Claude Code treats non-zero as "hook error"
|
|
280
|
+
// and skips all subsequent hooks for the event.
|
|
281
|
+
process.exitCode = 0;
|
|
282
|
+
main().catch((e) => {
|
|
283
|
+
try { console.log(`[WARN] Hook handler error: ${e.message}`); } catch (_) {}
|
|
284
|
+
}).finally(() => {
|
|
285
|
+
process.exit(0);
|
|
286
|
+
});
|