@telora/daemon 0.22.187 → 0.22.208

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 (278) hide show
  1. package/build-info.json +6 -3
  2. package/dist/backends/index.d.ts.map +1 -1
  3. package/dist/backends/index.js +2 -0
  4. package/dist/backends/index.js.map +1 -1
  5. package/dist/completion/completion-fact-readers.d.ts +35 -0
  6. package/dist/completion/completion-fact-readers.d.ts.map +1 -0
  7. package/dist/completion/completion-fact-readers.js +70 -0
  8. package/dist/completion/completion-fact-readers.js.map +1 -0
  9. package/dist/completion/escalations.d.ts.map +1 -1
  10. package/dist/completion/escalations.js +2 -1
  11. package/dist/completion/escalations.js.map +1 -1
  12. package/dist/completion/event-dep-defaults.d.ts +27 -0
  13. package/dist/completion/event-dep-defaults.d.ts.map +1 -0
  14. package/dist/completion/event-dep-defaults.js +30 -0
  15. package/dist/completion/event-dep-defaults.js.map +1 -0
  16. package/dist/completion/event-phases.d.ts.map +1 -1
  17. package/dist/completion/event-phases.js +5 -13
  18. package/dist/completion/event-phases.js.map +1 -1
  19. package/dist/completion/event.d.ts +32 -0
  20. package/dist/completion/event.d.ts.map +1 -1
  21. package/dist/completion/event.js +31 -25
  22. package/dist/completion/event.js.map +1 -1
  23. package/dist/completion/review-exit-phase.d.ts.map +1 -1
  24. package/dist/completion/review-exit-phase.js +11 -4
  25. package/dist/completion/review-exit-phase.js.map +1 -1
  26. package/dist/completion/session-hold.d.ts +13 -1
  27. package/dist/completion/session-hold.d.ts.map +1 -1
  28. package/dist/completion/session-hold.js +18 -0
  29. package/dist/completion/session-hold.js.map +1 -1
  30. package/dist/completion/standing-approval-convergence.d.ts.map +1 -1
  31. package/dist/completion/standing-approval-convergence.js +2 -1
  32. package/dist/completion/standing-approval-convergence.js.map +1 -1
  33. package/dist/completion/team-phase.d.ts.map +1 -1
  34. package/dist/completion/team-phase.js +1 -0
  35. package/dist/completion/team-phase.js.map +1 -1
  36. package/dist/completion/unclaimed-migration-notice-phase.d.ts +97 -0
  37. package/dist/completion/unclaimed-migration-notice-phase.d.ts.map +1 -0
  38. package/dist/completion/unclaimed-migration-notice-phase.js +270 -0
  39. package/dist/completion/unclaimed-migration-notice-phase.js.map +1 -0
  40. package/dist/directive/directive-executor.d.ts.map +1 -1
  41. package/dist/directive/directive-executor.js +1 -20
  42. package/dist/directive/directive-executor.js.map +1 -1
  43. package/dist/focus/focus-executor.d.ts +1 -0
  44. package/dist/focus/focus-executor.d.ts.map +1 -1
  45. package/dist/focus/focus-executor.js +18 -17
  46. package/dist/focus/focus-executor.js.map +1 -1
  47. package/dist/focus/focus-loop-registry.js +2 -2
  48. package/dist/focus/focus-loop-registry.js.map +1 -1
  49. package/dist/focus/focus-team-state.js +1 -1
  50. package/dist/focus/listener-spawn.d.ts.map +1 -1
  51. package/dist/focus/listener-spawn.js +5 -20
  52. package/dist/focus/listener-spawn.js.map +1 -1
  53. package/dist/focus/listener-state.d.ts.map +1 -1
  54. package/dist/focus/listener-state.js +1 -0
  55. package/dist/focus/listener-state.js.map +1 -1
  56. package/dist/focus/listener.d.ts +1 -0
  57. package/dist/focus/listener.d.ts.map +1 -1
  58. package/dist/focus/listener.js +9 -0
  59. package/dist/focus/listener.js.map +1 -1
  60. package/dist/focus/migration-claim-pass.d.ts +50 -0
  61. package/dist/focus/migration-claim-pass.d.ts.map +1 -0
  62. package/dist/focus/migration-claim-pass.js +234 -0
  63. package/dist/focus/migration-claim-pass.js.map +1 -0
  64. package/dist/focus/pending-spawn-pass-deps.d.ts.map +1 -1
  65. package/dist/focus/pending-spawn-pass-deps.js +2 -1
  66. package/dist/focus/pending-spawn-pass-deps.js.map +1 -1
  67. package/dist/focus/team-actionable-work.d.ts +21 -0
  68. package/dist/focus/team-actionable-work.d.ts.map +1 -1
  69. package/dist/focus/team-actionable-work.js +3 -0
  70. package/dist/focus/team-actionable-work.js.map +1 -1
  71. package/dist/git/types.d.ts.map +1 -1
  72. package/dist/git/types.js +2 -1
  73. package/dist/git/types.js.map +1 -1
  74. package/dist/loops/llm-client.d.ts +1 -1
  75. package/dist/loops/llm-client.d.ts.map +1 -1
  76. package/dist/loops/llm-client.js +29 -106
  77. package/dist/loops/llm-client.js.map +1 -1
  78. package/dist/migrations/migration-claim-lifecycle.d.ts +166 -0
  79. package/dist/migrations/migration-claim-lifecycle.d.ts.map +1 -0
  80. package/dist/migrations/migration-claim-lifecycle.js +198 -0
  81. package/dist/migrations/migration-claim-lifecycle.js.map +1 -0
  82. package/dist/migrations/migration-held-set.d.ts +171 -0
  83. package/dist/migrations/migration-held-set.d.ts.map +1 -0
  84. package/dist/migrations/migration-held-set.js +295 -0
  85. package/dist/migrations/migration-held-set.js.map +1 -0
  86. package/dist/migrations/migration-inventory.d.ts +187 -0
  87. package/dist/migrations/migration-inventory.d.ts.map +1 -0
  88. package/dist/migrations/migration-inventory.js +253 -0
  89. package/dist/migrations/migration-inventory.js.map +1 -0
  90. package/dist/migrations/migration-manifest.d.ts +114 -0
  91. package/dist/migrations/migration-manifest.d.ts.map +1 -0
  92. package/dist/migrations/migration-manifest.js +295 -0
  93. package/dist/migrations/migration-manifest.js.map +1 -0
  94. package/dist/prompt/team-prompt-base.js +1 -1
  95. package/dist/prompt-sections/migration-numbering-section.d.ts +58 -0
  96. package/dist/prompt-sections/migration-numbering-section.d.ts.map +1 -0
  97. package/dist/prompt-sections/migration-numbering-section.js +70 -0
  98. package/dist/prompt-sections/migration-numbering-section.js.map +1 -0
  99. package/dist/prompt-sections/migration-numbering-state.d.ts +30 -0
  100. package/dist/prompt-sections/migration-numbering-state.d.ts.map +1 -0
  101. package/dist/prompt-sections/migration-numbering-state.js +24 -0
  102. package/dist/prompt-sections/migration-numbering-state.js.map +1 -0
  103. package/dist/prompt-sections/unclaimed-migration-section.d.ts +38 -0
  104. package/dist/prompt-sections/unclaimed-migration-section.d.ts.map +1 -0
  105. package/dist/prompt-sections/unclaimed-migration-section.js +57 -0
  106. package/dist/prompt-sections/unclaimed-migration-section.js.map +1 -0
  107. package/dist/queries/agent-resolvable-promotion.d.ts +12 -0
  108. package/dist/queries/agent-resolvable-promotion.d.ts.map +1 -1
  109. package/dist/queries/agent-resolvable-promotion.js +17 -6
  110. package/dist/queries/agent-resolvable-promotion.js.map +1 -1
  111. package/dist/queries/claim-pass-focuses.d.ts +19 -0
  112. package/dist/queries/claim-pass-focuses.d.ts.map +1 -0
  113. package/dist/queries/claim-pass-focuses.js +72 -0
  114. package/dist/queries/claim-pass-focuses.js.map +1 -0
  115. package/dist/queries/daemon-connection.d.ts.map +1 -1
  116. package/dist/queries/daemon-connection.js +1 -0
  117. package/dist/queries/daemon-connection.js.map +1 -1
  118. package/dist/queries/delivery-gate-state.d.ts +3 -0
  119. package/dist/queries/delivery-gate-state.d.ts.map +1 -1
  120. package/dist/queries/delivery-gate-state.js +1 -1
  121. package/dist/queries/delivery-gate-state.js.map +1 -1
  122. package/dist/queries/focus-discovery.d.ts +25 -2
  123. package/dist/queries/focus-discovery.d.ts.map +1 -1
  124. package/dist/queries/focus-discovery.js +16 -9
  125. package/dist/queries/focus-discovery.js.map +1 -1
  126. package/dist/queries/focus-unclaimed-migration.d.ts +146 -0
  127. package/dist/queries/focus-unclaimed-migration.d.ts.map +1 -0
  128. package/dist/queries/focus-unclaimed-migration.js +266 -0
  129. package/dist/queries/focus-unclaimed-migration.js.map +1 -0
  130. package/dist/queries/live-focus-branches.d.ts +32 -0
  131. package/dist/queries/live-focus-branches.d.ts.map +1 -0
  132. package/dist/queries/live-focus-branches.js +66 -0
  133. package/dist/queries/live-focus-branches.js.map +1 -0
  134. package/dist/queries/migration-claims.d.ts +25 -0
  135. package/dist/queries/migration-claims.d.ts.map +1 -0
  136. package/dist/queries/migration-claims.js +79 -0
  137. package/dist/queries/migration-claims.js.map +1 -0
  138. package/dist/queries/schemas.d.ts +2 -0
  139. package/dist/queries/schemas.d.ts.map +1 -1
  140. package/dist/queries/schemas.js +6 -0
  141. package/dist/queries/schemas.js.map +1 -1
  142. package/dist/queries/shared.js +1 -1
  143. package/dist/queries/verify-own-holds.d.ts +89 -0
  144. package/dist/queries/verify-own-holds.d.ts.map +1 -0
  145. package/dist/queries/verify-own-holds.js +93 -0
  146. package/dist/queries/verify-own-holds.js.map +1 -0
  147. package/dist/session/session-lineage.d.ts.map +1 -1
  148. package/dist/session/session-lineage.js +3 -0
  149. package/dist/session/session-lineage.js.map +1 -1
  150. package/dist/shell/heartbeat-metadata.d.ts +48 -2
  151. package/dist/shell/heartbeat-metadata.d.ts.map +1 -1
  152. package/dist/shell/heartbeat-metadata.js +80 -3
  153. package/dist/shell/heartbeat-metadata.js.map +1 -1
  154. package/dist/shell/heartbeat.d.ts +13 -0
  155. package/dist/shell/heartbeat.d.ts.map +1 -1
  156. package/dist/shell/heartbeat.js +31 -10
  157. package/dist/shell/heartbeat.js.map +1 -1
  158. package/dist/shell/mcp-resolution.js +1 -1
  159. package/dist/shell/mcp-resolution.js.map +1 -1
  160. package/dist/shell/migration-held-set-publish.d.ts +170 -0
  161. package/dist/shell/migration-held-set-publish.d.ts.map +1 -0
  162. package/dist/shell/migration-held-set-publish.js +172 -0
  163. package/dist/shell/migration-held-set-publish.js.map +1 -0
  164. package/dist/shell/worker-pidfile.d.ts.map +1 -1
  165. package/dist/shell/worker-pidfile.js +1 -0
  166. package/dist/shell/worker-pidfile.js.map +1 -1
  167. package/dist/spawn/helpers.d.ts.map +1 -1
  168. package/dist/spawn/helpers.js +1 -0
  169. package/dist/spawn/helpers.js.map +1 -1
  170. package/dist/spawn/lead-launch.d.ts.map +1 -1
  171. package/dist/spawn/lead-launch.js +1 -0
  172. package/dist/spawn/lead-launch.js.map +1 -1
  173. package/dist/spawn/lead-process-ownership.d.ts.map +1 -1
  174. package/dist/spawn/lead-process-ownership.js +1 -0
  175. package/dist/spawn/lead-process-ownership.js.map +1 -1
  176. package/dist/spawn/one-shot-model.d.ts +145 -0
  177. package/dist/spawn/one-shot-model.d.ts.map +1 -0
  178. package/dist/spawn/one-shot-model.js +329 -0
  179. package/dist/spawn/one-shot-model.js.map +1 -0
  180. package/dist/spawn/process-group-kill.d.ts.map +1 -1
  181. package/dist/spawn/process-group-kill.js +1 -0
  182. package/dist/spawn/process-group-kill.js.map +1 -1
  183. package/dist/spawn/process-spawn.d.ts +18 -1
  184. package/dist/spawn/process-spawn.d.ts.map +1 -1
  185. package/dist/spawn/process-spawn.js +11 -6
  186. package/dist/spawn/process-spawn.js.map +1 -1
  187. package/dist/spawn/prompt-assembly.d.ts +115 -18
  188. package/dist/spawn/prompt-assembly.d.ts.map +1 -1
  189. package/dist/spawn/prompt-assembly.js +121 -2
  190. package/dist/spawn/prompt-assembly.js.map +1 -1
  191. package/dist/spawn/review-hold-park.d.ts.map +1 -1
  192. package/dist/spawn/review-hold-park.js +7 -3
  193. package/dist/spawn/review-hold-park.js.map +1 -1
  194. package/dist/spawn/routing-decider-spawn.d.ts +30 -0
  195. package/dist/spawn/routing-decider-spawn.d.ts.map +1 -1
  196. package/dist/spawn/routing-decider-spawn.js +84 -2
  197. package/dist/spawn/routing-decider-spawn.js.map +1 -1
  198. package/dist/spawn/routing-decider.d.ts.map +1 -1
  199. package/dist/spawn/routing-decider.js +22 -0
  200. package/dist/spawn/routing-decider.js.map +1 -1
  201. package/dist/spawn/spawn-and-acknowledge.d.ts +61 -0
  202. package/dist/spawn/spawn-and-acknowledge.d.ts.map +1 -0
  203. package/dist/spawn/spawn-and-acknowledge.js +117 -0
  204. package/dist/spawn/spawn-and-acknowledge.js.map +1 -0
  205. package/dist/spawn/spawn-cooldown.d.ts +15 -1
  206. package/dist/spawn/spawn-cooldown.d.ts.map +1 -1
  207. package/dist/spawn/spawn-cooldown.js +67 -19
  208. package/dist/spawn/spawn-cooldown.js.map +1 -1
  209. package/dist/spawn/spawn-decision.d.ts +10 -10
  210. package/dist/spawn/spawn-decision.d.ts.map +1 -1
  211. package/dist/spawn/spawn-decision.js +33 -5
  212. package/dist/spawn/spawn-decision.js.map +1 -1
  213. package/dist/templates/claude-md.d.ts +1 -1
  214. package/dist/templates/claude-md.d.ts.map +1 -1
  215. package/dist/templates/claude-md.js +24 -0
  216. package/dist/templates/claude-md.js.map +1 -1
  217. package/dist/testing/fixtures/index.js +1 -1
  218. package/dist/testing/fixtures/migration-namespace-repo.d.ts +63 -0
  219. package/dist/testing/fixtures/migration-namespace-repo.d.ts.map +1 -0
  220. package/dist/testing/fixtures/migration-namespace-repo.js +164 -0
  221. package/dist/testing/fixtures/migration-namespace-repo.js.map +1 -0
  222. package/dist/testing/fixtures/stubborn-lead-process.d.ts.map +1 -1
  223. package/dist/testing/fixtures/stubborn-lead-process.js +1 -0
  224. package/dist/testing/fixtures/stubborn-lead-process.js.map +1 -1
  225. package/dist/types/index.js +1 -1
  226. package/dist/verify/ai-inspection-runner.d.ts.map +1 -1
  227. package/dist/verify/ai-inspection-runner.js +26 -7
  228. package/dist/verify/ai-inspection-runner.js.map +1 -1
  229. package/dist/verify/de-restatement.d.ts +9 -2
  230. package/dist/verify/de-restatement.d.ts.map +1 -1
  231. package/dist/verify/de-restatement.js +14 -76
  232. package/dist/verify/de-restatement.js.map +1 -1
  233. package/dist/verify/default-on-guards.d.ts +5 -2
  234. package/dist/verify/default-on-guards.d.ts.map +1 -1
  235. package/dist/verify/default-on-guards.js +5 -3
  236. package/dist/verify/default-on-guards.js.map +1 -1
  237. package/dist/verify/no-own-delta-verdict.d.ts +16 -2
  238. package/dist/verify/no-own-delta-verdict.d.ts.map +1 -1
  239. package/dist/verify/no-own-delta-verdict.js +18 -2
  240. package/dist/verify/no-own-delta-verdict.js.map +1 -1
  241. package/dist/verify/verification-deps-default.d.ts.map +1 -1
  242. package/dist/verify/verification-deps-default.js +6 -0
  243. package/dist/verify/verification-deps-default.js.map +1 -1
  244. package/dist/verify/verification-deps.d.ts +10 -0
  245. package/dist/verify/verification-deps.d.ts.map +1 -1
  246. package/dist/verify/verification-deterministic.d.ts +7 -0
  247. package/dist/verify/verification-deterministic.d.ts.map +1 -1
  248. package/dist/verify/verification-deterministic.js.map +1 -1
  249. package/dist/verify/verification-engine.d.ts +1 -20
  250. package/dist/verify/verification-engine.d.ts.map +1 -1
  251. package/dist/verify/verification-engine.js +24 -55
  252. package/dist/verify/verification-engine.js.map +1 -1
  253. package/dist/verify/verification-evidence-unavailable-feedback.d.ts +3 -1
  254. package/dist/verify/verification-evidence-unavailable-feedback.d.ts.map +1 -1
  255. package/dist/verify/verification-evidence-unavailable-feedback.js +3 -1
  256. package/dist/verify/verification-evidence-unavailable-feedback.js.map +1 -1
  257. package/dist/verify/verification-feedback.d.ts +4 -12
  258. package/dist/verify/verification-feedback.d.ts.map +1 -1
  259. package/dist/verify/verification-feedback.js +7 -12
  260. package/dist/verify/verification-feedback.js.map +1 -1
  261. package/dist/verify/verification-history-reset.d.ts.map +1 -1
  262. package/dist/verify/verification-history-reset.js +11 -3
  263. package/dist/verify/verification-history-reset.js.map +1 -1
  264. package/dist/verify/verification-model-unavailable-hold.d.ts +92 -0
  265. package/dist/verify/verification-model-unavailable-hold.d.ts.map +1 -0
  266. package/dist/verify/verification-model-unavailable-hold.js +207 -0
  267. package/dist/verify/verification-model-unavailable-hold.js.map +1 -0
  268. package/dist/verify/verification-strategies.d.ts +32 -0
  269. package/dist/verify/verification-strategies.d.ts.map +1 -0
  270. package/dist/verify/verification-strategies.js +47 -0
  271. package/dist/verify/verification-strategies.js.map +1 -0
  272. package/dist/verify/verify-reconciliation.d.ts.map +1 -1
  273. package/dist/verify/verify-reconciliation.js +2 -1
  274. package/dist/verify/verify-reconciliation.js.map +1 -1
  275. package/dist/verify/verify-restatement.d.ts.map +1 -1
  276. package/dist/verify/verify-restatement.js +21 -8
  277. package/dist/verify/verify-restatement.js.map +1 -1
  278. package/package.json +2 -2
@@ -22,6 +22,9 @@ import { buildAuditMetricRow } from './lifecycle.js';
22
22
  import { bufferMetric as defaultBufferMetric } from '../otlp/telemetry-writer.js';
23
23
  import { estimateLoopCostUsd } from '../loops/index.js';
24
24
  import { createLogger } from '../shell/log.js';
25
+ import { parseRateLimitInfo } from './rate-limit.js';
26
+ import { providerRateLimitHoldUntilMs, recordProviderRateLimit } from './spawn-cooldown.js';
27
+ import { providerRefusalInProse } from './one-shot-model.js';
25
28
  const log = createLogger({ module: 'routing-decider' });
26
29
  /**
27
30
  * MODEL PIN: 'opus'. A routing decision is the one place the system chooses to
@@ -55,6 +58,21 @@ export const ROUTING_DECIDER_MCP_TOOLS = [
55
58
  'mcp__telora-products__telora_reality_tree_traverse',
56
59
  'mcp__telora-products__telora_wiki_search',
57
60
  ];
61
+ /**
62
+ * Pure: the model unavailability a finished decider's facts amount to, or null
63
+ * (any other outcome). Typed signals first; the result's prose is read through
64
+ * the one-shot wrapper's classifier so both spawners read one CLI the same way.
65
+ */
66
+ export function deciderModelUnavailability(facts) {
67
+ if (facts.rateLimitRejected)
68
+ return { kind: 'rate_limit', resetAtMs: facts.rateLimitRejected.resetAtMs };
69
+ if (facts.apiErrorStatus === 429)
70
+ return { kind: 'rate_limit', resetAtMs: null };
71
+ if (facts.apiErrorStatus === 401 || facts.apiErrorStatus === 403)
72
+ return { kind: 'auth', resetAtMs: null };
73
+ const refusal = facts.errorResultText !== null ? providerRefusalInProse(facts.errorResultText) : null;
74
+ return refusal ? { kind: refusal, resetAtMs: null } : undefined;
75
+ }
58
76
  const defaultSeam = {
59
77
  spawnProcess: (command, args, options) => nodeSpawn(command, args, { cwd: options.cwd, env: options.env, stdio: ['pipe', 'pipe', 'pipe'] }),
60
78
  };
@@ -97,6 +115,66 @@ export function buildRoutingDeciderMetricRow(params) {
97
115
  metadata: { source: 'routing-decider', escalationId: params.escalationId },
98
116
  };
99
117
  }
118
+ /**
119
+ * The not-started result for a decider asked for inside the provider-wide
120
+ * rate-limit window (spawn-cooldown.ts), or null when no window is open. A
121
+ * decider started now would be rejected on the same limit and its exit consumed
122
+ * as an attempt; the sweep re-hands it after the reset.
123
+ */
124
+ function providerHoldResult(escalationId) {
125
+ const holdUntil = providerRateLimitHoldUntilMs();
126
+ if (holdUntil === null)
127
+ return null;
128
+ const until = new Date(holdUntil).toISOString();
129
+ log.info(`[routing-decider] not spawning a decider for ${escalationId}: provider rate limit holds every spawn until ${until}`);
130
+ return {
131
+ started: false, exitCode: null, timedOut: false, stdout: '', stderr: '', sessionId: null,
132
+ errorMessage: `provider rate limit holds every spawn until ${until}`,
133
+ modelUnavailable: { kind: 'rate_limit', resetAtMs: holdUntil },
134
+ };
135
+ }
136
+ /**
137
+ * Listen for the provider's own words about itself on the decider's stream: a
138
+ * REJECTED rate limit carries the reset instant (the typed event the team path
139
+ * reads, spawn/rate-limit.ts) and opens the provider-wide window; an error result
140
+ * carries the API status. The facts are filled in as the session runs.
141
+ */
142
+ function attachProviderFacts(parser, escalationId) {
143
+ const facts = { rateLimitRejected: null, apiErrorStatus: null, errorResultText: null };
144
+ parser.on('event', (event) => {
145
+ const rl = parseRateLimitInfo(event);
146
+ if (rl && rl.status === 'rejected') {
147
+ facts.rateLimitRejected = { resetAtMs: rl.resetsAtMs };
148
+ if (rl.resetsAtMs !== null)
149
+ recordProviderRateLimit(rl.resetsAtMs);
150
+ log.warn(`[routing-decider] decider for ${escalationId}: provider rate limit REJECTED` +
151
+ `${rl.rateLimitType ? ` [${rl.rateLimitType}]` : ''}` +
152
+ `${rl.resetsAtMs !== null ? ` -- resets ${new Date(rl.resetsAtMs).toISOString()}` : ''}`);
153
+ }
154
+ });
155
+ parser.on('result', (ev) => {
156
+ if (ev.is_error !== true)
157
+ return;
158
+ const status = ev.api_error_status;
159
+ if (typeof status === 'number')
160
+ facts.apiErrorStatus = status;
161
+ const text = ev.result;
162
+ if (typeof text === 'string')
163
+ facts.errorResultText = text;
164
+ });
165
+ return facts;
166
+ }
167
+ /**
168
+ * The `modelUnavailable` slice of a finished decider's result. A clean exit (0,
169
+ * no timeout) is a decider that ran, whatever the provider said along the way;
170
+ * only a session that did NOT complete is classified. Pure.
171
+ */
172
+ function unavailabilityOf(code, timedOut, facts) {
173
+ if (code === 0 && !timedOut)
174
+ return {};
175
+ const mu = deciderModelUnavailability(facts);
176
+ return mu ? { modelUnavailable: mu } : {};
177
+ }
100
178
  /** Spawn one routing decider and resolve when it exits (or is killed at the timeout). Never rejects. */
101
179
  export async function spawnRoutingDecider(opts, seam = defaultSeam) {
102
180
  const { config, focusId, escalationId } = opts;
@@ -108,6 +186,9 @@ export async function spawnRoutingDecider(opts, seam = defaultSeam) {
108
186
  });
109
187
  spawnEnv.TELORA_DAEMON_ROUTING_DECIDER = escalationId;
110
188
  const periodStart = new Date().toISOString();
189
+ const held = providerHoldResult(escalationId);
190
+ if (held)
191
+ return held;
111
192
  return await new Promise((resolve) => {
112
193
  let child;
113
194
  try {
@@ -141,6 +222,7 @@ export async function spawnRoutingDecider(opts, seam = defaultSeam) {
141
222
  }
142
223
  });
143
224
  parser.on('error', () => { });
225
+ const facts = attachProviderFacts(parser, escalationId);
144
226
  parser.on('result', (ev) => {
145
227
  if (!ev.usage)
146
228
  return;
@@ -174,11 +256,11 @@ export async function spawnRoutingDecider(opts, seam = defaultSeam) {
174
256
  const text = () => (assistantText.trim() ? assistantText : rawStdout);
175
257
  child.on('error', (err) => {
176
258
  clearTimeout(timer);
177
- resolve({ started, exitCode: null, timedOut, stdout: text(), stderr, sessionId: parser.sessionId, errorMessage: `spawn error: ${err.message}` });
259
+ resolve({ started, exitCode: null, timedOut, stdout: text(), stderr, sessionId: parser.sessionId, errorMessage: `spawn error: ${err.message}`, ...unavailabilityOf(null, timedOut, facts) });
178
260
  });
179
261
  child.on('close', (code) => {
180
262
  clearTimeout(timer);
181
- resolve({ started, exitCode: code, timedOut, stdout: text(), stderr, sessionId: parser.sessionId });
263
+ resolve({ started, exitCode: code, timedOut, stdout: text(), stderr, sessionId: parser.sessionId, ...unavailabilityOf(code, timedOut, facts) });
182
264
  });
183
265
  });
184
266
  }
@@ -1 +1 @@
1
- {"version":3,"file":"routing-decider-spawn.js","sourceRoot":"","sources":["../../src/spawn/routing-decider-spawn.ts"],"names":[],"mappings":"AAAA,8FAA8F;AAC9F,qEAAqE;AACrE,gBAAgB;AAEhB;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,KAAK,IAAI,SAAS,EAAqB,MAAM,oBAAoB,CAAC;AAC3E,OAAO,EACL,sBAAsB,EACtB,gBAAgB,GAIjB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,4BAA4B,EAAE,MAAM,wBAAwB,CAAC;AACtE,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAE,YAAY,IAAI,mBAAmB,EAA2B,MAAM,6BAA6B,CAAC;AAC3G,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,MAAM,GAAG,GAAG,YAAY,CAAC,EAAE,MAAM,EAAE,iBAAiB,EAAE,CAAC,CAAC;AAExD;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,MAAM,CAAC;AAE5C,0EAA0E;AAC1E,MAAM,CAAC,MAAM,0BAA0B,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAEzD,wFAAwF;AACxF,MAAM,CAAC,MAAM,qBAAqB,GAAG,kBAAkB,CAAC;AAExD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAsB;IAC1D,oCAAoC;IACpC,sCAAsC;IACtC,4CAA4C;IAC5C,+CAA+C;IAC/C,4CAA4C;IAC5C,oDAAoD;IACpD,0CAA0C;CAC3C,CAAC;AAiCF,MAAM,WAAW,GAA4B;IAC3C,YAAY,EAAE,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,CACvC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;CACpG,CAAC;AAEF,wCAAwC;AACxC,MAAM,UAAU,uBAAuB,CAAC,IAA2E;IACjH,OAAO;QACL,SAAS;QACT,iBAAiB,EAAE,aAAa;QAChC,WAAW;QACX,gCAAgC;QAChC,mBAAmB,EAAE,eAAe;QACpC,iBAAiB,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC;QAC9C,SAAS,EAAE,IAAI,CAAC,KAAK;QACrB,IAAI,CAAC,MAAM;KACZ,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,4BAA4B,CAAC,MAU5C;IACC,MAAM,IAAI,GAAG,MAAM,CAAC,YAAY,KAAK,IAAI,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,YAAY,CAAC;QAC/E,CAAC,CAAC,MAAM,CAAC,YAAY;QACrB,CAAC,CAAC,mBAAmB,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;IACpD,MAAM,GAAG,GAAG,mBAAmB,CAAC;QAC9B,cAAc,EAAE,MAAM,CAAC,cAAc;QACrC,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,WAAW,EAAE,CAAC;QACd,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,YAAY,EAAE,IAAI;QAClB,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,SAAS,EAAE,MAAM,CAAC,SAAS;KAC5B,CAAC,CAAC;IACH,OAAO;QACL,GAAG,GAAG;QACN,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,KAAK,EAAE,qBAAqB;QAC5B,QAAQ,EAAE,EAAE,MAAM,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,CAAC,YAAY,EAAE;KAC3E,CAAC;AACJ,CAAC;AAED,wGAAwG;AACxG,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,IAAgC,EAChC,OAAgC,WAAW;IAE3C,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC;IAC/C,MAAM,QAAQ,GAAG,4BAA4B,CAAC,MAAM,EAAE;QACpD,KAAK,EAAE,MAAM,CAAC,cAAc;QAC5B,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/B,KAAK,EAAE,qBAAqB;QAC5B,KAAK,EAAE,qBAAqB;KAC7B,CAAC,CAAC;IACH,QAAQ,CAAC,6BAA6B,GAAG,YAAY,CAAC;IACtD,MAAM,WAAW,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAE7C,OAAO,MAAM,IAAI,OAAO,CAA4B,CAAC,OAAO,EAAE,EAAE;QAC9D,IAAI,KAAmB,CAAC;QACxB,IAAI,CAAC;YACH,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,cAAc,EAAE,uBAAuB,CAAC,IAAI,CAAC,EAAE;gBAC9E,GAAG,EAAE,IAAI,CAAC,GAAG;gBACb,GAAG,EAAE,sBAAsB,CAAC,QAAQ,CAAC;aACtC,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,YAAY,EAAE,iBAAkB,GAAa,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YAC/J,OAAO;QACT,CAAC;QACD,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,IAAI,QAAQ,GAAG,KAAK,CAAC;QACrB,IAAI,SAAS,GAAG,EAAE,CAAC;QACnB,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,IAAI,aAAa,GAAG,EAAE,CAAC;QACvB,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE;YACvB,OAAO,GAAG,IAAI,CAAC;YACf,+EAA+E;YAC/E,iBAAiB,CAAC,KAAK,EAAE,mBAAmB,YAAY,EAAE,CAAC,CAAC;QAC9D,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC;QAEnB,MAAM,MAAM,GAAG,IAAI,gBAAgB,EAAE,CAAC;QACtC,IAAI,KAAK,CAAC,MAAM;YAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC9C,MAAM,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,GAAG,EAAE,EAAE;YAC7B,KAAK,MAAM,KAAK,IAAI,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;gBACxC,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM;oBAAE,aAAa,IAAI,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;YAChE,CAAC;QACH,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,GAA0D,CAAC,CAAC,CAAC;QACrF,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,EAA+B,EAAE,EAAE;YACtD,IAAI,CAAC,EAAE,CAAC,KAAK;gBAAE,OAAO;YACtB,IAAI,CAAC;gBACH,CAAC,IAAI,CAAC,YAAY,IAAI,mBAAmB,CAAC,CAAC,4BAA4B,CAAC;oBACtE,cAAc,EAAE,MAAM,CAAC,cAAc;oBACrC,OAAO;oBACP,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,IAAI;oBACnC,YAAY;oBACZ,KAAK,EAAE,IAAI,CAAC,KAAK;oBACjB,KAAK,EAAE,EAAE,CAAC,KAAK;oBACf,YAAY,EAAE,OAAO,EAAE,CAAC,cAAc,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI;oBACpH,WAAW;oBACX,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;iBACpC,CAAC,CAAC,CAAC;YACN,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,GAAG,CAAC,IAAI,CAAC,2DAA4D,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;YAChG,CAAC;QACH,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE,GAAG,SAAS,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACtF,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE,GAAG,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAEnF,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;YAC5B,QAAQ,GAAG,IAAI,CAAC;YAChB,GAAG,CAAC,IAAI,CAAC,iCAAiC,YAAY,oBAAoB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC;YACzH,IAAI,CAAC;gBAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC,CAAC,kBAAkB,CAAC,CAAC;QAC7D,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QAEnB,MAAM,IAAI,GAAG,GAAW,EAAE,CAAC,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QAC9E,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;YACxB,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,OAAO,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,YAAY,EAAE,gBAAgB,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QACnJ,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAmB,EAAE,EAAE;YACxC,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,OAAO,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;QACtG,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"routing-decider-spawn.js","sourceRoot":"","sources":["../../src/spawn/routing-decider-spawn.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"routing-decider.d.ts","sourceRoot":"","sources":["../../src/spawn/routing-decider.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAa,MAAM,qBAAqB,CAAC;AACvE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,KAAK,EAAE,cAAc,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,0CAA0C,CAAC;AAM9H,OAAO,EAKL,KAAK,0BAA0B,EAC/B,KAAK,yBAAyB,EAC/B,MAAM,4BAA4B,CAAC;AAEpC,+CAA+C;AAC/C,eAAO,MAAM,6BAA6B,EAAE,SAAS,MAAM,EAA0D,CAAC;AAEtH;;;;GAIG;AACH,eAAO,MAAM,+BAA+B,oBAAoB,CAAC;AAEjE,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,IAAI,CAAC,gBAAgB,EAAE,gBAAgB,GAAG,aAAa,CAAC,GAAG,IAAI,CAAC;IAC1E,MAAM,EAAE,YAAY,CAAC;IACrB,cAAc,CAAC,EAAE,CAAC,OAAO,EAAE,sBAAsB,EAAE,MAAM,EAAE,YAAY,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAC5F,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,0BAA0B,KAAK,OAAO,CAAC,yBAAyB,CAAC,CAAC;CAClF;AAED,mGAAmG;AACnG,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,YAAY,CAG7F;AAED,iEAAiE;AACjE,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,yBAAyB,GAAG,qBAAqB,CAShG;AAyCD,2CAA2C;AAC3C,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,kBAAkB,GAAG,cAAc,CAe7E"}
1
+ {"version":3,"file":"routing-decider.d.ts","sourceRoot":"","sources":["../../src/spawn/routing-decider.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAa,MAAM,qBAAqB,CAAC;AACvE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,KAAK,EAAE,cAAc,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,0CAA0C,CAAC;AAO9H,OAAO,EAKL,KAAK,0BAA0B,EAC/B,KAAK,yBAAyB,EAC/B,MAAM,4BAA4B,CAAC;AAEpC,+CAA+C;AAC/C,eAAO,MAAM,6BAA6B,EAAE,SAAS,MAAM,EAA0D,CAAC;AAEtH;;;;GAIG;AACH,eAAO,MAAM,+BAA+B,oBAAoB,CAAC;AAEjE,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,IAAI,CAAC,gBAAgB,EAAE,gBAAgB,GAAG,aAAa,CAAC,GAAG,IAAI,CAAC;IAC1E,MAAM,EAAE,YAAY,CAAC;IACrB,cAAc,CAAC,EAAE,CAAC,OAAO,EAAE,sBAAsB,EAAE,MAAM,EAAE,YAAY,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAC5F,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,0BAA0B,KAAK,OAAO,CAAC,yBAAyB,CAAC,CAAC;CAClF;AAED,mGAAmG;AACnG,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,YAAY,CAG7F;AAED,iEAAiE;AACjE,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,yBAAyB,GAAG,qBAAqB,CAqBhG;AAkDD,2CAA2C;AAC3C,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,kBAAkB,GAAG,cAAc,CAe7E"}
@@ -5,6 +5,7 @@ import { resolveAssemblyRecipeWithManifest } from '../resolvers/assembly-engine.
5
5
  import { initResolvers } from '../resolvers/index.js';
6
6
  import { getFocusDeliveries } from '../queries/focuses.js';
7
7
  import { configForProduct, findProduct } from '../shell/config.js';
8
+ import { providerRateLimitHoldUntilMs } from './spawn-cooldown.js';
8
9
  import { buildRoutingDeciderPrompt, parseRoutingDecision } from '../prompt-sections/routing-decider-sections.js';
9
10
  import { spawnRoutingDecider, ROUTING_DECIDER_MCP_TOOLS, ROUTING_DECIDER_MODEL, ROUTING_DECIDER_TIMEOUT_MS, } from './routing-decider-spawn.js';
10
11
  /** The intent ladder a decider reads first. */
@@ -22,6 +23,18 @@ export function deciderConfigFor(config, productId) {
22
23
  }
23
24
  /** Pure: a spawn result as the sweep's RoutingDecisionResult. */
24
25
  export function toRoutingDecisionResult(result) {
26
+ if (result.modelUnavailable) {
27
+ // The MODEL was unavailable (provider rate limit, auth): the decider did not
28
+ // decide and did not attempt -- nothing is stamped, the sweep re-hands it.
29
+ const { kind, resetAtMs } = result.modelUnavailable;
30
+ return {
31
+ ran: false,
32
+ decided: false,
33
+ modelUnavailable: true,
34
+ detail: `decider could not run: model unavailable (${kind}` +
35
+ `${resetAtMs !== null ? `, resets ${new Date(resetAtMs).toISOString()}` : ''})`,
36
+ };
37
+ }
25
38
  if (!result.started) {
26
39
  return { ran: false, decided: false, detail: result.errorMessage ?? 'decider process did not start' };
27
40
  }
@@ -49,6 +62,15 @@ async function defaultAssembleLadder(request, config) {
49
62
  return (await resolveAssemblyRecipeWithManifest([...ROUTING_DECIDER_LADDER_RECIPE], ctx)).content;
50
63
  }
51
64
  async function runDecider(deps, request) {
65
+ // Inside the provider-wide rate-limit window nothing can run: say so before
66
+ // the ladder assembly spends its API reads (the spawn checks again, last).
67
+ const holdUntil = providerRateLimitHoldUntilMs();
68
+ if (holdUntil !== null) {
69
+ return toRoutingDecisionResult({
70
+ started: false, exitCode: null, timedOut: false, stdout: '', stderr: '', sessionId: null,
71
+ modelUnavailable: { kind: 'rate_limit', resetAtMs: holdUntil },
72
+ });
73
+ }
52
74
  const config = deciderConfigFor(deps.config, request.item.productId);
53
75
  let ladder = '';
54
76
  let ladderError;
@@ -1 +1 @@
1
- {"version":3,"file":"routing-decider.js","sourceRoot":"","sources":["../../src/spawn/routing-decider.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"routing-decider.js","sourceRoot":"","sources":["../../src/spawn/routing-decider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,61 @@
1
+ /**
2
+ * The spawn, the registration hand-off, and the notice acknowledgement -- as
3
+ * ONE sequence, because the order between them is the thing that was wrong.
4
+ *
5
+ * WHAT WENT WRONG. The unclaimed-migration record was marked NAMED while the
6
+ * spawn's section inputs were being gathered -- before the session existed. A
7
+ * spawn that then failed left the record named with nobody having read
8
+ * anything: the completion hold lifted, the next spawn saw an already-delivered
9
+ * record, and the team that wrote the file was never told.
10
+ *
11
+ * Moving the mark after the spawn was necessary and not sufficient.
12
+ * `spawnTeamProcess` returns NORMALLY on four refusals -- an unavailable
13
+ * backend, a governor denial, an unavailable sandbox, and a previous lead that
14
+ * would not end -- and on each of them no process exists to have read the
15
+ * message. Acknowledging on a refusal is the same defect with a later
16
+ * timestamp, which is why the outcome is a discriminated union rather than
17
+ * void: "did a process actually start?" has to be a question the caller can
18
+ * ask.
19
+ *
20
+ * WHY THIS IS A MODULE AND NOT THREE LINES IN spawnFocusTeam. Those three lines
21
+ * ARE the fix, and inside the orchestrator nothing could observe them: driving
22
+ * `spawnFocusTeam` needs a worktree rebase, a session create and a backend
23
+ * probe before it reaches them. Here the sequence is importable, so a test can
24
+ * drive a REAL spawn (and a real refusal) through it and watch what the
25
+ * acknowledgement does -- which is what turns "the guard is written down" into
26
+ * "the guard is applied".
27
+ *
28
+ * @module spawn/spawn-and-acknowledge
29
+ */
30
+ import { type SpawnTeamProcessArgs, type SpawnTeamProcessResult } from './process-spawn.js';
31
+ /**
32
+ * Record that the unclaimed-migration notice reached the team -- ONLY once the
33
+ * session exists and its message (which carries the notice) has been written.
34
+ *
35
+ * NEVER THROWS. The caller runs this between the spawn and its own error
36
+ * handling, and a throw here would unwind a spawn that actually succeeded,
37
+ * releasing a registration the live child process owns. A failure to record
38
+ * leaves the record unnamed, which is the safe direction: the next spawn, or
39
+ * the completion-event notice phase, tells the team again.
40
+ */
41
+ export declare function acknowledgeUnclaimedNotice(focusName: string, confirm: (() => Promise<void>) | null, outcome: SpawnTeamProcessResult): Promise<void>;
42
+ /** What the acknowledgement needs to know about the notice it is confirming. */
43
+ export interface UnclaimedNoticeAcknowledgement {
44
+ focusName: string;
45
+ /**
46
+ * The confirmation the section assembly handed back, or null when this focus
47
+ * had no unclaimed record to deliver in the first place.
48
+ */
49
+ confirm: (() => Promise<void>) | null;
50
+ }
51
+ /**
52
+ * Spawn the team lead, hand the registration off, then acknowledge the notice.
53
+ *
54
+ * `onSpawned` is the caller's registration hand-off (spawnFocusTeam's
55
+ * `teamCommitted` flag). It runs BETWEEN the spawn and the acknowledgement, in
56
+ * that order, because the child process owns the team lifecycle from the moment
57
+ * `spawnTeamProcess` returns -- the flag must be set before anything that could
58
+ * unwind, and the acknowledgement is deliberately the thing that cannot.
59
+ */
60
+ export declare function spawnTeamAndAcknowledgeNotice(spec: SpawnTeamProcessArgs, notice: UnclaimedNoticeAcknowledgement, onSpawned: () => void): Promise<SpawnTeamProcessResult>;
61
+ //# sourceMappingURL=spawn-and-acknowledge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spawn-and-acknowledge.d.ts","sourceRoot":"","sources":["../../src/spawn/spawn-and-acknowledge.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,OAAO,EAAoB,KAAK,oBAAoB,EAAE,KAAK,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAO9G;;;;;;;;;GASG;AACH,wBAAsB,0BAA0B,CAC9C,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,EACrC,OAAO,EAAE,sBAAsB,GAC9B,OAAO,CAAC,IAAI,CAAC,CAkBf;AA0CD,gFAAgF;AAChF,MAAM,WAAW,8BAA8B;IAC7C,SAAS,EAAE,MAAM,CAAC;IAClB;;;OAGG;IACH,OAAO,EAAE,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;CACvC;AAED;;;;;;;;GAQG;AACH,wBAAsB,6BAA6B,CACjD,IAAI,EAAE,oBAAoB,EAC1B,MAAM,EAAE,8BAA8B,EACtC,SAAS,EAAE,MAAM,IAAI,GACpB,OAAO,CAAC,sBAAsB,CAAC,CAMjC"}
@@ -0,0 +1,117 @@
1
+ // PINNED-BY-BEGIN (generated by gen:pinned-by -- do not hand-edit; checked by lint:pinned-by)
2
+ // Pinned by: packages/daemon/src/spawn/spawn-and-acknowledge.test.ts
3
+ // PINNED-BY-END
4
+ /**
5
+ * The spawn, the registration hand-off, and the notice acknowledgement -- as
6
+ * ONE sequence, because the order between them is the thing that was wrong.
7
+ *
8
+ * WHAT WENT WRONG. The unclaimed-migration record was marked NAMED while the
9
+ * spawn's section inputs were being gathered -- before the session existed. A
10
+ * spawn that then failed left the record named with nobody having read
11
+ * anything: the completion hold lifted, the next spawn saw an already-delivered
12
+ * record, and the team that wrote the file was never told.
13
+ *
14
+ * Moving the mark after the spawn was necessary and not sufficient.
15
+ * `spawnTeamProcess` returns NORMALLY on four refusals -- an unavailable
16
+ * backend, a governor denial, an unavailable sandbox, and a previous lead that
17
+ * would not end -- and on each of them no process exists to have read the
18
+ * message. Acknowledging on a refusal is the same defect with a later
19
+ * timestamp, which is why the outcome is a discriminated union rather than
20
+ * void: "did a process actually start?" has to be a question the caller can
21
+ * ask.
22
+ *
23
+ * WHY THIS IS A MODULE AND NOT THREE LINES IN spawnFocusTeam. Those three lines
24
+ * ARE the fix, and inside the orchestrator nothing could observe them: driving
25
+ * `spawnFocusTeam` needs a worktree rebase, a session create and a backend
26
+ * probe before it reaches them. Here the sequence is importable, so a test can
27
+ * drive a REAL spawn (and a real refusal) through it and watch what the
28
+ * acknowledgement does -- which is what turns "the guard is written down" into
29
+ * "the guard is applied".
30
+ *
31
+ * @module spawn/spawn-and-acknowledge
32
+ */
33
+ import { spawnTeamProcess } from './process-spawn.js';
34
+ import { MIGRATION_NUMBERING_HEADING } from '../prompt-sections/migration-numbering-section.js';
35
+ import { resolveMigrationNumberingState } from '../prompt-sections/migration-numbering-state.js';
36
+ import { createLogger } from '../shell/log.js';
37
+ const log = createLogger({ module: 'focus-executor' });
38
+ /**
39
+ * Record that the unclaimed-migration notice reached the team -- ONLY once the
40
+ * session exists and its message (which carries the notice) has been written.
41
+ *
42
+ * NEVER THROWS. The caller runs this between the spawn and its own error
43
+ * handling, and a throw here would unwind a spawn that actually succeeded,
44
+ * releasing a registration the live child process owns. A failure to record
45
+ * leaves the record unnamed, which is the safe direction: the next spawn, or
46
+ * the completion-event notice phase, tells the team again.
47
+ */
48
+ export async function acknowledgeUnclaimedNotice(focusName, confirm, outcome) {
49
+ if (!confirm)
50
+ return;
51
+ // ONLY a spawn that actually happened may acknowledge the notice.
52
+ if (!outcome.spawned) {
53
+ log.info(`[focus-executor] "${focusName}": spawn refused (${outcome.reason}) -- the `
54
+ + 'unclaimed-migration record stays unnamed so the next spawn delivers it');
55
+ return;
56
+ }
57
+ try {
58
+ await confirm();
59
+ }
60
+ catch (err) {
61
+ log.warn(`[focus-executor] "${focusName}": could not record that the unclaimed-migration `
62
+ + `notice was delivered (${err.message}); it will be re-delivered`);
63
+ }
64
+ }
65
+ /**
66
+ * THE LAST GATE BEFORE THE PROCESS: the message actually being written to the
67
+ * lead carries the numbering rule.
68
+ *
69
+ * WHY HERE AND NOT ONLY IN THE COMPOSER. `buildSpawnMessage` checks what IT
70
+ * returns, which makes a blanked section a loud failure inside the composition.
71
+ * It says nothing about whether the caller then SENDS that return value. The
72
+ * executor holds two strings -- the composed `prompt` and the composed
73
+ * `messageToSend` -- and handing the wrong one to the spawn drops the rule from
74
+ * the resume-delta and forced-fresh-scoping shapes entirely while every
75
+ * composer-level test stays green, because the composer was never wrong.
76
+ *
77
+ * This is the one place every shape, every backend and every composition choice
78
+ * converges: whatever produced it, this is the text the team will read. So the
79
+ * fact is re-derived from `telora.migrations.json` one last time, below all of
80
+ * it.
81
+ *
82
+ * It throws, for the same reason the composer's check does: the executor's
83
+ * catch abandons THIS spawn and the next tick re-attempts, so a transient cause
84
+ * costs one cycle -- while the alternative is a coding team quietly numbering
85
+ * from its own worktree, which is invisible until two migrations share a number.
86
+ */
87
+ function assertSpawnMessageCarriesNumberingRule(spec) {
88
+ const { config, teamState, messageToSend } = spec;
89
+ if (teamState?.sessionType === 'review')
90
+ return;
91
+ if (resolveMigrationNumberingState(config?.repoPath) === null)
92
+ return;
93
+ if (typeof messageToSend === 'string' && messageToSend.includes(MIGRATION_NUMBERING_HEADING))
94
+ return;
95
+ throw new Error('The message about to be written to the team lead does not carry the migration-numbering '
96
+ + 'rule, but this product declares numbering (telora.migrations.json) and this is a coding '
97
+ + 'pass. A team spawned without the rule numbers from its own worktree, which is the '
98
+ + 'collision the declaration exists to prevent. Refusing the spawn rather than starting a '
99
+ + 'session that was never told.');
100
+ }
101
+ /**
102
+ * Spawn the team lead, hand the registration off, then acknowledge the notice.
103
+ *
104
+ * `onSpawned` is the caller's registration hand-off (spawnFocusTeam's
105
+ * `teamCommitted` flag). It runs BETWEEN the spawn and the acknowledgement, in
106
+ * that order, because the child process owns the team lifecycle from the moment
107
+ * `spawnTeamProcess` returns -- the flag must be set before anything that could
108
+ * unwind, and the acknowledgement is deliberately the thing that cannot.
109
+ */
110
+ export async function spawnTeamAndAcknowledgeNotice(spec, notice, onSpawned) {
111
+ assertSpawnMessageCarriesNumberingRule(spec);
112
+ const outcome = await spawnTeamProcess(spec);
113
+ onSpawned();
114
+ await acknowledgeUnclaimedNotice(notice.focusName, notice.confirm, outcome);
115
+ return outcome;
116
+ }
117
+ //# sourceMappingURL=spawn-and-acknowledge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spawn-and-acknowledge.js","sourceRoot":"","sources":["../../src/spawn/spawn-and-acknowledge.ts"],"names":[],"mappings":"AAAA,8FAA8F;AAC9F,qEAAqE;AACrE,gBAAgB;AAEhB;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,OAAO,EAAE,gBAAgB,EAA0D,MAAM,oBAAoB,CAAC;AAC9G,OAAO,EAAE,2BAA2B,EAAE,MAAM,mDAAmD,CAAC;AAChG,OAAO,EAAE,8BAA8B,EAAE,MAAM,iDAAiD,CAAC;AACjG,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,MAAM,GAAG,GAAG,YAAY,CAAC,EAAE,MAAM,EAAE,gBAAgB,EAAE,CAAC,CAAC;AAEvD;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,SAAiB,EACjB,OAAqC,EACrC,OAA+B;IAE/B,IAAI,CAAC,OAAO;QAAE,OAAO;IACrB,kEAAkE;IAClE,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QACrB,GAAG,CAAC,IAAI,CACN,qBAAqB,SAAS,qBAAqB,OAAO,CAAC,MAAM,WAAW;cAC1E,wEAAwE,CAC3E,CAAC;QACF,OAAO;IACT,CAAC;IACD,IAAI,CAAC;QACH,MAAM,OAAO,EAAE,CAAC;IAClB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,GAAG,CAAC,IAAI,CACN,qBAAqB,SAAS,mDAAmD;cAC/E,yBAA0B,GAAa,CAAC,OAAO,4BAA4B,CAC9E,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,SAAS,sCAAsC,CAAC,IAA0B;IACxE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,GAAG,IAI5C,CAAC;IACF,IAAI,SAAS,EAAE,WAAW,KAAK,QAAQ;QAAE,OAAO;IAChD,IAAI,8BAA8B,CAAC,MAAM,EAAE,QAAQ,CAAC,KAAK,IAAI;QAAE,OAAO;IACtE,IAAI,OAAO,aAAa,KAAK,QAAQ,IAAI,aAAa,CAAC,QAAQ,CAAC,2BAA2B,CAAC;QAAE,OAAO;IACrG,MAAM,IAAI,KAAK,CACb,0FAA0F;UACxF,0FAA0F;UAC1F,oFAAoF;UACpF,yFAAyF;UACzF,8BAA8B,CACjC,CAAC;AACJ,CAAC;AAYD;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,6BAA6B,CACjD,IAA0B,EAC1B,MAAsC,EACtC,SAAqB;IAErB,sCAAsC,CAAC,IAAI,CAAC,CAAC;IAC7C,MAAM,OAAO,GAAG,MAAM,gBAAgB,CAAC,IAAI,CAAC,CAAC;IAC7C,SAAS,EAAE,CAAC;IACZ,MAAM,0BAA0B,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC5E,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -154,7 +154,21 @@ export declare function resolveCooldownUntilMs(entry: Pick<TeardownEntry, 'time'
154
154
  * other readers).
155
155
  */
156
156
  export declare function getSpawnCooldownFocusIds(): string[];
157
- /** Check if a focus is in spawn cooldown. */
157
+ /**
158
+ * Record a provider rate-limit signal. Returns true when the window is now open
159
+ * (the reset is in the future), false when the signal closed it.
160
+ */
161
+ export declare function recordProviderRateLimit(resetAtMs: number, nowMs?: number): boolean;
162
+ /**
163
+ * The instant the provider-wide window closes, or null when no window is open.
164
+ * A window whose reset has passed reads as closed and is dropped.
165
+ */
166
+ export declare function providerRateLimitHoldUntilMs(nowMs?: number): number | null;
167
+ /**
168
+ * Check if a focus is in spawn cooldown. True during the provider-wide
169
+ * rate-limit window whatever the focus's own entry says: a spawn now would be
170
+ * rejected on the same limit, and the teardown it costs is not a team failure.
171
+ */
158
172
  export declare function isInSpawnCooldown(focusId: string): boolean;
159
173
  /**
160
174
  * Record a provider rate-limit-induced cooldown: hold spawning until the reset
@@ -1 +1 @@
1
- {"version":3,"file":"spawn-cooldown.d.ts","sourceRoot":"","sources":["../../src/spawn/spawn-cooldown.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"spawn-cooldown.d.ts","sourceRoot":"","sources":["../../src/spawn/spawn-cooldown.ts"],"names":[],"mappings":"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"}
@@ -1,22 +1,5 @@
1
1
  // PINNED-BY-BEGIN (generated by gen:pinned-by -- do not hand-edit; checked by lint:pinned-by)
2
- // Pinned by: packages/daemon/src/completion/no-actionable-work-exit.test.ts,
3
- // packages/daemon/src/completion/review-cycle-cap-regression.test.ts,
4
- // packages/daemon/src/completion/review-window-idle-coding-lead-regression.test.ts,
5
- // packages/daemon/src/focus/awaiting-slot.test.ts,
6
- // packages/daemon/src/focus/listener-auto-advance-teamless-wedge.test.ts,
7
- // packages/daemon/src/focus/parked-shortfall-spawn.test.ts,
8
- // packages/daemon/src/focus/pending-review-approved-head.test.ts,
9
- // packages/daemon/src/focus/pending-spawn-review-next-step.test.ts,
10
- // packages/daemon/src/focus/unchanged-reviewed-head.test.ts,
11
- // packages/daemon/src/integration/approved-head-gate-failure-respawn-regression.test.ts,
12
- // packages/daemon/src/integration/approved-head-hold-release-regression.test.ts,
13
- // packages/daemon/src/integration/failed-verdict-review-exit-respawn-regression.test.ts,
14
- // packages/daemon/src/integration/failed-verdict-review-loop-regression.test.ts,
15
- // packages/daemon/src/integration/shortfall-park-incident-regression.test.ts,
16
- // packages/daemon/src/shell/heartbeat-team-phases.test.ts,
17
- // packages/daemon/src/spawn/pending-spawn-guard.test.ts,
18
- // packages/daemon/src/spawn/review-hold-park-shortfall.test.ts,
19
- // packages/daemon/src/spawn/review-hold-park.test.ts, packages/daemon/src/spawn/spawn-cooldown.test.ts
2
+ // Pinned by: 23 tests -- run: npm run gen:pinned-by -- --list packages/daemon/src/spawn/spawn-cooldown.ts
20
3
  // PINNED-BY-END
21
4
  import { createLogger } from '../shell/log.js';
22
5
  import { resolveRespawnCycleMaxHours, resolveRespawnCycleMaxCount, } from '../verify/stall-detector-config.js';
@@ -223,9 +206,71 @@ export function getSpawnCooldownFocusIds() {
223
206
  cleanupStaleEntries();
224
207
  return [...teardownTimestamps.keys()];
225
208
  }
226
- /** Check if a focus is in spawn cooldown. */
209
+ // ---------------------------------------------------------------------------
210
+ // Provider-wide rate-limit window
211
+ // ---------------------------------------------------------------------------
212
+ /**
213
+ * The provider rate limit is ACCOUNT-wide, not per focus. When one team or one
214
+ * one-shot is rejected, every other spawn on this daemon is rejected too, until
215
+ * the same reset instant. The per-focus entry above records the hold for the
216
+ * focus whose team saw the rejection; this window records it for everyone.
217
+ *
218
+ * Measured 2026-09-23 (mars): with only the per-focus hold, the verification
219
+ * loop and the routing decider kept spawning `claude --print` one-shots every
220
+ * tick for ten hours (each exited 1, each consumed as a result), and a second
221
+ * focus's team was spawned and torn down four times in one minute. Every
222
+ * spawner -- team or one-shot -- reads this window; the one-shot wrapper
223
+ * (spawn/one-shot-model.ts) also writes it.
224
+ *
225
+ * A reset in the future opens the window until then, and the LATER of two open
226
+ * resets binds (a five_hour rejection arriving inside a seven_day window does
227
+ * not shorten it: both limits apply). A reset already in the past closes the
228
+ * window (capacity returned). In-memory only: a restart re-learns it from the
229
+ * provider on the first attempt.
230
+ */
231
+ let providerRateLimitResetAtMs = null;
232
+ /**
233
+ * Record a provider rate-limit signal. Returns true when the window is now open
234
+ * (the reset is in the future), false when the signal closed it.
235
+ */
236
+ export function recordProviderRateLimit(resetAtMs, nowMs = Date.now()) {
237
+ if (!Number.isFinite(resetAtMs) || resetAtMs <= nowMs) {
238
+ if (providerRateLimitResetAtMs !== null) {
239
+ log.info('Provider rate limit: window closed (reset instant has passed); spawns resume');
240
+ }
241
+ providerRateLimitResetAtMs = null;
242
+ return false;
243
+ }
244
+ const next = Math.max(providerRateLimitResetAtMs ?? 0, resetAtMs);
245
+ if (providerRateLimitResetAtMs !== next) {
246
+ log.warn(`Provider rate limit: holding EVERY spawn (teams and one-shots) until ` +
247
+ `${new Date(next).toISOString()} -- account-wide window`);
248
+ }
249
+ providerRateLimitResetAtMs = next;
250
+ return true;
251
+ }
252
+ /**
253
+ * The instant the provider-wide window closes, or null when no window is open.
254
+ * A window whose reset has passed reads as closed and is dropped.
255
+ */
256
+ export function providerRateLimitHoldUntilMs(nowMs = Date.now()) {
257
+ if (providerRateLimitResetAtMs === null)
258
+ return null;
259
+ if (providerRateLimitResetAtMs <= nowMs) {
260
+ providerRateLimitResetAtMs = null;
261
+ return null;
262
+ }
263
+ return providerRateLimitResetAtMs;
264
+ }
265
+ /**
266
+ * Check if a focus is in spawn cooldown. True during the provider-wide
267
+ * rate-limit window whatever the focus's own entry says: a spawn now would be
268
+ * rejected on the same limit, and the teardown it costs is not a team failure.
269
+ */
227
270
  export function isInSpawnCooldown(focusId) {
228
271
  cleanupStaleEntries();
272
+ if (providerRateLimitHoldUntilMs() !== null)
273
+ return true;
229
274
  const entry = teardownTimestamps.get(focusId);
230
275
  if (!entry)
231
276
  return false;
@@ -248,6 +293,8 @@ export function isInSpawnCooldown(focusId) {
248
293
  export function recordRateLimitCooldown(focusId, resetAtMs) {
249
294
  cleanupStaleEntries();
250
295
  const now = Date.now();
296
+ // The limit the team hit is the account's, so the window opens for everyone.
297
+ recordProviderRateLimit(resetAtMs, now);
251
298
  const existing = teardownTimestamps.get(focusId);
252
299
  if (existing) {
253
300
  existing.rateLimitResetAtMs = resetAtMs;
@@ -367,5 +414,6 @@ export async function clearSpawnCooldownDurably(focusId) {
367
414
  export function __resetSpawnCooldownForTests() {
368
415
  teardownTimestamps.clear();
369
416
  writeChains.clear();
417
+ providerRateLimitResetAtMs = null;
370
418
  }
371
419
  //# sourceMappingURL=spawn-cooldown.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"spawn-cooldown.js","sourceRoot":"","sources":["../../src/spawn/spawn-cooldown.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"spawn-cooldown.js","sourceRoot":"","sources":["../../src/spawn/spawn-cooldown.ts"],"names":[],"mappings":"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"}