@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,318 @@
1
+ import { resolveRoleProvider } from './provider.js';
2
+ import { buildRespawnReceipt, computeReplacementBudget, mergeEffectiveRoleConfig, redactRoleConfig, validateRespawnInput, } from './role-slot.js';
3
+ import { resolveRoleRunner } from './runner-resolve.js';
4
+ /** org_respawn_role's daemon-owned implementation. See the design doc's
5
+ * "Replacement algorithm" (13 steps) — this method's body follows those
6
+ * steps in order, numbered in comments. */
7
+ export async function respawnRole(daemon, name, callerId, rawInput) {
8
+ const running = daemon.orgs.get(name);
9
+ if (!running) {
10
+ return {
11
+ success: false,
12
+ roleId: '',
13
+ generation: 0,
14
+ respawnCount: 0,
15
+ respawnsRemaining: 0,
16
+ error: `org "${name}" is not running`,
17
+ };
18
+ }
19
+ // Step 1: authorize (defense in depth — buildOrgTools only ever wires
20
+ // onRespawnRole for the selected coordinator, but re-check here too).
21
+ if (callerId !== running.bossRoleId) {
22
+ return {
23
+ success: false,
24
+ roleId: '',
25
+ generation: 0,
26
+ respawnCount: 0,
27
+ respawnsRemaining: 0,
28
+ error: 'only the selected coordinator may call org_respawn_role',
29
+ };
30
+ }
31
+ if (daemon.stopping.has(name)) {
32
+ return {
33
+ success: false,
34
+ roleId: '',
35
+ generation: 0,
36
+ respawnCount: 0,
37
+ respawnsRemaining: 0,
38
+ error: `org "${name}" is stopping`,
39
+ };
40
+ }
41
+ const validated = validateRespawnInput(rawInput);
42
+ if (!validated.ok) {
43
+ return {
44
+ success: false,
45
+ roleId: '',
46
+ generation: 0,
47
+ respawnCount: 0,
48
+ respawnsRemaining: 0,
49
+ error: validated.error,
50
+ };
51
+ }
52
+ const input = validated.value;
53
+ if (input.roleId === running.bossRoleId) {
54
+ return {
55
+ success: false,
56
+ roleId: input.roleId,
57
+ generation: 0,
58
+ respawnCount: 0,
59
+ respawnsRemaining: 0,
60
+ error: 'cannot replace the selected coordinator',
61
+ };
62
+ }
63
+ const slot = running.roleSlots.get(input.roleId);
64
+ if (!slot) {
65
+ return {
66
+ success: false,
67
+ roleId: input.roleId,
68
+ generation: 0,
69
+ respawnCount: 0,
70
+ respawnsRemaining: 0,
71
+ error: `unknown or not-yet-started role "${input.roleId}"`,
72
+ };
73
+ }
74
+ const maxRespawns = running.def.run_config.max_role_respawns ?? 0;
75
+ if (slot.phase === 'removed') {
76
+ return buildRespawnReceipt(slot, maxRespawns, false, {
77
+ roleId: input.roleId,
78
+ error: `role "${input.roleId}" was removed from this org`,
79
+ });
80
+ }
81
+ // Step 2: acquire the role slot (reject a concurrent replacement).
82
+ if (running.respawning.has(input.roleId) || slot.respawnPromise) {
83
+ return buildRespawnReceipt(slot, maxRespawns, false, {
84
+ roleId: input.roleId,
85
+ error: `role "${input.roleId}" is already undergoing replacement`,
86
+ });
87
+ }
88
+ if (slot.respawnCount >= maxRespawns) {
89
+ return buildRespawnReceipt(slot, maxRespawns, false, {
90
+ roleId: input.roleId,
91
+ error: `role "${input.roleId}" has reached its respawn limit (${slot.respawnCount}/${maxRespawns}) for this run`,
92
+ });
93
+ }
94
+ // Step 3: resolve the candidate configuration.
95
+ if (input.providerName !== undefined && slot.effectiveRole.provider) {
96
+ return buildRespawnReceipt(slot, maxRespawns, false, {
97
+ roleId: input.roleId,
98
+ error: `role "${input.roleId}" has an inline provider, which always takes precedence over adapter_config.provider — replacing an inline provider is a separate design`,
99
+ });
100
+ }
101
+ const candidateRole = mergeEffectiveRoleConfig(slot.effectiveRole, {
102
+ runtime: input.runtime,
103
+ model: input.model,
104
+ providerName: input.providerName,
105
+ });
106
+ const budgetTokens = input.budgetTokens ?? computeReplacementBudget(running.def, input.roleId);
107
+ // Step 4: preflight — must not mutate the old runtime.
108
+ try {
109
+ resolveRoleProvider(candidateRole, daemon.root);
110
+ }
111
+ catch (err) {
112
+ return buildRespawnReceipt(slot, maxRespawns, false, {
113
+ roleId: input.roleId,
114
+ error: `preflight failed: ${err instanceof Error ? err.message : String(err)}`,
115
+ });
116
+ }
117
+ // resolveRoleRunner's undefined return is the valid Claude default, not
118
+ // an error — nothing further to validate for the runtime dimension here.
119
+ resolveRoleRunner(candidateRole.runtime, running.def.runtime, candidateRole.provider?.kind, undefined, candidateRole.provider);
120
+ // Step 5: consume one attempt — only after validation/preflight succeed.
121
+ running.respawning.add(input.roleId);
122
+ slot.respawnCount++;
123
+ running.bus.emit({
124
+ type: 'audit',
125
+ from: callerId,
126
+ reason: 'role-respawn-started',
127
+ msg: `replacing role "${input.roleId}": ${input.reason}`,
128
+ data: {
129
+ roleId: input.roleId,
130
+ from: redactRoleConfig(slot.effectiveRole),
131
+ to: redactRoleConfig(candidateRole),
132
+ generation: slot.generation,
133
+ caller: callerId,
134
+ },
135
+ });
136
+ // Step 6: quiesce the old incarnation. Bump the generation NOW, before
137
+ // draining starts — not at the final publish (step 11-13) — so the OLD
138
+ // generation's crash-retry loop (spawnRoleIncarnation's isStaleGeneration
139
+ // check) recognizes supersession immediately. Without this, a backoff
140
+ // timer firing during the drain/force-stop window, or the forced abort's
141
+ // own rejection, would still see itself as the current generation:
142
+ // the abort's rejection doesn't match killedByStop's SIGTERM-only regex,
143
+ // so it would run full terminal crash handling — a duplicate live runner
144
+ // (mid-backoff restart) or a false worker-crashed notification, exactly
145
+ // what the guard exists to prevent.
146
+ const newGeneration = slot.generation + 1;
147
+ slot.generation = newGeneration;
148
+ slot.phase = 'draining';
149
+ // Every await from here on can race a stop/restart of this org — verify
150
+ // ownership before EVERY subsequent step, not just once before the final
151
+ // publish, so a stale operation can never mutate accounting, force-stop
152
+ // a runtime, or spawn into an org that's no longer the live one.
153
+ const stillOwned = () => daemon.orgs.get(name) === running && running.roleSlots.get(input.roleId) === slot;
154
+ const abandonedReceipt = () => {
155
+ running.respawning.delete(input.roleId);
156
+ return buildRespawnReceipt(slot, maxRespawns, false, {
157
+ roleId: input.roleId,
158
+ error: `org "${name}" stopped or restarted during replacement`,
159
+ });
160
+ };
161
+ const oldRuntime = slot.runtime;
162
+ const sweptQueue = oldRuntime.mailbox.beginDrain();
163
+ slot.queuedDuringSwap.push(...sweptQueue);
164
+ const drainTimeoutMs = running.def.run_config.respawn_drain_timeout_ms ?? 30_000;
165
+ const drained = await Promise.race([
166
+ oldRuntime.done.then(() => true),
167
+ new Promise((r) => setTimeout(() => r(false), drainTimeoutMs)),
168
+ ]);
169
+ if (!stillOwned())
170
+ return abandonedReceipt();
171
+ let drainTimedOut = false;
172
+ if (!drained) {
173
+ drainTimedOut = true;
174
+ // Step 7: force stop.
175
+ slot.abort?.abort();
176
+ const forceStopMs = running.def.run_config.respawn_force_stop_timeout_ms ?? 5_000;
177
+ const stopped = await Promise.race([
178
+ oldRuntime.done.then(() => true).catch(() => true),
179
+ new Promise((r) => setTimeout(() => r(false), forceStopMs)),
180
+ ]);
181
+ if (!stillOwned())
182
+ return abandonedReceipt();
183
+ if (!stopped) {
184
+ slot.phase = 'stuck';
185
+ running.respawning.delete(input.roleId);
186
+ running.bus.emit({
187
+ type: 'audit',
188
+ from: callerId,
189
+ reason: 'role-respawn-failed',
190
+ msg: `role "${input.roleId}" forced stop did not confirm termination — refusing to spawn a replacement`,
191
+ });
192
+ return buildRespawnReceipt(slot, maxRespawns, false, {
193
+ roleId: input.roleId,
194
+ error: `role "${input.roleId}" could not be confirmed stopped; not replaced`,
195
+ });
196
+ }
197
+ }
198
+ // Step 8: preserve durable role state (worktree path, task ownership, and
199
+ // the DAG survive untouched — they live outside AgentRuntime/Mailbox
200
+ // entirely, keyed by role.id, which never changes). Reclaim any message
201
+ // abandoned mid-yield by a forced stop for at-least-once redelivery.
202
+ oldRuntime.mailbox.reclaimInFlight();
203
+ const reclaimedQueue = oldRuntime.mailbox.serialize().queue;
204
+ slot.queuedDuringSwap.push(...reclaimedQueue);
205
+ // Step 9: retire accounting BEFORE replacing the runtime.
206
+ slot.retiredUsage = {
207
+ // Budgeted basis: this total is summed with live policy.budgetedUsage
208
+ // against the org-wide budget_tokens ceiling (ADR-O001 D1), so the two
209
+ // terms must share a basis.
210
+ tokens: slot.retiredUsage.tokens + oldRuntime.policy.budgetedUsage,
211
+ costUsd: slot.retiredUsage.costUsd + oldRuntime.metrics.costUsd,
212
+ };
213
+ // Step 10: spawn generation N+1 (generation already bumped in step 6).
214
+ const { runtime: newRuntime, abort: newAbort } = daemon.spawnRoleIncarnation(name, running, candidateRole, newGeneration, { budgetTokensOverride: budgetTokens });
215
+ // Seed the new mailbox with everything swapped/reclaimed, delivered
216
+ // FIFO, plus a delimited coordinator briefing appended last so it reads
217
+ // as the newest context once the replacement starts its first turn.
218
+ for (const queued of slot.queuedDuringSwap)
219
+ newRuntime.mailbox.push(queued);
220
+ newRuntime.mailbox.push(`[system: role replacement briefing — not a system prompt] You are a fresh session replacing the previous incarnation of role "${input.roleId}". Reason: ${input.reason}\n\n${input.briefing}`);
221
+ // Seed USD accounting from retained totals so a respawn cannot reset
222
+ // role.budget_usd.
223
+ if (running.def.roles.find((r) => r.id === input.roleId)?.budget_usd !== undefined) {
224
+ newRuntime.policy.setUsageUsd(slot.retiredUsage.costUsd);
225
+ }
226
+ // "Ready" here means "did not crash within the startup window" — a
227
+ // silent-but-healthy runner (one that never emits a chat/tool/usage
228
+ // event, e.g. because it hasn't finished its first turn yet) must not be
229
+ // misreported as a startup failure, so this does NOT wait for a positive
230
+ // signal. It races the new incarnation's own crash-retry loop (which
231
+ // shares this generation, so it is NOT superseded and behaves normally)
232
+ // against the timeout: a config that fails immediately (bad model,
233
+ // missing runtime binary, auth failure) crashes fast and newRuntime.done
234
+ // resolves with status 'crashed' well before startTimeoutMs, correctly
235
+ // failing readiness and triggering rollback.
236
+ const startTimeoutMs = running.def.run_config.respawn_start_timeout_ms ?? 60_000;
237
+ const ready = await Promise.race([
238
+ newRuntime.done.then(() => newRuntime.status !== 'crashed'),
239
+ new Promise((r) => setTimeout(() => r(true), startTimeoutMs)),
240
+ ]);
241
+ // Step 11: publish atomically — verify ownership is still current.
242
+ if (!stillOwned()) {
243
+ newAbort.abort();
244
+ return abandonedReceipt();
245
+ }
246
+ if (!ready) {
247
+ // Step 12: rollback — one attempt with the prior effective config.
248
+ newAbort.abort();
249
+ running.bus.emit({
250
+ type: 'audit',
251
+ from: callerId,
252
+ reason: 'role-respawn-failed',
253
+ msg: `role "${input.roleId}" replacement did not become ready within ${startTimeoutMs}ms — attempting rollback`,
254
+ });
255
+ try {
256
+ const { runtime: rolledBack, abort: rolledBackAbort } = daemon.spawnRoleIncarnation(name, running, slot.effectiveRole, newGeneration + 1, {});
257
+ for (const queued of slot.queuedDuringSwap)
258
+ rolledBack.mailbox.push(queued);
259
+ running.agents.set(input.roleId, rolledBack);
260
+ slot.runtime = rolledBack;
261
+ slot.abort = rolledBackAbort;
262
+ slot.generation = newGeneration + 1;
263
+ slot.phase = 'running';
264
+ slot.queuedDuringSwap = [];
265
+ running.respawning.delete(input.roleId);
266
+ running.bus.emit({
267
+ type: 'audit',
268
+ from: callerId,
269
+ reason: 'role-respawn-failed',
270
+ msg: `role "${input.roleId}" replacement failed; rolled back to prior config`,
271
+ });
272
+ return buildRespawnReceipt(slot, maxRespawns, false, {
273
+ roleId: input.roleId,
274
+ drainTimedOut,
275
+ error: `replacement failed to start; rolled back to prior configuration`,
276
+ });
277
+ }
278
+ catch (rollbackErr) {
279
+ slot.phase = 'crashed';
280
+ running.respawning.delete(input.roleId);
281
+ running.bus.emit({
282
+ type: 'audit',
283
+ from: callerId,
284
+ reason: 'role-respawn-rollback-failed',
285
+ msg: `role "${input.roleId}" replacement AND rollback both failed: ${rollbackErr instanceof Error ? rollbackErr.message : String(rollbackErr)}`,
286
+ });
287
+ return buildRespawnReceipt(slot, maxRespawns, false, {
288
+ roleId: input.roleId,
289
+ drainTimedOut,
290
+ error: `replacement and rollback both failed; role "${input.roleId}" is unavailable`,
291
+ });
292
+ }
293
+ }
294
+ running.agents.set(input.roleId, newRuntime);
295
+ slot.runtime = newRuntime;
296
+ slot.abort = newAbort;
297
+ slot.generation = newGeneration;
298
+ slot.effectiveRole = candidateRole;
299
+ slot.phase = 'running';
300
+ slot.queuedDuringSwap = [];
301
+ running.respawning.delete(input.roleId);
302
+ // Step 13: audit and persist.
303
+ running.bus.emit({
304
+ type: 'audit',
305
+ from: callerId,
306
+ reason: 'role-respawned',
307
+ msg: `role "${input.roleId}" replaced (generation ${newGeneration})`,
308
+ data: {
309
+ roleId: input.roleId,
310
+ generation: newGeneration,
311
+ respawnCount: slot.respawnCount,
312
+ drainTimedOut,
313
+ },
314
+ });
315
+ daemon.persistState(name, 'running', running.run);
316
+ return buildRespawnReceipt(slot, maxRespawns, true, { roleId: input.roleId, drainTimedOut });
317
+ }
318
+ //# sourceMappingURL=role-respawn.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"role-respawn.js","sourceRoot":"","sources":["../../../src/orgrt/role-respawn.ts"],"names":[],"mappings":"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"}