@monoes/monomindcli 2.16.13 → 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.
Files changed (171) hide show
  1. package/README.md +1 -1
  2. package/dist/src/commands/org-control.d.ts +117 -0
  3. package/dist/src/commands/org-control.d.ts.map +1 -0
  4. package/dist/src/commands/org-control.js +274 -0
  5. package/dist/src/commands/org-control.js.map +1 -0
  6. package/dist/src/commands/org-lifecycle.d.ts +7 -0
  7. package/dist/src/commands/org-lifecycle.d.ts.map +1 -0
  8. package/dist/src/commands/org-lifecycle.js +298 -0
  9. package/dist/src/commands/org-lifecycle.js.map +1 -0
  10. package/dist/src/commands/org-manage.d.ts +7 -0
  11. package/dist/src/commands/org-manage.d.ts.map +1 -0
  12. package/dist/src/commands/org-manage.js +357 -0
  13. package/dist/src/commands/org-manage.js.map +1 -0
  14. package/dist/src/commands/org-memory-command.d.ts +3 -0
  15. package/dist/src/commands/org-memory-command.d.ts.map +1 -0
  16. package/dist/src/commands/org-memory-command.js +178 -0
  17. package/dist/src/commands/org-memory-command.js.map +1 -0
  18. package/dist/src/commands/org-observe-approvals.d.ts +8 -0
  19. package/dist/src/commands/org-observe-approvals.d.ts.map +1 -0
  20. package/dist/src/commands/org-observe-approvals.js +211 -0
  21. package/dist/src/commands/org-observe-approvals.js.map +1 -0
  22. package/dist/src/commands/org-observe-checkpoint.d.ts +26 -0
  23. package/dist/src/commands/org-observe-checkpoint.d.ts.map +1 -0
  24. package/dist/src/commands/org-observe-checkpoint.js +180 -0
  25. package/dist/src/commands/org-observe-checkpoint.js.map +1 -0
  26. package/dist/src/commands/org-observe-config.d.ts +8 -0
  27. package/dist/src/commands/org-observe-config.d.ts.map +1 -0
  28. package/dist/src/commands/org-observe-config.js +160 -0
  29. package/dist/src/commands/org-observe-config.js.map +1 -0
  30. package/dist/src/commands/org-observe-gates.d.ts +4 -0
  31. package/dist/src/commands/org-observe-gates.d.ts.map +1 -0
  32. package/dist/src/commands/org-observe-gates.js +182 -0
  33. package/dist/src/commands/org-observe-gates.js.map +1 -0
  34. package/dist/src/commands/org-observe-inbox.d.ts +18 -0
  35. package/dist/src/commands/org-observe-inbox.d.ts.map +1 -0
  36. package/dist/src/commands/org-observe-inbox.js +154 -0
  37. package/dist/src/commands/org-observe-inbox.js.map +1 -0
  38. package/dist/src/commands/org-observe-logs.d.ts +31 -0
  39. package/dist/src/commands/org-observe-logs.d.ts.map +1 -0
  40. package/dist/src/commands/org-observe-logs.js +272 -0
  41. package/dist/src/commands/org-observe-logs.js.map +1 -0
  42. package/dist/src/commands/org-observe-questions.d.ts +8 -0
  43. package/dist/src/commands/org-observe-questions.d.ts.map +1 -0
  44. package/dist/src/commands/org-observe-questions.js +201 -0
  45. package/dist/src/commands/org-observe-questions.js.map +1 -0
  46. package/dist/src/commands/org-observe-report.d.ts +8 -0
  47. package/dist/src/commands/org-observe-report.d.ts.map +1 -0
  48. package/dist/src/commands/org-observe-report.js +366 -0
  49. package/dist/src/commands/org-observe-report.js.map +1 -0
  50. package/dist/src/commands/org-observe-shared.d.ts +20 -0
  51. package/dist/src/commands/org-observe-shared.d.ts.map +1 -0
  52. package/dist/src/commands/org-observe-shared.js +55 -0
  53. package/dist/src/commands/org-observe-shared.js.map +1 -0
  54. package/dist/src/commands/org-observe.d.ts +9 -101
  55. package/dist/src/commands/org-observe.d.ts.map +1 -1
  56. package/dist/src/commands/org-observe.js +12 -1675
  57. package/dist/src/commands/org-observe.js.map +1 -1
  58. package/dist/src/commands/org-poll.d.ts +57 -0
  59. package/dist/src/commands/org-poll.d.ts.map +1 -0
  60. package/dist/src/commands/org-poll.js +194 -0
  61. package/dist/src/commands/org-poll.js.map +1 -0
  62. package/dist/src/commands/org-run.d.ts +3 -0
  63. package/dist/src/commands/org-run.d.ts.map +1 -0
  64. package/dist/src/commands/org-run.js +449 -0
  65. package/dist/src/commands/org-run.js.map +1 -0
  66. package/dist/src/commands/org-serve.d.ts +19 -0
  67. package/dist/src/commands/org-serve.d.ts.map +1 -0
  68. package/dist/src/commands/org-serve.js +395 -0
  69. package/dist/src/commands/org-serve.js.map +1 -0
  70. package/dist/src/commands/org-subcommands-config.d.ts +8 -0
  71. package/dist/src/commands/org-subcommands-config.d.ts.map +1 -0
  72. package/dist/src/commands/org-subcommands-config.js +93 -0
  73. package/dist/src/commands/org-subcommands-config.js.map +1 -0
  74. package/dist/src/commands/org-subcommands-hil.d.ts +11 -0
  75. package/dist/src/commands/org-subcommands-hil.d.ts.map +1 -0
  76. package/dist/src/commands/org-subcommands-hil.js +216 -0
  77. package/dist/src/commands/org-subcommands-hil.js.map +1 -0
  78. package/dist/src/commands/org-subcommands-observe.d.ts +12 -0
  79. package/dist/src/commands/org-subcommands-observe.d.ts.map +1 -0
  80. package/dist/src/commands/org-subcommands-observe.js +249 -0
  81. package/dist/src/commands/org-subcommands-observe.js.map +1 -0
  82. package/dist/src/commands/org-subcommands-runtime.d.ts +12 -0
  83. package/dist/src/commands/org-subcommands-runtime.d.ts.map +1 -0
  84. package/dist/src/commands/org-subcommands-runtime.js +163 -0
  85. package/dist/src/commands/org-subcommands-runtime.js.map +1 -0
  86. package/dist/src/commands/org.d.ts +3 -151
  87. package/dist/src/commands/org.d.ts.map +1 -1
  88. package/dist/src/commands/org.js +43 -2735
  89. package/dist/src/commands/org.js.map +1 -1
  90. package/dist/src/orgrt/daemon-types.d.ts +196 -0
  91. package/dist/src/orgrt/daemon-types.d.ts.map +1 -0
  92. package/dist/src/orgrt/daemon-types.js +38 -0
  93. package/dist/src/orgrt/daemon-types.js.map +1 -0
  94. package/dist/src/orgrt/daemon.d.ts +70 -300
  95. package/dist/src/orgrt/daemon.d.ts.map +1 -1
  96. package/dist/src/orgrt/daemon.js +41 -2536
  97. package/dist/src/orgrt/daemon.js.map +1 -1
  98. package/dist/src/orgrt/idle-watchdog.d.ts +39 -0
  99. package/dist/src/orgrt/idle-watchdog.d.ts.map +1 -0
  100. package/dist/src/orgrt/idle-watchdog.js +289 -0
  101. package/dist/src/orgrt/idle-watchdog.js.map +1 -0
  102. package/dist/src/orgrt/org-reload.d.ts +7 -0
  103. package/dist/src/orgrt/org-reload.d.ts.map +1 -0
  104. package/dist/src/orgrt/org-reload.js +111 -0
  105. package/dist/src/orgrt/org-reload.js.map +1 -0
  106. package/dist/src/orgrt/org-start-steps.d.ts +21 -0
  107. package/dist/src/orgrt/org-start-steps.d.ts.map +1 -0
  108. package/dist/src/orgrt/org-start-steps.js +305 -0
  109. package/dist/src/orgrt/org-start-steps.js.map +1 -0
  110. package/dist/src/orgrt/org-start.d.ts +7 -0
  111. package/dist/src/orgrt/org-start.d.ts.map +1 -0
  112. package/dist/src/orgrt/org-start.js +435 -0
  113. package/dist/src/orgrt/org-start.js.map +1 -0
  114. package/dist/src/orgrt/org-state-file.d.ts +8 -0
  115. package/dist/src/orgrt/org-state-file.d.ts.map +1 -0
  116. package/dist/src/orgrt/org-state-file.js +116 -0
  117. package/dist/src/orgrt/org-state-file.js.map +1 -0
  118. package/dist/src/orgrt/org-stop.d.ts +6 -0
  119. package/dist/src/orgrt/org-stop.d.ts.map +1 -0
  120. package/dist/src/orgrt/org-stop.js +332 -0
  121. package/dist/src/orgrt/org-stop.js.map +1 -0
  122. package/dist/src/orgrt/org-tools.d.ts +11 -0
  123. package/dist/src/orgrt/org-tools.d.ts.map +1 -0
  124. package/dist/src/orgrt/org-tools.js +305 -0
  125. package/dist/src/orgrt/org-tools.js.map +1 -0
  126. package/dist/src/orgrt/role-incarnation.d.ts +18 -0
  127. package/dist/src/orgrt/role-incarnation.d.ts.map +1 -0
  128. package/dist/src/orgrt/role-incarnation.js +374 -0
  129. package/dist/src/orgrt/role-incarnation.js.map +1 -0
  130. package/dist/src/orgrt/role-respawn.d.ts +7 -0
  131. package/dist/src/orgrt/role-respawn.d.ts.map +1 -0
  132. package/dist/src/orgrt/role-respawn.js +318 -0
  133. package/dist/src/orgrt/role-respawn.js.map +1 -0
  134. package/dist/src/orgrt/role-session-opts.d.ts +389 -0
  135. package/dist/src/orgrt/role-session-opts.d.ts.map +1 -0
  136. package/dist/src/orgrt/role-session-opts.js +289 -0
  137. package/dist/src/orgrt/role-session-opts.js.map +1 -0
  138. package/dist/src/orgrt/runner-resolve.d.ts +43 -0
  139. package/dist/src/orgrt/runner-resolve.d.ts.map +1 -0
  140. package/dist/src/orgrt/runner-resolve.js +77 -0
  141. package/dist/src/orgrt/runner-resolve.js.map +1 -0
  142. package/dist/src/orgrt/session-gate.d.ts +34 -0
  143. package/dist/src/orgrt/session-gate.d.ts.map +1 -0
  144. package/dist/src/orgrt/session-gate.js +74 -0
  145. package/dist/src/orgrt/session-gate.js.map +1 -0
  146. package/dist/src/orgrt/session-prompt.d.ts +31 -0
  147. package/dist/src/orgrt/session-prompt.d.ts.map +1 -0
  148. package/dist/src/orgrt/session-prompt.js +115 -0
  149. package/dist/src/orgrt/session-prompt.js.map +1 -0
  150. package/dist/src/orgrt/session-run.d.ts +18 -0
  151. package/dist/src/orgrt/session-run.d.ts.map +1 -0
  152. package/dist/src/orgrt/session-run.js +429 -0
  153. package/dist/src/orgrt/session-run.js.map +1 -0
  154. package/dist/src/orgrt/session-stream.d.ts +21 -0
  155. package/dist/src/orgrt/session-stream.d.ts.map +1 -0
  156. package/dist/src/orgrt/session-stream.js +173 -0
  157. package/dist/src/orgrt/session-stream.js.map +1 -0
  158. package/dist/src/orgrt/session-types.d.ts +219 -0
  159. package/dist/src/orgrt/session-types.d.ts.map +1 -0
  160. package/dist/src/orgrt/session-types.js +2 -0
  161. package/dist/src/orgrt/session-types.js.map +1 -0
  162. package/dist/src/orgrt/session-usage.d.ts +29 -0
  163. package/dist/src/orgrt/session-usage.d.ts.map +1 -0
  164. package/dist/src/orgrt/session-usage.js +64 -0
  165. package/dist/src/orgrt/session-usage.js.map +1 -0
  166. package/dist/src/orgrt/session.d.ts +5 -281
  167. package/dist/src/orgrt/session.d.ts.map +1 -1
  168. package/dist/src/orgrt/session.js +8 -1117
  169. package/dist/src/orgrt/session.js.map +1 -1
  170. package/dist/tsconfig.tsbuildinfo +1 -1
  171. package/package.json +6 -6
@@ -0,0 +1,449 @@
1
+ // packages/@monomind/cli/src/commands/org-run.ts
2
+ //
3
+ // `monomind org run` — start an org as a foreground daemon.
4
+ import { existsSync, mkdirSync, readFileSync, rmSync, writeFileSync } from 'node:fs';
5
+ import { homedir } from 'node:os';
6
+ import { join } from 'node:path';
7
+ import { resolveOrgDefBlueprints } from '../catalog/blueprints.js';
8
+ import { approvalPendingNotice, parseAutoApproveFlag } from '../orgrt/approvals.js';
9
+ import { resolveRoleCostTier } from '../orgrt/cost-tier.js';
10
+ import { OrgDaemon } from '../orgrt/daemon.js';
11
+ import { readRunEvents } from '../orgrt/reporting.js';
12
+ import { startOrgServer } from '../orgrt/server.js';
13
+ import { resolveModel } from '../orgrt/session.js';
14
+ import { ORG_DIR, OrgDefSchema } from '../orgrt/types.js';
15
+ import { output } from '../output.js';
16
+ import { MODEL_PRICING } from '../pricing/model-pricing.js';
17
+ import { clearReloadfile, clearStopfile, listOrgConfigFiles, liveServeDaemonPid, validateOrgName, } from './org-control.js';
18
+ import { runOutcomeResult, runtimeState, waitForRunEnd, } from './org-poll.js';
19
+ import { runEndLine } from './org-run-end.js';
20
+ const log = (text) => {
21
+ console.log(text);
22
+ };
23
+ export const runAction = async (ctx) => {
24
+ // Org runs skip local embeddings entirely — on some machines
25
+ // @huggingface/transformers' native ONNX runtime crashes the whole
26
+ // process (a libc++abi terminate, not a catchable JS error) the moment
27
+ // any memory/KG lookup tries to load its model. A crashed unattended org
28
+ // run is much worse than one that falls back to keyword-only memory
29
+ // search — see the matching guards in memory-bridge.ts/embedding-operations.ts.
30
+ // The embedding-model crash above has a sibling: loadReranker() in
31
+ // memory-bridge.ts loads a SEPARATE cross-encoder model
32
+ // (cross-encoder/ettin-reranker-32m-v1, its own tokenizer architecture)
33
+ // for search-result reranking, independent of the embedder guard above —
34
+ // reranking runs on (query, passage) text pairs directly, so it can
35
+ // still fire and hit the same native crash even with embeddings off.
36
+ // disableLocalModels() turns off both, for THIS process only. It used to be
37
+ // MONOMIND_NO_LOCAL_EMBEDDINGS=1 / MONOMIND_RERANKER=0 on process.env, which
38
+ // every role's CLI and every command a role ran inherited — so a role's own
39
+ // `monomind memory search` silently fell back to keyword-only (#249).
40
+ const { disableLocalModels } = await import('../memory/memory-bridge.js');
41
+ disableLocalModels();
42
+ if (!ctx.args[0])
43
+ return { success: false, message: 'org name required: monomind org run <name> [--task "..."]' };
44
+ const validated = validateOrgName(ctx.args[0]);
45
+ if (!validated.ok)
46
+ return validated.result;
47
+ const name = validated.name;
48
+ // A repeated --task flag is promoted to an array by the parser (deliberate,
49
+ // documented behavior elsewhere — repeats never silently drop a value); a
50
+ // plain `as string` cast would let that array flow straight into the org's
51
+ // goal and get stringified as "a,b" with no warning. Checked before any
52
+ // side effects (starting the xdeliver listener) run.
53
+ const taskFlag = ctx.flags.task;
54
+ if (Array.isArray(taskFlag))
55
+ return { success: false, message: '--task was passed more than once — pass it exactly once' };
56
+ const autoApprove = parseAutoApproveFlag(ctx.flags.autoApprove);
57
+ if ('error' in autoApprove)
58
+ return { success: false, message: autoApprove.error };
59
+ // Fail before any side effects (inbox server) when the org doesn't exist.
60
+ const orgsDir = join(ctx.cwd, ORG_DIR);
61
+ if (!existsSync(join(orgsDir, `${name}.json`))) {
62
+ const known = existsSync(orgsDir)
63
+ ? listOrgConfigFiles(orgsDir).map((f) => f.replace(/\.json$/, ''))
64
+ : [];
65
+ log(output.error(`Org not found: ${name}${known.length ? ` — available: ${known.join(', ')}` : ' — create one with /mastermind:createorg'}`));
66
+ return { success: false, message: 'org not found' };
67
+ }
68
+ if (ctx.flags.dryRun === true) {
69
+ // Validate + preview each role's actual briefing without spawning sessions.
70
+ try {
71
+ const parsedDef = OrgDefSchema.parse(JSON.parse(readFileSync(join(orgsDir, `${name}.json`), 'utf8')));
72
+ const bp = resolveOrgDefBlueprints(parsedDef, ctx.cwd);
73
+ for (const n of bp.notes)
74
+ log(output.info(n));
75
+ if (bp.errors.length)
76
+ throw new Error(bp.errors.join('; '));
77
+ const def = bp.def;
78
+ const { buildRolePrompt, resolveRoleExtraGuidance } = await import('../orgrt/session.js');
79
+ const { agentRoles, endpointBriefingLines } = await import('../orgrt/endpoint-roles.js');
80
+ const { expandRolePromptVars, promptVarsFor } = await import('../orgrt/prompt-vars.js');
81
+ const roster = def.roles.map((r) => r.id);
82
+ // M2: endpoint roles get no session, so no briefing and no budget share.
83
+ const sessionRoles = agentRoles(def.roles);
84
+ const bossId = (sessionRoles.find((r) => r.type === 'boss' || r.reports_to === null) ?? sessionRoles[0])?.id;
85
+ const perRole = Math.floor((def.run_config.budget_tokens ?? 1_000_000) / Math.max(1, sessionRoles.length));
86
+ // Same KG entity glossary the live daemon injects — the preview must
87
+ // match what sessions actually receive.
88
+ const glossary = await (async () => {
89
+ try {
90
+ const kg = await import('../memory/memory-kg.js');
91
+ const { orgKgScope } = await import('../orgrt/org-memory.js');
92
+ return await kg.kgGlossary({
93
+ dbPath: join(process.cwd(), '.monomind', 'org-memory'),
94
+ scope: orgKgScope(name),
95
+ });
96
+ }
97
+ catch {
98
+ return [];
99
+ }
100
+ })();
101
+ log(output.info(`DRY RUN — org ${name}: ${sessionRoles.length} roles, ${perRole} tokens each, goal: ${taskFlag ?? def.goal}`));
102
+ for (const role of sessionRoles) {
103
+ log(output.info(`\n─── ${role.id} (${role.title || role.type})${role.adapter_config?.model ? ` [${role.adapter_config.model}]` : ''} ───`));
104
+ log(buildRolePrompt(
105
+ // Same org root the live daemon uses (new OrgDaemon(ctx.cwd)).
106
+ expandRolePromptVars(role, promptVarsFor(ctx.cwd)), { name: def.name, goal: taskFlag ?? def.goal }, roster, glossary, resolveRoleExtraGuidance(role, ctx.cwd), role.id === bossId ? endpointBriefingLines(def) : undefined));
107
+ }
108
+ return { success: true, message: 'dry run complete — no sessions started' };
109
+ }
110
+ catch (err) {
111
+ log(output.error(`Config invalid: ${err instanceof Error ? err.message : String(err)}`));
112
+ return { success: false, message: 'invalid org config' };
113
+ }
114
+ }
115
+ // A live `org serve` daemon already owns this project's orgs. Starting our
116
+ // own here would put two processes on one runtime.json and one broker lease,
117
+ // so hand the request to the daemon via its runfile instead of racing it.
118
+ const serveOwner = liveServeDaemonPid(ctx.cwd);
119
+ if (serveOwner != null) {
120
+ // The runfile carries only the task; the serve daemon would drop the list.
121
+ if (autoApprove.tools.length)
122
+ return {
123
+ success: false,
124
+ message: `--auto-approve cannot be handed to the running "org serve" daemon (pid ${serveOwner}) — set the roles' policy.autoApproveTools instead`,
125
+ };
126
+ mkdirSync(join(orgsDir, name), { recursive: true });
127
+ // The task rides along in the runfile. Dropping it here would have made
128
+ // `org run <name> --task "..."` silently start a generic cycle — the flag
129
+ // accepted, the instruction discarded.
130
+ const runfile = join(orgsDir, name, 'run');
131
+ writeFileSync(runfile, JSON.stringify({ ts: Date.now(), task: taskFlag ?? null }), 'utf8');
132
+ // Ack: the serve daemon's runfile poll consumes (deletes) the file within
133
+ // one tick (~2s). The liveness check above is racy — a pid can die or be
134
+ // recycled between the check and the poll, leaving a runfile nobody reads
135
+ // while we report success. Verify consumption; on timeout, retract the
136
+ // runfile and fail loudly instead of losing the run.
137
+ const deadline = Date.now() + 15_000;
138
+ while (Date.now() < deadline && existsSync(runfile)) {
139
+ await new Promise((r) => setTimeout(r, 500));
140
+ }
141
+ if (existsSync(runfile)) {
142
+ rmSync(runfile, { force: true });
143
+ log(output.error(`org ${name}: serve daemon (pid ${serveOwner}) did not pick up the run within 15s — it is dead or wedged.`));
144
+ log(output.info(`Remove the stale heartbeat (.monomind/serve-heartbeat.json) and retry, or start a fresh daemon with: monomind org serve`));
145
+ return { success: false, message: 'serve daemon did not acknowledge the run request' };
146
+ }
147
+ log(output.info(`org ${name}: start requested from the serve daemon (pid ${serveOwner}) — acknowledged`));
148
+ log(output.dim(` watch it with: monomind org logs ${name} --follow`));
149
+ return { success: true, message: 'start requested' };
150
+ }
151
+ const crossProcess = ctx.flags.crossProcess !== false;
152
+ // P1-1: v1 deprecation warning. Detect v1-shaped configs and warn.
153
+ // Gate on MONOMIND_V1_LEGACY=off to refuse v1 orgs entirely (patch-versioning-
154
+ // compliant mechanism — no minor bump needed).
155
+ const V1_ORG_KEYS = [
156
+ 'topology',
157
+ 'consensus',
158
+ 'strategy',
159
+ 'board_id',
160
+ 'todo_col_id',
161
+ 'doing_col_id',
162
+ 'done_col_id',
163
+ 'loop',
164
+ ];
165
+ try {
166
+ const rawCfg = JSON.parse(readFileSync(join(orgsDir, `${name}.json`), 'utf8'));
167
+ const isV1 = V1_ORG_KEYS.some((k) => k in rawCfg);
168
+ if (isV1) {
169
+ const v1Legacy = process.env.MONOMIND_V1_LEGACY;
170
+ if (v1Legacy === 'off') {
171
+ log(output.error(`Org "${name}" uses the v1 config format, but MONOMIND_V1_LEGACY=off.`));
172
+ log(output.info(`Run "monomind org migrate ${name}" to upgrade to v2, or unset MONOMIND_V1_LEGACY to proceed anyway.`));
173
+ return { success: false, message: 'v1 org blocked by MONOMIND_V1_LEGACY=off' };
174
+ }
175
+ log(output.warning(`Org "${name}" uses the v1 config format (deprecated). It will be auto-migrated in-memory.`));
176
+ log(output.dim(` To silence: run "monomind org migrate ${name}". To block v1 orgs: set MONOMIND_V1_LEGACY=off.`));
177
+ }
178
+ }
179
+ catch {
180
+ /* config parse errors surface below in cost estimate or daemon.startOrg */
181
+ }
182
+ // P0-17: Upfront cost estimate. `org run` and `/mastermind:autodev` spend real
183
+ // provider tokens. Print an estimate before sessions start; honor --budget-usd
184
+ // as a hard stop and --yes to skip the confirmation prompt. Rates are defaults
185
+ // (per 1M tokens, blended estimate, Aug 2026); override via the model id.
186
+ //
187
+ // No provider Usage API is queried (that needs Admin/Org API credentials most
188
+ // users won't have configured) — rates are derived from the canonical
189
+ // MODEL_PRICING table (src/pricing/model-pricing.ts), using each model's
190
+ // output-token price as the blended per-1M estimate (output tokens dominate
191
+ // role-turn cost). Models not yet tracked in that table (third-party/non-
192
+ // Anthropic providers) fall back to the manually maintained EXTRA table
193
+ // below. A user-editable ~/.monomind/rates.json override, when present,
194
+ // takes precedence over both. Either way this is static data, not a live
195
+ // query, so a "stale rates" warning is always shown to make that
196
+ // limitation visible rather than implying live pricing.
197
+ const DERIVED_RATE_PER_1M = Object.fromEntries(Object.entries(MODEL_PRICING).map(([model, price]) => [model, price.out * 1_000_000]));
198
+ // Models absent from MODEL_PRICING (not yet in the canonical pricing table).
199
+ const EXTRA_MODEL_RATE_PER_1M = {
200
+ 'gpt-4': 10,
201
+ 'glm-5.2': 2,
202
+ 'glm-4': 2,
203
+ 'kimi-latest': 3,
204
+ 'kimi-k2': 3,
205
+ 'kimi-code/k3': 3,
206
+ 'kimi-code/k3-256k': 3,
207
+ 'gemini-3.1-pro': 8,
208
+ 'gemini-3.6-flash-high': 1,
209
+ 'gpt-5.6-terra': 10,
210
+ 'gpt-5.5': 10,
211
+ };
212
+ const MODEL_RATE_PER_1M = {
213
+ ...EXTRA_MODEL_RATE_PER_1M,
214
+ ...DERIVED_RATE_PER_1M,
215
+ };
216
+ const DEFAULT_RATE_PER_1M = 10;
217
+ const AVG_TOKENS_PER_TURN = 2000;
218
+ const budgetUsd = ctx.flags.budgetUsd;
219
+ const skipConfirm = ctx.flags.yes === true;
220
+ // User-editable rate overrides: ~/.monomind/rates.json, e.g.
221
+ // { "claude-opus-5": 90, "my-custom-model": 5 }
222
+ const ratesPath = join(homedir(), '.monomind', 'rates.json');
223
+ const userRates = {};
224
+ let ratesFileUsed = false;
225
+ try {
226
+ const parsed = JSON.parse(readFileSync(ratesPath, 'utf8'));
227
+ if (parsed && typeof parsed === 'object') {
228
+ for (const [k, v] of Object.entries(parsed)) {
229
+ if (typeof v === 'number')
230
+ userRates[k] = v;
231
+ }
232
+ ratesFileUsed = Object.keys(userRates).length > 0;
233
+ }
234
+ }
235
+ catch {
236
+ /* no rates.json (or invalid) — hardcoded defaults only */
237
+ }
238
+ try {
239
+ const def = OrgDefSchema.parse(JSON.parse(readFileSync(join(orgsDir, `${name}.json`), 'utf8')));
240
+ const defaultMaxTurns = def.run_config.max_turns_per_message ?? 30;
241
+ // Estimate against a realistic planning ceiling, NOT the runtime limit —
242
+ // the schema default is effectively unlimited (DEFAULT_MAX_TURNS_PER_MESSAGE),
243
+ // which would balloon the upfront figure into meaninglessness.
244
+ const ESTIMATE_TURNS_CAP = 30;
245
+ let _totalTokens = 0;
246
+ const perRoleRows = def.roles.map((r) => {
247
+ // Mirror the actual runtime's model resolution (session.ts resolveModel)
248
+ // instead of a hardcoded 'claude-sonnet-5' fallback — otherwise every
249
+ // role without an explicit adapter_config.model (kimicode, antigravity,
250
+ // vercel roles relying on their runtime default) is mislabeled here.
251
+ // ADR-O001 D8: fold the role's cost tier in, at the same precedence the
252
+ // runtime uses (explicit model > tier > runtime/vendor default) — an
253
+ // estimate that ignored the tier would quote the untiered price of a run
254
+ // that is about to cost ~3x less.
255
+ const model = String(r.adapter_config?.model ??
256
+ resolveRoleCostTier({ role: r, def })?.model ??
257
+ resolveModel(r, r.runtime ?? def.runtime, r.provider?.vendor));
258
+ const rate = userRates[model] ?? MODEL_RATE_PER_1M[model] ?? DEFAULT_RATE_PER_1M;
259
+ const roleTurns = Math.min(r.max_turns_per_message ?? defaultMaxTurns, ESTIMATE_TURNS_CAP);
260
+ const tokens = roleTurns * AVG_TOKENS_PER_TURN;
261
+ _totalTokens += tokens;
262
+ return { id: r.id, model, tokens, cost: (tokens * rate) / 1_000_000 };
263
+ });
264
+ const estimate = perRoleRows.reduce((s, r) => s + r.cost, 0);
265
+ log(output.bold('\nCost estimate'));
266
+ log(output.dim(` (roles × max_turns × ~${AVG_TOKENS_PER_TURN} tokens/turn × model rate; estimated at ≤${ESTIMATE_TURNS_CAP} turns/message — the runtime default is effectively unlimited; ${ratesFileUsed ? `rates.json overrides + ` : ''}static defaults, will vary with real usage)`));
267
+ log(output.warning(` ⚠ stale rates: no live provider pricing lookup — ${ratesFileUsed ? `using ~/.monomind/rates.json + ` : ''}hardcoded table (edit ~/.monomind/rates.json to override)`));
268
+ for (const r of perRoleRows) {
269
+ log(` ${r.id.padEnd(20)} ${r.model.padEnd(22)} ~$${r.cost.toFixed(2)}`);
270
+ }
271
+ log(` ${output.bold('Total estimate:'.padEnd(28))} ~$${estimate.toFixed(2)}`);
272
+ if (budgetUsd != null && estimate > budgetUsd) {
273
+ log(output.error(`Estimate $${estimate.toFixed(2)} exceeds --budget-usd $${budgetUsd}. Aborting before any tokens are spent.`));
274
+ return { success: false, message: 'cost estimate exceeded --budget-usd' };
275
+ }
276
+ if (!skipConfirm && process.stdin.isTTY) {
277
+ const { confirm } = await import('../prompt.js');
278
+ const ok = await confirm({
279
+ message: `Start ${def.roles.length}-role org? This will spend real provider tokens.`,
280
+ default: true,
281
+ });
282
+ if (!ok) {
283
+ log(output.dim('Aborted — no tokens spent.'));
284
+ return { success: false, message: 'user declined cost-estimate prompt' };
285
+ }
286
+ }
287
+ }
288
+ catch (err) {
289
+ // If the config can't be parsed here, daemon.startOrg below will surface a
290
+ // proper error. Don't double-report — just skip the estimate.
291
+ if (process.env.DEBUG || process.env.MONOMIND_DEBUG) {
292
+ log(output.dim(`(cost estimate skipped: ${err instanceof Error ? err.message : String(err)})`));
293
+ }
294
+ }
295
+ const resumeFlag = ctx.flags.resume === true;
296
+ const daemon = new OrgDaemon(ctx.cwd, { crossProcess });
297
+ let srv;
298
+ if (crossProcess) {
299
+ srv = await startOrgServer(daemon, 0);
300
+ daemon.setInboxUrl(`http://127.0.0.1:${srv.port}`, srv.operatorCredential);
301
+ }
302
+ let running;
303
+ try {
304
+ running = await daemon.startOrg(name, taskFlag, {
305
+ resume: resumeFlag,
306
+ autoApprove: autoApprove.tools,
307
+ });
308
+ }
309
+ catch (err) {
310
+ // Don't leave the inbox server holding the event loop open on a failed start.
311
+ srv?.close();
312
+ await daemon.stopAll().catch(() => {
313
+ /* nothing started */
314
+ });
315
+ const detail = err instanceof Error ? err.message : String(err);
316
+ const hint = err instanceof Error && err.name === 'ZodError'
317
+ ? ` — run "monomind org validate ${name}" for details`
318
+ : '';
319
+ log(output.error(`Could not start org ${name}: ${detail}${hint}`));
320
+ return { success: false, message: 'org start failed' };
321
+ }
322
+ log(output.info(`org ${name} running (${running.def.roles.length} agents, run ${running.run}) — Ctrl-C or "monomind org stop ${name}" to stop`));
323
+ // #345: a role waiting on a tool approval is otherwise silent in this log.
324
+ running.bus.subscribe((e) => {
325
+ const notice = approvalPendingNotice(name, e);
326
+ if (notice)
327
+ log(output.warning(notice));
328
+ });
329
+ // The run log's last line: outcome, wall time, total cost (every exit path
330
+ // below, crash handlers included), so a detached run's log has an ending.
331
+ const startedAt = Date.now();
332
+ const printRunEnd = (final, how) => {
333
+ try {
334
+ const events = readRunEvents(ctx.cwd, name, running.run);
335
+ const wallMs = Date.now() - startedAt;
336
+ log(output.info(runEndLine({ name, run: running.run, wallMs, final, events, ...how })));
337
+ }
338
+ catch {
339
+ /* best-effort — never mask the run's real exit */
340
+ }
341
+ };
342
+ // #206 follow-up: without this, an uncaught error in this process left
343
+ // runtime.json's status stuck at 'running' (finishStop never runs), and
344
+ // runOutcomeResult's status === 'crashed' branch — the one meant to
345
+ // surface *why* the run failed — could never actually fire for `org run`,
346
+ // since nothing here ever wrote 'crashed'. Mirrors serveAction's
347
+ // crashExit, but deliberately does NOT touch SIGINT/SIGTERM — those are
348
+ // already handled by the wait loop below as a graceful stop, and
349
+ // registering a second, competing handler here would race it.
350
+ process.on('uncaughtException', (err) => {
351
+ try {
352
+ console.error('[org run] uncaughtException:', err);
353
+ }
354
+ catch {
355
+ /* stderr gone */
356
+ }
357
+ const error = `uncaughtException: ${err instanceof Error ? err.message : String(err)}`;
358
+ daemon.persistCrashStateAll(error);
359
+ printRunEnd({ status: 'crashed', error }, {});
360
+ process.exit(1);
361
+ });
362
+ process.on('unhandledRejection', (err) => {
363
+ try {
364
+ console.error('[org run] unhandledRejection:', err);
365
+ }
366
+ catch {
367
+ /* stderr gone */
368
+ }
369
+ const error = `unhandledRejection: ${err instanceof Error ? err.message : String(err)}`;
370
+ daemon.persistCrashStateAll(error);
371
+ printRunEnd({ status: 'crashed', error }, {});
372
+ process.exit(1);
373
+ });
374
+ // P1-12: Print the dashboard URL so CLI users know where to look.
375
+ // The dashboard is normally spawned by a Claude Code SessionStart hook
376
+ // (.claude/helpers/control-start.cjs) — but `org run` doesn't require
377
+ // Claude Code, and even when the hook exists it only fires once at
378
+ // session start, not per org run. If control.json is stale (points at a
379
+ // dead pid, a server rooted in a different project, or one that no longer
380
+ // accepts our dashboard-token — the exact case control-start.cjs's own
381
+ // "already running" check now self-heals, see its staleAuth handling),
382
+ // `org run` used to just print whatever URL was on file with zero
383
+ // verification. Actively (re)run the same control-start.cjs the hook
384
+ // uses, from this project's own .claude/helpers/ if it's been set up
385
+ // (monomind init), so a stale/dead/mismatched dashboard gets healed on
386
+ // every org run instead of silently trusting old state.
387
+ const controlPath = join(ctx.cwd, '.monomind', 'control.json');
388
+ const controlStartPath = join(ctx.cwd, '.claude', 'helpers', 'control-start.cjs');
389
+ if (existsSync(controlStartPath)) {
390
+ try {
391
+ const { spawnSync } = await import('node:child_process');
392
+ spawnSync(process.execPath, [controlStartPath], {
393
+ cwd: ctx.cwd,
394
+ env: { ...process.env, CLAUDE_PROJECT_DIR: ctx.cwd, MONOMIND_HOOK_QUIET: '1' },
395
+ timeout: 5000,
396
+ stdio: 'ignore',
397
+ });
398
+ }
399
+ catch {
400
+ /* best-effort — fall through to whatever control.json already has */
401
+ }
402
+ }
403
+ if (existsSync(controlPath)) {
404
+ try {
405
+ const ctl = JSON.parse(readFileSync(controlPath, 'utf8'));
406
+ const dashUrl = ctl.url || (ctl.port ? `http://localhost:${ctl.port}` : 'http://localhost:4242');
407
+ log(output.dim(` Dashboard: ${dashUrl}`));
408
+ }
409
+ catch {
410
+ /* non-critical */
411
+ }
412
+ }
413
+ else if (existsSync(controlStartPath)) {
414
+ // control-start.cjs ran above (spawnSync'd synchronously with a 5s cap)
415
+ // but control.json still doesn't exist — its own confirm-mode child is
416
+ // still working in the background (npx cold-resolve etc., #142/#144)
417
+ // rather than having failed outright. Point at the default port; the
418
+ // confirm process will correct control.json once it lands.
419
+ log(output.dim(' Dashboard: http://localhost:4242 (starting — check back in a few seconds if unreachable)'));
420
+ }
421
+ else {
422
+ log(output.dim(' Dashboard: run `monomind init` to set up .claude/helpers/, then re-run to launch it automatically'));
423
+ }
424
+ // stopfile poll lets `org stop` work from another terminal; the daemon can
425
+ // also stop the org itself (boss called org_complete, or the idle watchdog
426
+ // fired) — detect that via getOrg() so the CLI exits instead of polling a
427
+ // stopfile forever after a finished run. Clear any stale stop or reload
428
+ // request from a previous run before polling.
429
+ clearStopfile(ctx.cwd, name);
430
+ clearReloadfile(ctx.cwd, name);
431
+ // #206: a human explicitly running `monomind org stop` is a deliberate,
432
+ // successful action regardless of how the run itself ended — capture that
433
+ // BEFORE clearStopfile() below wipes the file, so it isn't lost.
434
+ const { stoppedManually, signal } = await waitForRunEnd(ctx.cwd, name, daemon);
435
+ clearStopfile(ctx.cwd, name);
436
+ await daemon.stopAll();
437
+ srv?.close();
438
+ printRunEnd(runtimeState(ctx.cwd, name), { stoppedManually, signal });
439
+ if (stoppedManually)
440
+ return { success: true, message: `org ${name} stopped` };
441
+ // #206: 'org run' used to exit 0 unconditionally here — a crashed or
442
+ // watchdog-stopped run was indistinguishable from a completed one to any
443
+ // script or supervisor (launchd/systemd) driving off the exit code. Re-read
444
+ // the daemon's final record (same runtime.json pattern isOrgRunning/
445
+ // statusAction already use below) and only report success for a run that
446
+ // actually finished its goal via org_complete.
447
+ return runOutcomeResult(name, runtimeState(ctx.cwd, name));
448
+ };
449
+ //# sourceMappingURL=org-run.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"org-run.js","sourceRoot":"","sources":["../../../src/commands/org-run.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import type { CommandContext, CommandResult } from '../types.js';
2
+ /**
3
+ * Emit a supervisor unit for `org serve`.
4
+ *
5
+ * Why this is an EXTERNAL supervisor and not an `--supervise` flag: the daemon
6
+ * already logs every death it can observe — signals, uncaught exceptions,
7
+ * unhandled rejections, and the event loop draining. The one death it cannot
8
+ * observe is SIGKILL, which is what the OOM killer sends, and which is the
9
+ * suspected cause of the reported disappearance (its org logs showed repeated
10
+ * low-memory warnings). No in-process handler survives SIGKILL, so a daemon
11
+ * that restarts itself is theatre for exactly the case that matters. Only
12
+ * something outside the process can bring it back.
13
+ *
14
+ * launchd and systemd both already do this well, so this generates a correct
15
+ * unit rather than reimplementing them.
16
+ */
17
+ export declare const supervisorAction: (ctx: CommandContext) => Promise<CommandResult>;
18
+ export declare const serveAction: (ctx: CommandContext) => Promise<CommandResult>;
19
+ //# sourceMappingURL=org-serve.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"org-serve.d.ts","sourceRoot":"","sources":["../../../src/commands/org-serve.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAajE;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,gBAAgB,QAAe,cAAc,KAAG,OAAO,CAAC,aAAa,CA4GjF,CAAC;AAEF,eAAO,MAAM,WAAW,QAAe,cAAc,KAAG,OAAO,CAAC,aAAa,CA2S5E,CAAC"}