@telora/daemon 0.22.227 → 0.22.239

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 (229) hide show
  1. package/build-info.json +4 -3
  2. package/dist/backends/index.d.ts.map +1 -1
  3. package/dist/backends/index.js +1 -0
  4. package/dist/backends/index.js.map +1 -1
  5. package/dist/completion/codex-activity.d.ts +40 -0
  6. package/dist/completion/codex-activity.d.ts.map +1 -0
  7. package/dist/completion/codex-activity.js +69 -0
  8. package/dist/completion/codex-activity.js.map +1 -0
  9. package/dist/completion/completion-phase-registry.d.ts +2 -1
  10. package/dist/completion/completion-phase-registry.d.ts.map +1 -1
  11. package/dist/completion/completion-phase-registry.js +15 -3
  12. package/dist/completion/completion-phase-registry.js.map +1 -1
  13. package/dist/completion/detector.d.ts.map +1 -1
  14. package/dist/completion/detector.js +1 -0
  15. package/dist/completion/detector.js.map +1 -1
  16. package/dist/completion/event-entry-phases.d.ts.map +1 -1
  17. package/dist/completion/event-entry-phases.js +13 -11
  18. package/dist/completion/event-entry-phases.js.map +1 -1
  19. package/dist/completion/event-phases.d.ts.map +1 -1
  20. package/dist/completion/event-phases.js +16 -15
  21. package/dist/completion/event-phases.js.map +1 -1
  22. package/dist/completion/exit-classification.d.ts.map +1 -1
  23. package/dist/completion/exit-classification.js +3 -1
  24. package/dist/completion/exit-classification.js.map +1 -1
  25. package/dist/completion/review-exit-phase.js +1 -1
  26. package/dist/completion/status-advance-phase.d.ts +3 -0
  27. package/dist/completion/status-advance-phase.d.ts.map +1 -1
  28. package/dist/completion/status-advance-phase.js +2 -1
  29. package/dist/completion/status-advance-phase.js.map +1 -1
  30. package/dist/completion/team-phase.d.ts.map +1 -1
  31. package/dist/completion/team-phase.js +3 -2
  32. package/dist/completion/team-phase.js.map +1 -1
  33. package/dist/completion/team-progress-measure.d.ts +22 -1
  34. package/dist/completion/team-progress-measure.d.ts.map +1 -1
  35. package/dist/completion/team-progress-measure.js +54 -6
  36. package/dist/completion/team-progress-measure.js.map +1 -1
  37. package/dist/delivery/delivery-advance-block.d.ts +17 -4
  38. package/dist/delivery/delivery-advance-block.d.ts.map +1 -1
  39. package/dist/delivery/delivery-advance-block.js +203 -173
  40. package/dist/delivery/delivery-advance-block.js.map +1 -1
  41. package/dist/directive/agentless-directive.d.ts +28 -0
  42. package/dist/directive/agentless-directive.d.ts.map +1 -0
  43. package/dist/directive/agentless-directive.js +12 -0
  44. package/dist/directive/agentless-directive.js.map +1 -0
  45. package/dist/directive/directive-dispatch.d.ts +1 -20
  46. package/dist/directive/directive-dispatch.d.ts.map +1 -1
  47. package/dist/directive/directive-dispatch.js +4 -22
  48. package/dist/directive/directive-dispatch.js.map +1 -1
  49. package/dist/directive/directive-queue.d.ts.map +1 -1
  50. package/dist/directive/directive-queue.js +1 -20
  51. package/dist/directive/directive-queue.js.map +1 -1
  52. package/dist/drift/artifact-ref-shape.d.ts +23 -0
  53. package/dist/drift/artifact-ref-shape.d.ts.map +1 -1
  54. package/dist/drift/artifact-ref-shape.js +49 -0
  55. package/dist/drift/artifact-ref-shape.js.map +1 -1
  56. package/dist/focus/advance-hold.d.ts +55 -0
  57. package/dist/focus/advance-hold.d.ts.map +1 -0
  58. package/dist/focus/advance-hold.js +155 -0
  59. package/dist/focus/advance-hold.js.map +1 -0
  60. package/dist/focus/focus-lifecycle.d.ts.map +1 -1
  61. package/dist/focus/focus-lifecycle.js +3 -2
  62. package/dist/focus/focus-lifecycle.js.map +1 -1
  63. package/dist/focus/focus-spawn-decision.d.ts +17 -6
  64. package/dist/focus/focus-spawn-decision.d.ts.map +1 -1
  65. package/dist/focus/focus-spawn-decision.js +6 -6
  66. package/dist/focus/focus-spawn-decision.js.map +1 -1
  67. package/dist/focus/focus-team-state.js +1 -1
  68. package/dist/focus/focus-worktree-state.d.ts.map +1 -1
  69. package/dist/focus/focus-worktree-state.js +1 -0
  70. package/dist/focus/focus-worktree-state.js.map +1 -1
  71. package/dist/focus/listener-auto-advance.d.ts +14 -0
  72. package/dist/focus/listener-auto-advance.d.ts.map +1 -1
  73. package/dist/focus/listener-auto-advance.js +13 -10
  74. package/dist/focus/listener-auto-advance.js.map +1 -1
  75. package/dist/focus/listener-spawn.d.ts.map +1 -1
  76. package/dist/focus/listener-spawn.js +23 -34
  77. package/dist/focus/listener-spawn.js.map +1 -1
  78. package/dist/focus/listener-state.d.ts.map +1 -1
  79. package/dist/focus/listener-state.js +1 -0
  80. package/dist/focus/listener-state.js.map +1 -1
  81. package/dist/focus/listener.d.ts.map +1 -1
  82. package/dist/focus/listener.js +10 -4
  83. package/dist/focus/listener.js.map +1 -1
  84. package/dist/focus/pending-spawn-pass-deps.d.ts +3 -0
  85. package/dist/focus/pending-spawn-pass-deps.d.ts.map +1 -1
  86. package/dist/focus/pending-spawn-pass-deps.js +1 -0
  87. package/dist/focus/pending-spawn-pass-deps.js.map +1 -1
  88. package/dist/focus/ready-focus-spawn-action.d.ts +29 -0
  89. package/dist/focus/ready-focus-spawn-action.d.ts.map +1 -0
  90. package/dist/focus/ready-focus-spawn-action.js +32 -0
  91. package/dist/focus/ready-focus-spawn-action.js.map +1 -0
  92. package/dist/focus/ready-focus-team-work.d.ts +18 -0
  93. package/dist/focus/ready-focus-team-work.d.ts.map +1 -0
  94. package/dist/focus/ready-focus-team-work.js +59 -0
  95. package/dist/focus/ready-focus-team-work.js.map +1 -0
  96. package/dist/focus/team-actionable-work.d.ts +56 -6
  97. package/dist/focus/team-actionable-work.d.ts.map +1 -1
  98. package/dist/focus/team-actionable-work.js +56 -9
  99. package/dist/focus/team-actionable-work.js.map +1 -1
  100. package/dist/git/types.d.ts.map +1 -1
  101. package/dist/git/types.js +1 -0
  102. package/dist/git/types.js.map +1 -1
  103. package/dist/nexus/return.d.ts +44 -1
  104. package/dist/nexus/return.d.ts.map +1 -1
  105. package/dist/nexus/return.js +42 -0
  106. package/dist/nexus/return.js.map +1 -1
  107. package/dist/prompt/focus-prompt-builder.d.ts +10 -8
  108. package/dist/prompt/focus-prompt-builder.d.ts.map +1 -1
  109. package/dist/prompt/focus-prompt-builder.js +19 -10
  110. package/dist/prompt/focus-prompt-builder.js.map +1 -1
  111. package/dist/prompt-sections/execution-sections.d.ts.map +1 -1
  112. package/dist/prompt-sections/execution-sections.js +10 -0
  113. package/dist/prompt-sections/execution-sections.js.map +1 -1
  114. package/dist/prompt-sections/persona-sections.d.ts +15 -0
  115. package/dist/prompt-sections/persona-sections.d.ts.map +1 -1
  116. package/dist/prompt-sections/persona-sections.js +32 -2
  117. package/dist/prompt-sections/persona-sections.js.map +1 -1
  118. package/dist/queries/deliveries.js +1 -1
  119. package/dist/queries/deliveries.js.map +1 -1
  120. package/dist/queries/delivery-gate-holds.d.ts +78 -0
  121. package/dist/queries/delivery-gate-holds.d.ts.map +1 -0
  122. package/dist/queries/delivery-gate-holds.js +5 -0
  123. package/dist/queries/delivery-gate-holds.js.map +1 -0
  124. package/dist/queries/delivery-gate-state.d.ts +13 -58
  125. package/dist/queries/delivery-gate-state.d.ts.map +1 -1
  126. package/dist/queries/delivery-gate-state.js.map +1 -1
  127. package/dist/queries/focus-discovery.js +1 -1
  128. package/dist/queries/focus-discovery.js.map +1 -1
  129. package/dist/queries/focuses.d.ts.map +1 -1
  130. package/dist/queries/focuses.js +2 -0
  131. package/dist/queries/focuses.js.map +1 -1
  132. package/dist/queries/issues.d.ts.map +1 -1
  133. package/dist/queries/issues.js +1 -0
  134. package/dist/queries/issues.js.map +1 -1
  135. package/dist/queries/shared.js +1 -1
  136. package/dist/queries/shortfall-rulings.d.ts +13 -0
  137. package/dist/queries/shortfall-rulings.d.ts.map +1 -1
  138. package/dist/queries/shortfall-rulings.js +14 -0
  139. package/dist/queries/shortfall-rulings.js.map +1 -1
  140. package/dist/queries/workflows.d.ts.map +1 -1
  141. package/dist/queries/workflows.js +1 -0
  142. package/dist/queries/workflows.js.map +1 -1
  143. package/dist/spawn/codex-limit.d.ts +42 -0
  144. package/dist/spawn/codex-limit.d.ts.map +1 -0
  145. package/dist/spawn/codex-limit.js +146 -0
  146. package/dist/spawn/codex-limit.js.map +1 -0
  147. package/dist/spawn/directive-route.d.ts +41 -0
  148. package/dist/spawn/directive-route.d.ts.map +1 -0
  149. package/dist/spawn/directive-route.js +54 -0
  150. package/dist/spawn/directive-route.js.map +1 -0
  151. package/dist/spawn/guards.d.ts.map +1 -1
  152. package/dist/spawn/guards.js +4 -2
  153. package/dist/spawn/guards.js.map +1 -1
  154. package/dist/spawn/helpers.d.ts.map +1 -1
  155. package/dist/spawn/helpers.js +30 -1
  156. package/dist/spawn/helpers.js.map +1 -1
  157. package/dist/spawn/idle-work-stamp.d.ts +13 -7
  158. package/dist/spawn/idle-work-stamp.d.ts.map +1 -1
  159. package/dist/spawn/idle-work-stamp.js +22 -11
  160. package/dist/spawn/idle-work-stamp.js.map +1 -1
  161. package/dist/spawn/index.d.ts +1 -0
  162. package/dist/spawn/index.d.ts.map +1 -1
  163. package/dist/spawn/index.js +1 -0
  164. package/dist/spawn/index.js.map +1 -1
  165. package/dist/spawn/lead-continuation.d.ts.map +1 -1
  166. package/dist/spawn/lead-continuation.js +13 -11
  167. package/dist/spawn/lead-continuation.js.map +1 -1
  168. package/dist/spawn/next-spawn-cooldown.d.ts +43 -0
  169. package/dist/spawn/next-spawn-cooldown.d.ts.map +1 -0
  170. package/dist/spawn/next-spawn-cooldown.js +123 -0
  171. package/dist/spawn/next-spawn-cooldown.js.map +1 -0
  172. package/dist/spawn/one-shot-model.d.ts +4 -3
  173. package/dist/spawn/one-shot-model.d.ts.map +1 -1
  174. package/dist/spawn/one-shot-model.js +8 -6
  175. package/dist/spawn/one-shot-model.js.map +1 -1
  176. package/dist/spawn/provider-window.d.ts +39 -0
  177. package/dist/spawn/provider-window.d.ts.map +1 -0
  178. package/dist/spawn/provider-window.js +99 -0
  179. package/dist/spawn/provider-window.js.map +1 -0
  180. package/dist/spawn/routing-decider-spawn.d.ts.map +1 -1
  181. package/dist/spawn/routing-decider-spawn.js +4 -3
  182. package/dist/spawn/routing-decider-spawn.js.map +1 -1
  183. package/dist/spawn/routing-decider.js +2 -2
  184. package/dist/spawn/routing-decider.js.map +1 -1
  185. package/dist/spawn/spawn-cooldown.d.ts +43 -12
  186. package/dist/spawn/spawn-cooldown.d.ts.map +1 -1
  187. package/dist/spawn/spawn-cooldown.js +51 -58
  188. package/dist/spawn/spawn-cooldown.js.map +1 -1
  189. package/dist/spawn/spawn-decision.d.ts +11 -2
  190. package/dist/spawn/spawn-decision.d.ts.map +1 -1
  191. package/dist/spawn/spawn-decision.js +28 -60
  192. package/dist/spawn/spawn-decision.js.map +1 -1
  193. package/dist/spawn/worktree-session.d.ts +16 -0
  194. package/dist/spawn/worktree-session.d.ts.map +1 -1
  195. package/dist/spawn/worktree-session.js +45 -12
  196. package/dist/spawn/worktree-session.js.map +1 -1
  197. package/dist/testing/fixtures/codex-stream-session.d.ts +10 -0
  198. package/dist/testing/fixtures/codex-stream-session.d.ts.map +1 -0
  199. package/dist/testing/fixtures/codex-stream-session.js +47 -0
  200. package/dist/testing/fixtures/codex-stream-session.js.map +1 -0
  201. package/dist/testing/fixtures/index.js +1 -1
  202. package/dist/types/focus.d.ts +20 -0
  203. package/dist/types/focus.d.ts.map +1 -1
  204. package/dist/types/index.js +1 -1
  205. package/dist/verify/ai-inspection-runner.js +5 -5
  206. package/dist/verify/ai-inspection-runner.js.map +1 -1
  207. package/dist/verify/parked-shortfall-reuse.d.ts.map +1 -1
  208. package/dist/verify/parked-shortfall-reuse.js +3 -0
  209. package/dist/verify/parked-shortfall-reuse.js.map +1 -1
  210. package/dist/verify/ruling-evidence-resolution.d.ts +36 -0
  211. package/dist/verify/ruling-evidence-resolution.d.ts.map +1 -0
  212. package/dist/verify/ruling-evidence-resolution.js +133 -0
  213. package/dist/verify/ruling-evidence-resolution.js.map +1 -0
  214. package/dist/verify/shortfall-rulings.d.ts +30 -2
  215. package/dist/verify/shortfall-rulings.d.ts.map +1 -1
  216. package/dist/verify/shortfall-rulings.js +35 -3
  217. package/dist/verify/shortfall-rulings.js.map +1 -1
  218. package/dist/verify/verification-deps-default.d.ts.map +1 -1
  219. package/dist/verify/verification-deps-default.js +3 -0
  220. package/dist/verify/verification-deps-default.js.map +1 -1
  221. package/dist/verify/verification-deps.d.ts +9 -0
  222. package/dist/verify/verification-deps.d.ts.map +1 -1
  223. package/dist/verify/verification-engine.d.ts.map +1 -1
  224. package/dist/verify/verification-engine.js +4 -4
  225. package/dist/verify/verification-engine.js.map +1 -1
  226. package/dist/verify/verify-restatement.d.ts.map +1 -1
  227. package/dist/verify/verify-restatement.js +1 -19
  228. package/dist/verify/verify-restatement.js.map +1 -1
  229. package/package.json +2 -2
@@ -2,9 +2,8 @@
2
2
  // Pinned by: packages/daemon/src/spawn/lead-continuation.test.ts
3
3
  // PINNED-BY-END
4
4
  import { getFocusDeliveries as defaultGetFocusDeliveries, getFocusIssues as defaultGetFocusIssues, } from '../queries/focuses.js';
5
- import { isStatusCascadable } from '../workflow/stage-classifier.js';
6
5
  import { buildReEngagementMessage } from '../prompt/focus-prompt-builder.js';
7
- import { armFactsFromTeamState, deliveriesVisibleToArm } from '../focus/recorded-new-intent.js';
6
+ import { armFactsFromTeamState } from '../focus/recorded-new-intent.js';
8
7
  import { sendMessage as defaultSendMessage } from '@telora/daemon-core';
9
8
  import { recordStdinMessageSent as defaultRecordStdinMessageSent } from '../completion/stdin-turn-tracker.js';
10
9
  import { isProcessAlive as defaultIsProcessAlive } from './liveness.js';
@@ -34,10 +33,10 @@ function continuationPreamble(outstandingCount) {
34
33
  return [
35
34
  '## Continue -- your turn is not over',
36
35
  '',
37
- `You returned a result while ${outstandingCount} delivery(ies) on this focus are`,
38
- 'still agent-actionable. Ending a turn with agent-actionable work remaining is not',
39
- 'a valid stop: the turn ends only when every delivery is terminal (done / verify /',
40
- 'cancelled), when you are blocked and have escalated, or when the daemon tears you',
36
+ `You returned a result while ${outstandingCount} delivery(ies) on this focus still`,
37
+ 'hold open work (an open issue, or a planning delivery to scope). Ending a turn with',
38
+ 'open work remaining is not a valid stop: the turn ends only when no delivery holds',
39
+ 'open work, when you are blocked and have escalated, or when the daemon tears you',
41
40
  'down. Pick up the outstanding work below and keep going in-session.',
42
41
  '',
43
42
  '',
@@ -116,10 +115,13 @@ export async function reengageOnIdleResult(args, deps = defaultDeps) {
116
115
  // A delivery recorded as new intent under the live arm is not outstanding
117
116
  // work for this lead: continuing it into the nudge would spend continuation
118
117
  // budget on something the team is structurally unable to close.
118
+ // The listing is exactly the deliveries the stamp found holding team work
119
+ // (deliveriesWithTeamWork, read fresh): a delivery whose issues are all Done
120
+ // is the daemon's to advance, and naming it gives the lead nothing to do.
119
121
  const armFacts = armFactsFromTeamState(teamState);
120
- const nonTerminal = deliveriesVisibleToArm(deliveries, armFacts)
121
- .filter((d) => !isStatusCascadable(d.executionStatus ?? ''));
122
- if (nonTerminal.length === 0)
122
+ const outstandingIds = new Set(outstanding);
123
+ const withWork = deliveries.filter((d) => outstandingIds.has(d.id));
124
+ if (withWork.length === 0)
123
125
  return 'no_live_lead';
124
126
  const progress = deps.readProgress(focusId, deliveries, issues);
125
127
  const budget = deps.getContinuationBudget();
@@ -130,7 +132,7 @@ export async function reengageOnIdleResult(args, deps = defaultDeps) {
130
132
  `for the stalled-team backstop to reap and file team_failure.`);
131
133
  return 'budget_exhausted';
132
134
  }
133
- const message = continuationPreamble(outstanding.length) + buildReEngagementMessage(nonTerminal, issues, armFacts);
135
+ const message = continuationPreamble(withWork.length) + buildReEngagementMessage(withWork, issues, armFacts);
134
136
  // The lead's reply to this turn is not activity of its own (team-progress-measure.ts).
135
137
  noteDaemonPoke(teamState, nowMs);
136
138
  const ok = deps.sendMessage(teamState.leadStdin, message);
@@ -143,7 +145,7 @@ export async function reengageOnIdleResult(args, deps = defaultDeps) {
143
145
  teamState.lastContinuationProgress = progress;
144
146
  }
145
147
  log.warn(`[focus-executor] Re-engaged the live lead for "${focusName}" with a continuation turn ` +
146
- `naming ${nonTerminal.length} outstanding delivery(ies) (write ok=${ok}, attempt ` +
148
+ `naming ${withWork.length} outstanding delivery(ies) (write ok=${ok}, attempt ` +
147
149
  `${(teamState.continuationAttempts ?? 0)}/${budget}) -- no reap, no respawn, same session.`);
148
150
  return ok ? 'sent' : 'no_live_lead';
149
151
  }
@@ -1 +1 @@
1
- {"version":3,"file":"lead-continuation.js","sourceRoot":"","sources":["../../src/spawn/lead-continuation.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"lead-continuation.js","sourceRoot":"","sources":["../../src/spawn/lead-continuation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ import { getActiveFocuses } from '../queries/focus-discovery.js';
2
+ import { fetchFocusWorkflow, getFocusDeliveries } from '../queries/focuses.js';
3
+ import type { DaemonConfig, PipelineConfig } from '../types/index.js';
4
+ import { type ModelProvider } from './provider-window.js';
5
+ /** The route inputs of a focus's next spawn, as the ready and active focus rows both carry them. */
6
+ export interface NextSpawnRoute {
7
+ focus_id: string;
8
+ product_id: string | null;
9
+ pipeline_config: PipelineConfig | null;
10
+ engine_override: Record<string, string | null> | null;
11
+ local_model_override: Record<string, string | null> | null;
12
+ org_default_engine: string | null;
13
+ org_default_coding_model: string | null;
14
+ org_default_review_model: string | null;
15
+ }
16
+ /** The reads the stage half of the route needs; injectable for tests. */
17
+ export interface NextSpawnRouteDeps {
18
+ getActiveFocuses: typeof getActiveFocuses;
19
+ getFocusDeliveries: typeof getFocusDeliveries;
20
+ fetchFocusWorkflow: typeof fetchFocusWorkflow;
21
+ }
22
+ /**
23
+ * The provider the focus's next team spawn would run on, resolved from the
24
+ * route as it stands now; null when a read failed (the gate then holds on no
25
+ * window, and the spawn checks its own resolution).
26
+ */
27
+ export declare function resolveNextSpawnProvider(config: DaemonConfig, route: NextSpawnRoute, deps?: NextSpawnRouteDeps): Promise<ModelProvider | null>;
28
+ /**
29
+ * True when the focus's next team spawn is held: by its teardown streak, or by
30
+ * the rate-limit window of the provider it would run on now.
31
+ */
32
+ export declare function isNextSpawnInCooldown(config: DaemonConfig, route: NextSpawnRoute, deps?: NextSpawnRouteDeps): Promise<boolean>;
33
+ /** True when the focus's teardown streak holds its next spawn, whatever it runs on (the pending-spawn guard's reading). */
34
+ export declare function isNextSpawnInTeardownCooldown(focusId: string): boolean;
35
+ /**
36
+ * The team-phase map's reading (completion/team-phase.ts): held as the gate's
37
+ * latest verdict for the focus would be now -- the provider it resolved then,
38
+ * against the windows as they stand. Display only; no spawn reads it.
39
+ */
40
+ export declare function wasNextSpawnHeldAtLastGate(focusId: string): boolean;
41
+ /** Test-only: forget every gate reading. */
42
+ export declare function __resetNextSpawnGateForTests(): void;
43
+ //# sourceMappingURL=next-spawn-cooldown.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"next-spawn-cooldown.d.ts","sourceRoot":"","sources":["../../src/spawn/next-spawn-cooldown.ts"],"names":[],"mappings":"AAqCA,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAE/E,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACtE,OAAO,EAAyB,KAAK,aAAa,EAAE,MAAM,sBAAsB,CAAC;AASjF,oGAAoG;AACpG,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,eAAe,EAAE,cAAc,GAAG,IAAI,CAAC;IACvC,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;IACtD,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;IAC3D,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,wBAAwB,EAAE,MAAM,GAAG,IAAI,CAAC;IACxC,wBAAwB,EAAE,MAAM,GAAG,IAAI,CAAC;CACzC;AAED,yEAAyE;AACzE,MAAM,WAAW,kBAAkB;IACjC,gBAAgB,EAAE,OAAO,gBAAgB,CAAC;IAC1C,kBAAkB,EAAE,OAAO,kBAAkB,CAAC;IAC9C,kBAAkB,EAAE,OAAO,kBAAkB,CAAC;CAC/C;AAiCD;;;;GAIG;AACH,wBAAsB,wBAAwB,CAC5C,MAAM,EAAE,YAAY,EACpB,KAAK,EAAE,cAAc,EACrB,IAAI,GAAE,kBAAuC,GAC5C,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAkB/B;AAKD;;;GAGG;AACH,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,YAAY,EACpB,KAAK,EAAE,cAAc,EACrB,IAAI,GAAE,kBAAuC,GAC5C,OAAO,CAAC,OAAO,CAAC,CAIlB;AAED,2HAA2H;AAC3H,wBAAgB,6BAA6B,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAEtE;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAEnE;AAED,4CAA4C;AAC5C,wBAAgB,4BAA4B,IAAI,IAAI,CAEnD"}
@@ -0,0 +1,123 @@
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/empty-directive-route.test.ts,
3
+ // packages/daemon/src/spawn/provider-window.test.ts
4
+ // PINNED-BY-END
5
+ /**
6
+ * Is a focus's NEXT team spawn held? The spawn gates' reading of the spawn
7
+ * cooldown (the ready-focus gate, the pending-spawn gate, the team-phase map).
8
+ *
9
+ * A teardown streak holds a spawn whatever it runs on. A rate-limit window holds
10
+ * it only when it would run on that window's provider (spawn/provider-window.ts):
11
+ * a Claude limit holds a Claude coding team and not a Codex review. So while any
12
+ * window is open the gate RESOLVES the provider of the spawn it is about to let
13
+ * through, from the route as it stands now -- the focus row's engine and model
14
+ * pins and org defaults, and the directive the spawn would run: the queued spawn
15
+ * directive, or else the stage directive of the phase the focus is in. It runs
16
+ * the SAME selection Phase B runs (spawn/worktree-session.ts
17
+ * selectProviderForPass), on the same directive metadata
18
+ * resolveDirectiveOrFallback (spawn/spawn-decision.ts) reads, minus the worktree:
19
+ * the stage is derived as syncFocusPhase derives it, without writing it. Nothing
20
+ * about an earlier spawn is remembered, so a route that moved off a held
21
+ * provider is not held by it on the very next poll.
22
+ *
23
+ * With no window open nothing is resolved: no provider holds anything. A read
24
+ * that fails names no provider, so no window holds the spawn at the gate; the
25
+ * spawn then checks the provider its own engine resolved to
26
+ * (spawn/worktree-session.ts createTeamSession), before any session exists.
27
+ *
28
+ * The route is the one resolveDirectiveOrFallback resolves, from the one
29
+ * derivation both read (spawn/directive-route.ts): what the directive declares,
30
+ * never what its body assembles to -- so a stage whose body assembles empty,
31
+ * which the spawn runs on the legacy prompt, still routes where its directive
32
+ * pins it, at the gate and at the spawn alike.
33
+ */
34
+ import { getPendingSpawnDirective } from '../directive/directive-queue.js';
35
+ import { resolveFocusStageName } from '../directive/phase-sync.js';
36
+ import { getActiveFocuses } from '../queries/focus-discovery.js';
37
+ import { fetchFocusWorkflow, getFocusDeliveries } from '../queries/focuses.js';
38
+ import { configForProduct, findProduct } from '../shell/config.js';
39
+ import { anyProviderWindowOpen } from './provider-window.js';
40
+ import { isInSpawnCooldown } from './spawn-cooldown.js';
41
+ import { selectProviderForPass } from './worktree-session.js';
42
+ import { pendingDirectiveRoute, stageAtSpawn, stageDirectiveRoute } from './directive-route.js';
43
+ import { createLogger } from '../shell/log.js';
44
+ const log = createLogger({ module: 'spawn-cooldown' });
45
+ const DEFAULT_ROUTE_DEPS = { getActiveFocuses, getFocusDeliveries, fetchFocusWorkflow };
46
+ /**
47
+ * The route the spawn would resolve: the queued spawn directive's, or the stage
48
+ * directive's of the phase the focus is in -- through the SAME derivation
49
+ * resolveDirectiveOrFallback uses (spawn/directive-route.ts). The synced stage
50
+ * id is what syncFocusPhase would return (the stage the derived phase names,
51
+ * else the focus's current stage), read without writing it.
52
+ */
53
+ async function nextSpawnDirectiveRoute(config, route, deps) {
54
+ const pending = getPendingSpawnDirective(route.focus_id);
55
+ if (pending && pending.message.trim())
56
+ return pendingDirectiveRoute(pending);
57
+ const focus = (await deps.getActiveFocuses(config.organizationId, route.product_id ?? undefined))
58
+ .find((f) => f.focus_id === route.focus_id);
59
+ const workflow = await deps.fetchFocusWorkflow(route.focus_id);
60
+ let syncedStageId = null;
61
+ if (focus) {
62
+ const deliveries = await deps.getFocusDeliveries(route.focus_id);
63
+ const stageName = resolveFocusStageName({
64
+ deliveries: deliveries.map((d) => ({ executionStatus: d.executionStatus })),
65
+ reviewRequestedAt: focus.review_requested_at,
66
+ });
67
+ syncedStageId = workflow.stages.find((s) => s.name === stageName)?.id ?? focus.current_workflow_stage_id;
68
+ }
69
+ return stageDirectiveRoute(workflow, stageAtSpawn(workflow, syncedStageId));
70
+ }
71
+ /**
72
+ * The provider the focus's next team spawn would run on, resolved from the
73
+ * route as it stands now; null when a read failed (the gate then holds on no
74
+ * window, and the spawn checks its own resolution).
75
+ */
76
+ export async function resolveNextSpawnProvider(config, route, deps = DEFAULT_ROUTE_DEPS) {
77
+ try {
78
+ const product = route.product_id ? findProduct(config, route.product_id) : undefined;
79
+ const productConfig = product ? configForProduct(config, product) : config;
80
+ const metadata = await nextSpawnDirectiveRoute(productConfig, route, deps);
81
+ return selectProviderForPass({
82
+ engineOverride: route.engine_override,
83
+ localModelOverride: route.local_model_override,
84
+ config: productConfig,
85
+ orgDefaultEngine: route.org_default_engine,
86
+ pipelineConfig: route.pipeline_config,
87
+ orgDefaultCodingModel: route.org_default_coding_model,
88
+ orgDefaultReviewModel: route.org_default_review_model,
89
+ }, metadata);
90
+ }
91
+ catch (err) {
92
+ log.warn(`[spawn-gate] could not resolve the next spawn's provider for focus ${route.focus_id.slice(0, 8)}: ${err.message}`);
93
+ return null;
94
+ }
95
+ }
96
+ /** Each focus's provider at the gate's latest reading -- for the team-phase map only, which makes no spawn. */
97
+ const latestGateProvider = new Map();
98
+ /**
99
+ * True when the focus's next team spawn is held: by its teardown streak, or by
100
+ * the rate-limit window of the provider it would run on now.
101
+ */
102
+ export async function isNextSpawnInCooldown(config, route, deps = DEFAULT_ROUTE_DEPS) {
103
+ const provider = anyProviderWindowOpen() ? await resolveNextSpawnProvider(config, route, deps) : null;
104
+ latestGateProvider.set(route.focus_id, provider);
105
+ return isInSpawnCooldown(route.focus_id, provider);
106
+ }
107
+ /** True when the focus's teardown streak holds its next spawn, whatever it runs on (the pending-spawn guard's reading). */
108
+ export function isNextSpawnInTeardownCooldown(focusId) {
109
+ return isInSpawnCooldown(focusId, null);
110
+ }
111
+ /**
112
+ * The team-phase map's reading (completion/team-phase.ts): held as the gate's
113
+ * latest verdict for the focus would be now -- the provider it resolved then,
114
+ * against the windows as they stand. Display only; no spawn reads it.
115
+ */
116
+ export function wasNextSpawnHeldAtLastGate(focusId) {
117
+ return isInSpawnCooldown(focusId, latestGateProvider.get(focusId) ?? null);
118
+ }
119
+ /** Test-only: forget every gate reading. */
120
+ export function __resetNextSpawnGateForTests() {
121
+ latestGateProvider.clear();
122
+ }
123
+ //# sourceMappingURL=next-spawn-cooldown.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"next-spawn-cooldown.js","sourceRoot":"","sources":["../../src/spawn/next-spawn-cooldown.ts"],"names":[],"mappings":"AAAA,8FAA8F;AAC9F,sEAAsE;AACtE,sDAAsD;AACtD,gBAAgB;AAEhB;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,OAAO,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AAC3E,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC/E,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEnE,OAAO,EAAE,qBAAqB,EAAsB,MAAM,sBAAsB,CAAC;AACjF,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAExD,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAChG,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,MAAM,GAAG,GAAG,YAAY,CAAC,EAAE,MAAM,EAAE,gBAAgB,EAAE,CAAC,CAAC;AAqBvD,MAAM,kBAAkB,GAAuB,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,CAAC;AAE5G;;;;;;GAMG;AACH,KAAK,UAAU,uBAAuB,CACpC,MAAoB,EACpB,KAAqB,EACrB,IAAwB;IAExB,MAAM,OAAO,GAAG,wBAAwB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IACzD,IAAI,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE;QAAE,OAAO,qBAAqB,CAAC,OAAO,CAAC,CAAC;IAC7E,MAAM,KAAK,GAAG,CAAC,MAAM,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,cAAc,EAAE,KAAK,CAAC,UAAU,IAAI,SAAS,CAAC,CAAC;SAC9F,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC9C,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC/D,IAAI,aAAa,GAAkB,IAAI,CAAC;IACxC,IAAI,KAAK,EAAE,CAAC;QACV,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACjE,MAAM,SAAS,GAAG,qBAAqB,CAAC;YACtC,UAAU,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,eAAe,EAAE,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC;YAC3E,iBAAiB,EAAE,KAAK,CAAC,mBAAmB;SAC7C,CAAC,CAAC;QACH,aAAa,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,EAAE,EAAE,IAAI,KAAK,CAAC,yBAAyB,CAAC;IAC3G,CAAC;IACD,OAAO,mBAAmB,CAAC,QAAQ,EAAE,YAAY,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC;AAC9E,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,MAAoB,EACpB,KAAqB,EACrB,OAA2B,kBAAkB;IAE7C,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACrF,MAAM,aAAa,GAAG,OAAO,CAAC,CAAC,CAAC,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QAC3E,MAAM,QAAQ,GAAG,MAAM,uBAAuB,CAAC,aAAa,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;QAC3E,OAAO,qBAAqB,CAAC;YAC3B,cAAc,EAAE,KAAK,CAAC,eAAe;YACrC,kBAAkB,EAAE,KAAK,CAAC,oBAAoB;YAC9C,MAAM,EAAE,aAAa;YACrB,gBAAgB,EAAE,KAAK,CAAC,kBAAkB;YAC1C,cAAc,EAAE,KAAK,CAAC,eAAe;YACrC,qBAAqB,EAAE,KAAK,CAAC,wBAAwB;YACrD,qBAAqB,EAAE,KAAK,CAAC,wBAAwB;SACtD,EAAE,QAAQ,CAAC,CAAC;IACf,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,GAAG,CAAC,IAAI,CAAC,sEAAsE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,KAAM,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;QACxI,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,+GAA+G;AAC/G,MAAM,kBAAkB,GAAG,IAAI,GAAG,EAAgC,CAAC;AAEnE;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,MAAoB,EACpB,KAAqB,EACrB,OAA2B,kBAAkB;IAE7C,MAAM,QAAQ,GAAG,qBAAqB,EAAE,CAAC,CAAC,CAAC,MAAM,wBAAwB,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACtG,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACjD,OAAO,iBAAiB,CAAC,KAAK,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;AACrD,CAAC;AAED,2HAA2H;AAC3H,MAAM,UAAU,6BAA6B,CAAC,OAAe;IAC3D,OAAO,iBAAiB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;AAC1C,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,0BAA0B,CAAC,OAAe;IACxD,OAAO,iBAAiB,CAAC,OAAO,EAAE,kBAAkB,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC;AAC7E,CAAC;AAED,4CAA4C;AAC5C,MAAM,UAAU,4BAA4B;IAC1C,kBAAkB,CAAC,KAAK,EAAE,CAAC;AAC7B,CAAC"}
@@ -21,9 +21,10 @@
21
21
  * provider gave one, and the tail of BOTH streams. A caller that must tell
22
22
  * "the model could not run" from "the model judged" reads `kind`; a caller
23
23
  * that only catches keeps working (it is still an Error).
24
- * - The provider-wide window is READ before spawning and WRITTEN on a
25
- * rate-limit rejection (spawn-cooldown.ts providerRateLimitHoldUntilMs /
26
- * recordProviderRateLimit). During an open window no subprocess is spawned:
24
+ * - The claude provider's window is READ before spawning and WRITTEN on a
25
+ * rate-limit rejection (provider-window.ts providerWindowHoldUntilMs /
26
+ * openProviderWindow, keyed CLAUDE_PROVIDER: every call here runs
27
+ * `claude --print`). During an open window no subprocess is spawned:
27
28
  * the call rejects at once with kind rate_limit and the reset instant.
28
29
  *
29
30
  * @module spawn/one-shot-model
@@ -1 +1 @@
1
- {"version":3,"file":"one-shot-model.d.ts","sourceRoot":"","sources":["../../src/spawn/one-shot-model.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"one-shot-model.d.ts","sourceRoot":"","sources":["../../src/spawn/one-shot-model.ts"],"names":[],"mappings":"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"}
@@ -28,9 +28,10 @@
28
28
  * provider gave one, and the tail of BOTH streams. A caller that must tell
29
29
  * "the model could not run" from "the model judged" reads `kind`; a caller
30
30
  * that only catches keeps working (it is still an Error).
31
- * - The provider-wide window is READ before spawning and WRITTEN on a
32
- * rate-limit rejection (spawn-cooldown.ts providerRateLimitHoldUntilMs /
33
- * recordProviderRateLimit). During an open window no subprocess is spawned:
31
+ * - The claude provider's window is READ before spawning and WRITTEN on a
32
+ * rate-limit rejection (provider-window.ts providerWindowHoldUntilMs /
33
+ * openProviderWindow, keyed CLAUDE_PROVIDER: every call here runs
34
+ * `claude --print`). During an open window no subprocess is spawned:
34
35
  * the call rejects at once with kind rate_limit and the reset instant.
35
36
  *
36
37
  * @module spawn/one-shot-model
@@ -39,7 +40,7 @@ import { spawn } from 'node:child_process';
39
40
  import { createLogger } from '../shell/log.js';
40
41
  import { trackChildProcess } from './worker-registry.js';
41
42
  import { parseRateLimitInfo } from './rate-limit.js';
42
- import { providerRateLimitHoldUntilMs, recordProviderRateLimit } from './spawn-cooldown.js';
43
+ import { CLAUDE_PROVIDER, openProviderWindow, providerWindowHoldUntilMs } from './provider-window.js';
43
44
  const log = createLogger({ module: 'one-shot-model' });
44
45
  const DEFAULT_TIMEOUT_MS = 2 * 60 * 1000;
45
46
  /** How much of each stream a failure carries (enough to read the reason, never the whole transcript). */
@@ -209,7 +210,8 @@ export function buildOneShotArgs(systemPrompt) {
209
210
  let lastLoggedHoldUntilMs = null;
210
211
  /** The typed refusal for a call made inside an open provider window, or null when no window is open. */
211
212
  function heldByProviderWindow(label, nowMs) {
212
- const holdUntil = providerRateLimitHoldUntilMs(nowMs);
213
+ // Every one-shot here is `claude --print`: it runs on the claude backend's provider.
214
+ const holdUntil = providerWindowHoldUntilMs(CLAUDE_PROVIDER, nowMs);
213
215
  if (holdUntil === null)
214
216
  return null;
215
217
  if (lastLoggedHoldUntilMs !== holdUntil) {
@@ -290,7 +292,7 @@ export function invokeOneShotModel(systemPrompt, userMessage, opts) {
290
292
  settled = true;
291
293
  clearTimeout(timer);
292
294
  if (kind === 'rate_limit' && resetAtMs !== null)
293
- recordProviderRateLimit(resetAtMs, nowMs());
295
+ openProviderWindow(CLAUDE_PROVIDER, resetAtMs, nowMs());
294
296
  reject(new ModelUnavailable({
295
297
  kind,
296
298
  label,
@@ -1 +1 @@
1
- {"version":3,"file":"one-shot-model.js","sourceRoot":"","sources":["../../src/spawn/one-shot-model.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"one-shot-model.js","sourceRoot":"","sources":["../../src/spawn/one-shot-model.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * The account a spawn's model calls are billed and limited against.
3
+ * - anthropic: the claude backend (team spawns and every `claude --print` one-shot).
4
+ * - openai: the codex backend on a hosted model.
5
+ * - local: a local model (routed through codex, or any other non-hosted
6
+ * engine). No hosted limit reaches it; nothing records here today.
7
+ */
8
+ export type ModelProvider = 'anthropic' | 'openai' | 'local';
9
+ /** The provider of the claude backend -- the daemon's default engine (backends/registry.ts DEFAULT_BACKEND_ID). */
10
+ export declare const CLAUDE_PROVIDER: ModelProvider;
11
+ /** The provider of the codex backend on a hosted model. */
12
+ export declare const CODEX_PROVIDER: ModelProvider;
13
+ /**
14
+ * The provider a spawn will run on, from its resolved engine id and whether the
15
+ * pass routes a local model. Pure. An engine the daemon does not know as hosted
16
+ * is read as local: it reaches neither hosted account, so neither window may
17
+ * hold it.
18
+ */
19
+ export declare function providerForEngine(engineId: string, localModelSelected?: boolean): ModelProvider;
20
+ /**
21
+ * Record a rate-limit signal on one provider. Returns true when that provider's
22
+ * window is now open (the reset is in the future), false when the signal closed
23
+ * it. Leaves every other provider's window untouched.
24
+ */
25
+ export declare function openProviderWindow(provider: ModelProvider, resetAtMs: number, nowMs?: number): boolean;
26
+ /**
27
+ * The instant a provider's window closes, or null when it is not open. A window
28
+ * whose reset has passed reads as closed and is dropped.
29
+ */
30
+ export declare function providerWindowHoldUntilMs(provider: ModelProvider, nowMs?: number): number | null;
31
+ /**
32
+ * True when any provider's window is open. The spawn gates resolve the provider
33
+ * of the spawn they are about to let through only then: with every window closed
34
+ * no provider holds anything, so the route needs no reading.
35
+ */
36
+ export declare function anyProviderWindowOpen(nowMs?: number): boolean;
37
+ /** Test-only: close every window, as a daemon re-exec starts with none. */
38
+ export declare function __resetProviderWindowsForTests(): void;
39
+ //# sourceMappingURL=provider-window.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider-window.d.ts","sourceRoot":"","sources":["../../src/spawn/provider-window.ts"],"names":[],"mappings":"AAgCA;;;;;;GAMG;AACH,MAAM,MAAM,aAAa,GAAG,WAAW,GAAG,QAAQ,GAAG,OAAO,CAAC;AAE7D,mHAAmH;AACnH,eAAO,MAAM,eAAe,EAAE,aAA2B,CAAC;AAE1D,2DAA2D;AAC3D,eAAO,MAAM,cAAc,EAAE,aAAwB,CAAC;AAEtD;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,kBAAkB,UAAQ,GAAG,aAAa,CAI7F;AAID;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,GAAE,MAAmB,GAAG,OAAO,CAkBlH;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,aAAa,EAAE,KAAK,GAAE,MAAmB,GAAG,MAAM,GAAG,IAAI,CAQ5G;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,GAAE,MAAmB,GAAG,OAAO,CAKzE;AAED,2EAA2E;AAC3E,wBAAgB,8BAA8B,IAAI,IAAI,CAErD"}
@@ -0,0 +1,99 @@
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/model-unavailable-review-exit.test.ts,
3
+ // packages/daemon/src/spawn/codex-limit.test.ts, packages/daemon/src/spawn/empty-directive-route.test.ts,
4
+ // packages/daemon/src/spawn/provider-window.test.ts
5
+ // PINNED-BY-END
6
+ /**
7
+ * Per-provider rate-limit windows.
8
+ *
9
+ * A rate limit belongs to the ACCOUNT that reported it, and the daemon spawns on
10
+ * more than one account: the claude backend runs on Anthropic, the codex backend
11
+ * on OpenAI (or, when a local model is routed through it, on no hosted account
12
+ * at all). Until 2026-09-24 the daemon kept ONE window that every spawn read, so
13
+ * a Claude limit held the Codex review spawns that run on a separate OpenAI
14
+ * account (on mars every review has run on Codex since 2026-09-16), and a Codex
15
+ * limit recorded there would have held the Claude coding teams.
16
+ *
17
+ * So the window is keyed by provider. A limit opens only its own provider's
18
+ * window; a reader names the provider of the spawn it is about to make
19
+ * (providerForEngine, from the spawn's resolved engine and whether a local model
20
+ * is routed) and is held only by that provider's window. A limit on both holds
21
+ * both. Within one provider the semantics are the ones the single window had: a
22
+ * reset in the future opens it until then, the LATER of two open resets binds (a
23
+ * five_hour rejection inside a seven_day window does not shorten it), and a
24
+ * reset already in the past closes it. In-memory only: a restart re-learns it
25
+ * from the provider on the first attempt.
26
+ */
27
+ import { createLogger } from '../shell/log.js';
28
+ const log = createLogger({ module: 'spawn-cooldown' });
29
+ /** The provider of the claude backend -- the daemon's default engine (backends/registry.ts DEFAULT_BACKEND_ID). */
30
+ export const CLAUDE_PROVIDER = 'anthropic';
31
+ /** The provider of the codex backend on a hosted model. */
32
+ export const CODEX_PROVIDER = 'openai';
33
+ /**
34
+ * The provider a spawn will run on, from its resolved engine id and whether the
35
+ * pass routes a local model. Pure. An engine the daemon does not know as hosted
36
+ * is read as local: it reaches neither hosted account, so neither window may
37
+ * hold it.
38
+ */
39
+ export function providerForEngine(engineId, localModelSelected = false) {
40
+ if (engineId === 'claude')
41
+ return CLAUDE_PROVIDER;
42
+ if (engineId === 'codex')
43
+ return localModelSelected ? 'local' : CODEX_PROVIDER;
44
+ return 'local';
45
+ }
46
+ const windows = new Map();
47
+ /**
48
+ * Record a rate-limit signal on one provider. Returns true when that provider's
49
+ * window is now open (the reset is in the future), false when the signal closed
50
+ * it. Leaves every other provider's window untouched.
51
+ */
52
+ export function openProviderWindow(provider, resetAtMs, nowMs = Date.now()) {
53
+ const current = windows.get(provider) ?? null;
54
+ if (!Number.isFinite(resetAtMs) || resetAtMs <= nowMs) {
55
+ if (current !== null) {
56
+ log.info(`Provider rate limit (${provider}): window closed (reset instant has passed); ${provider} spawns resume`);
57
+ }
58
+ windows.delete(provider);
59
+ return false;
60
+ }
61
+ const next = Math.max(current ?? 0, resetAtMs);
62
+ if (current !== next) {
63
+ log.warn(`Provider rate limit (${provider}): holding every ${provider} spawn (teams and one-shots) until ` +
64
+ `${new Date(next).toISOString()} -- spawns on other providers proceed`);
65
+ }
66
+ windows.set(provider, next);
67
+ return true;
68
+ }
69
+ /**
70
+ * The instant a provider's window closes, or null when it is not open. A window
71
+ * whose reset has passed reads as closed and is dropped.
72
+ */
73
+ export function providerWindowHoldUntilMs(provider, nowMs = Date.now()) {
74
+ const until = windows.get(provider);
75
+ if (until === undefined)
76
+ return null;
77
+ if (until <= nowMs) {
78
+ windows.delete(provider);
79
+ return null;
80
+ }
81
+ return until;
82
+ }
83
+ /**
84
+ * True when any provider's window is open. The spawn gates resolve the provider
85
+ * of the spawn they are about to let through only then: with every window closed
86
+ * no provider holds anything, so the route needs no reading.
87
+ */
88
+ export function anyProviderWindowOpen(nowMs = Date.now()) {
89
+ for (const provider of [...windows.keys()]) {
90
+ if (providerWindowHoldUntilMs(provider, nowMs) !== null)
91
+ return true;
92
+ }
93
+ return false;
94
+ }
95
+ /** Test-only: close every window, as a daemon re-exec starts with none. */
96
+ export function __resetProviderWindowsForTests() {
97
+ windows.clear();
98
+ }
99
+ //# sourceMappingURL=provider-window.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider-window.js","sourceRoot":"","sources":["../../src/spawn/provider-window.ts"],"names":[],"mappings":"AAAA,8FAA8F;AAC9F,mFAAmF;AACnF,4GAA4G;AAC5G,sDAAsD;AACtD,gBAAgB;AAEhB;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,MAAM,GAAG,GAAG,YAAY,CAAC,EAAE,MAAM,EAAE,gBAAgB,EAAE,CAAC,CAAC;AAWvD,mHAAmH;AACnH,MAAM,CAAC,MAAM,eAAe,GAAkB,WAAW,CAAC;AAE1D,2DAA2D;AAC3D,MAAM,CAAC,MAAM,cAAc,GAAkB,QAAQ,CAAC;AAEtD;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,QAAgB,EAAE,kBAAkB,GAAG,KAAK;IAC5E,IAAI,QAAQ,KAAK,QAAQ;QAAE,OAAO,eAAe,CAAC;IAClD,IAAI,QAAQ,KAAK,OAAO;QAAE,OAAO,kBAAkB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC;IAC/E,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,OAAO,GAAG,IAAI,GAAG,EAAyB,CAAC;AAEjD;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAAC,QAAuB,EAAE,SAAiB,EAAE,QAAgB,IAAI,CAAC,GAAG,EAAE;IACvG,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC;IAC9C,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,SAAS,IAAI,KAAK,EAAE,CAAC;QACtD,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;YACrB,GAAG,CAAC,IAAI,CAAC,wBAAwB,QAAQ,gDAAgD,QAAQ,gBAAgB,CAAC,CAAC;QACrH,CAAC;QACD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACzB,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,IAAI,CAAC,EAAE,SAAS,CAAC,CAAC;IAC/C,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QACrB,GAAG,CAAC,IAAI,CACN,wBAAwB,QAAQ,oBAAoB,QAAQ,qCAAqC;YACjG,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,uCAAuC,CACvE,CAAC;IACJ,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IAC5B,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,yBAAyB,CAAC,QAAuB,EAAE,QAAgB,IAAI,CAAC,GAAG,EAAE;IAC3F,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACpC,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IACrC,IAAI,KAAK,IAAI,KAAK,EAAE,CAAC;QACnB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACzB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,qBAAqB,CAAC,QAAgB,IAAI,CAAC,GAAG,EAAE;IAC9D,KAAK,MAAM,QAAQ,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;QAC3C,IAAI,yBAAyB,CAAC,QAAQ,EAAE,KAAK,CAAC,KAAK,IAAI;YAAE,OAAO,IAAI,CAAC;IACvE,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,2EAA2E;AAC3E,MAAM,UAAU,8BAA8B;IAC5C,OAAO,CAAC,KAAK,EAAE,CAAC;AAClB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"routing-decider-spawn.d.ts","sourceRoot":"","sources":["../../src/spawn/routing-decider-spawn.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAsB,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAC3E,OAAO,EAKL,KAAK,UAAU,EAChB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAItD,OAAO,EAAuC,KAAK,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AAK3G,OAAO,EAA0B,KAAK,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAIxF;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,qBAAqB,SAAS,CAAC;AAE5C,0EAA0E;AAC1E,eAAO,MAAM,0BAA0B,QAAiB,CAAC;AAEzD,wFAAwF;AACxF,eAAO,MAAM,qBAAqB,qBAAqB,CAAC;AAExD;;;;;GAKG;AACH,eAAO,MAAM,yBAAyB,EAAE,SAAS,MAAM,EAQtD,CAAC;AAEF,MAAM,WAAW,0BAA0B;IACzC,MAAM,EAAE,YAAY,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,iGAAiG;IACjG,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,gEAAgE;IAChE,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;CACjC;AAED,MAAM,WAAW,yBAAyB;IACxC,sEAAsE;IACtE,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,QAAQ,EAAE,OAAO,CAAC;IAClB,gFAAgF;IAChF,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;;;;;;;OASG;IACH,gBAAgB,CAAC,EAAE;QAAE,IAAI,EAAE,oBAAoB,CAAC;QAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;CAC7E;AAED,wFAAwF;AACxF,MAAM,WAAW,oBAAoB;IACnC,iBAAiB,EAAE;QAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,GAAG,IAAI,CAAC;IACvD,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,mFAAmF;IACnF,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,oBAAoB,GAAG,yBAAyB,CAAC,kBAAkB,CAAC,GAAG,SAAS,CAMjI;AAED,yDAAyD;AACzD,MAAM,WAAW,uBAAuB;IACtC,YAAY,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAA;KAAE,KAAK,YAAY,CAAC;IACnI,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE,kBAAkB,KAAK,IAAI,CAAC;CAClD;AAOD,wCAAwC;AACxC,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,IAAI,CAAC,0BAA0B,EAAE,cAAc,GAAG,OAAO,GAAG,QAAQ,CAAC,GAAG,MAAM,EAAE,CAW7H;AAED;;;;GAIG;AACH,wBAAgB,4BAA4B,CAAC,MAAM,EAAE;IACnD,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,UAAU,CAAC;IAClB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACnB,GAAG,kBAAkB,CAoBrB;AA6DD,wGAAwG;AACxG,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,0BAA0B,EAChC,IAAI,GAAE,uBAAqC,GAC1C,OAAO,CAAC,yBAAyB,CAAC,CAmFpC"}
1
+ {"version":3,"file":"routing-decider-spawn.d.ts","sourceRoot":"","sources":["../../src/spawn/routing-decider-spawn.ts"],"names":[],"mappings":"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"}
@@ -23,7 +23,7 @@ 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
25
  import { parseRateLimitInfo } from './rate-limit.js';
26
- import { providerRateLimitHoldUntilMs, recordProviderRateLimit } from './spawn-cooldown.js';
26
+ import { CLAUDE_PROVIDER, openProviderWindow, providerWindowHoldUntilMs } from './provider-window.js';
27
27
  import { providerRefusalInProse } from './one-shot-model.js';
28
28
  const log = createLogger({ module: 'routing-decider' });
29
29
  /**
@@ -122,7 +122,8 @@ export function buildRoutingDeciderMetricRow(params) {
122
122
  * as an attempt; the sweep re-hands it after the reset.
123
123
  */
124
124
  function providerHoldResult(escalationId) {
125
- const holdUntil = providerRateLimitHoldUntilMs();
125
+ // The decider is a `claude --print` one-shot: the claude backend's provider.
126
+ const holdUntil = providerWindowHoldUntilMs(CLAUDE_PROVIDER);
126
127
  if (holdUntil === null)
127
128
  return null;
128
129
  const until = new Date(holdUntil).toISOString();
@@ -146,7 +147,7 @@ function attachProviderFacts(parser, escalationId) {
146
147
  if (rl && rl.status === 'rejected') {
147
148
  facts.rateLimitRejected = { resetAtMs: rl.resetsAtMs };
148
149
  if (rl.resetsAtMs !== null)
149
- recordProviderRateLimit(rl.resetsAtMs);
150
+ openProviderWindow(CLAUDE_PROVIDER, rl.resetsAtMs);
150
151
  log.warn(`[routing-decider] decider for ${escalationId}: provider rate limit REJECTED` +
151
152
  `${rl.rateLimitType ? ` [${rl.rateLimitType}]` : ''}` +
152
153
  `${rl.resetsAtMs !== null ? ` -- resets ${new Date(rl.resetsAtMs).toISOString()}` : ''}`);