@monoes/monomindcli 2.9.22 → 2.9.24
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/consensus/quorum-manager.md +35 -54
- package/.claude/agents/core/coordinator.md +14 -18
- package/.claude/agents/core/researcher.md +1 -1
- package/.claude/agents/github/issue-tracker.md +3 -3
- package/.claude/agents/github/{code-review-swarm.md → monoswarm-code-review.md} +1 -1
- package/.claude/agents/github/{swarm-issue.md → monoswarm-issue.md} +1 -1
- package/.claude/agents/github/{multi-repo-swarm.md → monoswarm-multi-repo.md} +1 -1
- package/.claude/agents/github/{swarm-pr.md → monoswarm-pr.md} +1 -1
- package/.claude/agents/github/pr-manager.md +1 -1
- package/.claude/agents/github/release-manager.md +1 -1
- package/.claude/agents/github/repo-architect.md +1 -1
- package/.claude/agents/github/sync-coordinator.md +4 -4
- package/.claude/agents/{hive-mind → monoswarm}/collective-intelligence-coordinator.md +9 -16
- package/.claude/agents/{swarm → monoswarm}/mesh-coordinator.md +19 -24
- package/.claude/agents/{hive-mind/swarm-memory-manager.md → monoswarm/monoswarm-memory-manager.md} +1 -1
- package/.claude/agents/templates/{coordinator-swarm-init.md → coordinator-monoswarm-init.md} +1 -1
- package/.claude/agents/testing/{tdd-london-swarm.md → tdd-london-monoswarm.md} +2 -2
- package/.claude/commands/agents/agent-coordination.md +3 -3
- package/.claude/commands/agents/agent-types.md +1 -1
- package/.claude/commands/automation/self-healing.md +1 -1
- package/.claude/commands/automation/smart-spawn.md +1 -1
- package/.claude/commands/coordination/README.md +1 -1
- package/.claude/commands/coordination/{swarm-init.md → monoswarm-init.md} +2 -2
- package/.claude/commands/coordination/task-orchestrate.md +4 -4
- package/.claude/commands/github/README.md +1 -1
- package/.claude/commands/github/issue-tracker.md +2 -2
- package/.claude/commands/github/pr-manager.md +1 -1
- package/.claude/commands/github/release-manager.md +1 -1
- package/.claude/commands/github/repo-architect.md +1 -1
- package/.claude/commands/github/sync-coordinator.md +2 -2
- package/.claude/commands/hooks/README.md +1 -2
- package/.claude/commands/hooks/overview.md +1 -2
- package/.claude/commands/hooks/setup.md +0 -3
- package/.claude/commands/mastermind/createtask.md +2 -2
- package/.claude/commands/mastermind/do.md +3 -3
- package/.claude/commands/mastermind/help.md +2 -2
- package/.claude/commands/mastermind/ideate.md +1 -1
- package/.claude/commands/mastermind/improve.md +1 -1
- package/.claude/commands/mastermind/memory.md +2 -2
- package/.claude/commands/mastermind/{swarm.md → monoswarm.md} +13 -26
- package/.claude/commands/mastermind/topology.md +1 -1
- package/.claude/commands/memory/README.md +2 -2
- package/.claude/commands/memory/memory-search.md +1 -1
- package/.claude/commands/monoswarm/README.md +59 -0
- package/.claude/commands/monoswarm/consensus.md +61 -0
- package/.claude/commands/monoswarm/init.md +68 -0
- package/.claude/commands/monoswarm/memory.md +55 -0
- package/.claude/commands/monoswarm/monoswarm.md +139 -0
- package/.claude/commands/{swarm → monoswarm}/research.md +2 -2
- package/.claude/commands/monoswarm/spawn.md +49 -0
- package/.claude/commands/monoswarm/status.md +48 -0
- package/.claude/commands/monoswarm/stop.md +46 -0
- package/.claude/commands/optimization/auto-topology.md +9 -9
- package/.claude/commands/stream-chain/run.md +1 -1
- package/.claude/commands/workflows/development.md +1 -1
- package/.claude/commands/workflows/research.md +2 -2
- package/.claude/helpers/audit-log-writer.cjs +72 -0
- package/.claude/helpers/control-start.cjs +84 -26
- package/.claude/helpers/handlers/agent-start-handler.cjs +5 -5
- package/.claude/helpers/handlers/gates-handler.cjs +31 -10
- package/.claude/helpers/handlers/session-restore-handler.cjs +1 -1
- package/.claude/helpers/handlers/task-handler.cjs +4 -4
- package/.claude/helpers/skill-registry.json +4718 -3669
- package/.claude/helpers/statusline.cjs +21 -21
- package/.claude/helpers/token-tracker.cjs +0 -6
- package/.claude/settings.json +2 -3
- package/.claude/skills/hooks-automation/SKILL.md +5 -5
- package/.claude/skills/mastermind-protocol/SKILL.md +3 -3
- package/.claude/skills/memory-toolkit/SKILL.md +2 -2
- package/.claude/skills/{swarm-orchestration → monoswarm}/SKILL.md +106 -42
- package/.claude/skills/specialagent/SKILL.md +1 -1
- package/README.md +31 -12
- package/dist/src/agents/registry-builder.d.ts.map +1 -1
- package/dist/src/agents/registry-builder.js +8 -9
- package/dist/src/agents/registry-builder.js.map +1 -1
- package/dist/src/autopilot-state.d.ts +0 -16
- package/dist/src/autopilot-state.d.ts.map +1 -1
- package/dist/src/autopilot-state.js +6 -21
- package/dist/src/autopilot-state.js.map +1 -1
- package/dist/src/browser/action-builder/analyzer.d.ts.map +1 -1
- package/dist/src/browser/action-builder/analyzer.js +6 -6
- package/dist/src/browser/action-builder/analyzer.js.map +1 -1
- package/dist/src/browser/action-builder/types.d.ts.map +1 -1
- package/dist/src/browser/adapters/gemini.d.ts.map +1 -1
- package/dist/src/browser/adapters/index.d.ts.map +1 -1
- package/dist/src/browser/adapters/index.js +2 -2
- package/dist/src/browser/adapters/index.js.map +1 -1
- package/dist/src/browser/adapters/instagram.d.ts.map +1 -1
- package/dist/src/browser/adapters/linkedin.d.ts.map +1 -1
- package/dist/src/browser/adapters/linkedin.js +9 -1
- package/dist/src/browser/adapters/linkedin.js.map +1 -1
- package/dist/src/browser/adapters/x.d.ts.map +1 -1
- package/dist/src/browser/adapters/x.js +14 -2
- package/dist/src/browser/adapters/x.js.map +1 -1
- package/dist/src/browser/dashboard/server.d.ts.map +1 -1
- package/dist/src/browser/dashboard/server.js +23 -13
- package/dist/src/browser/dashboard/server.js.map +1 -1
- package/dist/src/browser/dashboard/ui.html +5 -5
- package/dist/src/browser/workflow/engine.d.ts +1 -1
- package/dist/src/browser/workflow/engine.d.ts.map +1 -1
- package/dist/src/browser/workflow/engine.js +74 -25
- package/dist/src/browser/workflow/engine.js.map +1 -1
- package/dist/src/browser/workflow/store.d.ts +1 -1
- package/dist/src/browser/workflow/store.d.ts.map +1 -1
- package/dist/src/browser/workflow/store.js +54 -26
- package/dist/src/browser/workflow/store.js.map +1 -1
- package/dist/src/browser/workflow/types.d.ts.map +1 -1
- package/dist/src/capabilities/cap-code.d.ts.map +1 -1
- package/dist/src/capabilities/cap-code.js.map +1 -1
- package/dist/src/capabilities/cap-data.d.ts.map +1 -1
- package/dist/src/capabilities/cap-data.js +28 -8
- package/dist/src/capabilities/cap-data.js.map +1 -1
- package/dist/src/capabilities/cap-documents.d.ts.map +1 -1
- package/dist/src/capabilities/cap-documents.js +136 -54
- package/dist/src/capabilities/cap-documents.js.map +1 -1
- package/dist/src/capabilities/cap-graph.d.ts.map +1 -1
- package/dist/src/capabilities/cap-graph.js +3 -3
- package/dist/src/capabilities/cap-graph.js.map +1 -1
- package/dist/src/capabilities/cap-media.d.ts.map +1 -1
- package/dist/src/capabilities/cap-media.js +1 -1
- package/dist/src/capabilities/cap-media.js.map +1 -1
- package/dist/src/capabilities/cap-timeline.d.ts.map +1 -1
- package/dist/src/capabilities/cap-timeline.js +33 -7
- package/dist/src/capabilities/cap-timeline.js.map +1 -1
- package/dist/src/capabilities/index.d.ts +5 -5
- package/dist/src/capabilities/index.d.ts.map +1 -1
- package/dist/src/capabilities/index.js +5 -5
- package/dist/src/capabilities/index.js.map +1 -1
- package/dist/src/capabilities/manager.d.ts.map +1 -1
- package/dist/src/capabilities/manager.js +6 -6
- package/dist/src/capabilities/manager.js.map +1 -1
- package/dist/src/capabilities/scanner.d.ts.map +1 -1
- package/dist/src/capabilities/scanner.js +103 -14
- package/dist/src/capabilities/scanner.js.map +1 -1
- package/dist/src/commands/agent-lifecycle.d.ts.map +1 -1
- package/dist/src/commands/agent-lifecycle.js +120 -41
- package/dist/src/commands/agent-lifecycle.js.map +1 -1
- package/dist/src/commands/agent-ops.d.ts.map +1 -1
- package/dist/src/commands/agent-ops.js +107 -41
- package/dist/src/commands/agent-ops.js.map +1 -1
- package/dist/src/commands/agent.d.ts.map +1 -1
- package/dist/src/commands/agent.js +11 -3
- package/dist/src/commands/agent.js.map +1 -1
- package/dist/src/commands/analyze-ast.d.ts +1 -1
- package/dist/src/commands/analyze-ast.d.ts.map +1 -1
- package/dist/src/commands/analyze-ast.js +47 -41
- package/dist/src/commands/analyze-ast.js.map +1 -1
- package/dist/src/commands/analyze-diff.d.ts.map +1 -1
- package/dist/src/commands/analyze-diff.js +147 -35
- package/dist/src/commands/analyze-diff.js.map +1 -1
- package/dist/src/commands/analyze-imports.d.ts.map +1 -1
- package/dist/src/commands/analyze-imports.js +74 -30
- package/dist/src/commands/analyze-imports.js.map +1 -1
- package/dist/src/commands/analyze-symbols.d.ts.map +1 -1
- package/dist/src/commands/analyze-symbols.js +55 -41
- package/dist/src/commands/analyze-symbols.js.map +1 -1
- package/dist/src/commands/analyze.d.ts +19 -6
- package/dist/src/commands/analyze.d.ts.map +1 -1
- package/dist/src/commands/analyze.js +90 -28
- package/dist/src/commands/analyze.js.map +1 -1
- package/dist/src/commands/autopilot.d.ts.map +1 -1
- package/dist/src/commands/autopilot.js +5 -90
- package/dist/src/commands/autopilot.js.map +1 -1
- package/dist/src/commands/browse-action.d.ts.map +1 -1
- package/dist/src/commands/browse-action.js +65 -17
- package/dist/src/commands/browse-action.js.map +1 -1
- package/dist/src/commands/browse-platform.d.ts.map +1 -1
- package/dist/src/commands/browse-platform.js +13 -10
- package/dist/src/commands/browse-platform.js.map +1 -1
- package/dist/src/commands/browse-workflow.d.ts.map +1 -1
- package/dist/src/commands/browse-workflow.js +54 -20
- package/dist/src/commands/browse-workflow.js.map +1 -1
- package/dist/src/commands/browse.d.ts +1 -1
- package/dist/src/commands/browse.js +2 -2
- package/dist/src/commands/browse.js.map +1 -1
- package/dist/src/commands/cleanup.d.ts.map +1 -1
- package/dist/src/commands/cleanup.js +115 -49
- package/dist/src/commands/cleanup.js.map +1 -1
- package/dist/src/commands/completions.d.ts.map +1 -1
- package/dist/src/commands/completions.js +34 -21
- package/dist/src/commands/completions.js.map +1 -1
- package/dist/src/commands/config.d.ts.map +1 -1
- package/dist/src/commands/config.js +95 -54
- package/dist/src/commands/config.js.map +1 -1
- package/dist/src/commands/crash-reporting.d.ts.map +1 -1
- package/dist/src/commands/crash-reporting.js +10 -4
- package/dist/src/commands/crash-reporting.js.map +1 -1
- package/dist/src/commands/design-detect.d.ts.map +1 -1
- package/dist/src/commands/design-detect.js +33 -12
- package/dist/src/commands/design-detect.js.map +1 -1
- package/dist/src/commands/design-palette.d.ts.map +1 -1
- package/dist/src/commands/design-palette.js +770 -380
- package/dist/src/commands/design-palette.js.map +1 -1
- package/dist/src/commands/doc.d.ts.map +1 -1
- package/dist/src/commands/doc.js +272 -60
- package/dist/src/commands/doc.js.map +1 -1
- package/dist/src/commands/doctor-env-checks.d.ts.map +1 -1
- package/dist/src/commands/doctor-env-checks.js +130 -31
- package/dist/src/commands/doctor-env-checks.js.map +1 -1
- package/dist/src/commands/doctor-monoes-checks.d.ts.map +1 -1
- package/dist/src/commands/doctor-monoes-checks.js +20 -7
- package/dist/src/commands/doctor-monoes-checks.js.map +1 -1
- package/dist/src/commands/doctor-project-checks.d.ts +7 -0
- package/dist/src/commands/doctor-project-checks.d.ts.map +1 -1
- package/dist/src/commands/doctor-project-checks.js +476 -114
- package/dist/src/commands/doctor-project-checks.js.map +1 -1
- package/dist/src/commands/doctor.d.ts.map +1 -1
- package/dist/src/commands/doctor.js +139 -60
- package/dist/src/commands/doctor.js.map +1 -1
- package/dist/src/commands/download-embeddings.d.ts.map +1 -1
- package/dist/src/commands/download-embeddings.js +1 -1
- package/dist/src/commands/download-embeddings.js.map +1 -1
- package/dist/src/commands/events.d.ts.map +1 -1
- package/dist/src/commands/events.js +5 -2
- package/dist/src/commands/events.js.map +1 -1
- package/dist/src/commands/guidance.d.ts.map +1 -1
- package/dist/src/commands/guidance.js +38 -14
- package/dist/src/commands/guidance.js.map +1 -1
- package/dist/src/commands/hooks-core-commands.d.ts.map +1 -1
- package/dist/src/commands/hooks-core-commands.js +71 -44
- package/dist/src/commands/hooks-core-commands.js.map +1 -1
- package/dist/src/commands/hooks-coverage-commands.d.ts +1 -2
- package/dist/src/commands/hooks-coverage-commands.d.ts.map +1 -1
- package/dist/src/commands/hooks-coverage-commands.js +140 -58
- package/dist/src/commands/hooks-coverage-commands.js.map +1 -1
- package/dist/src/commands/hooks-coverage-gaps.d.ts.map +1 -1
- package/dist/src/commands/hooks-coverage-gaps.js +74 -36
- package/dist/src/commands/hooks-coverage-gaps.js.map +1 -1
- package/dist/src/commands/hooks-coverage-routing.d.ts.map +1 -1
- package/dist/src/commands/hooks-coverage-routing.js +139 -66
- package/dist/src/commands/hooks-coverage-routing.js.map +1 -1
- package/dist/src/commands/hooks-coverage-utils.d.ts.map +1 -1
- package/dist/src/commands/hooks-coverage-utils.js +27 -8
- package/dist/src/commands/hooks-coverage-utils.js.map +1 -1
- package/dist/src/commands/hooks-extended-commands.d.ts.map +1 -1
- package/dist/src/commands/hooks-extended-commands.js +86 -21
- package/dist/src/commands/hooks-extended-commands.js.map +1 -1
- package/dist/src/commands/hooks-routing-commands.d.ts +1 -2
- package/dist/src/commands/hooks-routing-commands.d.ts.map +1 -1
- package/dist/src/commands/hooks-routing-commands.js +175 -183
- package/dist/src/commands/hooks-routing-commands.js.map +1 -1
- package/dist/src/commands/hooks-workers.d.ts.map +1 -1
- package/dist/src/commands/hooks-workers.js +111 -128
- package/dist/src/commands/hooks-workers.js.map +1 -1
- package/dist/src/commands/hooks.d.ts +1 -1
- package/dist/src/commands/hooks.d.ts.map +1 -1
- package/dist/src/commands/hooks.js +9 -12
- package/dist/src/commands/hooks.js.map +1 -1
- package/dist/src/commands/index.d.ts +1 -1
- package/dist/src/commands/index.d.ts.map +1 -1
- package/dist/src/commands/index.js +2 -2
- package/dist/src/commands/index.js.map +1 -1
- package/dist/src/commands/init-subcommands.d.ts.map +1 -1
- package/dist/src/commands/init-subcommands.js +16 -5
- package/dist/src/commands/init-subcommands.js.map +1 -1
- package/dist/src/commands/init-upgrade.d.ts.map +1 -1
- package/dist/src/commands/init-upgrade.js +46 -23
- package/dist/src/commands/init-upgrade.js.map +1 -1
- package/dist/src/commands/init-wizard.d.ts.map +1 -1
- package/dist/src/commands/init-wizard.js +161 -44
- package/dist/src/commands/init-wizard.js.map +1 -1
- package/dist/src/commands/init.d.ts.map +1 -1
- package/dist/src/commands/init.js +179 -64
- package/dist/src/commands/init.js.map +1 -1
- package/dist/src/commands/mcp.d.ts +1 -0
- package/dist/src/commands/mcp.d.ts.map +1 -1
- package/dist/src/commands/mcp.js +229 -134
- package/dist/src/commands/mcp.js.map +1 -1
- package/dist/src/commands/memory-admin.d.ts.map +1 -1
- package/dist/src/commands/memory-admin.js +67 -48
- package/dist/src/commands/memory-admin.js.map +1 -1
- package/dist/src/commands/memory-crud.d.ts.map +1 -1
- package/dist/src/commands/memory-crud.js +97 -60
- package/dist/src/commands/memory-crud.js.map +1 -1
- package/dist/src/commands/memory-list.d.ts.map +1 -1
- package/dist/src/commands/memory-list.js +6 -6
- package/dist/src/commands/memory-list.js.map +1 -1
- package/dist/src/commands/memory-transfer.d.ts.map +1 -1
- package/dist/src/commands/memory-transfer.js +46 -23
- package/dist/src/commands/memory-transfer.js.map +1 -1
- package/dist/src/commands/memory.d.ts.map +1 -1
- package/dist/src/commands/memory.js +63 -35
- package/dist/src/commands/memory.js.map +1 -1
- package/dist/src/commands/monograph.d.ts.map +1 -1
- package/dist/src/commands/monograph.js +170 -57
- package/dist/src/commands/monograph.js.map +1 -1
- package/dist/src/commands/monoswarm.d.ts +8 -0
- package/dist/src/commands/monoswarm.d.ts.map +1 -0
- package/dist/src/commands/{swarm.js → monoswarm.js} +93 -315
- package/dist/src/commands/monoswarm.js.map +1 -0
- package/dist/src/commands/neural-core.d.ts.map +1 -1
- package/dist/src/commands/neural-core.js +123 -32
- package/dist/src/commands/neural-core.js.map +1 -1
- package/dist/src/commands/neural-optimize.d.ts.map +1 -1
- package/dist/src/commands/neural-optimize.js +95 -130
- package/dist/src/commands/neural-optimize.js.map +1 -1
- package/dist/src/commands/neural-registry.d.ts +1 -2
- package/dist/src/commands/neural-registry.d.ts.map +1 -1
- package/dist/src/commands/neural-registry.js +70 -181
- package/dist/src/commands/neural-registry.js.map +1 -1
- package/dist/src/commands/org-observe.d.ts +13 -3
- package/dist/src/commands/org-observe.d.ts.map +1 -1
- package/dist/src/commands/org-observe.js +308 -131
- package/dist/src/commands/org-observe.js.map +1 -1
- package/dist/src/commands/org-visualize.d.ts.map +1 -1
- package/dist/src/commands/org-visualize.js +10 -5
- package/dist/src/commands/org-visualize.js.map +1 -1
- package/dist/src/commands/org.d.ts +15 -1
- package/dist/src/commands/org.d.ts.map +1 -1
- package/dist/src/commands/org.js +663 -193
- package/dist/src/commands/org.js.map +1 -1
- package/dist/src/commands/performance.d.ts.map +1 -1
- package/dist/src/commands/performance.js +232 -79
- package/dist/src/commands/performance.js.map +1 -1
- package/dist/src/commands/platforms.d.ts +1 -1
- package/dist/src/commands/platforms.d.ts.map +1 -1
- package/dist/src/commands/platforms.js +89 -49
- package/dist/src/commands/platforms.js.map +1 -1
- package/dist/src/commands/providers.d.ts.map +1 -1
- package/dist/src/commands/providers.js +31 -18
- package/dist/src/commands/providers.js.map +1 -1
- package/dist/src/commands/report-crash.d.ts.map +1 -1
- package/dist/src/commands/report-crash.js +17 -5
- package/dist/src/commands/report-crash.js.map +1 -1
- package/dist/src/commands/route.d.ts.map +1 -1
- package/dist/src/commands/route.js +123 -41
- package/dist/src/commands/route.js.map +1 -1
- package/dist/src/commands/search-universal.d.ts +1 -1
- package/dist/src/commands/search-universal.d.ts.map +1 -1
- package/dist/src/commands/search-universal.js +29 -14
- package/dist/src/commands/search-universal.js.map +1 -1
- package/dist/src/commands/security-cve.d.ts.map +1 -1
- package/dist/src/commands/security-cve.js +75 -34
- package/dist/src/commands/security-cve.js.map +1 -1
- package/dist/src/commands/security-misc.d.ts.map +1 -1
- package/dist/src/commands/security-misc.js +362 -102
- package/dist/src/commands/security-misc.js.map +1 -1
- package/dist/src/commands/security-scan.d.ts +13 -0
- package/dist/src/commands/security-scan.d.ts.map +1 -1
- package/dist/src/commands/security-scan.js +222 -57
- package/dist/src/commands/security-scan.js.map +1 -1
- package/dist/src/commands/security.d.ts.map +1 -1
- package/dist/src/commands/security.js +10 -3
- package/dist/src/commands/security.js.map +1 -1
- package/dist/src/commands/session.d.ts.map +1 -1
- package/dist/src/commands/session.js +81 -75
- package/dist/src/commands/session.js.map +1 -1
- package/dist/src/commands/start.d.ts.map +1 -1
- package/dist/src/commands/start.js +59 -129
- package/dist/src/commands/start.js.map +1 -1
- package/dist/src/commands/status.d.ts.map +1 -1
- package/dist/src/commands/status.js +151 -130
- package/dist/src/commands/status.js.map +1 -1
- package/dist/src/commands/task.d.ts.map +1 -1
- package/dist/src/commands/task.js +115 -84
- package/dist/src/commands/task.js.map +1 -1
- package/dist/src/commands/tokens.d.ts.map +1 -1
- package/dist/src/commands/tokens.js +67 -32
- package/dist/src/commands/tokens.js.map +1 -1
- package/dist/src/commands/update.d.ts.map +1 -1
- package/dist/src/commands/update.js +3 -5
- package/dist/src/commands/update.js.map +1 -1
- package/dist/src/consensus/audit-writer.d.ts +7 -2
- package/dist/src/consensus/audit-writer.d.ts.map +1 -1
- package/dist/src/consensus/audit-writer.js +19 -11
- package/dist/src/consensus/audit-writer.js.map +1 -1
- package/dist/src/consensus/tally.d.ts.map +1 -1
- package/dist/src/consensus/tally.js +2 -2
- package/dist/src/consensus/tally.js.map +1 -1
- package/dist/src/index.d.ts +7 -7
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +51 -43
- package/dist/src/index.js.map +1 -1
- package/dist/src/init/claudemd-generator.d.ts +1 -1
- package/dist/src/init/claudemd-generator.d.ts.map +1 -1
- package/dist/src/init/claudemd-generator.js +52 -36
- package/dist/src/init/claudemd-generator.js.map +1 -1
- package/dist/src/init/codex-generator.d.ts +16 -0
- package/dist/src/init/codex-generator.d.ts.map +1 -0
- package/dist/src/init/codex-generator.js +180 -0
- package/dist/src/init/codex-generator.js.map +1 -0
- package/dist/src/init/copy-assets.d.ts.map +1 -1
- package/dist/src/init/copy-assets.js +17 -20
- package/dist/src/init/copy-assets.js.map +1 -1
- package/dist/src/init/executor.d.ts +1 -1
- package/dist/src/init/executor.d.ts.map +1 -1
- package/dist/src/init/executor.js +56 -29
- package/dist/src/init/executor.js.map +1 -1
- package/dist/src/init/geminimd-generator.d.ts +1 -1
- package/dist/src/init/geminimd-generator.d.ts.map +1 -1
- package/dist/src/init/geminimd-generator.js +2 -2
- package/dist/src/init/geminimd-generator.js.map +1 -1
- package/dist/src/init/helpers-generator.d.ts.map +1 -1
- package/dist/src/init/helpers-generator.js +7 -7
- package/dist/src/init/helpers-generator.js.map +1 -1
- package/dist/src/init/index.d.ts +8 -7
- package/dist/src/init/index.d.ts.map +1 -1
- package/dist/src/init/index.js +9 -8
- package/dist/src/init/index.js.map +1 -1
- package/dist/src/init/kimi-generator.d.ts +1 -1
- package/dist/src/init/kimi-generator.d.ts.map +1 -1
- package/dist/src/init/kimi-generator.js +34 -28
- package/dist/src/init/kimi-generator.js.map +1 -1
- package/dist/src/init/mcp-generator.d.ts.map +1 -1
- package/dist/src/init/mcp-generator.js +3 -11
- package/dist/src/init/mcp-generator.js.map +1 -1
- package/dist/src/init/opencode-generator.d.ts.map +1 -1
- package/dist/src/init/opencode-generator.js +35 -22
- package/dist/src/init/opencode-generator.js.map +1 -1
- package/dist/src/init/settings-generator.d.ts.map +1 -1
- package/dist/src/init/settings-generator.js +3 -7
- package/dist/src/init/settings-generator.js.map +1 -1
- package/dist/src/init/shared-instructions-generator.d.ts.map +1 -1
- package/dist/src/init/shared-instructions-generator.js +124 -76
- package/dist/src/init/shared-instructions-generator.js.map +1 -1
- package/dist/src/init/shared.d.ts.map +1 -1
- package/dist/src/init/shared.js +26 -25
- package/dist/src/init/shared.js.map +1 -1
- package/dist/src/init/statusline-generator.js +19 -19
- package/dist/src/init/types.d.ts +9 -10
- package/dist/src/init/types.d.ts.map +1 -1
- package/dist/src/init/types.js +10 -8
- package/dist/src/init/types.js.map +1 -1
- package/dist/src/init/upgrade.d.ts.map +1 -1
- package/dist/src/init/upgrade.js +24 -22
- package/dist/src/init/upgrade.js.map +1 -1
- package/dist/src/init/write-antigravity.d.ts.map +1 -1
- package/dist/src/init/write-antigravity.js +15 -7
- package/dist/src/init/write-antigravity.js.map +1 -1
- package/dist/src/init/write-capabilities.d.ts.map +1 -1
- package/dist/src/init/write-capabilities.js +39 -52
- package/dist/src/init/write-capabilities.js.map +1 -1
- package/dist/src/init/write-claude.d.ts.map +1 -1
- package/dist/src/init/write-claude.js +19 -15
- package/dist/src/init/write-claude.js.map +1 -1
- package/dist/src/init/write-codex.d.ts +4 -0
- package/dist/src/init/write-codex.d.ts.map +1 -0
- package/dist/src/init/write-codex.js +122 -0
- package/dist/src/init/write-codex.js.map +1 -0
- package/dist/src/init/write-kimicode.d.ts.map +1 -1
- package/dist/src/init/write-kimicode.js +10 -6
- package/dist/src/init/write-kimicode.js.map +1 -1
- package/dist/src/init/write-opencode.d.ts.map +1 -1
- package/dist/src/init/write-opencode.js +4 -4
- package/dist/src/init/write-opencode.js.map +1 -1
- package/dist/src/init/write-runtime-config.d.ts.map +1 -1
- package/dist/src/init/write-runtime-config.js +24 -24
- package/dist/src/init/write-runtime-config.js.map +1 -1
- package/dist/src/init/write-sample-org.js +1 -1
- package/dist/src/init/write-sample-org.js.map +1 -1
- package/dist/src/knowledge/document-pipeline.d.ts.map +1 -1
- package/dist/src/knowledge/document-pipeline.js +144 -48
- package/dist/src/knowledge/document-pipeline.js.map +1 -1
- package/dist/src/knowledge/eval/corpus.d.ts.map +1 -1
- package/dist/src/knowledge/eval/corpus.js +18 -9
- package/dist/src/knowledge/eval/corpus.js.map +1 -1
- package/dist/src/knowledge/eval/golden-set.d.ts.map +1 -1
- package/dist/src/knowledge/eval/golden-set.js +4286 -136
- package/dist/src/knowledge/eval/golden-set.js.map +1 -1
- package/dist/src/knowledge/eval/harness.d.ts +2 -2
- package/dist/src/knowledge/eval/harness.d.ts.map +1 -1
- package/dist/src/knowledge/eval/harness.js +163 -70
- package/dist/src/knowledge/eval/harness.js.map +1 -1
- package/dist/src/knowledge/eval/metrics.d.ts.map +1 -1
- package/dist/src/knowledge/eval/metrics.js +25 -18
- package/dist/src/knowledge/eval/metrics.js.map +1 -1
- package/dist/src/knowledge/eval/model-presence.d.ts.map +1 -1
- package/dist/src/knowledge/eval/model-presence.js +40 -14
- package/dist/src/knowledge/eval/model-presence.js.map +1 -1
- package/dist/src/knowledge/eval/network-guard.d.ts.map +1 -1
- package/dist/src/knowledge/eval/network-guard.js +22 -10
- package/dist/src/knowledge/eval/network-guard.js.map +1 -1
- package/dist/src/knowledge/eval/retrievers.d.ts.map +1 -1
- package/dist/src/knowledge/eval/retrievers.js +14 -10
- package/dist/src/knowledge/eval/retrievers.js.map +1 -1
- package/dist/src/knowledge/eval/signals.d.ts.map +1 -1
- package/dist/src/knowledge/eval/signals.js +54 -18
- package/dist/src/knowledge/eval/signals.js.map +1 -1
- package/dist/src/mcp-client.d.ts.map +1 -1
- package/dist/src/mcp-client.js +70 -35
- package/dist/src/mcp-client.js.map +1 -1
- package/dist/src/mcp-server.d.ts +1 -9
- package/dist/src/mcp-server.d.ts.map +1 -1
- package/dist/src/mcp-server.js +20 -43
- package/dist/src/mcp-server.js.map +1 -1
- package/dist/src/mcp-tools/agent-tools.d.ts +1 -1
- package/dist/src/mcp-tools/agent-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/agent-tools.js +87 -52
- package/dist/src/mcp-tools/agent-tools.js.map +1 -1
- package/dist/src/mcp-tools/analyze-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/analyze-tools.js +34 -17
- package/dist/src/mcp-tools/analyze-tools.js.map +1 -1
- package/dist/src/mcp-tools/auto-install.d.ts.map +1 -1
- package/dist/src/mcp-tools/auto-install.js +3 -3
- package/dist/src/mcp-tools/auto-install.js.map +1 -1
- package/dist/src/mcp-tools/autopilot-tools.d.ts +1 -1
- package/dist/src/mcp-tools/autopilot-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/autopilot-tools.js +32 -70
- package/dist/src/mcp-tools/autopilot-tools.js.map +1 -1
- package/dist/src/mcp-tools/browser-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/browser-tools.js +119 -37
- package/dist/src/mcp-tools/browser-tools.js.map +1 -1
- package/dist/src/mcp-tools/claims-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/claims-tools.js +100 -44
- package/dist/src/mcp-tools/claims-tools.js.map +1 -1
- package/dist/src/mcp-tools/config-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/config-tools.js +36 -15
- package/dist/src/mcp-tools/config-tools.js.map +1 -1
- package/dist/src/mcp-tools/embeddings-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/embeddings-tools.js +34 -23
- package/dist/src/mcp-tools/embeddings-tools.js.map +1 -1
- package/dist/src/mcp-tools/github-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/github-tools.js +200 -43
- package/dist/src/mcp-tools/github-tools.js.map +1 -1
- package/dist/src/mcp-tools/graphify-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/graphify-tools.js +2 -2
- package/dist/src/mcp-tools/graphify-tools.js.map +1 -1
- package/dist/src/mcp-tools/guidance-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/guidance-tools.js +461 -115
- package/dist/src/mcp-tools/guidance-tools.js.map +1 -1
- package/dist/src/mcp-tools/hooks-embedding.d.ts +0 -6
- package/dist/src/mcp-tools/hooks-embedding.d.ts.map +1 -1
- package/dist/src/mcp-tools/hooks-embedding.js +170 -59
- package/dist/src/mcp-tools/hooks-embedding.js.map +1 -1
- package/dist/src/mcp-tools/hooks-intelligence.d.ts +0 -9
- package/dist/src/mcp-tools/hooks-intelligence.d.ts.map +1 -1
- package/dist/src/mcp-tools/hooks-intelligence.js +64 -119
- package/dist/src/mcp-tools/hooks-intelligence.js.map +1 -1
- package/dist/src/mcp-tools/hooks-routing.d.ts +1 -2
- package/dist/src/mcp-tools/hooks-routing.d.ts.map +1 -1
- package/dist/src/mcp-tools/hooks-routing.js +92 -165
- package/dist/src/mcp-tools/hooks-routing.js.map +1 -1
- package/dist/src/mcp-tools/hooks-tools.d.ts +1 -1
- package/dist/src/mcp-tools/hooks-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/hooks-tools.js +2 -4
- package/dist/src/mcp-tools/hooks-tools.js.map +1 -1
- package/dist/src/mcp-tools/index.d.ts +18 -19
- package/dist/src/mcp-tools/index.d.ts.map +1 -1
- package/dist/src/mcp-tools/index.js +18 -19
- package/dist/src/mcp-tools/index.js.map +1 -1
- package/dist/src/mcp-tools/knowledge-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/knowledge-tools.js +88 -28
- package/dist/src/mcp-tools/knowledge-tools.js.map +1 -1
- package/dist/src/mcp-tools/memory-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/memory-tools.js +157 -40
- package/dist/src/mcp-tools/memory-tools.js.map +1 -1
- package/dist/src/mcp-tools/monodesign-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/monodesign-tools.js +63 -22
- package/dist/src/mcp-tools/monodesign-tools.js.map +1 -1
- package/dist/src/mcp-tools/monograph/agent-history-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/monograph/agent-history-tools.js +22 -9
- package/dist/src/mcp-tools/monograph/agent-history-tools.js.map +1 -1
- package/dist/src/mcp-tools/monograph/build-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/monograph/build-tools.js +37 -16
- package/dist/src/mcp-tools/monograph/build-tools.js.map +1 -1
- package/dist/src/mcp-tools/monograph/group-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/monograph/group-tools.js +57 -20
- package/dist/src/mcp-tools/monograph/group-tools.js.map +1 -1
- package/dist/src/mcp-tools/monograph/health-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/monograph/health-tools.js +13 -7
- package/dist/src/mcp-tools/monograph/health-tools.js.map +1 -1
- package/dist/src/mcp-tools/monograph/impact-tools.js +6 -6
- package/dist/src/mcp-tools/monograph/impact-tools.js.map +1 -1
- package/dist/src/mcp-tools/monograph/index.d.ts.map +1 -1
- package/dist/src/mcp-tools/monograph/index.js +8 -8
- package/dist/src/mcp-tools/monograph/index.js.map +1 -1
- package/dist/src/mcp-tools/monograph/query-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/monograph/query-tools.js +140 -65
- package/dist/src/mcp-tools/monograph/query-tools.js.map +1 -1
- package/dist/src/mcp-tools/monograph/shared.d.ts.map +1 -1
- package/dist/src/mcp-tools/monograph/shared.js +42 -22
- package/dist/src/mcp-tools/monograph/shared.js.map +1 -1
- package/dist/src/mcp-tools/monograph/visualize-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/monograph/visualize-tools.js +87 -36
- package/dist/src/mcp-tools/monograph/visualize-tools.js.map +1 -1
- package/dist/src/mcp-tools/monograph-compat.d.ts.map +1 -1
- package/dist/src/mcp-tools/monograph-compat.js +25 -14
- package/dist/src/mcp-tools/monograph-compat.js.map +1 -1
- package/dist/src/mcp-tools/monograph-tools.d.ts +1 -1
- package/dist/src/mcp-tools/monograph-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/monograph-tools.js +1 -1
- package/dist/src/mcp-tools/monograph-tools.js.map +1 -1
- package/dist/src/mcp-tools/monomind-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/monomind-tools.js +1 -1
- package/dist/src/mcp-tools/monomind-tools.js.map +1 -1
- package/dist/src/mcp-tools/monoswarm-tools.d.ts +17 -0
- package/dist/src/mcp-tools/monoswarm-tools.d.ts.map +1 -0
- package/dist/src/mcp-tools/monoswarm-tools.js +1289 -0
- package/dist/src/mcp-tools/monoswarm-tools.js.map +1 -0
- package/dist/src/mcp-tools/performance-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/performance-tools.js +305 -101
- package/dist/src/mcp-tools/performance-tools.js.map +1 -1
- package/dist/src/mcp-tools/quality/coverage-analysis/prioritize-gaps.d.ts.map +1 -1
- package/dist/src/mcp-tools/quality/coverage-analysis/prioritize-gaps.js +9 -4
- package/dist/src/mcp-tools/quality/coverage-analysis/prioritize-gaps.js.map +1 -1
- package/dist/src/mcp-tools/quality/security-compliance/detect-secrets.d.ts +1 -1
- package/dist/src/mcp-tools/quality/security-compliance/detect-secrets.d.ts.map +1 -1
- package/dist/src/mcp-tools/quality/security-compliance/detect-secrets.js +36 -14
- package/dist/src/mcp-tools/quality/security-compliance/detect-secrets.js.map +1 -1
- package/dist/src/mcp-tools/quality-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/quality-tools.js.map +1 -1
- package/dist/src/mcp-tools/request-tracker.d.ts.map +1 -1
- package/dist/src/mcp-tools/request-tracker.js +2 -1
- package/dist/src/mcp-tools/request-tracker.js.map +1 -1
- package/dist/src/mcp-tools/security-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/security-tools.js +117 -53
- package/dist/src/mcp-tools/security-tools.js.map +1 -1
- package/dist/src/mcp-tools/session-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/session-tools.js +22 -13
- package/dist/src/mcp-tools/session-tools.js.map +1 -1
- package/dist/src/mcp-tools/system-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/system-tools.js +37 -20
- package/dist/src/mcp-tools/system-tools.js.map +1 -1
- package/dist/src/mcp-tools/task-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/task-tools.js +59 -22
- package/dist/src/mcp-tools/task-tools.js.map +1 -1
- package/dist/src/mcp-tools/terminal-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/terminal-tools.js +43 -16
- package/dist/src/mcp-tools/terminal-tools.js.map +1 -1
- package/dist/src/mcp-tools/transfer-tools.d.ts +8 -12
- package/dist/src/mcp-tools/transfer-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/transfer-tools.js +11 -14
- package/dist/src/mcp-tools/transfer-tools.js.map +1 -1
- package/dist/src/mcp-tools/types.d.ts +1 -1
- package/dist/src/mcp-tools/types.d.ts.map +1 -1
- package/dist/src/mcp-tools/types.js +1 -1
- package/dist/src/mcp-tools/types.js.map +1 -1
- package/dist/src/memory/bm25-index.d.ts.map +1 -1
- package/dist/src/memory/bm25-index.js.map +1 -1
- package/dist/src/memory/embedding-operations.d.ts.map +1 -1
- package/dist/src/memory/embedding-operations.js +23 -56
- package/dist/src/memory/embedding-operations.js.map +1 -1
- package/dist/src/memory/ewc-consolidation.d.ts.map +1 -1
- package/dist/src/memory/ewc-consolidation.js +31 -27
- package/dist/src/memory/ewc-consolidation.js.map +1 -1
- package/dist/src/memory/hnsw-operations.d.ts +15 -75
- package/dist/src/memory/hnsw-operations.d.ts.map +1 -1
- package/dist/src/memory/hnsw-operations.js +27 -268
- package/dist/src/memory/hnsw-operations.js.map +1 -1
- package/dist/src/memory/intelligence.d.ts +2 -2
- package/dist/src/memory/intelligence.d.ts.map +1 -1
- package/dist/src/memory/intelligence.js +130 -91
- package/dist/src/memory/intelligence.js.map +1 -1
- package/dist/src/memory/memory-bridge.d.ts +24 -24
- package/dist/src/memory/memory-bridge.d.ts.map +1 -1
- package/dist/src/memory/memory-bridge.js +40 -41
- package/dist/src/memory/memory-bridge.js.map +1 -1
- package/dist/src/memory/memory-crud.d.ts +1 -1
- package/dist/src/memory/memory-crud.d.ts.map +1 -1
- package/dist/src/memory/memory-crud.js +82 -67
- package/dist/src/memory/memory-crud.js.map +1 -1
- package/dist/src/memory/memory-initializer.d.ts +7 -8
- package/dist/src/memory/memory-initializer.d.ts.map +1 -1
- package/dist/src/memory/memory-initializer.js +38 -35
- package/dist/src/memory/memory-initializer.js.map +1 -1
- package/dist/src/memory/memory-kg.d.ts.map +1 -1
- package/dist/src/memory/memory-kg.js +173 -41
- package/dist/src/memory/memory-kg.js.map +1 -1
- package/dist/src/memory/memory-migrations.d.ts.map +1 -1
- package/dist/src/memory/memory-migrations.js +11 -7
- package/dist/src/memory/memory-migrations.js.map +1 -1
- package/dist/src/memory/memory-read.d.ts.map +1 -1
- package/dist/src/memory/memory-read.js +50 -35
- package/dist/src/memory/memory-read.js.map +1 -1
- package/dist/src/memory/query-router.d.ts.map +1 -1
- package/dist/src/memory/query-router.js +29 -12
- package/dist/src/memory/query-router.js.map +1 -1
- package/dist/src/memory/sona-optimizer.d.ts +1 -1
- package/dist/src/memory/sona-optimizer.d.ts.map +1 -1
- package/dist/src/memory/sona-optimizer.js +164 -42
- package/dist/src/memory/sona-optimizer.js.map +1 -1
- package/dist/src/memory/text-tokens.d.ts.map +1 -1
- package/dist/src/memory/text-tokens.js +78 -8
- package/dist/src/memory/text-tokens.js.map +1 -1
- package/dist/src/monovector/command-outcomes.d.ts.map +1 -1
- package/dist/src/monovector/command-outcomes.js +23 -8
- package/dist/src/monovector/command-outcomes.js.map +1 -1
- package/dist/src/monovector/coverage-router.d.ts.map +1 -1
- package/dist/src/monovector/coverage-router.js +29 -14
- package/dist/src/monovector/coverage-router.js.map +1 -1
- package/dist/src/monovector/coverage-tools.d.ts.map +1 -1
- package/dist/src/monovector/coverage-tools.js +21 -6
- package/dist/src/monovector/coverage-tools.js.map +1 -1
- package/dist/src/monovector/diff-classifier.d.ts +1 -1
- package/dist/src/monovector/diff-classifier.d.ts.map +1 -1
- package/dist/src/monovector/diff-classifier.js +100 -45
- package/dist/src/monovector/diff-classifier.js.map +1 -1
- package/dist/src/monovector/index.d.ts +3 -4
- package/dist/src/monovector/index.d.ts.map +1 -1
- package/dist/src/monovector/index.js +18 -6
- package/dist/src/monovector/index.js.map +1 -1
- package/dist/src/monovector/init-state.d.ts.map +1 -1
- package/dist/src/monovector/init-state.js +15 -5
- package/dist/src/monovector/init-state.js.map +1 -1
- package/dist/src/monovector/model-outcomes.d.ts +25 -0
- package/dist/src/monovector/model-outcomes.d.ts.map +1 -0
- package/dist/src/monovector/model-outcomes.js +113 -0
- package/dist/src/monovector/model-outcomes.js.map +1 -0
- package/dist/src/monovector/route-outcomes.d.ts.map +1 -1
- package/dist/src/monovector/route-outcomes.js +40 -21
- package/dist/src/monovector/route-outcomes.js.map +1 -1
- package/dist/src/observability/replay-reader.d.ts.map +1 -1
- package/dist/src/observability/replay-reader.js +6 -8
- package/dist/src/observability/replay-reader.js.map +1 -1
- package/dist/src/orgrt/agent-runner.d.ts +9 -3
- package/dist/src/orgrt/agent-runner.d.ts.map +1 -1
- package/dist/src/orgrt/agent-runner.js +1 -1
- package/dist/src/orgrt/agent-runner.js.map +1 -1
- package/dist/src/orgrt/antigravity-runner.d.ts +26 -3
- package/dist/src/orgrt/antigravity-runner.d.ts.map +1 -1
- package/dist/src/orgrt/antigravity-runner.js +295 -125
- package/dist/src/orgrt/antigravity-runner.js.map +1 -1
- package/dist/src/orgrt/approvals.d.ts.map +1 -1
- package/dist/src/orgrt/approvals.js +32 -8
- package/dist/src/orgrt/approvals.js.map +1 -1
- package/dist/src/orgrt/broker.d.ts.map +1 -1
- package/dist/src/orgrt/broker.js +11 -4
- package/dist/src/orgrt/broker.js.map +1 -1
- package/dist/src/orgrt/bus.d.ts.map +1 -1
- package/dist/src/orgrt/bus.js +28 -15
- package/dist/src/orgrt/bus.js.map +1 -1
- package/dist/src/orgrt/checkpoint-ops.d.ts +10 -16
- package/dist/src/orgrt/checkpoint-ops.d.ts.map +1 -1
- package/dist/src/orgrt/checkpoint-ops.js +47 -36
- package/dist/src/orgrt/checkpoint-ops.js.map +1 -1
- package/dist/src/orgrt/checkpoint.d.ts +12 -1
- package/dist/src/orgrt/checkpoint.d.ts.map +1 -1
- package/dist/src/orgrt/checkpoint.js +22 -4
- package/dist/src/orgrt/checkpoint.js.map +1 -1
- package/dist/src/orgrt/codex-runner.d.ts +27 -3
- package/dist/src/orgrt/codex-runner.d.ts.map +1 -1
- package/dist/src/orgrt/codex-runner.js +387 -129
- package/dist/src/orgrt/codex-runner.js.map +1 -1
- package/dist/src/orgrt/copilot-runner.d.ts +1 -1
- package/dist/src/orgrt/copilot-runner.d.ts.map +1 -1
- package/dist/src/orgrt/copilot-runner.js +60 -18
- package/dist/src/orgrt/copilot-runner.js.map +1 -1
- package/dist/src/orgrt/cross-org.d.ts.map +1 -1
- package/dist/src/orgrt/cross-org.js +224 -41
- package/dist/src/orgrt/cross-org.js.map +1 -1
- package/dist/src/orgrt/crush-runner.d.ts +5 -2
- package/dist/src/orgrt/crush-runner.d.ts.map +1 -1
- package/dist/src/orgrt/crush-runner.js +93 -47
- package/dist/src/orgrt/crush-runner.js.map +1 -1
- package/dist/src/orgrt/daemon.d.ts +42 -30
- package/dist/src/orgrt/daemon.d.ts.map +1 -1
- package/dist/src/orgrt/daemon.js +199 -69
- package/dist/src/orgrt/daemon.js.map +1 -1
- package/dist/src/orgrt/decisions.d.ts +3 -2
- package/dist/src/orgrt/decisions.d.ts.map +1 -1
- package/dist/src/orgrt/decisions.js +101 -32
- package/dist/src/orgrt/decisions.js.map +1 -1
- package/dist/src/orgrt/fence.d.ts +2 -2
- package/dist/src/orgrt/fence.d.ts.map +1 -1
- package/dist/src/orgrt/fence.js +13 -5
- package/dist/src/orgrt/fence.js.map +1 -1
- package/dist/src/orgrt/forwarder.js +1 -1
- package/dist/src/orgrt/forwarder.js.map +1 -1
- package/dist/src/orgrt/grok-runner.d.ts +1 -1
- package/dist/src/orgrt/grok-runner.d.ts.map +1 -1
- package/dist/src/orgrt/grok-runner.js +75 -30
- package/dist/src/orgrt/grok-runner.js.map +1 -1
- package/dist/src/orgrt/inbox.d.ts.map +1 -1
- package/dist/src/orgrt/inbox.js +5 -3
- package/dist/src/orgrt/inbox.js.map +1 -1
- package/dist/src/orgrt/kimicode-runner.d.ts +54 -8
- package/dist/src/orgrt/kimicode-runner.d.ts.map +1 -1
- package/dist/src/orgrt/kimicode-runner.js +278 -151
- package/dist/src/orgrt/kimicode-runner.js.map +1 -1
- package/dist/src/orgrt/mailbox.d.ts +26 -1
- package/dist/src/orgrt/mailbox.d.ts.map +1 -1
- package/dist/src/orgrt/mailbox.js +88 -6
- package/dist/src/orgrt/mailbox.js.map +1 -1
- package/dist/src/orgrt/migrate.d.ts.map +1 -1
- package/dist/src/orgrt/migrate.js +38 -25
- package/dist/src/orgrt/migrate.js.map +1 -1
- package/dist/src/orgrt/opencode-runner.d.ts +1 -1
- package/dist/src/orgrt/opencode-runner.d.ts.map +1 -1
- package/dist/src/orgrt/opencode-runner.js +16 -5
- package/dist/src/orgrt/opencode-runner.js.map +1 -1
- package/dist/src/orgrt/org-memory.d.ts +2 -2
- package/dist/src/orgrt/org-memory.d.ts.map +1 -1
- package/dist/src/orgrt/org-memory.js +66 -26
- package/dist/src/orgrt/org-memory.js.map +1 -1
- package/dist/src/orgrt/pi-rpc-runner.d.ts +1 -1
- package/dist/src/orgrt/pi-rpc-runner.d.ts.map +1 -1
- package/dist/src/orgrt/pi-rpc-runner.js +134 -114
- package/dist/src/orgrt/pi-rpc-runner.js.map +1 -1
- package/dist/src/orgrt/pi-runner.d.ts +1 -1
- package/dist/src/orgrt/pi-runner.d.ts.map +1 -1
- package/dist/src/orgrt/pi-runner.js +35 -16
- package/dist/src/orgrt/pi-runner.js.map +1 -1
- package/dist/src/orgrt/policy.d.ts +11 -0
- package/dist/src/orgrt/policy.d.ts.map +1 -1
- package/dist/src/orgrt/policy.js +86 -18
- package/dist/src/orgrt/policy.js.map +1 -1
- package/dist/src/orgrt/prechecks.d.ts.map +1 -1
- package/dist/src/orgrt/prechecks.js +9 -4
- package/dist/src/orgrt/prechecks.js.map +1 -1
- package/dist/src/orgrt/provider.d.ts +29 -1
- package/dist/src/orgrt/provider.d.ts.map +1 -1
- package/dist/src/orgrt/provider.js +62 -2
- package/dist/src/orgrt/provider.js.map +1 -1
- package/dist/src/orgrt/questions.d.ts.map +1 -1
- package/dist/src/orgrt/questions.js +34 -10
- package/dist/src/orgrt/questions.js.map +1 -1
- package/dist/src/orgrt/qwen-rpc-runner.d.ts +56 -0
- package/dist/src/orgrt/qwen-rpc-runner.d.ts.map +1 -0
- package/dist/src/orgrt/qwen-rpc-runner.js +381 -0
- package/dist/src/orgrt/qwen-rpc-runner.js.map +1 -0
- package/dist/src/orgrt/qwen-runner.d.ts +1 -1
- package/dist/src/orgrt/qwen-runner.d.ts.map +1 -1
- package/dist/src/orgrt/qwen-runner.js +42 -23
- package/dist/src/orgrt/qwen-runner.js.map +1 -1
- package/dist/src/orgrt/remote.js +1 -1
- package/dist/src/orgrt/remote.js.map +1 -1
- package/dist/src/orgrt/reporting.d.ts.map +1 -1
- package/dist/src/orgrt/reporting.js +61 -27
- package/dist/src/orgrt/reporting.js.map +1 -1
- package/dist/src/orgrt/scheduler-integration.d.ts.map +1 -1
- package/dist/src/orgrt/scheduler-integration.js +63 -19
- package/dist/src/orgrt/scheduler-integration.js.map +1 -1
- package/dist/src/orgrt/scheduler.d.ts.map +1 -1
- package/dist/src/orgrt/scheduler.js +7 -3
- package/dist/src/orgrt/scheduler.js.map +1 -1
- package/dist/src/orgrt/server.js +1 -1
- package/dist/src/orgrt/server.js.map +1 -1
- package/dist/src/orgrt/session.d.ts +32 -4
- package/dist/src/orgrt/session.d.ts.map +1 -1
- package/dist/src/orgrt/session.js +242 -74
- package/dist/src/orgrt/session.js.map +1 -1
- package/dist/src/orgrt/state-detector.d.ts.map +1 -1
- package/dist/src/orgrt/state-detector.js +6 -2
- package/dist/src/orgrt/state-detector.js.map +1 -1
- package/dist/src/orgrt/task-dag.d.ts +29 -1
- package/dist/src/orgrt/task-dag.d.ts.map +1 -1
- package/dist/src/orgrt/task-dag.js +76 -12
- package/dist/src/orgrt/task-dag.js.map +1 -1
- package/dist/src/orgrt/templates.d.ts.map +1 -1
- package/dist/src/orgrt/templates.js +198 -36
- package/dist/src/orgrt/templates.js.map +1 -1
- package/dist/src/orgrt/test-loop.d.ts.map +1 -1
- package/dist/src/orgrt/test-loop.js +139 -35
- package/dist/src/orgrt/test-loop.js.map +1 -1
- package/dist/src/orgrt/tool-fence.d.ts.map +1 -1
- package/dist/src/orgrt/tool-fence.js +21 -3
- package/dist/src/orgrt/tool-fence.js.map +1 -1
- package/dist/src/orgrt/types.d.ts +32 -1
- package/dist/src/orgrt/types.d.ts.map +1 -1
- package/dist/src/orgrt/types.js +192 -39
- package/dist/src/orgrt/types.js.map +1 -1
- package/dist/src/orgrt/usage-proxy.d.ts +20 -0
- package/dist/src/orgrt/usage-proxy.d.ts.map +1 -1
- package/dist/src/orgrt/usage-proxy.js +25 -15
- package/dist/src/orgrt/usage-proxy.js.map +1 -1
- package/dist/src/orgrt/vercel-providers.d.ts.map +1 -1
- package/dist/src/orgrt/vercel-providers.js +11 -1
- package/dist/src/orgrt/vercel-providers.js.map +1 -1
- package/dist/src/orgrt/vercel-runner.d.ts +1 -1
- package/dist/src/orgrt/vercel-runner.d.ts.map +1 -1
- package/dist/src/orgrt/vercel-runner.js +3 -5
- package/dist/src/orgrt/vercel-runner.js.map +1 -1
- package/dist/src/orgrt/vercel-session-store.d.ts +14 -0
- package/dist/src/orgrt/vercel-session-store.d.ts.map +1 -1
- package/dist/src/orgrt/vercel-session-store.js +3 -3
- package/dist/src/orgrt/vercel-session-store.js.map +1 -1
- package/dist/src/orgrt/visualization.js +3 -4
- package/dist/src/orgrt/visualization.js.map +1 -1
- package/dist/src/output.d.ts +1 -1
- package/dist/src/output.d.ts.map +1 -1
- package/dist/src/output.js +68 -39
- package/dist/src/output.js.map +1 -1
- package/dist/src/parser.d.ts.map +1 -1
- package/dist/src/parser.js +35 -24
- package/dist/src/parser.js.map +1 -1
- package/dist/src/pricing/model-pricing.d.ts.map +1 -1
- package/dist/src/pricing/model-pricing.js +3 -7
- package/dist/src/pricing/model-pricing.js.map +1 -1
- package/dist/src/prompt.d.ts +2 -2
- package/dist/src/prompt.d.ts.map +1 -1
- package/dist/src/prompt.js +49 -41
- package/dist/src/prompt.js.map +1 -1
- package/dist/src/routing/embedder.d.ts.map +1 -1
- package/dist/src/routing/embedder.js +0 -0
- package/dist/src/routing/embedder.js.map +1 -1
- package/dist/src/routing/llm-caller.d.ts.map +1 -1
- package/dist/src/routing/llm-caller.js +27 -8
- package/dist/src/routing/llm-caller.js.map +1 -1
- package/dist/src/routing/model-download.d.ts.map +1 -1
- package/dist/src/routing/model-download.js +3 -3
- package/dist/src/routing/model-download.js.map +1 -1
- package/dist/src/routing/route-layer-factory.d.ts.map +1 -1
- package/dist/src/routing/route-layer-factory.js +22 -14
- package/dist/src/routing/route-layer-factory.js.map +1 -1
- package/dist/src/security/audit-log.d.ts +47 -0
- package/dist/src/security/audit-log.d.ts.map +1 -0
- package/dist/src/security/audit-log.js +88 -0
- package/dist/src/security/audit-log.js.map +1 -0
- package/dist/src/services/config-file-manager.d.ts +2 -2
- package/dist/src/services/config-file-manager.d.ts.map +1 -1
- package/dist/src/services/config-file-manager.js +44 -20
- package/dist/src/services/config-file-manager.js.map +1 -1
- package/dist/src/services/crash-reporter.d.ts.map +1 -1
- package/dist/src/services/crash-reporter.js +44 -16
- package/dist/src/services/crash-reporter.js.map +1 -1
- package/dist/src/suggest.d.ts +1 -1
- package/dist/src/suggest.d.ts.map +1 -1
- package/dist/src/suggest.js +57 -57
- package/dist/src/suggest.js.map +1 -1
- package/dist/src/sync/checker.d.ts.map +1 -1
- package/dist/src/sync/checker.js +7 -8
- package/dist/src/sync/checker.js.map +1 -1
- package/dist/src/transfer/anonymization/index.d.ts +1 -1
- package/dist/src/transfer/anonymization/index.js +3 -3
- package/dist/src/transfer/anonymization/index.js.map +1 -1
- package/dist/src/types.d.ts +4 -4
- package/dist/src/types.d.ts.map +1 -1
- package/dist/src/ui/collector.mjs +275 -159
- package/dist/src/ui/dashboard.html +761 -742
- package/dist/src/ui/data/agent-avatars.html +3 -15
- package/dist/src/ui/data/agent-avatars.json +11 -27
- package/dist/src/ui/markdown.js +243 -62
- package/dist/src/ui/mastermind-diagram-fallback.html +29 -29
- package/dist/src/ui/orgs-files.js +99 -46
- package/dist/src/ui/orgs.html +54 -54
- package/dist/src/ui/routes-monograph.mjs +918 -246
- package/dist/src/ui/routes-org.mjs +4234 -2369
- package/dist/src/ui/server.mjs +142 -106
- package/dist/src/update/checker.d.ts.map +1 -1
- package/dist/src/update/checker.js +17 -12
- package/dist/src/update/checker.js.map +1 -1
- package/dist/src/update/executor.d.ts +2 -2
- package/dist/src/update/executor.d.ts.map +1 -1
- package/dist/src/update/executor.js +21 -11
- package/dist/src/update/executor.js.map +1 -1
- package/dist/src/update/index.d.ts +6 -6
- package/dist/src/update/index.d.ts.map +1 -1
- package/dist/src/update/index.js +9 -9
- package/dist/src/update/index.js.map +1 -1
- package/dist/src/update/rate-limiter.d.ts.map +1 -1
- package/dist/src/update/rate-limiter.js +11 -7
- package/dist/src/update/rate-limiter.js.map +1 -1
- package/dist/src/update/validator.d.ts.map +1 -1
- package/dist/src/update/validator.js +8 -12
- package/dist/src/update/validator.js.map +1 -1
- package/dist/src/utils/cosine-similarity.d.ts.map +1 -1
- package/dist/src/utils/cosine-similarity.js.map +1 -1
- package/dist/src/utils/input-guards.d.ts +1 -1
- package/dist/src/utils/input-guards.d.ts.map +1 -1
- package/dist/src/utils/input-guards.js +24 -9
- package/dist/src/utils/input-guards.js.map +1 -1
- package/dist/src/utils/json-file.d.ts +12 -0
- package/dist/src/utils/json-file.d.ts.map +1 -1
- package/dist/src/utils/json-file.js +14 -3
- package/dist/src/utils/json-file.js.map +1 -1
- package/dist/src/utils/parse-jsonl.d.ts.map +1 -1
- package/dist/src/utils/parse-jsonl.js +1 -3
- package/dist/src/utils/parse-jsonl.js.map +1 -1
- package/dist/src/utils/paths.d.ts.map +1 -1
- package/dist/src/utils/paths.js +2 -2
- package/dist/src/utils/paths.js.map +1 -1
- package/dist/src/utils/redaction.d.ts.map +1 -1
- package/dist/src/utils/redaction.js +1 -1
- package/dist/src/utils/redaction.js.map +1 -1
- package/dist/src/utils/resource-governor.d.ts.map +1 -1
- package/dist/src/utils/resource-governor.js +38 -14
- package/dist/src/utils/resource-governor.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +7 -7
- package/.claude/agents/consensus/crdt-synchronizer.md +0 -977
- package/.claude/commands/hive-mind/README.md +0 -42
- package/.claude/commands/hive-mind/hive-mind-consensus.md +0 -72
- package/.claude/commands/hive-mind/hive-mind-init.md +0 -68
- package/.claude/commands/hive-mind/hive-mind-memory.md +0 -73
- package/.claude/commands/hive-mind/hive-mind-spawn.md +0 -82
- package/.claude/commands/hive-mind/hive-mind-status.md +0 -56
- package/.claude/commands/hive-mind/hive-mind-stop.md +0 -55
- package/.claude/commands/hive-mind/hive-mind.md +0 -87
- package/.claude/commands/swarm/README.md +0 -40
- package/.claude/commands/swarm/swarm.md +0 -79
- package/.claude/skills/hive-mind-advanced/SKILL.md +0 -347
- package/.claude/skills/swarm-advanced/SKILL.md +0 -936
- package/dist/src/commands/swarm.d.ts +0 -8
- package/dist/src/commands/swarm.d.ts.map +0 -1
- package/dist/src/commands/swarm.js.map +0 -1
- package/dist/src/mcp-tools/hive-mind-tools.d.ts +0 -17
- package/dist/src/mcp-tools/hive-mind-tools.d.ts.map +0 -1
- package/dist/src/mcp-tools/hive-mind-tools.js +0 -1239
- package/dist/src/mcp-tools/hive-mind-tools.js.map +0 -1
- package/dist/src/mcp-tools/swarm-tools.d.ts +0 -9
- package/dist/src/mcp-tools/swarm-tools.d.ts.map +0 -1
- package/dist/src/mcp-tools/swarm-tools.js +0 -411
- package/dist/src/mcp-tools/swarm-tools.js.map +0 -1
- package/dist/src/ui/data/avatars/crdt-synchronizer.svg +0 -53
- package/dist/src/ui/data/avatars/gossip-coordinator.svg +0 -54
- package/scripts/deploy-ipfs-node.sh +0 -153
- package/scripts/setup-ipfs-registry.md +0 -365
- /package/.claude/agents/{hive-mind → monoswarm}/scout-explorer.md +0 -0
- /package/.claude/agents/{hive-mind → monoswarm}/worker-specialist.md +0 -0
- /package/.claude/commands/{swarm → monoswarm}/analysis.md +0 -0
- /package/.claude/commands/{swarm → monoswarm}/development.md +0 -0
- /package/.claude/commands/{swarm → monoswarm}/examples.md +0 -0
- /package/.claude/commands/{swarm → monoswarm}/maintenance.md +0 -0
- /package/.claude/commands/{swarm → monoswarm}/optimization.md +0 -0
- /package/.claude/commands/{swarm → monoswarm}/testing.md +0 -0
- /package/dist/src/ui/data/avatars/{code-review-swarm.svg → monoswarm-code-review.svg} +0 -0
package/dist/src/commands/org.js
CHANGED
|
@@ -1,16 +1,19 @@
|
|
|
1
1
|
// packages/@monomind/cli/src/commands/org.ts
|
|
2
|
-
import { readFileSync, writeFileSync, existsSync, unlinkSync, rmSync, readdirSync, mkdirSync } from 'node:fs';
|
|
3
|
-
import { join, resolve, dirname } from 'node:path';
|
|
4
|
-
import { homedir } from 'node:os';
|
|
5
2
|
import { createHash } from 'node:crypto';
|
|
6
|
-
import {
|
|
3
|
+
import { existsSync, mkdirSync, readdirSync, readFileSync, rmSync, unlinkSync, writeFileSync, } from 'node:fs';
|
|
4
|
+
import { homedir } from 'node:os';
|
|
5
|
+
import { dirname, join, resolve } from 'node:path';
|
|
7
6
|
import { OrgDaemon } from '../orgrt/daemon.js';
|
|
8
|
-
import { resolveModel } from '../orgrt/session.js';
|
|
9
|
-
import { startOrgServer } from '../orgrt/server.js';
|
|
10
|
-
import { ORG_DIR, OrgDefSchema } from '../orgrt/types.js';
|
|
11
7
|
import { migrateOrgFile } from '../orgrt/migrate.js';
|
|
12
8
|
import { readHistory, readRunEvents, summarizeRun } from '../orgrt/reporting.js';
|
|
13
|
-
|
|
9
|
+
import { startOrgServer } from '../orgrt/server.js';
|
|
10
|
+
import { resolveModel } from '../orgrt/session.js';
|
|
11
|
+
import { ORG_DIR, OrgDefSchema } from '../orgrt/types.js';
|
|
12
|
+
import { output } from '../output.js';
|
|
13
|
+
import { MODEL_PRICING } from '../pricing/model-pricing.js';
|
|
14
|
+
const log = (text) => {
|
|
15
|
+
console.log(text);
|
|
16
|
+
};
|
|
14
17
|
/** Org names are used to build filesystem paths under .monomind/orgs — reject
|
|
15
18
|
* anything that isn't a plain identifier to prevent path traversal (e.g.
|
|
16
19
|
* `monomind org stop '../../../../tmp/x'`). */
|
|
@@ -30,19 +33,37 @@ export function validateOrgName(name) {
|
|
|
30
33
|
* exclude them when discovering real org configs) and deleteAction (which
|
|
31
34
|
* must remove all of them when deleting an org). */
|
|
32
35
|
const ORG_ARTIFACT_SUFFIXES = [
|
|
33
|
-
'-state',
|
|
34
|
-
'-
|
|
35
|
-
'-
|
|
36
|
-
'-
|
|
36
|
+
'-state',
|
|
37
|
+
'-goals',
|
|
38
|
+
'-threads',
|
|
39
|
+
'-activity',
|
|
40
|
+
'-approvals',
|
|
41
|
+
'-members',
|
|
42
|
+
'-secrets',
|
|
43
|
+
'-budgets',
|
|
44
|
+
'-routines',
|
|
45
|
+
'-issues',
|
|
46
|
+
'-projects',
|
|
47
|
+
'-workspaces',
|
|
48
|
+
'-worktrees',
|
|
49
|
+
'-environments',
|
|
50
|
+
'-plugins',
|
|
51
|
+
'-adapters',
|
|
52
|
+
'-join-requests',
|
|
53
|
+
'-bootstrap',
|
|
54
|
+
'-project-workspaces',
|
|
55
|
+
'-approval-comments',
|
|
56
|
+
'-skills',
|
|
37
57
|
];
|
|
38
58
|
export function listOrgConfigFiles(orgsDir) {
|
|
39
59
|
// endsWith, not includes: substring matching hid legitimate orgs whose NAME
|
|
40
60
|
// merely contains an artifact suffix anywhere (e.g. "state-machine.json",
|
|
41
61
|
// "issues-triage.json") — and anything hidden here is also invisible to
|
|
42
62
|
// run/list/serve while `org delete <sibling>` would still remove its files.
|
|
43
|
-
return readdirSync(orgsDir)
|
|
44
|
-
|
|
45
|
-
|
|
63
|
+
return readdirSync(orgsDir).filter((f) => f.endsWith('.json') &&
|
|
64
|
+
!f.startsWith('._') &&
|
|
65
|
+
!f.endsWith('.v1.json') &&
|
|
66
|
+
!ORG_ARTIFACT_SUFFIXES.some((suf) => f.endsWith(`${suf}.json`)));
|
|
46
67
|
}
|
|
47
68
|
/** Remove a lingering stopfile so a fresh `org run` doesn't self-terminate. */
|
|
48
69
|
export const clearStopfile = (cwd, name) => {
|
|
@@ -90,22 +111,24 @@ const runAction = async (ctx) => {
|
|
|
90
111
|
// plain `as string` cast would let that array flow straight into the org's
|
|
91
112
|
// goal and get stringified as "a,b" with no warning. Checked before any
|
|
92
113
|
// side effects (starting the xdeliver listener) run.
|
|
93
|
-
const taskFlag = ctx.flags
|
|
114
|
+
const taskFlag = ctx.flags.task;
|
|
94
115
|
if (Array.isArray(taskFlag))
|
|
95
116
|
return { success: false, message: '--task was passed more than once — pass it exactly once' };
|
|
96
117
|
// Fail before any side effects (inbox server) when the org doesn't exist.
|
|
97
118
|
const orgsDir = join(ctx.cwd, ORG_DIR);
|
|
98
119
|
if (!existsSync(join(orgsDir, `${name}.json`))) {
|
|
99
|
-
const known = existsSync(orgsDir)
|
|
120
|
+
const known = existsSync(orgsDir)
|
|
121
|
+
? listOrgConfigFiles(orgsDir).map((f) => f.replace(/\.json$/, ''))
|
|
122
|
+
: [];
|
|
100
123
|
log(output.error(`Org not found: ${name}${known.length ? ` — available: ${known.join(', ')}` : ' — create one with /mastermind:createorg'}`));
|
|
101
124
|
return { success: false, message: 'org not found' };
|
|
102
125
|
}
|
|
103
|
-
if (ctx.flags
|
|
126
|
+
if (ctx.flags.dryRun === true) {
|
|
104
127
|
// Validate + preview each role's actual briefing without spawning sessions.
|
|
105
128
|
try {
|
|
106
129
|
const def = OrgDefSchema.parse(JSON.parse(readFileSync(join(orgsDir, `${name}.json`), 'utf8')));
|
|
107
130
|
const { buildRolePrompt } = await import('../orgrt/session.js');
|
|
108
|
-
const roster = def.roles.map(r => r.id);
|
|
131
|
+
const roster = def.roles.map((r) => r.id);
|
|
109
132
|
const perRole = Math.floor((def.run_config.budget_tokens ?? 1_000_000) / def.roles.length);
|
|
110
133
|
// Same KG entity glossary the live daemon injects — the preview must
|
|
111
134
|
// match what sessions actually receive.
|
|
@@ -160,14 +183,23 @@ const runAction = async (ctx) => {
|
|
|
160
183
|
log(output.dim(` watch it with: monomind org logs ${name} --follow`));
|
|
161
184
|
return { success: true, message: 'start requested' };
|
|
162
185
|
}
|
|
163
|
-
const crossProcess = ctx.flags
|
|
186
|
+
const crossProcess = ctx.flags.crossProcess !== false;
|
|
164
187
|
// P1-1: v1 deprecation warning. Detect v1-shaped configs and warn.
|
|
165
188
|
// Gate on MONOMIND_V1_LEGACY=off to refuse v1 orgs entirely (patch-versioning-
|
|
166
189
|
// compliant mechanism — no minor bump needed).
|
|
167
|
-
const V1_ORG_KEYS = [
|
|
190
|
+
const V1_ORG_KEYS = [
|
|
191
|
+
'topology',
|
|
192
|
+
'consensus',
|
|
193
|
+
'strategy',
|
|
194
|
+
'board_id',
|
|
195
|
+
'todo_col_id',
|
|
196
|
+
'doing_col_id',
|
|
197
|
+
'done_col_id',
|
|
198
|
+
'loop',
|
|
199
|
+
];
|
|
168
200
|
try {
|
|
169
201
|
const rawCfg = JSON.parse(readFileSync(join(orgsDir, `${name}.json`), 'utf8'));
|
|
170
|
-
const isV1 = V1_ORG_KEYS.some(k => k in rawCfg);
|
|
202
|
+
const isV1 = V1_ORG_KEYS.some((k) => k in rawCfg);
|
|
171
203
|
if (isV1) {
|
|
172
204
|
const v1Legacy = process.env.MONOMIND_V1_LEGACY;
|
|
173
205
|
if (v1Legacy === 'off') {
|
|
@@ -179,34 +211,51 @@ const runAction = async (ctx) => {
|
|
|
179
211
|
log(output.dim(` To silence: run "monomind org migrate ${name}". To block v1 orgs: set MONOMIND_V1_LEGACY=off.`));
|
|
180
212
|
}
|
|
181
213
|
}
|
|
182
|
-
catch {
|
|
214
|
+
catch {
|
|
215
|
+
/* config parse errors surface below in cost estimate or daemon.startOrg */
|
|
216
|
+
}
|
|
183
217
|
// P0-17: Upfront cost estimate. `org run` and `/mastermind:autodev` spend real
|
|
184
218
|
// provider tokens. Print an estimate before sessions start; honor --budget-usd
|
|
185
219
|
// as a hard stop and --yes to skip the confirmation prompt. Rates are defaults
|
|
186
|
-
// (per 1M tokens,
|
|
220
|
+
// (per 1M tokens, blended estimate, Aug 2026); override via the model id.
|
|
187
221
|
//
|
|
188
222
|
// No provider Usage API is queried (that needs Admin/Org API credentials most
|
|
189
|
-
// users won't have configured) — rates
|
|
190
|
-
//
|
|
191
|
-
//
|
|
192
|
-
//
|
|
223
|
+
// users won't have configured) — rates are derived from the canonical
|
|
224
|
+
// MODEL_PRICING table (src/pricing/model-pricing.ts), using each model's
|
|
225
|
+
// output-token price as the blended per-1M estimate (output tokens dominate
|
|
226
|
+
// role-turn cost). Models not yet tracked in that table (third-party/non-
|
|
227
|
+
// Anthropic providers) fall back to the manually maintained EXTRA table
|
|
228
|
+
// below. A user-editable ~/.monomind/rates.json override, when present,
|
|
229
|
+
// takes precedence over both. Either way this is static data, not a live
|
|
230
|
+
// query, so a "stale rates" warning is always shown to make that
|
|
231
|
+
// limitation visible rather than implying live pricing.
|
|
232
|
+
const DERIVED_RATE_PER_1M = Object.fromEntries(Object.entries(MODEL_PRICING).map(([model, price]) => [model, price.out * 1_000_000]));
|
|
233
|
+
// Models absent from MODEL_PRICING (not yet in the canonical pricing table).
|
|
234
|
+
const EXTRA_MODEL_RATE_PER_1M = {
|
|
235
|
+
'gpt-4': 10,
|
|
236
|
+
'glm-5.2': 2,
|
|
237
|
+
'glm-4': 2,
|
|
238
|
+
'kimi-latest': 3,
|
|
239
|
+
'kimi-k2': 3,
|
|
240
|
+
'kimi-code/k3': 3,
|
|
241
|
+
'kimi-code/k3-256k': 3,
|
|
242
|
+
'gemini-3.1-pro': 8,
|
|
243
|
+
'gemini-3.6-flash-high': 1,
|
|
244
|
+
'gpt-5.6-terra': 10,
|
|
245
|
+
'gpt-5.5': 10,
|
|
246
|
+
};
|
|
193
247
|
const MODEL_RATE_PER_1M = {
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
'gpt-5': 10, 'gpt-4': 10,
|
|
197
|
-
'glm-5.2': 2, 'glm-4': 2,
|
|
198
|
-
'kimi-latest': 3, 'kimi-k2': 3, 'kimi-code/k3': 3, 'kimi-code/k3-256k': 3,
|
|
199
|
-
'gemini-3.1-pro': 8, 'gemini-3.6-flash-high': 1,
|
|
200
|
-
'gpt-5.6-terra': 10, 'gpt-5.5': 10,
|
|
248
|
+
...EXTRA_MODEL_RATE_PER_1M,
|
|
249
|
+
...DERIVED_RATE_PER_1M,
|
|
201
250
|
};
|
|
202
251
|
const DEFAULT_RATE_PER_1M = 10;
|
|
203
252
|
const AVG_TOKENS_PER_TURN = 2000;
|
|
204
|
-
const budgetUsd = ctx.flags
|
|
205
|
-
const skipConfirm = ctx.flags
|
|
253
|
+
const budgetUsd = ctx.flags.budgetUsd;
|
|
254
|
+
const skipConfirm = ctx.flags.yes === true;
|
|
206
255
|
// User-editable rate overrides: ~/.monomind/rates.json, e.g.
|
|
207
256
|
// { "claude-opus-5": 90, "my-custom-model": 5 }
|
|
208
257
|
const ratesPath = join(homedir(), '.monomind', 'rates.json');
|
|
209
|
-
|
|
258
|
+
const userRates = {};
|
|
210
259
|
let ratesFileUsed = false;
|
|
211
260
|
try {
|
|
212
261
|
const parsed = JSON.parse(readFileSync(ratesPath, 'utf8'));
|
|
@@ -218,7 +267,9 @@ const runAction = async (ctx) => {
|
|
|
218
267
|
ratesFileUsed = Object.keys(userRates).length > 0;
|
|
219
268
|
}
|
|
220
269
|
}
|
|
221
|
-
catch {
|
|
270
|
+
catch {
|
|
271
|
+
/* no rates.json (or invalid) — hardcoded defaults only */
|
|
272
|
+
}
|
|
222
273
|
try {
|
|
223
274
|
const def = OrgDefSchema.parse(JSON.parse(readFileSync(join(orgsDir, `${name}.json`), 'utf8')));
|
|
224
275
|
const defaultMaxTurns = def.run_config.max_turns_per_message ?? 30;
|
|
@@ -226,7 +277,7 @@ const runAction = async (ctx) => {
|
|
|
226
277
|
// the schema default is effectively unlimited (DEFAULT_MAX_TURNS_PER_MESSAGE),
|
|
227
278
|
// which would balloon the upfront figure into meaninglessness.
|
|
228
279
|
const ESTIMATE_TURNS_CAP = 30;
|
|
229
|
-
let
|
|
280
|
+
let _totalTokens = 0;
|
|
230
281
|
const perRoleRows = def.roles.map((r) => {
|
|
231
282
|
// Mirror the actual runtime's model resolution (session.ts resolveModel)
|
|
232
283
|
// instead of a hardcoded 'claude-sonnet-5' fallback — otherwise every
|
|
@@ -236,7 +287,7 @@ const runAction = async (ctx) => {
|
|
|
236
287
|
const rate = userRates[model] ?? MODEL_RATE_PER_1M[model] ?? DEFAULT_RATE_PER_1M;
|
|
237
288
|
const roleTurns = Math.min(r.max_turns_per_message ?? defaultMaxTurns, ESTIMATE_TURNS_CAP);
|
|
238
289
|
const tokens = roleTurns * AVG_TOKENS_PER_TURN;
|
|
239
|
-
|
|
290
|
+
_totalTokens += tokens;
|
|
240
291
|
return { id: r.id, model, tokens, cost: (tokens * rate) / 1_000_000 };
|
|
241
292
|
});
|
|
242
293
|
const estimate = perRoleRows.reduce((s, r) => s + r.cost, 0);
|
|
@@ -253,7 +304,10 @@ const runAction = async (ctx) => {
|
|
|
253
304
|
}
|
|
254
305
|
if (!skipConfirm && process.stdin.isTTY) {
|
|
255
306
|
const { confirm } = await import('../prompt.js');
|
|
256
|
-
const ok = await confirm({
|
|
307
|
+
const ok = await confirm({
|
|
308
|
+
message: `Start ${def.roles.length}-role org? This will spend real provider tokens.`,
|
|
309
|
+
default: true,
|
|
310
|
+
});
|
|
257
311
|
if (!ok) {
|
|
258
312
|
log(output.dim('Aborted — no tokens spent.'));
|
|
259
313
|
return { success: false, message: 'user declined cost-estimate prompt' };
|
|
@@ -267,7 +321,7 @@ const runAction = async (ctx) => {
|
|
|
267
321
|
log(output.dim(`(cost estimate skipped: ${err instanceof Error ? err.message : String(err)})`));
|
|
268
322
|
}
|
|
269
323
|
}
|
|
270
|
-
const resumeFlag = ctx.flags
|
|
324
|
+
const resumeFlag = ctx.flags.resume === true;
|
|
271
325
|
const daemon = new OrgDaemon(ctx.cwd, { crossProcess });
|
|
272
326
|
let srv;
|
|
273
327
|
if (crossProcess) {
|
|
@@ -281,14 +335,45 @@ const runAction = async (ctx) => {
|
|
|
281
335
|
catch (err) {
|
|
282
336
|
// Don't leave the inbox server holding the event loop open on a failed start.
|
|
283
337
|
srv?.close();
|
|
284
|
-
await daemon.stopAll().catch(() => {
|
|
338
|
+
await daemon.stopAll().catch(() => {
|
|
339
|
+
/* nothing started */
|
|
340
|
+
});
|
|
285
341
|
const detail = err instanceof Error ? err.message : String(err);
|
|
286
342
|
const hint = err instanceof Error && err.name === 'ZodError'
|
|
287
|
-
? ` — run "monomind org validate ${name}" for details`
|
|
343
|
+
? ` — run "monomind org validate ${name}" for details`
|
|
344
|
+
: '';
|
|
288
345
|
log(output.error(`Could not start org ${name}: ${detail}${hint}`));
|
|
289
346
|
return { success: false, message: 'org start failed' };
|
|
290
347
|
}
|
|
291
348
|
log(output.info(`org ${name} running (${running.def.roles.length} agents, run ${running.run}) — Ctrl-C or "monomind org stop ${name}" to stop`));
|
|
349
|
+
// #206 follow-up: without this, an uncaught error in this process left
|
|
350
|
+
// runtime.json's status stuck at 'running' (finishStop never runs), and
|
|
351
|
+
// runOutcomeResult's status === 'crashed' branch — the one meant to
|
|
352
|
+
// surface *why* the run failed — could never actually fire for `org run`,
|
|
353
|
+
// since nothing here ever wrote 'crashed'. Mirrors serveAction's
|
|
354
|
+
// crashExit, but deliberately does NOT touch SIGINT/SIGTERM — those are
|
|
355
|
+
// already handled by the wait loop below as a graceful stop, and
|
|
356
|
+
// registering a second, competing handler here would race it.
|
|
357
|
+
process.on('uncaughtException', (err) => {
|
|
358
|
+
try {
|
|
359
|
+
console.error('[org run] uncaughtException:', err);
|
|
360
|
+
}
|
|
361
|
+
catch {
|
|
362
|
+
/* stderr gone */
|
|
363
|
+
}
|
|
364
|
+
daemon.persistCrashStateAll(`uncaughtException: ${err instanceof Error ? err.message : String(err)}`);
|
|
365
|
+
process.exit(1);
|
|
366
|
+
});
|
|
367
|
+
process.on('unhandledRejection', (err) => {
|
|
368
|
+
try {
|
|
369
|
+
console.error('[org run] unhandledRejection:', err);
|
|
370
|
+
}
|
|
371
|
+
catch {
|
|
372
|
+
/* stderr gone */
|
|
373
|
+
}
|
|
374
|
+
daemon.persistCrashStateAll(`unhandledRejection: ${err instanceof Error ? err.message : String(err)}`);
|
|
375
|
+
process.exit(1);
|
|
376
|
+
});
|
|
292
377
|
// P1-12: Print the dashboard URL so CLI users know where to look.
|
|
293
378
|
// The dashboard is normally spawned by a Claude Code SessionStart hook
|
|
294
379
|
// (.claude/helpers/control-start.cjs) — but `org run` doesn't require
|
|
@@ -314,7 +399,9 @@ const runAction = async (ctx) => {
|
|
|
314
399
|
stdio: 'ignore',
|
|
315
400
|
});
|
|
316
401
|
}
|
|
317
|
-
catch {
|
|
402
|
+
catch {
|
|
403
|
+
/* best-effort — fall through to whatever control.json already has */
|
|
404
|
+
}
|
|
318
405
|
}
|
|
319
406
|
if (existsSync(controlPath)) {
|
|
320
407
|
try {
|
|
@@ -322,7 +409,9 @@ const runAction = async (ctx) => {
|
|
|
322
409
|
const dashUrl = ctl.url || (ctl.port ? `http://localhost:${ctl.port}` : 'http://localhost:4242');
|
|
323
410
|
log(output.dim(` Dashboard: ${dashUrl}`));
|
|
324
411
|
}
|
|
325
|
-
catch {
|
|
412
|
+
catch {
|
|
413
|
+
/* non-critical */
|
|
414
|
+
}
|
|
326
415
|
}
|
|
327
416
|
else if (existsSync(controlStartPath)) {
|
|
328
417
|
// control-start.cjs ran above (spawnSync'd synchronously with a 5s cap)
|
|
@@ -342,21 +431,75 @@ const runAction = async (ctx) => {
|
|
|
342
431
|
// previous run before polling.
|
|
343
432
|
clearStopfile(ctx.cwd, name);
|
|
344
433
|
const stopfile = join(ctx.cwd, ORG_DIR, name, 'stop');
|
|
345
|
-
|
|
434
|
+
// #206: a human explicitly running `monomind org stop` is a deliberate,
|
|
435
|
+
// successful action regardless of how the run itself ended — capture that
|
|
436
|
+
// BEFORE clearStopfile() below wipes the file, so it isn't lost.
|
|
437
|
+
let stoppedManually = false;
|
|
438
|
+
await new Promise((resolvePromise) => {
|
|
346
439
|
const iv = setInterval(() => {
|
|
347
|
-
if (existsSync(stopfile)
|
|
440
|
+
if (existsSync(stopfile)) {
|
|
441
|
+
stoppedManually = true;
|
|
442
|
+
clearInterval(iv);
|
|
443
|
+
resolvePromise();
|
|
444
|
+
}
|
|
445
|
+
else if (!daemon.getOrg(name)) {
|
|
348
446
|
clearInterval(iv);
|
|
349
447
|
resolvePromise();
|
|
350
448
|
}
|
|
351
449
|
}, 2000);
|
|
352
|
-
process.once('SIGINT', () => {
|
|
353
|
-
|
|
450
|
+
process.once('SIGINT', () => {
|
|
451
|
+
clearInterval(iv);
|
|
452
|
+
resolvePromise();
|
|
453
|
+
});
|
|
454
|
+
process.once('SIGTERM', () => {
|
|
455
|
+
clearInterval(iv);
|
|
456
|
+
resolvePromise();
|
|
457
|
+
});
|
|
354
458
|
});
|
|
355
459
|
clearStopfile(ctx.cwd, name);
|
|
356
460
|
await daemon.stopAll();
|
|
357
461
|
srv?.close();
|
|
358
|
-
|
|
462
|
+
if (stoppedManually)
|
|
463
|
+
return { success: true, message: `org ${name} stopped` };
|
|
464
|
+
// #206: 'org run' used to exit 0 unconditionally here — a crashed or
|
|
465
|
+
// watchdog-stopped run was indistinguishable from a completed one to any
|
|
466
|
+
// script or supervisor (launchd/systemd) driving off the exit code. Re-read
|
|
467
|
+
// the daemon's final record (same runtime.json pattern isOrgRunning/
|
|
468
|
+
// statusAction already use below) and only report success for a run that
|
|
469
|
+
// actually finished its goal via org_complete.
|
|
470
|
+
let final = {};
|
|
471
|
+
try {
|
|
472
|
+
final = JSON.parse(readFileSync(join(ctx.cwd, ORG_DIR, name, 'runtime.json'), 'utf8'));
|
|
473
|
+
}
|
|
474
|
+
catch {
|
|
475
|
+
/* best-effort — falls through to the non-clean-stop case below */
|
|
476
|
+
}
|
|
477
|
+
return runOutcomeResult(name, final);
|
|
359
478
|
};
|
|
479
|
+
/** Decides `org run`'s exit-code-bearing CommandResult from the run's final
|
|
480
|
+
* recorded state. Extracted (matching resolvedIdleNudgeCount's precedent for
|
|
481
|
+
* the idle watchdog) so this decision is unit-testable without spinning up a
|
|
482
|
+
* real daemon/org. Exit 0 ONLY for a clean, goal-driven end (closedBy:
|
|
483
|
+
* 'org-complete', set by daemon.ts's org-complete auto-stop path) — every
|
|
484
|
+
* other outcome (idle-watchdog stop, boss-restart-exhausted, a process-level
|
|
485
|
+
* crash) exits 1 so scripts/supervisors can tell success from failure. */
|
|
486
|
+
export function runOutcomeResult(name, final) {
|
|
487
|
+
if (final.closedBy === 'org-complete') {
|
|
488
|
+
return { success: true, message: `org ${name} completed` };
|
|
489
|
+
}
|
|
490
|
+
if (final.status === 'crashed') {
|
|
491
|
+
return {
|
|
492
|
+
success: false,
|
|
493
|
+
message: `org ${name} crashed: ${final.error ?? 'unknown error'}`,
|
|
494
|
+
exitCode: 1,
|
|
495
|
+
};
|
|
496
|
+
}
|
|
497
|
+
return {
|
|
498
|
+
success: false,
|
|
499
|
+
message: `org ${name} stopped without completing (not via org_complete) — check 'monomind org status ${name}' or the run history for the reason`,
|
|
500
|
+
exitCode: 1,
|
|
501
|
+
};
|
|
502
|
+
}
|
|
360
503
|
/** True when runtime.json records a running org whose recorded pid is still alive. */
|
|
361
504
|
const isOrgRunning = (cwd, name) => {
|
|
362
505
|
try {
|
|
@@ -386,7 +529,9 @@ const stopAction = async (ctx) => {
|
|
|
386
529
|
try {
|
|
387
530
|
rt = JSON.parse(readFileSync(join(ctx.cwd, ORG_DIR, name, 'runtime.json'), 'utf8'));
|
|
388
531
|
}
|
|
389
|
-
catch {
|
|
532
|
+
catch {
|
|
533
|
+
/* never run */
|
|
534
|
+
}
|
|
390
535
|
if (rt?.status !== 'running') {
|
|
391
536
|
log(output.warning(`Org "${name}" is not running (runtime state: ${rt?.status ?? 'never run'}) — nothing to stop.`));
|
|
392
537
|
return { success: false, message: 'org not running' };
|
|
@@ -466,12 +611,16 @@ const statusAction = async (ctx) => {
|
|
|
466
611
|
}
|
|
467
612
|
}
|
|
468
613
|
const orgDir = join(ctx.cwd, ORG_DIR);
|
|
469
|
-
const targets = name
|
|
470
|
-
?
|
|
471
|
-
:
|
|
614
|
+
const targets = name
|
|
615
|
+
? [name]
|
|
616
|
+
: existsSync(orgDir)
|
|
617
|
+
? listOrgConfigFiles(orgDir).map((f) => f.replace(/\.json$/, ''))
|
|
618
|
+
: [];
|
|
472
619
|
for (const t of targets) {
|
|
473
620
|
const rt = join(orgDir, t, 'runtime.json');
|
|
474
|
-
let state = {
|
|
621
|
+
let state = {
|
|
622
|
+
status: 'never run',
|
|
623
|
+
};
|
|
475
624
|
if (existsSync(rt)) {
|
|
476
625
|
try {
|
|
477
626
|
state = JSON.parse(readFileSync(rt, 'utf8'));
|
|
@@ -484,24 +633,29 @@ const statusAction = async (ctx) => {
|
|
|
484
633
|
// A "running" record whose pid is gone means the daemon died without its
|
|
485
634
|
// stopOrg cleanup — surface that instead of reporting it as still running.
|
|
486
635
|
if ((state.status === 'running' || state.status === 'crashed') && state.pid) {
|
|
487
|
-
const pidGone = state.status === 'crashed' ||
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
636
|
+
const pidGone = state.status === 'crashed' ||
|
|
637
|
+
(() => {
|
|
638
|
+
try {
|
|
639
|
+
process.kill(state.pid, 0);
|
|
640
|
+
return false;
|
|
641
|
+
}
|
|
642
|
+
catch {
|
|
643
|
+
return true;
|
|
644
|
+
}
|
|
645
|
+
})();
|
|
496
646
|
if (pidGone) {
|
|
497
647
|
let heartbeatHint = '';
|
|
498
648
|
try {
|
|
499
649
|
const hb = JSON.parse(readFileSync(join(ctx.cwd, '.monomind', 'serve-heartbeat.json'), 'utf8'));
|
|
500
650
|
heartbeatHint = ` (last heartbeat: ${hb.updatedAt})`;
|
|
501
651
|
}
|
|
502
|
-
catch {
|
|
652
|
+
catch {
|
|
653
|
+
/* no heartbeat file — daemon predates this change or was already cleaned up */
|
|
654
|
+
}
|
|
503
655
|
const closedBy = state.closedBy;
|
|
504
|
-
const label = closedBy === 'crash-handler'
|
|
656
|
+
const label = closedBy === 'crash-handler'
|
|
657
|
+
? 'crashed (caught by crash handler)'
|
|
658
|
+
: `crashed (runtime.json says ${state.status} but pid ${state.pid} is gone)`;
|
|
505
659
|
log(output.warning(`${t}: ${label}${heartbeatHint}${state.run ? ` — run ${state.run}` : ''} — close it out with "monomind org mark-complete ${t}"`));
|
|
506
660
|
continue;
|
|
507
661
|
}
|
|
@@ -528,7 +682,7 @@ const statusAction = async (ctx) => {
|
|
|
528
682
|
const quietMs = Date.now() - lastTs;
|
|
529
683
|
const quietStr = fmtDuration(quietMs);
|
|
530
684
|
const toolCalls = Object.values(summary.roles).reduce((a, r) => a + r.toolsAllowed + r.toolsDenied, 0);
|
|
531
|
-
const rolesUp = Object.keys(summary.roles).filter(r => r !== '(system)').length;
|
|
685
|
+
const rolesUp = Object.keys(summary.roles).filter((r) => r !== '(system)').length;
|
|
532
686
|
log(` elapsed: ${elapsedStr} | events: ${summary.events} | messages: ${summary.messages} | tools: ${toolCalls}`);
|
|
533
687
|
log(` roles active: ${rolesUp} | tokens: ${fmtNum(summary.totalTokens)} | cost: $${summary.totalCostUsd.toFixed(2)}`);
|
|
534
688
|
log(` quiet since: ${new Date(lastTs).toISOString().slice(11, 19)} (${quietStr} ago)`);
|
|
@@ -537,7 +691,7 @@ const statusAction = async (ctx) => {
|
|
|
537
691
|
}
|
|
538
692
|
// Previous cycle comparison from history
|
|
539
693
|
const history = readHistory(ctx.cwd, t);
|
|
540
|
-
const prev = history.filter(h => h.run !== state.run).at(-1);
|
|
694
|
+
const prev = history.filter((h) => h.run !== state.run).at(-1);
|
|
541
695
|
if (prev) {
|
|
542
696
|
const dur = prev.durationMs !== null ? fmtDuration(prev.durationMs) : '?';
|
|
543
697
|
const outcome = prev.outcome?.status ?? (prev.crashes.length ? 'crashed' : 'completed');
|
|
@@ -601,7 +755,9 @@ export const pollReloadfiles = async (cwd, daemon) => {
|
|
|
601
755
|
try {
|
|
602
756
|
unlinkSync(reloadFile);
|
|
603
757
|
}
|
|
604
|
-
catch {
|
|
758
|
+
catch {
|
|
759
|
+
/* already gone */
|
|
760
|
+
}
|
|
605
761
|
try {
|
|
606
762
|
const result = daemon.reloadOrgDef(name);
|
|
607
763
|
const parts = [];
|
|
@@ -653,11 +809,15 @@ export const pollRunfiles = async (cwd, daemon) => {
|
|
|
653
809
|
if (typeof body.task === 'string' && body.task.trim())
|
|
654
810
|
task = body.task;
|
|
655
811
|
}
|
|
656
|
-
catch {
|
|
812
|
+
catch {
|
|
813
|
+
/* bare/empty runfile — start with the org's own goal */
|
|
814
|
+
}
|
|
657
815
|
try {
|
|
658
816
|
unlinkSync(runfile);
|
|
659
817
|
}
|
|
660
|
-
catch {
|
|
818
|
+
catch {
|
|
819
|
+
/* already gone */
|
|
820
|
+
}
|
|
661
821
|
if (daemon.listRunning().includes(name))
|
|
662
822
|
continue; // already running — request satisfied
|
|
663
823
|
log(output.info(`org ${name}: run requested — starting now${task ? ' (with task)' : ''}`));
|
|
@@ -688,7 +848,9 @@ export const pollRunfiles = async (cwd, daemon) => {
|
|
|
688
848
|
*/
|
|
689
849
|
const supervisorAction = async (ctx) => {
|
|
690
850
|
const cwd = resolve(ctx.cwd || process.cwd());
|
|
691
|
-
const requested = String(ctx.flags.format ?? '')
|
|
851
|
+
const requested = String(ctx.flags.format ?? '')
|
|
852
|
+
.trim()
|
|
853
|
+
.toLowerCase();
|
|
692
854
|
const format = requested || (process.platform === 'darwin' ? 'launchd' : 'systemd');
|
|
693
855
|
if (format !== 'launchd' && format !== 'systemd') {
|
|
694
856
|
log(output.error(`Unknown --format "${requested}" — expected launchd or systemd.`));
|
|
@@ -776,7 +938,7 @@ WantedBy=default.target
|
|
|
776
938
|
return { success: true, message: `${format} unit emitted` };
|
|
777
939
|
};
|
|
778
940
|
const serveAction = async (ctx) => {
|
|
779
|
-
const crossProcess = ctx.flags
|
|
941
|
+
const crossProcess = ctx.flags.crossProcess !== false;
|
|
780
942
|
const daemon = new OrgDaemon(ctx.cwd, { crossProcess });
|
|
781
943
|
let srv;
|
|
782
944
|
if (crossProcess) {
|
|
@@ -789,13 +951,21 @@ const serveAction = async (ctx) => {
|
|
|
789
951
|
try {
|
|
790
952
|
console.error(`[org serve] ${label}:`, err);
|
|
791
953
|
}
|
|
792
|
-
catch {
|
|
793
|
-
|
|
954
|
+
catch {
|
|
955
|
+
/* stderr gone */
|
|
956
|
+
}
|
|
957
|
+
daemon.persistCrashStateAll(`${label}: ${err instanceof Error ? err.message : String(err)}`);
|
|
794
958
|
daemon.clearHeartbeat();
|
|
795
959
|
process.exitCode = 1;
|
|
796
960
|
};
|
|
797
|
-
process.on('uncaughtException', (err) => {
|
|
798
|
-
|
|
961
|
+
process.on('uncaughtException', (err) => {
|
|
962
|
+
crashExit('uncaughtException', err);
|
|
963
|
+
process.exit(1);
|
|
964
|
+
});
|
|
965
|
+
process.on('unhandledRejection', (err) => {
|
|
966
|
+
crashExit('unhandledRejection', err);
|
|
967
|
+
process.exit(1);
|
|
968
|
+
});
|
|
799
969
|
// Termination diagnostics (#45). The two handlers above only cover errors
|
|
800
970
|
// raised *inside* the daemon. A report of the daemon vanishing after hours
|
|
801
971
|
// had a log holding nothing but its startup lines, because the ways a daemon
|
|
@@ -819,7 +989,9 @@ const serveAction = async (ctx) => {
|
|
|
819
989
|
try {
|
|
820
990
|
console.error(`[org serve] shutting down: ${reason}`);
|
|
821
991
|
}
|
|
822
|
-
catch {
|
|
992
|
+
catch {
|
|
993
|
+
/* stderr gone */
|
|
994
|
+
}
|
|
823
995
|
};
|
|
824
996
|
for (const sig of ['SIGTERM', 'SIGINT', 'SIGHUP']) {
|
|
825
997
|
process.on(sig, () => {
|
|
@@ -828,7 +1000,9 @@ const serveAction = async (ctx) => {
|
|
|
828
1000
|
daemon.persistCrashStateAll();
|
|
829
1001
|
daemon.clearHeartbeat();
|
|
830
1002
|
}
|
|
831
|
-
catch {
|
|
1003
|
+
catch {
|
|
1004
|
+
/* best effort */
|
|
1005
|
+
}
|
|
832
1006
|
// A daemon holds ref'd timers, so it will not drain on its own; an
|
|
833
1007
|
// explicit exit is required here and is the intended signal semantics.
|
|
834
1008
|
process.exit(sig === 'SIGTERM' || sig === 'SIGINT' ? 0 : 1);
|
|
@@ -842,7 +1016,9 @@ const serveAction = async (ctx) => {
|
|
|
842
1016
|
// Heartbeat: write every 30s so `org status` can tell "alive but busy" from
|
|
843
1017
|
// "daemon gone" without relying on pid liveness alone.
|
|
844
1018
|
daemon.writeHeartbeat();
|
|
845
|
-
const heartbeatInterval = setInterval(() => {
|
|
1019
|
+
const heartbeatInterval = setInterval(() => {
|
|
1020
|
+
daemon.writeHeartbeat();
|
|
1021
|
+
}, 30_000);
|
|
846
1022
|
heartbeatInterval.unref?.();
|
|
847
1023
|
log(output.info('org daemon serving — Ctrl-C to stop'));
|
|
848
1024
|
// schedule orgs whose definition declares an interval (e.g. "15m", "2h")
|
|
@@ -860,7 +1036,7 @@ const serveAction = async (ctx) => {
|
|
|
860
1036
|
const { runPrechecks } = await import('../orgrt/prechecks.js');
|
|
861
1037
|
const { ok, results } = await runPrechecks(checks, ctx.cwd);
|
|
862
1038
|
if (!ok) {
|
|
863
|
-
const failed = results.find(r => !r.passed);
|
|
1039
|
+
const failed = results.find((r) => !r.passed);
|
|
864
1040
|
log(output.warning(`org ${name}: precheck "${failed?.name}" failed — skipping scheduled run`));
|
|
865
1041
|
if (failed?.output)
|
|
866
1042
|
log(output.warning(` ${failed.output.slice(0, 200)}`));
|
|
@@ -887,9 +1063,10 @@ const serveAction = async (ctx) => {
|
|
|
887
1063
|
// (idempotent — it resolves `done` and flushes).
|
|
888
1064
|
const org = daemon.getOrg(name);
|
|
889
1065
|
const allDone = org
|
|
890
|
-
? Promise.allSettled([...org.agents.values()].map(a => a.done))
|
|
1066
|
+
? Promise.allSettled([...org.agents.values()].map((a) => a.done))
|
|
891
1067
|
: Promise.resolve([]);
|
|
892
|
-
const maxRun = org?.def
|
|
1068
|
+
const maxRun = org?.def
|
|
1069
|
+
?.run_config?.max_run;
|
|
893
1070
|
// Default to the full interval. The old `min(interval, 10min)` clamp
|
|
894
1071
|
// silently guillotined every org that didn't set max_run: real cycles
|
|
895
1072
|
// here run 75-93 minutes, so a 2h-scheduled org was being force-stopped
|
|
@@ -901,10 +1078,13 @@ const serveAction = async (ctx) => {
|
|
|
901
1078
|
// Set run_config.max_run to bound it tighter — or looser.
|
|
902
1079
|
const maxMs = parseSchedule(maxRun) ?? intervalMs;
|
|
903
1080
|
let timer;
|
|
904
|
-
await Promise.race([
|
|
1081
|
+
await Promise.race([
|
|
1082
|
+
allDone,
|
|
1083
|
+
new Promise((r) => {
|
|
905
1084
|
timer = setTimeout(r, maxMs);
|
|
906
1085
|
timer.unref?.();
|
|
907
|
-
})
|
|
1086
|
+
}),
|
|
1087
|
+
]);
|
|
908
1088
|
if (timer)
|
|
909
1089
|
clearTimeout(timer);
|
|
910
1090
|
}
|
|
@@ -916,7 +1096,9 @@ const serveAction = async (ctx) => {
|
|
|
916
1096
|
// bound threw that work away; a minute is enough to finish an edit or a
|
|
917
1097
|
// test run and flush, and still well inside any sane interval.
|
|
918
1098
|
if (startedHere) {
|
|
919
|
-
await daemon
|
|
1099
|
+
await daemon
|
|
1100
|
+
.stopOrg(name, { drainMs: 60_000 })
|
|
1101
|
+
.catch((err) => console.error(`org ${name}: stop failed:`, err));
|
|
920
1102
|
}
|
|
921
1103
|
}
|
|
922
1104
|
});
|
|
@@ -948,13 +1130,22 @@ const serveAction = async (ctx) => {
|
|
|
948
1130
|
}
|
|
949
1131
|
}
|
|
950
1132
|
}
|
|
951
|
-
const stopPoll = setInterval(() => {
|
|
1133
|
+
const stopPoll = setInterval(() => {
|
|
1134
|
+
void pollStopfiles(ctx.cwd, daemon);
|
|
1135
|
+
}, 2000);
|
|
952
1136
|
stopPoll.unref?.();
|
|
953
|
-
const runPoll = setInterval(() => {
|
|
1137
|
+
const runPoll = setInterval(() => {
|
|
1138
|
+
void pollRunfiles(ctx.cwd, daemon);
|
|
1139
|
+
}, 2000);
|
|
954
1140
|
runPoll.unref?.();
|
|
955
|
-
const reloadPoll = setInterval(() => {
|
|
1141
|
+
const reloadPoll = setInterval(() => {
|
|
1142
|
+
void pollReloadfiles(ctx.cwd, daemon);
|
|
1143
|
+
}, 2000);
|
|
956
1144
|
reloadPoll.unref?.();
|
|
957
|
-
await new Promise(
|
|
1145
|
+
await new Promise((r) => {
|
|
1146
|
+
process.once('SIGINT', () => r());
|
|
1147
|
+
process.once('SIGTERM', () => r());
|
|
1148
|
+
});
|
|
958
1149
|
clearInterval(stopPoll);
|
|
959
1150
|
clearInterval(runPoll);
|
|
960
1151
|
clearInterval(reloadPoll);
|
|
@@ -968,9 +1159,10 @@ const serveAction = async (ctx) => {
|
|
|
968
1159
|
const testLoopAction = async (ctx) => {
|
|
969
1160
|
// non-literal specifier: test-loop.ts lands in a later task; keeps tsc clean until then
|
|
970
1161
|
const testLoopModule = '../orgrt/test-loop.js';
|
|
971
|
-
const { runTestLoop } = await import(testLoopModule);
|
|
972
|
-
const n = Number(ctx.flags
|
|
973
|
-
const
|
|
1162
|
+
const { runTestLoop } = (await import(testLoopModule));
|
|
1163
|
+
const n = Number(ctx.flags.times ?? ctx.flags.n ?? 5);
|
|
1164
|
+
const scenario = typeof ctx.flags.scenario === 'string' ? ctx.flags.scenario : undefined;
|
|
1165
|
+
const report = await runTestLoop(ctx.cwd, n, scenario);
|
|
974
1166
|
log(output.info(report.summary));
|
|
975
1167
|
return { success: report.failed === 0, message: report.summary };
|
|
976
1168
|
};
|
|
@@ -1009,9 +1201,12 @@ const listAction = async (ctx) => {
|
|
|
1009
1201
|
}
|
|
1010
1202
|
}
|
|
1011
1203
|
}
|
|
1012
|
-
catch {
|
|
1204
|
+
catch {
|
|
1205
|
+
/* no runtime state yet */
|
|
1206
|
+
}
|
|
1013
1207
|
const goal = typeof def.goal === 'string' && def.goal
|
|
1014
|
-
? ` — ${def.goal.length > 60 ? `${def.goal.slice(0, 57)}...` : def.goal}`
|
|
1208
|
+
? ` — ${def.goal.length > 60 ? `${def.goal.slice(0, 57)}...` : def.goal}`
|
|
1209
|
+
: '';
|
|
1015
1210
|
detail = ` (${roles} role${roles === 1 ? '' : 's'}, ${sched}, ${status})${goal}`;
|
|
1016
1211
|
}
|
|
1017
1212
|
catch {
|
|
@@ -1031,7 +1226,7 @@ const deleteAction = async (ctx) => {
|
|
|
1031
1226
|
log(output.error(`Invalid org name: ${orgName}`));
|
|
1032
1227
|
return { success: false, message: 'invalid org name' };
|
|
1033
1228
|
}
|
|
1034
|
-
const confirmed = ctx.flags
|
|
1229
|
+
const confirmed = ctx.flags.yes === true || ctx.args.includes('--yes') || ctx.args.includes('-y');
|
|
1035
1230
|
if (!confirmed) {
|
|
1036
1231
|
log(output.warning(`This will permanently delete org "${orgName}" and all its data.`));
|
|
1037
1232
|
log(output.warning('Pass --yes to confirm.'));
|
|
@@ -1044,7 +1239,7 @@ const deleteAction = async (ctx) => {
|
|
|
1044
1239
|
log(output.error(`Org not found: ${orgName}`));
|
|
1045
1240
|
return { success: false, message: 'org not found' };
|
|
1046
1241
|
}
|
|
1047
|
-
if (isOrgRunning(cwd, orgName) && ctx.flags
|
|
1242
|
+
if (isOrgRunning(cwd, orgName) && ctx.flags.force !== true) {
|
|
1048
1243
|
log(output.error(`Org "${orgName}" is currently running — stop it first (monomind org stop ${orgName}) or pass --force.`));
|
|
1049
1244
|
return { success: false, message: 'org is running' };
|
|
1050
1245
|
}
|
|
@@ -1058,27 +1253,37 @@ const deleteAction = async (ctx) => {
|
|
|
1058
1253
|
removed++;
|
|
1059
1254
|
}
|
|
1060
1255
|
}
|
|
1061
|
-
catch {
|
|
1256
|
+
catch {
|
|
1257
|
+
/* ignore */
|
|
1258
|
+
}
|
|
1062
1259
|
}
|
|
1063
1260
|
}
|
|
1064
1261
|
try {
|
|
1065
1262
|
unlinkSync(join(orgsDir, '.stops', `${orgName}.stop`));
|
|
1066
1263
|
}
|
|
1067
|
-
catch {
|
|
1264
|
+
catch {
|
|
1265
|
+
/* ignore */
|
|
1266
|
+
}
|
|
1068
1267
|
const orgSubDir = join(orgsDir, orgName);
|
|
1069
1268
|
try {
|
|
1070
1269
|
if (existsSync(orgSubDir))
|
|
1071
1270
|
rmSync(orgSubDir, { recursive: true, force: true });
|
|
1072
1271
|
}
|
|
1073
|
-
catch {
|
|
1272
|
+
catch {
|
|
1273
|
+
/* ignore */
|
|
1274
|
+
}
|
|
1074
1275
|
try {
|
|
1075
1276
|
unlinkSync(join(cwd, '.monomind', 'loops', `${orgName}.md`));
|
|
1076
1277
|
}
|
|
1077
|
-
catch {
|
|
1278
|
+
catch {
|
|
1279
|
+
/* ignore */
|
|
1280
|
+
}
|
|
1078
1281
|
try {
|
|
1079
1282
|
unlinkSync(join(orgsDir, `${orgName}-run.md`));
|
|
1080
1283
|
}
|
|
1081
|
-
catch {
|
|
1284
|
+
catch {
|
|
1285
|
+
/* ignore */
|
|
1286
|
+
}
|
|
1082
1287
|
log(output.success(`Org "${orgName}" deleted (${removed} file(s) removed).`));
|
|
1083
1288
|
return { success: true };
|
|
1084
1289
|
};
|
|
@@ -1096,7 +1301,11 @@ const clearStaleRuntime = (cwd, name) => {
|
|
|
1096
1301
|
rt = JSON.parse(readFileSync(rtPath, 'utf8'));
|
|
1097
1302
|
}
|
|
1098
1303
|
catch (err) {
|
|
1099
|
-
return {
|
|
1304
|
+
return {
|
|
1305
|
+
cleared: false,
|
|
1306
|
+
reason: 'unreadable',
|
|
1307
|
+
detail: err instanceof Error ? err.message : String(err),
|
|
1308
|
+
};
|
|
1100
1309
|
}
|
|
1101
1310
|
if (rt.status !== 'running' && rt.status !== 'crashed')
|
|
1102
1311
|
return { cleared: false, reason: 'not-running' };
|
|
@@ -1105,11 +1314,19 @@ const clearStaleRuntime = (cwd, name) => {
|
|
|
1105
1314
|
process.kill(rt.pid, 0);
|
|
1106
1315
|
return { cleared: false, reason: 'alive', detail: String(rt.pid) };
|
|
1107
1316
|
}
|
|
1108
|
-
catch {
|
|
1317
|
+
catch {
|
|
1318
|
+
/* pid is gone — this is exactly the stale case mark-complete exists for */
|
|
1319
|
+
}
|
|
1109
1320
|
}
|
|
1110
1321
|
// Same shape stopOrg's persistState() writes, so every reader (org status,
|
|
1111
1322
|
// isOrgRunning, the mastermind-org* skills' jq checks) sees a stopped org.
|
|
1112
|
-
writeFileSync(rtPath, JSON.stringify({
|
|
1323
|
+
writeFileSync(rtPath, JSON.stringify({
|
|
1324
|
+
status: 'stopped',
|
|
1325
|
+
run: rt.run,
|
|
1326
|
+
pid: rt.pid,
|
|
1327
|
+
updated: new Date().toISOString(),
|
|
1328
|
+
closedBy: 'mark-complete',
|
|
1329
|
+
}, null, 2));
|
|
1113
1330
|
return { cleared: true, run: rt.run };
|
|
1114
1331
|
};
|
|
1115
1332
|
const markCompleteAction = async (ctx) => {
|
|
@@ -1124,7 +1341,9 @@ const markCompleteAction = async (ctx) => {
|
|
|
1124
1341
|
// 0 — a typo looked like a successful cleanup.
|
|
1125
1342
|
const orgsDir = join(cwd, ORG_DIR);
|
|
1126
1343
|
if (!existsSync(join(orgsDir, `${orgName}.json`))) {
|
|
1127
|
-
const known = existsSync(orgsDir)
|
|
1344
|
+
const known = existsSync(orgsDir)
|
|
1345
|
+
? listOrgConfigFiles(orgsDir).map((f) => f.replace(/\.json$/, ''))
|
|
1346
|
+
: [];
|
|
1128
1347
|
log(output.error(`Org not found: ${orgName}${known.length ? ` — available: ${known.join(', ')}` : ''}`));
|
|
1129
1348
|
return { success: false, message: 'org not found' };
|
|
1130
1349
|
}
|
|
@@ -1149,14 +1368,18 @@ const markCompleteAction = async (ctx) => {
|
|
|
1149
1368
|
if (ctl.url)
|
|
1150
1369
|
ctrlUrl = ctl.url;
|
|
1151
1370
|
}
|
|
1152
|
-
catch {
|
|
1371
|
+
catch {
|
|
1372
|
+
/* default */
|
|
1373
|
+
}
|
|
1153
1374
|
try {
|
|
1154
1375
|
// All dashboard /api routes are auth-gated — attach the local session token.
|
|
1155
1376
|
let auth = '';
|
|
1156
1377
|
try {
|
|
1157
1378
|
auth = readFileSync(join(cwd, '.monomind', 'dashboard-token'), 'utf8').trim();
|
|
1158
1379
|
}
|
|
1159
|
-
catch {
|
|
1380
|
+
catch {
|
|
1381
|
+
/* server may be pre-auth */
|
|
1382
|
+
}
|
|
1160
1383
|
// Bounded. Updating the dashboard is best-effort — the local state has
|
|
1161
1384
|
// already been cleared by this point — but the fetch had no timeout, so a
|
|
1162
1385
|
// dashboard that holds the port without answering (a wedged build from an
|
|
@@ -1222,27 +1445,69 @@ export const orgCommand = {
|
|
|
1222
1445
|
description: 'SDK-based org runtime — run agent organizations as a controlled daemon',
|
|
1223
1446
|
subcommands: [
|
|
1224
1447
|
{
|
|
1225
|
-
name: 'run',
|
|
1448
|
+
name: 'run',
|
|
1449
|
+
description: 'Start an org (foreground daemon)',
|
|
1226
1450
|
options: [
|
|
1227
1451
|
{ name: 'task', description: 'Override the org goal for this run', type: 'string' },
|
|
1228
|
-
{
|
|
1229
|
-
|
|
1230
|
-
|
|
1231
|
-
|
|
1232
|
-
|
|
1452
|
+
{
|
|
1453
|
+
name: 'resume',
|
|
1454
|
+
description: 'Resume an org run from its persisted checkpoint instead of starting fresh',
|
|
1455
|
+
type: 'boolean',
|
|
1456
|
+
},
|
|
1457
|
+
{
|
|
1458
|
+
name: 'cross-process',
|
|
1459
|
+
description: 'Discover and message orgs hosted by other monomind processes on this machine (default true)',
|
|
1460
|
+
type: 'boolean',
|
|
1461
|
+
default: true,
|
|
1462
|
+
},
|
|
1463
|
+
{
|
|
1464
|
+
name: 'dry-run',
|
|
1465
|
+
description: "Validate and print each role's briefing without starting any agent sessions",
|
|
1466
|
+
type: 'boolean',
|
|
1467
|
+
},
|
|
1468
|
+
{
|
|
1469
|
+
name: 'budget-usd',
|
|
1470
|
+
description: 'Hard-stop the run if the upfront cost estimate exceeds this USD value (e.g. --budget-usd 5)',
|
|
1471
|
+
type: 'number',
|
|
1472
|
+
},
|
|
1473
|
+
{
|
|
1474
|
+
name: 'yes',
|
|
1475
|
+
short: 'y',
|
|
1476
|
+
description: 'Skip the interactive cost-estimate confirmation prompt',
|
|
1477
|
+
type: 'boolean',
|
|
1478
|
+
},
|
|
1479
|
+
],
|
|
1480
|
+
examples: [
|
|
1481
|
+
{
|
|
1482
|
+
command: 'monomind org run growth --task "weekly report"',
|
|
1483
|
+
description: 'Run the growth org once with a task',
|
|
1484
|
+
},
|
|
1233
1485
|
],
|
|
1234
|
-
examples: [{ command: 'monomind org run growth --task "weekly report"', description: 'Run the growth org once with a task' }],
|
|
1235
1486
|
action: runAction,
|
|
1236
1487
|
},
|
|
1237
1488
|
{ name: 'stop', description: 'Request a running org daemon to stop', action: stopAction },
|
|
1238
|
-
{
|
|
1489
|
+
{
|
|
1490
|
+
name: 'pause',
|
|
1491
|
+
description: 'Pause an org — current turns finish, no new cycles start',
|
|
1492
|
+
action: pauseAction,
|
|
1493
|
+
},
|
|
1239
1494
|
{ name: 'resume', description: 'Resume a paused org', action: resumeAction },
|
|
1240
|
-
{
|
|
1495
|
+
{
|
|
1496
|
+
name: 'reload',
|
|
1497
|
+
description: 'Hot-reload an org definition without stopping sessions',
|
|
1498
|
+
action: reloadAction,
|
|
1499
|
+
},
|
|
1241
1500
|
{ name: 'status', description: 'Show runtime state of orgs', action: statusAction },
|
|
1242
1501
|
{
|
|
1243
|
-
name: 'serve',
|
|
1502
|
+
name: 'serve',
|
|
1503
|
+
description: 'Start the daemon server only (hosts scheduled orgs)',
|
|
1244
1504
|
options: [
|
|
1245
|
-
{
|
|
1505
|
+
{
|
|
1506
|
+
name: 'cross-process',
|
|
1507
|
+
description: 'Discover and message orgs hosted by other monomind processes on this machine (default true)',
|
|
1508
|
+
type: 'boolean',
|
|
1509
|
+
default: true,
|
|
1510
|
+
},
|
|
1246
1511
|
],
|
|
1247
1512
|
action: serveAction,
|
|
1248
1513
|
},
|
|
@@ -1251,29 +1516,57 @@ export const orgCommand = {
|
|
|
1251
1516
|
description: 'Print (or --install) a launchd/systemd unit that keeps `org serve` running',
|
|
1252
1517
|
options: [
|
|
1253
1518
|
{ name: 'format', description: 'launchd or systemd (default: platform)', type: 'string' },
|
|
1254
|
-
{
|
|
1519
|
+
{
|
|
1520
|
+
name: 'install',
|
|
1521
|
+
description: 'Write the unit into the per-user location',
|
|
1522
|
+
type: 'boolean',
|
|
1523
|
+
},
|
|
1255
1524
|
],
|
|
1256
1525
|
action: supervisorAction,
|
|
1257
1526
|
},
|
|
1258
1527
|
{
|
|
1259
|
-
name: 'test-loop',
|
|
1260
|
-
|
|
1528
|
+
name: 'test-loop',
|
|
1529
|
+
description: 'Run the org e2e verification loop N times',
|
|
1530
|
+
options: [
|
|
1531
|
+
{ name: 'times', short: 'n', description: 'Iterations', type: 'number', default: 5 },
|
|
1532
|
+
{
|
|
1533
|
+
name: 'scenario',
|
|
1534
|
+
description: 'Run a declarative scenario file (.monomind/scenarios/<file>) instead of the built-in fixture — structural dry-run only',
|
|
1535
|
+
type: 'string',
|
|
1536
|
+
},
|
|
1537
|
+
],
|
|
1261
1538
|
action: testLoopAction,
|
|
1262
1539
|
},
|
|
1263
1540
|
{
|
|
1264
|
-
name: 'logs',
|
|
1541
|
+
name: 'logs',
|
|
1542
|
+
description: 'Show (or follow) the formatted event log of an org run',
|
|
1265
1543
|
options: [
|
|
1266
1544
|
{ name: 'run', description: 'Run id (default: latest)', type: 'string' },
|
|
1267
1545
|
{ name: 'role', description: 'Only events from/to this role', type: 'string' },
|
|
1268
|
-
{
|
|
1546
|
+
{
|
|
1547
|
+
name: 'filter-tool',
|
|
1548
|
+
description: 'Filter events by tool name (e.g., Write, Edit)',
|
|
1549
|
+
type: 'string',
|
|
1550
|
+
},
|
|
1269
1551
|
{ name: 'filter-role', description: 'Filter events by role ID', type: 'string' },
|
|
1270
|
-
{
|
|
1271
|
-
|
|
1552
|
+
{
|
|
1553
|
+
name: 'tools-only',
|
|
1554
|
+
description: 'Show only tool events (exclude messages/status/audit)',
|
|
1555
|
+
type: 'boolean',
|
|
1556
|
+
},
|
|
1557
|
+
{
|
|
1558
|
+
name: 'audit-filter',
|
|
1559
|
+
description: 'Filter audit events by decision (allow|deny)',
|
|
1560
|
+
type: 'string',
|
|
1561
|
+
},
|
|
1272
1562
|
{ name: 'follow', short: 'f', description: 'Keep tailing until Ctrl-C', type: 'boolean' },
|
|
1273
1563
|
],
|
|
1274
1564
|
examples: [
|
|
1275
1565
|
{ command: 'monomind org logs growth --follow', description: 'Live-tail the latest run' },
|
|
1276
|
-
{
|
|
1566
|
+
{
|
|
1567
|
+
command: 'monomind org logs growth --tools-only',
|
|
1568
|
+
description: 'Show only tool call events',
|
|
1569
|
+
},
|
|
1277
1570
|
],
|
|
1278
1571
|
action: async (ctx) => {
|
|
1279
1572
|
const v = validateOrgName(ctx.args[0]);
|
|
@@ -1284,16 +1577,36 @@ export const orgCommand = {
|
|
|
1284
1577
|
},
|
|
1285
1578
|
},
|
|
1286
1579
|
{
|
|
1287
|
-
name: 'watch',
|
|
1580
|
+
name: 'watch',
|
|
1581
|
+
description: "Live-tail one role's assistant chat text (any runtime) — a filtered, friendlier `logs --follow`",
|
|
1288
1582
|
options: [
|
|
1289
1583
|
{ name: 'run', description: 'Run id (default: latest)', type: 'string' },
|
|
1290
|
-
{
|
|
1291
|
-
|
|
1292
|
-
|
|
1584
|
+
{
|
|
1585
|
+
name: 'follow',
|
|
1586
|
+
description: 'Set --follow=false to print current output once and exit instead of live-tailing',
|
|
1587
|
+
type: 'boolean',
|
|
1588
|
+
default: true,
|
|
1589
|
+
},
|
|
1590
|
+
{
|
|
1591
|
+
name: 'verbose',
|
|
1592
|
+
description: 'Also interleave status events (restart/crash/state-change) into the transcript',
|
|
1593
|
+
type: 'boolean',
|
|
1594
|
+
},
|
|
1595
|
+
{
|
|
1596
|
+
name: 'stats',
|
|
1597
|
+
description: 'Print a running token/cost line as usage events arrive',
|
|
1598
|
+
type: 'boolean',
|
|
1599
|
+
},
|
|
1293
1600
|
],
|
|
1294
1601
|
examples: [
|
|
1295
|
-
{
|
|
1296
|
-
|
|
1602
|
+
{
|
|
1603
|
+
command: 'monomind org watch growth researcher',
|
|
1604
|
+
description: "Watch the researcher role's live output",
|
|
1605
|
+
},
|
|
1606
|
+
{
|
|
1607
|
+
command: 'monomind org watch growth researcher --verbose --stats',
|
|
1608
|
+
description: 'Also show restarts/crashes and a running token/cost total',
|
|
1609
|
+
},
|
|
1297
1610
|
],
|
|
1298
1611
|
action: async (ctx) => {
|
|
1299
1612
|
const v = validateOrgName(ctx.args[0]);
|
|
@@ -1304,16 +1617,23 @@ export const orgCommand = {
|
|
|
1304
1617
|
},
|
|
1305
1618
|
},
|
|
1306
1619
|
{
|
|
1307
|
-
name: 'report',
|
|
1620
|
+
name: 'report',
|
|
1621
|
+
description: 'Summarize an org run: outcome, per-role activity, tokens, assets, crashes',
|
|
1308
1622
|
options: [
|
|
1309
1623
|
{ name: 'run', description: 'Run id (default: latest)', type: 'string' },
|
|
1310
1624
|
{ name: 'all', description: 'List all recorded runs from history', type: 'boolean' },
|
|
1311
1625
|
{ name: 'by-role', description: 'Show per-role cost breakdown', type: 'boolean' },
|
|
1312
1626
|
{ name: 'audit', description: 'Show tool audit trail', type: 'boolean' },
|
|
1313
|
-
{
|
|
1627
|
+
{
|
|
1628
|
+
name: 'tool',
|
|
1629
|
+
description: 'Filter tool audit by tool name (with --audit)',
|
|
1630
|
+
type: 'string',
|
|
1631
|
+
},
|
|
1314
1632
|
{ name: 'format', description: 'Output format (mermaid for flowchart)', type: 'string' },
|
|
1315
1633
|
],
|
|
1316
|
-
examples: [
|
|
1634
|
+
examples: [
|
|
1635
|
+
{ command: 'monomind org report growth', description: 'Report on the latest run' },
|
|
1636
|
+
],
|
|
1317
1637
|
action: async (ctx) => {
|
|
1318
1638
|
const v = validateOrgName(ctx.args[0]);
|
|
1319
1639
|
if (!v.ok)
|
|
@@ -1323,11 +1643,18 @@ export const orgCommand = {
|
|
|
1323
1643
|
},
|
|
1324
1644
|
},
|
|
1325
1645
|
{
|
|
1326
|
-
name: 'memory',
|
|
1646
|
+
name: 'memory',
|
|
1647
|
+
description: "Inspect an org's cross-run memory and knowledge graph (stats | search <query> | rules | rollback <run-ref>)",
|
|
1327
1648
|
examples: [
|
|
1328
1649
|
{ command: 'monomind org memory growth stats', description: 'KG size and namespaces' },
|
|
1329
|
-
{
|
|
1330
|
-
|
|
1650
|
+
{
|
|
1651
|
+
command: 'monomind org memory growth search "launch checklist"',
|
|
1652
|
+
description: 'Search org memory + KG',
|
|
1653
|
+
},
|
|
1654
|
+
{
|
|
1655
|
+
command: 'monomind org memory growth rollback run:m4x2',
|
|
1656
|
+
description: 'Delete everything one run wrote to the KG',
|
|
1657
|
+
},
|
|
1331
1658
|
],
|
|
1332
1659
|
action: async (ctx) => {
|
|
1333
1660
|
const v = validateOrgName(ctx.args[0]);
|
|
@@ -1341,7 +1668,9 @@ export const orgCommand = {
|
|
|
1341
1668
|
try {
|
|
1342
1669
|
if (sub === 'stats') {
|
|
1343
1670
|
const [stats, glossary, backend] = await Promise.all([
|
|
1344
|
-
kg.kgStats({ dbPath }),
|
|
1671
|
+
kg.kgStats({ dbPath }),
|
|
1672
|
+
kg.kgGlossary({ dbPath, limit: 15 }),
|
|
1673
|
+
bridge.bridgeGetBackendStats(dbPath),
|
|
1345
1674
|
]);
|
|
1346
1675
|
log(output.info(`Knowledge graph: ${stats.nodes} entities, ${stats.edges} relations, ${stats.rules} rules`));
|
|
1347
1676
|
if (glossary.length)
|
|
@@ -1349,21 +1678,33 @@ export const orgCommand = {
|
|
|
1349
1678
|
const byNs = backend?.entriesByNamespace ?? {};
|
|
1350
1679
|
for (const [ns, count] of Object.entries(byNs))
|
|
1351
1680
|
log(output.info(` ${ns}: ${count} entries`));
|
|
1352
|
-
return {
|
|
1681
|
+
return {
|
|
1682
|
+
success: true,
|
|
1683
|
+
message: 'org memory stats',
|
|
1684
|
+
data: { ...stats, namespaces: byNs },
|
|
1685
|
+
};
|
|
1353
1686
|
}
|
|
1354
1687
|
if (sub === 'search') {
|
|
1355
1688
|
const q = ctx.args.slice(2).join(' ');
|
|
1356
1689
|
if (!q)
|
|
1357
1690
|
return { success: false, message: 'usage: org memory <org> search <query>' };
|
|
1358
1691
|
const [mem, graph] = await Promise.all([
|
|
1359
|
-
bridge.bridgeSearchEntries({
|
|
1692
|
+
bridge.bridgeSearchEntries({
|
|
1693
|
+
query: q,
|
|
1694
|
+
namespace: `org:${v.name}`,
|
|
1695
|
+
limit: 5,
|
|
1696
|
+
dbPath,
|
|
1697
|
+
}),
|
|
1360
1698
|
kg.kgSearch({ query: q, dbPath, limit: 8 }),
|
|
1361
1699
|
]);
|
|
1362
1700
|
for (const r of mem?.results ?? [])
|
|
1363
1701
|
log(output.info(`[${r.score.toFixed(2)}] ${r.key}: ${r.content.slice(0, 160)}`));
|
|
1364
1702
|
if (graph.context)
|
|
1365
1703
|
log(output.info(`\nKnowledge graph:\n${graph.context}`));
|
|
1366
|
-
return {
|
|
1704
|
+
return {
|
|
1705
|
+
success: true,
|
|
1706
|
+
message: `${(mem?.results ?? []).length} memories, ${graph.triplets.length} triplets`,
|
|
1707
|
+
};
|
|
1367
1708
|
}
|
|
1368
1709
|
if (sub === 'rules') {
|
|
1369
1710
|
const rules = await kg.kgListRules({ dbPath, limit: 50 });
|
|
@@ -1374,26 +1715,36 @@ export const orgCommand = {
|
|
|
1374
1715
|
if (sub === 'rollback') {
|
|
1375
1716
|
const ref = ctx.args[2];
|
|
1376
1717
|
if (!ref)
|
|
1377
|
-
return {
|
|
1718
|
+
return {
|
|
1719
|
+
success: false,
|
|
1720
|
+
message: 'usage: org memory <org> rollback <origin-ref> (e.g. run:m4x2)',
|
|
1721
|
+
};
|
|
1378
1722
|
const res = await kg.kgRollback({ originRef: ref, dbPath });
|
|
1379
1723
|
log(output.info(`Rolled back ${ref}: ${res.deleted} deleted, ${res.retained} retained (shared with other origins)`));
|
|
1380
1724
|
return { success: res.success, message: `rollback ${ref}`, data: res };
|
|
1381
1725
|
}
|
|
1382
|
-
return {
|
|
1726
|
+
return {
|
|
1727
|
+
success: false,
|
|
1728
|
+
message: `unknown subcommand "${sub}" — use stats | search | rules | rollback`,
|
|
1729
|
+
};
|
|
1383
1730
|
}
|
|
1384
1731
|
finally {
|
|
1385
|
-
await bridge.shutdownBridge().catch(() => {
|
|
1732
|
+
await bridge.shutdownBridge().catch(() => {
|
|
1733
|
+
/* best effort */
|
|
1734
|
+
});
|
|
1386
1735
|
}
|
|
1387
1736
|
},
|
|
1388
1737
|
},
|
|
1389
1738
|
{
|
|
1390
|
-
name: 'costs',
|
|
1391
|
-
|
|
1392
|
-
|
|
1393
|
-
],
|
|
1739
|
+
name: 'costs',
|
|
1740
|
+
description: 'Show per-role cost tracking from runtime.json',
|
|
1741
|
+
options: [{ name: 'run', description: 'Run ID (defaults to latest)', type: 'string' }],
|
|
1394
1742
|
examples: [
|
|
1395
1743
|
{ command: 'monomind org costs growth', description: 'Show cost breakdown for latest run' },
|
|
1396
|
-
{
|
|
1744
|
+
{
|
|
1745
|
+
command: 'monomind org costs growth --run run-20240130-123456',
|
|
1746
|
+
description: 'Show cost breakdown for specific run',
|
|
1747
|
+
},
|
|
1397
1748
|
],
|
|
1398
1749
|
action: async (ctx) => {
|
|
1399
1750
|
const v = validateOrgName(ctx.args[0]);
|
|
@@ -1404,15 +1755,29 @@ export const orgCommand = {
|
|
|
1404
1755
|
},
|
|
1405
1756
|
},
|
|
1406
1757
|
{
|
|
1407
|
-
name: 'inbox',
|
|
1758
|
+
name: 'inbox',
|
|
1759
|
+
description: 'Deliver an inbound cross-org message (live to a running org, queued to inbox.jsonl otherwise) — remote.ts shells out to this over SSH',
|
|
1408
1760
|
options: [
|
|
1409
|
-
{
|
|
1410
|
-
|
|
1411
|
-
|
|
1761
|
+
{
|
|
1762
|
+
name: 'json',
|
|
1763
|
+
description: 'JSON payload: {"from":"orgA:role","subject":"...","body":"..."}',
|
|
1764
|
+
type: 'string',
|
|
1765
|
+
},
|
|
1766
|
+
{ name: 'to', description: "Target role (default: the org's coordinator)", type: 'string' },
|
|
1767
|
+
{
|
|
1768
|
+
name: 'from',
|
|
1769
|
+
description: 'Sender, qualified "org:role" (alternative to --json)',
|
|
1770
|
+
type: 'string',
|
|
1771
|
+
},
|
|
1412
1772
|
{ name: 'subject', description: 'Subject (alternative to --json)', type: 'string' },
|
|
1413
1773
|
{ name: 'body', description: 'Body (alternative to --json)', type: 'string' },
|
|
1414
1774
|
],
|
|
1415
|
-
examples: [
|
|
1775
|
+
examples: [
|
|
1776
|
+
{
|
|
1777
|
+
command: 'monomind org inbox growth --json \'{"from":"sales:boss","subject":"leads","body":"..."}\'',
|
|
1778
|
+
description: 'Deliver a message to the growth org',
|
|
1779
|
+
},
|
|
1780
|
+
],
|
|
1416
1781
|
action: async (ctx) => {
|
|
1417
1782
|
const v = validateOrgName(ctx.args[0]);
|
|
1418
1783
|
if (!v.ok)
|
|
@@ -1422,9 +1787,15 @@ export const orgCommand = {
|
|
|
1422
1787
|
},
|
|
1423
1788
|
},
|
|
1424
1789
|
{
|
|
1425
|
-
name: 'flow',
|
|
1790
|
+
name: 'flow',
|
|
1791
|
+
description: 'Export org flow as Mermaid diagram',
|
|
1426
1792
|
options: [{ name: 'run', description: 'Run ID (defaults to latest)', type: 'string' }],
|
|
1427
|
-
examples: [
|
|
1793
|
+
examples: [
|
|
1794
|
+
{
|
|
1795
|
+
command: 'monomind org flow growth --run run-20250130120000',
|
|
1796
|
+
description: 'Export Mermaid flowchart',
|
|
1797
|
+
},
|
|
1798
|
+
],
|
|
1428
1799
|
action: async (ctx) => {
|
|
1429
1800
|
const v = validateOrgName(ctx.args[0]);
|
|
1430
1801
|
if (!v.ok)
|
|
@@ -1434,9 +1805,12 @@ export const orgCommand = {
|
|
|
1434
1805
|
},
|
|
1435
1806
|
},
|
|
1436
1807
|
{
|
|
1437
|
-
name: 'questions',
|
|
1808
|
+
name: 'questions',
|
|
1809
|
+
description: "List pending ask_human questions from an org's agents",
|
|
1438
1810
|
options: [{ name: 'all', description: 'Include answered questions', type: 'boolean' }],
|
|
1439
|
-
examples: [
|
|
1811
|
+
examples: [
|
|
1812
|
+
{ command: 'monomind org questions growth', description: 'Show unanswered questions' },
|
|
1813
|
+
],
|
|
1440
1814
|
action: async (ctx) => {
|
|
1441
1815
|
const v = validateOrgName(ctx.args[0]);
|
|
1442
1816
|
if (!v.ok)
|
|
@@ -1446,8 +1820,14 @@ export const orgCommand = {
|
|
|
1446
1820
|
},
|
|
1447
1821
|
},
|
|
1448
1822
|
{
|
|
1449
|
-
name: 'answer',
|
|
1450
|
-
|
|
1823
|
+
name: 'answer',
|
|
1824
|
+
description: 'Answer a pending ask_human question (live if the org is running, queued otherwise)',
|
|
1825
|
+
examples: [
|
|
1826
|
+
{
|
|
1827
|
+
command: 'monomind org answer growth q-123-ab "yes, ship it"',
|
|
1828
|
+
description: 'Answer question q-123-ab',
|
|
1829
|
+
},
|
|
1830
|
+
],
|
|
1451
1831
|
action: async (ctx) => {
|
|
1452
1832
|
const v = validateOrgName(ctx.args[0]);
|
|
1453
1833
|
if (!v.ok)
|
|
@@ -1457,8 +1837,14 @@ export const orgCommand = {
|
|
|
1457
1837
|
},
|
|
1458
1838
|
},
|
|
1459
1839
|
{
|
|
1460
|
-
name: 'approve',
|
|
1461
|
-
|
|
1840
|
+
name: 'approve',
|
|
1841
|
+
description: 'Approve a pending tool/action approval',
|
|
1842
|
+
examples: [
|
|
1843
|
+
{
|
|
1844
|
+
command: 'monomind org approve growth coder "Bash"',
|
|
1845
|
+
description: 'Approve Bash tool for coder role',
|
|
1846
|
+
},
|
|
1847
|
+
],
|
|
1462
1848
|
action: async (ctx) => {
|
|
1463
1849
|
const v = validateOrgName(ctx.args[0]);
|
|
1464
1850
|
if (!v.ok)
|
|
@@ -1468,8 +1854,14 @@ export const orgCommand = {
|
|
|
1468
1854
|
},
|
|
1469
1855
|
},
|
|
1470
1856
|
{
|
|
1471
|
-
name: 'deny',
|
|
1472
|
-
|
|
1857
|
+
name: 'deny',
|
|
1858
|
+
description: 'Deny a pending tool/action approval',
|
|
1859
|
+
examples: [
|
|
1860
|
+
{
|
|
1861
|
+
command: 'monomind org deny growth coder "Bash"',
|
|
1862
|
+
description: 'Deny Bash tool for coder role',
|
|
1863
|
+
},
|
|
1864
|
+
],
|
|
1473
1865
|
action: async (ctx) => {
|
|
1474
1866
|
const v = validateOrgName(ctx.args[0]);
|
|
1475
1867
|
if (!v.ok)
|
|
@@ -1479,7 +1871,8 @@ export const orgCommand = {
|
|
|
1479
1871
|
},
|
|
1480
1872
|
},
|
|
1481
1873
|
{
|
|
1482
|
-
name: 'gates',
|
|
1874
|
+
name: 'gates',
|
|
1875
|
+
description: "List decision gates from an org's agents",
|
|
1483
1876
|
options: [{ name: 'all', description: 'Include resolved gates', type: 'boolean' }],
|
|
1484
1877
|
examples: [
|
|
1485
1878
|
{ command: 'monomind org gates growth', description: 'Show pending gates' },
|
|
@@ -1494,8 +1887,14 @@ export const orgCommand = {
|
|
|
1494
1887
|
},
|
|
1495
1888
|
},
|
|
1496
1889
|
{
|
|
1497
|
-
name: 'gate-approve',
|
|
1498
|
-
|
|
1890
|
+
name: 'gate-approve',
|
|
1891
|
+
description: 'Approve a pending decision gate',
|
|
1892
|
+
examples: [
|
|
1893
|
+
{
|
|
1894
|
+
command: 'monomind org gate-approve growth gate-123-ab "ship it"',
|
|
1895
|
+
description: 'Approve gate with resolution',
|
|
1896
|
+
},
|
|
1897
|
+
],
|
|
1499
1898
|
action: async (ctx) => {
|
|
1500
1899
|
const v = validateOrgName(ctx.args[0]);
|
|
1501
1900
|
if (!v.ok)
|
|
@@ -1505,8 +1904,14 @@ export const orgCommand = {
|
|
|
1505
1904
|
},
|
|
1506
1905
|
},
|
|
1507
1906
|
{
|
|
1508
|
-
name: 'gate-reject',
|
|
1509
|
-
|
|
1907
|
+
name: 'gate-reject',
|
|
1908
|
+
description: 'Reject a pending decision gate',
|
|
1909
|
+
examples: [
|
|
1910
|
+
{
|
|
1911
|
+
command: 'monomind org gate-reject growth gate-123-ab "not ready"',
|
|
1912
|
+
description: 'Reject gate with reason',
|
|
1913
|
+
},
|
|
1914
|
+
],
|
|
1510
1915
|
action: async (ctx) => {
|
|
1511
1916
|
const v = validateOrgName(ctx.args[0]);
|
|
1512
1917
|
if (!v.ok)
|
|
@@ -1516,8 +1921,14 @@ export const orgCommand = {
|
|
|
1516
1921
|
},
|
|
1517
1922
|
},
|
|
1518
1923
|
{
|
|
1519
|
-
name: 'replay',
|
|
1520
|
-
|
|
1924
|
+
name: 'replay',
|
|
1925
|
+
description: 'Time-travel debugging: replay a run\'s bus events (does not resume live execution — use "org run --resume" for that)',
|
|
1926
|
+
examples: [
|
|
1927
|
+
{
|
|
1928
|
+
command: 'monomind org replay growth run-20250130120000-abc',
|
|
1929
|
+
description: "Replay a checkpoint's events for inspection",
|
|
1930
|
+
},
|
|
1931
|
+
],
|
|
1521
1932
|
action: async (ctx) => {
|
|
1522
1933
|
const v = validateOrgName(ctx.args[0]);
|
|
1523
1934
|
if (!v.ok)
|
|
@@ -1527,8 +1938,14 @@ export const orgCommand = {
|
|
|
1527
1938
|
},
|
|
1528
1939
|
},
|
|
1529
1940
|
{
|
|
1530
|
-
name: 'resume-from',
|
|
1531
|
-
|
|
1941
|
+
name: 'resume-from',
|
|
1942
|
+
description: "Resume live execution from the org's persisted checkpoint (restores mailbox/policy/session state; subject to TTL and checksum validation)",
|
|
1943
|
+
examples: [
|
|
1944
|
+
{
|
|
1945
|
+
command: 'monomind org resume-from growth',
|
|
1946
|
+
description: 'Resume growth from its last checkpoint',
|
|
1947
|
+
},
|
|
1948
|
+
],
|
|
1532
1949
|
action: async (ctx) => {
|
|
1533
1950
|
const v = validateOrgName(ctx.args[0]);
|
|
1534
1951
|
if (!v.ok)
|
|
@@ -1538,8 +1955,14 @@ export const orgCommand = {
|
|
|
1538
1955
|
},
|
|
1539
1956
|
},
|
|
1540
1957
|
{
|
|
1541
|
-
name: 'branch',
|
|
1542
|
-
|
|
1958
|
+
name: 'branch',
|
|
1959
|
+
description: "Snapshot a run's event log for replay",
|
|
1960
|
+
examples: [
|
|
1961
|
+
{
|
|
1962
|
+
command: 'monomind org branch growth run-20250130 abc-branch',
|
|
1963
|
+
description: "Snapshot a run's checkpoint into a new run for replay",
|
|
1964
|
+
},
|
|
1965
|
+
],
|
|
1543
1966
|
action: async (ctx) => {
|
|
1544
1967
|
const v = validateOrgName(ctx.args[0]);
|
|
1545
1968
|
if (!v.ok)
|
|
@@ -1549,8 +1972,14 @@ export const orgCommand = {
|
|
|
1549
1972
|
},
|
|
1550
1973
|
},
|
|
1551
1974
|
{
|
|
1552
|
-
name: 'decisions',
|
|
1553
|
-
|
|
1975
|
+
name: 'decisions',
|
|
1976
|
+
description: 'Show Rifft-style decision traces',
|
|
1977
|
+
examples: [
|
|
1978
|
+
{
|
|
1979
|
+
command: 'monomind org decisions growth --run run-20250130',
|
|
1980
|
+
description: 'Show decision traces',
|
|
1981
|
+
},
|
|
1982
|
+
],
|
|
1554
1983
|
action: async (ctx) => {
|
|
1555
1984
|
const v = validateOrgName(ctx.args[0]);
|
|
1556
1985
|
if (!v.ok)
|
|
@@ -1560,14 +1989,34 @@ export const orgCommand = {
|
|
|
1560
1989
|
},
|
|
1561
1990
|
},
|
|
1562
1991
|
{
|
|
1563
|
-
name: 'create',
|
|
1992
|
+
name: 'create',
|
|
1993
|
+
description: 'Scaffold an org config from a starter template',
|
|
1564
1994
|
options: [
|
|
1565
|
-
{
|
|
1566
|
-
|
|
1995
|
+
{
|
|
1996
|
+
name: 'template',
|
|
1997
|
+
description: 'content-team | dev-team | research-pod | kg-extraction | advisor-orchestrator',
|
|
1998
|
+
type: 'string',
|
|
1999
|
+
},
|
|
2000
|
+
{
|
|
2001
|
+
name: 'goal',
|
|
2002
|
+
description: "Org goal (defaults to the template's placeholder)",
|
|
2003
|
+
type: 'string',
|
|
2004
|
+
},
|
|
1567
2005
|
{ name: 'schedule', description: 'Daemon schedule, e.g. 30m or 2h', type: 'string' },
|
|
1568
2006
|
{ name: 'force', description: 'Overwrite an existing org config', type: 'boolean' },
|
|
2007
|
+
{
|
|
2008
|
+
name: 'yes',
|
|
2009
|
+
short: 'y',
|
|
2010
|
+
description: 'Skip the per-role model confirmation prompt (TTY only)',
|
|
2011
|
+
type: 'boolean',
|
|
2012
|
+
},
|
|
2013
|
+
],
|
|
2014
|
+
examples: [
|
|
2015
|
+
{
|
|
2016
|
+
command: 'monomind org create blog --template content-team --goal "3 posts/week"',
|
|
2017
|
+
description: 'Create a content org',
|
|
2018
|
+
},
|
|
1569
2019
|
],
|
|
1570
|
-
examples: [{ command: 'monomind org create blog --template content-team --goal "3 posts/week"', description: 'Create a content org' }],
|
|
1571
2020
|
action: async (ctx) => {
|
|
1572
2021
|
const v = validateOrgName(ctx.args[0]);
|
|
1573
2022
|
if (!v.ok)
|
|
@@ -1577,10 +2026,14 @@ export const orgCommand = {
|
|
|
1577
2026
|
},
|
|
1578
2027
|
},
|
|
1579
2028
|
{
|
|
1580
|
-
name: 'validate',
|
|
2029
|
+
name: 'validate',
|
|
2030
|
+
description: 'Validate org config(s) against the runtime schema and structural invariants',
|
|
1581
2031
|
examples: [
|
|
1582
2032
|
{ command: 'monomind org validate growth', description: 'Validate one org config' },
|
|
1583
|
-
{
|
|
2033
|
+
{
|
|
2034
|
+
command: 'monomind org validate',
|
|
2035
|
+
description: 'Validate every org config in the project',
|
|
2036
|
+
},
|
|
1584
2037
|
],
|
|
1585
2038
|
action: async (ctx) => {
|
|
1586
2039
|
const { validateAction } = await import('./org-observe.js');
|
|
@@ -1588,22 +2041,39 @@ export const orgCommand = {
|
|
|
1588
2041
|
},
|
|
1589
2042
|
},
|
|
1590
2043
|
{
|
|
1591
|
-
name: 'migrate',
|
|
1592
|
-
|
|
2044
|
+
name: 'migrate',
|
|
2045
|
+
description: 'Convert a v1 org config (topology/board/loop) to the v2 daemon shape',
|
|
2046
|
+
examples: [
|
|
2047
|
+
{
|
|
2048
|
+
command: 'monomind org migrate growth',
|
|
2049
|
+
description: 'Migrate one org; original saved as growth.v1.json',
|
|
2050
|
+
},
|
|
2051
|
+
],
|
|
1593
2052
|
action: migrateAction,
|
|
1594
2053
|
},
|
|
1595
2054
|
{ name: 'list', description: 'List all orgs in the current project', action: listAction },
|
|
1596
2055
|
{
|
|
1597
|
-
name: 'delete',
|
|
2056
|
+
name: 'delete',
|
|
2057
|
+
description: 'Delete an org and all its data',
|
|
1598
2058
|
options: [
|
|
1599
2059
|
{ name: 'yes', short: 'y', description: 'Skip confirmation', type: 'boolean' },
|
|
1600
|
-
{
|
|
2060
|
+
{
|
|
2061
|
+
name: 'force',
|
|
2062
|
+
description: 'Delete even if the org appears to be running',
|
|
2063
|
+
type: 'boolean',
|
|
2064
|
+
},
|
|
1601
2065
|
],
|
|
1602
2066
|
action: deleteAction,
|
|
1603
2067
|
},
|
|
1604
|
-
{
|
|
2068
|
+
{
|
|
2069
|
+
name: 'mark-complete',
|
|
2070
|
+
description: 'Manually close a stale/crashed run',
|
|
2071
|
+
action: markCompleteAction,
|
|
2072
|
+
},
|
|
2073
|
+
],
|
|
2074
|
+
examples: [
|
|
2075
|
+
{ command: 'monomind org run my-org', description: 'Run an org under full daemon control' },
|
|
1605
2076
|
],
|
|
1606
|
-
examples: [{ command: 'monomind org run my-org', description: 'Run an org under full daemon control' }],
|
|
1607
2077
|
action: async () => {
|
|
1608
2078
|
// index.ts's dispatcher never prints result.message on a failed action —
|
|
1609
2079
|
// it only exits with result.exitCode — so this must log itself or bare
|