@monoes/monomindcli 2.16.12 → 2.16.14
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/core/coder.md +1 -1
- package/.claude/agents/engineering/engineering-devops-automator.md +1 -1
- package/.claude/agents/github/repo-architect.md +1 -1
- package/.claude/agents/testing/production-validator.md +1 -1
- package/.claude/agents/testing/testing-tool-evaluator.md +1 -1
- package/.claude/commands/github/pr-manager.md +1 -1
- package/.claude/helpers/pick-rank.cjs +34 -4
- package/.claude/skills/monolean-audit/SKILL.md +1 -1
- package/README.md +1 -1
- package/dist/src/commands/cleanup-data.d.ts +30 -0
- package/dist/src/commands/cleanup-data.d.ts.map +1 -0
- package/dist/src/commands/cleanup-data.js +138 -0
- package/dist/src/commands/cleanup-data.js.map +1 -0
- package/dist/src/commands/cleanup-scratch.d.ts +43 -0
- package/dist/src/commands/cleanup-scratch.d.ts.map +1 -0
- package/dist/src/commands/cleanup-scratch.js +125 -0
- package/dist/src/commands/cleanup-scratch.js.map +1 -0
- package/dist/src/commands/cleanup.d.ts +2 -39
- package/dist/src/commands/cleanup.d.ts.map +1 -1
- package/dist/src/commands/cleanup.js +5 -247
- package/dist/src/commands/cleanup.js.map +1 -1
- package/dist/src/commands/doctor-gitignore-checks.d.ts +10 -0
- package/dist/src/commands/doctor-gitignore-checks.d.ts.map +1 -0
- package/dist/src/commands/doctor-gitignore-checks.js +141 -0
- package/dist/src/commands/doctor-gitignore-checks.js.map +1 -0
- package/dist/src/commands/doctor-helpers-checks.d.ts +10 -0
- package/dist/src/commands/doctor-helpers-checks.d.ts.map +1 -0
- package/dist/src/commands/doctor-helpers-checks.js +292 -0
- package/dist/src/commands/doctor-helpers-checks.js.map +1 -0
- package/dist/src/commands/doctor-memory-checks.d.ts +47 -0
- package/dist/src/commands/doctor-memory-checks.d.ts.map +1 -0
- package/dist/src/commands/doctor-memory-checks.js +298 -0
- package/dist/src/commands/doctor-memory-checks.js.map +1 -0
- package/dist/src/commands/doctor-monograph-checks.d.ts +9 -0
- package/dist/src/commands/doctor-monograph-checks.d.ts.map +1 -0
- package/dist/src/commands/doctor-monograph-checks.js +331 -0
- package/dist/src/commands/doctor-monograph-checks.js.map +1 -0
- package/dist/src/commands/doctor-project-checks.d.ts +7 -66
- package/dist/src/commands/doctor-project-checks.d.ts.map +1 -1
- package/dist/src/commands/doctor-project-checks.js +10 -1331
- package/dist/src/commands/doctor-project-checks.js.map +1 -1
- package/dist/src/commands/doctor-routing-checks.d.ts +10 -0
- package/dist/src/commands/doctor-routing-checks.d.ts.map +1 -0
- package/dist/src/commands/doctor-routing-checks.js +194 -0
- package/dist/src/commands/doctor-routing-checks.js.map +1 -0
- package/dist/src/commands/doctor-worker-checks.d.ts +17 -0
- package/dist/src/commands/doctor-worker-checks.d.ts.map +1 -0
- package/dist/src/commands/doctor-worker-checks.js +122 -0
- package/dist/src/commands/doctor-worker-checks.js.map +1 -0
- package/dist/src/commands/hooks-routing-commands.js +1 -1
- package/dist/src/commands/hooks-routing-commands.js.map +1 -1
- package/dist/src/commands/init.d.ts.map +1 -1
- package/dist/src/commands/init.js +6 -15
- package/dist/src/commands/init.js.map +1 -1
- package/dist/src/commands/org-control.d.ts +117 -0
- package/dist/src/commands/org-control.d.ts.map +1 -0
- package/dist/src/commands/org-control.js +274 -0
- package/dist/src/commands/org-control.js.map +1 -0
- package/dist/src/commands/org-lifecycle.d.ts +7 -0
- package/dist/src/commands/org-lifecycle.d.ts.map +1 -0
- package/dist/src/commands/org-lifecycle.js +298 -0
- package/dist/src/commands/org-lifecycle.js.map +1 -0
- package/dist/src/commands/org-manage.d.ts +7 -0
- package/dist/src/commands/org-manage.d.ts.map +1 -0
- package/dist/src/commands/org-manage.js +357 -0
- package/dist/src/commands/org-manage.js.map +1 -0
- package/dist/src/commands/org-memory-command.d.ts +3 -0
- package/dist/src/commands/org-memory-command.d.ts.map +1 -0
- package/dist/src/commands/org-memory-command.js +178 -0
- package/dist/src/commands/org-memory-command.js.map +1 -0
- package/dist/src/commands/org-observe-approvals.d.ts +8 -0
- package/dist/src/commands/org-observe-approvals.d.ts.map +1 -0
- package/dist/src/commands/org-observe-approvals.js +211 -0
- package/dist/src/commands/org-observe-approvals.js.map +1 -0
- package/dist/src/commands/org-observe-checkpoint.d.ts +26 -0
- package/dist/src/commands/org-observe-checkpoint.d.ts.map +1 -0
- package/dist/src/commands/org-observe-checkpoint.js +180 -0
- package/dist/src/commands/org-observe-checkpoint.js.map +1 -0
- package/dist/src/commands/org-observe-config.d.ts +8 -0
- package/dist/src/commands/org-observe-config.d.ts.map +1 -0
- package/dist/src/commands/org-observe-config.js +160 -0
- package/dist/src/commands/org-observe-config.js.map +1 -0
- package/dist/src/commands/org-observe-gates.d.ts +4 -0
- package/dist/src/commands/org-observe-gates.d.ts.map +1 -0
- package/dist/src/commands/org-observe-gates.js +182 -0
- package/dist/src/commands/org-observe-gates.js.map +1 -0
- package/dist/src/commands/org-observe-inbox.d.ts +18 -0
- package/dist/src/commands/org-observe-inbox.d.ts.map +1 -0
- package/dist/src/commands/org-observe-inbox.js +154 -0
- package/dist/src/commands/org-observe-inbox.js.map +1 -0
- package/dist/src/commands/org-observe-logs.d.ts +31 -0
- package/dist/src/commands/org-observe-logs.d.ts.map +1 -0
- package/dist/src/commands/org-observe-logs.js +272 -0
- package/dist/src/commands/org-observe-logs.js.map +1 -0
- package/dist/src/commands/org-observe-questions.d.ts +8 -0
- package/dist/src/commands/org-observe-questions.d.ts.map +1 -0
- package/dist/src/commands/org-observe-questions.js +201 -0
- package/dist/src/commands/org-observe-questions.js.map +1 -0
- package/dist/src/commands/org-observe-report.d.ts +8 -0
- package/dist/src/commands/org-observe-report.d.ts.map +1 -0
- package/dist/src/commands/org-observe-report.js +366 -0
- package/dist/src/commands/org-observe-report.js.map +1 -0
- package/dist/src/commands/org-observe-shared.d.ts +20 -0
- package/dist/src/commands/org-observe-shared.d.ts.map +1 -0
- package/dist/src/commands/org-observe-shared.js +55 -0
- package/dist/src/commands/org-observe-shared.js.map +1 -0
- package/dist/src/commands/org-observe.d.ts +9 -101
- package/dist/src/commands/org-observe.d.ts.map +1 -1
- package/dist/src/commands/org-observe.js +12 -1675
- package/dist/src/commands/org-observe.js.map +1 -1
- package/dist/src/commands/org-poll.d.ts +57 -0
- package/dist/src/commands/org-poll.d.ts.map +1 -0
- package/dist/src/commands/org-poll.js +194 -0
- package/dist/src/commands/org-poll.js.map +1 -0
- package/dist/src/commands/org-run.d.ts +3 -0
- package/dist/src/commands/org-run.d.ts.map +1 -0
- package/dist/src/commands/org-run.js +449 -0
- package/dist/src/commands/org-run.js.map +1 -0
- package/dist/src/commands/org-serve.d.ts +19 -0
- package/dist/src/commands/org-serve.d.ts.map +1 -0
- package/dist/src/commands/org-serve.js +395 -0
- package/dist/src/commands/org-serve.js.map +1 -0
- package/dist/src/commands/org-subcommands-config.d.ts +8 -0
- package/dist/src/commands/org-subcommands-config.d.ts.map +1 -0
- package/dist/src/commands/org-subcommands-config.js +93 -0
- package/dist/src/commands/org-subcommands-config.js.map +1 -0
- package/dist/src/commands/org-subcommands-hil.d.ts +11 -0
- package/dist/src/commands/org-subcommands-hil.d.ts.map +1 -0
- package/dist/src/commands/org-subcommands-hil.js +216 -0
- package/dist/src/commands/org-subcommands-hil.js.map +1 -0
- package/dist/src/commands/org-subcommands-observe.d.ts +12 -0
- package/dist/src/commands/org-subcommands-observe.d.ts.map +1 -0
- package/dist/src/commands/org-subcommands-observe.js +249 -0
- package/dist/src/commands/org-subcommands-observe.js.map +1 -0
- package/dist/src/commands/org-subcommands-runtime.d.ts +12 -0
- package/dist/src/commands/org-subcommands-runtime.d.ts.map +1 -0
- package/dist/src/commands/org-subcommands-runtime.js +163 -0
- package/dist/src/commands/org-subcommands-runtime.js.map +1 -0
- package/dist/src/commands/org.d.ts +3 -151
- package/dist/src/commands/org.d.ts.map +1 -1
- package/dist/src/commands/org.js +43 -2735
- package/dist/src/commands/org.js.map +1 -1
- package/dist/src/index.js +2 -2
- package/dist/src/index.js.map +1 -1
- package/dist/src/init/never-commit.d.ts +3 -3
- package/dist/src/init/types.d.ts +1 -1
- package/dist/src/init/types.js +1 -1
- package/dist/src/knowledge/document-store.js +1 -1
- package/dist/src/knowledge/document-store.js.map +1 -1
- package/dist/src/mcp-tools/hooks-edit-command.d.ts +10 -0
- package/dist/src/mcp-tools/hooks-edit-command.d.ts.map +1 -0
- package/dist/src/mcp-tools/hooks-edit-command.js +247 -0
- package/dist/src/mcp-tools/hooks-edit-command.js.map +1 -0
- package/dist/src/mcp-tools/hooks-learning.d.ts +9 -0
- package/dist/src/mcp-tools/hooks-learning.d.ts.map +1 -0
- package/dist/src/mcp-tools/hooks-learning.js +408 -0
- package/dist/src/mcp-tools/hooks-learning.js.map +1 -0
- package/dist/src/mcp-tools/hooks-metrics-list.d.ts +8 -0
- package/dist/src/mcp-tools/hooks-metrics-list.d.ts.map +1 -0
- package/dist/src/mcp-tools/hooks-metrics-list.js +205 -0
- package/dist/src/mcp-tools/hooks-metrics-list.js.map +1 -0
- package/dist/src/mcp-tools/hooks-route.d.ts +12 -0
- package/dist/src/mcp-tools/hooks-route.d.ts.map +1 -0
- package/dist/src/mcp-tools/hooks-route.js +251 -0
- package/dist/src/mcp-tools/hooks-route.js.map +1 -0
- package/dist/src/mcp-tools/hooks-routing.d.ts +6 -27
- package/dist/src/mcp-tools/hooks-routing.d.ts.map +1 -1
- package/dist/src/mcp-tools/hooks-routing.js +6 -1727
- package/dist/src/mcp-tools/hooks-routing.js.map +1 -1
- package/dist/src/mcp-tools/hooks-session.d.ts +9 -0
- package/dist/src/mcp-tools/hooks-session.d.ts.map +1 -0
- package/dist/src/mcp-tools/hooks-session.js +243 -0
- package/dist/src/mcp-tools/hooks-session.js.map +1 -0
- package/dist/src/mcp-tools/hooks-task.d.ts +17 -0
- package/dist/src/mcp-tools/hooks-task.d.ts.map +1 -0
- package/dist/src/mcp-tools/hooks-task.js +427 -0
- package/dist/src/mcp-tools/hooks-task.js.map +1 -0
- package/dist/src/mcp-tools/hooks-tools.d.ts +2 -1
- package/dist/src/mcp-tools/hooks-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/hooks-tools.js +2 -1
- package/dist/src/mcp-tools/hooks-tools.js.map +1 -1
- package/dist/src/mcp-tools/memory-tools.js +1 -1
- package/dist/src/mcp-tools/memory-tools.js.map +1 -1
- package/dist/src/memory/bm25-index.d.ts +2 -2
- package/dist/src/memory/bm25-index.js +2 -2
- package/dist/src/memory/embedding-operations.js +2 -2
- package/dist/src/memory/embedding-operations.js.map +1 -1
- package/dist/src/memory/entity-name-key.d.ts +1 -1
- package/dist/src/memory/entity-name-key.js +1 -1
- package/dist/src/memory/hnsw-operations.d.ts +1 -1
- package/dist/src/memory/hnsw-operations.js +1 -1
- package/dist/src/memory/memory-bridge-backend.d.ts +43 -0
- package/dist/src/memory/memory-bridge-backend.d.ts.map +1 -0
- package/dist/src/memory/memory-bridge-backend.js +363 -0
- package/dist/src/memory/memory-bridge-backend.js.map +1 -0
- package/dist/src/memory/memory-bridge-core.d.ts +42 -0
- package/dist/src/memory/memory-bridge-core.d.ts.map +1 -0
- package/dist/src/memory/memory-bridge-core.js +126 -0
- package/dist/src/memory/memory-bridge-core.js.map +1 -0
- package/dist/src/memory/memory-bridge-entries.d.ts +131 -0
- package/dist/src/memory/memory-bridge-entries.d.ts.map +1 -0
- package/dist/src/memory/memory-bridge-entries.js +227 -0
- package/dist/src/memory/memory-bridge-entries.js.map +1 -0
- package/dist/src/memory/memory-bridge-feedback.d.ts +60 -0
- package/dist/src/memory/memory-bridge-feedback.d.ts.map +1 -0
- package/dist/src/memory/memory-bridge-feedback.js +118 -0
- package/dist/src/memory/memory-bridge-feedback.js.map +1 -0
- package/dist/src/memory/memory-bridge-paths.d.ts +123 -0
- package/dist/src/memory/memory-bridge-paths.d.ts.map +1 -0
- package/dist/src/memory/memory-bridge-paths.js +335 -0
- package/dist/src/memory/memory-bridge-paths.js.map +1 -0
- package/dist/src/memory/memory-bridge-search.d.ts +48 -0
- package/dist/src/memory/memory-bridge-search.d.ts.map +1 -0
- package/dist/src/memory/memory-bridge-search.js +383 -0
- package/dist/src/memory/memory-bridge-search.js.map +1 -0
- package/dist/src/memory/memory-bridge-sessions.d.ts +38 -0
- package/dist/src/memory/memory-bridge-sessions.d.ts.map +1 -0
- package/dist/src/memory/memory-bridge-sessions.js +109 -0
- package/dist/src/memory/memory-bridge-sessions.js.map +1 -0
- package/dist/src/memory/memory-bridge-store.d.ts +58 -0
- package/dist/src/memory/memory-bridge-store.d.ts.map +1 -0
- package/dist/src/memory/memory-bridge-store.js +201 -0
- package/dist/src/memory/memory-bridge-store.js.map +1 -0
- package/dist/src/memory/memory-bridge.d.ts +10 -438
- package/dist/src/memory/memory-bridge.d.ts.map +1 -1
- package/dist/src/memory/memory-bridge.js +14 -1787
- package/dist/src/memory/memory-bridge.js.map +1 -1
- package/dist/src/memory/memory-kg-claims.d.ts +52 -0
- package/dist/src/memory/memory-kg-claims.d.ts.map +1 -0
- package/dist/src/memory/memory-kg-claims.js +99 -0
- package/dist/src/memory/memory-kg-claims.js.map +1 -0
- package/dist/src/memory/memory-kg-index.d.ts +86 -0
- package/dist/src/memory/memory-kg-index.d.ts.map +1 -0
- package/dist/src/memory/memory-kg-index.js +256 -0
- package/dist/src/memory/memory-kg-index.js.map +1 -0
- package/dist/src/memory/memory-kg-ingest.d.ts +44 -0
- package/dist/src/memory/memory-kg-ingest.d.ts.map +1 -0
- package/dist/src/memory/memory-kg-ingest.js +361 -0
- package/dist/src/memory/memory-kg-ingest.js.map +1 -0
- package/dist/src/memory/memory-kg-model.d.ts +168 -0
- package/dist/src/memory/memory-kg-model.d.ts.map +1 -0
- package/dist/src/memory/memory-kg-model.js +158 -0
- package/dist/src/memory/memory-kg-model.js.map +1 -0
- package/dist/src/memory/memory-kg-names.d.ts +64 -0
- package/dist/src/memory/memory-kg-names.d.ts.map +1 -0
- package/dist/src/memory/memory-kg-names.js +187 -0
- package/dist/src/memory/memory-kg-names.js.map +1 -0
- package/dist/src/memory/memory-kg-promote.d.ts +79 -0
- package/dist/src/memory/memory-kg-promote.d.ts.map +1 -0
- package/dist/src/memory/memory-kg-promote.js +248 -0
- package/dist/src/memory/memory-kg-promote.js.map +1 -0
- package/dist/src/memory/memory-kg-rebuild.d.ts +77 -0
- package/dist/src/memory/memory-kg-rebuild.d.ts.map +1 -0
- package/dist/src/memory/memory-kg-rebuild.js +299 -0
- package/dist/src/memory/memory-kg-rebuild.js.map +1 -0
- package/dist/src/memory/memory-kg-rollback.d.ts +47 -0
- package/dist/src/memory/memory-kg-rollback.d.ts.map +1 -0
- package/dist/src/memory/memory-kg-rollback.js +193 -0
- package/dist/src/memory/memory-kg-rollback.js.map +1 -0
- package/dist/src/memory/memory-kg-rules.d.ts +64 -0
- package/dist/src/memory/memory-kg-rules.d.ts.map +1 -0
- package/dist/src/memory/memory-kg-rules.js +251 -0
- package/dist/src/memory/memory-kg-rules.js.map +1 -0
- package/dist/src/memory/memory-kg-scan.d.ts +118 -0
- package/dist/src/memory/memory-kg-scan.d.ts.map +1 -0
- package/dist/src/memory/memory-kg-scan.js +209 -0
- package/dist/src/memory/memory-kg-scan.js.map +1 -0
- package/dist/src/memory/memory-kg-search.d.ts +80 -0
- package/dist/src/memory/memory-kg-search.d.ts.map +1 -0
- package/dist/src/memory/memory-kg-search.js +239 -0
- package/dist/src/memory/memory-kg-search.js.map +1 -0
- package/dist/src/memory/memory-kg.d.ts +19 -547
- package/dist/src/memory/memory-kg.d.ts.map +1 -1
- package/dist/src/memory/memory-kg.js +10 -2389
- package/dist/src/memory/memory-kg.js.map +1 -1
- package/dist/src/orgrt/daemon-types.d.ts +196 -0
- package/dist/src/orgrt/daemon-types.d.ts.map +1 -0
- package/dist/src/orgrt/daemon-types.js +38 -0
- package/dist/src/orgrt/daemon-types.js.map +1 -0
- package/dist/src/orgrt/daemon.d.ts +70 -300
- package/dist/src/orgrt/daemon.d.ts.map +1 -1
- package/dist/src/orgrt/daemon.js +41 -2536
- package/dist/src/orgrt/daemon.js.map +1 -1
- package/dist/src/orgrt/idle-watchdog.d.ts +39 -0
- package/dist/src/orgrt/idle-watchdog.d.ts.map +1 -0
- package/dist/src/orgrt/idle-watchdog.js +289 -0
- package/dist/src/orgrt/idle-watchdog.js.map +1 -0
- package/dist/src/orgrt/org-reload.d.ts +7 -0
- package/dist/src/orgrt/org-reload.d.ts.map +1 -0
- package/dist/src/orgrt/org-reload.js +111 -0
- package/dist/src/orgrt/org-reload.js.map +1 -0
- package/dist/src/orgrt/org-start-steps.d.ts +21 -0
- package/dist/src/orgrt/org-start-steps.d.ts.map +1 -0
- package/dist/src/orgrt/org-start-steps.js +305 -0
- package/dist/src/orgrt/org-start-steps.js.map +1 -0
- package/dist/src/orgrt/org-start.d.ts +7 -0
- package/dist/src/orgrt/org-start.d.ts.map +1 -0
- package/dist/src/orgrt/org-start.js +435 -0
- package/dist/src/orgrt/org-start.js.map +1 -0
- package/dist/src/orgrt/org-state-file.d.ts +8 -0
- package/dist/src/orgrt/org-state-file.d.ts.map +1 -0
- package/dist/src/orgrt/org-state-file.js +116 -0
- package/dist/src/orgrt/org-state-file.js.map +1 -0
- package/dist/src/orgrt/org-stop.d.ts +6 -0
- package/dist/src/orgrt/org-stop.d.ts.map +1 -0
- package/dist/src/orgrt/org-stop.js +332 -0
- package/dist/src/orgrt/org-stop.js.map +1 -0
- package/dist/src/orgrt/org-tools.d.ts +11 -0
- package/dist/src/orgrt/org-tools.d.ts.map +1 -0
- package/dist/src/orgrt/org-tools.js +305 -0
- package/dist/src/orgrt/org-tools.js.map +1 -0
- package/dist/src/orgrt/role-incarnation.d.ts +18 -0
- package/dist/src/orgrt/role-incarnation.d.ts.map +1 -0
- package/dist/src/orgrt/role-incarnation.js +374 -0
- package/dist/src/orgrt/role-incarnation.js.map +1 -0
- package/dist/src/orgrt/role-respawn.d.ts +7 -0
- package/dist/src/orgrt/role-respawn.d.ts.map +1 -0
- package/dist/src/orgrt/role-respawn.js +318 -0
- package/dist/src/orgrt/role-respawn.js.map +1 -0
- package/dist/src/orgrt/role-session-opts.d.ts +389 -0
- package/dist/src/orgrt/role-session-opts.d.ts.map +1 -0
- package/dist/src/orgrt/role-session-opts.js +289 -0
- package/dist/src/orgrt/role-session-opts.js.map +1 -0
- package/dist/src/orgrt/runner-resolve.d.ts +43 -0
- package/dist/src/orgrt/runner-resolve.d.ts.map +1 -0
- package/dist/src/orgrt/runner-resolve.js +77 -0
- package/dist/src/orgrt/runner-resolve.js.map +1 -0
- package/dist/src/orgrt/session-gate.d.ts +34 -0
- package/dist/src/orgrt/session-gate.d.ts.map +1 -0
- package/dist/src/orgrt/session-gate.js +74 -0
- package/dist/src/orgrt/session-gate.js.map +1 -0
- package/dist/src/orgrt/session-prompt.d.ts +31 -0
- package/dist/src/orgrt/session-prompt.d.ts.map +1 -0
- package/dist/src/orgrt/session-prompt.js +115 -0
- package/dist/src/orgrt/session-prompt.js.map +1 -0
- package/dist/src/orgrt/session-run.d.ts +18 -0
- package/dist/src/orgrt/session-run.d.ts.map +1 -0
- package/dist/src/orgrt/session-run.js +429 -0
- package/dist/src/orgrt/session-run.js.map +1 -0
- package/dist/src/orgrt/session-stream.d.ts +21 -0
- package/dist/src/orgrt/session-stream.d.ts.map +1 -0
- package/dist/src/orgrt/session-stream.js +173 -0
- package/dist/src/orgrt/session-stream.js.map +1 -0
- package/dist/src/orgrt/session-types.d.ts +219 -0
- package/dist/src/orgrt/session-types.d.ts.map +1 -0
- package/dist/src/orgrt/session-types.js +2 -0
- package/dist/src/orgrt/session-types.js.map +1 -0
- package/dist/src/orgrt/session-usage.d.ts +29 -0
- package/dist/src/orgrt/session-usage.d.ts.map +1 -0
- package/dist/src/orgrt/session-usage.js +64 -0
- package/dist/src/orgrt/session-usage.js.map +1 -0
- package/dist/src/orgrt/session.d.ts +5 -281
- package/dist/src/orgrt/session.d.ts.map +1 -1
- package/dist/src/orgrt/session.js +8 -1117
- package/dist/src/orgrt/session.js.map +1 -1
- package/dist/src/ui/org-hil.mjs +1 -1
- package/dist/src/ui/routes-org-agents.mjs +318 -0
- package/dist/src/ui/routes-org-approvals.mjs +133 -0
- package/dist/src/ui/routes-org-config.mjs +459 -0
- package/dist/src/ui/routes-org-control.mjs +300 -0
- package/dist/src/ui/routes-org-files.mjs +172 -0
- package/dist/src/ui/routes-org-helpers.mjs +84 -0
- package/dist/src/ui/routes-org-knowledge.mjs +262 -0
- package/dist/src/ui/routes-org-lifecycle.mjs +224 -0
- package/dist/src/ui/routes-org-live.mjs +278 -0
- package/dist/src/ui/routes-org-mastermind.mjs +346 -0
- package/dist/src/ui/routes-org-planning.mjs +398 -0
- package/dist/src/ui/routes-org-runs.mjs +430 -0
- package/dist/src/ui/routes-org-status.mjs +342 -0
- package/dist/src/ui/routes-org-workflows.mjs +212 -0
- package/dist/src/ui/routes-org.mjs +26 -3847
- package/dist/src/ui/server.mjs +1 -1
- package/dist/src/utils/native-error.d.ts +1 -1
- package/dist/src/utils/native-error.js +1 -1
- package/dist/src/utils/paths.d.ts +2 -1
- package/dist/src/utils/paths.d.ts.map +1 -1
- package/dist/src/utils/paths.js +2 -1
- package/dist/src/utils/paths.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/org-skills/adversarial-reviewer/SKILL.md +1 -1
- package/org-skills/board-deck-builder/SKILL.md +1 -1
- package/org-skills/code-reviewer/SKILL.md +1 -1
- package/org-skills/debugging-wizard/SKILL.md +1 -1
- package/org-skills/scientific-thinking-literature-review/SKILL.md +1 -1
- package/org-skills/scientific-thinking-scholar-evaluation/SKILL.md +1 -1
- package/package.json +5 -5
|
@@ -0,0 +1,435 @@
|
|
|
1
|
+
// packages/@monomind/cli/src/orgrt/org-start.ts
|
|
2
|
+
// Extracted from daemon.ts — starting an org run: the reservation guard
|
|
3
|
+
// (startOrg) and the run setup it protects (startOrgInner).
|
|
4
|
+
import { execFileSync } from 'node:child_process';
|
|
5
|
+
import { randomUUID } from 'node:crypto';
|
|
6
|
+
import { join } from 'node:path';
|
|
7
|
+
import { reapOrphanedSdkProcesses } from '../utils/resource-governor.js';
|
|
8
|
+
import { onBudgetBusEvent } from './budget-closure.js';
|
|
9
|
+
import { OrgBus } from './bus.js';
|
|
10
|
+
import * as decisionOps from './decisions.js';
|
|
11
|
+
import { agentRoles, isEndpointRole } from './endpoint-roles.js';
|
|
12
|
+
import { attachForwarder } from './forwarder.js';
|
|
13
|
+
import * as idleWatchdog from './idle-watchdog.js';
|
|
14
|
+
import * as orgMemory from './org-memory.js';
|
|
15
|
+
import * as startSteps from './org-start-steps.js';
|
|
16
|
+
import { readHistory } from './reporting.js';
|
|
17
|
+
import { mergeEffectiveRoleConfig } from './role-slot.js';
|
|
18
|
+
import { SessionLedger } from './session-ledger.js';
|
|
19
|
+
import { TaskDag } from './task-dag.js';
|
|
20
|
+
/** Drain window for a PLANNED stop (the boss called org_complete). Long enough
|
|
21
|
+
* for a sibling mid-build or mid-test to finish and flush its work. A hard
|
|
22
|
+
* stop keeps the short bound — see finishStop. */
|
|
23
|
+
const COMPLETE_DRAIN_MS = 5 * 60_000;
|
|
24
|
+
export async function startOrg(daemon, name, taskOverride, options) {
|
|
25
|
+
// A restart-driven start (scheduleBossRestart) keeps its crash counter so the
|
|
26
|
+
// cap holds; any other (explicit) start resets it so a manual re-run gets a
|
|
27
|
+
// fresh budget.
|
|
28
|
+
if (!daemon.restarting.has(name))
|
|
29
|
+
daemon.bossRestartCounts.delete(name);
|
|
30
|
+
// Join any in-flight stop for this org before checking `this.orgs` — otherwise a
|
|
31
|
+
// start racing a stop's drain window (up to stopWaitMs) can share the stopping
|
|
32
|
+
// run's worktree path while it's still being force-removed.
|
|
33
|
+
const inflightStop = daemon.stopping.get(name);
|
|
34
|
+
if (inflightStop)
|
|
35
|
+
await inflightStop;
|
|
36
|
+
// Bug 2 (TOCTOU race): this existence check is synchronous, but the real
|
|
37
|
+
// registration into `this.orgs` doesn't happen until deep inside
|
|
38
|
+
// startOrgInner, after several genuine `await` points (the provider
|
|
39
|
+
// validation dynamic import, `git worktree add` for workspace:
|
|
40
|
+
// 'worktree'). Two concurrent startOrg(name) calls — e.g. the
|
|
41
|
+
// scheduler's tick, the runfile poll loop, and autoWake firing close
|
|
42
|
+
// together — could each pass this check before either registered,
|
|
43
|
+
// spawning two duplicate runs with separate budget/policy counters that
|
|
44
|
+
// both write the same shared per-org files. Reserve the name in
|
|
45
|
+
// `startingOrgs` synchronously, in the same tick as the check, so a
|
|
46
|
+
// second concurrent call sees the reservation and is rejected instead of
|
|
47
|
+
// racing ahead to spawn a duplicate.
|
|
48
|
+
if (daemon.orgs.has(name))
|
|
49
|
+
throw new Error(`org ${name} already running`);
|
|
50
|
+
if (daemon.startingOrgs.has(name))
|
|
51
|
+
throw new Error(`org ${name} already starting`);
|
|
52
|
+
daemon.startingOrgs.add(name);
|
|
53
|
+
// #345: the run's --auto-approve list — kept by a boss auto-restart like
|
|
54
|
+
// the crash counter, replaced by any other start. Set only after the
|
|
55
|
+
// guards above, so a rejected start can't rewrite a live run's list.
|
|
56
|
+
if (!daemon.restarting.has(name)) {
|
|
57
|
+
if (options?.autoApprove?.length)
|
|
58
|
+
daemon.runAutoApprove.set(name, options.autoApprove);
|
|
59
|
+
else
|
|
60
|
+
daemon.runAutoApprove.delete(name);
|
|
61
|
+
}
|
|
62
|
+
try {
|
|
63
|
+
return await startOrgInner(daemon, name, taskOverride, options);
|
|
64
|
+
}
|
|
65
|
+
catch (err) {
|
|
66
|
+
// startOrgInner registers the org in `this.orgs` (and spawns the boss,
|
|
67
|
+
// installs the exit listener, starts the broker lease) well before it
|
|
68
|
+
// returns; persistState (ENOSPC/EACCES) and BrokerLease.start() can
|
|
69
|
+
// still throw after that. Left alone, that was a live, unreachable org:
|
|
70
|
+
// sessions running, `this.orgs` still holding it, every later startOrg
|
|
71
|
+
// rejected with "already running", and nothing ever calling stopOrg.
|
|
72
|
+
// Only this call can have registered the name (the reservation above
|
|
73
|
+
// holds until `finally`), so anything in the map is ours to tear down.
|
|
74
|
+
if (daemon.orgs.has(name)) {
|
|
75
|
+
// #302: tag the real cause so a run's history/report can never read
|
|
76
|
+
// this as a boss-attributed outcome — nothing here asked the boss.
|
|
77
|
+
await daemon
|
|
78
|
+
.stopOrg(name, { closedBy: 'failed-start' })
|
|
79
|
+
.catch((stopErr) => console.error(`org ${name}: teardown after failed start failed:`, stopErr instanceof Error ? stopErr.message : stopErr));
|
|
80
|
+
}
|
|
81
|
+
throw err;
|
|
82
|
+
}
|
|
83
|
+
finally {
|
|
84
|
+
daemon.startingOrgs.delete(name);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
/** The actual startOrg implementation. Split out of startOrg() so the
|
|
88
|
+
* reservation guard above runs synchronously, before any `await` in here —
|
|
89
|
+
* see the bug 2 comment in startOrg(). */
|
|
90
|
+
async function startOrgInner(daemon, name, taskOverride, options) {
|
|
91
|
+
const { def, run, checkpoint, dir, cwd, worktreePath } = await startSteps.prepareOrgStart(daemon, name, options);
|
|
92
|
+
const bus = new OrgBus(name, run, dir);
|
|
93
|
+
// Lightweight in-memory tail for busEvents() (test-loop, /api/history).
|
|
94
|
+
// Full events (including Write content snapshots) live on disk in bus.jsonl;
|
|
95
|
+
// the in-memory copy strips bulky data.content to keep RAM flat.
|
|
96
|
+
const MAX_COLLECTED = 1000;
|
|
97
|
+
const collected = [];
|
|
98
|
+
let lastActivity = Date.now();
|
|
99
|
+
// Separate from lastActivity: only real tool calls (org_send, org_task,
|
|
100
|
+
// Bash, ...) count here, not status pings or chat-only turns. The idle
|
|
101
|
+
// watchdog's nudge-recovery check (resolvedIdleNudgeCount) uses this to
|
|
102
|
+
// tell genuine forward progress apart from a boss that "answers" a nudge
|
|
103
|
+
// with a bare acknowledgment ("✓ Complete") and does nothing — a
|
|
104
|
+
// content-free reply still updates lastActivity (so the org isn't
|
|
105
|
+
// flagged as silent), but must not reset the cumulative nudge cap, or a
|
|
106
|
+
// boss that's genuinely out of ideas can loop forever making zero
|
|
107
|
+
// progress without ever tripping the watchdog.
|
|
108
|
+
let lastToolActivity = 0;
|
|
109
|
+
// ADR-O001 D4 (no-progress detector): the idle clock above is org-wide and
|
|
110
|
+
// says nothing at all while a hold is in force — the 8.3-hour stall looked
|
|
111
|
+
// perfectly healthy from it. Per-role last-activity is what tells a role
|
|
112
|
+
// that is nominally working but producing nothing from one that is simply
|
|
113
|
+
// waiting its turn.
|
|
114
|
+
const roleActivity = new Map();
|
|
115
|
+
const noProgressAlarmed = new Set();
|
|
116
|
+
bus.subscribe((e) => {
|
|
117
|
+
const slim = e.data?.content != null ? { ...e, data: { ...e.data, content: undefined } } : e;
|
|
118
|
+
collected.push(slim);
|
|
119
|
+
if (collected.length > MAX_COLLECTED)
|
|
120
|
+
collected.splice(0, collected.length - MAX_COLLECTED);
|
|
121
|
+
// The watchdog's own events must not count as org activity, or a hung
|
|
122
|
+
// boss would never trip the "nudge produced no activity" stop and a
|
|
123
|
+
// silent role would clear its own no-progress alarm.
|
|
124
|
+
const selfEmitted = e.reason === 'idle-nudge' || e.reason === 'no-progress' || e.reason === 'hold-expired';
|
|
125
|
+
if (!selfEmitted)
|
|
126
|
+
lastActivity = Date.now();
|
|
127
|
+
if (e.type === 'tool')
|
|
128
|
+
lastToolActivity = Date.now();
|
|
129
|
+
if (e.from && !selfEmitted) {
|
|
130
|
+
roleActivity.set(e.from, Date.now());
|
|
131
|
+
noProgressAlarmed.delete(e.from);
|
|
132
|
+
}
|
|
133
|
+
// org_complete IS the end of the run — self-stop instead of sitting
|
|
134
|
+
// "running" forever after a recorded outcome. Deferred (unref'd) so the
|
|
135
|
+
// tool call's receipt reaches the boss and its final turn text still
|
|
136
|
+
// lands on the bus before mailboxes close; stopOrg is reentrant-safe
|
|
137
|
+
// against a concurrent manual stop.
|
|
138
|
+
if (e.type === 'status' && e.reason === 'org-complete') {
|
|
139
|
+
const t = setTimeout(() => {
|
|
140
|
+
// #206: closedBy: 'org-complete' is the ONLY signal `org run`
|
|
141
|
+
// trusts to mean "the run ended cleanly, exit 0" — every other
|
|
142
|
+
// stop path (idle watchdog, boss-restart-exhausted, manual stop)
|
|
143
|
+
// leaves it unset.
|
|
144
|
+
daemon
|
|
145
|
+
.stopOrg(name, { drainMs: COMPLETE_DRAIN_MS, closedBy: 'org-complete' })
|
|
146
|
+
.catch((err) => console.error(`org ${name}: auto-stop after org_complete failed:`, err instanceof Error ? err.message : err));
|
|
147
|
+
}, 1000);
|
|
148
|
+
t.unref?.();
|
|
149
|
+
}
|
|
150
|
+
// Accumulate cost from usage events into per-role metrics
|
|
151
|
+
if (e.type === 'usage' && e.from && e.data) {
|
|
152
|
+
const runtime = running.agents.get(e.from);
|
|
153
|
+
if (runtime) {
|
|
154
|
+
const cost = Number(e.data.cost_usd ?? 0);
|
|
155
|
+
if (Number.isFinite(cost)) {
|
|
156
|
+
runtime.metrics.costUsd += cost;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
// Bug 1 / #343: enforce the org-wide run_config.budget_tokens ceiling,
|
|
161
|
+
// hold a budget-closed role's tasks, warn near a budget.
|
|
162
|
+
onBudgetBusEvent(running, e);
|
|
163
|
+
// Track last message ID for threading responses
|
|
164
|
+
if ((e.type === 'message' || e.type === 'xorg') && e.from) {
|
|
165
|
+
const runtime = running.agents.get(e.from);
|
|
166
|
+
if (runtime) {
|
|
167
|
+
runtime.lastMessageId = e.id;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
// Apply audit filter if configured (skip filtered tool events before forwarding)
|
|
171
|
+
if (daemon.opts.auditFilter && e.type === 'tool') {
|
|
172
|
+
const { tool, decision } = daemon.opts.auditFilter;
|
|
173
|
+
if (tool && e.tool !== tool)
|
|
174
|
+
return; // Skip: tool name doesn't match
|
|
175
|
+
if (decision && e.decision !== decision)
|
|
176
|
+
return; // Skip: decision doesn't match
|
|
177
|
+
}
|
|
178
|
+
for (const fn of daemon.globalSubscribers)
|
|
179
|
+
fn(e);
|
|
180
|
+
});
|
|
181
|
+
if (daemon.opts.forward !== false)
|
|
182
|
+
daemon.forwarders.set(name, attachForwarder(bus, daemon.opts.controlJson ?? join(daemon.root, '.monomind/control.json')));
|
|
183
|
+
const running = {
|
|
184
|
+
def,
|
|
185
|
+
run,
|
|
186
|
+
sessionLedger: new SessionLedger(join(dir, 'sessions.json')),
|
|
187
|
+
gates: decisionOps.readGates(daemon.root, name),
|
|
188
|
+
bus,
|
|
189
|
+
agents: new Map(),
|
|
190
|
+
roleSlots: new Map(),
|
|
191
|
+
bossRoleId: '', // set below, once bossRole is computed
|
|
192
|
+
glossary: [],
|
|
193
|
+
respawning: new Set(),
|
|
194
|
+
busEvents: () => [...collected],
|
|
195
|
+
workdir: cwd,
|
|
196
|
+
credential: randomUUID(),
|
|
197
|
+
};
|
|
198
|
+
daemon.orgs.set(name, running);
|
|
199
|
+
const roleFences = await startSteps.createRoleFences(daemon, def);
|
|
200
|
+
if (roleFences.size > 0)
|
|
201
|
+
running.fences = roleFences;
|
|
202
|
+
// Even-split budget; a role's own budget_tokens overrides it (roleTokenBudget).
|
|
203
|
+
// Bug 1: roles WITH an explicit override spend on top of the even split
|
|
204
|
+
// rather than out of it, so the roster's ceilings could sum to well over
|
|
205
|
+
// the declared org-wide budget (e.g. 4 roles @ 250k + one role overridden
|
|
206
|
+
// to 2M = 2.75M achievable against a declared 1M cap). Subtract the sum of
|
|
207
|
+
// every role's explicit override from the org-wide budget first, then
|
|
208
|
+
// split only the remainder among the roles WITHOUT an override, so the
|
|
209
|
+
// static split is honest about what's left. (Live usage is still tracked
|
|
210
|
+
// and enforced as a real ceiling above, independent of this static split.)
|
|
211
|
+
const orgBudgetTokens = def.run_config.budget_tokens ?? 1_000_000;
|
|
212
|
+
const overriddenTokenSum = def.roles.reduce((sum, r) => sum + (r.budget_tokens ?? 0), 0);
|
|
213
|
+
const unoverriddenRoleCount = agentRoles(def.roles).filter((r) => r.budget_tokens == null).length;
|
|
214
|
+
const _perRoleBudget = unoverriddenRoleCount > 0
|
|
215
|
+
? Math.max(0, Math.floor((orgBudgetTokens - overriddenTokenSum) / unoverriddenRoleCount))
|
|
216
|
+
: 0;
|
|
217
|
+
// Single boss-selection rule for kickoff AND org_complete gating — the
|
|
218
|
+
// session layer previously keyed the tool on reports_to===null while the
|
|
219
|
+
// kickoff went to (type==='boss' || reports_to===null || roles[0]), so a
|
|
220
|
+
// fallback-selected boss could be told to call org_complete without having
|
|
221
|
+
// the tool.
|
|
222
|
+
// M2: endpoint roles are never the boss.
|
|
223
|
+
const sessionRoles = agentRoles(def.roles);
|
|
224
|
+
if (sessionRoles.length === 0)
|
|
225
|
+
throw new Error(`org ${name}: no agent roles — endpoint roles cannot run an org`);
|
|
226
|
+
const bossRole = sessionRoles.find((r) => r.type === 'boss' || r.reports_to === null) ?? sessionRoles[0];
|
|
227
|
+
running.bossRoleId = bossRole.id;
|
|
228
|
+
// Canonical entity names from THIS org's KG — injected into the coordinator
|
|
229
|
+
// prompt so org_learn extractions reuse them instead of minting duplicates.
|
|
230
|
+
// Scoped: an unscoped glossary handed every org's entity names to every
|
|
231
|
+
// coordinator, which is how one org's claims got merged into another's.
|
|
232
|
+
const glossary = await (async () => {
|
|
233
|
+
try {
|
|
234
|
+
if (!(await daemon.orgMemoryUsable()))
|
|
235
|
+
return [];
|
|
236
|
+
const kg = await import('../memory/memory-kg.js');
|
|
237
|
+
return await kg.kgGlossary({
|
|
238
|
+
dbPath: daemon.orgMemoryDbPath(),
|
|
239
|
+
scope: orgMemory.orgKgScope(name),
|
|
240
|
+
});
|
|
241
|
+
}
|
|
242
|
+
catch {
|
|
243
|
+
return [];
|
|
244
|
+
}
|
|
245
|
+
})();
|
|
246
|
+
running.glossary = glossary;
|
|
247
|
+
// Resource-gated staggered spawn: check memory/process limits before each
|
|
248
|
+
// NON-BOSS agent, wait if under pressure. The boss always spawns immediately
|
|
249
|
+
// and ungated — the org has no coordinator at all without it, so gating it
|
|
250
|
+
// behind host memory pressure would make the whole org fail to start over a
|
|
251
|
+
// condition workers are specifically designed to ride out.
|
|
252
|
+
// Extracted so a role that fails its gate check can be spawned later by
|
|
253
|
+
// scheduleDeferredSpawn() once resources free up, without re-running the
|
|
254
|
+
// gate logic or duplicating the session-wiring below.
|
|
255
|
+
const spawnRole = (role, roleCheckpoint) => {
|
|
256
|
+
if (running.agents.has(role.id))
|
|
257
|
+
return;
|
|
258
|
+
if (isEndpointRole(role))
|
|
259
|
+
return; // M2: no session, mailbox or slot
|
|
260
|
+
const { runtime, abort } = daemon.spawnRoleIncarnation(name, running, role, roleCheckpoint?.generation ?? 0, { roleCheckpoint });
|
|
261
|
+
running.agents.set(role.id, runtime);
|
|
262
|
+
running.roleSlots.set(role.id, {
|
|
263
|
+
generation: roleCheckpoint?.generation ?? 0,
|
|
264
|
+
phase: 'running',
|
|
265
|
+
runtime,
|
|
266
|
+
abort,
|
|
267
|
+
effectiveRole: roleCheckpoint?.effectiveRoleOverrides &&
|
|
268
|
+
Object.keys(roleCheckpoint.effectiveRoleOverrides).length > 0
|
|
269
|
+
? mergeEffectiveRoleConfig(role, roleCheckpoint.effectiveRoleOverrides)
|
|
270
|
+
: role,
|
|
271
|
+
respawnCount: roleCheckpoint?.respawnCount ?? 0,
|
|
272
|
+
queuedDuringSwap: roleCheckpoint?.queuedDuringSwap ?? [],
|
|
273
|
+
retiredUsage: roleCheckpoint?.retiredUsage ?? { tokens: 0, costUsd: 0 },
|
|
274
|
+
});
|
|
275
|
+
};
|
|
276
|
+
if (options?.resume && checkpoint) {
|
|
277
|
+
const restoredRoles = new Set(Object.keys(checkpoint.roleState));
|
|
278
|
+
for (const [roleId, roleState] of Object.entries(checkpoint.roleState)) {
|
|
279
|
+
const role = def.roles.find((r) => r.id === roleId);
|
|
280
|
+
if (role)
|
|
281
|
+
spawnRole(role, roleState);
|
|
282
|
+
}
|
|
283
|
+
const pendingRoles = new Map();
|
|
284
|
+
for (const role of def.roles) {
|
|
285
|
+
if (!restoredRoles.has(role.id) && !isEndpointRole(role)) {
|
|
286
|
+
pendingRoles.set(role.id, role);
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
running.pendingRoles = pendingRoles;
|
|
290
|
+
running.spawnRole = spawnRole;
|
|
291
|
+
running.taskDag =
|
|
292
|
+
checkpoint.tasks && checkpoint.tasks.length > 0
|
|
293
|
+
? TaskDag.fromJSON(checkpoint.tasks)
|
|
294
|
+
: new TaskDag();
|
|
295
|
+
// A 'running' task's "[task:…]" message was consumed by the session that
|
|
296
|
+
// was working it. If that role's SDK session is resumed (checkpointed
|
|
297
|
+
// sessionId) the task is still in its context; otherwise — role not
|
|
298
|
+
// restored at all, or restored into a fresh session — nothing knows
|
|
299
|
+
// about the task, so put it back to 'ready' and re-dispatch.
|
|
300
|
+
for (const task of running.taskDag.all()) {
|
|
301
|
+
if (task.status !== 'running')
|
|
302
|
+
continue;
|
|
303
|
+
if (checkpoint.roleState[task.assignee]?.sessionId)
|
|
304
|
+
continue;
|
|
305
|
+
running.taskDag.requeue(task.id);
|
|
306
|
+
}
|
|
307
|
+
decisionOps.dispatchReadyTasks(daemon, name, running);
|
|
308
|
+
if (worktreePath)
|
|
309
|
+
running.worktreePath = worktreePath;
|
|
310
|
+
}
|
|
311
|
+
else {
|
|
312
|
+
spawnRole(bossRole); // always, ungated — see comment above
|
|
313
|
+
// Lazy spawn: register non-boss roles as pending. They spawn on first
|
|
314
|
+
// message (see deliver()), avoiding the memory gate stampede at startup.
|
|
315
|
+
const pendingRoles = new Map();
|
|
316
|
+
for (const role of def.roles) {
|
|
317
|
+
if (role.id === bossRole.id || isEndpointRole(role))
|
|
318
|
+
continue;
|
|
319
|
+
pendingRoles.set(role.id, role);
|
|
320
|
+
}
|
|
321
|
+
running.pendingRoles = pendingRoles;
|
|
322
|
+
running.spawnRole = spawnRole;
|
|
323
|
+
running.taskDag = new TaskDag();
|
|
324
|
+
if (worktreePath)
|
|
325
|
+
running.worktreePath = worktreePath;
|
|
326
|
+
}
|
|
327
|
+
// Crash cleanup: reap SDK children if this process exits abnormally.
|
|
328
|
+
// monolean: process-scoped listener — upgrade path = per-org tracking
|
|
329
|
+
const crashCleanup = () => {
|
|
330
|
+
try {
|
|
331
|
+
// Statically imported: a process 'exit' handler must be synchronous,
|
|
332
|
+
// so `await import()` is unavailable — and a bare require() throws
|
|
333
|
+
// "require is not defined" in this ESM package. Guarded by
|
|
334
|
+
// no-cjs-require-in-esm.test.ts.
|
|
335
|
+
reapOrphanedSdkProcesses(new Set(), process.pid);
|
|
336
|
+
}
|
|
337
|
+
catch {
|
|
338
|
+
/* best-effort */
|
|
339
|
+
}
|
|
340
|
+
// #301: `process.on('exit')` is the SECOND termination path — it fires
|
|
341
|
+
// for a normal stop too (finishStop's own prune above already covers
|
|
342
|
+
// that case, so this is a harmless idempotent repeat there) but also
|
|
343
|
+
// for every path that reaches it via an explicit `process.exit()`
|
|
344
|
+
// (org.ts's SIGTERM/SIGINT/SIGHUP handlers, uncaughtException,
|
|
345
|
+
// unhandledRejection) — none of which run finishStop's cleanup at all.
|
|
346
|
+
// execFileSync is already a static top-level import (see the comment
|
|
347
|
+
// above), so this stays synchronous-safe like the rest of this
|
|
348
|
+
// handler. SIGKILL cannot reach here — no in-process code runs for
|
|
349
|
+
// it — which is why prune-at-start exists as the complement.
|
|
350
|
+
try {
|
|
351
|
+
execFileSync('git', ['worktree', 'prune'], {
|
|
352
|
+
cwd: daemon.root,
|
|
353
|
+
stdio: 'ignore',
|
|
354
|
+
timeout: 30_000,
|
|
355
|
+
});
|
|
356
|
+
}
|
|
357
|
+
catch {
|
|
358
|
+
/* best-effort: not a git repo, git missing, or a wedged hook */
|
|
359
|
+
}
|
|
360
|
+
};
|
|
361
|
+
process.on('exit', crashCleanup);
|
|
362
|
+
running._crashCleanup = crashCleanup;
|
|
363
|
+
// Stale-base drift detection: if the working tree is too many commits behind
|
|
364
|
+
// its tracking branch, warn or refuse to start. Best-effort — git may not be
|
|
365
|
+
// available, or the repo may have no tracking branch.
|
|
366
|
+
const staleThreshold = def.run_config.stale_base_threshold;
|
|
367
|
+
if (staleThreshold && staleThreshold > 0 && cwd === daemon.root) {
|
|
368
|
+
try {
|
|
369
|
+
const { execSync } = await import('node:child_process');
|
|
370
|
+
const behind = execSync('git rev-list --count HEAD..@{upstream} 2>/dev/null', {
|
|
371
|
+
cwd,
|
|
372
|
+
encoding: 'utf8',
|
|
373
|
+
timeout: 10_000,
|
|
374
|
+
}).trim();
|
|
375
|
+
const count = parseInt(behind, 10);
|
|
376
|
+
if (!Number.isNaN(count) && count > staleThreshold) {
|
|
377
|
+
bus.emit({
|
|
378
|
+
type: 'audit',
|
|
379
|
+
reason: 'stale-base',
|
|
380
|
+
msg: `working tree is ${count} commits behind upstream (threshold: ${staleThreshold}) — consider pulling before running`,
|
|
381
|
+
data: { behind: count, threshold: staleThreshold },
|
|
382
|
+
});
|
|
383
|
+
}
|
|
384
|
+
}
|
|
385
|
+
catch {
|
|
386
|
+
/* no upstream tracking or git unavailable — skip silently */
|
|
387
|
+
}
|
|
388
|
+
}
|
|
389
|
+
const boss = bossRole;
|
|
390
|
+
if (options?.resume) {
|
|
391
|
+
if (running.agents.get(boss.id)?.mailbox.serialize().queue.length === 0) {
|
|
392
|
+
running.agents
|
|
393
|
+
.get(boss.id)
|
|
394
|
+
?.mailbox.push(`Org "${name}" resumed from checkpoint (run ${run}).\nGoal: ${taskOverride ?? def.goal}\n` +
|
|
395
|
+
`Outstanding tasks and role states have been restored. Continue coordinating your team.`);
|
|
396
|
+
}
|
|
397
|
+
bus.emit({
|
|
398
|
+
type: 'status',
|
|
399
|
+
msg: `org resumed from checkpoint (${run})`,
|
|
400
|
+
data: { goal: taskOverride ?? def.goal },
|
|
401
|
+
});
|
|
402
|
+
}
|
|
403
|
+
else {
|
|
404
|
+
// Cross-run memory: brief the coordinator on the previous run so scheduled
|
|
405
|
+
// orgs accumulate instead of starting cold every interval.
|
|
406
|
+
const prev = readHistory(daemon.root, name).at(-1);
|
|
407
|
+
const prevBrief = prev
|
|
408
|
+
? `\n\nPrevious run (${prev.run}${prev.endedAt ? `, ${new Date(prev.endedAt).toISOString()}` : ''}): ` +
|
|
409
|
+
(prev.outcome
|
|
410
|
+
? `outcome "${prev.outcome.status}" — ${prev.outcome.summary}`
|
|
411
|
+
: `no recorded outcome (${prev.messages} messages, ${prev.assets.length} assets${prev.crashes.length ? `, ${prev.crashes.length} crashed agent(s)` : ''})`) +
|
|
412
|
+
`\nBuild on that work — do not redo what is already done.`
|
|
413
|
+
: '';
|
|
414
|
+
running.agents
|
|
415
|
+
.get(boss.id)
|
|
416
|
+
?.mailbox.push(`Org "${name}" started (run ${run}).\nGoal: ${taskOverride ?? def.goal}\n` +
|
|
417
|
+
`Coordinate your team via org_send. Only when the FULL goal above is achieved (or clearly can't be) — not merely "this batch of dispatched tasks finished" — record it with org_complete, then end your turn. ` +
|
|
418
|
+
`If a batch finishes but the goal has more scope left, dispatch the next batch instead of ending the run.${prevBrief}`);
|
|
419
|
+
bus.emit({
|
|
420
|
+
type: 'status',
|
|
421
|
+
msg: `org started (${sessionRoles.length} agents)`,
|
|
422
|
+
data: { goal: taskOverride ?? def.goal },
|
|
423
|
+
});
|
|
424
|
+
}
|
|
425
|
+
daemon.persistState(name, 'running', run);
|
|
426
|
+
idleWatchdog.startIdleWatchdog(daemon, name, running, bossRole, {
|
|
427
|
+
lastActivity: () => lastActivity,
|
|
428
|
+
lastToolActivity: () => lastToolActivity,
|
|
429
|
+
roleActivity,
|
|
430
|
+
noProgressAlarmed,
|
|
431
|
+
});
|
|
432
|
+
await startSteps.startInboxAndDrain(daemon, name, running);
|
|
433
|
+
return running;
|
|
434
|
+
}
|
|
435
|
+
//# sourceMappingURL=org-start.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"org-start.js","sourceRoot":"","sources":["../../../src/orgrt/org-start.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { type OrgCheckpoint } from './checkpoint.js';
|
|
2
|
+
import type { OrgDaemon } from './daemon.js';
|
|
3
|
+
import type { RunningOrg } from './daemon-types.js';
|
|
4
|
+
export declare function persistState(daemon: OrgDaemon, name: string, status: string, run: string, org?: RunningOrg, checkpointOverride?: OrgCheckpoint | null, closedBy?: string): void;
|
|
5
|
+
export declare function persistCrashStateAll(daemon: OrgDaemon, error?: string): void;
|
|
6
|
+
export declare function writeHeartbeat(daemon: OrgDaemon): void;
|
|
7
|
+
export declare function clearHeartbeat(daemon: OrgDaemon): void;
|
|
8
|
+
//# sourceMappingURL=org-state-file.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"org-state-file.d.ts","sourceRoot":"","sources":["../../../src/orgrt/org-state-file.ts"],"names":[],"mappings":"AAMA,OAAO,EAAuC,KAAK,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC1F,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAGpD,wBAAgB,YAAY,CAC1B,MAAM,EAAE,SAAS,EACjB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,MAAM,EACX,GAAG,CAAC,EAAE,UAAU,EAChB,kBAAkB,CAAC,EAAE,aAAa,GAAG,IAAI,EACzC,QAAQ,CAAC,EAAE,MAAM,GAChB,IAAI,CAgDN;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CA6B5E;AAMD,wBAAgB,cAAc,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CActD;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAMtD"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
// packages/@monomind/cli/src/orgrt/org-state-file.ts
|
|
2
|
+
// Extracted from daemon.ts — the daemon's on-disk state: runtime.json
|
|
3
|
+
// (persistState, persistCrashStateAll) and the serve heartbeat.
|
|
4
|
+
import { mkdirSync, unlinkSync } from 'node:fs';
|
|
5
|
+
import { join } from 'node:path';
|
|
6
|
+
import { writeJsonFileAtomic } from '../utils/json-file.js';
|
|
7
|
+
import { captureCheckpoint, generateChecksum } from './checkpoint.js';
|
|
8
|
+
import { ORG_DIR } from './types.js';
|
|
9
|
+
export function persistState(daemon, name, status, run, org, checkpointOverride, closedBy) {
|
|
10
|
+
const p = join(daemon.root, ORG_DIR, name, 'runtime.json');
|
|
11
|
+
const missing = [...(daemon.abandoned.get(name) ?? [])];
|
|
12
|
+
const memoryError = daemon.memoryErrors.get(name);
|
|
13
|
+
const running = org ?? daemon.orgs.get(name);
|
|
14
|
+
const validStatus = status === 'stopped' || status === 'crashed' ? status : 'running';
|
|
15
|
+
// Pattern 3: Capture full checkpoint state for resume. On stop, finishStop
|
|
16
|
+
// passes a snapshot captured BEFORE mailboxes close and sessions drain —
|
|
17
|
+
// otherwise the queue is always empty by persist time.
|
|
18
|
+
let checkpoint = checkpointOverride ?? null;
|
|
19
|
+
if (!checkpoint && running) {
|
|
20
|
+
// Best-effort, like the snapshot in finishStop: persisting the run's
|
|
21
|
+
// state matters more than the resume checkpoint inside it, and a stop
|
|
22
|
+
// must not fail because a checkpoint could not be built.
|
|
23
|
+
try {
|
|
24
|
+
checkpoint = captureCheckpoint(running, validStatus);
|
|
25
|
+
}
|
|
26
|
+
catch (err) {
|
|
27
|
+
console.error(`org ${name}: could not capture the ${validStatus} checkpoint:`, err instanceof Error ? err.message : err);
|
|
28
|
+
checkpoint = null;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
else if (checkpoint && checkpoint.status !== validStatus) {
|
|
32
|
+
const { checksum: _, ...state } = checkpoint;
|
|
33
|
+
checkpoint = {
|
|
34
|
+
...state,
|
|
35
|
+
status: validStatus,
|
|
36
|
+
checksum: generateChecksum({
|
|
37
|
+
...state,
|
|
38
|
+
status: validStatus,
|
|
39
|
+
}),
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
// C4: writeJsonFileAtomic (tmp + rename) — a direct writeFileSync here
|
|
43
|
+
// could leave runtime.json truncated on Ctrl-C during `org stop`, which
|
|
44
|
+
// would brick every subsequent `org status` / isOrgRunning / scheduler
|
|
45
|
+
// call. The state files in 6 other daemon paths already use this helper.
|
|
46
|
+
writeJsonFileAtomic(p, {
|
|
47
|
+
status,
|
|
48
|
+
run,
|
|
49
|
+
pid: process.pid,
|
|
50
|
+
updated: new Date().toISOString(),
|
|
51
|
+
...(missing.length ? { abandonedRoles: missing } : {}),
|
|
52
|
+
...(memoryError ? { memoryError } : {}),
|
|
53
|
+
...(checkpoint ? { checkpoint } : {}),
|
|
54
|
+
...(closedBy ? { closedBy } : {}),
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
export function persistCrashStateAll(daemon, error) {
|
|
58
|
+
for (const [name, org] of daemon.orgs) {
|
|
59
|
+
try {
|
|
60
|
+
const p = join(daemon.root, ORG_DIR, name, 'runtime.json');
|
|
61
|
+
// Capture separately from the write below: a throw here (e.g. a
|
|
62
|
+
// cyclic structure in roleState reaching generateChecksum) must not
|
|
63
|
+
// suppress the base crash record, which is the actually-important
|
|
64
|
+
// best-effort write this method exists for.
|
|
65
|
+
let checkpoint;
|
|
66
|
+
try {
|
|
67
|
+
checkpoint = captureCheckpoint(org, 'crashed');
|
|
68
|
+
}
|
|
69
|
+
catch {
|
|
70
|
+
/* best effort — proceed without a checkpoint */
|
|
71
|
+
}
|
|
72
|
+
// C4: atomic write — crash handler is the most likely place to hit
|
|
73
|
+
// a partial write since the process is mid-teardown.
|
|
74
|
+
writeJsonFileAtomic(p, {
|
|
75
|
+
status: 'crashed',
|
|
76
|
+
run: org.run,
|
|
77
|
+
pid: process.pid,
|
|
78
|
+
updated: new Date().toISOString(),
|
|
79
|
+
closedBy: 'crash-handler',
|
|
80
|
+
...(checkpoint ? { checkpoint } : {}),
|
|
81
|
+
...(error ? { error } : {}),
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
catch {
|
|
85
|
+
/* best effort — filesystem may be unavailable */
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
function heartbeatPath(daemon) {
|
|
90
|
+
return join(daemon.root, '.monomind', 'serve-heartbeat.json');
|
|
91
|
+
}
|
|
92
|
+
export function writeHeartbeat(daemon) {
|
|
93
|
+
try {
|
|
94
|
+
const p = heartbeatPath(daemon);
|
|
95
|
+
mkdirSync(join(daemon.root, '.monomind'), { recursive: true });
|
|
96
|
+
// C4: atomic write — heartbeat corruption is how `org status` reports
|
|
97
|
+
// a phantom daemon after a crash.
|
|
98
|
+
writeJsonFileAtomic(p, {
|
|
99
|
+
pid: process.pid,
|
|
100
|
+
updatedAt: new Date().toISOString(),
|
|
101
|
+
running: daemon.listRunning(),
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
catch {
|
|
105
|
+
/* best effort */
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
export function clearHeartbeat(daemon) {
|
|
109
|
+
try {
|
|
110
|
+
unlinkSync(heartbeatPath(daemon));
|
|
111
|
+
}
|
|
112
|
+
catch {
|
|
113
|
+
/* already gone or never written */
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
//# sourceMappingURL=org-state-file.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"org-state-file.js","sourceRoot":"","sources":["../../../src/orgrt/org-state-file.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"org-stop.d.ts","sourceRoot":"","sources":["../../../src/orgrt/org-stop.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAQ7C,wBAAsB,OAAO,CAC3B,MAAM,EAAE,SAAS,EACjB,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GAC7C,OAAO,CAAC,IAAI,CAAC,CA4Bf"}
|