crewly 1.20.176 → 1.20.178
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/config/skills/orchestrator/update-team-member/SKILL.md +1 -1
- package/dist/backend/backend/src/constants.d.ts +79 -3
- package/dist/backend/backend/src/constants.d.ts.map +1 -1
- package/dist/backend/backend/src/constants.js +97 -3
- package/dist/backend/backend/src/constants.js.map +1 -1
- package/dist/backend/backend/src/controllers/monitoring/terminal.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/monitoring/terminal.controller.js +2 -1
- package/dist/backend/backend/src/controllers/monitoring/terminal.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/system/runtime-fallback.controller.d.ts +30 -0
- package/dist/backend/backend/src/controllers/system/runtime-fallback.controller.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/system/runtime-fallback.controller.js +100 -0
- package/dist/backend/backend/src/controllers/system/runtime-fallback.controller.js.map +1 -0
- package/dist/backend/backend/src/controllers/team/team.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/team/team.controller.js +33 -4
- package/dist/backend/backend/src/controllers/team/team.controller.js.map +1 -1
- package/dist/backend/backend/src/index.d.ts.map +1 -1
- package/dist/backend/backend/src/index.js +25 -0
- package/dist/backend/backend/src/index.js.map +1 -1
- package/dist/backend/backend/src/routes/modules/system.routes.d.ts.map +1 -1
- package/dist/backend/backend/src/routes/modules/system.routes.js +3 -0
- package/dist/backend/backend/src/routes/modules/system.routes.js.map +1 -1
- package/dist/backend/backend/src/services/agent/agent-heartbeat-monitor.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/agent-heartbeat-monitor.service.js +17 -0
- package/dist/backend/backend/src/services/agent/agent-heartbeat-monitor.service.js.map +1 -1
- package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts +10 -1
- package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/agent-registration.service.js +103 -7
- package/dist/backend/backend/src/services/agent/agent-registration.service.js.map +1 -1
- package/dist/backend/backend/src/services/agent/antigravity-runtime.service.d.ts +1 -1
- package/dist/backend/backend/src/services/agent/antigravity-runtime.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/antigravity-runtime.service.js +3 -2
- package/dist/backend/backend/src/services/agent/antigravity-runtime.service.js.map +1 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.d.ts +7 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.js +16 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.js.map +1 -1
- package/dist/backend/backend/src/services/agent/idle-detection.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/idle-detection.service.js +2 -1
- package/dist/backend/backend/src/services/agent/idle-detection.service.js.map +1 -1
- package/dist/backend/backend/src/services/agent/oauth-relogin-monitor.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/oauth-relogin-monitor.service.js +7 -0
- package/dist/backend/backend/src/services/agent/oauth-relogin-monitor.service.js.map +1 -1
- package/dist/backend/backend/src/services/agent/planned-relaunch.registry.d.ts +61 -0
- package/dist/backend/backend/src/services/agent/planned-relaunch.registry.d.ts.map +1 -0
- package/dist/backend/backend/src/services/agent/planned-relaunch.registry.js +73 -0
- package/dist/backend/backend/src/services/agent/planned-relaunch.registry.js.map +1 -0
- package/dist/backend/backend/src/services/agent/tmux.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/tmux.service.js +2 -1
- package/dist/backend/backend/src/services/agent/tmux.service.js.map +1 -1
- package/dist/backend/backend/src/services/harness/harness-status.service.d.ts +17 -0
- package/dist/backend/backend/src/services/harness/harness-status.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/harness/harness-status.service.js +25 -1
- package/dist/backend/backend/src/services/harness/harness-status.service.js.map +1 -1
- package/dist/backend/backend/src/services/messaging/queue-processor.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/messaging/queue-processor.service.js +2 -1
- package/dist/backend/backend/src/services/messaging/queue-processor.service.js.map +1 -1
- package/dist/backend/backend/src/services/monitoring/activity-monitor.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/monitoring/activity-monitor.service.js +3 -2
- package/dist/backend/backend/src/services/monitoring/activity-monitor.service.js.map +1 -1
- package/dist/backend/backend/src/services/orchestrator/orchestrator-heartbeat-monitor.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/orchestrator/orchestrator-heartbeat-monitor.service.js +10 -0
- package/dist/backend/backend/src/services/orchestrator/orchestrator-heartbeat-monitor.service.js.map +1 -1
- package/dist/backend/backend/src/services/orchestrator/orchestrator-restart.service.d.ts +28 -1
- package/dist/backend/backend/src/services/orchestrator/orchestrator-restart.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/orchestrator/orchestrator-restart.service.js +48 -3
- package/dist/backend/backend/src/services/orchestrator/orchestrator-restart.service.js.map +1 -1
- package/dist/backend/backend/src/services/orchestrator/orchestrator-status.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/orchestrator/orchestrator-status.service.js +3 -2
- package/dist/backend/backend/src/services/orchestrator/orchestrator-status.service.js.map +1 -1
- package/dist/backend/backend/src/services/runtime-fallback/effective-runtime.d.ts +100 -0
- package/dist/backend/backend/src/services/runtime-fallback/effective-runtime.d.ts.map +1 -0
- package/dist/backend/backend/src/services/runtime-fallback/effective-runtime.js +115 -0
- package/dist/backend/backend/src/services/runtime-fallback/effective-runtime.js.map +1 -0
- package/dist/backend/backend/src/services/runtime-fallback/reset-time.d.ts +66 -0
- package/dist/backend/backend/src/services/runtime-fallback/reset-time.d.ts.map +1 -0
- package/dist/backend/backend/src/services/runtime-fallback/reset-time.js +211 -0
- package/dist/backend/backend/src/services/runtime-fallback/reset-time.js.map +1 -0
- package/dist/backend/backend/src/services/runtime-fallback/runtime-availability.d.ts +39 -0
- package/dist/backend/backend/src/services/runtime-fallback/runtime-availability.d.ts.map +1 -0
- package/dist/backend/backend/src/services/runtime-fallback/runtime-availability.js +56 -0
- package/dist/backend/backend/src/services/runtime-fallback/runtime-availability.js.map +1 -0
- package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.service.d.ts +417 -0
- package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.service.js +974 -0
- package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.service.js.map +1 -0
- package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.store.d.ts +53 -0
- package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.store.d.ts.map +1 -0
- package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.store.js +109 -0
- package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.store.js.map +1 -0
- package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.types.d.ts +134 -0
- package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.types.d.ts.map +1 -0
- package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.types.js +152 -0
- package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.types.js.map +1 -0
- package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.wiring.d.ts +95 -0
- package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.wiring.d.ts.map +1 -0
- package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.wiring.js +286 -0
- package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.wiring.js.map +1 -0
- package/dist/backend/backend/src/services/runtime-fallback/runtime-smoke-test.service.d.ts +203 -0
- package/dist/backend/backend/src/services/runtime-fallback/runtime-smoke-test.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/runtime-fallback/runtime-smoke-test.service.js +419 -0
- package/dist/backend/backend/src/services/runtime-fallback/runtime-smoke-test.service.js.map +1 -0
- package/dist/backend/backend/src/services/runtime-fallback/runtime-usage-probe.d.ts +94 -0
- package/dist/backend/backend/src/services/runtime-fallback/runtime-usage-probe.d.ts.map +1 -0
- package/dist/backend/backend/src/services/runtime-fallback/runtime-usage-probe.js +186 -0
- package/dist/backend/backend/src/services/runtime-fallback/runtime-usage-probe.js.map +1 -0
- package/dist/backend/backend/src/services/runtime-fallback/usage-limit-rules.d.ts +113 -0
- package/dist/backend/backend/src/services/runtime-fallback/usage-limit-rules.d.ts.map +1 -0
- package/dist/backend/backend/src/services/runtime-fallback/usage-limit-rules.js +257 -0
- package/dist/backend/backend/src/services/runtime-fallback/usage-limit-rules.js.map +1 -0
- package/dist/backend/backend/src/services/slack/slack-team-channel.service.d.ts +8 -0
- package/dist/backend/backend/src/services/slack/slack-team-channel.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-team-channel.service.js +16 -2
- package/dist/backend/backend/src/services/slack/slack-team-channel.service.js.map +1 -1
- package/dist/backend/backend/src/services/task-pool/claim.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/task-pool/claim.service.js +3 -1
- package/dist/backend/backend/src/services/task-pool/claim.service.js.map +1 -1
- package/dist/backend/backend/src/services/workflow/message-scheduler.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/workflow/message-scheduler.service.js +3 -2
- package/dist/backend/backend/src/services/workflow/message-scheduler.service.js.map +1 -1
- package/dist/backend/backend/src/services/workflow/scheduler.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/workflow/scheduler.service.js +3 -2
- package/dist/backend/backend/src/services/workflow/scheduler.service.js.map +1 -1
- package/dist/backend/backend/src/types/index.d.ts +14 -0
- package/dist/backend/backend/src/types/index.d.ts.map +1 -1
- package/dist/backend/backend/src/types/index.js.map +1 -1
- package/dist/backend/build-info.json +2 -2
- package/dist/cli/backend/src/constants.d.ts +79 -3
- package/dist/cli/backend/src/constants.d.ts.map +1 -1
- package/dist/cli/backend/src/constants.js +97 -3
- package/dist/cli/backend/src/constants.js.map +1 -1
- package/dist/cli/backend/src/services/agent/agent-registration.service.d.ts +10 -1
- package/dist/cli/backend/src/services/agent/agent-registration.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/agent/agent-registration.service.js +103 -7
- package/dist/cli/backend/src/services/agent/agent-registration.service.js.map +1 -1
- package/dist/cli/backend/src/services/agent/antigravity-runtime.service.d.ts +1 -1
- package/dist/cli/backend/src/services/agent/antigravity-runtime.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/agent/antigravity-runtime.service.js +3 -2
- package/dist/cli/backend/src/services/agent/antigravity-runtime.service.js.map +1 -1
- package/dist/cli/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.d.ts +7 -0
- package/dist/cli/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.js +16 -0
- package/dist/cli/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.js.map +1 -1
- package/dist/cli/backend/src/services/agent/oauth-relogin-monitor.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/agent/oauth-relogin-monitor.service.js +7 -0
- package/dist/cli/backend/src/services/agent/oauth-relogin-monitor.service.js.map +1 -1
- package/dist/cli/backend/src/services/agent/planned-relaunch.registry.d.ts +61 -0
- package/dist/cli/backend/src/services/agent/planned-relaunch.registry.d.ts.map +1 -0
- package/dist/cli/backend/src/services/agent/planned-relaunch.registry.js +73 -0
- package/dist/cli/backend/src/services/agent/planned-relaunch.registry.js.map +1 -0
- package/dist/cli/backend/src/services/harness/harness-status.service.d.ts +17 -0
- package/dist/cli/backend/src/services/harness/harness-status.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/harness/harness-status.service.js +25 -1
- package/dist/cli/backend/src/services/harness/harness-status.service.js.map +1 -1
- package/dist/cli/backend/src/services/messaging/queue-processor.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/messaging/queue-processor.service.js +2 -1
- package/dist/cli/backend/src/services/messaging/queue-processor.service.js.map +1 -1
- package/dist/cli/backend/src/services/monitoring/activity-monitor.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/monitoring/activity-monitor.service.js +3 -2
- package/dist/cli/backend/src/services/monitoring/activity-monitor.service.js.map +1 -1
- package/dist/cli/backend/src/services/orchestrator/orchestrator-restart.service.d.ts +28 -1
- package/dist/cli/backend/src/services/orchestrator/orchestrator-restart.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/orchestrator/orchestrator-restart.service.js +48 -3
- package/dist/cli/backend/src/services/orchestrator/orchestrator-restart.service.js.map +1 -1
- package/dist/cli/backend/src/services/orchestrator/orchestrator-status.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/orchestrator/orchestrator-status.service.js +3 -2
- package/dist/cli/backend/src/services/orchestrator/orchestrator-status.service.js.map +1 -1
- package/dist/cli/backend/src/services/runtime-fallback/effective-runtime.d.ts +100 -0
- package/dist/cli/backend/src/services/runtime-fallback/effective-runtime.d.ts.map +1 -0
- package/dist/cli/backend/src/services/runtime-fallback/effective-runtime.js +115 -0
- package/dist/cli/backend/src/services/runtime-fallback/effective-runtime.js.map +1 -0
- package/dist/cli/backend/src/services/slack/slack-team-channel.service.d.ts +8 -0
- package/dist/cli/backend/src/services/slack/slack-team-channel.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/slack/slack-team-channel.service.js +16 -2
- package/dist/cli/backend/src/services/slack/slack-team-channel.service.js.map +1 -1
- package/dist/cli/backend/src/services/task-pool/claim.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/task-pool/claim.service.js +3 -1
- package/dist/cli/backend/src/services/task-pool/claim.service.js.map +1 -1
- package/dist/cli/backend/src/types/index.d.ts +14 -0
- package/dist/cli/backend/src/types/index.d.ts.map +1 -1
- package/dist/cli/backend/src/types/index.js.map +1 -1
- package/dist/cli/cli/src/utils/runtime-auth.d.ts +1 -1
- package/dist/cli/cli/src/utils/runtime-auth.js +1 -1
- package/frontend/dist/assets/{index-0726afab.js → index-69af46c3.js} +275 -275
- package/frontend/dist/assets/{index-0c5449b5.css → index-cdc52122.css} +1 -1
- package/frontend/dist/index.html +2 -2
- package/package.json +1 -1
|
@@ -0,0 +1,417 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Runtime fallback — when an agent's runtime runs out of usage, run the agent
|
|
3
|
+
* on the next runtime of its fallback chain until the limit resets, then
|
|
4
|
+
* switch it back at an idle boundary.
|
|
5
|
+
*
|
|
6
|
+
* Flow (specs/2026-10-01-runtime-fallback.md):
|
|
7
|
+
*
|
|
8
|
+
* 1. **Detect** ({@link RuntimeFallbackService.reportOutput}): live output or
|
|
9
|
+
* an in-process run error matched a usage-limit rule. Transient rate limits
|
|
10
|
+
* are left to the runtime's own retries unless they keep coming.
|
|
11
|
+
* 2. **Confirm** with the runtime's probe (Claude: a one-line print-mode turn);
|
|
12
|
+
* a probe that answers normally marks the match a false positive.
|
|
13
|
+
* 3. **Mark the runtime exhausted** (account-wide) with its reset time.
|
|
14
|
+
* 4. **Switch** the agent that hit it at its next safe point: handover file,
|
|
15
|
+
* `runtimeOverride` (the configured runtime is not changed), relaunch, then
|
|
16
|
+
* re-deliver what waited for it.
|
|
17
|
+
* 5. Other agents on that runtime switch **when they next get work**
|
|
18
|
+
* ({@link RuntimeFallbackService.beforeDelivery}) or when started
|
|
19
|
+
* ({@link RuntimeFallbackService.resolveLaunch}); idle ones are not woken.
|
|
20
|
+
* 6. **Switch back** ({@link RuntimeFallbackService.tick}) only after the
|
|
21
|
+
* runtime's probe answers normally (at the reset time, or on the probe
|
|
22
|
+
* interval); each agent reverts at its next idle boundary. A runtime that
|
|
23
|
+
* is out of money/credit (`billing`) has no reset time and is probed at
|
|
24
|
+
* most every BILLING_PROBE_INTERVAL_MS. A switch-back that fails (the limit
|
|
25
|
+
* comes straight back) doubles the next probe interval.
|
|
26
|
+
* 7. **Tell the owner once** per event, and once when it is over.
|
|
27
|
+
*
|
|
28
|
+
* Nothing here throws into its callers: delivery and launch fall back to the
|
|
29
|
+
* configured runtime on any error.
|
|
30
|
+
*
|
|
31
|
+
* @module services/runtime-fallback/runtime-fallback.service
|
|
32
|
+
*/
|
|
33
|
+
import type { LaunchRuntimeDecision, LaunchRuntimeInput, RuntimeFallbackHooks, RuntimeOutputSource } from './effective-runtime.js';
|
|
34
|
+
import type { RuntimeFallbackStore } from './runtime-fallback.store.js';
|
|
35
|
+
import { type ExhaustedRuntime, type RuntimeAvailability, type RuntimeFallbackSettings, type RuntimeOverride } from './runtime-fallback.types.js';
|
|
36
|
+
/**
|
|
37
|
+
* Result of a switch-back probe: `available` (it answered normally),
|
|
38
|
+
* `limited` (still out), `unknown` (the probe ran but could not tell — never
|
|
39
|
+
* switches back), `unsupported` (this runtime has no probe; only a parsed
|
|
40
|
+
* reset time can bring it back).
|
|
41
|
+
*/
|
|
42
|
+
export type ProbeResult = 'available' | 'limited' | 'unknown' | 'unsupported';
|
|
43
|
+
/** What the service needs to know about an agent. */
|
|
44
|
+
export interface FallbackAgentInfo {
|
|
45
|
+
sessionName: string;
|
|
46
|
+
/** Name the owner knows ("Ella", "Orc") */
|
|
47
|
+
name: string;
|
|
48
|
+
/** Configured runtime */
|
|
49
|
+
primary: string;
|
|
50
|
+
memberId?: string;
|
|
51
|
+
teamId?: string;
|
|
52
|
+
isOrchestrator: boolean;
|
|
53
|
+
}
|
|
54
|
+
/** A handover to write when an agent changes runtime. */
|
|
55
|
+
export interface HandoverRequest {
|
|
56
|
+
sessionName: string;
|
|
57
|
+
from: string;
|
|
58
|
+
to: string;
|
|
59
|
+
direction: 'switch' | 'revert';
|
|
60
|
+
/** Conversation id on `from`, when known */
|
|
61
|
+
conversationId: string | null;
|
|
62
|
+
/** WorkItem the agent is on */
|
|
63
|
+
workItem: {
|
|
64
|
+
id: string;
|
|
65
|
+
title: string;
|
|
66
|
+
} | null;
|
|
67
|
+
}
|
|
68
|
+
/** Minimal logger. */
|
|
69
|
+
export interface FallbackLogger {
|
|
70
|
+
info(message: string, context?: Record<string, unknown>): void;
|
|
71
|
+
warn(message: string, context?: Record<string, unknown>): void;
|
|
72
|
+
debug(message: string, context?: Record<string, unknown>): void;
|
|
73
|
+
}
|
|
74
|
+
/** Sends the owner a DM. */
|
|
75
|
+
export interface FallbackOwnerNotifier {
|
|
76
|
+
sendToOwner(text: string): Promise<unknown>;
|
|
77
|
+
}
|
|
78
|
+
/** Injectable dependencies. */
|
|
79
|
+
export interface RuntimeFallbackDeps {
|
|
80
|
+
store: RuntimeFallbackStore;
|
|
81
|
+
/** Configured agent behind a session (null when unknown) */
|
|
82
|
+
getAgent: (sessionName: string) => Promise<FallbackAgentInfo | null>;
|
|
83
|
+
/** Number of agents configured on a runtime (orc included), for the notice */
|
|
84
|
+
countAgentsOnRuntime?: (runtime: string) => Promise<number>;
|
|
85
|
+
/** The session has a live runtime (PTY or in-process) */
|
|
86
|
+
isLive: (sessionName: string) => boolean;
|
|
87
|
+
/** Mid-turn, or a message is being delivered / queued */
|
|
88
|
+
isBusy: (sessionName: string) => Promise<boolean>;
|
|
89
|
+
/** Which runtimes are installed and signed in */
|
|
90
|
+
getAvailability: (settings: RuntimeFallbackSettings) => Promise<RuntimeAvailability[]>;
|
|
91
|
+
/** Does the runtime have usage again? */
|
|
92
|
+
probe: (runtime: string) => Promise<ProbeResult>;
|
|
93
|
+
/** Write the handover file; returns its path */
|
|
94
|
+
writeHandover: (req: HandoverRequest) => Promise<string | null>;
|
|
95
|
+
/** WorkItem the agent is on */
|
|
96
|
+
getActiveWorkItem: (sessionName: string) => Promise<{
|
|
97
|
+
id: string;
|
|
98
|
+
title: string;
|
|
99
|
+
} | null>;
|
|
100
|
+
/** Stored conversation id of a session */
|
|
101
|
+
conversation: {
|
|
102
|
+
get: (sessionName: string) => string | undefined;
|
|
103
|
+
set: (sessionName: string, id: string) => void;
|
|
104
|
+
clear: (sessionName: string) => void;
|
|
105
|
+
};
|
|
106
|
+
/** Stop the session and start it again (the launch resolves the runtime) */
|
|
107
|
+
relaunch: (agent: FallbackAgentInfo) => Promise<boolean>;
|
|
108
|
+
/** After a relaunch: re-deliver unanswered owner messages */
|
|
109
|
+
redeliver: (sessionName: string) => Promise<void>;
|
|
110
|
+
/** Write out messages queued for the session */
|
|
111
|
+
flushQueued: (sessionName: string) => Promise<void>;
|
|
112
|
+
/** This machine's name */
|
|
113
|
+
machineName: () => string;
|
|
114
|
+
notifier?: () => FallbackOwnerNotifier | null;
|
|
115
|
+
/** Sessions the fallback never touches (smoke tests) */
|
|
116
|
+
isExempt?: (sessionName: string) => boolean;
|
|
117
|
+
now?: () => number;
|
|
118
|
+
sleep?: (ms: number) => Promise<void>;
|
|
119
|
+
/** Zone for times in owner messages and clock-only reset times */
|
|
120
|
+
timeZone?: string;
|
|
121
|
+
logger?: FallbackLogger;
|
|
122
|
+
}
|
|
123
|
+
/** An override as the API shows it. */
|
|
124
|
+
export interface RuntimeOverrideView extends RuntimeOverride {
|
|
125
|
+
sessionName: string;
|
|
126
|
+
/** "on DeepSeek (Claude limit)" */
|
|
127
|
+
badge: string;
|
|
128
|
+
runtimeLabel: string;
|
|
129
|
+
primaryLabel: string;
|
|
130
|
+
}
|
|
131
|
+
/** `GET /api/system/runtime-fallback`. */
|
|
132
|
+
export interface RuntimeFallbackSnapshot {
|
|
133
|
+
settings: RuntimeFallbackSettings;
|
|
134
|
+
runtimes: Array<RuntimeAvailability & {
|
|
135
|
+
exhausted: boolean;
|
|
136
|
+
}>;
|
|
137
|
+
exhausted: ExhaustedRuntime[];
|
|
138
|
+
overrides: RuntimeOverrideView[];
|
|
139
|
+
}
|
|
140
|
+
/** Outcome of a switch attempt. */
|
|
141
|
+
export type SwitchOutcome = 'switched' | 'reverted' | 'no_fallback' | 'skipped' | 'failed';
|
|
142
|
+
/** Runtime fallback coordinator. */
|
|
143
|
+
export declare class RuntimeFallbackService implements RuntimeFallbackHooks {
|
|
144
|
+
private readonly deps;
|
|
145
|
+
private state;
|
|
146
|
+
private readonly logger;
|
|
147
|
+
private readonly now;
|
|
148
|
+
private readonly sleep;
|
|
149
|
+
/** Sessions being switched (messages for them are queued) */
|
|
150
|
+
private readonly switching;
|
|
151
|
+
/** Runtimes whose detection is being confirmed by a probe */
|
|
152
|
+
private readonly confirming;
|
|
153
|
+
/** A probe said the runtime is fine: ignore matches until then */
|
|
154
|
+
private readonly mutedUntil;
|
|
155
|
+
/** Recent transient rate limits per session */
|
|
156
|
+
private readonly transients;
|
|
157
|
+
/** Owner notice due time per exhausted runtime */
|
|
158
|
+
private readonly noticeDue;
|
|
159
|
+
/** Kickoff notes waiting for a session's next launch */
|
|
160
|
+
private readonly kickoffNotes;
|
|
161
|
+
/** Last switch-back per runtime, to recognise one that failed */
|
|
162
|
+
private readonly recentRecoveries;
|
|
163
|
+
private availability;
|
|
164
|
+
private timer;
|
|
165
|
+
private ticking;
|
|
166
|
+
/**
|
|
167
|
+
* @param deps - Dependencies
|
|
168
|
+
*/
|
|
169
|
+
constructor(deps: RuntimeFallbackDeps);
|
|
170
|
+
/** Start the periodic tick (switch-back checks, reverts, notices). */
|
|
171
|
+
start(): void;
|
|
172
|
+
/** Stop the tick. */
|
|
173
|
+
stop(): void;
|
|
174
|
+
/** @returns Current settings (copy) */
|
|
175
|
+
getSettings(): RuntimeFallbackSettings;
|
|
176
|
+
/**
|
|
177
|
+
* Apply a partial settings update.
|
|
178
|
+
*
|
|
179
|
+
* @param patch - Owner's update (validated)
|
|
180
|
+
* @returns New settings
|
|
181
|
+
* @throws RuntimeFallbackSettingsError when invalid
|
|
182
|
+
*/
|
|
183
|
+
updateSettings(patch: unknown): RuntimeFallbackSettings;
|
|
184
|
+
/**
|
|
185
|
+
* Runtime a session runs on instead of its configured one.
|
|
186
|
+
*
|
|
187
|
+
* @param sessionName - Session
|
|
188
|
+
* @returns Fallback runtime, or null
|
|
189
|
+
*/
|
|
190
|
+
overrideFor(sessionName: string): string | null;
|
|
191
|
+
/**
|
|
192
|
+
* Take the note for a session's next kickoff.
|
|
193
|
+
*
|
|
194
|
+
* @param sessionName - Session
|
|
195
|
+
* @returns Note (once) or null
|
|
196
|
+
*/
|
|
197
|
+
takeKickoffNote(sessionName: string): string | null;
|
|
198
|
+
/**
|
|
199
|
+
* Runtime output / error of a session. A usage limit starts the fallback
|
|
200
|
+
* (asynchronously); everything else is ignored.
|
|
201
|
+
*
|
|
202
|
+
* @param sessionName - Session
|
|
203
|
+
* @param runtime - Runtime it runs on
|
|
204
|
+
* @param text - Output (never logged)
|
|
205
|
+
* @param source - `output` (live chunk), `screen` (sweep, ignored: old scrollback) or `error`
|
|
206
|
+
* @returns True when a usage limit was recognised
|
|
207
|
+
*/
|
|
208
|
+
reportOutput(sessionName: string, runtime: string, text: string, source: RuntimeOutputSource): boolean;
|
|
209
|
+
/**
|
|
210
|
+
* Gate before a message is written into a session.
|
|
211
|
+
*
|
|
212
|
+
* @param sessionName - Session
|
|
213
|
+
* @param runtime - Runtime the caller resolved
|
|
214
|
+
* @returns `queue` while a switch runs or when the session's runtime is out of usage and a fallback exists
|
|
215
|
+
*/
|
|
216
|
+
beforeDelivery(sessionName: string, runtime: string): 'deliver' | 'queue';
|
|
217
|
+
/**
|
|
218
|
+
* Runtime to launch a session on.
|
|
219
|
+
*
|
|
220
|
+
* @param input - Session, configured runtime
|
|
221
|
+
* @returns The decision
|
|
222
|
+
*/
|
|
223
|
+
resolveLaunch(input: LaunchRuntimeInput): Promise<LaunchRuntimeDecision>;
|
|
224
|
+
/**
|
|
225
|
+
* Count a transient rate limit; escalate when they keep coming.
|
|
226
|
+
*
|
|
227
|
+
* @param sessionName - Session
|
|
228
|
+
* @param match - Transient match
|
|
229
|
+
* @returns A usage-limit match when escalated, else null
|
|
230
|
+
*/
|
|
231
|
+
private escalateTransient;
|
|
232
|
+
/**
|
|
233
|
+
* A usage limit was seen in a session.
|
|
234
|
+
*
|
|
235
|
+
* @param sessionName - Session
|
|
236
|
+
* @param runtime - Runtime that is out of usage
|
|
237
|
+
* @param match - The match
|
|
238
|
+
*/
|
|
239
|
+
private onUsageLimit;
|
|
240
|
+
/**
|
|
241
|
+
* Confirm a detection with the runtime's probe (one probe per runtime at a time).
|
|
242
|
+
*
|
|
243
|
+
* @param runtime - Runtime
|
|
244
|
+
* @returns False when the probe shows the runtime works (a false positive)
|
|
245
|
+
*/
|
|
246
|
+
private confirm;
|
|
247
|
+
/**
|
|
248
|
+
* Move a session to the next runtime of its chain (or back to its primary).
|
|
249
|
+
*
|
|
250
|
+
* @param sessionName - Session
|
|
251
|
+
* @param opts - Wait for its safe point first; flush queued messages when nothing switched
|
|
252
|
+
* @returns What happened
|
|
253
|
+
*/
|
|
254
|
+
switchSession(sessionName: string, opts: {
|
|
255
|
+
waitForSafePoint: boolean;
|
|
256
|
+
flushAfter: boolean;
|
|
257
|
+
}): Promise<SwitchOutcome>;
|
|
258
|
+
/**
|
|
259
|
+
* After a switch, once messages are no longer held back: re-deliver what
|
|
260
|
+
* waited for the agent and write out its queue. Messages the gate queued
|
|
261
|
+
* must not wait for an event that will not come, also when nothing switched.
|
|
262
|
+
*
|
|
263
|
+
* @param sessionName - Session
|
|
264
|
+
* @param outcome - How the switch went
|
|
265
|
+
* @param flushAlways - Flush the queue even when nothing switched
|
|
266
|
+
*/
|
|
267
|
+
private afterSwitch;
|
|
268
|
+
private doSwitch;
|
|
269
|
+
/**
|
|
270
|
+
* Record an override (or clear it when the target is the primary) and
|
|
271
|
+
* prepare the kickoff note.
|
|
272
|
+
*
|
|
273
|
+
* @param agent - Agent
|
|
274
|
+
* @param from - Runtime it leaves (out of usage)
|
|
275
|
+
* @param target - Runtime it goes to
|
|
276
|
+
* @param handover - Handover file, when written
|
|
277
|
+
*/
|
|
278
|
+
private recordSwitch;
|
|
279
|
+
/**
|
|
280
|
+
* Wait until the agent is not mid-turn (bounded: a usage limit ends the turn anyway).
|
|
281
|
+
*
|
|
282
|
+
* @param sessionName - Session
|
|
283
|
+
*/
|
|
284
|
+
private waitForSafePoint;
|
|
285
|
+
/**
|
|
286
|
+
* First runtime of the agent's chain that is not `current`, not out of
|
|
287
|
+
* usage, and installed + signed in.
|
|
288
|
+
*
|
|
289
|
+
* @param agent - Agent
|
|
290
|
+
* @param current - Runtime it is on (out of usage)
|
|
291
|
+
* @returns Runtime, or null
|
|
292
|
+
*/
|
|
293
|
+
private pickFallback;
|
|
294
|
+
/**
|
|
295
|
+
* The agent's chain: its own, or the global one.
|
|
296
|
+
*
|
|
297
|
+
* @param agent - Agent
|
|
298
|
+
* @returns Chain
|
|
299
|
+
*/
|
|
300
|
+
private chainFor;
|
|
301
|
+
/**
|
|
302
|
+
* Whether some runtime could take over (synchronous; uses the cached
|
|
303
|
+
* availability, optimistic when nothing is cached yet).
|
|
304
|
+
*
|
|
305
|
+
* @param current - Runtime out of usage
|
|
306
|
+
* @returns True when a candidate exists
|
|
307
|
+
*/
|
|
308
|
+
private hasCandidateSync;
|
|
309
|
+
/**
|
|
310
|
+
* Availability, cached for 5 minutes.
|
|
311
|
+
*
|
|
312
|
+
* @param force - Ignore the cache
|
|
313
|
+
* @returns List
|
|
314
|
+
*/
|
|
315
|
+
getAvailability(force?: boolean): Promise<RuntimeAvailability[]>;
|
|
316
|
+
private markNoFallback;
|
|
317
|
+
/**
|
|
318
|
+
* Periodic work: owner notices, switch-back checks, idle-boundary reverts.
|
|
319
|
+
*/
|
|
320
|
+
tick(): Promise<void>;
|
|
321
|
+
/**
|
|
322
|
+
* Is an exhausted runtime back?
|
|
323
|
+
*
|
|
324
|
+
* @param runtime - Runtime
|
|
325
|
+
*/
|
|
326
|
+
private checkRecovery;
|
|
327
|
+
/**
|
|
328
|
+
* Whether a switch-back probe is due for an exhausted runtime.
|
|
329
|
+
*
|
|
330
|
+
* - `billing`: every BILLING_PROBE_INTERVAL_MS, whatever any clock says.
|
|
331
|
+
* - With a reset time: once it (plus a grace) passed.
|
|
332
|
+
* - Otherwise: on the owner's probe interval.
|
|
333
|
+
*
|
|
334
|
+
* Each failed switch-back doubles the interval (up to MAX_PROBE_BACKOFF_MS).
|
|
335
|
+
*
|
|
336
|
+
* @param entry - Exhausted runtime
|
|
337
|
+
* @param now - Current time
|
|
338
|
+
* @returns True when a probe should run now
|
|
339
|
+
*/
|
|
340
|
+
private isRecoveryCheckDue;
|
|
341
|
+
/**
|
|
342
|
+
* A runtime has usage again: mark every agent that left it for revert and tell the owner.
|
|
343
|
+
*
|
|
344
|
+
* @param runtime - Runtime
|
|
345
|
+
*/
|
|
346
|
+
recover(runtime: string): Promise<void>;
|
|
347
|
+
/** Revert every pending override whose agent is idle (or not running). */
|
|
348
|
+
private revertIdle;
|
|
349
|
+
/**
|
|
350
|
+
* Clear the override of an agent that is not running.
|
|
351
|
+
*
|
|
352
|
+
* @param sessionName - Session
|
|
353
|
+
* @param override - Its override
|
|
354
|
+
*/
|
|
355
|
+
private finishRevertOffline;
|
|
356
|
+
/**
|
|
357
|
+
* Move an idle agent back to its configured runtime.
|
|
358
|
+
*
|
|
359
|
+
* @param sessionName - Session
|
|
360
|
+
* @returns Outcome
|
|
361
|
+
*/
|
|
362
|
+
revertSession(sessionName: string): Promise<SwitchOutcome>;
|
|
363
|
+
private doRevert;
|
|
364
|
+
private scheduleNotice;
|
|
365
|
+
/** Send every owner notice that is due (once per event). */
|
|
366
|
+
flushNotices(): Promise<void>;
|
|
367
|
+
private limitNoticeText;
|
|
368
|
+
/**
|
|
369
|
+
* "DeepSeek is out of credit — top up at platform.deepseek.com. Orc is
|
|
370
|
+
* running on Claude Code meanwhile."
|
|
371
|
+
*
|
|
372
|
+
* @param entry - The billing event
|
|
373
|
+
* @returns Owner message
|
|
374
|
+
*/
|
|
375
|
+
private billingNoticeText;
|
|
376
|
+
/**
|
|
377
|
+
* Where to top up the account behind a billing limit.
|
|
378
|
+
*
|
|
379
|
+
* @param entry - The billing event
|
|
380
|
+
* @returns Host/path, or null when unknown
|
|
381
|
+
*/
|
|
382
|
+
private topUpUrl;
|
|
383
|
+
private notify;
|
|
384
|
+
private formatTime;
|
|
385
|
+
private switchNote;
|
|
386
|
+
private revertNote;
|
|
387
|
+
/**
|
|
388
|
+
* Badge data for an agent running on a fallback.
|
|
389
|
+
*
|
|
390
|
+
* @param sessionName - Session
|
|
391
|
+
* @returns Override view, or null
|
|
392
|
+
*/
|
|
393
|
+
overrideView(sessionName: string): RuntimeOverrideView | null;
|
|
394
|
+
/**
|
|
395
|
+
* Everything the API shows.
|
|
396
|
+
*
|
|
397
|
+
* @returns Snapshot
|
|
398
|
+
*/
|
|
399
|
+
snapshot(): Promise<RuntimeFallbackSnapshot>;
|
|
400
|
+
private label;
|
|
401
|
+
private decision;
|
|
402
|
+
private isExempt;
|
|
403
|
+
private save;
|
|
404
|
+
}
|
|
405
|
+
/**
|
|
406
|
+
* The running backend's runtime-fallback service.
|
|
407
|
+
*
|
|
408
|
+
* @returns The instance, or null before boot wired it (and in tests)
|
|
409
|
+
*/
|
|
410
|
+
export declare function getRuntimeFallbackService(): RuntimeFallbackService | null;
|
|
411
|
+
/**
|
|
412
|
+
* Set (or clear) the backend instance.
|
|
413
|
+
*
|
|
414
|
+
* @param service - Instance, or null
|
|
415
|
+
*/
|
|
416
|
+
export declare function setRuntimeFallbackService(service: RuntimeFallbackService | null): void;
|
|
417
|
+
//# sourceMappingURL=runtime-fallback.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime-fallback.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/runtime-fallback/runtime-fallback.service.ts"],"names":[],"mappings":"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"}
|