@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,274 @@
|
|
|
1
|
+
// packages/@monomind/cli/src/commands/org-control.ts
|
|
2
|
+
//
|
|
3
|
+
// Shared org helpers used across the `org` subcommand modules: org-name
|
|
4
|
+
// validation, org config discovery, the stop/reload/pause control files, and
|
|
5
|
+
// run/serve-daemon liveness checks.
|
|
6
|
+
import { existsSync, readdirSync, readFileSync, rmSync, statSync } from 'node:fs';
|
|
7
|
+
import { join } from 'node:path';
|
|
8
|
+
import { ORG_DIR, OrgDefSchema } from '../orgrt/types.js';
|
|
9
|
+
import { output } from '../output.js';
|
|
10
|
+
const log = (text) => {
|
|
11
|
+
console.log(text);
|
|
12
|
+
};
|
|
13
|
+
/** Org names are used to build filesystem paths under .monomind/orgs — reject
|
|
14
|
+
* anything that isn't a plain identifier to prevent path traversal (e.g.
|
|
15
|
+
* `monomind org stop '../../../../tmp/x'`). */
|
|
16
|
+
export const ORG_NAME_RE = /^[a-z0-9][a-z0-9_-]*$/i;
|
|
17
|
+
export function validateOrgName(name) {
|
|
18
|
+
if (!name)
|
|
19
|
+
return { ok: false, result: { success: false, message: 'org name required' } };
|
|
20
|
+
if (!ORG_NAME_RE.test(name)) {
|
|
21
|
+
log(output.error(`Invalid org name: ${name}`));
|
|
22
|
+
return { ok: false, result: { success: false, message: 'invalid org name' } };
|
|
23
|
+
}
|
|
24
|
+
return { ok: true, name };
|
|
25
|
+
}
|
|
26
|
+
/** Suffixes of org-internal artifact files (state/goals/threads/etc) that
|
|
27
|
+
* share the `<org>.json`/`.jsonl` naming pattern with the org's own config
|
|
28
|
+
* file. Single source of truth for both listOrgConfigFiles() (which must
|
|
29
|
+
* exclude them when discovering real org configs) and deleteAction (which
|
|
30
|
+
* must remove all of them when deleting an org). */
|
|
31
|
+
export const ORG_ARTIFACT_SUFFIXES = [
|
|
32
|
+
'-state',
|
|
33
|
+
'-goals',
|
|
34
|
+
'-threads',
|
|
35
|
+
'-activity',
|
|
36
|
+
'-approvals',
|
|
37
|
+
'-members',
|
|
38
|
+
'-secrets',
|
|
39
|
+
'-budgets',
|
|
40
|
+
'-routines',
|
|
41
|
+
'-issues',
|
|
42
|
+
'-projects',
|
|
43
|
+
'-workspaces',
|
|
44
|
+
'-worktrees',
|
|
45
|
+
'-environments',
|
|
46
|
+
'-plugins',
|
|
47
|
+
'-adapters',
|
|
48
|
+
'-join-requests',
|
|
49
|
+
'-bootstrap',
|
|
50
|
+
'-project-workspaces',
|
|
51
|
+
'-approval-comments',
|
|
52
|
+
'-runstate',
|
|
53
|
+
'-skills',
|
|
54
|
+
];
|
|
55
|
+
export function listOrgConfigFiles(orgsDir) {
|
|
56
|
+
// endsWith, not includes: substring matching hid legitimate orgs whose NAME
|
|
57
|
+
// merely contains an artifact suffix anywhere (e.g. "state-machine.json",
|
|
58
|
+
// "issues-triage.json") — and anything hidden here is also invisible to
|
|
59
|
+
// run/list/serve while `org delete <sibling>` would still remove its files.
|
|
60
|
+
//
|
|
61
|
+
// ORG_NAME_RE on the stem (#309): a file is only an org config if its stem
|
|
62
|
+
// is a name an org could actually have. Otherwise any stray `.json` in the
|
|
63
|
+
// orgs dir (a tool's `.mcp.json`, `.DS_Store.json`, ...) becomes a phantom
|
|
64
|
+
// org that `org list` reports but validateOrgName rejects everywhere else.
|
|
65
|
+
// This subsumes the old `._` AppleDouble check (a leading dot fails the
|
|
66
|
+
// pattern) since a leading `.` doesn't match the required first character.
|
|
67
|
+
//
|
|
68
|
+
// A valid-looking stem isn't enough (#309 follow-up): a same-directory
|
|
69
|
+
// tool config can still pass ORG_NAME_RE (e.g. `toolconfig.json`). When a
|
|
70
|
+
// candidate parses as JSON, also require it to carry the one field every
|
|
71
|
+
// org config schema requires (OrgDefSchema's `name`) before calling it an
|
|
72
|
+
// org, so an unrelated tool config is skipped rather than surfaced as one.
|
|
73
|
+
// A file that fails to parse at all is left in the list on purpose: that's
|
|
74
|
+
// a real org config corrupted on disk, and callers like `org validate`
|
|
75
|
+
// (no name given) and `org list` already detect and report that case
|
|
76
|
+
// (invalid-config / validation failure) rather than treating it as healthy
|
|
77
|
+
// — silently dropping it here would hide the corruption instead.
|
|
78
|
+
return readdirSync(orgsDir).filter((f) => {
|
|
79
|
+
if (!f.endsWith('.json') ||
|
|
80
|
+
f.endsWith('.v1.json') ||
|
|
81
|
+
ORG_ARTIFACT_SUFFIXES.some((suf) => f.endsWith(`${suf}.json`)) ||
|
|
82
|
+
!ORG_NAME_RE.test(f.slice(0, -'.json'.length))) {
|
|
83
|
+
return false;
|
|
84
|
+
}
|
|
85
|
+
let parsed;
|
|
86
|
+
try {
|
|
87
|
+
parsed = JSON.parse(readFileSync(join(orgsDir, f), 'utf8'));
|
|
88
|
+
}
|
|
89
|
+
catch {
|
|
90
|
+
return true;
|
|
91
|
+
}
|
|
92
|
+
return OrgDefSchema.pick({ name: true }).safeParse(parsed).success;
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
/** Remove a lingering stopfile so a fresh `org run` doesn't self-terminate. */
|
|
96
|
+
export const clearStopfile = (cwd, name) => {
|
|
97
|
+
rmSync(join(cwd, ORG_DIR, name, 'stop'), { force: true });
|
|
98
|
+
};
|
|
99
|
+
/** Remove a lingering reload request so a fresh `org run` doesn't apply it on
|
|
100
|
+
* its first tick. One is left behind when a previous run's stop and reload
|
|
101
|
+
* landed in the same tick: the stop ends the wait before the reload poll runs. */
|
|
102
|
+
export const clearReloadfile = (cwd, name) => {
|
|
103
|
+
rmSync(join(cwd, ORG_DIR, name, 'reload'), { force: true });
|
|
104
|
+
};
|
|
105
|
+
/** Drop stop/reload requests left behind by a previous run, for every org
|
|
106
|
+
* `org serve` serves. #264: runAction clears these before its wait loop, but
|
|
107
|
+
* serveAction started polling with whatever was on disk — so an `org stop`
|
|
108
|
+
* that landed after the last daemon exited stopped the next daemon's org
|
|
109
|
+
* seconds into its run, and a leftover `org reload` was applied to a
|
|
110
|
+
* definition nobody had touched.
|
|
111
|
+
*
|
|
112
|
+
* Scope is the org config files, not `daemon.listRunning()` (what
|
|
113
|
+
* pollStopfiles/pollReloadfiles walk): nothing is running yet at startup, so
|
|
114
|
+
* sweeping by that would sweep nothing. Called before the first org can
|
|
115
|
+
* start, so a request that arrives once serve is up is never discarded.
|
|
116
|
+
*
|
|
117
|
+
* Runfiles are deliberately left in place. `.../run` is not the same kind of
|
|
118
|
+
* leftover: runAction writes one only against a live daemon and retracts it
|
|
119
|
+
* itself when nothing consumes it within 15s, and it reads the file's
|
|
120
|
+
* disappearance as "the daemon took the run". Deleting one here would report
|
|
121
|
+
* success to a waiting `org run` and start nothing — the silent loss that ack
|
|
122
|
+
* loop exists to prevent. A stale runfile at worst starts an org the operator
|
|
123
|
+
* did ask for; pollRunfiles already no-ops on one that is running.
|
|
124
|
+
*
|
|
125
|
+
* Returns the orgs it cleared something for. */
|
|
126
|
+
export const clearStaleControlFiles = (cwd) => {
|
|
127
|
+
const orgDir = join(cwd, ORG_DIR);
|
|
128
|
+
if (!existsSync(orgDir))
|
|
129
|
+
return [];
|
|
130
|
+
const cleared = [];
|
|
131
|
+
for (const f of listOrgConfigFiles(orgDir)) {
|
|
132
|
+
const name = f.replace(/\.json$/, '');
|
|
133
|
+
const stale = ['stop', 'reload'].filter((kind) => existsSync(join(orgDir, name, kind)));
|
|
134
|
+
if (!stale.length)
|
|
135
|
+
continue;
|
|
136
|
+
clearStopfile(cwd, name);
|
|
137
|
+
clearReloadfile(cwd, name);
|
|
138
|
+
log(output.warning(`org ${name}: discarding stale ${stale.join(' and ')} request left by a previous run`));
|
|
139
|
+
cleared.push(name);
|
|
140
|
+
}
|
|
141
|
+
return cleared;
|
|
142
|
+
};
|
|
143
|
+
/** True when a pause sentinel exists for an org. */
|
|
144
|
+
export const isOrgPaused = (cwd, name) => existsSync(join(cwd, ORG_DIR, name, 'pause'));
|
|
145
|
+
export const clearPausefile = (cwd, name) => {
|
|
146
|
+
rmSync(join(cwd, ORG_DIR, name, 'pause'), { force: true });
|
|
147
|
+
};
|
|
148
|
+
/** PID of a live `org serve` daemon for this project, or null.
|
|
149
|
+
*
|
|
150
|
+
* The heartbeat file is written every 30s and removed on clean exit, but a
|
|
151
|
+
* SIGKILLed daemon leaves it behind — so liveness is confirmed against the pid
|
|
152
|
+
* itself, not the file's presence. A stale heartbeat must not make `org run`
|
|
153
|
+
* post a runfile nobody will ever read. */
|
|
154
|
+
export function liveServeDaemonPid(cwd) {
|
|
155
|
+
try {
|
|
156
|
+
const hb = JSON.parse(readFileSync(join(cwd, '.monomind', 'serve-heartbeat.json'), 'utf8'));
|
|
157
|
+
if (typeof hb.pid !== 'number' || hb.pid === process.pid)
|
|
158
|
+
return null;
|
|
159
|
+
// Freshness as well as liveness. The daemon beats every 30s, so a stamp
|
|
160
|
+
// older than a few beats means it is gone or wedged — and a pid alone can
|
|
161
|
+
// be recycled onto an unrelated process, which would send the runfile to
|
|
162
|
+
// something that will never read it.
|
|
163
|
+
const age = Date.now() - Date.parse(hb.updatedAt ?? '');
|
|
164
|
+
if (!Number.isFinite(age) || age > 3 * 60_000)
|
|
165
|
+
return null;
|
|
166
|
+
process.kill(hb.pid, 0); // throws if the process is gone
|
|
167
|
+
return hb.pid;
|
|
168
|
+
}
|
|
169
|
+
catch {
|
|
170
|
+
return null;
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
/** How long a run's own event log counts as proof of life after its last
|
|
174
|
+
* appended event. Deliberately generous: calling a live run "crashed" sends
|
|
175
|
+
* the operator to `org mark-complete`, which closes out a run that is still
|
|
176
|
+
* working, while being slow to notice a genuinely dead one costs nothing. */
|
|
177
|
+
const RUN_ACTIVITY_WINDOW_MS = 10 * 60_000;
|
|
178
|
+
/** Liveness verdict for one org's runtime.json record.
|
|
179
|
+
*
|
|
180
|
+
* #274: a single `process.kill(pid, 0)` probe used to be the whole verdict, so
|
|
181
|
+
* a run whose recorded pid had gone stale — the orchestrating process was
|
|
182
|
+
* restarted or re-attached without runtime.json being rewritten — was reported
|
|
183
|
+
* as "crashed" while its roles were actively exchanging messages, with a
|
|
184
|
+
* `mark-complete` suggestion that would have closed out live work. The pid is
|
|
185
|
+
* still the first and best signal; when it is gone, two independent signs of
|
|
186
|
+
* life are cross-checked before declaring a crash: a fresh `org serve`
|
|
187
|
+
* heartbeat that still lists this org, and the run's own event log still
|
|
188
|
+
* growing.
|
|
189
|
+
*
|
|
190
|
+
* Unchanged from before: a record that already says 'crashed' (including one
|
|
191
|
+
* written by the process-level crash handler) stays crashed — that is a
|
|
192
|
+
* recorded fact, not an inference. */
|
|
193
|
+
export function classifyRun(cwd, org, state, now = Date.now()) {
|
|
194
|
+
if (state.status === 'crashed')
|
|
195
|
+
return { state: 'crashed' };
|
|
196
|
+
const busAge = () => {
|
|
197
|
+
if (!state.run)
|
|
198
|
+
return null;
|
|
199
|
+
try {
|
|
200
|
+
const age = now - statSync(join(cwd, ORG_DIR, org, state.run, 'bus.jsonl')).mtimeMs;
|
|
201
|
+
return age >= 0 ? age : 0;
|
|
202
|
+
}
|
|
203
|
+
catch {
|
|
204
|
+
return null;
|
|
205
|
+
}
|
|
206
|
+
};
|
|
207
|
+
const live = (evidence) => {
|
|
208
|
+
const age = busAge();
|
|
209
|
+
return { state: age !== null && age > RUN_ACTIVITY_WINDOW_MS ? 'idle' : 'running', evidence };
|
|
210
|
+
};
|
|
211
|
+
if (state.pid) {
|
|
212
|
+
try {
|
|
213
|
+
process.kill(state.pid, 0);
|
|
214
|
+
return live('pid');
|
|
215
|
+
}
|
|
216
|
+
catch {
|
|
217
|
+
/* recorded pid is gone — fall through to the cross-checks */
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
else {
|
|
221
|
+
// No pid was ever recorded; there is nothing to call stale.
|
|
222
|
+
return live('pid');
|
|
223
|
+
}
|
|
224
|
+
try {
|
|
225
|
+
const hb = JSON.parse(readFileSync(join(cwd, '.monomind', 'serve-heartbeat.json'), 'utf8'));
|
|
226
|
+
const age = now - Date.parse(hb.updatedAt ?? '');
|
|
227
|
+
if (typeof hb.pid === 'number' &&
|
|
228
|
+
Number.isFinite(age) &&
|
|
229
|
+
age <= 3 * 60_000 &&
|
|
230
|
+
(hb.running ?? []).includes(org)) {
|
|
231
|
+
process.kill(hb.pid, 0); // throws if that daemon is gone too
|
|
232
|
+
return live('daemon-heartbeat');
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
catch {
|
|
236
|
+
/* no heartbeat file, unparseable, or its daemon is gone as well */
|
|
237
|
+
}
|
|
238
|
+
const age = busAge();
|
|
239
|
+
if (age !== null && age <= RUN_ACTIVITY_WINDOW_MS)
|
|
240
|
+
return { state: 'running', evidence: 'run-activity' };
|
|
241
|
+
return { state: 'crashed' };
|
|
242
|
+
}
|
|
243
|
+
/** Mutual-exclusion check for `org serve` startup.
|
|
244
|
+
*
|
|
245
|
+
* Two `org serve` processes started against the same project root have zero
|
|
246
|
+
* visibility into each other — each builds its own in-memory `OrgDaemon` and
|
|
247
|
+
* independently decides which orgs are "due now", so both can call
|
|
248
|
+
* `daemon.startOrg(name)` for the same org and have both processes write to
|
|
249
|
+
* the same on-disk state (runtime.json, decisions.jsonl, history.jsonl,
|
|
250
|
+
* .mail/) at once. `liveServeDaemonPid` already knows how to read this
|
|
251
|
+
* project's serve-heartbeat.json and tell a live daemon's heartbeat from a
|
|
252
|
+
* stale one (dead pid, or aged past a few missed 30s beats) — reused here
|
|
253
|
+
* as the actual pidfile lock, rather than inventing a second file, since it
|
|
254
|
+
* already IS a pidfile (pid + timestamp, written at startup and every
|
|
255
|
+
* heartbeat, removed on clean shutdown by `daemon.clearHeartbeat()`).
|
|
256
|
+
*
|
|
257
|
+
* Call this before the daemon/server/scheduler are constructed, so a
|
|
258
|
+
* refusal never opens a port, binds a broker lease, or touches any org's
|
|
259
|
+
* state. */
|
|
260
|
+
export function checkServeLock(cwd) {
|
|
261
|
+
const owner = liveServeDaemonPid(cwd);
|
|
262
|
+
if (owner != null)
|
|
263
|
+
return { ok: false, pid: owner };
|
|
264
|
+
// liveServeDaemonPid() has already ruled out a live owner — any heartbeat
|
|
265
|
+
// file still on disk here is stale (dead pid, or a SIGKILLed daemon that
|
|
266
|
+
// never reached clearHeartbeat()). Remove it so it can't be misread by
|
|
267
|
+
// `org run`/`org status` before this daemon's own writeHeartbeat() lands.
|
|
268
|
+
const heartbeatPath = join(cwd, '.monomind', 'serve-heartbeat.json');
|
|
269
|
+
const staleHeartbeatRemoved = existsSync(heartbeatPath);
|
|
270
|
+
if (staleHeartbeatRemoved)
|
|
271
|
+
rmSync(heartbeatPath, { force: true });
|
|
272
|
+
return { ok: true, staleHeartbeatRemoved };
|
|
273
|
+
}
|
|
274
|
+
//# sourceMappingURL=org-control.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"org-control.js","sourceRoot":"","sources":["../../../src/commands/org-control.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { CommandContext, CommandResult } from '../types.js';
|
|
2
|
+
export declare const stopAction: (ctx: CommandContext) => Promise<CommandResult>;
|
|
3
|
+
export declare const pauseAction: (ctx: CommandContext) => Promise<CommandResult>;
|
|
4
|
+
export declare const resumeAction: (ctx: CommandContext) => Promise<CommandResult>;
|
|
5
|
+
export declare const reloadAction: (ctx: CommandContext) => Promise<CommandResult>;
|
|
6
|
+
export declare const statusAction: (ctx: CommandContext) => Promise<CommandResult>;
|
|
7
|
+
//# sourceMappingURL=org-lifecycle.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"org-lifecycle.d.ts","sourceRoot":"","sources":["../../../src/commands/org-lifecycle.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAajE,eAAO,MAAM,UAAU,QAAe,cAAc,KAAG,OAAO,CAAC,aAAa,CAkD3E,CAAC;AAEF,eAAO,MAAM,WAAW,QAAe,cAAc,KAAG,OAAO,CAAC,aAAa,CAoB5E,CAAC;AAEF,eAAO,MAAM,YAAY,QAAe,cAAc,KAAG,OAAO,CAAC,aAAa,CAW7E,CAAC;AAEF,eAAO,MAAM,YAAY,QAAe,cAAc,KAAG,OAAO,CAAC,aAAa,CAS7E,CAAC;AAEF,eAAO,MAAM,YAAY,QAAe,cAAc,KAAG,OAAO,CAAC,aAAa,CAuN7E,CAAC"}
|
|
@@ -0,0 +1,298 @@
|
|
|
1
|
+
// packages/@monomind/cli/src/commands/org-lifecycle.ts
|
|
2
|
+
//
|
|
3
|
+
// `monomind org stop | pause | resume | reload | status` — control-file
|
|
4
|
+
// requests to a running org and its runtime-state report.
|
|
5
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
|
|
6
|
+
import { join } from 'node:path';
|
|
7
|
+
import { readIdleStatus } from '../orgrt/idle-deadline.js';
|
|
8
|
+
import { describeRunOutcome, readHistory, readRunEvents, summarizeRun, utcTime, } from '../orgrt/reporting.js';
|
|
9
|
+
import { ORG_DIR } from '../orgrt/types.js';
|
|
10
|
+
import { output } from '../output.js';
|
|
11
|
+
import { classifyRun, clearPausefile, isOrgPaused, listOrgConfigFiles, validateOrgName, } from './org-control.js';
|
|
12
|
+
const log = (text) => {
|
|
13
|
+
console.log(text);
|
|
14
|
+
};
|
|
15
|
+
export const stopAction = async (ctx) => {
|
|
16
|
+
const validated = validateOrgName(ctx.args[0]);
|
|
17
|
+
if (!validated.ok)
|
|
18
|
+
return validated.result;
|
|
19
|
+
const name = validated.name;
|
|
20
|
+
if (!existsSync(join(ctx.cwd, ORG_DIR, `${name}.json`))) {
|
|
21
|
+
log(output.error(`Org not found: ${name}`));
|
|
22
|
+
return { success: false, message: 'org not found' };
|
|
23
|
+
}
|
|
24
|
+
// The stopfile is only meaningful to a process that polls it (`org run` and, since
|
|
25
|
+
// this fix, `org serve`). Writing it for an org that nothing is running was a silent
|
|
26
|
+
// no-op that still reported "daemon exits within 2s" — say what's actually true.
|
|
27
|
+
let rt;
|
|
28
|
+
try {
|
|
29
|
+
rt = JSON.parse(readFileSync(join(ctx.cwd, ORG_DIR, name, 'runtime.json'), 'utf8'));
|
|
30
|
+
}
|
|
31
|
+
catch {
|
|
32
|
+
/* never run */
|
|
33
|
+
}
|
|
34
|
+
if (rt?.status !== 'running') {
|
|
35
|
+
log(output.warning(`Org "${name}" is not running (runtime state: ${rt?.status ?? 'never run'}) — nothing to stop.`));
|
|
36
|
+
return { success: false, message: 'org not running' };
|
|
37
|
+
}
|
|
38
|
+
if (rt.pid) {
|
|
39
|
+
let alive = true;
|
|
40
|
+
try {
|
|
41
|
+
process.kill(rt.pid, 0);
|
|
42
|
+
}
|
|
43
|
+
catch {
|
|
44
|
+
alive = false;
|
|
45
|
+
}
|
|
46
|
+
if (!alive) {
|
|
47
|
+
log(output.warning(`Org "${name}" is not running — runtime.json says running but pid ${rt.pid} is gone (crashed daemon).`));
|
|
48
|
+
log(output.info(`Clear the stale record with: monomind org mark-complete ${name}`));
|
|
49
|
+
return { success: false, message: 'org crashed — use mark-complete' };
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
mkdirSync(join(ctx.cwd, ORG_DIR, name), { recursive: true });
|
|
53
|
+
writeFileSync(join(ctx.cwd, ORG_DIR, name, 'stop'), new Date().toISOString());
|
|
54
|
+
log(output.info(`Stop requested for "${name}" (pid ${rt.pid}) — the daemon picks it up within ~2s.`));
|
|
55
|
+
return { success: true, message: `stop requested for ${name} (daemon exits within 2s)` };
|
|
56
|
+
};
|
|
57
|
+
export const pauseAction = async (ctx) => {
|
|
58
|
+
const validated = validateOrgName(ctx.args[0]);
|
|
59
|
+
if (!validated.ok)
|
|
60
|
+
return validated.result;
|
|
61
|
+
const name = validated.name;
|
|
62
|
+
if (!existsSync(join(ctx.cwd, ORG_DIR, `${name}.json`))) {
|
|
63
|
+
log(output.error(`Org not found: ${name}`));
|
|
64
|
+
return { success: false, message: 'org not found' };
|
|
65
|
+
}
|
|
66
|
+
if (isOrgPaused(ctx.cwd, name)) {
|
|
67
|
+
log(output.warning(`Org "${name}" is already paused.`));
|
|
68
|
+
return { success: true, message: 'already paused' };
|
|
69
|
+
}
|
|
70
|
+
mkdirSync(join(ctx.cwd, ORG_DIR, name), { recursive: true });
|
|
71
|
+
writeFileSync(join(ctx.cwd, ORG_DIR, name, 'pause'), new Date().toISOString());
|
|
72
|
+
log(output.info(`Org "${name}" paused — current turns will finish, no new cycles will start. Resume with: monomind org resume ${name}`));
|
|
73
|
+
return { success: true, message: `org ${name} paused` };
|
|
74
|
+
};
|
|
75
|
+
export const resumeAction = async (ctx) => {
|
|
76
|
+
const validated = validateOrgName(ctx.args[0]);
|
|
77
|
+
if (!validated.ok)
|
|
78
|
+
return validated.result;
|
|
79
|
+
const name = validated.name;
|
|
80
|
+
if (!isOrgPaused(ctx.cwd, name)) {
|
|
81
|
+
log(output.warning(`Org "${name}" is not paused.`));
|
|
82
|
+
return { success: true, message: 'not paused' };
|
|
83
|
+
}
|
|
84
|
+
clearPausefile(ctx.cwd, name);
|
|
85
|
+
log(output.info(`Org "${name}" resumed — next scheduled tick will start a cycle.`));
|
|
86
|
+
return { success: true, message: `org ${name} resumed` };
|
|
87
|
+
};
|
|
88
|
+
export const reloadAction = async (ctx) => {
|
|
89
|
+
const validated = validateOrgName(ctx.args[0]);
|
|
90
|
+
if (!validated.ok)
|
|
91
|
+
return validated.result;
|
|
92
|
+
const name = validated.name;
|
|
93
|
+
// The reload signal is a file the running daemon polls — same pattern as stop/pause.
|
|
94
|
+
mkdirSync(join(ctx.cwd, ORG_DIR, name), { recursive: true });
|
|
95
|
+
writeFileSync(join(ctx.cwd, ORG_DIR, name, 'reload'), new Date().toISOString());
|
|
96
|
+
log(output.info(`Reload requested for "${name}" — the daemon picks it up within ~2s.`));
|
|
97
|
+
return { success: true, message: `reload requested for ${name}` };
|
|
98
|
+
};
|
|
99
|
+
export const statusAction = async (ctx) => {
|
|
100
|
+
let name;
|
|
101
|
+
if (ctx.args[0]) {
|
|
102
|
+
const validated = validateOrgName(ctx.args[0]);
|
|
103
|
+
if (!validated.ok)
|
|
104
|
+
return validated.result;
|
|
105
|
+
name = validated.name;
|
|
106
|
+
// A named org that doesn't exist must error, not report "never run" with exit 0.
|
|
107
|
+
if (!existsSync(join(ctx.cwd, ORG_DIR, `${name}.json`))) {
|
|
108
|
+
log(output.error(`Org not found: ${name}`));
|
|
109
|
+
return { success: false, message: 'org not found' };
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
// Protocol JSON mode (agent-exec-protocol.md §7.2): compact runtime state
|
|
113
|
+
// per org — the same liveness rule as the human path (a 'running' record
|
|
114
|
+
// whose pid is gone is a crash, not a running org).
|
|
115
|
+
if (ctx.flags.format === 'json') {
|
|
116
|
+
const orgDir = join(ctx.cwd, ORG_DIR);
|
|
117
|
+
const targets = name
|
|
118
|
+
? [name]
|
|
119
|
+
: existsSync(orgDir)
|
|
120
|
+
? listOrgConfigFiles(orgDir).map((f) => f.replace(/\.json$/, ''))
|
|
121
|
+
: [];
|
|
122
|
+
const readState = (t) => {
|
|
123
|
+
const rt = join(orgDir, t, 'runtime.json');
|
|
124
|
+
if (!existsSync(rt))
|
|
125
|
+
return { name: t, status: 'never run' };
|
|
126
|
+
try {
|
|
127
|
+
const st = JSON.parse(readFileSync(rt, 'utf8'));
|
|
128
|
+
let status = st.status ?? 'never run';
|
|
129
|
+
// #274: an 'idle' run is still a running run to every protocol
|
|
130
|
+
// consumer — only a genuine crash changes the reported status.
|
|
131
|
+
if (status === 'running' || status === 'crashed') {
|
|
132
|
+
if (classifyRun(ctx.cwd, t, st).state === 'crashed')
|
|
133
|
+
status = 'crashed';
|
|
134
|
+
}
|
|
135
|
+
return {
|
|
136
|
+
name: t,
|
|
137
|
+
status,
|
|
138
|
+
run: st.run,
|
|
139
|
+
pid: st.pid,
|
|
140
|
+
paused: isOrgPaused(ctx.cwd, t),
|
|
141
|
+
abandoned_roles: st.abandonedRoles ?? [],
|
|
142
|
+
closed_by: st.closedBy,
|
|
143
|
+
error: st.error,
|
|
144
|
+
// #293: present only when the run's cross-run memory was not stored.
|
|
145
|
+
memory_error: st.memoryError,
|
|
146
|
+
// #296: when the idle watchdog will stop a running org, or why it won't.
|
|
147
|
+
...(status === 'running' ? readIdleStatus(ctx.cwd, t, st.run) : {}),
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
catch {
|
|
151
|
+
return { name: t, status: 'unreadable-runtime' };
|
|
152
|
+
}
|
|
153
|
+
};
|
|
154
|
+
const items = targets.map(readState);
|
|
155
|
+
// Named org → bare singleton; no name → list envelope (protocol §7.1).
|
|
156
|
+
process.stdout.write(`${JSON.stringify(name ? { v: 1, ...items[0] } : { v: 1, items })}\n`);
|
|
157
|
+
return { success: true };
|
|
158
|
+
}
|
|
159
|
+
const orgDir = join(ctx.cwd, ORG_DIR);
|
|
160
|
+
const targets = name
|
|
161
|
+
? [name]
|
|
162
|
+
: existsSync(orgDir)
|
|
163
|
+
? listOrgConfigFiles(orgDir).map((f) => f.replace(/\.json$/, ''))
|
|
164
|
+
: [];
|
|
165
|
+
for (const t of targets) {
|
|
166
|
+
const rt = join(orgDir, t, 'runtime.json');
|
|
167
|
+
let state = {
|
|
168
|
+
status: 'never run',
|
|
169
|
+
};
|
|
170
|
+
if (existsSync(rt)) {
|
|
171
|
+
try {
|
|
172
|
+
state = JSON.parse(readFileSync(rt, 'utf8'));
|
|
173
|
+
}
|
|
174
|
+
catch (err) {
|
|
175
|
+
log(output.warning(`${t}: could not read runtime.json (${err instanceof Error ? err.message : 'corrupt/truncated file'})`));
|
|
176
|
+
continue;
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
// A "running" record with no sign of life left means the daemon died
|
|
180
|
+
// without its stopOrg cleanup — surface that instead of reporting it as
|
|
181
|
+
// still running. A stale pid alone is NOT that proof (#274).
|
|
182
|
+
let liveness;
|
|
183
|
+
if (state.status === 'running' || state.status === 'crashed') {
|
|
184
|
+
liveness = classifyRun(ctx.cwd, t, state);
|
|
185
|
+
if (liveness.state === 'crashed') {
|
|
186
|
+
let heartbeatHint = '';
|
|
187
|
+
try {
|
|
188
|
+
const hb = JSON.parse(readFileSync(join(ctx.cwd, '.monomind', 'serve-heartbeat.json'), 'utf8'));
|
|
189
|
+
heartbeatHint = ` (last heartbeat: ${hb.updatedAt})`;
|
|
190
|
+
}
|
|
191
|
+
catch {
|
|
192
|
+
/* no heartbeat file — daemon predates this change or was already cleaned up */
|
|
193
|
+
}
|
|
194
|
+
const closedBy = state.closedBy;
|
|
195
|
+
const label = closedBy === 'crash-handler'
|
|
196
|
+
? 'crashed (caught by crash handler)'
|
|
197
|
+
: `crashed (runtime.json says ${state.status} but pid ${state.pid} is gone and the run has been silent)`;
|
|
198
|
+
log(output.warning(`${t}: ${label}${heartbeatHint}${state.run ? ` — run ${state.run}` : ''} — close it out with "monomind org mark-complete ${t}"`));
|
|
199
|
+
continue;
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
const paused = isOrgPaused(ctx.cwd, t);
|
|
203
|
+
const statusLabel = state.status === 'running'
|
|
204
|
+
? paused
|
|
205
|
+
? 'running (PAUSED)'
|
|
206
|
+
: liveness?.state === 'idle'
|
|
207
|
+
? 'running (idle)'
|
|
208
|
+
: 'running'
|
|
209
|
+
: state.status;
|
|
210
|
+
// Say when the recorded pid is no longer the thing proving it alive, so a
|
|
211
|
+
// pid that doesn't match any process isn't a silent mystery.
|
|
212
|
+
const staleHint = liveness?.evidence && liveness.evidence !== 'pid'
|
|
213
|
+
? ` — recorded pid ${state.pid} is stale; still live per ${liveness.evidence}`
|
|
214
|
+
: '';
|
|
215
|
+
const line = `${t}: ${statusLabel}${state.run ? ` (run ${state.run}, pid ${state.pid})` : ''}${staleHint}`;
|
|
216
|
+
// A role that never spawned is a silent capability hole — an org with no
|
|
217
|
+
// tester still reports a clean "running". Say it on the status line.
|
|
218
|
+
if (state.abandonedRoles?.length) {
|
|
219
|
+
log(output.warning(`${line} — DEGRADED: ${state.abandonedRoles.length} role(s) never spawned: ${state.abandonedRoles.join(', ')}`));
|
|
220
|
+
}
|
|
221
|
+
else {
|
|
222
|
+
log(output.info(line));
|
|
223
|
+
}
|
|
224
|
+
// #293: cross-run memory that was never written. Without this the only
|
|
225
|
+
// symptom is org_recall coming back empty runs later, which points nowhere
|
|
226
|
+
// near a memory backend that failed to load.
|
|
227
|
+
const memoryError = state.memoryError;
|
|
228
|
+
if (memoryError) {
|
|
229
|
+
log(output.warning(` org memory: last run was NOT saved (${memoryError}) — org_recall will not find it`));
|
|
230
|
+
}
|
|
231
|
+
// Enriched progress for running orgs
|
|
232
|
+
if (state.status === 'running' && state.run) {
|
|
233
|
+
// #296: when the idle watchdog will stop this org, or why it won't.
|
|
234
|
+
// Say nothing for 'unknown' (no record yet) rather than a misleading zero.
|
|
235
|
+
const idle = readIdleStatus(ctx.cwd, t, state.run);
|
|
236
|
+
if (idle.idle_stop_at) {
|
|
237
|
+
log(` idle stop: in ${fmtDuration(idle.idle_stop_in_seconds * 1000)} (at ${utcTime(Date.parse(idle.idle_stop_at))})`);
|
|
238
|
+
}
|
|
239
|
+
else if (idle.idle_hold === 'disabled') {
|
|
240
|
+
log(` idle watchdog: disabled`);
|
|
241
|
+
}
|
|
242
|
+
else if (idle.idle_hold && idle.idle_hold !== 'unknown') {
|
|
243
|
+
const until = idle.idle_hold_until
|
|
244
|
+
? ` until ${utcTime(Date.parse(idle.idle_hold_until))}`
|
|
245
|
+
: '';
|
|
246
|
+
log(` idle stop: held — ${idle.idle_hold}${until}`);
|
|
247
|
+
}
|
|
248
|
+
const events = readRunEvents(ctx.cwd, t, state.run);
|
|
249
|
+
if (events.length) {
|
|
250
|
+
const summary = summarizeRun(events);
|
|
251
|
+
const elapsed = summary.startedAt ? Date.now() - summary.startedAt : null;
|
|
252
|
+
const elapsedStr = elapsed !== null ? fmtDuration(elapsed) : '?';
|
|
253
|
+
const lastTs = events[events.length - 1].ts;
|
|
254
|
+
const quietMs = Date.now() - lastTs;
|
|
255
|
+
const quietStr = fmtDuration(quietMs);
|
|
256
|
+
const toolCalls = Object.values(summary.roles).reduce((a, r) => a + r.toolsAllowed + r.toolsDenied, 0);
|
|
257
|
+
const rolesUp = Object.keys(summary.roles).filter((r) => r !== '(system)').length;
|
|
258
|
+
log(` elapsed: ${elapsedStr} | events: ${summary.events} | messages: ${summary.messages} | tools: ${toolCalls}`);
|
|
259
|
+
log(` roles active: ${rolesUp} | tokens: ${fmtNum(summary.totalTokens)} | cost: $${summary.totalCostUsd.toFixed(2)}`);
|
|
260
|
+
log(` quiet since: ${utcTime(lastTs)} (${quietStr} ago)`);
|
|
261
|
+
if (summary.crashes.length)
|
|
262
|
+
log(output.warning(` crashes: ${summary.crashes.join(', ')}`));
|
|
263
|
+
}
|
|
264
|
+
// Previous cycle comparison from history
|
|
265
|
+
const history = readHistory(ctx.cwd, t);
|
|
266
|
+
const prev = history.filter((h) => h.run !== state.run).at(-1);
|
|
267
|
+
if (prev) {
|
|
268
|
+
const dur = prev.durationMs !== null ? fmtDuration(prev.durationMs) : '?';
|
|
269
|
+
// #302: never blindly "completed" — describeRunOutcome only says
|
|
270
|
+
// that for a genuine boss outcome, a real crash, or a bare manual
|
|
271
|
+
// stop; every automated stop path (idle-stop, failed-start, a boss
|
|
272
|
+
// restart giving up) reports its own real cause, with the runnable
|
|
273
|
+
// task count if work was left outstanding.
|
|
274
|
+
const outcome = describeRunOutcome(prev);
|
|
275
|
+
log(` prev cycle: ${dur}, ${outcome}, ${prev.events} events, ${fmtNum(prev.totalTokens)} tokens`);
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
return { success: true };
|
|
280
|
+
};
|
|
281
|
+
function fmtDuration(ms) {
|
|
282
|
+
const s = Math.floor(ms / 1000);
|
|
283
|
+
if (s < 60)
|
|
284
|
+
return `${s}s`;
|
|
285
|
+
const m = Math.floor(s / 60);
|
|
286
|
+
if (m < 60)
|
|
287
|
+
return `${m}m${s % 60}s`;
|
|
288
|
+
const h = Math.floor(m / 60);
|
|
289
|
+
return `${h}h${m % 60}m`;
|
|
290
|
+
}
|
|
291
|
+
function fmtNum(n) {
|
|
292
|
+
if (n >= 1_000_000)
|
|
293
|
+
return `${(n / 1_000_000).toFixed(1)}M`;
|
|
294
|
+
if (n >= 1_000)
|
|
295
|
+
return `${(n / 1_000).toFixed(1)}k`;
|
|
296
|
+
return String(n);
|
|
297
|
+
}
|
|
298
|
+
//# sourceMappingURL=org-lifecycle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"org-lifecycle.js","sourceRoot":"","sources":["../../../src/commands/org-lifecycle.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { CommandContext, CommandResult } from '../types.js';
|
|
2
|
+
export declare const testLoopAction: (ctx: CommandContext) => Promise<CommandResult>;
|
|
3
|
+
export declare const listAction: (ctx: CommandContext) => Promise<CommandResult>;
|
|
4
|
+
export declare const deleteAction: (ctx: CommandContext) => Promise<CommandResult>;
|
|
5
|
+
export declare const markCompleteAction: (ctx: CommandContext) => Promise<CommandResult>;
|
|
6
|
+
export declare const migrateAction: (ctx: CommandContext) => Promise<CommandResult>;
|
|
7
|
+
//# sourceMappingURL=org-manage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"org-manage.d.ts","sourceRoot":"","sources":["../../../src/commands/org-manage.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AA2BjE,eAAO,MAAM,cAAc,QAAe,cAAc,KAAG,OAAO,CAAC,aAAa,CAe/E,CAAC;AAIF,eAAO,MAAM,UAAU,QAAe,cAAc,KAAG,OAAO,CAAC,aAAa,CAuG3E,CAAC;AAEF,eAAO,MAAM,YAAY,QAAe,cAAc,KAAG,OAAO,CAAC,aAAa,CAoE7E,CAAC;AA0DF,eAAO,MAAM,kBAAkB,QAAe,cAAc,KAAG,OAAO,CAAC,aAAa,CA0GnF,CAAC;AAEF,eAAO,MAAM,aAAa,QAAe,cAAc,KAAG,OAAO,CAAC,aAAa,CA+B9E,CAAC"}
|