@monoes/monomindcli 2.9.21 → 2.9.23
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-createorg/SKILL.md +26 -3
- 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/autopilot-state.d.ts +0 -16
- package/dist/src/autopilot-state.d.ts.map +1 -1
- package/dist/src/autopilot-state.js +0 -15
- package/dist/src/autopilot-state.js.map +1 -1
- package/dist/src/browser/dashboard/server.js +3 -3
- package/dist/src/browser/dashboard/server.js.map +1 -1
- package/dist/src/browser/dashboard/ui.html +2 -2
- package/dist/src/capabilities/cap-documents.d.ts.map +1 -1
- package/dist/src/capabilities/cap-documents.js +49 -38
- package/dist/src/capabilities/cap-documents.js.map +1 -1
- package/dist/src/commands/agent-lifecycle.d.ts.map +1 -1
- package/dist/src/commands/agent-lifecycle.js +4 -9
- 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 +37 -24
- package/dist/src/commands/agent-ops.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 +8 -27
- package/dist/src/commands/analyze-ast.js.map +1 -1
- package/dist/src/commands/analyze-imports.d.ts.map +1 -1
- package/dist/src/commands/analyze-imports.js +18 -17
- 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 +10 -24
- 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 +61 -15
- 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 +4 -89
- package/dist/src/commands/autopilot.js.map +1 -1
- package/dist/src/commands/browse.d.ts +1 -1
- package/dist/src/commands/cleanup.d.ts.map +1 -1
- package/dist/src/commands/cleanup.js +4 -2
- 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 +0 -1
- package/dist/src/commands/completions.js.map +1 -1
- package/dist/src/commands/config.js +7 -7
- package/dist/src/commands/config.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 +37 -5
- 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 +9 -3
- package/dist/src/commands/doctor.js.map +1 -1
- package/dist/src/commands/events.d.ts +9 -0
- package/dist/src/commands/events.d.ts.map +1 -0
- package/dist/src/commands/events.js +89 -0
- package/dist/src/commands/events.js.map +1 -0
- 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 +1 -101
- 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 +19 -71
- 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 +4 -7
- package/dist/src/commands/hooks.js.map +1 -1
- package/dist/src/commands/index.d.ts +2 -2
- package/dist/src/commands/index.d.ts.map +1 -1
- package/dist/src/commands/index.js +4 -3
- 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 +4 -0
- package/dist/src/commands/init-subcommands.js.map +1 -1
- package/dist/src/commands/init-wizard.d.ts.map +1 -1
- package/dist/src/commands/init-wizard.js +0 -8
- 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 +53 -23
- 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 +111 -60
- package/dist/src/commands/mcp.js.map +1 -1
- package/dist/src/commands/memory-crud.d.ts.map +1 -1
- package/dist/src/commands/memory-crud.js +33 -20
- package/dist/src/commands/memory-crud.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} +83 -297
- 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 +9 -1
- 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 +30 -110
- 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 +21 -168
- package/dist/src/commands/neural-registry.js.map +1 -1
- package/dist/src/commands/org-observe.d.ts +34 -3
- package/dist/src/commands/org-observe.d.ts.map +1 -1
- package/dist/src/commands/org-observe.js +213 -45
- package/dist/src/commands/org-observe.js.map +1 -1
- package/dist/src/commands/org.d.ts +14 -0
- package/dist/src/commands/org.d.ts.map +1 -1
- package/dist/src/commands/org.js +118 -20
- 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 +38 -31
- package/dist/src/commands/performance.js.map +1 -1
- package/dist/src/commands/security-misc.d.ts.map +1 -1
- package/dist/src/commands/security-misc.js +220 -90
- 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 +96 -27
- package/dist/src/commands/security-scan.js.map +1 -1
- package/dist/src/commands/security.js +1 -1
- package/dist/src/commands/security.js.map +1 -1
- package/dist/src/commands/start.d.ts.map +1 -1
- package/dist/src/commands/start.js +17 -96
- 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 +72 -64
- package/dist/src/commands/status.js.map +1 -1
- package/dist/src/commands/tokens.d.ts.map +1 -1
- package/dist/src/commands/tokens.js +4 -5
- package/dist/src/commands/tokens.js.map +1 -1
- package/dist/src/consensus/audit-writer.d.ts +2 -2
- package/dist/src/consensus/audit-writer.d.ts.map +1 -1
- package/dist/src/consensus/audit-writer.js +1 -1
- package/dist/src/index.d.ts +2 -2
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +12 -10
- package/dist/src/index.js.map +1 -1
- package/dist/src/init/claudemd-generator.d.ts.map +1 -1
- package/dist/src/init/claudemd-generator.js +32 -31
- package/dist/src/init/claudemd-generator.js.map +1 -1
- package/dist/src/init/codex-generator.d.ts +10 -0
- package/dist/src/init/codex-generator.d.ts.map +1 -0
- package/dist/src/init/codex-generator.js +67 -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 +4 -8
- package/dist/src/init/copy-assets.js.map +1 -1
- package/dist/src/init/executor.d.ts.map +1 -1
- package/dist/src/init/executor.js +9 -2
- package/dist/src/init/executor.js.map +1 -1
- package/dist/src/init/helpers-generator.js +1 -1
- package/dist/src/init/index.d.ts +1 -0
- package/dist/src/init/index.d.ts.map +1 -1
- package/dist/src/init/index.js +1 -0
- package/dist/src/init/index.js.map +1 -1
- package/dist/src/init/opencode-generator.js +2 -2
- 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 +1 -2
- package/dist/src/init/settings-generator.js.map +1 -1
- package/dist/src/init/shared.d.ts.map +1 -1
- package/dist/src/init/shared.js +3 -7
- 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 +8 -6
- package/dist/src/init/types.js.map +1 -1
- package/dist/src/init/upgrade.js +5 -5
- package/dist/src/init/upgrade.js.map +1 -1
- package/dist/src/init/write-capabilities.d.ts.map +1 -1
- package/dist/src/init/write-capabilities.js +36 -49
- package/dist/src/init/write-capabilities.js.map +1 -1
- package/dist/src/init/write-claude.js +1 -1
- 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 +57 -0
- package/dist/src/init/write-codex.js.map +1 -0
- package/dist/src/init/write-runtime-config.d.ts.map +1 -1
- package/dist/src/init/write-runtime-config.js +4 -5
- package/dist/src/init/write-runtime-config.js.map +1 -1
- package/dist/src/knowledge/eval/golden-set.js +15 -15
- package/dist/src/knowledge/eval/golden-set.js.map +1 -1
- package/dist/src/mcp-client.d.ts.map +1 -1
- package/dist/src/mcp-client.js +1 -2
- package/dist/src/mcp-client.js.map +1 -1
- package/dist/src/mcp-server.js +1 -1
- 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 +3 -3
- package/dist/src/mcp-tools/agent-tools.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 +4 -62
- package/dist/src/mcp-tools/autopilot-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 +21 -31
- package/dist/src/mcp-tools/guidance-tools.js.map +1 -1
- package/dist/src/mcp-tools/hooks-intelligence.d.ts +0 -1
- package/dist/src/mcp-tools/hooks-intelligence.d.ts.map +1 -1
- package/dist/src/mcp-tools/hooks-intelligence.js +56 -103
- 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 +78 -152
- package/dist/src/mcp-tools/hooks-routing.js.map +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 +1 -2
- package/dist/src/mcp-tools/index.d.ts.map +1 -1
- package/dist/src/mcp-tools/index.js +1 -2
- package/dist/src/mcp-tools/index.js.map +1 -1
- package/dist/src/mcp-tools/memory-tools.js +10 -10
- package/dist/src/mcp-tools/memory-tools.js.map +1 -1
- package/dist/src/mcp-tools/monograph/query-tools.js +9 -9
- package/dist/src/mcp-tools/monograph/query-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 +1153 -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 +32 -25
- package/dist/src/mcp-tools/performance-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 +30 -13
- package/dist/src/mcp-tools/system-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 +9 -13
- package/dist/src/mcp-tools/transfer-tools.js.map +1 -1
- package/dist/src/memory/embedding-operations.d.ts.map +1 -1
- package/dist/src/memory/embedding-operations.js +0 -37
- package/dist/src/memory/embedding-operations.js.map +1 -1
- package/dist/src/memory/hnsw-operations.d.ts +14 -74
- package/dist/src/memory/hnsw-operations.d.ts.map +1 -1
- package/dist/src/memory/hnsw-operations.js +22 -262
- 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 +8 -7
- 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 +33 -34
- package/dist/src/memory/memory-bridge.js.map +1 -1
- package/dist/src/memory/memory-crud.d.ts.map +1 -1
- package/dist/src/memory/memory-crud.js +0 -20
- package/dist/src/memory/memory-crud.js.map +1 -1
- package/dist/src/memory/memory-initializer.d.ts +2 -3
- package/dist/src/memory/memory-initializer.d.ts.map +1 -1
- package/dist/src/memory/memory-initializer.js +2 -3
- package/dist/src/memory/memory-initializer.js.map +1 -1
- package/dist/src/memory/memory-read.d.ts.map +1 -1
- package/dist/src/memory/memory-read.js +5 -14
- package/dist/src/memory/memory-read.js.map +1 -1
- package/dist/src/memory/sona-optimizer.d.ts +1 -1
- package/dist/src/memory/sona-optimizer.js +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/orgrt/agent-runner.d.ts +8 -2
- package/dist/src/orgrt/agent-runner.d.ts.map +1 -1
- package/dist/src/orgrt/agent-runner.js.map +1 -1
- package/dist/src/orgrt/antigravity-runner.d.ts +25 -2
- package/dist/src/orgrt/antigravity-runner.d.ts.map +1 -1
- package/dist/src/orgrt/antigravity-runner.js +265 -124
- package/dist/src/orgrt/antigravity-runner.js.map +1 -1
- package/dist/src/orgrt/approvals.d.ts +16 -1
- package/dist/src/orgrt/approvals.d.ts.map +1 -1
- package/dist/src/orgrt/approvals.js +47 -2
- package/dist/src/orgrt/approvals.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 +12 -18
- 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 +19 -3
- package/dist/src/orgrt/checkpoint.js.map +1 -1
- package/dist/src/orgrt/codex-runner.d.ts +26 -2
- package/dist/src/orgrt/codex-runner.d.ts.map +1 -1
- package/dist/src/orgrt/codex-runner.js +359 -128
- package/dist/src/orgrt/codex-runner.js.map +1 -1
- package/dist/src/orgrt/copilot-runner.d.ts +14 -0
- package/dist/src/orgrt/copilot-runner.d.ts.map +1 -0
- package/dist/src/orgrt/copilot-runner.js +260 -0
- package/dist/src/orgrt/copilot-runner.js.map +1 -0
- package/dist/src/orgrt/cross-org.d.ts.map +1 -1
- package/dist/src/orgrt/cross-org.js +11 -0
- package/dist/src/orgrt/cross-org.js.map +1 -1
- package/dist/src/orgrt/crush-runner.d.ts +27 -0
- package/dist/src/orgrt/crush-runner.d.ts.map +1 -0
- package/dist/src/orgrt/crush-runner.js +263 -0
- package/dist/src/orgrt/crush-runner.js.map +1 -0
- package/dist/src/orgrt/daemon.d.ts +68 -16
- package/dist/src/orgrt/daemon.d.ts.map +1 -1
- package/dist/src/orgrt/daemon.js +212 -29
- package/dist/src/orgrt/daemon.js.map +1 -1
- package/dist/src/orgrt/decisions.d.ts +1 -0
- package/dist/src/orgrt/decisions.d.ts.map +1 -1
- package/dist/src/orgrt/decisions.js +20 -0
- package/dist/src/orgrt/decisions.js.map +1 -1
- package/dist/src/orgrt/grok-runner.d.ts +18 -0
- package/dist/src/orgrt/grok-runner.d.ts.map +1 -0
- package/dist/src/orgrt/grok-runner.js +348 -0
- package/dist/src/orgrt/grok-runner.js.map +1 -0
- package/dist/src/orgrt/kimicode-runner.d.ts +53 -7
- package/dist/src/orgrt/kimicode-runner.d.ts.map +1 -1
- package/dist/src/orgrt/kimicode-runner.js +246 -144
- 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 +74 -2
- package/dist/src/orgrt/mailbox.js.map +1 -1
- package/dist/src/orgrt/pi-rpc-runner.d.ts +68 -0
- package/dist/src/orgrt/pi-rpc-runner.d.ts.map +1 -0
- package/dist/src/orgrt/pi-rpc-runner.js +385 -0
- package/dist/src/orgrt/pi-rpc-runner.js.map +1 -0
- package/dist/src/orgrt/pi-runner.d.ts +16 -0
- package/dist/src/orgrt/pi-runner.d.ts.map +1 -0
- package/dist/src/orgrt/pi-runner.js +264 -0
- package/dist/src/orgrt/pi-runner.js.map +1 -0
- 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 +25 -2
- package/dist/src/orgrt/policy.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/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 +346 -0
- package/dist/src/orgrt/qwen-rpc-runner.js.map +1 -0
- package/dist/src/orgrt/qwen-runner.d.ts +18 -0
- package/dist/src/orgrt/qwen-runner.d.ts.map +1 -0
- package/dist/src/orgrt/qwen-runner.js +270 -0
- package/dist/src/orgrt/qwen-runner.js.map +1 -0
- package/dist/src/orgrt/scheduler-integration.d.ts.map +1 -1
- package/dist/src/orgrt/scheduler-integration.js +7 -0
- package/dist/src/orgrt/scheduler-integration.js.map +1 -1
- package/dist/src/orgrt/session.d.ts +29 -1
- package/dist/src/orgrt/session.d.ts.map +1 -1
- package/dist/src/orgrt/session.js +87 -18
- package/dist/src/orgrt/session.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 +54 -0
- package/dist/src/orgrt/task-dag.js.map +1 -1
- package/dist/src/orgrt/test-loop.d.ts.map +1 -1
- package/dist/src/orgrt/test-loop.js +86 -9
- 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 +15 -0
- package/dist/src/orgrt/tool-fence.js.map +1 -1
- package/dist/src/orgrt/types.d.ts +50 -1
- package/dist/src/orgrt/types.d.ts.map +1 -1
- package/dist/src/orgrt/types.js +47 -4
- package/dist/src/orgrt/types.js.map +1 -1
- package/dist/src/orgrt/usage-proxy.d.ts +32 -0
- package/dist/src/orgrt/usage-proxy.d.ts.map +1 -0
- package/dist/src/orgrt/usage-proxy.js +226 -0
- package/dist/src/orgrt/usage-proxy.js.map +1 -0
- package/dist/src/pricing/model-pricing.d.ts.map +1 -1
- package/dist/src/pricing/model-pricing.js +0 -4
- package/dist/src/pricing/model-pricing.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 +84 -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 +6 -7
- package/dist/src/services/config-file-manager.js.map +1 -1
- package/dist/src/suggest.d.ts.map +1 -1
- package/dist/src/suggest.js +4 -5
- package/dist/src/suggest.js.map +1 -1
- package/dist/src/transfer/anonymization/index.d.ts +1 -1
- package/dist/src/transfer/anonymization/index.js +1 -1
- package/dist/src/types.d.ts +3 -3
- package/dist/src/types.d.ts.map +1 -1
- package/dist/src/ui/collector.mjs +9 -13
- package/dist/src/ui/dashboard.html +93 -10
- package/dist/src/ui/data/agent-avatars.html +0 -12
- package/dist/src/ui/data/agent-avatars.json +10 -26
- package/dist/src/ui/orgs.html +8 -1
- package/dist/src/ui/routes-org.mjs +85 -16
- package/dist/src/ui/server.mjs +50 -23
- 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 +11 -0
- package/dist/src/utils/json-file.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +5 -5
- 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/orgrt/daemon.js
CHANGED
|
@@ -7,7 +7,7 @@ import { writeJsonFileAtomic } from '../utils/json-file.js';
|
|
|
7
7
|
import { reapOrphanedSdkProcesses } from '../utils/resource-governor.js';
|
|
8
8
|
import { OrgBus } from './bus.js';
|
|
9
9
|
import { PolicyEngine } from './policy.js';
|
|
10
|
-
import { Mailbox } from './mailbox.js';
|
|
10
|
+
import { Mailbox, isRecoverableCloseReason } from './mailbox.js';
|
|
11
11
|
import { runAgentSession } from './session.js';
|
|
12
12
|
import { attachForwarder } from './forwarder.js';
|
|
13
13
|
import { BrokerLease, normalizeCredential } from './broker.js';
|
|
@@ -21,6 +21,13 @@ import { KimiCodeAgentRunner } from './kimicode-runner.js';
|
|
|
21
21
|
import { VercelAgentRunner } from './vercel-runner.js';
|
|
22
22
|
import { CodexAgentRunner } from './codex-runner.js';
|
|
23
23
|
import { AntigravityAgentRunner } from './antigravity-runner.js';
|
|
24
|
+
import { GrokAgentRunner } from './grok-runner.js';
|
|
25
|
+
import { QwenAgentRunner } from './qwen-runner.js';
|
|
26
|
+
import { CrushAgentRunner } from './crush-runner.js';
|
|
27
|
+
import { CopilotAgentRunner } from './copilot-runner.js';
|
|
28
|
+
import { PiAgentRunner } from './pi-runner.js';
|
|
29
|
+
import { PiRpcAgentRunner } from './pi-rpc-runner.js';
|
|
30
|
+
import { QwenRpcAgentRunner } from './qwen-rpc-runner.js';
|
|
24
31
|
import { captureCheckpoint, generateChecksum, validateCheckpoint, isCheckpointExpired, restoreMailboxQueue, } from './checkpoint.js';
|
|
25
32
|
import { loadGlobalFenceConfig, mergeFenceConfigs, createFenceForRole, } from './fence.js';
|
|
26
33
|
// ── Extracted module imports ────────────────────────────────────────────
|
|
@@ -73,7 +80,7 @@ function autoRuntimeFromProvider(kind) {
|
|
|
73
80
|
return 'antigravity';
|
|
74
81
|
return undefined;
|
|
75
82
|
}
|
|
76
|
-
export function resolveRunner(orgRuntime, providerKind) {
|
|
83
|
+
export function resolveRunner(orgRuntime, providerKind, provider) {
|
|
77
84
|
const selected = orgRuntime ??
|
|
78
85
|
autoRuntimeFromProvider(providerKind) ??
|
|
79
86
|
process.env.MONOMIND_RUNTIME;
|
|
@@ -87,6 +94,30 @@ export function resolveRunner(orgRuntime, providerKind) {
|
|
|
87
94
|
return new CodexAgentRunner();
|
|
88
95
|
if (selected === 'antigravity')
|
|
89
96
|
return new AntigravityAgentRunner();
|
|
97
|
+
if (selected === 'grok')
|
|
98
|
+
return new GrokAgentRunner();
|
|
99
|
+
if (selected === 'qwen')
|
|
100
|
+
return new QwenAgentRunner();
|
|
101
|
+
if (selected === 'crush') {
|
|
102
|
+
// Issue #177: usage-proxy accounting is opt-in via provider.usageProxy +
|
|
103
|
+
// provider.baseUrl (the upstream the crush CLI's own provider config
|
|
104
|
+
// points at). Absent either, CrushAgentRunner falls back to its
|
|
105
|
+
// documented 0-token behavior — this never blocks a turn either way.
|
|
106
|
+
if (provider?.usageProxy && provider.baseUrl) {
|
|
107
|
+
return new CrushAgentRunner({
|
|
108
|
+
usageProxy: { upstreamBaseUrl: provider.baseUrl, baseUrlEnvVar: provider.usageProxyEnvVar },
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
return new CrushAgentRunner();
|
|
112
|
+
}
|
|
113
|
+
if (selected === 'copilot')
|
|
114
|
+
return new CopilotAgentRunner();
|
|
115
|
+
if (selected === 'pi')
|
|
116
|
+
return new PiAgentRunner();
|
|
117
|
+
if (selected === 'pi-rpc')
|
|
118
|
+
return new PiRpcAgentRunner();
|
|
119
|
+
if (selected === 'qwen-rpc')
|
|
120
|
+
return new QwenRpcAgentRunner();
|
|
90
121
|
return undefined;
|
|
91
122
|
}
|
|
92
123
|
/** Per-session variant: a role's own `runtime` field wins over the org-level
|
|
@@ -94,17 +125,46 @@ export function resolveRunner(orgRuntime, providerKind) {
|
|
|
94
125
|
* the default Claude path even when the org/env select another runtime.
|
|
95
126
|
* Roles without a `runtime` inherit the org-level resolution unchanged.
|
|
96
127
|
* If no explicit runtime is set, auto-resolve from the provider kind. */
|
|
97
|
-
export function resolveRoleRunner(roleRuntime, orgRuntime, roleProviderKind, orgProviderKind) {
|
|
128
|
+
export function resolveRoleRunner(roleRuntime, orgRuntime, roleProviderKind, orgProviderKind, roleProvider) {
|
|
98
129
|
const explicit = roleRuntime ?? orgRuntime;
|
|
99
130
|
if (explicit)
|
|
100
|
-
return resolveRunner(explicit);
|
|
101
|
-
return resolveRunner(undefined, roleProviderKind ?? orgProviderKind);
|
|
131
|
+
return resolveRunner(explicit, undefined, roleProvider);
|
|
132
|
+
return resolveRunner(undefined, roleProviderKind ?? orgProviderKind, roleProvider);
|
|
102
133
|
}
|
|
103
134
|
/** Per-role token budget: a role's own `budget_tokens` wins; otherwise the
|
|
104
135
|
* even split of run_config.budget_tokens across all roles. */
|
|
105
136
|
export function roleTokenBudget(role, def) {
|
|
106
137
|
return (role.budget_tokens ?? Math.floor((def.run_config.budget_tokens ?? 1_000_000) / def.roles.length));
|
|
107
138
|
}
|
|
139
|
+
/** Idle watchdog's per-tick recovery check: given the previous nudge timestamp,
|
|
140
|
+
* the cumulative nudge count, and the timestamp of the most recent real tool
|
|
141
|
+
* call, returns the nudge count that should carry forward now that fresh
|
|
142
|
+
* activity means the org is no longer idle.
|
|
143
|
+
*
|
|
144
|
+
* `nudgedAt !== 0` means we're recovering from an outstanding nudge. Resetting
|
|
145
|
+
* the counter here means it only ever tracks UNRESOLVED idle spells in a row,
|
|
146
|
+
* not a lifetime total — a long-running org that goes idle and recovers any
|
|
147
|
+
* number of times (e.g. periodic checkpoints on a slow background task) is
|
|
148
|
+
* never punished for having had several separate, healthy idle spells over
|
|
149
|
+
* its lifetime. Before this existed, `nudges` only ever incremented, so a run
|
|
150
|
+
* that answered every single nudge with real work still hit the "org idle
|
|
151
|
+
* again after 3 nudges" cap and got force-stopped on its 4th idle spell —
|
|
152
|
+
* observed live killing an in-progress 24h soak test under 90 minutes in.
|
|
153
|
+
*
|
|
154
|
+
* But "recovering" must mean genuine forward progress, not just any bus
|
|
155
|
+
* event — a bare, content-free reply to the nudge (a boss that answers with
|
|
156
|
+
* "✓ Complete" and calls no tools at all) still updates lastActivity, so the
|
|
157
|
+
* org isn't flagged as silent, but it accomplishes nothing: nobody outside
|
|
158
|
+
* the boss's own turn ever sees it, since role coordination only happens via
|
|
159
|
+
* tool calls (org_send, org_task, ...). Requiring `lastToolActivity >=
|
|
160
|
+
* nudgedAt` — a real tool call happened AFTER this nudge was sent — closes
|
|
161
|
+
* that gap: observed live, a boss stuck responding to four consecutive
|
|
162
|
+
* 10-minute nudges with one-line acknowledgments and zero tool calls looped
|
|
163
|
+
* indefinitely making no progress, because every trivial reply reset the cap
|
|
164
|
+
* that was supposed to catch exactly this. */
|
|
165
|
+
export function resolvedIdleNudgeCount(nudgedAt, nudges, lastToolActivity) {
|
|
166
|
+
return nudgedAt !== 0 && lastToolActivity >= nudgedAt ? 0 : nudges;
|
|
167
|
+
}
|
|
108
168
|
/** Bounded ring buffer for agent terminal scrollback. */
|
|
109
169
|
export class ScrollbackBuffer {
|
|
110
170
|
maxLines;
|
|
@@ -370,16 +430,36 @@ export class OrgDaemon {
|
|
|
370
430
|
}
|
|
371
431
|
// Validate per-role providers before spawning anything (fail-fast: a
|
|
372
432
|
// missing env var discovered 10 minutes into a run wastes the entire run).
|
|
373
|
-
const { resolveProviderEnv: validateProvider } = await import('./provider.js');
|
|
433
|
+
const { resolveProviderEnv: validateProvider, resolveRoleProvider } = await import('./provider.js');
|
|
374
434
|
for (const role of def.roles) {
|
|
375
|
-
|
|
376
|
-
|
|
435
|
+
try {
|
|
436
|
+
if (role.provider) {
|
|
377
437
|
validateProvider(role.provider);
|
|
378
438
|
}
|
|
379
|
-
|
|
380
|
-
|
|
439
|
+
else if (role.adapter_config?.provider) {
|
|
440
|
+
// Named provider (`monomind providers configure`): resolve now so a
|
|
441
|
+
// missing/misconfigured entry fails the run at start, not mid-flight.
|
|
442
|
+
resolveRoleProvider(role, this.root);
|
|
381
443
|
}
|
|
382
444
|
}
|
|
445
|
+
catch (err) {
|
|
446
|
+
throw new Error(`org ${name}: role "${role.id}" provider validation failed — ${err instanceof Error ? err.message : err}`);
|
|
447
|
+
}
|
|
448
|
+
// provider.kind 'gemini'/'openai' only sets env vars (GEMINI_API_KEY /
|
|
449
|
+
// OPENAI_API_KEY — see provider.ts) for a CLI that never reads them:
|
|
450
|
+
// autoRuntimeFromProvider has no case for either kind, so
|
|
451
|
+
// resolveRoleRunner falls through to `undefined` and session.ts spawns
|
|
452
|
+
// the default ClaudeAgentRunner. The role silently runs on Claude while
|
|
453
|
+
// its config claims gemini/openai — surface that loudly at start time
|
|
454
|
+
// instead of leaving it to be discovered mid-run.
|
|
455
|
+
const kind = role.provider?.kind;
|
|
456
|
+
if ((kind === 'gemini' || kind === 'openai') &&
|
|
457
|
+
!resolveRoleRunner(role.runtime, def.runtime, kind, undefined, role.provider)) {
|
|
458
|
+
console.error(`org ${name}: role "${role.id}" sets provider.kind="${kind}" but no runtime honors it — ` +
|
|
459
|
+
`this role will actually run on the Claude Agent SDK, not ${kind}. ` +
|
|
460
|
+
`Set role.runtime (or the org's runtime) explicitly, or use provider.kind="vercel-api-key" ` +
|
|
461
|
+
`with vendor="${kind === 'gemini' ? 'google' : 'openai'}" to route through a real ${kind} model.`);
|
|
462
|
+
}
|
|
383
463
|
}
|
|
384
464
|
const bus = new OrgBus(name, run, dir);
|
|
385
465
|
// Lightweight in-memory tail for busEvents() (test-loop, /api/history).
|
|
@@ -388,6 +468,16 @@ export class OrgDaemon {
|
|
|
388
468
|
const MAX_COLLECTED = 1000;
|
|
389
469
|
const collected = [];
|
|
390
470
|
let lastActivity = Date.now();
|
|
471
|
+
// Separate from lastActivity: only real tool calls (org_send, org_task,
|
|
472
|
+
// Bash, ...) count here, not status pings or chat-only turns. The idle
|
|
473
|
+
// watchdog's nudge-recovery check (resolvedIdleNudgeCount) uses this to
|
|
474
|
+
// tell genuine forward progress apart from a boss that "answers" a nudge
|
|
475
|
+
// with a bare acknowledgment ("✓ Complete") and does nothing — a
|
|
476
|
+
// content-free reply still updates lastActivity (so the org isn't
|
|
477
|
+
// flagged as silent), but must not reset the cumulative nudge cap, or a
|
|
478
|
+
// boss that's genuinely out of ideas can loop forever making zero
|
|
479
|
+
// progress without ever tripping the watchdog.
|
|
480
|
+
let lastToolActivity = 0;
|
|
391
481
|
bus.subscribe((e) => {
|
|
392
482
|
const slim = e.data?.content != null ? { ...e, data: { ...e.data, content: undefined } } : e;
|
|
393
483
|
collected.push(slim);
|
|
@@ -397,6 +487,8 @@ export class OrgDaemon {
|
|
|
397
487
|
// hung boss would never trip the "nudge produced no activity" stop.
|
|
398
488
|
if (e.reason !== 'idle-nudge')
|
|
399
489
|
lastActivity = Date.now();
|
|
490
|
+
if (e.type === 'tool')
|
|
491
|
+
lastToolActivity = Date.now();
|
|
400
492
|
// org_complete IS the end of the run — self-stop instead of sitting
|
|
401
493
|
// "running" forever after a recorded outcome. Deferred (unref'd) so the
|
|
402
494
|
// tool call's receipt reaches the boss and its final turn text still
|
|
@@ -404,7 +496,11 @@ export class OrgDaemon {
|
|
|
404
496
|
// against a concurrent manual stop.
|
|
405
497
|
if (e.type === 'status' && e.reason === 'org-complete') {
|
|
406
498
|
const t = setTimeout(() => {
|
|
407
|
-
|
|
499
|
+
// #206: closedBy: 'org-complete' is the ONLY signal `org run`
|
|
500
|
+
// trusts to mean "the run ended cleanly, exit 0" — every other
|
|
501
|
+
// stop path (idle watchdog, boss-restart-exhausted, manual stop)
|
|
502
|
+
// leaves it unset.
|
|
503
|
+
this.stopOrg(name, { drainMs: COMPLETE_DRAIN_MS, closedBy: 'org-complete' }).catch((err) => console.error(`org ${name}: auto-stop after org_complete failed:`, err instanceof Error ? err.message : err));
|
|
408
504
|
}, 1000);
|
|
409
505
|
t.unref?.();
|
|
410
506
|
}
|
|
@@ -543,13 +639,22 @@ export class OrgDaemon {
|
|
|
543
639
|
if (roleCheckpoint?.mailboxQueue?.length) {
|
|
544
640
|
restoreMailboxQueue({ mailbox }, roleCheckpoint.mailboxQueue);
|
|
545
641
|
}
|
|
546
|
-
|
|
547
|
-
|
|
642
|
+
// A recoverable close (budget exhaustion) is left open on resume — see
|
|
643
|
+
// isRecoverableCloseReason's doc comment. Re-closing it here would
|
|
644
|
+
// make the idle watchdog's "raise the budget and resume" remedy a
|
|
645
|
+
// no-op, since nothing in this codebase ever reopens a closed mailbox.
|
|
646
|
+
if (roleCheckpoint?.mailboxClosed && !isRecoverableCloseReason(roleCheckpoint.mailboxCloseReason)) {
|
|
647
|
+
mailbox.close(roleCheckpoint.mailboxCloseReason);
|
|
548
648
|
}
|
|
549
|
-
const policy = new PolicyEngine(role.id, { maxTokens: role.budget_tokens ?? perRoleBudget, ...(role.policy ?? {}) }, bus, roleCwd);
|
|
649
|
+
const policy = new PolicyEngine(role.id, { maxTokens: role.budget_tokens ?? perRoleBudget, maxUsd: role.budget_usd, ...(role.policy ?? {}) }, bus, roleCwd);
|
|
550
650
|
if (roleCheckpoint?.tokensUsed) {
|
|
551
651
|
policy.setUsage(roleCheckpoint.tokensUsed);
|
|
552
652
|
}
|
|
653
|
+
// ORG-7: restore accumulated USD spend across resume so a stop/resume
|
|
654
|
+
// cycle can't reset a role's USD budget back to zero.
|
|
655
|
+
if (roleCheckpoint?.costUsd) {
|
|
656
|
+
policy.setUsageUsd(roleCheckpoint.costUsd);
|
|
657
|
+
}
|
|
553
658
|
const runtime = {
|
|
554
659
|
mailbox,
|
|
555
660
|
policy,
|
|
@@ -578,6 +683,9 @@ export class OrgDaemon {
|
|
|
578
683
|
// (VercelAgentRunner session files) write under .monomind/orgs/<name>
|
|
579
684
|
// instead of polluting the workspace cwd.
|
|
580
685
|
orgDir: join(this.root, ORG_DIR, name),
|
|
686
|
+
// Project root for named-provider (`adapter_config.provider`) config
|
|
687
|
+
// lookup — role cwd may be an isolated workspace with no config file.
|
|
688
|
+
orgRoot: this.root,
|
|
581
689
|
maxTurns: role.max_turns_per_message ?? def.run_config.max_turns_per_message,
|
|
582
690
|
resumeSessionId: roleCheckpoint?.sessionId,
|
|
583
691
|
lastMessageId: () => runtime.lastMessageId,
|
|
@@ -594,6 +702,20 @@ export class OrgDaemon {
|
|
|
594
702
|
})(),
|
|
595
703
|
beforeTool: (r, toolName) => this.checkApproval(name, r, toolName),
|
|
596
704
|
fence: roleFences.get(role.id),
|
|
705
|
+
// ORG-1: gatedCanUseTool denials are a natural decision point — record them so
|
|
706
|
+
// `org decisions` shows real traces instead of always reporting none.
|
|
707
|
+
onDecision: (r, toolName, message) => {
|
|
708
|
+
this.recordDecision(name, r, {
|
|
709
|
+
type: 'tool',
|
|
710
|
+
context: `tool call: ${toolName}`,
|
|
711
|
+
reasoning: message,
|
|
712
|
+
outcome: 'denied',
|
|
713
|
+
});
|
|
714
|
+
},
|
|
715
|
+
// ORG-9: decision gates are documented as "hard-blocking" — make that
|
|
716
|
+
// true by actually denying tool use while this role has a pending gate,
|
|
717
|
+
// the same way pending approvals already do.
|
|
718
|
+
hasPendingGate: () => this.listGates(name, 'pending').some(g => g.roleId === role.id),
|
|
597
719
|
onComplete: role.id === bossRole.id
|
|
598
720
|
? (r, outcome, summary) => {
|
|
599
721
|
bus.emit({
|
|
@@ -678,6 +800,9 @@ export class OrgDaemon {
|
|
|
678
800
|
cancelTask: (r, taskId, reason) => {
|
|
679
801
|
return this.dagCancelTask(name, r, taskId, reason);
|
|
680
802
|
},
|
|
803
|
+
blockTask: (r, taskId, untilIso, reason) => {
|
|
804
|
+
return this.dagBlockTask(name, r, taskId, untilIso, reason);
|
|
805
|
+
},
|
|
681
806
|
planGraph: (r, specs) => {
|
|
682
807
|
return this.dagPlanGraph(name, r, specs);
|
|
683
808
|
},
|
|
@@ -689,7 +814,7 @@ export class OrgDaemon {
|
|
|
689
814
|
// Claude/Antigravity orgs byte-for-byte unchanged. Session opts are
|
|
690
815
|
// built per role here in spawnRole, so each role gets its own runner.
|
|
691
816
|
runner: this.opts.runner ??
|
|
692
|
-
resolveRoleRunner(role.runtime, def.runtime, role.provider?.kind, undefined),
|
|
817
|
+
resolveRoleRunner(role.runtime, def.runtime, role.provider?.kind, undefined, role.provider),
|
|
693
818
|
};
|
|
694
819
|
// Supervised session: transient crashes (provider blips, network) restart
|
|
695
820
|
// with backoff; a crash with the mailbox already closed, or one that
|
|
@@ -712,6 +837,12 @@ export class OrgDaemon {
|
|
|
712
837
|
// during the backoff window must queue for the NEXT session, not
|
|
713
838
|
// wake the dead generator to swallow it.
|
|
714
839
|
mailbox.detach();
|
|
840
|
+
// #203: if the crashed session's mailbox generator was abandoned
|
|
841
|
+
// mid-yield (message already shift()ed for it, turn never
|
|
842
|
+
// finished), put that message back on the queue — otherwise the
|
|
843
|
+
// replacement session's stream() finds an empty queue and parks
|
|
844
|
+
// forever, since the "delivered" message is gone for good.
|
|
845
|
+
mailbox.reclaimInFlight();
|
|
715
846
|
const message = err instanceof Error ? err.message : String(err);
|
|
716
847
|
const isTurnLimit = /Reached maximum number of turns|error_max_turns/i.test(message);
|
|
717
848
|
// Bounded like every other recovery: attempt counts every pass
|
|
@@ -948,8 +1079,9 @@ export class OrgDaemon {
|
|
|
948
1079
|
// org_complete) produces no bus events, and every agent just waits. After
|
|
949
1080
|
// idle_minutes of silence, nudge the boss to complete or reassign; if the
|
|
950
1081
|
// nudge itself produces no activity (boss hung/crashed), or the org keeps
|
|
951
|
-
// going idle after MAX_IDLE_NUDGES nudges
|
|
952
|
-
//
|
|
1082
|
+
// going idle after MAX_IDLE_NUDGES nudges in a row without ever recovering
|
|
1083
|
+
// (see resolvedIdleNudgeCount), stop the run instead of letting it freeze
|
|
1084
|
+
// forever. idle_minutes: 0 disables.
|
|
953
1085
|
const idleMs = (def.run_config.idle_minutes ?? 10) * 60_000;
|
|
954
1086
|
if (idleMs > 0) {
|
|
955
1087
|
const MAX_IDLE_NUDGES = 3;
|
|
@@ -966,8 +1098,31 @@ export class OrgDaemon {
|
|
|
966
1098
|
const pendingGates = this.readGates(name).gates.filter((g) => g.status === 'pending');
|
|
967
1099
|
if (pendingGates.length > 0)
|
|
968
1100
|
return;
|
|
1101
|
+
// Auto-resume any task whose org_task_block time has passed: flip it
|
|
1102
|
+
// back to 'running' and re-push it into the assignee's mailbox, same
|
|
1103
|
+
// as a fresh dispatch. This IS real activity, so fall through to the
|
|
1104
|
+
// normal idleFor check below rather than returning early — an
|
|
1105
|
+
// unblocked task should reset the idle clock, not just silently
|
|
1106
|
+
// update state nobody notices until the next nudge.
|
|
1107
|
+
const unblocked = running.taskDag?.unblockExpired(Date.now()) ?? [];
|
|
1108
|
+
for (const task of unblocked) {
|
|
1109
|
+
const agent = running.agents.get(task.assignee);
|
|
1110
|
+
if (agent && !agent.mailbox.isClosed) {
|
|
1111
|
+
agent.mailbox.push(`[task:${task.id}] Block expired — resuming: ${task.title}`);
|
|
1112
|
+
}
|
|
1113
|
+
bus.emit({
|
|
1114
|
+
type: 'status', from: 'dag', reason: 'task-unblocked',
|
|
1115
|
+
msg: `task ${task.id} block expired — resumed and re-dispatched to ${task.assignee}`,
|
|
1116
|
+
data: { taskId: task.id, assignee: task.assignee },
|
|
1117
|
+
});
|
|
1118
|
+
}
|
|
1119
|
+
// A task blocked on a real-world time still in the future is
|
|
1120
|
+
// legitimate waiting, same as a pending gate — don't nudge about it.
|
|
1121
|
+
if (running.taskDag?.hasActiveBlock(Date.now()))
|
|
1122
|
+
return;
|
|
969
1123
|
const idleFor = Date.now() - lastActivity;
|
|
970
1124
|
if (idleFor < idleMs) {
|
|
1125
|
+
nudges = resolvedIdleNudgeCount(nudgedAt, nudges, lastToolActivity);
|
|
971
1126
|
nudgedAt = 0;
|
|
972
1127
|
return;
|
|
973
1128
|
}
|
|
@@ -977,6 +1132,18 @@ export class OrgDaemon {
|
|
|
977
1132
|
return;
|
|
978
1133
|
}
|
|
979
1134
|
const bossRt = running.agents.get(bossRole.id);
|
|
1135
|
+
// #205: a budget-exhausted boss closed its own mailbox on
|
|
1136
|
+
// purpose (session.ts) — that's a recoverable pause, not the
|
|
1137
|
+
// same "unreachable" condition as a crash. Name it distinctly so
|
|
1138
|
+
// the operator's remedy (raise the budget, resume) is obvious
|
|
1139
|
+
// instead of reading like the run died.
|
|
1140
|
+
const budgetReason = bossRt?.mailbox.closeReason;
|
|
1141
|
+
if (budgetReason === 'token-budget' || budgetReason === 'usd-budget') {
|
|
1142
|
+
idleStop(`org idle for ${Math.round(idleFor / 60_000)}m and boss "${bossRole.id}" is over its ` +
|
|
1143
|
+
`${budgetReason === 'token-budget' ? 'token' : 'USD'} budget — raise the role's ` +
|
|
1144
|
+
`${budgetReason === 'token-budget' ? 'budget_tokens' : 'budget_usd'} (or run_config's) and resume from checkpoint — stopping run`);
|
|
1145
|
+
return;
|
|
1146
|
+
}
|
|
980
1147
|
if (!bossRt || bossRt.status !== 'running' || bossRt.mailbox.isClosed) {
|
|
981
1148
|
idleStop(`org idle for ${Math.round(idleFor / 60_000)}m and boss "${bossRole.id}" is unreachable — stopping run`);
|
|
982
1149
|
return;
|
|
@@ -992,7 +1159,8 @@ export class OrgDaemon {
|
|
|
992
1159
|
bossRt.mailbox.push(`[watchdog] No activity in org "${name}" for ${Math.round(idleFor / 60_000)} minute(s). ` +
|
|
993
1160
|
`Check org_tasks first, then pick ONE: (1) the org's full stated goal is achieved or clearly cannot be — call org_complete now (this ends the run for good, not just this batch); ` +
|
|
994
1161
|
`(2) someone has stalled or unstarted work — check on your team via org_send and reassign it; ` +
|
|
995
|
-
`(3) the current task batch is done but the goal has more scope left — do NOT call org_complete for this case, instead dispatch the next batch of work with org_task/createTask so the org keeps making progress
|
|
1162
|
+
`(3) the current task batch is done but the goal has more scope left — do NOT call org_complete for this case, instead dispatch the next batch of work with org_task/createTask so the org keeps making progress; ` +
|
|
1163
|
+
`(4) a task is stuck 'running' only because it's genuinely waiting on a real-world time (a scheduled process, a deadline) and there is nothing else to dispatch right now — do NOT just leave it and re-confirm this every time you get nudged, call org_task_block(taskId, untilIso, reason) instead so this watchdog stops nudging you about it and auto-resumes the task when the time arrives.`);
|
|
996
1164
|
}
|
|
997
1165
|
else if (Date.now() - nudgedAt >= idleMs) {
|
|
998
1166
|
idleStop(`nudge produced no activity for another ${Math.round(idleMs / 60_000)}m — boss appears hung, stopping run`);
|
|
@@ -1043,7 +1211,12 @@ export class OrgDaemon {
|
|
|
1043
1211
|
}
|
|
1044
1212
|
/** @param opts.drainMs how long to let in-flight agent sessions finish before
|
|
1045
1213
|
* reaping. Defaults to the short abort bound; the planned-completion path
|
|
1046
|
-
* passes a far longer window (see COMPLETE_DRAIN_MS).
|
|
1214
|
+
* passes a far longer window (see COMPLETE_DRAIN_MS).
|
|
1215
|
+
* @param opts.closedBy #206: tags WHY the run ended, persisted into
|
|
1216
|
+
* runtime.json so `org run` can tell a clean, goal-driven end
|
|
1217
|
+
* (closedBy: 'org-complete') from every other kind of stop (idle
|
|
1218
|
+
* watchdog, boss-restart-exhausted, manual `org stop`) and exit non-zero
|
|
1219
|
+
* for the latter. Only the org_complete auto-stop path passes this. */
|
|
1047
1220
|
async stopOrg(name, opts) {
|
|
1048
1221
|
// Join an in-flight stop instead of no-oping: the self-stop paths
|
|
1049
1222
|
// (org_complete, idle watchdog) run detached, and a caller like
|
|
@@ -1063,7 +1236,7 @@ export class OrgDaemon {
|
|
|
1063
1236
|
// shutdown via `stopping` instead of re-running the whole sequence and
|
|
1064
1237
|
// double-emitting 'org stopped' (duplicate org:complete/session:complete).
|
|
1065
1238
|
this.orgs.delete(name);
|
|
1066
|
-
const p = this.finishStop(name, org, opts?.drainMs);
|
|
1239
|
+
const p = this.finishStop(name, org, opts?.drainMs, opts?.closedBy);
|
|
1067
1240
|
this.stopping.set(name, p);
|
|
1068
1241
|
try {
|
|
1069
1242
|
await p;
|
|
@@ -1072,7 +1245,7 @@ export class OrgDaemon {
|
|
|
1072
1245
|
this.stopping.delete(name);
|
|
1073
1246
|
}
|
|
1074
1247
|
}
|
|
1075
|
-
async finishStop(name, org, drainMs) {
|
|
1248
|
+
async finishStop(name, org, drainMs, closedBy) {
|
|
1076
1249
|
// Snapshot checkpoint BEFORE closing mailboxes / draining sessions — the
|
|
1077
1250
|
// queue is emptied during the drain, so capturing afterwards loses all
|
|
1078
1251
|
// unconsumed messages (the whole point of checkpoint-resume).
|
|
@@ -1190,7 +1363,7 @@ export class OrgDaemon {
|
|
|
1190
1363
|
// 'running' record must not be overwritten with this old run's 'stopped'.
|
|
1191
1364
|
// Pass the org directly since we already removed it from the map.
|
|
1192
1365
|
if (!this.orgs.has(name))
|
|
1193
|
-
this.persistState(name, 'stopped', org.run, org, stopCheckpoint);
|
|
1366
|
+
this.persistState(name, 'stopped', org.run, org, stopCheckpoint, closedBy);
|
|
1194
1367
|
// Clean up git worktrees — shared (workspace: 'worktree') and per-role.
|
|
1195
1368
|
try {
|
|
1196
1369
|
const { execFileSync } = await import('node:child_process');
|
|
@@ -1231,8 +1404,13 @@ export class OrgDaemon {
|
|
|
1231
1404
|
...this.stopping.values(), // detached self-stops still flushing
|
|
1232
1405
|
]);
|
|
1233
1406
|
}
|
|
1234
|
-
/** @internal
|
|
1235
|
-
|
|
1407
|
+
/** @internal
|
|
1408
|
+
* @param closedBy #206: why the run ended — 'org-complete' for a clean,
|
|
1409
|
+
* goal-driven end (the only value any caller currently passes); absent for
|
|
1410
|
+
* every other stop (idle watchdog, boss-restart-exhausted, manual `org
|
|
1411
|
+
* stop`). Mirrors persistCrashStateAll()'s existing closedBy: 'crash-handler'
|
|
1412
|
+
* for the process-crash path, which org.ts already reads. */
|
|
1413
|
+
persistState(name, status, run, org, checkpointOverride, closedBy) {
|
|
1236
1414
|
const p = join(this.root, ORG_DIR, name, 'runtime.json');
|
|
1237
1415
|
const missing = [...(this.abandoned.get(name) ?? [])];
|
|
1238
1416
|
const running = org ?? this.orgs.get(name);
|
|
@@ -1263,11 +1441,15 @@ export class OrgDaemon {
|
|
|
1263
1441
|
updated: new Date().toISOString(),
|
|
1264
1442
|
...(missing.length ? { abandonedRoles: missing } : {}),
|
|
1265
1443
|
...(checkpoint ? { checkpoint } : {}),
|
|
1444
|
+
...(closedBy ? { closedBy } : {}),
|
|
1266
1445
|
});
|
|
1267
1446
|
}
|
|
1268
1447
|
/** Mark every currently-running org as crashed in runtime.json.
|
|
1269
|
-
* Called from process-level crash handlers — must be synchronous and best-effort.
|
|
1270
|
-
|
|
1448
|
+
* Called from process-level crash handlers — must be synchronous and best-effort.
|
|
1449
|
+
* @param error the uncaught error/rejection reason, if known — without
|
|
1450
|
+
* this, `runOutcomeResult` (org.ts)'s "crashed: <error>" message always
|
|
1451
|
+
* read "crashed: unknown error" regardless of what actually happened. */
|
|
1452
|
+
persistCrashStateAll(error) {
|
|
1271
1453
|
for (const [name, org] of this.orgs) {
|
|
1272
1454
|
try {
|
|
1273
1455
|
const p = join(this.root, ORG_DIR, name, 'runtime.json');
|
|
@@ -1279,6 +1461,7 @@ export class OrgDaemon {
|
|
|
1279
1461
|
pid: process.pid,
|
|
1280
1462
|
updated: new Date().toISOString(),
|
|
1281
1463
|
closedBy: 'crash-handler',
|
|
1464
|
+
...(error ? { error } : {}),
|
|
1282
1465
|
});
|
|
1283
1466
|
}
|
|
1284
1467
|
catch {
|
|
@@ -1358,6 +1541,9 @@ export class OrgDaemon {
|
|
|
1358
1541
|
dagCancelTask(org, role, taskId, reason) {
|
|
1359
1542
|
return decisionOps.dagCancelTask(this, org, role, taskId, reason);
|
|
1360
1543
|
}
|
|
1544
|
+
dagBlockTask(org, role, taskId, untilIso, reason) {
|
|
1545
|
+
return decisionOps.dagBlockTask(this, org, role, taskId, untilIso, reason);
|
|
1546
|
+
}
|
|
1361
1547
|
dagPlanGraph(org, role, specs) {
|
|
1362
1548
|
return decisionOps.dagPlanGraph(this, org, role, specs);
|
|
1363
1549
|
}
|
|
@@ -1418,8 +1604,5 @@ export class OrgDaemon {
|
|
|
1418
1604
|
async resumeOrg(name) {
|
|
1419
1605
|
return checkpointOps.resumeOrg(this, name);
|
|
1420
1606
|
}
|
|
1421
|
-
branchCheckpoint(name, run, branchName) {
|
|
1422
|
-
return checkpointOps.branchCheckpoint(this, name, run, branchName);
|
|
1423
|
-
}
|
|
1424
1607
|
}
|
|
1425
1608
|
//# sourceMappingURL=daemon.js.map
|