monomind 1.8.0 → 1.9.1
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/design/design-monodesign.md +121 -0
- package/.claude/agents/github/issue-tracker.md +12 -12
- package/.claude/agents/github/pr-manager.md +10 -10
- package/.claude/agents/github/release-manager.md +49 -105
- package/.claude/agents/github/repo-architect.md +73 -92
- package/.claude/agents/github/sync-coordinator.md +55 -123
- package/.claude/agents/marketing/marketing-competitive-content.md +155 -0
- package/.claude/agents/marketing/marketing-content-creator.md +13 -0
- package/.claude/agents/marketing/marketing-cro-specialist.md +147 -0
- package/.claude/agents/marketing/marketing-email-specialist.md +90 -0
- package/.claude/agents/marketing/marketing-launch-strategist.md +129 -0
- package/.claude/agents/marketing/marketing-pricing-strategist.md +127 -0
- package/.claude/agents/specialists/integration-architect.md +94 -0
- package/.claude/commands/agents/README.md +4 -0
- package/.claude/commands/agents/agent-capabilities.md +6 -2
- package/.claude/commands/agents/agent-coordination.md +4 -0
- package/.claude/commands/agents/agent-spawning.md +4 -0
- package/.claude/commands/agents/agent-types.md +6 -2
- package/.claude/commands/analysis/README.md +14 -5
- package/.claude/commands/analysis/bottleneck-detect.md +30 -123
- package/.claude/commands/analysis/performance-bottlenecks.md +14 -14
- package/.claude/commands/analysis/performance-report.md +38 -11
- package/.claude/commands/analysis/token-efficiency.md +13 -16
- package/.claude/commands/analysis/token-usage.md +34 -12
- package/.claude/commands/automation/README.md +15 -5
- package/.claude/commands/automation/auto-agent.md +49 -85
- package/.claude/commands/automation/self-healing.md +20 -18
- package/.claude/commands/automation/session-memory.md +28 -29
- package/.claude/commands/automation/smart-agents.md +17 -9
- package/.claude/commands/automation/smart-spawn.md +52 -11
- package/.claude/commands/automation/workflow-select.md +46 -11
- package/.claude/commands/browse.md +5 -0
- package/.claude/commands/coordination/README.md +9 -5
- package/.claude/commands/coordination/agent-spawn.md +53 -9
- package/.claude/commands/coordination/swarm-init.md +39 -42
- package/.claude/commands/coordination/task-orchestrate.md +65 -11
- package/.claude/commands/github/README.md +21 -8
- package/.claude/commands/github/github-modes.md +9 -5
- package/.claude/commands/github/issue-tracker.md +34 -33
- package/.claude/commands/github/pr-manager.md +20 -17
- package/.claude/commands/github/release-manager.md +37 -49
- package/.claude/commands/github/repo-architect.md +39 -41
- package/.claude/commands/github/sync-coordinator.md +45 -49
- package/.claude/commands/hive-mind/README.md +42 -17
- package/.claude/commands/hive-mind/hive-mind-consensus.md +68 -4
- package/.claude/commands/hive-mind/hive-mind-init.md +55 -5
- package/.claude/commands/hive-mind/hive-mind-memory.md +69 -4
- package/.claude/commands/hive-mind/hive-mind-spawn.md +71 -10
- package/.claude/commands/hive-mind/hive-mind-status.md +52 -4
- package/.claude/commands/hive-mind/hive-mind-stop.md +51 -4
- package/.claude/commands/hive-mind/hive-mind.md +74 -14
- package/.claude/commands/hooks/README.md +62 -7
- package/.claude/commands/hooks/overview.md +94 -35
- package/.claude/commands/hooks/post-edit.md +48 -87
- package/.claude/commands/hooks/post-task.md +37 -87
- package/.claude/commands/hooks/pre-edit.md +52 -84
- package/.claude/commands/hooks/pre-task.md +46 -81
- package/.claude/commands/hooks/session-end.md +49 -85
- package/.claude/commands/hooks/setup.md +87 -58
- package/.claude/commands/mastermind/_repeat.md +308 -0
- package/.claude/commands/mastermind/architect.md +49 -0
- package/.claude/commands/mastermind/brain.md +98 -0
- package/.claude/commands/mastermind/build.md +22 -0
- package/.claude/commands/mastermind/content.md +22 -0
- package/.claude/commands/mastermind/createorg.md +94 -0
- package/.claude/commands/mastermind/finance.md +22 -0
- package/.claude/commands/mastermind/idea.md +22 -0
- package/.claude/commands/mastermind/marketing.md +22 -0
- package/.claude/commands/mastermind/master.md +379 -0
- package/.claude/commands/mastermind/ops.md +22 -0
- package/.claude/commands/mastermind/release.md +22 -0
- package/.claude/commands/mastermind/research.md +22 -0
- package/.claude/commands/mastermind/review.md +22 -0
- package/.claude/commands/mastermind/runorg.md +106 -0
- package/.claude/commands/mastermind/sales.md +22 -0
- package/.claude/commands/mastermind/techport.md +17 -0
- package/.claude/commands/memory/README.md +75 -5
- package/.claude/commands/memory/memory-search.md +63 -11
- package/.claude/commands/monitoring/README.md +64 -4
- package/.claude/commands/monitoring/agent-metrics.md +50 -10
- package/.claude/commands/monitoring/agents.md +59 -32
- package/.claude/commands/monitoring/status.md +96 -34
- package/.claude/commands/monograph/README.md +102 -0
- package/.claude/commands/monograph/monograph-build.md +79 -0
- package/.claude/commands/monograph/monograph-search.md +96 -0
- package/.claude/commands/monograph/monograph-stats.md +53 -0
- package/.claude/commands/monograph/monograph-watch.md +63 -0
- package/.claude/commands/monograph/monograph-wiki.md +91 -0
- package/.claude/commands/monomind/createtask.md +277 -0
- package/.claude/commands/{monomind-do.md → monomind/do.md} +21 -8
- package/.claude/commands/monomind/help.md +118 -0
- package/.claude/commands/{monomind-idea.md → monomind/idea.md} +22 -28
- package/.claude/commands/{monomind-improve.md → monomind/improve.md} +21 -27
- package/.claude/commands/monomind/memory.md +230 -0
- package/.claude/commands/monomind/repeat.md +201 -0
- package/.claude/commands/monomind/review.md +313 -0
- package/.claude/commands/monomind/specialagents.md +125 -0
- package/.claude/commands/monomind/swarm.md +161 -0
- package/.claude/commands/monomind/understand.md +148 -0
- package/.claude/commands/optimization/README.md +69 -5
- package/.claude/commands/optimization/auto-topology.md +66 -43
- package/.claude/commands/optimization/parallel-execution.md +65 -39
- package/.claude/commands/optimization/performance-optimize.md +79 -0
- package/.claude/commands/pair/README.md +48 -230
- package/.claude/commands/pair/examples.md +85 -441
- package/.claude/commands/pair/modes.md +77 -303
- package/.claude/commands/pair/session.md +76 -359
- package/.claude/commands/sparc/analyzer.md +9 -26
- package/.claude/commands/sparc/architect.md +8 -25
- package/.claude/commands/sparc/ask.md +27 -68
- package/.claude/commands/sparc/batch-executor.md +8 -25
- package/.claude/commands/sparc/code.md +12 -53
- package/.claude/commands/sparc/coder.md +8 -25
- package/.claude/commands/sparc/debug.md +12 -53
- package/.claude/commands/sparc/debugger.md +8 -25
- package/.claude/commands/sparc/designer.md +8 -25
- package/.claude/commands/sparc/devops.md +16 -57
- package/.claude/commands/sparc/docs-writer.md +12 -53
- package/.claude/commands/sparc/documenter.md +8 -25
- package/.claude/commands/sparc/innovator.md +8 -25
- package/.claude/commands/sparc/integration.md +12 -53
- package/.claude/commands/sparc/mcp.md +12 -53
- package/.claude/commands/sparc/memory-manager.md +28 -25
- package/.claude/commands/sparc/optimizer.md +8 -25
- package/.claude/commands/sparc/orchestrator.md +35 -97
- package/.claude/commands/sparc/post-deployment-monitoring-mode.md +13 -54
- package/.claude/commands/sparc/refinement-optimization-mode.md +13 -54
- package/.claude/commands/sparc/researcher.md +8 -25
- package/.claude/commands/sparc/reviewer.md +8 -25
- package/.claude/commands/sparc/security-review.md +13 -54
- package/.claude/commands/sparc/sparc-modes.md +97 -151
- package/.claude/commands/sparc/sparc.md +16 -56
- package/.claude/commands/sparc/spec-pseudocode.md +13 -54
- package/.claude/commands/sparc/supabase-admin.md +19 -66
- package/.claude/commands/sparc/swarm-coordinator.md +21 -25
- package/.claude/commands/sparc/tdd.md +8 -25
- package/.claude/commands/sparc/tester.md +8 -25
- package/.claude/commands/sparc/tutorial.md +12 -53
- package/.claude/commands/sparc/workflow-manager.md +8 -25
- package/.claude/commands/sparc.md +76 -130
- package/.claude/commands/stream-chain/pipeline.md +72 -77
- package/.claude/commands/stream-chain/run.md +133 -47
- package/.claude/commands/swarm/README.md +37 -12
- package/.claude/commands/swarm/analysis.md +47 -69
- package/.claude/commands/swarm/development.md +45 -69
- package/.claude/commands/swarm/examples.md +77 -142
- package/.claude/commands/swarm/maintenance.md +47 -74
- package/.claude/commands/swarm/optimization.md +54 -87
- package/.claude/commands/swarm/research.md +47 -107
- package/.claude/commands/swarm/swarm-analysis.md +58 -4
- package/.claude/commands/swarm/swarm-background.md +61 -4
- package/.claude/commands/swarm/swarm-modes.md +63 -4
- package/.claude/commands/swarm/swarm-monitor.md +50 -4
- package/.claude/commands/swarm/swarm-status.md +40 -4
- package/.claude/commands/swarm/swarm-strategies.md +73 -5
- package/.claude/commands/swarm/swarm.md +70 -18
- package/.claude/commands/swarm/testing.md +51 -102
- package/.claude/commands/tokens.md +6 -1
- package/.claude/commands/training/README.md +36 -6
- package/.claude/commands/training/model-update.md +68 -15
- package/.claude/commands/training/neural-patterns.md +54 -55
- package/.claude/commands/training/neural-train.md +70 -16
- package/.claude/commands/training/pattern-learn.md +60 -16
- package/.claude/commands/training/specialization.md +78 -49
- package/.claude/commands/truth/start.md +87 -109
- package/.claude/commands/ts.md +7 -2
- package/.claude/commands/verify/check.md +90 -34
- package/.claude/commands/verify/start.md +71 -94
- package/.claude/commands/workflows/README.md +62 -6
- package/.claude/commands/workflows/development.md +69 -61
- package/.claude/commands/workflows/research.md +73 -47
- package/.claude/commands/workflows/workflow-create.md +75 -16
- package/.claude/commands/workflows/workflow-execute.md +94 -16
- package/.claude/commands/workflows/workflow-export.md +81 -16
- package/.claude/helpers/control-start.cjs +91 -0
- package/.claude/helpers/extras-registry.json +4104 -1991
- package/.claude/helpers/graphify-freshen.cjs +44 -13
- package/.claude/helpers/hook-handler.cjs +256 -1
- package/.claude/helpers/learning-service.mjs +0 -0
- package/.claude/helpers/loop-tracker.cjs +107 -0
- package/.claude/helpers/metrics-db.mjs +0 -0
- package/.claude/helpers/router.cjs +48 -68
- package/.claude/helpers/skill-registry.json +89 -104
- package/.claude/helpers/statusline.cjs +33 -2
- package/.claude/helpers/swarm-hooks.sh +0 -0
- package/.claude/scheduled_tasks.lock +1 -0
- package/.claude/settings.json +15 -0
- package/.claude/skills/.monomind/data/ranked-context.json +5 -0
- package/.claude/skills/.monomind/sessions/current.json +13 -0
- package/.claude/skills/.monomind/sessions/session-1777829336455.json +15 -0
- package/.claude/skills/.monomind/sessions/session-1777831614725.json +15 -0
- package/.claude/skills/.monomind/sessions/session-1777832095857.json +15 -0
- package/.claude/skills/.monomind/sessions/session-1777839814183.json +15 -0
- package/.claude/skills/.monomind/sessions/session-1777841847131.json +15 -0
- package/.claude/skills/.monomind/sessions/session-1777843309463.json +15 -0
- package/.claude/skills/.monomind/sessions/session-1777880867159.json +15 -0
- package/.claude/skills/.monomind/sessions/session-1777881884593.json +15 -0
- package/.claude/skills/.monomind/sessions/session-1777884090471.json +15 -0
- package/.claude/skills/.monomind/sessions/session-1777884808221.json +15 -0
- package/.claude/skills/.monomind/sessions/session-1777885672155.json +15 -0
- package/.claude/skills/.monomind/sessions/session-1777886852818.json +15 -0
- package/.claude/skills/.monomind/sessions/session-1777896532690.json +15 -0
- package/.claude/skills/agentdb-advanced/SKILL.md +11 -12
- package/.claude/skills/agentdb-learning/SKILL.md +20 -21
- package/.claude/skills/agentdb-memory-patterns/SKILL.md +28 -30
- package/.claude/skills/agentdb-optimization/SKILL.md +11 -12
- package/.claude/skills/agentdb-vector-search/SKILL.md +37 -41
- package/.claude/skills/{v3-integration-deep → agentic-integration}/SKILL.md +20 -13
- package/.claude/skills/agentic-jujutsu/SKILL.md +22 -22
- package/.claude/skills/{v3-cli-modernization → cli-modernization}/SKILL.md +17 -8
- package/.claude/skills/{v3-core-implementation → core-implementation}/SKILL.md +33 -8
- package/.claude/skills/{v3-ddd-architecture → ddd-architecture}/SKILL.md +18 -25
- package/.claude/skills/github-code-review/SKILL.md +82 -83
- package/.claude/skills/github-multi-repo/SKILL.md +42 -46
- package/.claude/skills/github-project-management/SKILL.md +83 -88
- package/.claude/skills/github-release-management/SKILL.md +12 -18
- package/.claude/skills/github-workflow-automation/SKILL.md +70 -74
- package/.claude/skills/hooks-automation/SKILL.md +9 -13
- package/.claude/skills/mastermind/_intake.md +83 -0
- package/.claude/skills/mastermind/_protocol.md +275 -0
- package/.claude/skills/mastermind/architect.md +847 -0
- package/.claude/skills/mastermind/build.md +158 -0
- package/.claude/skills/mastermind/content.md +185 -0
- package/.claude/skills/mastermind/createorg.md +318 -0
- package/.claude/skills/mastermind/finance.md +154 -0
- package/.claude/skills/mastermind/idea.md +158 -0
- package/.claude/skills/mastermind/marketing.md +216 -0
- package/.claude/skills/mastermind/monotask.md +350 -0
- package/.claude/skills/mastermind/ops.md +156 -0
- package/.claude/skills/mastermind/references/copywriting-frameworks.md +181 -0
- package/.claude/skills/mastermind/references/persuasion-psychology.md +158 -0
- package/.claude/skills/mastermind/release.md +156 -0
- package/.claude/skills/mastermind/research.md +156 -0
- package/.claude/skills/mastermind/review.md +157 -0
- package/.claude/skills/mastermind/runorg.md +308 -0
- package/.claude/skills/mastermind/sales.md +158 -0
- package/.claude/skills/mastermind/techport.md +743 -0
- package/.claude/skills/{v3-mcp-optimization → mcp-optimization}/SKILL.md +35 -14
- package/.claude/skills/{v3-memory-unification → memory-unification}/SKILL.md +20 -4
- package/.claude/skills/monodesign/SKILL.md +302 -0
- package/.claude/skills/monodesign/reference/adapt.md +190 -0
- package/.claude/skills/monodesign/reference/animate.md +175 -0
- package/.claude/skills/monodesign/reference/antipatterns-catalog.md +187 -0
- package/.claude/skills/monodesign/reference/audit.md +133 -0
- package/.claude/skills/monodesign/reference/bolder.md +113 -0
- package/.claude/skills/monodesign/reference/brand-workflow.md +180 -0
- package/.claude/skills/monodesign/reference/brand.md +114 -0
- package/.claude/skills/monodesign/reference/clarify.md +174 -0
- package/.claude/skills/monodesign/reference/cognitive-load.md +106 -0
- package/.claude/skills/monodesign/reference/color-and-contrast.md +105 -0
- package/.claude/skills/monodesign/reference/colorize.md +154 -0
- package/.claude/skills/monodesign/reference/component-specs.md +260 -0
- package/.claude/skills/monodesign/reference/component-states.md +274 -0
- package/.claude/skills/monodesign/reference/component-system.md +358 -0
- package/.claude/skills/monodesign/reference/copy-formulas.md +160 -0
- package/.claude/skills/monodesign/reference/craft.md +193 -0
- package/.claude/skills/monodesign/reference/critique.md +213 -0
- package/.claude/skills/monodesign/reference/delight.md +302 -0
- package/.claude/skills/monodesign/reference/design-principles.md +246 -0
- package/.claude/skills/monodesign/reference/distill.md +111 -0
- package/.claude/skills/monodesign/reference/document.md +427 -0
- package/.claude/skills/monodesign/reference/extract.md +69 -0
- package/.claude/skills/monodesign/reference/harden.md +347 -0
- package/.claude/skills/monodesign/reference/heuristics-scoring.md +234 -0
- package/.claude/skills/monodesign/reference/image-prompts.md +118 -0
- package/.claude/skills/monodesign/reference/interaction-design.md +195 -0
- package/.claude/skills/monodesign/reference/layout.md +141 -0
- package/.claude/skills/monodesign/reference/live.md +622 -0
- package/.claude/skills/monodesign/reference/motion-design.md +109 -0
- package/.claude/skills/monodesign/reference/onboard.md +234 -0
- package/.claude/skills/monodesign/reference/optimize.md +258 -0
- package/.claude/skills/monodesign/reference/overdrive.md +130 -0
- package/.claude/skills/monodesign/reference/personas.md +179 -0
- package/.claude/skills/monodesign/reference/polish.md +233 -0
- package/.claude/skills/monodesign/reference/pre-delivery-checklist.md +108 -0
- package/.claude/skills/monodesign/reference/product.md +62 -0
- package/.claude/skills/monodesign/reference/quieter.md +99 -0
- package/.claude/skills/monodesign/reference/responsive-design.md +114 -0
- package/.claude/skills/monodesign/reference/shape.md +151 -0
- package/.claude/skills/monodesign/reference/spatial-design.md +100 -0
- package/.claude/skills/monodesign/reference/teach.md +156 -0
- package/.claude/skills/monodesign/reference/token-architecture.md +222 -0
- package/.claude/skills/monodesign/reference/typeset.md +124 -0
- package/.claude/skills/monodesign/reference/typography.md +159 -0
- package/.claude/skills/monodesign/reference/ux-research.md +143 -0
- package/.claude/skills/monodesign/reference/ux-rules.md +211 -0
- package/.claude/skills/monodesign/reference/ux-writing.md +107 -0
- package/.claude/skills/monomotion/SKILL.md +145 -0
- package/.claude/skills/monomotion/rules/api-control.md +139 -0
- package/.claude/skills/monomotion/rules/effects.md +109 -0
- package/.claude/skills/monomotion/rules/integration.md +140 -0
- package/.claude/skills/monomotion/rules/scroll.md +131 -0
- package/.claude/skills/monomotion/rules/sequencing.md +105 -0
- package/.claude/skills/monomotion/rules/svg.md +101 -0
- package/.claude/skills/monomotion/rules/text.md +119 -0
- package/.claude/skills/pair-programming/SKILL.md +1 -1
- package/.claude/skills/performance-analysis/SKILL.md +3 -3
- package/.claude/skills/{v3-performance-optimization → performance-optimization}/SKILL.md +16 -8
- package/.claude/skills/reasoningbank-agentdb/SKILL.md +17 -19
- package/.claude/skills/reasoningbank-intelligence/SKILL.md +4 -6
- package/.claude/skills/{v3-security-overhaul → security-hardening}/SKILL.md +13 -3
- package/.claude/skills/skill-builder/SKILL.md +19 -19
- package/.claude/skills/sparc-methodology/SKILL.md +55 -211
- package/.claude/skills/stop-slop/SKILL.md +67 -0
- package/.claude/skills/stop-slop/references/examples.md +61 -0
- package/.claude/skills/stop-slop/references/phrases.md +130 -0
- package/.claude/skills/stop-slop/references/structures.md +136 -0
- package/.claude/skills/swarm-advanced/SKILL.md +13 -43
- package/.claude/skills/{v3-swarm-coordination → swarm-coordination}/SKILL.md +39 -21
- package/.claude/skills/swarm-orchestration/SKILL.md +12 -12
- package/.claude/skills/verification-quality/SKILL.md +5 -5
- package/.claude/statusline-command.sh +0 -0
- package/.claude/statusline.sh +0 -0
- package/.claude-plugin/scripts/install.sh +0 -0
- package/.claude-plugin/scripts/uninstall.sh +0 -0
- package/.claude-plugin/scripts/verify.sh +0 -0
- package/README.md +5 -5
- package/package.json +17 -17
- package/packages/@monomind/cli/README.md +441 -0
- package/packages/@monomind/cli/bin/cli.js +78 -13
- package/packages/@monomind/cli/bin/mcp-server.js +0 -0
- package/packages/@monomind/cli/dist/src/agents/halt-signal.js +33 -7
- package/packages/@monomind/cli/dist/src/agents/managed-agent.js +5 -2
- package/packages/@monomind/cli/dist/src/agents/prompt-experiment.d.ts +3 -2
- package/packages/@monomind/cli/dist/src/agents/prompt-experiment.js +1 -1
- package/packages/@monomind/cli/dist/src/agents/prompt-version-manager.d.ts +5 -2
- package/packages/@monomind/cli/dist/src/agents/prompt-version-manager.js +26 -4
- package/packages/@monomind/cli/dist/src/agents/specialization-scorer.js +17 -9
- package/packages/@monomind/cli/dist/src/agents/trigger-scanner.d.ts +5 -3
- package/packages/@monomind/cli/dist/src/agents/trigger-scanner.js +58 -10
- package/packages/@monomind/cli/dist/src/agents/version-store.d.ts +0 -1
- package/packages/@monomind/cli/dist/src/agents/version-store.js +44 -21
- package/packages/@monomind/cli/dist/src/autopilot-state.js +79 -28
- package/packages/@monomind/cli/dist/src/benchmarks/benchmark-runner.d.ts +7 -2
- package/packages/@monomind/cli/dist/src/benchmarks/benchmark-runner.js +20 -8
- package/packages/@monomind/cli/dist/src/benchmarks/metric-evaluators.d.ts +2 -1
- package/packages/@monomind/cli/dist/src/benchmarks/metric-evaluators.js +25 -2
- package/packages/@monomind/cli/dist/src/commands/agent.js +6 -4
- package/packages/@monomind/cli/dist/src/commands/appliance-advanced.js +23 -0
- package/packages/@monomind/cli/dist/src/commands/autopilot.js +3 -3
- package/packages/@monomind/cli/dist/src/commands/benchmark.js +119 -8
- package/packages/@monomind/cli/dist/src/commands/claims.js +22 -14
- package/packages/@monomind/cli/dist/src/commands/config.js +32 -0
- package/packages/@monomind/cli/dist/src/commands/daemon.js +13 -11
- package/packages/@monomind/cli/dist/src/commands/deployment.js +21 -2
- package/packages/@monomind/cli/dist/src/commands/doctor.js +5 -4
- package/packages/@monomind/cli/dist/src/commands/embeddings.js +124 -48
- package/packages/@monomind/cli/dist/src/commands/hive-mind.js +15 -14
- package/packages/@monomind/cli/dist/src/commands/hooks.js +45 -41
- package/packages/@monomind/cli/dist/src/commands/index.d.ts +2 -0
- package/packages/@monomind/cli/dist/src/commands/index.js +20 -7
- package/packages/@monomind/cli/dist/src/commands/init.js +53 -19
- package/packages/@monomind/cli/dist/src/commands/mcp.js +31 -44
- package/packages/@monomind/cli/dist/src/commands/memory.js +47 -15
- package/packages/@monomind/cli/dist/src/commands/migrate.js +156 -108
- package/packages/@monomind/cli/dist/src/commands/monograph.d.ts +8 -0
- package/packages/@monomind/cli/dist/src/commands/monograph.js +526 -0
- package/packages/@monomind/cli/dist/src/commands/neural.js +96 -56
- package/packages/@monomind/cli/dist/src/commands/performance.js +30 -8
- package/packages/@monomind/cli/dist/src/commands/plugins.js +13 -37
- package/packages/@monomind/cli/dist/src/commands/process.js +25 -2
- package/packages/@monomind/cli/dist/src/commands/providers.js +37 -5
- package/packages/@monomind/cli/dist/src/commands/replay.js +4 -4
- package/packages/@monomind/cli/dist/src/commands/route.js +37 -5
- package/packages/@monomind/cli/dist/src/commands/ruvector/import.js +12 -2
- package/packages/@monomind/cli/dist/src/commands/ruvector/init.js +15 -0
- package/packages/@monomind/cli/dist/src/commands/ruvector/status.js +16 -3
- package/packages/@monomind/cli/dist/src/commands/security.js +342 -193
- package/packages/@monomind/cli/dist/src/commands/session.js +51 -8
- package/packages/@monomind/cli/dist/src/commands/start.js +18 -4
- package/packages/@monomind/cli/dist/src/commands/swarm.js +47 -36
- package/packages/@monomind/cli/dist/src/commands/tokens.js +11 -11
- package/packages/@monomind/cli/dist/src/commands/transfer-store.js +1 -1
- package/packages/@monomind/cli/dist/src/commands/workflow.js +31 -4
- package/packages/@monomind/cli/dist/src/config-adapter.d.ts +2 -1
- package/packages/@monomind/cli/dist/src/consensus/audit-writer.js +46 -13
- package/packages/@monomind/cli/dist/src/consensus/vote-signer.d.ts +0 -3
- package/packages/@monomind/cli/dist/src/consensus/vote-signer.js +9 -1
- package/packages/@monomind/cli/dist/src/dlq/dlq-reader.d.ts +4 -2
- package/packages/@monomind/cli/dist/src/dlq/dlq-reader.js +25 -8
- package/packages/@monomind/cli/dist/src/dlq/dlq-replayer.d.ts +10 -3
- package/packages/@monomind/cli/dist/src/dlq/dlq-replayer.js +50 -16
- package/packages/@monomind/cli/dist/src/dlq/dlq-writer.js +27 -5
- package/packages/@monomind/cli/dist/src/eval/dataset-manager.d.ts +2 -2
- package/packages/@monomind/cli/dist/src/eval/dataset-manager.js +26 -16
- package/packages/@monomind/cli/dist/src/eval/trace-collector.js +23 -3
- package/packages/@monomind/cli/dist/src/index.js +12 -10
- package/packages/@monomind/cli/dist/src/init/claudemd-generator.js +8 -8
- package/packages/@monomind/cli/dist/src/init/executor.js +212 -102
- package/packages/@monomind/cli/dist/src/init/helpers-generator.js +35 -22
- package/packages/@monomind/cli/dist/src/init/mcp-generator.js +3 -3
- package/packages/@monomind/cli/dist/src/init/settings-generator.js +10 -3
- package/packages/@monomind/cli/dist/src/init/shared-instructions-generator.js +18 -3
- package/packages/@monomind/cli/dist/src/init/statusline-generator.js +3 -1
- package/packages/@monomind/cli/dist/src/init/types.d.ts +35 -11
- package/packages/@monomind/cli/dist/src/init/types.js +5 -9
- package/packages/@monomind/cli/dist/src/interactive/interrupt.js +8 -3
- package/packages/@monomind/cli/dist/src/mcp/tool-registry.js +38 -4
- package/packages/@monomind/cli/dist/src/mcp-client.js +10 -4
- package/packages/@monomind/cli/dist/src/mcp-server.d.ts +9 -2
- package/packages/@monomind/cli/dist/src/mcp-server.js +182 -35
- package/packages/@monomind/cli/dist/src/mcp-tools/agent-tools.js +66 -34
- package/packages/@monomind/cli/dist/src/mcp-tools/agentdb-tools.js +34 -7
- package/packages/@monomind/cli/dist/src/mcp-tools/analyze-tools.js +25 -16
- package/packages/@monomind/cli/dist/src/mcp-tools/auto-install.js +4 -6
- package/packages/@monomind/cli/dist/src/mcp-tools/autopilot-tools.js +12 -2
- package/packages/@monomind/cli/dist/src/mcp-tools/browser-tools.js +199 -20
- package/packages/@monomind/cli/dist/src/mcp-tools/claims-tools.js +68 -18
- package/packages/@monomind/cli/dist/src/mcp-tools/config-tools.js +33 -5
- package/packages/@monomind/cli/dist/src/mcp-tools/coordination-tools.js +59 -4
- package/packages/@monomind/cli/dist/src/mcp-tools/daa-tools.js +46 -10
- package/packages/@monomind/cli/dist/src/mcp-tools/embeddings-tools.js +46 -5
- package/packages/@monomind/cli/dist/src/mcp-tools/github-tools.js +29 -16
- package/packages/@monomind/cli/dist/src/mcp-tools/guidance-tools.js +38 -10
- package/packages/@monomind/cli/dist/src/mcp-tools/hive-mind-tools.js +96 -33
- package/packages/@monomind/cli/dist/src/mcp-tools/hooks-tools.js +70 -37
- package/packages/@monomind/cli/dist/src/mcp-tools/memory-tools.js +29 -13
- package/packages/@monomind/cli/dist/src/mcp-tools/monograph-tools.js +5867 -56
- package/packages/@monomind/cli/dist/src/mcp-tools/neural-tools.js +121 -37
- package/packages/@monomind/cli/dist/src/mcp-tools/performance-tools.js +21 -8
- package/packages/@monomind/cli/dist/src/mcp-tools/progress-tools.js +10 -8
- package/packages/@monomind/cli/dist/src/mcp-tools/request-tracker.js +4 -1
- package/packages/@monomind/cli/dist/src/mcp-tools/ruvllm-tools.js +19 -8
- package/packages/@monomind/cli/dist/src/mcp-tools/session-tools.js +57 -17
- package/packages/@monomind/cli/dist/src/mcp-tools/swarm-tools.js +35 -17
- package/packages/@monomind/cli/dist/src/mcp-tools/system-tools.js +4 -3
- package/packages/@monomind/cli/dist/src/mcp-tools/task-tools.js +53 -13
- package/packages/@monomind/cli/dist/src/mcp-tools/terminal-tools.js +63 -14
- package/packages/@monomind/cli/dist/src/mcp-tools/transfer-tools.js +21 -16
- package/packages/@monomind/cli/dist/src/mcp-tools/workflow-tools.js +92 -23
- package/packages/@monomind/cli/dist/src/memory/ewc-consolidation.js +41 -10
- package/packages/@monomind/cli/dist/src/memory/intelligence.d.ts +2 -2
- package/packages/@monomind/cli/dist/src/memory/intelligence.js +39 -13
- package/packages/@monomind/cli/dist/src/memory/memory-bridge.d.ts +1 -0
- package/packages/@monomind/cli/dist/src/memory/memory-bridge.js +149 -56
- package/packages/@monomind/cli/dist/src/memory/memory-initializer.js +107 -45
- package/packages/@monomind/cli/dist/src/memory/sona-optimizer.d.ts +8 -1
- package/packages/@monomind/cli/dist/src/memory/sona-optimizer.js +25 -8
- package/packages/@monomind/cli/dist/src/observability/replay-reader.d.ts +40 -0
- package/packages/@monomind/cli/dist/src/observability/replay-reader.js +138 -0
- package/packages/@monomind/cli/dist/src/orchestration/routing-modes.js +35 -5
- package/packages/@monomind/cli/dist/src/parser.d.ts +8 -0
- package/packages/@monomind/cli/dist/src/parser.js +48 -14
- package/packages/@monomind/cli/dist/src/plugins/manager.js +112 -19
- package/packages/@monomind/cli/dist/src/plugins/store/discovery.d.ts +1 -1
- package/packages/@monomind/cli/dist/src/plugins/store/discovery.js +80 -62
- package/packages/@monomind/cli/dist/src/production/circuit-breaker.js +8 -1
- package/packages/@monomind/cli/dist/src/production/error-handler.d.ts +4 -2
- package/packages/@monomind/cli/dist/src/production/error-handler.js +27 -5
- package/packages/@monomind/cli/dist/src/production/monitoring.js +8 -4
- package/packages/@monomind/cli/dist/src/production/rate-limiter.js +30 -22
- package/packages/@monomind/cli/dist/src/ruvector/agent-wasm.js +2 -2
- package/packages/@monomind/cli/dist/src/ruvector/coverage-router.js +19 -9
- package/packages/@monomind/cli/dist/src/ruvector/diff-classifier.d.ts +1 -0
- package/packages/@monomind/cli/dist/src/ruvector/diff-classifier.js +26 -6
- package/packages/@monomind/cli/dist/src/ruvector/enhanced-model-router.js +24 -2
- package/packages/@monomind/cli/dist/src/ruvector/index.d.ts +1 -2
- package/packages/@monomind/cli/dist/src/ruvector/index.js +2 -2
- package/packages/@monomind/cli/dist/src/ruvector/model-router.d.ts +4 -2
- package/packages/@monomind/cli/dist/src/ruvector/model-router.js +30 -6
- package/packages/@monomind/cli/dist/src/ruvector/moe-router.d.ts +7 -0
- package/packages/@monomind/cli/dist/src/ruvector/moe-router.js +35 -12
- package/packages/@monomind/cli/dist/src/ruvector/q-learning-router.d.ts +7 -1
- package/packages/@monomind/cli/dist/src/ruvector/q-learning-router.js +40 -9
- package/packages/@monomind/cli/dist/src/services/claim-service.d.ts +3 -1
- package/packages/@monomind/cli/dist/src/services/claim-service.js +33 -2
- package/packages/@monomind/cli/dist/src/services/config-file-manager.d.ts +16 -2
- package/packages/@monomind/cli/dist/src/services/config-file-manager.js +105 -17
- package/packages/@monomind/cli/dist/src/services/container-worker-pool.js +51 -11
- package/packages/@monomind/cli/dist/src/services/headless-worker-executor.d.ts +7 -0
- package/packages/@monomind/cli/dist/src/services/headless-worker-executor.js +188 -45
- package/packages/@monomind/cli/dist/src/services/registry-api.js +62 -9
- package/packages/@monomind/cli/dist/src/services/ruvector-training.js +8 -0
- package/packages/@monomind/cli/dist/src/services/worker-daemon.d.ts +4 -1
- package/packages/@monomind/cli/dist/src/services/worker-daemon.js +112 -28
- package/packages/@monomind/cli/dist/src/services/worker-queue.d.ts +9 -2
- package/packages/@monomind/cli/dist/src/services/worker-queue.js +86 -5
- package/packages/@monomind/cli/dist/src/suggest.js +9 -0
- package/packages/@monomind/cli/dist/src/swarm/flow-enforcer.d.ts +5 -3
- package/packages/@monomind/cli/dist/src/swarm/flow-enforcer.js +17 -5
- package/packages/@monomind/cli/dist/src/swarm/flow-visualizer.d.ts +3 -0
- package/packages/@monomind/cli/dist/src/swarm/flow-visualizer.js +30 -6
- package/packages/@monomind/cli/dist/src/transfer/anonymization/index.js +5 -3
- package/packages/@monomind/cli/dist/src/transfer/export.js +5 -3
- package/packages/@monomind/cli/dist/src/transfer/ipfs/client.js +84 -7
- package/packages/@monomind/cli/dist/src/transfer/ipfs/upload.js +13 -4
- package/packages/@monomind/cli/dist/src/transfer/storage/gcs.js +19 -10
- package/packages/@monomind/cli/dist/src/transfer/store/discovery.d.ts +9 -2
- package/packages/@monomind/cli/dist/src/transfer/store/discovery.js +68 -13
- package/packages/@monomind/cli/dist/src/transfer/store/download.d.ts +15 -6
- package/packages/@monomind/cli/dist/src/transfer/store/download.js +113 -24
- package/packages/@monomind/cli/dist/src/transfer/store/publish.d.ts +1 -1
- package/packages/@monomind/cli/dist/src/transfer/store/publish.js +13 -14
- package/packages/@monomind/cli/dist/src/transfer/store/registry.d.ts +3 -3
- package/packages/@monomind/cli/dist/src/transfer/store/registry.js +32 -16
- package/packages/@monomind/cli/dist/src/update/checker.js +17 -4
- package/packages/@monomind/cli/dist/src/update/executor.js +25 -20
- package/packages/@monomind/cli/dist/src/update/rate-limiter.d.ts +11 -0
- package/packages/@monomind/cli/dist/src/update/rate-limiter.js +23 -3
- package/packages/@monomind/cli/dist/src/utils/parse-jsonl.d.ts +6 -0
- package/packages/@monomind/cli/dist/src/utils/parse-jsonl.js +22 -0
- package/packages/@monomind/cli/dist/src/workflow/condition-evaluator.js +37 -3
- package/packages/@monomind/cli/dist/src/workflow/dag-builder.js +27 -11
- package/packages/@monomind/cli/dist/src/workflow/dag-executor.js +51 -13
- package/packages/@monomind/cli/dist/src/workflow/dsl-schema.d.ts +3 -0
- package/packages/@monomind/cli/dist/src/workflow/dsl-schema.js +6 -2
- package/packages/@monomind/cli/dist/src/workflow/template-engine.js +7 -0
- package/packages/@monomind/cli/dist/src/workflow/workflow-executor.js +95 -14
- package/packages/@monomind/cli/package.json +5 -3
- package/packages/@monomind/guidance/README.md +1192 -0
- package/packages/@monomind/shared/README.md +322 -0
- package/packages/@monomind/shared/dist/types/consensus-audit.d.ts +3 -1
- package/packages/README.md +513 -0
- package/.claude/agents/design/design-brand-guardian.md +0 -323
- package/.claude/agents/design/design-image-prompt-engineer.md +0 -237
- package/.claude/agents/design/design-inclusive-visuals-specialist.md +0 -72
- package/.claude/agents/design/design-ui-designer.md +0 -384
- package/.claude/agents/design/design-ux-architect.md +0 -470
- package/.claude/agents/design/design-ux-researcher.md +0 -330
- package/.claude/agents/design/design-visual-storyteller.md +0 -150
- package/.claude/agents/design/design-whimsy-injector.md +0 -439
- package/.claude/agents/v3/integration-architect.md +0 -338
- package/.claude/commands/analysis/COMMAND_COMPLIANCE_REPORT.md +0 -54
- package/.claude/commands/coordination/init.md +0 -44
- package/.claude/commands/coordination/orchestrate.md +0 -43
- package/.claude/commands/coordination/spawn.md +0 -45
- package/.claude/commands/github/code-review-swarm.md +0 -550
- package/.claude/commands/github/code-review.md +0 -25
- package/.claude/commands/github/github-swarm.md +0 -121
- package/.claude/commands/github/issue-triage.md +0 -25
- package/.claude/commands/github/multi-repo-swarm.md +0 -519
- package/.claude/commands/github/pr-enhance.md +0 -26
- package/.claude/commands/github/project-board-sync.md +0 -471
- package/.claude/commands/github/release-swarm.md +0 -590
- package/.claude/commands/github/repo-analyze.md +0 -25
- package/.claude/commands/github/swarm-issue.md +0 -482
- package/.claude/commands/github/swarm-pr.md +0 -310
- package/.claude/commands/github/workflow-automation.md +0 -468
- package/.claude/commands/hive-mind/hive-mind-metrics.md +0 -8
- package/.claude/commands/hive-mind/hive-mind-resume.md +0 -8
- package/.claude/commands/hive-mind/hive-mind-sessions.md +0 -8
- package/.claude/commands/hive-mind/hive-mind-wizard.md +0 -8
- package/.claude/commands/list-agents.md +0 -17
- package/.claude/commands/memory/memory-persist.md +0 -25
- package/.claude/commands/memory/memory-usage.md +0 -25
- package/.claude/commands/memory/neural.md +0 -47
- package/.claude/commands/metrics.md +0 -11
- package/.claude/commands/monitoring/real-time-view.md +0 -25
- package/.claude/commands/monitoring/swarm-monitor.md +0 -25
- package/.claude/commands/monomind-createtask.md +0 -302
- package/.claude/commands/monomind-help.md +0 -103
- package/.claude/commands/monomind-memory.md +0 -107
- package/.claude/commands/monomind-repeat.md +0 -149
- package/.claude/commands/monomind-swarm.md +0 -205
- package/.claude/commands/optimization/cache-manage.md +0 -25
- package/.claude/commands/optimization/topology-optimize.md +0 -25
- package/.claude/commands/pair/commands.md +0 -546
- package/.claude/commands/pair/config.md +0 -510
- package/.claude/commands/pair/start.md +0 -209
- package/.claude/commands/use-agent.md +0 -67
- package/.claude/skills/monomind-createtask/SKILL.md +0 -269
- package/.claude/skills/monomind-task-engine/SKILL.md +0 -358
- /package/.claude/agents/{v3 → specialists}/memory-specialist.md +0 -0
- /package/.claude/agents/{v3 → specialists}/performance-engineer.md +0 -0
- /package/.claude/agents/{v3 → specialists}/queen-coordinator.md +0 -0
- /package/.claude/agents/{v3 → specialists}/security-architect.md +0 -0
|
@@ -5,9 +5,9 @@
|
|
|
5
5
|
* Falls back to local state management when CLI tools are unavailable.
|
|
6
6
|
*/
|
|
7
7
|
import { getProjectCwd } from './types.js';
|
|
8
|
-
import { existsSync, readFileSync, writeFileSync, mkdirSync } from 'node:fs';
|
|
8
|
+
import { existsSync, readFileSync, writeFileSync, renameSync, mkdirSync } from 'node:fs';
|
|
9
9
|
import { join } from 'node:path';
|
|
10
|
-
import {
|
|
10
|
+
import { execFileSync } from 'node:child_process';
|
|
11
11
|
// Storage paths
|
|
12
12
|
const STORAGE_DIR = '.monomind';
|
|
13
13
|
const GITHUB_DIR = 'github';
|
|
@@ -38,12 +38,23 @@ function loadGitHubStore() {
|
|
|
38
38
|
}
|
|
39
39
|
function saveGitHubStore(store) {
|
|
40
40
|
ensureGitHubDir();
|
|
41
|
-
|
|
41
|
+
const tmpPath = getGitHubPath() + '.tmp';
|
|
42
|
+
writeFileSync(tmpPath, JSON.stringify(store, null, 2), 'utf-8');
|
|
43
|
+
renameSync(tmpPath, getGitHubPath());
|
|
42
44
|
}
|
|
43
|
-
/** Run a shell command, return stdout or null on failure */
|
|
45
|
+
/** Run a trusted static shell command (no user input), return stdout or null on failure */
|
|
44
46
|
function run(cmd, cwd) {
|
|
45
47
|
try {
|
|
46
|
-
return
|
|
48
|
+
return execFileSync(cmd.split(' ')[0], cmd.split(' ').slice(1), { encoding: 'utf-8', timeout: 15000, cwd: cwd || getProjectCwd(), stdio: ['pipe', 'pipe', 'pipe'] }).trim();
|
|
49
|
+
}
|
|
50
|
+
catch {
|
|
51
|
+
return null;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
/** Run a command with user-provided args as separate array elements (no shell injection) */
|
|
55
|
+
function runSafe(cmd, args, cwd) {
|
|
56
|
+
try {
|
|
57
|
+
return execFileSync(cmd, args, { encoding: 'utf-8', timeout: 15000, cwd: cwd || getProjectCwd(), stdio: ['pipe', 'pipe', 'pipe'] }).trim();
|
|
47
58
|
}
|
|
48
59
|
catch {
|
|
49
60
|
return null;
|
|
@@ -173,7 +184,7 @@ export const githubTools = [
|
|
|
173
184
|
const headBranch = input.branch || run('git rev-parse --abbrev-ref HEAD') || 'feature';
|
|
174
185
|
const baseBranch = input.baseBranch || 'main';
|
|
175
186
|
const body = input.body || '';
|
|
176
|
-
const result =
|
|
187
|
+
const result = runSafe('gh', ['pr', 'create', '--title', title, '--base', baseBranch, '--head', headBranch, '--body', body]);
|
|
177
188
|
if (result) {
|
|
178
189
|
return { success: true, _real: true, action: 'created', url: result };
|
|
179
190
|
}
|
|
@@ -272,8 +283,10 @@ export const githubTools = [
|
|
|
272
283
|
const body = input.body || '';
|
|
273
284
|
const labels = input.labels || [];
|
|
274
285
|
if (gh) {
|
|
275
|
-
const
|
|
276
|
-
|
|
286
|
+
const issueArgs = ['issue', 'create', '--title', title, '--body', body];
|
|
287
|
+
if (labels.length > 0)
|
|
288
|
+
issueArgs.push('--label', labels.join(','));
|
|
289
|
+
const result = runSafe('gh', issueArgs);
|
|
277
290
|
if (result) {
|
|
278
291
|
return { success: true, _real: true, action: 'created', url: result };
|
|
279
292
|
}
|
|
@@ -287,13 +300,13 @@ export const githubTools = [
|
|
|
287
300
|
if (action === 'update') {
|
|
288
301
|
const issueNumber = input.issueNumber;
|
|
289
302
|
if (gh && issueNumber) {
|
|
290
|
-
const
|
|
303
|
+
const editArgs = ['issue', 'edit', String(issueNumber)];
|
|
291
304
|
if (input.title)
|
|
292
|
-
|
|
305
|
+
editArgs.push('--title', input.title);
|
|
293
306
|
if (input.labels)
|
|
294
|
-
|
|
295
|
-
if (
|
|
296
|
-
const result =
|
|
307
|
+
editArgs.push('--add-label', input.labels.join(','));
|
|
308
|
+
if (editArgs.length > 3) {
|
|
309
|
+
const result = runSafe('gh', editArgs);
|
|
297
310
|
if (result !== null)
|
|
298
311
|
return { success: true, _real: true, action: 'updated', issueNumber };
|
|
299
312
|
}
|
|
@@ -364,7 +377,7 @@ export const githubTools = [
|
|
|
364
377
|
if (action === 'status') {
|
|
365
378
|
const workflowId = input.workflowId;
|
|
366
379
|
if (workflowId) {
|
|
367
|
-
const raw =
|
|
380
|
+
const raw = runSafe('gh', ['run', 'view', workflowId, '--json', 'databaseId,displayTitle,status,conclusion,jobs']);
|
|
368
381
|
if (raw) {
|
|
369
382
|
try {
|
|
370
383
|
return { success: true, _real: true, run: JSON.parse(raw) };
|
|
@@ -385,7 +398,7 @@ export const githubTools = [
|
|
|
385
398
|
const workflowId = input.workflowId;
|
|
386
399
|
const ref = input.ref || 'main';
|
|
387
400
|
if (workflowId) {
|
|
388
|
-
const result =
|
|
401
|
+
const result = runSafe('gh', ['workflow', 'run', workflowId, '--ref', ref]);
|
|
389
402
|
if (result !== null)
|
|
390
403
|
return { success: true, _real: true, action: 'triggered', workflowId, ref };
|
|
391
404
|
}
|
|
@@ -394,7 +407,7 @@ export const githubTools = [
|
|
|
394
407
|
if (action === 'cancel') {
|
|
395
408
|
const workflowId = input.workflowId;
|
|
396
409
|
if (workflowId) {
|
|
397
|
-
const result =
|
|
410
|
+
const result = runSafe('gh', ['run', 'cancel', workflowId]);
|
|
398
411
|
if (result !== null)
|
|
399
412
|
return { success: true, _real: true, action: 'cancelled', runId: workflowId };
|
|
400
413
|
}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Helps the system navigate Monomind's capabilities by providing structured
|
|
5
5
|
* discovery of tools, commands, agents, skills, and recommended workflows.
|
|
6
6
|
*
|
|
7
|
-
* @module @
|
|
7
|
+
* @module @monomind/cli/mcp-tools/guidance
|
|
8
8
|
*/
|
|
9
9
|
import { getProjectCwd } from './types.js';
|
|
10
10
|
import { existsSync, readFileSync, readdirSync } from 'node:fs';
|
|
@@ -18,21 +18,34 @@ const CLI_ROOT = join(__dirname, '../../..');
|
|
|
18
18
|
* Tries CWD first (most common), then walks up from the CLI package location.
|
|
19
19
|
*/
|
|
20
20
|
function findProjectRoot() {
|
|
21
|
+
// Allow operator override; trusted when set.
|
|
22
|
+
const envRoot = process.env.MONOMIND_PROJECT_ROOT;
|
|
23
|
+
if (envRoot && existsSync(join(envRoot, '.claude'))) {
|
|
24
|
+
return envRoot;
|
|
25
|
+
}
|
|
21
26
|
// Strategy 1: CWD (most reliable when invoked by user)
|
|
22
27
|
if (existsSync(join(getProjectCwd(), '.claude'))) {
|
|
23
28
|
return getProjectCwd();
|
|
24
29
|
}
|
|
25
|
-
// Strategy 2: Walk up from CLI package location
|
|
26
|
-
// CLI is at packages/@
|
|
30
|
+
// Strategy 2: Walk up from CLI package location.
|
|
31
|
+
// CLI is at packages/@monomind/cli/ — project root is 4 levels up.
|
|
27
32
|
const fromPackage = join(CLI_ROOT, '../../../..');
|
|
28
33
|
if (existsSync(join(fromPackage, '.claude'))) {
|
|
29
34
|
return fromPackage;
|
|
30
35
|
}
|
|
31
|
-
// Strategy 3: Walk up from CWD
|
|
36
|
+
// Strategy 3: Walk up from CWD, but stop at the first ancestor that ALSO
|
|
37
|
+
// contains a project-marker the user owns (`.git` or `package.json`). This
|
|
38
|
+
// closes a confused-deputy: previously, dropping `.claude/agents/x.md` in
|
|
39
|
+
// any of 10 ancestor directories (e.g., `/tmp`) would have been consumed
|
|
40
|
+
// as authoritative agent data. Requiring a marker means an attacker also
|
|
41
|
+
// needs control over a `.git` repo or `package.json` at the same level —
|
|
42
|
+
// which means they already control the project.
|
|
32
43
|
let dir = getProjectCwd();
|
|
33
44
|
for (let i = 0; i < 10; i++) {
|
|
34
|
-
if (existsSync(join(dir, '.claude'))
|
|
45
|
+
if (existsSync(join(dir, '.claude')) &&
|
|
46
|
+
(existsSync(join(dir, '.git')) || existsSync(join(dir, 'package.json')))) {
|
|
35
47
|
return dir;
|
|
48
|
+
}
|
|
36
49
|
const parent = dirname(dir);
|
|
37
50
|
if (parent === dir)
|
|
38
51
|
break;
|
|
@@ -288,15 +301,28 @@ function discoverAgents() {
|
|
|
288
301
|
if (!existsSync(agentsDir))
|
|
289
302
|
return [];
|
|
290
303
|
const agents = [];
|
|
291
|
-
|
|
304
|
+
const visited = new Set();
|
|
305
|
+
// Symlink-aware walk with depth cap. `entry.isDirectory()` returns true for
|
|
306
|
+
// symlinks pointing at directories, so a careless `agents/loop -> ..`
|
|
307
|
+
// symlink would otherwise traverse outside the agents tree (or loop
|
|
308
|
+
// forever). Using lstat + skipping symlinks closes both vectors.
|
|
309
|
+
function walk(dir, depth) {
|
|
310
|
+
if (depth > 8)
|
|
311
|
+
return;
|
|
312
|
+
if (visited.has(dir))
|
|
313
|
+
return;
|
|
314
|
+
visited.add(dir);
|
|
292
315
|
try {
|
|
293
316
|
const entries = readdirSync(dir, { withFileTypes: true });
|
|
294
317
|
for (const entry of entries) {
|
|
318
|
+
if (entry.isSymbolicLink())
|
|
319
|
+
continue;
|
|
320
|
+
const full = join(dir, entry.name);
|
|
295
321
|
if (entry.isDirectory()) {
|
|
296
|
-
walk(
|
|
322
|
+
walk(full, depth + 1);
|
|
297
323
|
}
|
|
298
|
-
else if (entry.name.endsWith('.md') && entry.name !== 'MIGRATION_SUMMARY.md') {
|
|
299
|
-
const content = readFileSync(
|
|
324
|
+
else if (entry.isFile() && entry.name.endsWith('.md') && entry.name !== 'MIGRATION_SUMMARY.md') {
|
|
325
|
+
const content = readFileSync(full, 'utf-8');
|
|
300
326
|
const nameMatch = content.match(/^name:\s*(.+)$/m);
|
|
301
327
|
if (nameMatch)
|
|
302
328
|
agents.push(nameMatch[1].trim().replace(/^["']|["']$/g, ''));
|
|
@@ -305,7 +331,7 @@ function discoverAgents() {
|
|
|
305
331
|
}
|
|
306
332
|
catch { /* ignore */ }
|
|
307
333
|
}
|
|
308
|
-
walk(agentsDir);
|
|
334
|
+
walk(agentsDir, 0);
|
|
309
335
|
return [...new Set(agents)].sort();
|
|
310
336
|
}
|
|
311
337
|
function discoverSkills() {
|
|
@@ -316,6 +342,8 @@ function discoverSkills() {
|
|
|
316
342
|
try {
|
|
317
343
|
const entries = readdirSync(skillsDir, { withFileTypes: true });
|
|
318
344
|
for (const entry of entries) {
|
|
345
|
+
if (entry.isSymbolicLink())
|
|
346
|
+
continue;
|
|
319
347
|
if (entry.isDirectory()) {
|
|
320
348
|
const skillFile = join(skillsDir, entry.name, 'SKILL.md');
|
|
321
349
|
if (existsSync(skillFile)) {
|
|
@@ -3,18 +3,10 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Tool definitions for collective intelligence and swarm coordination.
|
|
5
5
|
*/
|
|
6
|
-
import { existsSync, readFileSync, writeFileSync,
|
|
6
|
+
import { existsSync, readFileSync, writeFileSync, renameSync, mkdirSync } from 'node:fs';
|
|
7
7
|
import { join } from 'node:path';
|
|
8
8
|
import { getProjectCwd } from './types.js';
|
|
9
9
|
import { weightedTally } from '../consensus/vote-signer.js';
|
|
10
|
-
function logEvent(kind, data) {
|
|
11
|
-
try {
|
|
12
|
-
const dir = join(getProjectCwd(), '.monomind', 'swarm');
|
|
13
|
-
if (!existsSync(dir)) mkdirSync(dir, { recursive: true });
|
|
14
|
-
const event = { ts: new Date().toISOString(), source: 'mcp', kind, ...data };
|
|
15
|
-
appendFileSync(join(dir, 'events.jsonl'), JSON.stringify(event) + '\n');
|
|
16
|
-
} catch { }
|
|
17
|
-
}
|
|
18
10
|
// Storage paths
|
|
19
11
|
const STORAGE_DIR = '.monomind';
|
|
20
12
|
const HIVE_DIR = 'hive-mind';
|
|
@@ -127,12 +119,16 @@ function loadHiveState() {
|
|
|
127
119
|
function saveHiveState(state) {
|
|
128
120
|
ensureHiveDir();
|
|
129
121
|
state.updatedAt = new Date().toISOString();
|
|
130
|
-
|
|
122
|
+
const dest = getHivePath();
|
|
123
|
+
const tmp = `${dest}.${process.pid}.${Date.now()}.tmp`;
|
|
124
|
+
writeFileSync(tmp, JSON.stringify(state, null, 2), 'utf-8');
|
|
125
|
+
renameSync(tmp, dest);
|
|
131
126
|
}
|
|
132
127
|
// Import agent store helpers for spawn functionality
|
|
133
128
|
import { existsSync as agentStoreExists, readFileSync as readAgentStore, writeFileSync as writeAgentStore, mkdirSync as mkdirAgentStore } from 'node:fs';
|
|
129
|
+
// Canonical agent store path matches agent-tools.ts: .monomind/agents/store.json
|
|
134
130
|
function loadAgentStore() {
|
|
135
|
-
const storePath = join(getProjectCwd(), '.monomind', 'agents.json');
|
|
131
|
+
const storePath = join(getProjectCwd(), '.monomind', 'agents', 'store.json');
|
|
136
132
|
try {
|
|
137
133
|
if (agentStoreExists(storePath)) {
|
|
138
134
|
return JSON.parse(readAgentStore(storePath, 'utf-8'));
|
|
@@ -141,12 +137,16 @@ function loadAgentStore() {
|
|
|
141
137
|
catch { /* ignore */ }
|
|
142
138
|
return { agents: {} };
|
|
143
139
|
}
|
|
140
|
+
const HIVE_RESERVED_KEYS = new Set(['__proto__', 'constructor', 'prototype']);
|
|
144
141
|
function saveAgentStore(store) {
|
|
145
|
-
const storeDir = join(getProjectCwd(), '.monomind');
|
|
142
|
+
const storeDir = join(getProjectCwd(), '.monomind', 'agents');
|
|
146
143
|
if (!agentStoreExists(storeDir)) {
|
|
147
144
|
mkdirAgentStore(storeDir, { recursive: true });
|
|
148
145
|
}
|
|
149
|
-
|
|
146
|
+
const dest = join(storeDir, 'store.json');
|
|
147
|
+
const tmp = `${dest}.${process.pid}.${Date.now()}.tmp`;
|
|
148
|
+
writeAgentStore(tmp, JSON.stringify(store, null, 2), 'utf-8');
|
|
149
|
+
renameSync(tmp, dest);
|
|
150
150
|
}
|
|
151
151
|
export const hiveMindTools = [
|
|
152
152
|
{
|
|
@@ -175,6 +175,8 @@ export const hiveMindTools = [
|
|
|
175
175
|
const spawnedWorkers = [];
|
|
176
176
|
for (let i = 0; i < count; i++) {
|
|
177
177
|
const agentId = `${prefix}-${Date.now()}-${Math.random().toString(36).slice(2, 6)}`;
|
|
178
|
+
if (HIVE_RESERVED_KEYS.has(agentId))
|
|
179
|
+
continue;
|
|
178
180
|
// Create agent record (like agent/spawn)
|
|
179
181
|
agentStore.agents[agentId] = {
|
|
180
182
|
agentId,
|
|
@@ -187,7 +189,11 @@ export const hiveMindTools = [
|
|
|
187
189
|
domain: 'hive-mind',
|
|
188
190
|
};
|
|
189
191
|
// Join to hive-mind (like hive-mind/join)
|
|
192
|
+
const MAX_HIVE_AGENTS = 100;
|
|
190
193
|
if (!state.workers.includes(agentId)) {
|
|
194
|
+
if (state.workers.length >= MAX_HIVE_AGENTS) {
|
|
195
|
+
return { success: false, error: `Hive has reached max agent capacity (${MAX_HIVE_AGENTS})` };
|
|
196
|
+
}
|
|
191
197
|
state.workers.push(agentId);
|
|
192
198
|
}
|
|
193
199
|
spawnedWorkers.push({
|
|
@@ -198,9 +204,6 @@ export const hiveMindTools = [
|
|
|
198
204
|
}
|
|
199
205
|
saveAgentStore(agentStore);
|
|
200
206
|
saveHiveState(state);
|
|
201
|
-
for (const w of spawnedWorkers) {
|
|
202
|
-
logEvent('hive.spawn', { agentId: w.agentId, role: w.role, agentType });
|
|
203
|
-
}
|
|
204
207
|
return {
|
|
205
208
|
success: true,
|
|
206
209
|
spawned: count,
|
|
@@ -223,19 +226,21 @@ export const hiveMindTools = [
|
|
|
223
226
|
},
|
|
224
227
|
},
|
|
225
228
|
handler: async (input) => {
|
|
226
|
-
const state = loadHiveState();
|
|
227
229
|
const hiveId = `hive-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
|
|
228
230
|
const queenId = input.queenId || `queen-${Date.now()}`;
|
|
229
|
-
|
|
230
|
-
state
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
electedAt:
|
|
235
|
-
|
|
231
|
+
const now = new Date().toISOString();
|
|
232
|
+
const state = {
|
|
233
|
+
initialized: true,
|
|
234
|
+
hiveId,
|
|
235
|
+
topology: input.topology || 'mesh',
|
|
236
|
+
queen: { agentId: queenId, electedAt: now, term: 1 },
|
|
237
|
+
workers: [],
|
|
238
|
+
consensus: { pending: [], history: [] },
|
|
239
|
+
sharedMemory: {},
|
|
240
|
+
createdAt: now,
|
|
241
|
+
updatedAt: now,
|
|
236
242
|
};
|
|
237
243
|
saveHiveState(state);
|
|
238
|
-
logEvent('hive.init', { hiveId, topology: state.topology, consensus: input.consensus || 'byzantine', queenId });
|
|
239
244
|
return {
|
|
240
245
|
success: true,
|
|
241
246
|
hiveId,
|
|
@@ -292,7 +297,7 @@ export const hiveMindTools = [
|
|
|
292
297
|
const realLoad = activeTaskCount / workerCount;
|
|
293
298
|
const status = {
|
|
294
299
|
// CLI expected fields
|
|
295
|
-
hiveId: `hive-${state.createdAt ? new Date(state.createdAt).getTime() : Date.now()}`,
|
|
300
|
+
hiveId: state.hiveId ?? `hive-${state.createdAt ? new Date(state.createdAt).getTime() : Date.now()}`,
|
|
296
301
|
status: state.initialized ? 'active' : 'offline',
|
|
297
302
|
topology: state.topology,
|
|
298
303
|
consensus: 'byzantine', // Default consensus type
|
|
@@ -332,7 +337,7 @@ export const hiveMindTools = [
|
|
|
332
337
|
memory: 'healthy',
|
|
333
338
|
},
|
|
334
339
|
// Additional fields
|
|
335
|
-
id: `hive-${state.createdAt ? new Date(state.createdAt).getTime() : Date.now()}`,
|
|
340
|
+
id: state.hiveId ?? `hive-${state.createdAt ? new Date(state.createdAt).getTime() : Date.now()}`,
|
|
336
341
|
initialized: state.initialized,
|
|
337
342
|
workerCount: state.workers.length,
|
|
338
343
|
pendingConsensus: state.consensus.pending.length,
|
|
@@ -367,10 +372,20 @@ export const hiveMindTools = [
|
|
|
367
372
|
handler: async (input) => {
|
|
368
373
|
const state = loadHiveState();
|
|
369
374
|
const agentId = input.agentId;
|
|
375
|
+
// Reject IDs that would mutate Object.prototype when used as a key on the
|
|
376
|
+
// JSON-loaded plain object `agentStore.agents` (read in hive-mind_status).
|
|
377
|
+
if (typeof agentId !== 'string' || agentId.length === 0 || agentId.length > 128 ||
|
|
378
|
+
HIVE_RESERVED_KEYS.has(agentId) || !/^[a-zA-Z0-9_-]+$/.test(agentId)) {
|
|
379
|
+
return { success: false, error: 'Invalid agentId' };
|
|
380
|
+
}
|
|
370
381
|
if (!state.initialized) {
|
|
371
382
|
return { success: false, error: 'Hive-mind not initialized' };
|
|
372
383
|
}
|
|
384
|
+
const MAX_HIVE_AGENTS = 100;
|
|
373
385
|
if (!state.workers.includes(agentId)) {
|
|
386
|
+
if (state.workers.length >= MAX_HIVE_AGENTS) {
|
|
387
|
+
return { success: false, error: `Hive has reached max agent capacity (${MAX_HIVE_AGENTS})` };
|
|
388
|
+
}
|
|
374
389
|
state.workers.push(agentId);
|
|
375
390
|
saveHiveState(state);
|
|
376
391
|
}
|
|
@@ -397,6 +412,10 @@ export const hiveMindTools = [
|
|
|
397
412
|
handler: async (input) => {
|
|
398
413
|
const state = loadHiveState();
|
|
399
414
|
const agentId = input.agentId;
|
|
415
|
+
if (typeof agentId !== 'string' || agentId.length === 0 || agentId.length > 128 ||
|
|
416
|
+
HIVE_RESERVED_KEYS.has(agentId) || !/^[a-zA-Z0-9_-]+$/.test(agentId)) {
|
|
417
|
+
return { success: false, error: 'Invalid agentId' };
|
|
418
|
+
}
|
|
400
419
|
const index = state.workers.indexOf(agentId);
|
|
401
420
|
if (index > -1) {
|
|
402
421
|
state.workers.splice(index, 1);
|
|
@@ -436,7 +455,7 @@ export const hiveMindTools = [
|
|
|
436
455
|
const state = loadHiveState();
|
|
437
456
|
const action = input.action;
|
|
438
457
|
const strategy = input.strategy || 'raft';
|
|
439
|
-
const totalNodes = state.workers.length
|
|
458
|
+
const totalNodes = state.workers.length;
|
|
440
459
|
if (action === 'propose') {
|
|
441
460
|
const proposalId = `proposal-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
|
|
442
461
|
const quorumPreset = input.quorumPreset || 'majority';
|
|
@@ -476,7 +495,6 @@ export const hiveMindTools = [
|
|
|
476
495
|
};
|
|
477
496
|
state.consensus.pending.push(proposal);
|
|
478
497
|
saveHiveState(state);
|
|
479
|
-
logEvent('hive.consensus.propose', { proposalId, type: proposal.type, strategy, proposedBy: proposal.proposedBy, totalNodes });
|
|
480
498
|
return {
|
|
481
499
|
action,
|
|
482
500
|
proposalId,
|
|
@@ -500,6 +518,12 @@ export const hiveMindTools = [
|
|
|
500
518
|
if (!voterId) {
|
|
501
519
|
return { action, error: 'voterId is required for voting' };
|
|
502
520
|
}
|
|
521
|
+
if (totalNodes === 0) {
|
|
522
|
+
return { action, error: 'No workers in hive — cannot vote' };
|
|
523
|
+
}
|
|
524
|
+
if (!state.workers.includes(voterId)) {
|
|
525
|
+
return { action, error: `Voter ${voterId} is not a member of this hive` };
|
|
526
|
+
}
|
|
503
527
|
const voteValue = input.vote;
|
|
504
528
|
const proposalStrategy = proposal.strategy || 'raft';
|
|
505
529
|
const required = calculateRequiredVotes(proposalStrategy, totalNodes, proposal.quorumPreset);
|
|
@@ -598,11 +622,9 @@ export const hiveMindTools = [
|
|
|
598
622
|
// Try to resolve
|
|
599
623
|
const resolution = divergenceGateOpen ? tryResolveProposal(proposal, totalNodes) : null;
|
|
600
624
|
let resolved = false;
|
|
601
|
-
logEvent('hive.consensus.vote', { proposalId: proposal.proposalId, voterId, vote: voteValue, strategy: proposalStrategy, votesFor, votesAgainst });
|
|
602
625
|
if (resolution !== null) {
|
|
603
626
|
resolved = true;
|
|
604
627
|
proposal.status = resolution;
|
|
605
|
-
logEvent('hive.consensus.resolved', { proposalId: proposal.proposalId, result: resolution, strategy: proposalStrategy, votesFor, votesAgainst });
|
|
606
628
|
state.consensus.history.push({
|
|
607
629
|
proposalId: proposal.proposalId,
|
|
608
630
|
type: proposal.type,
|
|
@@ -613,6 +635,9 @@ export const hiveMindTools = [
|
|
|
613
635
|
term: proposal.term,
|
|
614
636
|
byzantineDetected: proposal.byzantineVoters?.length ? proposal.byzantineVoters : undefined,
|
|
615
637
|
});
|
|
638
|
+
if (state.consensus.history.length > 1000) {
|
|
639
|
+
state.consensus.history = state.consensus.history.slice(-1000);
|
|
640
|
+
}
|
|
616
641
|
state.consensus.pending = state.consensus.pending.filter(p => p.proposalId !== proposal.proposalId);
|
|
617
642
|
}
|
|
618
643
|
saveHiveState(state);
|
|
@@ -635,6 +660,44 @@ export const hiveMindTools = [
|
|
|
635
660
|
});
|
|
636
661
|
}
|
|
637
662
|
catch { /* AgentDB not available — JSON store is primary */ }
|
|
663
|
+
// Persist consensus audit record
|
|
664
|
+
const sessionSecret = process.env.MONOMIND_SESSION_SECRET;
|
|
665
|
+
if (!sessionSecret) {
|
|
666
|
+
process.stderr.write('[hive-consensus] Audit write skipped: MONOMIND_SESSION_SECRET not set\n');
|
|
667
|
+
}
|
|
668
|
+
else {
|
|
669
|
+
try {
|
|
670
|
+
const { AuditWriter } = await import('../consensus/audit-writer.js');
|
|
671
|
+
const auditDir = join(getProjectCwd(), STORAGE_DIR, 'consensus');
|
|
672
|
+
const writer = new AuditWriter(auditDir);
|
|
673
|
+
const now = new Date().toISOString();
|
|
674
|
+
const voteEntries = Object.entries(proposal.votes).map(([agentId, vote]) => ({
|
|
675
|
+
agentId,
|
|
676
|
+
agentSlug: agentId,
|
|
677
|
+
vote,
|
|
678
|
+
votedAt: now,
|
|
679
|
+
}));
|
|
680
|
+
writer.record({
|
|
681
|
+
decisionId: proposal.proposalId,
|
|
682
|
+
swarmId: `hive-${state.createdAt ? new Date(state.createdAt).getTime() : Date.now()}`,
|
|
683
|
+
protocol: (proposalStrategy === 'bft' ? 'byzantine' : proposalStrategy === 'raft' ? 'raft' : 'quorum'),
|
|
684
|
+
topic: proposal.type,
|
|
685
|
+
decision: resolution,
|
|
686
|
+
votes: voteEntries,
|
|
687
|
+
quorumRequired: required,
|
|
688
|
+
quorumThreshold: required / Math.max(totalNodes, 1),
|
|
689
|
+
round: (proposal.divergenceRoundsSeen ?? 0) + 1,
|
|
690
|
+
startedAt: proposal.proposedAt,
|
|
691
|
+
completedAt: now,
|
|
692
|
+
sessionSecret,
|
|
693
|
+
});
|
|
694
|
+
}
|
|
695
|
+
catch (e) {
|
|
696
|
+
if (process.env.MONOMIND_LOG_LEVEL === 'debug') {
|
|
697
|
+
process.stderr.write(`[hive-consensus] Audit write failed: ${e.message}\n`);
|
|
698
|
+
}
|
|
699
|
+
}
|
|
700
|
+
}
|
|
638
701
|
}
|
|
639
702
|
return {
|
|
640
703
|
action,
|
|
@@ -750,7 +813,6 @@ export const hiveMindTools = [
|
|
|
750
813
|
// Keep only last 100 broadcasts
|
|
751
814
|
state.sharedMemory.broadcasts = messages.slice(-100);
|
|
752
815
|
saveHiveState(state);
|
|
753
|
-
logEvent('hive.broadcast', { messageId, fromId: input.fromId || 'system', message: input.message, priority: input.priority || 'normal', recipients: state.workers.length });
|
|
754
816
|
return {
|
|
755
817
|
success: true,
|
|
756
818
|
messageId,
|
|
@@ -800,7 +862,6 @@ export const hiveMindTools = [
|
|
|
800
862
|
// Reset hive state
|
|
801
863
|
const shutdownTime = new Date().toISOString();
|
|
802
864
|
const previousQueen = state.queen?.agentId;
|
|
803
|
-
logEvent('hive.shutdown', { workersTerminated: workerCount, previousQueen, graceful, pendingConsensus, topology: state.topology });
|
|
804
865
|
state.initialized = false;
|
|
805
866
|
state.queen = undefined;
|
|
806
867
|
state.workers = [];
|
|
@@ -849,6 +910,8 @@ export const hiveMindTools = [
|
|
|
849
910
|
if (action === 'set') {
|
|
850
911
|
if (!key)
|
|
851
912
|
return { action, error: 'Key required' };
|
|
913
|
+
if (HIVE_RESERVED_KEYS.has(key))
|
|
914
|
+
return { action, error: 'Forbidden key' };
|
|
852
915
|
state.sharedMemory[key] = input.value;
|
|
853
916
|
saveHiveState(state);
|
|
854
917
|
// Also store in AgentDB for searchable hive memory
|