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
|
@@ -7,6 +7,10 @@
|
|
|
7
7
|
* ADR-072: Autopilot Integration
|
|
8
8
|
* Security: Addresses prototype pollution, NaN bypass, input validation
|
|
9
9
|
*/
|
|
10
|
+
import * as fs from 'fs';
|
|
11
|
+
import * as path from 'path';
|
|
12
|
+
import * as os from 'os';
|
|
13
|
+
import { randomUUID } from 'crypto';
|
|
10
14
|
// ── Constants ─────────────────────────────────────────────────
|
|
11
15
|
export const STATE_DIR = '.monomind/data';
|
|
12
16
|
export const STATE_FILE = `${STATE_DIR}/autopilot-state.json`;
|
|
@@ -71,9 +75,8 @@ export function validateTaskSources(sources) {
|
|
|
71
75
|
}
|
|
72
76
|
// ── State Management ──────────────────────────────────────────
|
|
73
77
|
export function getDefaultState() {
|
|
74
|
-
const crypto = require('crypto');
|
|
75
78
|
return {
|
|
76
|
-
sessionId:
|
|
79
|
+
sessionId: randomUUID(),
|
|
77
80
|
enabled: false,
|
|
78
81
|
startTime: Date.now(),
|
|
79
82
|
iterations: 0,
|
|
@@ -85,8 +88,6 @@ export function getDefaultState() {
|
|
|
85
88
|
};
|
|
86
89
|
}
|
|
87
90
|
export function loadState() {
|
|
88
|
-
const fs = require('fs');
|
|
89
|
-
const path = require('path');
|
|
90
91
|
const filePath = path.resolve(STATE_FILE);
|
|
91
92
|
const defaults = getDefaultState();
|
|
92
93
|
try {
|
|
@@ -111,8 +112,6 @@ export function loadState() {
|
|
|
111
112
|
return defaults;
|
|
112
113
|
}
|
|
113
114
|
export function saveState(state) {
|
|
114
|
-
const fs = require('fs');
|
|
115
|
-
const path = require('path');
|
|
116
115
|
const dir = path.resolve(STATE_DIR);
|
|
117
116
|
if (!fs.existsSync(dir))
|
|
118
117
|
fs.mkdirSync(dir, { recursive: true });
|
|
@@ -120,43 +119,98 @@ export function saveState(state) {
|
|
|
120
119
|
if (state.history.length > MAX_HISTORY_ENTRIES) {
|
|
121
120
|
state.history = state.history.slice(-MAX_HISTORY_ENTRIES);
|
|
122
121
|
}
|
|
123
|
-
|
|
122
|
+
// Unique tmp filename — concurrent autopilot_enable/disable/reset calls
|
|
123
|
+
// must not collide on the same .tmp path.
|
|
124
|
+
const tmpFile = `${path.resolve(STATE_FILE)}.${process.pid}.${Date.now()}.tmp`;
|
|
124
125
|
fs.writeFileSync(tmpFile, JSON.stringify(state, null, 2));
|
|
125
126
|
fs.renameSync(tmpFile, path.resolve(STATE_FILE));
|
|
126
127
|
}
|
|
127
128
|
export function appendLog(entry) {
|
|
128
|
-
const fs = require('fs');
|
|
129
|
-
const path = require('path');
|
|
130
129
|
const filePath = path.resolve(LOG_FILE);
|
|
131
130
|
const dir = path.resolve(STATE_DIR);
|
|
132
131
|
if (!fs.existsSync(dir))
|
|
133
132
|
fs.mkdirSync(dir, { recursive: true });
|
|
134
|
-
|
|
133
|
+
// Append-only NDJSON: atomic at the OS level for individual lines, no
|
|
134
|
+
// read-modify-write race between concurrent MCP tool calls. Compaction is
|
|
135
|
+
// handled lazily by `compactLog()` which the daemon can call periodically.
|
|
136
|
+
// Previously this function did read → push → tmp-write → rename, which
|
|
137
|
+
// under concurrent autopilot_enable/disable/reset calls silently lost
|
|
138
|
+
// entries (last writer wins) and could truncate the log to a single entry
|
|
139
|
+
// if a peer crashed mid-write and the next caller's safeJsonParse threw.
|
|
135
140
|
try {
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
141
|
+
fs.appendFileSync(filePath, JSON.stringify(entry) + '\n', { flag: 'a' });
|
|
142
|
+
}
|
|
143
|
+
catch {
|
|
144
|
+
// Best-effort logging; do not throw from a non-critical observability path.
|
|
145
|
+
}
|
|
146
|
+
// Opportunistic compaction so the file doesn't grow without bound.
|
|
147
|
+
try {
|
|
148
|
+
const stat = fs.statSync(filePath);
|
|
149
|
+
if (stat.size > 4 * 1024 * 1024) {
|
|
150
|
+
compactLog(filePath);
|
|
140
151
|
}
|
|
141
152
|
}
|
|
153
|
+
catch { /* ignore */ }
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Compact NDJSON log down to MAX_LOG_ENTRIES. On parse failure for any line,
|
|
157
|
+
* preserve the corrupt file aside (do not silently destroy data).
|
|
158
|
+
*/
|
|
159
|
+
function compactLog(filePath) {
|
|
160
|
+
let lines;
|
|
161
|
+
try {
|
|
162
|
+
lines = fs.readFileSync(filePath, 'utf-8').split('\n').filter(l => l.trim().length > 0);
|
|
163
|
+
}
|
|
142
164
|
catch {
|
|
143
|
-
|
|
165
|
+
return;
|
|
144
166
|
}
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
167
|
+
const entries = [];
|
|
168
|
+
let corrupt = 0;
|
|
169
|
+
for (const line of lines) {
|
|
170
|
+
try {
|
|
171
|
+
const e = safeJsonParse(line);
|
|
172
|
+
if (e && typeof e === 'object')
|
|
173
|
+
entries.push(e);
|
|
174
|
+
}
|
|
175
|
+
catch {
|
|
176
|
+
corrupt++;
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
if (corrupt > 0) {
|
|
180
|
+
try {
|
|
181
|
+
fs.copyFileSync(filePath, `${filePath}.corrupt-${Date.now()}`);
|
|
182
|
+
}
|
|
183
|
+
catch { /* ignore */ }
|
|
184
|
+
}
|
|
185
|
+
const trimmed = entries.length > MAX_LOG_ENTRIES ? entries.slice(-MAX_LOG_ENTRIES) : entries;
|
|
186
|
+
const tmp = `${filePath}.${process.pid}.${Date.now()}.tmp`;
|
|
187
|
+
fs.writeFileSync(tmp, trimmed.map(e => JSON.stringify(e)).join('\n') + '\n');
|
|
188
|
+
fs.renameSync(tmp, filePath);
|
|
151
189
|
}
|
|
152
190
|
export function loadLog() {
|
|
153
|
-
const fs = require('fs');
|
|
154
|
-
const path = require('path');
|
|
155
191
|
const filePath = path.resolve(LOG_FILE);
|
|
156
192
|
try {
|
|
157
193
|
if (fs.existsSync(filePath)) {
|
|
158
|
-
const
|
|
159
|
-
|
|
194
|
+
const raw = fs.readFileSync(filePath, 'utf-8');
|
|
195
|
+
// Backward compatible: support both old JSON-array form and the new
|
|
196
|
+
// append-only NDJSON form. Prefer NDJSON if the file looks line-based.
|
|
197
|
+
const trimmed = raw.trim();
|
|
198
|
+
if (trimmed.startsWith('[')) {
|
|
199
|
+
const result = safeJsonParse(raw);
|
|
200
|
+
return Array.isArray(result) ? result : [];
|
|
201
|
+
}
|
|
202
|
+
const out = [];
|
|
203
|
+
for (const line of trimmed.split('\n')) {
|
|
204
|
+
if (!line)
|
|
205
|
+
continue;
|
|
206
|
+
try {
|
|
207
|
+
const entry = safeJsonParse(line);
|
|
208
|
+
if (entry && typeof entry === 'object')
|
|
209
|
+
out.push(entry);
|
|
210
|
+
}
|
|
211
|
+
catch { /* skip corrupt line */ }
|
|
212
|
+
}
|
|
213
|
+
return out;
|
|
160
214
|
}
|
|
161
215
|
}
|
|
162
216
|
catch {
|
|
@@ -166,9 +220,6 @@ export function loadLog() {
|
|
|
166
220
|
}
|
|
167
221
|
// ── Task Discovery ────────────────────────────────────────────
|
|
168
222
|
export function discoverTasks(sources) {
|
|
169
|
-
const fs = require('fs');
|
|
170
|
-
const path = require('path');
|
|
171
|
-
const os = require('os');
|
|
172
223
|
const tasks = [];
|
|
173
224
|
// Only process valid sources
|
|
174
225
|
const validSources = sources.filter(s => VALID_TASK_SOURCES.has(s));
|
|
@@ -2,7 +2,11 @@
|
|
|
2
2
|
* Benchmark Runner for Regression Testing (Task 34)
|
|
3
3
|
* Loads benchmark definitions, evaluates quality metrics, and detects regressions.
|
|
4
4
|
*/
|
|
5
|
-
|
|
5
|
+
type BenchmarkDefinition = any;
|
|
6
|
+
type BenchmarkResult = any;
|
|
7
|
+
type BenchmarkBaseline = any;
|
|
8
|
+
type QualityMetric = any;
|
|
9
|
+
type MetricResult = any;
|
|
6
10
|
export declare class BenchmarkRunner {
|
|
7
11
|
private baselines;
|
|
8
12
|
/**
|
|
@@ -34,7 +38,7 @@ export declare class BenchmarkRunner {
|
|
|
34
38
|
private evaluateSingleMetric;
|
|
35
39
|
}
|
|
36
40
|
/** Minimal local type aliases so SwarmBench doesn't depend on the broken
|
|
37
|
-
* @
|
|
41
|
+
* @monomind/shared exports at the top of this file. */
|
|
38
42
|
export interface SwarmBenchTask {
|
|
39
43
|
/** Unique task ID */
|
|
40
44
|
id: string;
|
|
@@ -79,4 +83,5 @@ export declare class SwarmBenchRunner {
|
|
|
79
83
|
/** Expose underlying BenchmarkRunner for general benchmarks. */
|
|
80
84
|
get benchmarkRunner(): BenchmarkRunner;
|
|
81
85
|
}
|
|
86
|
+
export {};
|
|
82
87
|
//# sourceMappingURL=benchmark-runner.d.ts.map
|
|
@@ -14,19 +14,31 @@ export class BenchmarkRunner {
|
|
|
14
14
|
*/
|
|
15
15
|
loadBenchmarks(dir) {
|
|
16
16
|
const benchmarks = [];
|
|
17
|
-
|
|
17
|
+
// Safe-root constraint: reject any path that escapes the working directory
|
|
18
|
+
const safeRoot = path.resolve(process.cwd());
|
|
19
|
+
const resolved = path.resolve(dir);
|
|
20
|
+
const rel = path.relative(safeRoot, resolved);
|
|
21
|
+
if (rel.startsWith('..') || path.isAbsolute(rel))
|
|
22
|
+
return [];
|
|
23
|
+
if (!fs.existsSync(resolved)) {
|
|
18
24
|
return benchmarks;
|
|
19
25
|
}
|
|
20
|
-
const files = fs.readdirSync(
|
|
26
|
+
const files = fs.readdirSync(resolved).filter((f) => f.endsWith('.json'));
|
|
21
27
|
for (const file of files) {
|
|
22
|
-
const filePath = path.join(
|
|
28
|
+
const filePath = path.join(resolved, file);
|
|
23
29
|
const raw = fs.readFileSync(filePath, 'utf-8');
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
30
|
+
try {
|
|
31
|
+
const parsed = JSON.parse(raw);
|
|
32
|
+
if (Array.isArray(parsed)) {
|
|
33
|
+
benchmarks.push(...parsed);
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
benchmarks.push(parsed);
|
|
37
|
+
}
|
|
27
38
|
}
|
|
28
|
-
|
|
29
|
-
|
|
39
|
+
catch {
|
|
40
|
+
// skip malformed file
|
|
41
|
+
continue;
|
|
30
42
|
}
|
|
31
43
|
}
|
|
32
44
|
return benchmarks;
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Metric Evaluators for Benchmark Runner (Task 34)
|
|
3
3
|
* Individual metric evaluation functions for quality assessment.
|
|
4
4
|
*/
|
|
5
|
-
|
|
5
|
+
type MetricResult = any;
|
|
6
6
|
/**
|
|
7
7
|
* Checks whether the output contains the expected substring.
|
|
8
8
|
*/
|
|
@@ -32,4 +32,5 @@ export declare function jsonValid(output: string): MetricResult;
|
|
|
32
32
|
export declare function customRegex(output: string, config: {
|
|
33
33
|
pattern: string;
|
|
34
34
|
}): MetricResult;
|
|
35
|
+
export {};
|
|
35
36
|
//# sourceMappingURL=metric-evaluators.d.ts.map
|
|
@@ -76,12 +76,35 @@ export function jsonValid(output) {
|
|
|
76
76
|
* Checks whether the output matches a custom regex pattern.
|
|
77
77
|
*/
|
|
78
78
|
export function customRegex(output, config) {
|
|
79
|
+
// Reject overly long patterns and those with nested/repeated quantifiers
|
|
80
|
+
// (catastrophic backtracking — a malicious benchmark definition could
|
|
81
|
+
// pin CI runners with `^(a+)+$` against a long output string).
|
|
82
|
+
if (typeof config.pattern !== 'string' || config.pattern.length > 200) {
|
|
83
|
+
return {
|
|
84
|
+
type: 'custom_regex',
|
|
85
|
+
passed: false,
|
|
86
|
+
actual: null,
|
|
87
|
+
expected: config.pattern,
|
|
88
|
+
message: 'Pattern rejected: too long or invalid',
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
if (/(\(.*[+*?].*\)|[+*?]){2,}|\{[0-9,]+\}.*[+*?]|\([^)]*\|[^)]*\)[+*?{]/.test(config.pattern)) {
|
|
92
|
+
return {
|
|
93
|
+
type: 'custom_regex',
|
|
94
|
+
passed: false,
|
|
95
|
+
actual: null,
|
|
96
|
+
expected: config.pattern,
|
|
97
|
+
message: 'Pattern rejected: nested quantifiers risk catastrophic backtracking',
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
// Cap output length so even slow patterns can't burn unlimited CPU
|
|
101
|
+
const boundedOutput = output.length > 1024 * 1024 ? output.slice(0, 1024 * 1024) : output;
|
|
79
102
|
const regex = new RegExp(config.pattern);
|
|
80
|
-
const match = regex.test(
|
|
103
|
+
const match = regex.test(boundedOutput);
|
|
81
104
|
return {
|
|
82
105
|
type: 'custom_regex',
|
|
83
106
|
passed: match,
|
|
84
|
-
actual: match ?
|
|
107
|
+
actual: match ? boundedOutput.match(regex)?.[0] ?? null : null,
|
|
85
108
|
expected: config.pattern,
|
|
86
109
|
message: match
|
|
87
110
|
? `Output matches pattern /${config.pattern}/`
|
|
@@ -34,7 +34,9 @@ function updateSwarmActivityMetrics(agentCountDelta) {
|
|
|
34
34
|
swarm.coordination_active = newCount > 0;
|
|
35
35
|
data.swarm = swarm;
|
|
36
36
|
data.timestamp = new Date().toISOString();
|
|
37
|
-
|
|
37
|
+
const tmpPath = activityPath + '.tmp';
|
|
38
|
+
fs.writeFileSync(tmpPath, JSON.stringify(data, null, 2));
|
|
39
|
+
fs.renameSync(tmpPath, activityPath);
|
|
38
40
|
}
|
|
39
41
|
catch {
|
|
40
42
|
// Non-critical — don't fail the command if metrics update fails
|
|
@@ -125,7 +127,7 @@ const spawnCommand = {
|
|
|
125
127
|
const taskDescription = ctx.flags.task;
|
|
126
128
|
if (!agentType && taskDescription) {
|
|
127
129
|
try {
|
|
128
|
-
const { RouteLayer, ALL_ROUTES } = await import('@
|
|
130
|
+
const { RouteLayer, ALL_ROUTES } = await import('@monomind/routing');
|
|
129
131
|
const layer = new RouteLayer({ routes: ALL_ROUTES });
|
|
130
132
|
const routeResult = await layer.route(taskDescription);
|
|
131
133
|
agentType = routeResult.agentSlug;
|
|
@@ -154,7 +156,7 @@ const spawnCommand = {
|
|
|
154
156
|
model: ctx.flags.model,
|
|
155
157
|
task: ctx.flags.task,
|
|
156
158
|
timeout: ctx.flags.timeout,
|
|
157
|
-
autoTools: ctx.flags
|
|
159
|
+
autoTools: ctx.flags['auto-tools'],
|
|
158
160
|
},
|
|
159
161
|
priority: 'normal',
|
|
160
162
|
metadata: {
|
|
@@ -602,7 +604,7 @@ const poolCommand = {
|
|
|
602
604
|
size: ctx.flags.size,
|
|
603
605
|
min: ctx.flags.min,
|
|
604
606
|
max: ctx.flags.max,
|
|
605
|
-
autoScale: ctx.flags
|
|
607
|
+
autoScale: ctx.flags['auto-scale'] ?? true,
|
|
606
608
|
});
|
|
607
609
|
if (ctx.flags.format === 'json') {
|
|
608
610
|
output.printJson(result);
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
* Sign, publish, and hot-patch RVFA appliances.
|
|
4
4
|
*/
|
|
5
5
|
import { output } from '../output.js';
|
|
6
|
+
import * as path from 'node:path';
|
|
6
7
|
function fmtSize(bytes) {
|
|
7
8
|
if (bytes < 1024)
|
|
8
9
|
return `${bytes} B`;
|
|
@@ -15,6 +16,16 @@ function fmtSize(bytes) {
|
|
|
15
16
|
function errMsg(err) {
|
|
16
17
|
return err instanceof Error ? err.message : String(err);
|
|
17
18
|
}
|
|
19
|
+
function checkRelativePath(userPath) {
|
|
20
|
+
if (!path.isAbsolute(userPath)) {
|
|
21
|
+
const resolved = path.resolve(userPath);
|
|
22
|
+
const rel = path.relative(process.cwd(), resolved);
|
|
23
|
+
if (rel.startsWith('..')) {
|
|
24
|
+
return `Relative path '${userPath}' escapes the working directory.`;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
return null;
|
|
28
|
+
}
|
|
18
29
|
const fail = (msg, detail) => {
|
|
19
30
|
output.printError(msg, detail);
|
|
20
31
|
return { success: false, exitCode: 1 };
|
|
@@ -69,6 +80,9 @@ export const signCommand = {
|
|
|
69
80
|
hdr('Signing RVFA Appliance');
|
|
70
81
|
let privateKey;
|
|
71
82
|
if (keyPath) {
|
|
83
|
+
const pathErr = checkRelativePath(keyPath);
|
|
84
|
+
if (pathErr)
|
|
85
|
+
return fail(pathErr);
|
|
72
86
|
const fs = await import('fs');
|
|
73
87
|
privateKey = fs.readFileSync(keyPath);
|
|
74
88
|
}
|
|
@@ -162,12 +176,18 @@ export const updateAppCommand = {
|
|
|
162
176
|
output.writeln();
|
|
163
177
|
let patchBuf;
|
|
164
178
|
if (patchPath) {
|
|
179
|
+
const patchPathErr = checkRelativePath(patchPath);
|
|
180
|
+
if (patchPathErr)
|
|
181
|
+
return fail(patchPathErr);
|
|
165
182
|
if (!(await requireFile(patchPath)))
|
|
166
183
|
return { success: false, exitCode: 1 };
|
|
167
184
|
patchBuf = fs.readFileSync(patchPath);
|
|
168
185
|
output.printInfo(`Patch file: ${patchPath} (${fmtSize(patchBuf.length)})`);
|
|
169
186
|
}
|
|
170
187
|
else {
|
|
188
|
+
const dataPathErr = checkRelativePath(dataPath);
|
|
189
|
+
if (dataPathErr)
|
|
190
|
+
return fail(dataPathErr);
|
|
171
191
|
if (!(await requireFile(dataPath)))
|
|
172
192
|
return { success: false, exitCode: 1 };
|
|
173
193
|
const newData = fs.readFileSync(dataPath);
|
|
@@ -186,6 +206,9 @@ export const updateAppCommand = {
|
|
|
186
206
|
let pubKey;
|
|
187
207
|
if (ctx.flags['public-key']) {
|
|
188
208
|
const pkPath = ctx.flags['public-key'];
|
|
209
|
+
const pkPathErr = checkRelativePath(pkPath);
|
|
210
|
+
if (pkPathErr)
|
|
211
|
+
return fail(pkPathErr);
|
|
189
212
|
if (!(await requireFile(pkPath)))
|
|
190
213
|
return { success: false, exitCode: 1 };
|
|
191
214
|
pubKey = fs.readFileSync(pkPath);
|
|
@@ -6,6 +6,8 @@
|
|
|
6
6
|
*/
|
|
7
7
|
import { output } from '../output.js';
|
|
8
8
|
import { loadState, saveState, appendLog, loadLog, discoverTasks, getProgress, calculateReward, tryLoadLearning, validateNumber, validateTaskSources, LOG_FILE, } from '../autopilot-state.js';
|
|
9
|
+
import { writeFileSync } from 'node:fs';
|
|
10
|
+
import { resolve } from 'node:path';
|
|
9
11
|
// ── Check Handler (for Stop hook) ─────────────────────────────
|
|
10
12
|
export async function autopilotCheck() {
|
|
11
13
|
const state = loadState();
|
|
@@ -182,10 +184,8 @@ const logCommand = {
|
|
|
182
184
|
],
|
|
183
185
|
action: async (ctx) => {
|
|
184
186
|
if (ctx.flags?.clear) {
|
|
185
|
-
const fs = require('fs');
|
|
186
|
-
const path = require('path');
|
|
187
187
|
try {
|
|
188
|
-
|
|
188
|
+
writeFileSync(resolve(LOG_FILE), '[]');
|
|
189
189
|
}
|
|
190
190
|
catch { /* ignore */ }
|
|
191
191
|
output.writeln('Autopilot log cleared');
|
|
@@ -5,8 +5,9 @@
|
|
|
5
5
|
* @module v1/cli/commands/benchmark
|
|
6
6
|
*/
|
|
7
7
|
import { output } from '../output.js';
|
|
8
|
-
import { writeFileSync, existsSync, mkdirSync } from 'node:fs';
|
|
8
|
+
import { writeFileSync, renameSync, readFileSync, existsSync, mkdirSync } from 'node:fs';
|
|
9
9
|
import { join } from 'node:path';
|
|
10
|
+
import { BenchmarkRunner } from '../benchmarks/benchmark-runner.js';
|
|
10
11
|
// ============================================================================
|
|
11
12
|
// Pretrain Benchmark Subcommand
|
|
12
13
|
// ============================================================================
|
|
@@ -50,7 +51,9 @@ const pretrainCommand = {
|
|
|
50
51
|
mkdirSync(resultsDir, { recursive: true });
|
|
51
52
|
}
|
|
52
53
|
const savePath = saveFile.startsWith('/') ? saveFile : join(resultsDir, saveFile);
|
|
53
|
-
|
|
54
|
+
const saveTmp = savePath + '.tmp';
|
|
55
|
+
writeFileSync(saveTmp, JSON.stringify(results, null, 2));
|
|
56
|
+
renameSync(saveTmp, savePath);
|
|
54
57
|
output.writeln(output.success(`Results saved to ${savePath}`));
|
|
55
58
|
}
|
|
56
59
|
const allPassed = results.results.every(r => r.targetMet);
|
|
@@ -276,7 +279,7 @@ const memoryCommand = {
|
|
|
276
279
|
searchEntries = memory.searchEntries;
|
|
277
280
|
}
|
|
278
281
|
catch {
|
|
279
|
-
// @
|
|
282
|
+
// @monomind/memory not available — return null metrics instead of fake numbers
|
|
280
283
|
storeEntry = async () => ({ success: true });
|
|
281
284
|
searchEntries = async () => ({ results: [], searchTime: 0 }); // 0 = no-op fallback, not a real benchmark
|
|
282
285
|
}
|
|
@@ -410,17 +413,121 @@ const allCommand = {
|
|
|
410
413
|
mkdirSync(resultsDir, { recursive: true });
|
|
411
414
|
}
|
|
412
415
|
const savePath = saveFile.startsWith('/') ? saveFile : join(resultsDir, saveFile);
|
|
413
|
-
|
|
416
|
+
const saveTmp2 = savePath + '.tmp';
|
|
417
|
+
writeFileSync(saveTmp2, JSON.stringify({
|
|
414
418
|
timestamp: new Date().toISOString(),
|
|
415
419
|
duration: totalDuration,
|
|
416
420
|
results: allResults,
|
|
417
421
|
}, null, 2));
|
|
422
|
+
renameSync(saveTmp2, savePath);
|
|
418
423
|
output.writeln(output.success(`Results saved to ${savePath}`));
|
|
419
424
|
}
|
|
420
425
|
return { success: true, message: 'All benchmarks complete' };
|
|
421
426
|
},
|
|
422
427
|
};
|
|
423
428
|
// ============================================================================
|
|
429
|
+
// Regression Benchmark Subcommand
|
|
430
|
+
// ============================================================================
|
|
431
|
+
const regressionCommand = {
|
|
432
|
+
name: 'regression',
|
|
433
|
+
description: 'Quality regression testing using benchmark definitions and baselines',
|
|
434
|
+
options: [
|
|
435
|
+
{ name: 'suite', short: 's', type: 'string', description: 'Path to benchmark definitions directory', default: '.monomind/benchmarks/definitions' },
|
|
436
|
+
{ name: 'benchmark-id', short: 'b', type: 'string', description: 'Run a specific benchmark by ID' },
|
|
437
|
+
{ name: 'agent-output', short: 'a', type: 'string', description: 'Path to file containing agent output to evaluate' },
|
|
438
|
+
{ name: 'pin-baseline', type: 'boolean', description: 'Save current results as the new baseline', default: 'false' },
|
|
439
|
+
{ name: 'output', short: 'o', type: 'string', description: 'Output format: text, json', default: 'text' },
|
|
440
|
+
],
|
|
441
|
+
examples: [
|
|
442
|
+
{ command: 'monomind benchmark regression', description: 'List all benchmark definitions' },
|
|
443
|
+
{ command: 'monomind benchmark regression -b agent-spawn -a output.txt', description: 'Evaluate agent output against a benchmark' },
|
|
444
|
+
{ command: 'monomind benchmark regression -b agent-spawn -a output.txt --pin-baseline', description: 'Evaluate and pin results as new baseline' },
|
|
445
|
+
],
|
|
446
|
+
action: async (ctx) => {
|
|
447
|
+
const suiteDir = ctx.flags.suite || '.monomind/benchmarks/definitions';
|
|
448
|
+
const benchmarkId = ctx.flags['benchmark-id'];
|
|
449
|
+
const agentOutputFile = ctx.flags['agent-output'];
|
|
450
|
+
const pinBaseline = ctx.flags['pin-baseline'] === true;
|
|
451
|
+
const outputFormat = ctx.flags.output || 'text';
|
|
452
|
+
const runner = new BenchmarkRunner();
|
|
453
|
+
const baselinesDir = join(process.cwd(), '.monomind', 'benchmarks', 'baselines');
|
|
454
|
+
const definitions = runner.loadBenchmarks(join(process.cwd(), suiteDir));
|
|
455
|
+
if (definitions.length === 0) {
|
|
456
|
+
output.writeln(output.dim(`No benchmark definitions found in ${suiteDir}`));
|
|
457
|
+
output.writeln(output.dim('Create JSON files there to define quality benchmarks.'));
|
|
458
|
+
return { success: true, message: 'No benchmarks defined' };
|
|
459
|
+
}
|
|
460
|
+
// List mode — no agent output provided
|
|
461
|
+
if (!agentOutputFile) {
|
|
462
|
+
output.writeln();
|
|
463
|
+
output.writeln(output.bold('Benchmark Definitions'));
|
|
464
|
+
output.writeln(output.dim('─'.repeat(50)));
|
|
465
|
+
for (const def of definitions) {
|
|
466
|
+
output.writeln(` ${output.highlight(def.benchmarkId)} ${output.dim(def.agentSlug)} — ${def.qualityMetrics?.length ?? 0} metrics`);
|
|
467
|
+
}
|
|
468
|
+
output.writeln();
|
|
469
|
+
output.writeln(output.dim('Use --agent-output <file> to evaluate against a benchmark.'));
|
|
470
|
+
return { success: true, message: `${definitions.length} benchmarks loaded` };
|
|
471
|
+
}
|
|
472
|
+
// Evaluation mode
|
|
473
|
+
if (!existsSync(agentOutputFile)) {
|
|
474
|
+
output.writeln(output.error(`Agent output file not found: ${agentOutputFile}`));
|
|
475
|
+
return { success: false, message: 'Agent output file not found' };
|
|
476
|
+
}
|
|
477
|
+
const agentOutput = readFileSync(agentOutputFile, 'utf-8');
|
|
478
|
+
const targetDefs = benchmarkId
|
|
479
|
+
? definitions.filter((d) => d.benchmarkId === benchmarkId)
|
|
480
|
+
: definitions;
|
|
481
|
+
if (targetDefs.length === 0) {
|
|
482
|
+
output.writeln(output.error(`No benchmark found with id: ${benchmarkId}`));
|
|
483
|
+
return { success: false, message: 'Benchmark not found' };
|
|
484
|
+
}
|
|
485
|
+
const results = targetDefs.map((def) => runner.runBenchmark(def, agentOutput));
|
|
486
|
+
if (outputFormat === 'json') {
|
|
487
|
+
output.writeln(JSON.stringify(results, null, 2));
|
|
488
|
+
}
|
|
489
|
+
else {
|
|
490
|
+
output.writeln();
|
|
491
|
+
output.writeln(output.bold('Regression Results'));
|
|
492
|
+
output.writeln(output.dim('─'.repeat(50)));
|
|
493
|
+
for (const result of results) {
|
|
494
|
+
const status = result.passed ? output.success('PASS') : output.error('FAIL');
|
|
495
|
+
output.writeln(` ${status} ${result.benchmarkId} ${output.dim(`${result.durationMs}ms`)}`);
|
|
496
|
+
for (const m of result.metricResults) {
|
|
497
|
+
const mStatus = m.passed ? ' ✓' : ' ✗';
|
|
498
|
+
output.writeln(` ${mStatus} ${m.type}`);
|
|
499
|
+
}
|
|
500
|
+
}
|
|
501
|
+
output.writeln();
|
|
502
|
+
}
|
|
503
|
+
// Baseline comparison
|
|
504
|
+
const baselinePath = join(baselinesDir, `${benchmarkId ?? 'all'}.json`);
|
|
505
|
+
if (existsSync(baselinePath)) {
|
|
506
|
+
const baseline = JSON.parse(readFileSync(baselinePath, 'utf-8'));
|
|
507
|
+
const hasRegression = runner.detectRegression(results, baseline);
|
|
508
|
+
if (hasRegression) {
|
|
509
|
+
output.writeln(output.error(`Regression detected — pass rate dropped below baseline (${(baseline.passRate * 100).toFixed(0)}%)`));
|
|
510
|
+
}
|
|
511
|
+
else {
|
|
512
|
+
output.writeln(output.success('No regression detected vs baseline'));
|
|
513
|
+
}
|
|
514
|
+
}
|
|
515
|
+
// Pin baseline
|
|
516
|
+
if (pinBaseline) {
|
|
517
|
+
if (!existsSync(baselinesDir))
|
|
518
|
+
mkdirSync(baselinesDir, { recursive: true });
|
|
519
|
+
const id = benchmarkId ?? 'all';
|
|
520
|
+
const baseline = runner.pinBaseline(id, results);
|
|
521
|
+
const baselineTmp = baselinePath + '.tmp';
|
|
522
|
+
writeFileSync(baselineTmp, JSON.stringify(baseline, null, 2));
|
|
523
|
+
renameSync(baselineTmp, baselinePath);
|
|
524
|
+
output.writeln(output.success(`Baseline pinned: ${(baseline.passRate * 100).toFixed(0)}% pass rate`));
|
|
525
|
+
}
|
|
526
|
+
const allPassed = results.every((r) => r.passed);
|
|
527
|
+
return { success: allPassed, message: allPassed ? 'All metrics passed' : 'Some metrics failed' };
|
|
528
|
+
},
|
|
529
|
+
};
|
|
530
|
+
// ============================================================================
|
|
424
531
|
// Main Benchmark Command
|
|
425
532
|
// ============================================================================
|
|
426
533
|
export const benchmarkCommand = {
|
|
@@ -431,12 +538,15 @@ export const benchmarkCommand = {
|
|
|
431
538
|
neuralCommand,
|
|
432
539
|
memoryCommand,
|
|
433
540
|
allCommand,
|
|
541
|
+
regressionCommand,
|
|
434
542
|
],
|
|
435
543
|
examples: [
|
|
436
544
|
{ command: 'monomind benchmark pretrain', description: 'Benchmark pre-training system' },
|
|
437
545
|
{ command: 'monomind benchmark neural', description: 'Benchmark neural operations' },
|
|
438
546
|
{ command: 'monomind benchmark memory', description: 'Benchmark memory operations' },
|
|
439
547
|
{ command: 'monomind benchmark all', description: 'Run all benchmarks' },
|
|
548
|
+
{ command: 'monomind benchmark regression', description: 'List quality regression benchmarks' },
|
|
549
|
+
{ command: 'monomind benchmark regression -b my-bench -a output.txt', description: 'Evaluate agent output against a benchmark' },
|
|
440
550
|
],
|
|
441
551
|
action: async (_ctx) => {
|
|
442
552
|
output.writeln();
|
|
@@ -444,10 +554,11 @@ export const benchmarkCommand = {
|
|
|
444
554
|
output.writeln(output.dim('─'.repeat(50)));
|
|
445
555
|
output.writeln();
|
|
446
556
|
output.writeln('Available subcommands:');
|
|
447
|
-
output.writeln(` ${output.highlight('pretrain')}
|
|
448
|
-
output.writeln(` ${output.highlight('neural')}
|
|
449
|
-
output.writeln(` ${output.highlight('memory')}
|
|
450
|
-
output.writeln(` ${output.highlight('all')}
|
|
557
|
+
output.writeln(` ${output.highlight('pretrain')} - Benchmark self-learning pre-training (SONA, EWC++, MoE)`);
|
|
558
|
+
output.writeln(` ${output.highlight('neural')} - Benchmark neural operations (embeddings, WASM)`);
|
|
559
|
+
output.writeln(` ${output.highlight('memory')} - Benchmark memory operations (HNSW, store, search)`);
|
|
560
|
+
output.writeln(` ${output.highlight('all')} - Run all benchmark suites`);
|
|
561
|
+
output.writeln(` ${output.highlight('regression')} - Quality regression testing with baselines`);
|
|
451
562
|
output.writeln();
|
|
452
563
|
output.writeln('Examples:');
|
|
453
564
|
output.writeln(' monomind benchmark pretrain -i 200');
|