@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.
- package/build-info.json +4 -3
- package/dist/backends/index.d.ts.map +1 -1
- package/dist/backends/index.js +1 -0
- package/dist/backends/index.js.map +1 -1
- package/dist/completion/codex-activity.d.ts +40 -0
- package/dist/completion/codex-activity.d.ts.map +1 -0
- package/dist/completion/codex-activity.js +69 -0
- package/dist/completion/codex-activity.js.map +1 -0
- package/dist/completion/completion-phase-registry.d.ts +2 -1
- package/dist/completion/completion-phase-registry.d.ts.map +1 -1
- package/dist/completion/completion-phase-registry.js +15 -3
- package/dist/completion/completion-phase-registry.js.map +1 -1
- package/dist/completion/detector.d.ts.map +1 -1
- package/dist/completion/detector.js +1 -0
- package/dist/completion/detector.js.map +1 -1
- package/dist/completion/event-entry-phases.d.ts.map +1 -1
- package/dist/completion/event-entry-phases.js +13 -11
- package/dist/completion/event-entry-phases.js.map +1 -1
- package/dist/completion/event-phases.d.ts.map +1 -1
- package/dist/completion/event-phases.js +16 -15
- package/dist/completion/event-phases.js.map +1 -1
- package/dist/completion/exit-classification.d.ts.map +1 -1
- package/dist/completion/exit-classification.js +3 -1
- package/dist/completion/exit-classification.js.map +1 -1
- package/dist/completion/review-exit-phase.js +1 -1
- package/dist/completion/status-advance-phase.d.ts +3 -0
- package/dist/completion/status-advance-phase.d.ts.map +1 -1
- package/dist/completion/status-advance-phase.js +2 -1
- package/dist/completion/status-advance-phase.js.map +1 -1
- package/dist/completion/team-phase.d.ts.map +1 -1
- package/dist/completion/team-phase.js +3 -2
- package/dist/completion/team-phase.js.map +1 -1
- package/dist/completion/team-progress-measure.d.ts +22 -1
- package/dist/completion/team-progress-measure.d.ts.map +1 -1
- package/dist/completion/team-progress-measure.js +54 -6
- package/dist/completion/team-progress-measure.js.map +1 -1
- package/dist/delivery/delivery-advance-block.d.ts +17 -4
- package/dist/delivery/delivery-advance-block.d.ts.map +1 -1
- package/dist/delivery/delivery-advance-block.js +203 -173
- package/dist/delivery/delivery-advance-block.js.map +1 -1
- package/dist/directive/agentless-directive.d.ts +28 -0
- package/dist/directive/agentless-directive.d.ts.map +1 -0
- package/dist/directive/agentless-directive.js +12 -0
- package/dist/directive/agentless-directive.js.map +1 -0
- package/dist/directive/directive-dispatch.d.ts +1 -20
- package/dist/directive/directive-dispatch.d.ts.map +1 -1
- package/dist/directive/directive-dispatch.js +4 -22
- package/dist/directive/directive-dispatch.js.map +1 -1
- package/dist/directive/directive-queue.d.ts.map +1 -1
- package/dist/directive/directive-queue.js +1 -20
- package/dist/directive/directive-queue.js.map +1 -1
- package/dist/drift/artifact-ref-shape.d.ts +23 -0
- package/dist/drift/artifact-ref-shape.d.ts.map +1 -1
- package/dist/drift/artifact-ref-shape.js +49 -0
- package/dist/drift/artifact-ref-shape.js.map +1 -1
- package/dist/focus/advance-hold.d.ts +55 -0
- package/dist/focus/advance-hold.d.ts.map +1 -0
- package/dist/focus/advance-hold.js +155 -0
- package/dist/focus/advance-hold.js.map +1 -0
- package/dist/focus/focus-lifecycle.d.ts.map +1 -1
- package/dist/focus/focus-lifecycle.js +3 -2
- package/dist/focus/focus-lifecycle.js.map +1 -1
- package/dist/focus/focus-spawn-decision.d.ts +17 -6
- package/dist/focus/focus-spawn-decision.d.ts.map +1 -1
- package/dist/focus/focus-spawn-decision.js +6 -6
- package/dist/focus/focus-spawn-decision.js.map +1 -1
- package/dist/focus/focus-team-state.js +1 -1
- package/dist/focus/focus-worktree-state.d.ts.map +1 -1
- package/dist/focus/focus-worktree-state.js +1 -0
- package/dist/focus/focus-worktree-state.js.map +1 -1
- package/dist/focus/listener-auto-advance.d.ts +14 -0
- package/dist/focus/listener-auto-advance.d.ts.map +1 -1
- package/dist/focus/listener-auto-advance.js +13 -10
- package/dist/focus/listener-auto-advance.js.map +1 -1
- package/dist/focus/listener-spawn.d.ts.map +1 -1
- package/dist/focus/listener-spawn.js +23 -34
- package/dist/focus/listener-spawn.js.map +1 -1
- package/dist/focus/listener-state.d.ts.map +1 -1
- package/dist/focus/listener-state.js +1 -0
- package/dist/focus/listener-state.js.map +1 -1
- package/dist/focus/listener.d.ts.map +1 -1
- package/dist/focus/listener.js +10 -4
- package/dist/focus/listener.js.map +1 -1
- package/dist/focus/pending-spawn-pass-deps.d.ts +3 -0
- package/dist/focus/pending-spawn-pass-deps.d.ts.map +1 -1
- package/dist/focus/pending-spawn-pass-deps.js +1 -0
- package/dist/focus/pending-spawn-pass-deps.js.map +1 -1
- package/dist/focus/ready-focus-spawn-action.d.ts +29 -0
- package/dist/focus/ready-focus-spawn-action.d.ts.map +1 -0
- package/dist/focus/ready-focus-spawn-action.js +32 -0
- package/dist/focus/ready-focus-spawn-action.js.map +1 -0
- package/dist/focus/ready-focus-team-work.d.ts +18 -0
- package/dist/focus/ready-focus-team-work.d.ts.map +1 -0
- package/dist/focus/ready-focus-team-work.js +59 -0
- package/dist/focus/ready-focus-team-work.js.map +1 -0
- package/dist/focus/team-actionable-work.d.ts +56 -6
- package/dist/focus/team-actionable-work.d.ts.map +1 -1
- package/dist/focus/team-actionable-work.js +56 -9
- package/dist/focus/team-actionable-work.js.map +1 -1
- package/dist/git/types.d.ts.map +1 -1
- package/dist/git/types.js +1 -0
- package/dist/git/types.js.map +1 -1
- package/dist/nexus/return.d.ts +44 -1
- package/dist/nexus/return.d.ts.map +1 -1
- package/dist/nexus/return.js +42 -0
- package/dist/nexus/return.js.map +1 -1
- package/dist/prompt/focus-prompt-builder.d.ts +10 -8
- package/dist/prompt/focus-prompt-builder.d.ts.map +1 -1
- package/dist/prompt/focus-prompt-builder.js +19 -10
- package/dist/prompt/focus-prompt-builder.js.map +1 -1
- package/dist/prompt-sections/execution-sections.d.ts.map +1 -1
- package/dist/prompt-sections/execution-sections.js +10 -0
- package/dist/prompt-sections/execution-sections.js.map +1 -1
- package/dist/prompt-sections/persona-sections.d.ts +15 -0
- package/dist/prompt-sections/persona-sections.d.ts.map +1 -1
- package/dist/prompt-sections/persona-sections.js +32 -2
- package/dist/prompt-sections/persona-sections.js.map +1 -1
- package/dist/queries/deliveries.js +1 -1
- package/dist/queries/deliveries.js.map +1 -1
- package/dist/queries/delivery-gate-holds.d.ts +78 -0
- package/dist/queries/delivery-gate-holds.d.ts.map +1 -0
- package/dist/queries/delivery-gate-holds.js +5 -0
- package/dist/queries/delivery-gate-holds.js.map +1 -0
- package/dist/queries/delivery-gate-state.d.ts +13 -58
- package/dist/queries/delivery-gate-state.d.ts.map +1 -1
- package/dist/queries/delivery-gate-state.js.map +1 -1
- package/dist/queries/focus-discovery.js +1 -1
- package/dist/queries/focus-discovery.js.map +1 -1
- package/dist/queries/focuses.d.ts.map +1 -1
- package/dist/queries/focuses.js +2 -0
- package/dist/queries/focuses.js.map +1 -1
- package/dist/queries/issues.d.ts.map +1 -1
- package/dist/queries/issues.js +1 -0
- package/dist/queries/issues.js.map +1 -1
- package/dist/queries/shared.js +1 -1
- package/dist/queries/shortfall-rulings.d.ts +13 -0
- package/dist/queries/shortfall-rulings.d.ts.map +1 -1
- package/dist/queries/shortfall-rulings.js +14 -0
- package/dist/queries/shortfall-rulings.js.map +1 -1
- package/dist/queries/workflows.d.ts.map +1 -1
- package/dist/queries/workflows.js +1 -0
- package/dist/queries/workflows.js.map +1 -1
- package/dist/spawn/codex-limit.d.ts +42 -0
- package/dist/spawn/codex-limit.d.ts.map +1 -0
- package/dist/spawn/codex-limit.js +146 -0
- package/dist/spawn/codex-limit.js.map +1 -0
- package/dist/spawn/directive-route.d.ts +41 -0
- package/dist/spawn/directive-route.d.ts.map +1 -0
- package/dist/spawn/directive-route.js +54 -0
- package/dist/spawn/directive-route.js.map +1 -0
- package/dist/spawn/guards.d.ts.map +1 -1
- package/dist/spawn/guards.js +4 -2
- package/dist/spawn/guards.js.map +1 -1
- package/dist/spawn/helpers.d.ts.map +1 -1
- package/dist/spawn/helpers.js +30 -1
- package/dist/spawn/helpers.js.map +1 -1
- package/dist/spawn/idle-work-stamp.d.ts +13 -7
- package/dist/spawn/idle-work-stamp.d.ts.map +1 -1
- package/dist/spawn/idle-work-stamp.js +22 -11
- package/dist/spawn/idle-work-stamp.js.map +1 -1
- package/dist/spawn/index.d.ts +1 -0
- package/dist/spawn/index.d.ts.map +1 -1
- package/dist/spawn/index.js +1 -0
- package/dist/spawn/index.js.map +1 -1
- package/dist/spawn/lead-continuation.d.ts.map +1 -1
- package/dist/spawn/lead-continuation.js +13 -11
- package/dist/spawn/lead-continuation.js.map +1 -1
- package/dist/spawn/next-spawn-cooldown.d.ts +43 -0
- package/dist/spawn/next-spawn-cooldown.d.ts.map +1 -0
- package/dist/spawn/next-spawn-cooldown.js +123 -0
- package/dist/spawn/next-spawn-cooldown.js.map +1 -0
- package/dist/spawn/one-shot-model.d.ts +4 -3
- package/dist/spawn/one-shot-model.d.ts.map +1 -1
- package/dist/spawn/one-shot-model.js +8 -6
- package/dist/spawn/one-shot-model.js.map +1 -1
- package/dist/spawn/provider-window.d.ts +39 -0
- package/dist/spawn/provider-window.d.ts.map +1 -0
- package/dist/spawn/provider-window.js +99 -0
- package/dist/spawn/provider-window.js.map +1 -0
- package/dist/spawn/routing-decider-spawn.d.ts.map +1 -1
- package/dist/spawn/routing-decider-spawn.js +4 -3
- package/dist/spawn/routing-decider-spawn.js.map +1 -1
- package/dist/spawn/routing-decider.js +2 -2
- package/dist/spawn/routing-decider.js.map +1 -1
- package/dist/spawn/spawn-cooldown.d.ts +43 -12
- package/dist/spawn/spawn-cooldown.d.ts.map +1 -1
- package/dist/spawn/spawn-cooldown.js +51 -58
- package/dist/spawn/spawn-cooldown.js.map +1 -1
- package/dist/spawn/spawn-decision.d.ts +11 -2
- package/dist/spawn/spawn-decision.d.ts.map +1 -1
- package/dist/spawn/spawn-decision.js +28 -60
- package/dist/spawn/spawn-decision.js.map +1 -1
- package/dist/spawn/worktree-session.d.ts +16 -0
- package/dist/spawn/worktree-session.d.ts.map +1 -1
- package/dist/spawn/worktree-session.js +45 -12
- package/dist/spawn/worktree-session.js.map +1 -1
- package/dist/testing/fixtures/codex-stream-session.d.ts +10 -0
- package/dist/testing/fixtures/codex-stream-session.d.ts.map +1 -0
- package/dist/testing/fixtures/codex-stream-session.js +47 -0
- package/dist/testing/fixtures/codex-stream-session.js.map +1 -0
- package/dist/testing/fixtures/index.js +1 -1
- package/dist/types/focus.d.ts +20 -0
- package/dist/types/focus.d.ts.map +1 -1
- package/dist/types/index.js +1 -1
- package/dist/verify/ai-inspection-runner.js +5 -5
- package/dist/verify/ai-inspection-runner.js.map +1 -1
- package/dist/verify/parked-shortfall-reuse.d.ts.map +1 -1
- package/dist/verify/parked-shortfall-reuse.js +3 -0
- package/dist/verify/parked-shortfall-reuse.js.map +1 -1
- package/dist/verify/ruling-evidence-resolution.d.ts +36 -0
- package/dist/verify/ruling-evidence-resolution.d.ts.map +1 -0
- package/dist/verify/ruling-evidence-resolution.js +133 -0
- package/dist/verify/ruling-evidence-resolution.js.map +1 -0
- package/dist/verify/shortfall-rulings.d.ts +30 -2
- package/dist/verify/shortfall-rulings.d.ts.map +1 -1
- package/dist/verify/shortfall-rulings.js +35 -3
- package/dist/verify/shortfall-rulings.js.map +1 -1
- package/dist/verify/verification-deps-default.d.ts.map +1 -1
- package/dist/verify/verification-deps-default.js +3 -0
- package/dist/verify/verification-deps-default.js.map +1 -1
- package/dist/verify/verification-deps.d.ts +9 -0
- package/dist/verify/verification-deps.d.ts.map +1 -1
- package/dist/verify/verification-engine.d.ts.map +1 -1
- package/dist/verify/verification-engine.js +4 -4
- package/dist/verify/verification-engine.js.map +1 -1
- package/dist/verify/verify-restatement.d.ts.map +1 -1
- package/dist/verify/verify-restatement.js +1 -19
- package/dist/verify/verify-restatement.js.map +1 -1
- 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
|
|
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
|
|
38
|
-
'
|
|
39
|
-
'a valid stop: the turn ends only when
|
|
40
|
-
'
|
|
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
|
|
121
|
-
|
|
122
|
-
if (
|
|
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(
|
|
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 ${
|
|
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":"AAAA,8FAA8F;AAC9F,iEAAiE;AACjE,gBAAgB;AAyBhB,OAAO,EACL,kBAAkB,IAAI,yBAAyB,EAC/C,cAAc,IAAI,qBAAqB,GACxC,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,
|
|
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":"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"}
|
|
@@ -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
|
|
25
|
-
* rate-limit rejection (
|
|
26
|
-
*
|
|
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":"AAQA
|
|
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
|
|
32
|
-
* rate-limit rejection (
|
|
33
|
-
*
|
|
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 {
|
|
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
|
-
|
|
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
|
-
|
|
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":"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
|
|
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 {
|
|
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
|
-
|
|
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
|
-
|
|
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()}` : ''}`);
|