monomind 1.7.0 → 1.9.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/.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} +22 -9
- package/.claude/commands/monomind/help.md +118 -0
- package/.claude/commands/{monomind-idea.md → monomind/idea.md} +23 -29
- package/.claude/commands/{monomind-improve.md → monomind/improve.md} +24 -30
- 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/loop-tracker.cjs +107 -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/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/README.md +5 -5
- package/package.json +1 -1
- package/packages/@monomind/cli/README.md +5 -5
- package/packages/@monomind/cli/bin/cli.js +78 -13
- 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 +28 -62
- 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 +163 -137
- package/packages/@monomind/cli/dist/src/init/helpers-generator.js +49 -36
- 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 +15 -6
- 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/graphify-tools.d.ts +4 -67
- package/packages/@monomind/cli/dist/src/mcp-tools/graphify-tools.js +40 -1250
- 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/index.d.ts +1 -0
- package/packages/@monomind/cli/dist/src/mcp-tools/index.js +1 -0
- package/packages/@monomind/cli/dist/src/mcp-tools/memory-tools.js +29 -13
- package/packages/@monomind/cli/dist/src/mcp-tools/monograph-tools.d.ts +9 -0
- package/packages/@monomind/cli/dist/src/mcp-tools/monograph-tools.js +6306 -0
- 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 -2
- package/packages/@monomind/guidance/README.md +0 -3
- package/packages/@monomind/shared/README.md +0 -1
- package/packages/@monomind/shared/dist/types/consensus-audit.d.ts +3 -1
- package/packages/README.md +15 -16
- 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
|
@@ -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
|
|
@@ -2,17 +2,9 @@
|
|
|
2
2
|
* Hooks MCP Tools
|
|
3
3
|
* Provides intelligent hooks functionality via MCP protocol
|
|
4
4
|
*/
|
|
5
|
-
import { mkdirSync, writeFileSync, existsSync, readFileSync, statSync, unlinkSync, readdirSync
|
|
6
|
-
import { dirname, join, resolve } from 'path';
|
|
5
|
+
import { mkdirSync, writeFileSync, renameSync, existsSync, readFileSync, statSync, unlinkSync, readdirSync } from 'fs';
|
|
6
|
+
import { dirname, join, resolve, sep } from 'path';
|
|
7
7
|
import { getProjectCwd } from './types.js';
|
|
8
|
-
function logEvent(kind, data) {
|
|
9
|
-
try {
|
|
10
|
-
const dir = join(getProjectCwd(), '.monomind', 'swarm');
|
|
11
|
-
if (!existsSync(dir)) mkdirSync(dir, { recursive: true });
|
|
12
|
-
const event = { ts: new Date().toISOString(), source: 'hook', kind, ...data };
|
|
13
|
-
appendFileSync(join(dir, 'events.jsonl'), JSON.stringify(event) + '\n');
|
|
14
|
-
} catch { }
|
|
15
|
-
}
|
|
16
8
|
// Real vector search functions - lazy loaded to avoid circular imports
|
|
17
9
|
let searchEntriesFn = null;
|
|
18
10
|
async function getRealSearchFunction() {
|
|
@@ -92,7 +84,8 @@ let semanticRouter = null;
|
|
|
92
84
|
let nativeVectorDb = null;
|
|
93
85
|
let semanticRouterInitialized = false;
|
|
94
86
|
let routerBackend = 'none';
|
|
95
|
-
// Pre-computed embeddings for common task patterns (cached)
|
|
87
|
+
// Pre-computed embeddings for common task patterns (cached, capped to prevent unbounded growth)
|
|
88
|
+
const MAX_PATTERN_EMBEDDINGS = 2000;
|
|
96
89
|
const TASK_PATTERN_EMBEDDINGS = new Map();
|
|
97
90
|
function generateSimpleEmbedding(text, dimension = 384) {
|
|
98
91
|
// Simple deterministic embedding based on character codes
|
|
@@ -168,7 +161,9 @@ function saveRoutingOutcomes(outcomes) {
|
|
|
168
161
|
mkdirSync(dir, { recursive: true });
|
|
169
162
|
// Cap at 500 entries to bound file size
|
|
170
163
|
const capped = outcomes.slice(-500);
|
|
171
|
-
|
|
164
|
+
const tmp = ROUTING_OUTCOMES_PATH + '.tmp';
|
|
165
|
+
writeFileSync(tmp, JSON.stringify({ outcomes: capped }, null, 2));
|
|
166
|
+
renameSync(tmp, ROUTING_OUTCOMES_PATH);
|
|
172
167
|
}
|
|
173
168
|
catch { /* non-critical */ }
|
|
174
169
|
}
|
|
@@ -293,7 +288,9 @@ async function getSemanticRouter() {
|
|
|
293
288
|
for (const keyword of keywords) {
|
|
294
289
|
const embedding = generateSimpleEmbedding(keyword);
|
|
295
290
|
db.insert(`${patternName}:${keyword}`, embedding);
|
|
296
|
-
TASK_PATTERN_EMBEDDINGS.
|
|
291
|
+
if (TASK_PATTERN_EMBEDDINGS.size < MAX_PATTERN_EMBEDDINGS) {
|
|
292
|
+
TASK_PATTERN_EMBEDDINGS.set(`${patternName}:${keyword}`, embedding);
|
|
293
|
+
}
|
|
297
294
|
}
|
|
298
295
|
}
|
|
299
296
|
nativeVectorDb = db;
|
|
@@ -313,9 +310,11 @@ async function getSemanticRouter() {
|
|
|
313
310
|
for (const [patternName, { keywords, agents }] of Object.entries(getMergedTaskPatterns())) {
|
|
314
311
|
const embeddings = keywords.map(kw => generateSimpleEmbedding(kw));
|
|
315
312
|
semanticRouter.addIntentWithEmbeddings(patternName, embeddings, { agents, keywords });
|
|
316
|
-
// Cache embeddings for keywords
|
|
313
|
+
// Cache embeddings for keywords (capped)
|
|
317
314
|
keywords.forEach((kw, i) => {
|
|
318
|
-
TASK_PATTERN_EMBEDDINGS.
|
|
315
|
+
if (TASK_PATTERN_EMBEDDINGS.size < MAX_PATTERN_EMBEDDINGS) {
|
|
316
|
+
TASK_PATTERN_EMBEDDINGS.set(kw, embeddings[i]);
|
|
317
|
+
}
|
|
319
318
|
});
|
|
320
319
|
}
|
|
321
320
|
routerBackend = 'pure-js';
|
|
@@ -353,18 +352,10 @@ async function getFlashAttention() {
|
|
|
353
352
|
}
|
|
354
353
|
return flashAttention;
|
|
355
354
|
}
|
|
356
|
-
// LoRA Adapter
|
|
355
|
+
// LoRA Adapter removed — superseded by SONA instant adaptation
|
|
356
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
357
357
|
let loraAdapter = null;
|
|
358
358
|
async function getLoRAAdapter() {
|
|
359
|
-
if (!loraAdapter) {
|
|
360
|
-
try {
|
|
361
|
-
const { getLoRAAdapter: getLora } = await import('../ruvector/lora-adapter.js');
|
|
362
|
-
loraAdapter = await getLora();
|
|
363
|
-
}
|
|
364
|
-
catch {
|
|
365
|
-
loraAdapter = null;
|
|
366
|
-
}
|
|
367
|
-
}
|
|
368
359
|
return loraAdapter;
|
|
369
360
|
}
|
|
370
361
|
// In-memory trajectory tracking (persisted on end)
|
|
@@ -372,7 +363,7 @@ const activeTrajectories = new Map();
|
|
|
372
363
|
const MEMORY_DIR = '.monomind/memory';
|
|
373
364
|
const MEMORY_FILE = 'store.json';
|
|
374
365
|
function getMemoryPath() {
|
|
375
|
-
return
|
|
366
|
+
return join(getProjectCwd(), MEMORY_DIR, MEMORY_FILE);
|
|
376
367
|
}
|
|
377
368
|
function loadMemoryStore() {
|
|
378
369
|
try {
|
|
@@ -718,10 +709,13 @@ export const hooksPostCommand = {
|
|
|
718
709
|
const store = loadMemoryStore();
|
|
719
710
|
const key = `cmd-${Date.now()}`;
|
|
720
711
|
store.entries[key] = { key, value: JSON.stringify({ command, exitCode, success }), namespace: 'commands', createdAt: new Date().toISOString() };
|
|
721
|
-
const memDir =
|
|
712
|
+
const memDir = join(getProjectCwd(), MEMORY_DIR);
|
|
722
713
|
if (!existsSync(memDir))
|
|
723
714
|
mkdirSync(memDir, { recursive: true });
|
|
724
|
-
|
|
715
|
+
const _mp = getMemoryPath();
|
|
716
|
+
const _mptmp = _mp + '.tmp';
|
|
717
|
+
writeFileSync(_mptmp, JSON.stringify(store, null, 2), 'utf-8');
|
|
718
|
+
renameSync(_mptmp, _mp);
|
|
725
719
|
_storedIn = 'json-store';
|
|
726
720
|
}
|
|
727
721
|
catch { /* non-critical */ }
|
|
@@ -1078,7 +1072,7 @@ export const hooksPreTask = {
|
|
|
1078
1072
|
});
|
|
1079
1073
|
for (const r of (heuristicResults?.results ?? [])) {
|
|
1080
1074
|
try {
|
|
1081
|
-
const h = JSON.parse(r.content ??
|
|
1075
|
+
const h = JSON.parse(r.content ?? '{}');
|
|
1082
1076
|
if (h.action && h.confidence !== undefined && h.confidence >= 0.6) {
|
|
1083
1077
|
erlHints.push(`ERL hint (conf=${h.confidence.toFixed(2)}): use "${h.action}" for tasks involving "${h.condition ?? 'similar context'}"`);
|
|
1084
1078
|
}
|
|
@@ -1094,7 +1088,7 @@ export const hooksPreTask = {
|
|
|
1094
1088
|
threshold: 0.55,
|
|
1095
1089
|
});
|
|
1096
1090
|
for (const r of (gradientResults?.results ?? [])) {
|
|
1097
|
-
const critique = r.content ??
|
|
1091
|
+
const critique = r.content ?? '';
|
|
1098
1092
|
if (critique && critique.length > 10) {
|
|
1099
1093
|
erlHints.push(`TextGrad warning: ${critique.slice(0, 120)}`);
|
|
1100
1094
|
}
|
|
@@ -1102,7 +1096,6 @@ export const hooksPreTask = {
|
|
|
1102
1096
|
}
|
|
1103
1097
|
}
|
|
1104
1098
|
catch { /* non-critical */ }
|
|
1105
|
-
logEvent('task.start', { taskId, description: description?.slice(0, 200), complexity, suggestedAgent: suggestion.agents[0], modelTier: modelRouting?.tier });
|
|
1106
1099
|
return {
|
|
1107
1100
|
taskId,
|
|
1108
1101
|
description,
|
|
@@ -1246,7 +1239,7 @@ export const hooksPostTask = {
|
|
|
1246
1239
|
key: `textual_gradient:${taskId}`,
|
|
1247
1240
|
value: critique,
|
|
1248
1241
|
namespace: 'gradients',
|
|
1249
|
-
tags: ['textual_gradient', agent, 'failure'],
|
|
1242
|
+
tags: ['textual_gradient', agent ?? 'unknown', 'failure'],
|
|
1250
1243
|
});
|
|
1251
1244
|
}
|
|
1252
1245
|
}
|
|
@@ -1265,7 +1258,6 @@ export const hooksPostTask = {
|
|
|
1265
1258
|
storeAs: 'heuristics',
|
|
1266
1259
|
note: 'Spawn agents sequentially: Diagnoser → Critics in parallel → Aggregator',
|
|
1267
1260
|
} : { needed: false };
|
|
1268
|
-
logEvent('task.end', { taskId, success, duration, agent, quality, task: taskText?.slice(0, 200) });
|
|
1269
1261
|
return {
|
|
1270
1262
|
taskId,
|
|
1271
1263
|
success,
|
|
@@ -1375,6 +1367,10 @@ export const hooksPretrain = {
|
|
|
1375
1367
|
},
|
|
1376
1368
|
handler: async (params) => {
|
|
1377
1369
|
const repoPath = resolve(params.path || '.');
|
|
1370
|
+
const projectRoot = getProjectCwd();
|
|
1371
|
+
if (repoPath !== projectRoot && !repoPath.startsWith(projectRoot + sep)) {
|
|
1372
|
+
return { error: 'Invalid path: must be within the project directory.' };
|
|
1373
|
+
}
|
|
1378
1374
|
const depth = params.depth || 'medium';
|
|
1379
1375
|
const startTime = performance.now();
|
|
1380
1376
|
// Real file scanning — count files by extension, extract patterns
|
|
@@ -1472,9 +1468,20 @@ export const hooksBuildAgents = {
|
|
|
1472
1468
|
},
|
|
1473
1469
|
},
|
|
1474
1470
|
handler: async (params) => {
|
|
1475
|
-
const
|
|
1471
|
+
const rawOutputDir = resolve(params.outputDir || './agents');
|
|
1472
|
+
const outputDir = rawOutputDir;
|
|
1473
|
+
if (!outputDir.startsWith(getProjectCwd() + sep) && outputDir !== getProjectCwd()) {
|
|
1474
|
+
return { error: 'Invalid outputDir: must be within the project directory.' };
|
|
1475
|
+
}
|
|
1476
1476
|
const focus = params.focus || 'all';
|
|
1477
|
-
|
|
1477
|
+
// Strict allowlist on `format` — without this, `format = "yaml/../../../etc/cron.d/x"`
|
|
1478
|
+
// collapses through `join` and lets writes escape the validated outputDir.
|
|
1479
|
+
const ALLOWED_FORMATS = new Set(['yaml', 'json']);
|
|
1480
|
+
const formatRaw = params.format || 'yaml';
|
|
1481
|
+
if (!ALLOWED_FORMATS.has(formatRaw)) {
|
|
1482
|
+
return { error: 'Invalid format: must be yaml or json' };
|
|
1483
|
+
}
|
|
1484
|
+
const format = formatRaw;
|
|
1478
1485
|
const persist = params.persist !== false; // Default to true
|
|
1479
1486
|
const agents = [
|
|
1480
1487
|
{ type: 'coder', configFile: join(outputDir, `coder.${format}`), capabilities: ['code-generation', 'refactoring', 'debugging'], optimizations: ['flash-attention', 'token-reduction'] },
|
|
@@ -1505,7 +1512,9 @@ export const hooksBuildAgents = {
|
|
|
1505
1512
|
const content = format === 'json'
|
|
1506
1513
|
? JSON.stringify(config, null, 2)
|
|
1507
1514
|
: `# ${agent.type} agent configuration\ntype: ${agent.type}\nversion: "3.0.0"\ncapabilities:\n${agent.capabilities.map(c => ` - ${c}`).join('\n')}\noptimizations:\n${agent.optimizations.map(o => ` - ${o}`).join('\n')}\ncreatedAt: "${config.createdAt}"\n`;
|
|
1508
|
-
|
|
1515
|
+
const _cftmp = agent.configFile + '.tmp';
|
|
1516
|
+
writeFileSync(_cftmp, content, 'utf-8');
|
|
1517
|
+
renameSync(_cftmp, agent.configFile);
|
|
1509
1518
|
}
|
|
1510
1519
|
}
|
|
1511
1520
|
return {
|
|
@@ -1538,8 +1547,25 @@ export const hooksTransfer = {
|
|
|
1538
1547
|
const sourcePath = params.sourcePath;
|
|
1539
1548
|
const minConfidence = params.minConfidence || 0.7;
|
|
1540
1549
|
const filter = params.filter;
|
|
1550
|
+
// Validate sourcePath is an existing directory before reading from it
|
|
1551
|
+
const resolvedSource = resolve(sourcePath);
|
|
1552
|
+
const { statSync } = await import('fs');
|
|
1553
|
+
const { homedir } = await import('os');
|
|
1554
|
+
const home = homedir();
|
|
1555
|
+
if (resolvedSource !== home && !resolvedSource.startsWith(home + sep)) {
|
|
1556
|
+
return { error: 'sourcePath must be within the home directory.' };
|
|
1557
|
+
}
|
|
1558
|
+
try {
|
|
1559
|
+
const st = statSync(resolvedSource);
|
|
1560
|
+
if (!st.isDirectory()) {
|
|
1561
|
+
return { error: 'sourcePath must be a directory' };
|
|
1562
|
+
}
|
|
1563
|
+
}
|
|
1564
|
+
catch {
|
|
1565
|
+
return { error: 'sourcePath does not exist' };
|
|
1566
|
+
}
|
|
1541
1567
|
// Try to load patterns from source project's memory store
|
|
1542
|
-
const sourceMemoryPath = join(
|
|
1568
|
+
const sourceMemoryPath = join(resolvedSource, MEMORY_DIR, MEMORY_FILE);
|
|
1543
1569
|
let sourceStore = { entries: {}, version: '3.0.0' };
|
|
1544
1570
|
try {
|
|
1545
1571
|
if (existsSync(sourceMemoryPath)) {
|
|
@@ -2051,6 +2077,13 @@ export const hooksTrajectoryStart = {
|
|
|
2051
2077
|
steps: [],
|
|
2052
2078
|
startedAt,
|
|
2053
2079
|
};
|
|
2080
|
+
const MAX_TRAJECTORIES = 10000;
|
|
2081
|
+
if (activeTrajectories.size >= MAX_TRAJECTORIES) {
|
|
2082
|
+
// Evict the oldest trajectory
|
|
2083
|
+
const oldest = activeTrajectories.keys().next().value;
|
|
2084
|
+
if (oldest)
|
|
2085
|
+
activeTrajectories.delete(oldest);
|
|
2086
|
+
}
|
|
2054
2087
|
activeTrajectories.set(trajectoryId, trajectory);
|
|
2055
2088
|
return {
|
|
2056
2089
|
trajectoryId,
|
|
@@ -34,5 +34,6 @@ export { ruvllmWasmTools } from './ruvllm-tools.js';
|
|
|
34
34
|
export { guidanceTools } from './guidance-tools.js';
|
|
35
35
|
export { autopilotTools } from './autopilot-tools.js';
|
|
36
36
|
export { graphifyTools } from './graphify-tools.js';
|
|
37
|
+
export { monographTools } from './monograph-tools.js';
|
|
37
38
|
export { a2aTools } from './a2a-tools.js';
|
|
38
39
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -35,6 +35,7 @@ export { ruvllmWasmTools } from './ruvllm-tools.js';
|
|
|
35
35
|
export { guidanceTools } from './guidance-tools.js';
|
|
36
36
|
export { autopilotTools } from './autopilot-tools.js';
|
|
37
37
|
export { graphifyTools } from './graphify-tools.js';
|
|
38
|
+
export { monographTools } from './monograph-tools.js';
|
|
38
39
|
// A2A Agent Card protocol (source: https://a2a-protocol.org)
|
|
39
40
|
export { a2aTools } from './a2a-tools.js';
|
|
40
41
|
//# sourceMappingURL=index.js.map
|