monomind 1.8.0 → 1.9.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/agents/design/design-monodesign.md +121 -0
- package/.claude/agents/github/issue-tracker.md +12 -12
- package/.claude/agents/github/pr-manager.md +10 -10
- package/.claude/agents/github/release-manager.md +49 -105
- package/.claude/agents/github/repo-architect.md +73 -92
- package/.claude/agents/github/sync-coordinator.md +55 -123
- package/.claude/agents/marketing/marketing-competitive-content.md +155 -0
- package/.claude/agents/marketing/marketing-content-creator.md +13 -0
- package/.claude/agents/marketing/marketing-cro-specialist.md +147 -0
- package/.claude/agents/marketing/marketing-email-specialist.md +90 -0
- package/.claude/agents/marketing/marketing-launch-strategist.md +129 -0
- package/.claude/agents/marketing/marketing-pricing-strategist.md +127 -0
- package/.claude/agents/specialists/integration-architect.md +94 -0
- package/.claude/commands/agents/README.md +4 -0
- package/.claude/commands/agents/agent-capabilities.md +6 -2
- package/.claude/commands/agents/agent-coordination.md +4 -0
- package/.claude/commands/agents/agent-spawning.md +4 -0
- package/.claude/commands/agents/agent-types.md +6 -2
- package/.claude/commands/analysis/README.md +14 -5
- package/.claude/commands/analysis/bottleneck-detect.md +30 -123
- package/.claude/commands/analysis/performance-bottlenecks.md +14 -14
- package/.claude/commands/analysis/performance-report.md +38 -11
- package/.claude/commands/analysis/token-efficiency.md +13 -16
- package/.claude/commands/analysis/token-usage.md +34 -12
- package/.claude/commands/automation/README.md +15 -5
- package/.claude/commands/automation/auto-agent.md +49 -85
- package/.claude/commands/automation/self-healing.md +20 -18
- package/.claude/commands/automation/session-memory.md +28 -29
- package/.claude/commands/automation/smart-agents.md +17 -9
- package/.claude/commands/automation/smart-spawn.md +52 -11
- package/.claude/commands/automation/workflow-select.md +46 -11
- package/.claude/commands/browse.md +5 -0
- package/.claude/commands/coordination/README.md +9 -5
- package/.claude/commands/coordination/agent-spawn.md +53 -9
- package/.claude/commands/coordination/swarm-init.md +39 -42
- package/.claude/commands/coordination/task-orchestrate.md +65 -11
- package/.claude/commands/github/README.md +21 -8
- package/.claude/commands/github/github-modes.md +9 -5
- package/.claude/commands/github/issue-tracker.md +34 -33
- package/.claude/commands/github/pr-manager.md +20 -17
- package/.claude/commands/github/release-manager.md +37 -49
- package/.claude/commands/github/repo-architect.md +39 -41
- package/.claude/commands/github/sync-coordinator.md +45 -49
- package/.claude/commands/hive-mind/README.md +42 -17
- package/.claude/commands/hive-mind/hive-mind-consensus.md +68 -4
- package/.claude/commands/hive-mind/hive-mind-init.md +55 -5
- package/.claude/commands/hive-mind/hive-mind-memory.md +69 -4
- package/.claude/commands/hive-mind/hive-mind-spawn.md +71 -10
- package/.claude/commands/hive-mind/hive-mind-status.md +52 -4
- package/.claude/commands/hive-mind/hive-mind-stop.md +51 -4
- package/.claude/commands/hive-mind/hive-mind.md +74 -14
- package/.claude/commands/hooks/README.md +62 -7
- package/.claude/commands/hooks/overview.md +94 -35
- package/.claude/commands/hooks/post-edit.md +48 -87
- package/.claude/commands/hooks/post-task.md +37 -87
- package/.claude/commands/hooks/pre-edit.md +52 -84
- package/.claude/commands/hooks/pre-task.md +46 -81
- package/.claude/commands/hooks/session-end.md +49 -85
- package/.claude/commands/hooks/setup.md +87 -58
- package/.claude/commands/mastermind/_repeat.md +308 -0
- package/.claude/commands/mastermind/architect.md +49 -0
- package/.claude/commands/mastermind/brain.md +98 -0
- package/.claude/commands/mastermind/build.md +22 -0
- package/.claude/commands/mastermind/content.md +22 -0
- package/.claude/commands/mastermind/createorg.md +94 -0
- package/.claude/commands/mastermind/finance.md +22 -0
- package/.claude/commands/mastermind/idea.md +22 -0
- package/.claude/commands/mastermind/marketing.md +22 -0
- package/.claude/commands/mastermind/master.md +379 -0
- package/.claude/commands/mastermind/ops.md +22 -0
- package/.claude/commands/mastermind/release.md +22 -0
- package/.claude/commands/mastermind/research.md +22 -0
- package/.claude/commands/mastermind/review.md +22 -0
- package/.claude/commands/mastermind/runorg.md +106 -0
- package/.claude/commands/mastermind/sales.md +22 -0
- package/.claude/commands/mastermind/techport.md +17 -0
- package/.claude/commands/memory/README.md +75 -5
- package/.claude/commands/memory/memory-search.md +63 -11
- package/.claude/commands/monitoring/README.md +64 -4
- package/.claude/commands/monitoring/agent-metrics.md +50 -10
- package/.claude/commands/monitoring/agents.md +59 -32
- package/.claude/commands/monitoring/status.md +96 -34
- package/.claude/commands/monograph/README.md +102 -0
- package/.claude/commands/monograph/monograph-build.md +79 -0
- package/.claude/commands/monograph/monograph-search.md +96 -0
- package/.claude/commands/monograph/monograph-stats.md +53 -0
- package/.claude/commands/monograph/monograph-watch.md +63 -0
- package/.claude/commands/monograph/monograph-wiki.md +91 -0
- package/.claude/commands/monomind/createtask.md +277 -0
- package/.claude/commands/{monomind-do.md → monomind/do.md} +21 -8
- package/.claude/commands/monomind/help.md +118 -0
- package/.claude/commands/{monomind-idea.md → monomind/idea.md} +22 -28
- package/.claude/commands/{monomind-improve.md → monomind/improve.md} +21 -27
- package/.claude/commands/monomind/memory.md +230 -0
- package/.claude/commands/monomind/repeat.md +201 -0
- package/.claude/commands/monomind/review.md +313 -0
- package/.claude/commands/monomind/specialagents.md +125 -0
- package/.claude/commands/monomind/swarm.md +161 -0
- package/.claude/commands/monomind/understand.md +148 -0
- package/.claude/commands/optimization/README.md +69 -5
- package/.claude/commands/optimization/auto-topology.md +66 -43
- package/.claude/commands/optimization/parallel-execution.md +65 -39
- package/.claude/commands/optimization/performance-optimize.md +79 -0
- package/.claude/commands/pair/README.md +48 -230
- package/.claude/commands/pair/examples.md +85 -441
- package/.claude/commands/pair/modes.md +77 -303
- package/.claude/commands/pair/session.md +76 -359
- package/.claude/commands/sparc/analyzer.md +9 -26
- package/.claude/commands/sparc/architect.md +8 -25
- package/.claude/commands/sparc/ask.md +27 -68
- package/.claude/commands/sparc/batch-executor.md +8 -25
- package/.claude/commands/sparc/code.md +12 -53
- package/.claude/commands/sparc/coder.md +8 -25
- package/.claude/commands/sparc/debug.md +12 -53
- package/.claude/commands/sparc/debugger.md +8 -25
- package/.claude/commands/sparc/designer.md +8 -25
- package/.claude/commands/sparc/devops.md +16 -57
- package/.claude/commands/sparc/docs-writer.md +12 -53
- package/.claude/commands/sparc/documenter.md +8 -25
- package/.claude/commands/sparc/innovator.md +8 -25
- package/.claude/commands/sparc/integration.md +12 -53
- package/.claude/commands/sparc/mcp.md +12 -53
- package/.claude/commands/sparc/memory-manager.md +28 -25
- package/.claude/commands/sparc/optimizer.md +8 -25
- package/.claude/commands/sparc/orchestrator.md +35 -97
- package/.claude/commands/sparc/post-deployment-monitoring-mode.md +13 -54
- package/.claude/commands/sparc/refinement-optimization-mode.md +13 -54
- package/.claude/commands/sparc/researcher.md +8 -25
- package/.claude/commands/sparc/reviewer.md +8 -25
- package/.claude/commands/sparc/security-review.md +13 -54
- package/.claude/commands/sparc/sparc-modes.md +97 -151
- package/.claude/commands/sparc/sparc.md +16 -56
- package/.claude/commands/sparc/spec-pseudocode.md +13 -54
- package/.claude/commands/sparc/supabase-admin.md +19 -66
- package/.claude/commands/sparc/swarm-coordinator.md +21 -25
- package/.claude/commands/sparc/tdd.md +8 -25
- package/.claude/commands/sparc/tester.md +8 -25
- package/.claude/commands/sparc/tutorial.md +12 -53
- package/.claude/commands/sparc/workflow-manager.md +8 -25
- package/.claude/commands/sparc.md +76 -130
- package/.claude/commands/stream-chain/pipeline.md +72 -77
- package/.claude/commands/stream-chain/run.md +133 -47
- package/.claude/commands/swarm/README.md +37 -12
- package/.claude/commands/swarm/analysis.md +47 -69
- package/.claude/commands/swarm/development.md +45 -69
- package/.claude/commands/swarm/examples.md +77 -142
- package/.claude/commands/swarm/maintenance.md +47 -74
- package/.claude/commands/swarm/optimization.md +54 -87
- package/.claude/commands/swarm/research.md +47 -107
- package/.claude/commands/swarm/swarm-analysis.md +58 -4
- package/.claude/commands/swarm/swarm-background.md +61 -4
- package/.claude/commands/swarm/swarm-modes.md +63 -4
- package/.claude/commands/swarm/swarm-monitor.md +50 -4
- package/.claude/commands/swarm/swarm-status.md +40 -4
- package/.claude/commands/swarm/swarm-strategies.md +73 -5
- package/.claude/commands/swarm/swarm.md +70 -18
- package/.claude/commands/swarm/testing.md +51 -102
- package/.claude/commands/tokens.md +6 -1
- package/.claude/commands/training/README.md +36 -6
- package/.claude/commands/training/model-update.md +68 -15
- package/.claude/commands/training/neural-patterns.md +54 -55
- package/.claude/commands/training/neural-train.md +70 -16
- package/.claude/commands/training/pattern-learn.md +60 -16
- package/.claude/commands/training/specialization.md +78 -49
- package/.claude/commands/truth/start.md +87 -109
- package/.claude/commands/ts.md +7 -2
- package/.claude/commands/verify/check.md +90 -34
- package/.claude/commands/verify/start.md +71 -94
- package/.claude/commands/workflows/README.md +62 -6
- package/.claude/commands/workflows/development.md +69 -61
- package/.claude/commands/workflows/research.md +73 -47
- package/.claude/commands/workflows/workflow-create.md +75 -16
- package/.claude/commands/workflows/workflow-execute.md +94 -16
- package/.claude/commands/workflows/workflow-export.md +81 -16
- package/.claude/helpers/control-start.cjs +91 -0
- package/.claude/helpers/extras-registry.json +4104 -1991
- package/.claude/helpers/graphify-freshen.cjs +44 -13
- package/.claude/helpers/hook-handler.cjs +256 -1
- package/.claude/helpers/learning-service.mjs +0 -0
- package/.claude/helpers/loop-tracker.cjs +107 -0
- package/.claude/helpers/metrics-db.mjs +0 -0
- package/.claude/helpers/router.cjs +48 -68
- package/.claude/helpers/skill-registry.json +89 -104
- package/.claude/helpers/statusline.cjs +33 -2
- package/.claude/helpers/swarm-hooks.sh +0 -0
- package/.claude/scheduled_tasks.lock +1 -0
- package/.claude/settings.json +15 -0
- package/.claude/skills/.monomind/data/ranked-context.json +5 -0
- package/.claude/skills/.monomind/sessions/current.json +13 -0
- package/.claude/skills/.monomind/sessions/session-1777829336455.json +15 -0
- package/.claude/skills/.monomind/sessions/session-1777831614725.json +15 -0
- package/.claude/skills/.monomind/sessions/session-1777832095857.json +15 -0
- package/.claude/skills/.monomind/sessions/session-1777839814183.json +15 -0
- package/.claude/skills/.monomind/sessions/session-1777841847131.json +15 -0
- package/.claude/skills/.monomind/sessions/session-1777843309463.json +15 -0
- package/.claude/skills/.monomind/sessions/session-1777880867159.json +15 -0
- package/.claude/skills/.monomind/sessions/session-1777881884593.json +15 -0
- package/.claude/skills/.monomind/sessions/session-1777884090471.json +15 -0
- package/.claude/skills/.monomind/sessions/session-1777884808221.json +15 -0
- package/.claude/skills/.monomind/sessions/session-1777885672155.json +15 -0
- package/.claude/skills/.monomind/sessions/session-1777886852818.json +15 -0
- package/.claude/skills/.monomind/sessions/session-1777896532690.json +15 -0
- package/.claude/skills/agentdb-advanced/SKILL.md +11 -12
- package/.claude/skills/agentdb-learning/SKILL.md +20 -21
- package/.claude/skills/agentdb-memory-patterns/SKILL.md +28 -30
- package/.claude/skills/agentdb-optimization/SKILL.md +11 -12
- package/.claude/skills/agentdb-vector-search/SKILL.md +37 -41
- package/.claude/skills/{v3-integration-deep → agentic-integration}/SKILL.md +20 -13
- package/.claude/skills/agentic-jujutsu/SKILL.md +22 -22
- package/.claude/skills/{v3-cli-modernization → cli-modernization}/SKILL.md +17 -8
- package/.claude/skills/{v3-core-implementation → core-implementation}/SKILL.md +33 -8
- package/.claude/skills/{v3-ddd-architecture → ddd-architecture}/SKILL.md +18 -25
- package/.claude/skills/github-code-review/SKILL.md +82 -83
- package/.claude/skills/github-multi-repo/SKILL.md +42 -46
- package/.claude/skills/github-project-management/SKILL.md +83 -88
- package/.claude/skills/github-release-management/SKILL.md +12 -18
- package/.claude/skills/github-workflow-automation/SKILL.md +70 -74
- package/.claude/skills/hooks-automation/SKILL.md +9 -13
- package/.claude/skills/mastermind/_intake.md +83 -0
- package/.claude/skills/mastermind/_protocol.md +275 -0
- package/.claude/skills/mastermind/architect.md +847 -0
- package/.claude/skills/mastermind/build.md +158 -0
- package/.claude/skills/mastermind/content.md +185 -0
- package/.claude/skills/mastermind/createorg.md +318 -0
- package/.claude/skills/mastermind/finance.md +154 -0
- package/.claude/skills/mastermind/idea.md +158 -0
- package/.claude/skills/mastermind/marketing.md +216 -0
- package/.claude/skills/mastermind/monotask.md +350 -0
- package/.claude/skills/mastermind/ops.md +156 -0
- package/.claude/skills/mastermind/references/copywriting-frameworks.md +181 -0
- package/.claude/skills/mastermind/references/persuasion-psychology.md +158 -0
- package/.claude/skills/mastermind/release.md +156 -0
- package/.claude/skills/mastermind/research.md +156 -0
- package/.claude/skills/mastermind/review.md +157 -0
- package/.claude/skills/mastermind/runorg.md +308 -0
- package/.claude/skills/mastermind/sales.md +158 -0
- package/.claude/skills/mastermind/techport.md +743 -0
- package/.claude/skills/{v3-mcp-optimization → mcp-optimization}/SKILL.md +35 -14
- package/.claude/skills/{v3-memory-unification → memory-unification}/SKILL.md +20 -4
- package/.claude/skills/monodesign/SKILL.md +302 -0
- package/.claude/skills/monodesign/reference/adapt.md +190 -0
- package/.claude/skills/monodesign/reference/animate.md +175 -0
- package/.claude/skills/monodesign/reference/antipatterns-catalog.md +187 -0
- package/.claude/skills/monodesign/reference/audit.md +133 -0
- package/.claude/skills/monodesign/reference/bolder.md +113 -0
- package/.claude/skills/monodesign/reference/brand-workflow.md +180 -0
- package/.claude/skills/monodesign/reference/brand.md +114 -0
- package/.claude/skills/monodesign/reference/clarify.md +174 -0
- package/.claude/skills/monodesign/reference/cognitive-load.md +106 -0
- package/.claude/skills/monodesign/reference/color-and-contrast.md +105 -0
- package/.claude/skills/monodesign/reference/colorize.md +154 -0
- package/.claude/skills/monodesign/reference/component-specs.md +260 -0
- package/.claude/skills/monodesign/reference/component-states.md +274 -0
- package/.claude/skills/monodesign/reference/component-system.md +358 -0
- package/.claude/skills/monodesign/reference/copy-formulas.md +160 -0
- package/.claude/skills/monodesign/reference/craft.md +193 -0
- package/.claude/skills/monodesign/reference/critique.md +213 -0
- package/.claude/skills/monodesign/reference/delight.md +302 -0
- package/.claude/skills/monodesign/reference/design-principles.md +246 -0
- package/.claude/skills/monodesign/reference/distill.md +111 -0
- package/.claude/skills/monodesign/reference/document.md +427 -0
- package/.claude/skills/monodesign/reference/extract.md +69 -0
- package/.claude/skills/monodesign/reference/harden.md +347 -0
- package/.claude/skills/monodesign/reference/heuristics-scoring.md +234 -0
- package/.claude/skills/monodesign/reference/image-prompts.md +118 -0
- package/.claude/skills/monodesign/reference/interaction-design.md +195 -0
- package/.claude/skills/monodesign/reference/layout.md +141 -0
- package/.claude/skills/monodesign/reference/live.md +622 -0
- package/.claude/skills/monodesign/reference/motion-design.md +109 -0
- package/.claude/skills/monodesign/reference/onboard.md +234 -0
- package/.claude/skills/monodesign/reference/optimize.md +258 -0
- package/.claude/skills/monodesign/reference/overdrive.md +130 -0
- package/.claude/skills/monodesign/reference/personas.md +179 -0
- package/.claude/skills/monodesign/reference/polish.md +233 -0
- package/.claude/skills/monodesign/reference/pre-delivery-checklist.md +108 -0
- package/.claude/skills/monodesign/reference/product.md +62 -0
- package/.claude/skills/monodesign/reference/quieter.md +99 -0
- package/.claude/skills/monodesign/reference/responsive-design.md +114 -0
- package/.claude/skills/monodesign/reference/shape.md +151 -0
- package/.claude/skills/monodesign/reference/spatial-design.md +100 -0
- package/.claude/skills/monodesign/reference/teach.md +156 -0
- package/.claude/skills/monodesign/reference/token-architecture.md +222 -0
- package/.claude/skills/monodesign/reference/typeset.md +124 -0
- package/.claude/skills/monodesign/reference/typography.md +159 -0
- package/.claude/skills/monodesign/reference/ux-research.md +143 -0
- package/.claude/skills/monodesign/reference/ux-rules.md +211 -0
- package/.claude/skills/monodesign/reference/ux-writing.md +107 -0
- package/.claude/skills/monomotion/SKILL.md +145 -0
- package/.claude/skills/monomotion/rules/api-control.md +139 -0
- package/.claude/skills/monomotion/rules/effects.md +109 -0
- package/.claude/skills/monomotion/rules/integration.md +140 -0
- package/.claude/skills/monomotion/rules/scroll.md +131 -0
- package/.claude/skills/monomotion/rules/sequencing.md +105 -0
- package/.claude/skills/monomotion/rules/svg.md +101 -0
- package/.claude/skills/monomotion/rules/text.md +119 -0
- package/.claude/skills/pair-programming/SKILL.md +1 -1
- package/.claude/skills/performance-analysis/SKILL.md +3 -3
- package/.claude/skills/{v3-performance-optimization → performance-optimization}/SKILL.md +16 -8
- package/.claude/skills/reasoningbank-agentdb/SKILL.md +17 -19
- package/.claude/skills/reasoningbank-intelligence/SKILL.md +4 -6
- package/.claude/skills/{v3-security-overhaul → security-hardening}/SKILL.md +13 -3
- package/.claude/skills/skill-builder/SKILL.md +19 -19
- package/.claude/skills/sparc-methodology/SKILL.md +55 -211
- package/.claude/skills/stop-slop/SKILL.md +67 -0
- package/.claude/skills/stop-slop/references/examples.md +61 -0
- package/.claude/skills/stop-slop/references/phrases.md +130 -0
- package/.claude/skills/stop-slop/references/structures.md +136 -0
- package/.claude/skills/swarm-advanced/SKILL.md +13 -43
- package/.claude/skills/{v3-swarm-coordination → swarm-coordination}/SKILL.md +39 -21
- package/.claude/skills/swarm-orchestration/SKILL.md +12 -12
- package/.claude/skills/verification-quality/SKILL.md +5 -5
- package/.claude/statusline-command.sh +0 -0
- package/.claude/statusline.sh +0 -0
- package/.claude-plugin/scripts/install.sh +0 -0
- package/.claude-plugin/scripts/uninstall.sh +0 -0
- package/.claude-plugin/scripts/verify.sh +0 -0
- package/README.md +5 -5
- package/package.json +17 -17
- package/packages/@monomind/cli/README.md +441 -0
- package/packages/@monomind/cli/bin/cli.js +78 -13
- package/packages/@monomind/cli/bin/mcp-server.js +0 -0
- package/packages/@monomind/cli/dist/src/agents/halt-signal.js +33 -7
- package/packages/@monomind/cli/dist/src/agents/managed-agent.js +5 -2
- package/packages/@monomind/cli/dist/src/agents/prompt-experiment.d.ts +3 -2
- package/packages/@monomind/cli/dist/src/agents/prompt-experiment.js +1 -1
- package/packages/@monomind/cli/dist/src/agents/prompt-version-manager.d.ts +5 -2
- package/packages/@monomind/cli/dist/src/agents/prompt-version-manager.js +26 -4
- package/packages/@monomind/cli/dist/src/agents/specialization-scorer.js +17 -9
- package/packages/@monomind/cli/dist/src/agents/trigger-scanner.d.ts +5 -3
- package/packages/@monomind/cli/dist/src/agents/trigger-scanner.js +58 -10
- package/packages/@monomind/cli/dist/src/agents/version-store.d.ts +0 -1
- package/packages/@monomind/cli/dist/src/agents/version-store.js +44 -21
- package/packages/@monomind/cli/dist/src/autopilot-state.js +79 -28
- package/packages/@monomind/cli/dist/src/benchmarks/benchmark-runner.d.ts +7 -2
- package/packages/@monomind/cli/dist/src/benchmarks/benchmark-runner.js +20 -8
- package/packages/@monomind/cli/dist/src/benchmarks/metric-evaluators.d.ts +2 -1
- package/packages/@monomind/cli/dist/src/benchmarks/metric-evaluators.js +25 -2
- package/packages/@monomind/cli/dist/src/commands/agent.js +6 -4
- package/packages/@monomind/cli/dist/src/commands/appliance-advanced.js +23 -0
- package/packages/@monomind/cli/dist/src/commands/autopilot.js +3 -3
- package/packages/@monomind/cli/dist/src/commands/benchmark.js +119 -8
- package/packages/@monomind/cli/dist/src/commands/claims.js +22 -14
- package/packages/@monomind/cli/dist/src/commands/config.js +32 -0
- package/packages/@monomind/cli/dist/src/commands/daemon.js +13 -11
- package/packages/@monomind/cli/dist/src/commands/deployment.js +21 -2
- package/packages/@monomind/cli/dist/src/commands/doctor.js +5 -4
- package/packages/@monomind/cli/dist/src/commands/embeddings.js +124 -48
- package/packages/@monomind/cli/dist/src/commands/hive-mind.js +15 -14
- package/packages/@monomind/cli/dist/src/commands/hooks.js +45 -41
- package/packages/@monomind/cli/dist/src/commands/index.d.ts +2 -0
- package/packages/@monomind/cli/dist/src/commands/index.js +20 -7
- package/packages/@monomind/cli/dist/src/commands/init.js +53 -19
- package/packages/@monomind/cli/dist/src/commands/mcp.js +31 -44
- package/packages/@monomind/cli/dist/src/commands/memory.js +47 -15
- package/packages/@monomind/cli/dist/src/commands/migrate.js +156 -108
- package/packages/@monomind/cli/dist/src/commands/monograph.d.ts +8 -0
- package/packages/@monomind/cli/dist/src/commands/monograph.js +526 -0
- package/packages/@monomind/cli/dist/src/commands/neural.js +96 -56
- package/packages/@monomind/cli/dist/src/commands/performance.js +30 -8
- package/packages/@monomind/cli/dist/src/commands/plugins.js +13 -37
- package/packages/@monomind/cli/dist/src/commands/process.js +25 -2
- package/packages/@monomind/cli/dist/src/commands/providers.js +37 -5
- package/packages/@monomind/cli/dist/src/commands/replay.js +4 -4
- package/packages/@monomind/cli/dist/src/commands/route.js +37 -5
- package/packages/@monomind/cli/dist/src/commands/ruvector/import.js +12 -2
- package/packages/@monomind/cli/dist/src/commands/ruvector/init.js +15 -0
- package/packages/@monomind/cli/dist/src/commands/ruvector/status.js +16 -3
- package/packages/@monomind/cli/dist/src/commands/security.js +342 -193
- package/packages/@monomind/cli/dist/src/commands/session.js +51 -8
- package/packages/@monomind/cli/dist/src/commands/start.js +18 -4
- package/packages/@monomind/cli/dist/src/commands/swarm.js +47 -36
- package/packages/@monomind/cli/dist/src/commands/tokens.js +11 -11
- package/packages/@monomind/cli/dist/src/commands/transfer-store.js +1 -1
- package/packages/@monomind/cli/dist/src/commands/workflow.js +31 -4
- package/packages/@monomind/cli/dist/src/config-adapter.d.ts +2 -1
- package/packages/@monomind/cli/dist/src/consensus/audit-writer.js +46 -13
- package/packages/@monomind/cli/dist/src/consensus/vote-signer.d.ts +0 -3
- package/packages/@monomind/cli/dist/src/consensus/vote-signer.js +9 -1
- package/packages/@monomind/cli/dist/src/dlq/dlq-reader.d.ts +4 -2
- package/packages/@monomind/cli/dist/src/dlq/dlq-reader.js +25 -8
- package/packages/@monomind/cli/dist/src/dlq/dlq-replayer.d.ts +10 -3
- package/packages/@monomind/cli/dist/src/dlq/dlq-replayer.js +50 -16
- package/packages/@monomind/cli/dist/src/dlq/dlq-writer.js +27 -5
- package/packages/@monomind/cli/dist/src/eval/dataset-manager.d.ts +2 -2
- package/packages/@monomind/cli/dist/src/eval/dataset-manager.js +26 -16
- package/packages/@monomind/cli/dist/src/eval/trace-collector.js +23 -3
- package/packages/@monomind/cli/dist/src/index.js +12 -10
- package/packages/@monomind/cli/dist/src/init/claudemd-generator.js +8 -8
- package/packages/@monomind/cli/dist/src/init/executor.js +212 -102
- package/packages/@monomind/cli/dist/src/init/helpers-generator.js +35 -22
- package/packages/@monomind/cli/dist/src/init/mcp-generator.js +3 -3
- package/packages/@monomind/cli/dist/src/init/settings-generator.js +10 -3
- package/packages/@monomind/cli/dist/src/init/shared-instructions-generator.js +18 -3
- package/packages/@monomind/cli/dist/src/init/statusline-generator.js +3 -1
- package/packages/@monomind/cli/dist/src/init/types.d.ts +35 -11
- package/packages/@monomind/cli/dist/src/init/types.js +5 -9
- package/packages/@monomind/cli/dist/src/interactive/interrupt.js +8 -3
- package/packages/@monomind/cli/dist/src/mcp/tool-registry.js +38 -4
- package/packages/@monomind/cli/dist/src/mcp-client.js +10 -4
- package/packages/@monomind/cli/dist/src/mcp-server.d.ts +9 -2
- package/packages/@monomind/cli/dist/src/mcp-server.js +182 -35
- package/packages/@monomind/cli/dist/src/mcp-tools/agent-tools.js +66 -34
- package/packages/@monomind/cli/dist/src/mcp-tools/agentdb-tools.js +34 -7
- package/packages/@monomind/cli/dist/src/mcp-tools/analyze-tools.js +25 -16
- package/packages/@monomind/cli/dist/src/mcp-tools/auto-install.js +4 -6
- package/packages/@monomind/cli/dist/src/mcp-tools/autopilot-tools.js +12 -2
- package/packages/@monomind/cli/dist/src/mcp-tools/browser-tools.js +199 -20
- package/packages/@monomind/cli/dist/src/mcp-tools/claims-tools.js +68 -18
- package/packages/@monomind/cli/dist/src/mcp-tools/config-tools.js +33 -5
- package/packages/@monomind/cli/dist/src/mcp-tools/coordination-tools.js +59 -4
- package/packages/@monomind/cli/dist/src/mcp-tools/daa-tools.js +46 -10
- package/packages/@monomind/cli/dist/src/mcp-tools/embeddings-tools.js +46 -5
- package/packages/@monomind/cli/dist/src/mcp-tools/github-tools.js +29 -16
- package/packages/@monomind/cli/dist/src/mcp-tools/guidance-tools.js +38 -10
- package/packages/@monomind/cli/dist/src/mcp-tools/hive-mind-tools.js +96 -33
- package/packages/@monomind/cli/dist/src/mcp-tools/hooks-tools.js +70 -37
- package/packages/@monomind/cli/dist/src/mcp-tools/memory-tools.js +29 -13
- package/packages/@monomind/cli/dist/src/mcp-tools/monograph-tools.js +5867 -56
- package/packages/@monomind/cli/dist/src/mcp-tools/neural-tools.js +121 -37
- package/packages/@monomind/cli/dist/src/mcp-tools/performance-tools.js +21 -8
- package/packages/@monomind/cli/dist/src/mcp-tools/progress-tools.js +10 -8
- package/packages/@monomind/cli/dist/src/mcp-tools/request-tracker.js +4 -1
- package/packages/@monomind/cli/dist/src/mcp-tools/ruvllm-tools.js +19 -8
- package/packages/@monomind/cli/dist/src/mcp-tools/session-tools.js +57 -17
- package/packages/@monomind/cli/dist/src/mcp-tools/swarm-tools.js +35 -17
- package/packages/@monomind/cli/dist/src/mcp-tools/system-tools.js +4 -3
- package/packages/@monomind/cli/dist/src/mcp-tools/task-tools.js +53 -13
- package/packages/@monomind/cli/dist/src/mcp-tools/terminal-tools.js +63 -14
- package/packages/@monomind/cli/dist/src/mcp-tools/transfer-tools.js +21 -16
- package/packages/@monomind/cli/dist/src/mcp-tools/workflow-tools.js +92 -23
- package/packages/@monomind/cli/dist/src/memory/ewc-consolidation.js +41 -10
- package/packages/@monomind/cli/dist/src/memory/intelligence.d.ts +2 -2
- package/packages/@monomind/cli/dist/src/memory/intelligence.js +39 -13
- package/packages/@monomind/cli/dist/src/memory/memory-bridge.d.ts +1 -0
- package/packages/@monomind/cli/dist/src/memory/memory-bridge.js +149 -56
- package/packages/@monomind/cli/dist/src/memory/memory-initializer.js +107 -45
- package/packages/@monomind/cli/dist/src/memory/sona-optimizer.d.ts +8 -1
- package/packages/@monomind/cli/dist/src/memory/sona-optimizer.js +25 -8
- package/packages/@monomind/cli/dist/src/observability/replay-reader.d.ts +40 -0
- package/packages/@monomind/cli/dist/src/observability/replay-reader.js +138 -0
- package/packages/@monomind/cli/dist/src/orchestration/routing-modes.js +35 -5
- package/packages/@monomind/cli/dist/src/parser.d.ts +8 -0
- package/packages/@monomind/cli/dist/src/parser.js +48 -14
- package/packages/@monomind/cli/dist/src/plugins/manager.js +112 -19
- package/packages/@monomind/cli/dist/src/plugins/store/discovery.d.ts +1 -1
- package/packages/@monomind/cli/dist/src/plugins/store/discovery.js +80 -62
- package/packages/@monomind/cli/dist/src/production/circuit-breaker.js +8 -1
- package/packages/@monomind/cli/dist/src/production/error-handler.d.ts +4 -2
- package/packages/@monomind/cli/dist/src/production/error-handler.js +27 -5
- package/packages/@monomind/cli/dist/src/production/monitoring.js +8 -4
- package/packages/@monomind/cli/dist/src/production/rate-limiter.js +30 -22
- package/packages/@monomind/cli/dist/src/ruvector/agent-wasm.js +2 -2
- package/packages/@monomind/cli/dist/src/ruvector/coverage-router.js +19 -9
- package/packages/@monomind/cli/dist/src/ruvector/diff-classifier.d.ts +1 -0
- package/packages/@monomind/cli/dist/src/ruvector/diff-classifier.js +26 -6
- package/packages/@monomind/cli/dist/src/ruvector/enhanced-model-router.js +24 -2
- package/packages/@monomind/cli/dist/src/ruvector/index.d.ts +1 -2
- package/packages/@monomind/cli/dist/src/ruvector/index.js +2 -2
- package/packages/@monomind/cli/dist/src/ruvector/model-router.d.ts +4 -2
- package/packages/@monomind/cli/dist/src/ruvector/model-router.js +30 -6
- package/packages/@monomind/cli/dist/src/ruvector/moe-router.d.ts +7 -0
- package/packages/@monomind/cli/dist/src/ruvector/moe-router.js +35 -12
- package/packages/@monomind/cli/dist/src/ruvector/q-learning-router.d.ts +7 -1
- package/packages/@monomind/cli/dist/src/ruvector/q-learning-router.js +40 -9
- package/packages/@monomind/cli/dist/src/services/claim-service.d.ts +3 -1
- package/packages/@monomind/cli/dist/src/services/claim-service.js +33 -2
- package/packages/@monomind/cli/dist/src/services/config-file-manager.d.ts +16 -2
- package/packages/@monomind/cli/dist/src/services/config-file-manager.js +105 -17
- package/packages/@monomind/cli/dist/src/services/container-worker-pool.js +51 -11
- package/packages/@monomind/cli/dist/src/services/headless-worker-executor.d.ts +7 -0
- package/packages/@monomind/cli/dist/src/services/headless-worker-executor.js +188 -45
- package/packages/@monomind/cli/dist/src/services/registry-api.js +62 -9
- package/packages/@monomind/cli/dist/src/services/ruvector-training.js +8 -0
- package/packages/@monomind/cli/dist/src/services/worker-daemon.d.ts +4 -1
- package/packages/@monomind/cli/dist/src/services/worker-daemon.js +112 -28
- package/packages/@monomind/cli/dist/src/services/worker-queue.d.ts +9 -2
- package/packages/@monomind/cli/dist/src/services/worker-queue.js +86 -5
- package/packages/@monomind/cli/dist/src/suggest.js +9 -0
- package/packages/@monomind/cli/dist/src/swarm/flow-enforcer.d.ts +5 -3
- package/packages/@monomind/cli/dist/src/swarm/flow-enforcer.js +17 -5
- package/packages/@monomind/cli/dist/src/swarm/flow-visualizer.d.ts +3 -0
- package/packages/@monomind/cli/dist/src/swarm/flow-visualizer.js +30 -6
- package/packages/@monomind/cli/dist/src/transfer/anonymization/index.js +5 -3
- package/packages/@monomind/cli/dist/src/transfer/export.js +5 -3
- package/packages/@monomind/cli/dist/src/transfer/ipfs/client.js +84 -7
- package/packages/@monomind/cli/dist/src/transfer/ipfs/upload.js +13 -4
- package/packages/@monomind/cli/dist/src/transfer/storage/gcs.js +19 -10
- package/packages/@monomind/cli/dist/src/transfer/store/discovery.d.ts +9 -2
- package/packages/@monomind/cli/dist/src/transfer/store/discovery.js +68 -13
- package/packages/@monomind/cli/dist/src/transfer/store/download.d.ts +15 -6
- package/packages/@monomind/cli/dist/src/transfer/store/download.js +113 -24
- package/packages/@monomind/cli/dist/src/transfer/store/publish.d.ts +1 -1
- package/packages/@monomind/cli/dist/src/transfer/store/publish.js +13 -14
- package/packages/@monomind/cli/dist/src/transfer/store/registry.d.ts +3 -3
- package/packages/@monomind/cli/dist/src/transfer/store/registry.js +32 -16
- package/packages/@monomind/cli/dist/src/update/checker.js +17 -4
- package/packages/@monomind/cli/dist/src/update/executor.js +25 -20
- package/packages/@monomind/cli/dist/src/update/rate-limiter.d.ts +11 -0
- package/packages/@monomind/cli/dist/src/update/rate-limiter.js +23 -3
- package/packages/@monomind/cli/dist/src/utils/parse-jsonl.d.ts +6 -0
- package/packages/@monomind/cli/dist/src/utils/parse-jsonl.js +22 -0
- package/packages/@monomind/cli/dist/src/workflow/condition-evaluator.js +37 -3
- package/packages/@monomind/cli/dist/src/workflow/dag-builder.js +27 -11
- package/packages/@monomind/cli/dist/src/workflow/dag-executor.js +51 -13
- package/packages/@monomind/cli/dist/src/workflow/dsl-schema.d.ts +3 -0
- package/packages/@monomind/cli/dist/src/workflow/dsl-schema.js +6 -2
- package/packages/@monomind/cli/dist/src/workflow/template-engine.js +7 -0
- package/packages/@monomind/cli/dist/src/workflow/workflow-executor.js +95 -14
- package/packages/@monomind/cli/package.json +5 -3
- package/packages/@monomind/guidance/README.md +1192 -0
- package/packages/@monomind/shared/README.md +322 -0
- package/packages/@monomind/shared/dist/types/consensus-audit.d.ts +3 -1
- package/packages/README.md +513 -0
- package/.claude/agents/design/design-brand-guardian.md +0 -323
- package/.claude/agents/design/design-image-prompt-engineer.md +0 -237
- package/.claude/agents/design/design-inclusive-visuals-specialist.md +0 -72
- package/.claude/agents/design/design-ui-designer.md +0 -384
- package/.claude/agents/design/design-ux-architect.md +0 -470
- package/.claude/agents/design/design-ux-researcher.md +0 -330
- package/.claude/agents/design/design-visual-storyteller.md +0 -150
- package/.claude/agents/design/design-whimsy-injector.md +0 -439
- package/.claude/agents/v3/integration-architect.md +0 -338
- package/.claude/commands/analysis/COMMAND_COMPLIANCE_REPORT.md +0 -54
- package/.claude/commands/coordination/init.md +0 -44
- package/.claude/commands/coordination/orchestrate.md +0 -43
- package/.claude/commands/coordination/spawn.md +0 -45
- package/.claude/commands/github/code-review-swarm.md +0 -550
- package/.claude/commands/github/code-review.md +0 -25
- package/.claude/commands/github/github-swarm.md +0 -121
- package/.claude/commands/github/issue-triage.md +0 -25
- package/.claude/commands/github/multi-repo-swarm.md +0 -519
- package/.claude/commands/github/pr-enhance.md +0 -26
- package/.claude/commands/github/project-board-sync.md +0 -471
- package/.claude/commands/github/release-swarm.md +0 -590
- package/.claude/commands/github/repo-analyze.md +0 -25
- package/.claude/commands/github/swarm-issue.md +0 -482
- package/.claude/commands/github/swarm-pr.md +0 -310
- package/.claude/commands/github/workflow-automation.md +0 -468
- package/.claude/commands/hive-mind/hive-mind-metrics.md +0 -8
- package/.claude/commands/hive-mind/hive-mind-resume.md +0 -8
- package/.claude/commands/hive-mind/hive-mind-sessions.md +0 -8
- package/.claude/commands/hive-mind/hive-mind-wizard.md +0 -8
- package/.claude/commands/list-agents.md +0 -17
- package/.claude/commands/memory/memory-persist.md +0 -25
- package/.claude/commands/memory/memory-usage.md +0 -25
- package/.claude/commands/memory/neural.md +0 -47
- package/.claude/commands/metrics.md +0 -11
- package/.claude/commands/monitoring/real-time-view.md +0 -25
- package/.claude/commands/monitoring/swarm-monitor.md +0 -25
- package/.claude/commands/monomind-createtask.md +0 -302
- package/.claude/commands/monomind-help.md +0 -103
- package/.claude/commands/monomind-memory.md +0 -107
- package/.claude/commands/monomind-repeat.md +0 -149
- package/.claude/commands/monomind-swarm.md +0 -205
- package/.claude/commands/optimization/cache-manage.md +0 -25
- package/.claude/commands/optimization/topology-optimize.md +0 -25
- package/.claude/commands/pair/commands.md +0 -546
- package/.claude/commands/pair/config.md +0 -510
- package/.claude/commands/pair/start.md +0 -209
- package/.claude/commands/use-agent.md +0 -67
- package/.claude/skills/monomind-createtask/SKILL.md +0 -269
- package/.claude/skills/monomind-task-engine/SKILL.md +0 -358
- /package/.claude/agents/{v3 → specialists}/memory-specialist.md +0 -0
- /package/.claude/agents/{v3 → specialists}/performance-engineer.md +0 -0
- /package/.claude/agents/{v3 → specialists}/queen-coordinator.md +0 -0
- /package/.claude/agents/{v3 → specialists}/security-architect.md +0 -0
|
@@ -177,7 +177,14 @@ export declare class SONAOptimizer {
|
|
|
177
177
|
*/
|
|
178
178
|
private prunePatterns;
|
|
179
179
|
/**
|
|
180
|
-
* Validate pattern structure
|
|
180
|
+
* Validate pattern structure with strict bounds.
|
|
181
|
+
* SECURITY: confidence/keywords/agent fields must be bounds-checked to
|
|
182
|
+
* defeat poisoning. typeof NaN === 'number' and typeof Infinity === 'number'
|
|
183
|
+
* pass the loose typeof check; without bounds, an attacker who writes
|
|
184
|
+
* sona-patterns.json (poisoned bundle, malicious test fixture, co-located
|
|
185
|
+
* compromise) can inject `confidence: 1e308` to deterministically win
|
|
186
|
+
* every routing decision via findBestPatternMatch's `score = matchRatio *
|
|
187
|
+
* confidence`. Mirrors the pattern in intelligence.ts:loadFromDisk.
|
|
181
188
|
*/
|
|
182
189
|
private validatePattern;
|
|
183
190
|
/**
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
*
|
|
14
14
|
* @module v1/cli/memory/sona-optimizer
|
|
15
15
|
*/
|
|
16
|
-
import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'fs';
|
|
16
|
+
import { existsSync, mkdirSync, readFileSync, renameSync, writeFileSync } from 'fs';
|
|
17
17
|
import { dirname, join } from 'path';
|
|
18
18
|
// ============================================================================
|
|
19
19
|
// Constants
|
|
@@ -483,17 +483,32 @@ export class SONAOptimizer {
|
|
|
483
483
|
}
|
|
484
484
|
}
|
|
485
485
|
/**
|
|
486
|
-
* Validate pattern structure
|
|
486
|
+
* Validate pattern structure with strict bounds.
|
|
487
|
+
* SECURITY: confidence/keywords/agent fields must be bounds-checked to
|
|
488
|
+
* defeat poisoning. typeof NaN === 'number' and typeof Infinity === 'number'
|
|
489
|
+
* pass the loose typeof check; without bounds, an attacker who writes
|
|
490
|
+
* sona-patterns.json (poisoned bundle, malicious test fixture, co-located
|
|
491
|
+
* compromise) can inject `confidence: 1e308` to deterministically win
|
|
492
|
+
* every routing decision via findBestPatternMatch's `score = matchRatio *
|
|
493
|
+
* confidence`. Mirrors the pattern in intelligence.ts:loadFromDisk.
|
|
487
494
|
*/
|
|
488
495
|
validatePattern(pattern) {
|
|
489
496
|
if (!pattern || typeof pattern !== 'object')
|
|
490
497
|
return false;
|
|
491
498
|
const p = pattern;
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
499
|
+
if (!Array.isArray(p.keywords) || p.keywords.length > 64)
|
|
500
|
+
return false;
|
|
501
|
+
if (!p.keywords.every(k => typeof k === 'string' && k.length > 0 && k.length <= 128))
|
|
502
|
+
return false;
|
|
503
|
+
if (typeof p.agent !== 'string' || p.agent.length === 0 || p.agent.length > 128)
|
|
504
|
+
return false;
|
|
505
|
+
if (typeof p.confidence !== 'number' || !Number.isFinite(p.confidence) || p.confidence < 0 || p.confidence > 1)
|
|
506
|
+
return false;
|
|
507
|
+
if (typeof p.successCount !== 'number' || !Number.isFinite(p.successCount) || p.successCount < 0 || p.successCount > 1e9)
|
|
508
|
+
return false;
|
|
509
|
+
if (typeof p.failureCount !== 'number' || !Number.isFinite(p.failureCount) || p.failureCount < 0 || p.failureCount > 1e9)
|
|
510
|
+
return false;
|
|
511
|
+
return true;
|
|
497
512
|
}
|
|
498
513
|
/**
|
|
499
514
|
* Load patterns from disk
|
|
@@ -557,7 +572,9 @@ export class SONAOptimizer {
|
|
|
557
572
|
savedAt: new Date().toISOString(),
|
|
558
573
|
},
|
|
559
574
|
};
|
|
560
|
-
|
|
575
|
+
const tmp = fullPath + '.tmp';
|
|
576
|
+
writeFileSync(tmp, JSON.stringify(state, null, 2));
|
|
577
|
+
renameSync(tmp, fullPath);
|
|
561
578
|
return true;
|
|
562
579
|
}
|
|
563
580
|
catch (err) {
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ReplayReader
|
|
3
|
+
*
|
|
4
|
+
* Reads session files from .monomind/sessions/ for replay and listing.
|
|
5
|
+
* Session files follow the pattern session-{id}.json. current.json is a
|
|
6
|
+
* regular file (not a symlink) pointing to the active session data.
|
|
7
|
+
*/
|
|
8
|
+
export interface SessionSummary {
|
|
9
|
+
id: string;
|
|
10
|
+
startedAt: string;
|
|
11
|
+
endedAt?: string;
|
|
12
|
+
tokenUsage?: {
|
|
13
|
+
total?: number;
|
|
14
|
+
};
|
|
15
|
+
taskCount?: number;
|
|
16
|
+
filePath: string;
|
|
17
|
+
}
|
|
18
|
+
export interface SessionReplay extends SessionSummary {
|
|
19
|
+
raw: Record<string, unknown>;
|
|
20
|
+
}
|
|
21
|
+
export declare class ReplayReader {
|
|
22
|
+
private sessionsDir;
|
|
23
|
+
constructor(cwd?: string);
|
|
24
|
+
/**
|
|
25
|
+
* Find and return the session data for a given session ID.
|
|
26
|
+
* The ID may be a bare ID (e.g. "session-1234567890") or a timestamp number.
|
|
27
|
+
* Falls back to current.json if the id matches the current session.
|
|
28
|
+
*/
|
|
29
|
+
show(sessionId: string): Promise<SessionReplay | null>;
|
|
30
|
+
/**
|
|
31
|
+
* List sessions ordered by startedAt descending (most recent first).
|
|
32
|
+
* current.json is excluded — only persisted session-*.json files are listed.
|
|
33
|
+
*/
|
|
34
|
+
list(limit?: number): Promise<SessionSummary[]>;
|
|
35
|
+
private parseReplay;
|
|
36
|
+
private parseSummary;
|
|
37
|
+
private buildSummary;
|
|
38
|
+
private readJson;
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=replay-reader.d.ts.map
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ReplayReader
|
|
3
|
+
*
|
|
4
|
+
* Reads session files from .monomind/sessions/ for replay and listing.
|
|
5
|
+
* Session files follow the pattern session-{id}.json. current.json is a
|
|
6
|
+
* regular file (not a symlink) pointing to the active session data.
|
|
7
|
+
*/
|
|
8
|
+
import { readdirSync, readFileSync, existsSync, statSync } from 'fs';
|
|
9
|
+
import { join, sep, resolve } from 'path';
|
|
10
|
+
export class ReplayReader {
|
|
11
|
+
sessionsDir;
|
|
12
|
+
constructor(cwd = process.cwd()) {
|
|
13
|
+
this.sessionsDir = join(cwd, '.monomind', 'sessions');
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Find and return the session data for a given session ID.
|
|
17
|
+
* The ID may be a bare ID (e.g. "session-1234567890") or a timestamp number.
|
|
18
|
+
* Falls back to current.json if the id matches the current session.
|
|
19
|
+
*/
|
|
20
|
+
async show(sessionId) {
|
|
21
|
+
if (!existsSync(this.sessionsDir)) {
|
|
22
|
+
return null;
|
|
23
|
+
}
|
|
24
|
+
// Normalize: allow bare numeric IDs or full "session-<id>" form
|
|
25
|
+
const normalized = sessionId.startsWith('session-')
|
|
26
|
+
? sessionId
|
|
27
|
+
: `session-${sessionId}`;
|
|
28
|
+
// Guard against path traversal (e.g. sessionId = "../../../etc/passwd")
|
|
29
|
+
const filePath = join(this.sessionsDir, `${normalized}.json`);
|
|
30
|
+
if (!resolve(filePath).startsWith(resolve(this.sessionsDir) + sep))
|
|
31
|
+
return null;
|
|
32
|
+
if (existsSync(filePath)) {
|
|
33
|
+
return this.parseReplay(filePath);
|
|
34
|
+
}
|
|
35
|
+
// Fall back to current.json if the id matches
|
|
36
|
+
const currentPath = join(this.sessionsDir, 'current.json');
|
|
37
|
+
if (existsSync(currentPath)) {
|
|
38
|
+
const current = this.parseReplay(currentPath);
|
|
39
|
+
if (current && (current.id === sessionId || current.id === normalized)) {
|
|
40
|
+
return current;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
return null;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* List sessions ordered by startedAt descending (most recent first).
|
|
47
|
+
* current.json is excluded — only persisted session-*.json files are listed.
|
|
48
|
+
*/
|
|
49
|
+
async list(limit = 20) {
|
|
50
|
+
if (!existsSync(this.sessionsDir)) {
|
|
51
|
+
return [];
|
|
52
|
+
}
|
|
53
|
+
let entries;
|
|
54
|
+
try {
|
|
55
|
+
entries = readdirSync(this.sessionsDir);
|
|
56
|
+
}
|
|
57
|
+
catch {
|
|
58
|
+
return [];
|
|
59
|
+
}
|
|
60
|
+
const summaries = [];
|
|
61
|
+
for (const entry of entries) {
|
|
62
|
+
if (!entry.startsWith('session-') || !entry.endsWith('.json')) {
|
|
63
|
+
continue;
|
|
64
|
+
}
|
|
65
|
+
const filePath = join(this.sessionsDir, entry);
|
|
66
|
+
const summary = this.parseSummary(filePath);
|
|
67
|
+
if (summary) {
|
|
68
|
+
summaries.push(summary);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
// Sort by startedAt descending; push invalid dates to the end
|
|
72
|
+
summaries.sort((a, b) => {
|
|
73
|
+
const ta = new Date(a.startedAt).getTime();
|
|
74
|
+
const tb = new Date(b.startedAt).getTime();
|
|
75
|
+
if (isNaN(ta) && isNaN(tb))
|
|
76
|
+
return 0;
|
|
77
|
+
if (isNaN(ta))
|
|
78
|
+
return 1;
|
|
79
|
+
if (isNaN(tb))
|
|
80
|
+
return -1;
|
|
81
|
+
return tb - ta;
|
|
82
|
+
});
|
|
83
|
+
return summaries.slice(0, limit);
|
|
84
|
+
}
|
|
85
|
+
// ── private helpers ──────────────────────────────────────────────────────────
|
|
86
|
+
parseReplay(filePath) {
|
|
87
|
+
const raw = this.readJson(filePath);
|
|
88
|
+
if (!raw)
|
|
89
|
+
return null;
|
|
90
|
+
const summary = this.buildSummary(raw, filePath);
|
|
91
|
+
if (!summary)
|
|
92
|
+
return null;
|
|
93
|
+
return { ...summary, raw };
|
|
94
|
+
}
|
|
95
|
+
parseSummary(filePath) {
|
|
96
|
+
const raw = this.readJson(filePath);
|
|
97
|
+
if (!raw)
|
|
98
|
+
return null;
|
|
99
|
+
return this.buildSummary(raw, filePath);
|
|
100
|
+
}
|
|
101
|
+
buildSummary(raw, filePath) {
|
|
102
|
+
const id = typeof raw.id === 'string' ? raw.id : null;
|
|
103
|
+
const startedAt = typeof raw.startedAt === 'string' ? raw.startedAt : null;
|
|
104
|
+
if (!id || !startedAt)
|
|
105
|
+
return null;
|
|
106
|
+
const endedAt = typeof raw.endedAt === 'string' ? raw.endedAt : undefined;
|
|
107
|
+
// tokenUsage is not present in current session files but kept optional per interface
|
|
108
|
+
const tokenUsage = raw.tokenUsage && typeof raw.tokenUsage === 'object'
|
|
109
|
+
? raw.tokenUsage
|
|
110
|
+
: undefined;
|
|
111
|
+
// taskCount comes from metrics.tasks
|
|
112
|
+
const metrics = raw.metrics && typeof raw.metrics === 'object'
|
|
113
|
+
? raw.metrics
|
|
114
|
+
: undefined;
|
|
115
|
+
const taskCount = metrics && typeof metrics.tasks === 'number' ? metrics.tasks : undefined;
|
|
116
|
+
return { id, startedAt, endedAt, tokenUsage, taskCount, filePath };
|
|
117
|
+
}
|
|
118
|
+
readJson(filePath) {
|
|
119
|
+
try {
|
|
120
|
+
// Hard size cap. Without this, a single planted multi-GB session-*.json
|
|
121
|
+
// (or a runaway log) crashes the CLI with allocation failure when
|
|
122
|
+
// any code path touches `list()` or `show()`.
|
|
123
|
+
const stat = statSync(filePath);
|
|
124
|
+
if (stat.size > 25 * 1024 * 1024)
|
|
125
|
+
return null;
|
|
126
|
+
const content = readFileSync(filePath, 'utf-8');
|
|
127
|
+
const parsed = JSON.parse(content);
|
|
128
|
+
if (parsed && typeof parsed === 'object' && !Array.isArray(parsed)) {
|
|
129
|
+
return parsed;
|
|
130
|
+
}
|
|
131
|
+
return null;
|
|
132
|
+
}
|
|
133
|
+
catch {
|
|
134
|
+
return null;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
//# sourceMappingURL=replay-reader.js.map
|
|
@@ -10,6 +10,18 @@ import { SharedScratchpad } from '../../../shared/src/scratchpad.js';
|
|
|
10
10
|
// ---------------------------------------------------------------------------
|
|
11
11
|
// Abstract executor
|
|
12
12
|
// ---------------------------------------------------------------------------
|
|
13
|
+
const SLUG_RE = /^[a-z0-9][a-z0-9\-]{0,63}$/;
|
|
14
|
+
const MAX_TASK_BYTES = 64 * 1024;
|
|
15
|
+
function assertSlug(value, name) {
|
|
16
|
+
if (!SLUG_RE.test(value))
|
|
17
|
+
throw new Error(`Invalid agent slug for ${name}: ${JSON.stringify(value)}`);
|
|
18
|
+
}
|
|
19
|
+
function assertTask(task) {
|
|
20
|
+
if (!task || task.trim().length === 0)
|
|
21
|
+
throw new Error('task must not be empty');
|
|
22
|
+
if (task.length > MAX_TASK_BYTES)
|
|
23
|
+
throw new Error(`task exceeds maximum length (${MAX_TASK_BYTES} bytes)`);
|
|
24
|
+
}
|
|
13
25
|
export class ModeExecutor {
|
|
14
26
|
dispatcher;
|
|
15
27
|
constructor(dispatcher) {
|
|
@@ -21,6 +33,8 @@ export class ModeExecutor {
|
|
|
21
33
|
// ---------------------------------------------------------------------------
|
|
22
34
|
export class RouteModeExecutor extends ModeExecutor {
|
|
23
35
|
async execute(config) {
|
|
36
|
+
assertSlug(config.agentSlug, 'agentSlug');
|
|
37
|
+
assertTask(config.task);
|
|
24
38
|
const start = Date.now();
|
|
25
39
|
const result = await this.dispatcher.dispatch(config.agentSlug, config.task);
|
|
26
40
|
return {
|
|
@@ -48,7 +62,7 @@ export function parsePlan(output) {
|
|
|
48
62
|
const parsed = JSON.parse(raw);
|
|
49
63
|
if (Array.isArray(parsed))
|
|
50
64
|
return parsed.map(String);
|
|
51
|
-
if (Array.isArray(parsed.subtasks))
|
|
65
|
+
if (parsed !== null && typeof parsed === 'object' && Array.isArray(parsed.subtasks))
|
|
52
66
|
return parsed.subtasks.map(String);
|
|
53
67
|
}
|
|
54
68
|
catch {
|
|
@@ -58,9 +72,12 @@ export function parsePlan(output) {
|
|
|
58
72
|
}
|
|
59
73
|
export class CoordinateModeExecutor extends ModeExecutor {
|
|
60
74
|
async execute(config) {
|
|
75
|
+
assertTask(config.task);
|
|
61
76
|
const start = Date.now();
|
|
62
77
|
const plannerSlug = config.plannerSlug ?? 'planner';
|
|
63
78
|
const synthesizerSlug = config.synthesizerSlug ?? 'hierarchical-coordinator';
|
|
79
|
+
assertSlug(plannerSlug, 'plannerSlug');
|
|
80
|
+
assertSlug(synthesizerSlug, 'synthesizerSlug');
|
|
64
81
|
const maxSubtasks = config.maxSubtasks ?? 8;
|
|
65
82
|
const totalTokens = { input: 0, output: 0 };
|
|
66
83
|
const agents = [plannerSlug];
|
|
@@ -103,9 +120,18 @@ export class CoordinateModeExecutor extends ModeExecutor {
|
|
|
103
120
|
// ---------------------------------------------------------------------------
|
|
104
121
|
export class CollaborateModeExecutor extends ModeExecutor {
|
|
105
122
|
async execute(config) {
|
|
123
|
+
assertTask(config.task);
|
|
124
|
+
assertSlug(config.agentA, 'agentA');
|
|
125
|
+
assertSlug(config.agentB, 'agentB');
|
|
106
126
|
const start = Date.now();
|
|
107
|
-
|
|
108
|
-
|
|
127
|
+
// Cap iterations: each iteration costs 2 LLM dispatches; an unbounded value
|
|
128
|
+
// turns this into an unbounded token-cost / OOM vector.
|
|
129
|
+
const maxIterations = Math.max(1, Math.min(config.maxIterations ?? 5, 20));
|
|
130
|
+
// Reject empty/short convergence phrase — empty string would make
|
|
131
|
+
// String(bResult.output).includes('') return true on iteration 1, bypassing
|
|
132
|
+
// the entire iterative review and locking in whatever Agent B produced.
|
|
133
|
+
const rawPhrase = (config.convergencePhrase ?? 'APPROVED').trim();
|
|
134
|
+
const convergencePhrase = rawPhrase.length >= 3 ? rawPhrase : 'APPROVED';
|
|
109
135
|
const pad = new SharedScratchpad();
|
|
110
136
|
const totalTokens = { input: 0, output: 0 };
|
|
111
137
|
let lastOutput;
|
|
@@ -119,8 +145,12 @@ export class CollaborateModeExecutor extends ModeExecutor {
|
|
|
119
145
|
pad.append(config.agentB, String(bResult.output));
|
|
120
146
|
this.addTokens(totalTokens, bResult.tokenUsage);
|
|
121
147
|
lastOutput = bResult.output;
|
|
122
|
-
// Convergence check
|
|
123
|
-
|
|
148
|
+
// Convergence check — require the phrase as a stand-alone token so that
|
|
149
|
+
// an attacker who controls Agent A's output cannot embed `APPROVED` in
|
|
150
|
+
// prose and force premature convergence on iteration 1.
|
|
151
|
+
const escaped = convergencePhrase.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
152
|
+
const convergenceRe = new RegExp(`(^|\\W)${escaped}(\\W|$)`);
|
|
153
|
+
if (convergenceRe.test(String(bResult.output))) {
|
|
124
154
|
return {
|
|
125
155
|
mode: 'collaborate',
|
|
126
156
|
output: lastOutput,
|
|
@@ -27,6 +27,14 @@ export declare class CommandParser {
|
|
|
27
27
|
registerCommand(command: Command): void;
|
|
28
28
|
getCommand(name: string): Command | undefined;
|
|
29
29
|
getAllCommands(): Command[];
|
|
30
|
+
/**
|
|
31
|
+
* Reserved keys that would either pollute the prototype chain (`__proto__`,
|
|
32
|
+
* `constructor`, `prototype`) or shadow `Object.prototype` methods that
|
|
33
|
+
* downstream consumers commonly call (`hasOwnProperty`, `toString`,
|
|
34
|
+
* `valueOf`, `isPrototypeOf`, `propertyIsEnumerable`). All are rejected.
|
|
35
|
+
*/
|
|
36
|
+
private static readonly RESERVED_FLAG_KEYS;
|
|
37
|
+
private setFlagSafe;
|
|
30
38
|
parse(args: string[]): ParseResult;
|
|
31
39
|
private parseFlag;
|
|
32
40
|
private parseValue;
|
|
@@ -96,6 +96,21 @@ export class CommandParser {
|
|
|
96
96
|
return true;
|
|
97
97
|
});
|
|
98
98
|
}
|
|
99
|
+
/**
|
|
100
|
+
* Reserved keys that would either pollute the prototype chain (`__proto__`,
|
|
101
|
+
* `constructor`, `prototype`) or shadow `Object.prototype` methods that
|
|
102
|
+
* downstream consumers commonly call (`hasOwnProperty`, `toString`,
|
|
103
|
+
* `valueOf`, `isPrototypeOf`, `propertyIsEnumerable`). All are rejected.
|
|
104
|
+
*/
|
|
105
|
+
static RESERVED_FLAG_KEYS = new Set([
|
|
106
|
+
'__proto__', 'constructor', 'prototype',
|
|
107
|
+
'hasOwnProperty', 'toString', 'valueOf', 'isPrototypeOf', 'propertyIsEnumerable',
|
|
108
|
+
]);
|
|
109
|
+
setFlagSafe(flags, key, value) {
|
|
110
|
+
if (CommandParser.RESERVED_FLAG_KEYS.has(key))
|
|
111
|
+
return;
|
|
112
|
+
flags[key] = value;
|
|
113
|
+
}
|
|
99
114
|
parse(args) {
|
|
100
115
|
const result = {
|
|
101
116
|
command: [],
|
|
@@ -193,25 +208,37 @@ export class CommandParser {
|
|
|
193
208
|
// --flag=value
|
|
194
209
|
const key = arg.slice(2, equalIndex);
|
|
195
210
|
const value = arg.slice(equalIndex + 1);
|
|
196
|
-
flags
|
|
211
|
+
this.setFlagSafe(flags, this.normalizeKey(key), this.parseValue(value));
|
|
197
212
|
}
|
|
198
213
|
else if (arg.startsWith('--no-')) {
|
|
199
|
-
// --no-flag (boolean negation)
|
|
214
|
+
// --no-flag (boolean negation) — only accept for declared boolean flags
|
|
215
|
+
// so attackers can't covertly toggle off arbitrary security controls
|
|
216
|
+
// (--no-verify-signature, --no-confirm, etc.) when the underlying flag
|
|
217
|
+
// doesn't exist as a boolean option. Unknown --no-X is treated as a
|
|
218
|
+
// string flag passed verbatim, which validation can then reject.
|
|
200
219
|
const key = arg.slice(5);
|
|
201
|
-
|
|
220
|
+
const normalizedKey = this.normalizeKey(key);
|
|
221
|
+
if (booleanFlags.has(normalizedKey)) {
|
|
222
|
+
this.setFlagSafe(flags, normalizedKey, false);
|
|
223
|
+
}
|
|
224
|
+
else {
|
|
225
|
+
// Record under the prefixed name so it surfaces as unknown rather
|
|
226
|
+
// than silently downgrading any flag the user happens to spell.
|
|
227
|
+
this.setFlagSafe(flags, this.normalizeKey('no-' + key), true);
|
|
228
|
+
}
|
|
202
229
|
}
|
|
203
230
|
else {
|
|
204
231
|
const key = arg.slice(2);
|
|
205
232
|
const normalizedKey = this.normalizeKey(key);
|
|
206
233
|
if (booleanFlags.has(normalizedKey)) {
|
|
207
|
-
flags
|
|
234
|
+
this.setFlagSafe(flags, normalizedKey, true);
|
|
208
235
|
}
|
|
209
236
|
else if (nextIndex < args.length && !args[nextIndex].startsWith('-')) {
|
|
210
|
-
flags
|
|
237
|
+
this.setFlagSafe(flags, normalizedKey, this.parseValue(args[nextIndex]));
|
|
211
238
|
nextIndex++;
|
|
212
239
|
}
|
|
213
240
|
else {
|
|
214
|
-
flags
|
|
241
|
+
this.setFlagSafe(flags, normalizedKey, true);
|
|
215
242
|
}
|
|
216
243
|
}
|
|
217
244
|
}
|
|
@@ -223,21 +250,21 @@ export class CommandParser {
|
|
|
223
250
|
const key = aliases[chars] || chars;
|
|
224
251
|
const normalizedKey = this.normalizeKey(key);
|
|
225
252
|
if (booleanFlags.has(normalizedKey)) {
|
|
226
|
-
flags
|
|
253
|
+
this.setFlagSafe(flags, normalizedKey, true);
|
|
227
254
|
}
|
|
228
255
|
else if (nextIndex < args.length && !args[nextIndex].startsWith('-')) {
|
|
229
|
-
flags
|
|
256
|
+
this.setFlagSafe(flags, normalizedKey, this.parseValue(args[nextIndex]));
|
|
230
257
|
nextIndex++;
|
|
231
258
|
}
|
|
232
259
|
else {
|
|
233
|
-
flags
|
|
260
|
+
this.setFlagSafe(flags, normalizedKey, true);
|
|
234
261
|
}
|
|
235
262
|
}
|
|
236
263
|
else {
|
|
237
264
|
// Multiple short flags combined (e.g., -abc)
|
|
238
265
|
for (const char of chars) {
|
|
239
266
|
const key = aliases[char] || char;
|
|
240
|
-
flags
|
|
267
|
+
this.setFlagSafe(flags, this.normalizeKey(key), true);
|
|
241
268
|
}
|
|
242
269
|
}
|
|
243
270
|
}
|
|
@@ -249,10 +276,17 @@ export class CommandParser {
|
|
|
249
276
|
return true;
|
|
250
277
|
if (value.toLowerCase() === 'false')
|
|
251
278
|
return false;
|
|
252
|
-
// Number
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
279
|
+
// Number — only coerce if the string is unambiguously a canonical number.
|
|
280
|
+
// The previous code coerced any numeric-looking string, which silently
|
|
281
|
+
// dropped leading zeros ("00042" → 42), mangled IDs/tokens above
|
|
282
|
+
// Number.MAX_SAFE_INTEGER, and could cause tenant/identity mix-ups when
|
|
283
|
+
// downstream consumers strict-equal-compared against stored strings.
|
|
284
|
+
if (value.trim() !== '' && /^-?(0|[1-9]\d*)(\.\d+)?([eE][+-]?\d+)?$/.test(value)) {
|
|
285
|
+
const num = Number(value);
|
|
286
|
+
if (Number.isFinite(num) && Number.isSafeInteger(num) || (!Number.isInteger(num) && Number.isFinite(num))) {
|
|
287
|
+
return num;
|
|
288
|
+
}
|
|
289
|
+
}
|
|
256
290
|
// String
|
|
257
291
|
return value;
|
|
258
292
|
}
|