crewly 1.20.177 → 1.20.179

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 (60) hide show
  1. package/dist/backend/backend/src/constants.d.ts +21 -0
  2. package/dist/backend/backend/src/constants.d.ts.map +1 -1
  3. package/dist/backend/backend/src/constants.js +25 -0
  4. package/dist/backend/backend/src/constants.js.map +1 -1
  5. package/dist/backend/backend/src/services/agent/agent-heartbeat-monitor.service.d.ts.map +1 -1
  6. package/dist/backend/backend/src/services/agent/agent-heartbeat-monitor.service.js +11 -0
  7. package/dist/backend/backend/src/services/agent/agent-heartbeat-monitor.service.js.map +1 -1
  8. package/dist/backend/backend/src/services/agent/planned-relaunch.registry.d.ts +61 -0
  9. package/dist/backend/backend/src/services/agent/planned-relaunch.registry.d.ts.map +1 -0
  10. package/dist/backend/backend/src/services/agent/planned-relaunch.registry.js +73 -0
  11. package/dist/backend/backend/src/services/agent/planned-relaunch.registry.js.map +1 -0
  12. package/dist/backend/backend/src/services/orchestrator/orchestrator-heartbeat-monitor.service.d.ts.map +1 -1
  13. package/dist/backend/backend/src/services/orchestrator/orchestrator-heartbeat-monitor.service.js +10 -0
  14. package/dist/backend/backend/src/services/orchestrator/orchestrator-heartbeat-monitor.service.js.map +1 -1
  15. package/dist/backend/backend/src/services/orchestrator/orchestrator-restart.service.d.ts +28 -1
  16. package/dist/backend/backend/src/services/orchestrator/orchestrator-restart.service.d.ts.map +1 -1
  17. package/dist/backend/backend/src/services/orchestrator/orchestrator-restart.service.js +48 -3
  18. package/dist/backend/backend/src/services/orchestrator/orchestrator-restart.service.js.map +1 -1
  19. package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.service.d.ts +44 -4
  20. package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.service.d.ts.map +1 -1
  21. package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.service.js +124 -17
  22. package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.service.js.map +1 -1
  23. package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.store.d.ts.map +1 -1
  24. package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.store.js +2 -0
  25. package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.store.js.map +1 -1
  26. package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.types.d.ts +9 -1
  27. package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.types.d.ts.map +1 -1
  28. package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.types.js.map +1 -1
  29. package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.wiring.d.ts +13 -0
  30. package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.wiring.d.ts.map +1 -1
  31. package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.wiring.js +93 -26
  32. package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.wiring.js.map +1 -1
  33. package/dist/backend/backend/src/services/runtime-fallback/runtime-usage-probe.d.ts +43 -3
  34. package/dist/backend/backend/src/services/runtime-fallback/runtime-usage-probe.d.ts.map +1 -1
  35. package/dist/backend/backend/src/services/runtime-fallback/runtime-usage-probe.js +112 -6
  36. package/dist/backend/backend/src/services/runtime-fallback/runtime-usage-probe.js.map +1 -1
  37. package/dist/backend/backend/src/services/runtime-fallback/usage-limit-rules.d.ts +17 -3
  38. package/dist/backend/backend/src/services/runtime-fallback/usage-limit-rules.d.ts.map +1 -1
  39. package/dist/backend/backend/src/services/runtime-fallback/usage-limit-rules.js +22 -5
  40. package/dist/backend/backend/src/services/runtime-fallback/usage-limit-rules.js.map +1 -1
  41. package/dist/backend/backend/src/services/task-pool/claim.service.d.ts.map +1 -1
  42. package/dist/backend/backend/src/services/task-pool/claim.service.js +3 -1
  43. package/dist/backend/backend/src/services/task-pool/claim.service.js.map +1 -1
  44. package/dist/backend/build-info.json +2 -2
  45. package/dist/cli/backend/src/constants.d.ts +21 -0
  46. package/dist/cli/backend/src/constants.d.ts.map +1 -1
  47. package/dist/cli/backend/src/constants.js +25 -0
  48. package/dist/cli/backend/src/constants.js.map +1 -1
  49. package/dist/cli/backend/src/services/agent/planned-relaunch.registry.d.ts +61 -0
  50. package/dist/cli/backend/src/services/agent/planned-relaunch.registry.d.ts.map +1 -0
  51. package/dist/cli/backend/src/services/agent/planned-relaunch.registry.js +73 -0
  52. package/dist/cli/backend/src/services/agent/planned-relaunch.registry.js.map +1 -0
  53. package/dist/cli/backend/src/services/orchestrator/orchestrator-restart.service.d.ts +28 -1
  54. package/dist/cli/backend/src/services/orchestrator/orchestrator-restart.service.d.ts.map +1 -1
  55. package/dist/cli/backend/src/services/orchestrator/orchestrator-restart.service.js +48 -3
  56. package/dist/cli/backend/src/services/orchestrator/orchestrator-restart.service.js.map +1 -1
  57. package/dist/cli/backend/src/services/task-pool/claim.service.d.ts.map +1 -1
  58. package/dist/cli/backend/src/services/task-pool/claim.service.js +3 -1
  59. package/dist/cli/backend/src/services/task-pool/claim.service.js.map +1 -1
  60. package/package.json +1 -1
@@ -17,6 +17,39 @@ import { FileRuntimeFallbackStore } from './runtime-fallback.store.js';
17
17
  import { RuntimeFallbackService, setRuntimeFallbackService, } from './runtime-fallback.service.js';
18
18
  import { runtimeLabel } from './runtime-fallback.types.js';
19
19
  import { createRuntimeUsageProbe } from './runtime-usage-probe.js';
20
+ import { clearPlannedRelaunch, markPlannedRelaunch } from '../agent/planned-relaunch.registry.js';
21
+ /** Reason recorded for the fallback's relaunches. */
22
+ const PLANNED_RELAUNCH_REASON = 'runtime_fallback';
23
+ /** Provider of an in-process Crewly Agent run without a model id (CREWLY_AGENT_DEFAULTS.DEFAULT_MODEL). */
24
+ const DEFAULT_CREWLY_AGENT_PROVIDER = 'google';
25
+ /**
26
+ * Providers (with model) the in-process Crewly Agent runtime uses: the
27
+ * orchestrator's model when it runs on it, and each member configured on it.
28
+ *
29
+ * @param storage - Teams / orchestrator status
30
+ * @returns Unique provider → model (first model seen) pairs
31
+ */
32
+ export async function crewlyAgentModelsInUse(storage) {
33
+ const modelIds = [];
34
+ const orc = await storage.getOrchestratorStatus().catch(() => null);
35
+ if (orc?.runtimeType === RUNTIME_TYPES.CREWLY_AGENT)
36
+ modelIds.push(orc.modelId);
37
+ for (const team of await storage.getTeams().catch(() => [])) {
38
+ for (const member of team.members) {
39
+ if (member.runtimeType === RUNTIME_TYPES.CREWLY_AGENT)
40
+ modelIds.push(member.modelId);
41
+ }
42
+ }
43
+ const byProvider = new Map();
44
+ for (const id of modelIds) {
45
+ const slash = id ? id.indexOf('/') : -1;
46
+ const provider = id && slash > 0 ? id.slice(0, slash) : DEFAULT_CREWLY_AGENT_PROVIDER;
47
+ const model = id && slash > 0 ? id.slice(slash + 1) : undefined;
48
+ if (!byProvider.has(provider) || (!byProvider.get(provider) && model))
49
+ byProvider.set(provider, model);
50
+ }
51
+ return [...byProvider].map(([provider, model]) => ({ provider, ...(model ? { model } : {}) }));
52
+ }
20
53
  /** Crewly Agent model provider → settings API key provider. */
21
54
  const KEY_PROVIDER = {
22
55
  deepseek: 'deepseek',
@@ -64,7 +97,21 @@ export function writeRuntimeHandover(crewlyHome, req, cwd, now = new Date()) {
64
97
  * @returns The running service
65
98
  */
66
99
  export function startBackendRuntimeFallback(ctx) {
67
- const probe = createRuntimeUsageProbe();
100
+ const probe = createRuntimeUsageProbe({
101
+ crewlyAgentTargets: async () => {
102
+ const { getSettingsService } = await import('../settings/settings.service.js');
103
+ const targets = [];
104
+ for (const { provider, model } of await crewlyAgentModelsInUse(ctx.storage)) {
105
+ const keyProvider = KEY_PROVIDER[provider];
106
+ if (!keyProvider)
107
+ continue;
108
+ const apiKey = await getSettingsService().getApiKey(keyProvider, { runtime: RUNTIME_TYPES.CREWLY_AGENT }).catch(() => undefined);
109
+ if (apiKey && apiKey.trim())
110
+ targets.push({ provider, apiKey: apiKey.trim(), ...(model ? { model } : {}) });
111
+ }
112
+ return targets;
113
+ },
114
+ });
68
115
  const findMember = async (sessionName) => {
69
116
  for (const team of await ctx.storage.getTeams()) {
70
117
  const member = team.members.find((m) => m.sessionName === sessionName);
@@ -100,6 +147,41 @@ export function startBackendRuntimeFallback(ctx) {
100
147
  isOrchestrator: false,
101
148
  };
102
149
  };
150
+ const relaunchSession = async (agent, reg) => {
151
+ await reg.stopSessionForRelaunch(agent.sessionName);
152
+ const { PtyActivityTrackerService } = await import('../agent/pty-activity-tracker.service.js');
153
+ PtyActivityTrackerService.getInstance().clearSession(agent.sessionName);
154
+ // Grace-revokes of the old session must not flag the new one as hung.
155
+ const { TaskPoolService } = await import('../task-pool/task-pool.service.js');
156
+ try {
157
+ TaskPoolService.getInstance().clearHungState(agent.sessionName);
158
+ }
159
+ catch {
160
+ // task pool not ready
161
+ }
162
+ if (agent.isOrchestrator) {
163
+ const { OrchestratorRestartService } = await import('../orchestrator/orchestrator-restart.service.js');
164
+ return OrchestratorRestartService.getInstance().attemptRestart({ planned: true, reason: PLANNED_RELAUNCH_REASON });
165
+ }
166
+ const found = await findMember(agent.sessionName);
167
+ if (!found)
168
+ return false;
169
+ let projectPath;
170
+ if (found.team.projectIds[0]) {
171
+ projectPath = (await ctx.storage.getProjects()).find((p) => p.id === found.team.projectIds[0])?.path;
172
+ }
173
+ projectPath ??= (await persistence().catch(() => null))?.getSessionMetadata(agent.sessionName)?.cwd;
174
+ const result = await reg.createAgentSession({
175
+ sessionName: agent.sessionName,
176
+ role: found.member.role,
177
+ projectPath,
178
+ memberId: found.member.id,
179
+ teamId: found.team.id,
180
+ });
181
+ if (!result.success)
182
+ ctx.logger.warn('Relaunch failed', { sessionName: agent.sessionName, error: result.error });
183
+ return result.success;
184
+ };
103
185
  const service = new RuntimeFallbackService({
104
186
  store: new FileRuntimeFallbackStore(path.join(ctx.crewlyHome, RUNTIME_FALLBACK_CONSTANTS.STATE_FILE)),
105
187
  getAgent,
@@ -166,31 +248,16 @@ export function startBackendRuntimeFallback(ctx) {
166
248
  const reg = ctx.registration();
167
249
  if (!reg)
168
250
  return false;
169
- await reg.stopSessionForRelaunch(agent.sessionName);
170
- const { PtyActivityTrackerService } = await import('../agent/pty-activity-tracker.service.js');
171
- PtyActivityTrackerService.getInstance().clearSession(agent.sessionName);
172
- if (agent.isOrchestrator) {
173
- const { OrchestratorRestartService } = await import('../orchestrator/orchestrator-restart.service.js');
174
- return OrchestratorRestartService.getInstance().attemptRestart();
175
- }
176
- const found = await findMember(agent.sessionName);
177
- if (!found)
178
- return false;
179
- let projectPath;
180
- if (found.team.projectIds[0]) {
181
- projectPath = (await ctx.storage.getProjects()).find((p) => p.id === found.team.projectIds[0])?.path;
182
- }
183
- projectPath ??= (await persistence().catch(() => null))?.getSessionMetadata(agent.sessionName)?.cwd;
184
- const result = await reg.createAgentSession({
185
- sessionName: agent.sessionName,
186
- role: found.member.role,
187
- projectPath,
188
- memberId: found.member.id,
189
- teamId: found.team.id,
190
- });
191
- if (!result.success)
192
- ctx.logger.warn('Relaunch failed', { sessionName: agent.sessionName, error: result.error });
193
- return result.success;
251
+ // A runtime switch is not a crash or a hang: the restart, heartbeat and
252
+ // hung monitors leave the session alone through the relaunch and its
253
+ // start-up, and the owner gets only the fallback's own message.
254
+ markPlannedRelaunch(agent.sessionName, PLANNED_RELAUNCH_REASON);
255
+ const ok = await relaunchSession(agent, reg).catch(() => false);
256
+ if (ok)
257
+ markPlannedRelaunch(agent.sessionName, PLANNED_RELAUNCH_REASON);
258
+ else
259
+ clearPlannedRelaunch(agent.sessionName);
260
+ return ok;
194
261
  },
195
262
  redeliver: async (sessionName) => {
196
263
  const { getOwnerMessageWatchdog } = await import('../messaging/owner-message-watchdog.service.js');
@@ -1 +1 @@
1
- {"version":3,"file":"runtime-fallback.wiring.js","sourceRoot":"","sources":["../../../../../../backend/src/services/runtime-fallback/runtime-fallback.wiring.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runtime-fallback.wiring.js","sourceRoot":"","sources":["../../../../../../backend/src/services/runtime-fallback/runtime-fallback.wiring.ts"],"names":[],"mappings":"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"}
@@ -7,9 +7,14 @@
7
7
  * usage-limit rule → `limited`; exit 0 → `available`; anything else
8
8
  * (network, login, timeout) → `unknown`.
9
9
  *
10
- * Other runtimes return `unknown` (a probe would spend their usage or needs
11
- * a login Crewly cannot check cheaply); the fallback then relies on the
12
- * parsed reset time, or retries after the probe interval.
10
+ * For the in-process Crewly Agent: one tiny API call (`max_tokens: 1`) to
11
+ * each provider its agents use, with the stored key. HTTP 402 / a usage or
12
+ * billing error → `limited`; 2xx → `available`; anything else → `unknown`.
13
+ *
14
+ * Other runtimes return `unsupported` (a probe would spend their usage or
15
+ * needs a login Crewly cannot check cheaply); the fallback then relies on the
16
+ * parsed reset time. `unknown` (the probe ran but could not tell) never
17
+ * switches an agent back.
13
18
  *
14
19
  * The probe never prints or logs a secret.
15
20
  *
@@ -18,8 +23,30 @@
18
23
  import { type HarnessCredentialsStore } from '../harness/harness-credentials.store.js';
19
24
  import type { RunCommand } from '../harness/harness.types.js';
20
25
  import type { ProbeResult } from './runtime-fallback.service.js';
26
+ /** One provider the in-process Crewly Agent uses, with its key. */
27
+ export interface CrewlyAgentProbeTarget {
28
+ /** Provider id (`deepseek`, `openai`, `anthropic`, `google`, …) */
29
+ provider: string;
30
+ /** API key (never logged) */
31
+ apiKey: string;
32
+ /** Model id without the provider prefix, when an agent names one */
33
+ model?: string;
34
+ }
35
+ /** Minimal fetch. */
36
+ export type ProbeFetch = (url: string, init: {
37
+ method: string;
38
+ headers: Record<string, string>;
39
+ body: string;
40
+ signal?: AbortSignal;
41
+ }) => Promise<{
42
+ status: number;
43
+ text(): Promise<string>;
44
+ }>;
21
45
  /** Injectable dependencies. */
22
46
  export interface UsageProbeDeps {
47
+ /** Providers (with keys) the Crewly Agent runtime uses; empty → `unknown` */
48
+ crewlyAgentTargets?: () => Promise<CrewlyAgentProbeTarget[]>;
49
+ fetch?: ProbeFetch;
23
50
  run?: RunCommand;
24
51
  env?: NodeJS.ProcessEnv;
25
52
  homeDir?: string;
@@ -44,6 +71,19 @@ export declare function classifyClaudeUsageProbe(result: {
44
71
  stdout: string;
45
72
  stderr: string;
46
73
  }): ProbeResult;
74
+ /**
75
+ * Classify a provider's answer to a one-token request.
76
+ *
77
+ * @param status - HTTP status
78
+ * @param body - Response body (never logged)
79
+ * @returns `available` on 2xx, `limited` on 402 or a usage/billing error, else `unknown`
80
+ *
81
+ * @example
82
+ * ```ts
83
+ * classifyProviderProbe(402, '{"error":{"message":"Insufficient Balance"}}'); // 'limited'
84
+ * ```
85
+ */
86
+ export declare function classifyProviderProbe(status: number, body: string): ProbeResult;
47
87
  /**
48
88
  * Build the probe.
49
89
  *
@@ -1 +1 @@
1
- {"version":3,"file":"runtime-usage-probe.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/runtime-fallback/runtime-usage-probe.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAMH,OAAO,EAA8B,KAAK,uBAAuB,EAAE,MAAM,yCAAyC,CAAC;AAEnH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAE9D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAEjE,+BAA+B;AAC/B,MAAM,WAAW,cAAc;IAC9B,GAAG,CAAC,EAAE,UAAU,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;IACpD,WAAW,CAAC,EAAE,IAAI,CAAC,uBAAuB,EAAE,qBAAqB,CAAC,CAAC;IACnE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACnB;AAKD;;;;;;;;;;GAUG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE;IAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,WAAW,CAMrH;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,GAAE,cAAmB,GAAG,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,WAAW,CAAC,CAuB5G"}
1
+ {"version":3,"file":"runtime-usage-probe.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/runtime-fallback/runtime-usage-probe.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAMH,OAAO,EAA8B,KAAK,uBAAuB,EAAE,MAAM,yCAAyC,CAAC;AAEnH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAE9D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAEjE,mEAAmE;AACnE,MAAM,WAAW,sBAAsB;IACtC,mEAAmE;IACnE,QAAQ,EAAE,MAAM,CAAC;IACjB,6BAA6B;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,oEAAoE;IACpE,KAAK,CAAC,EAAE,MAAM,CAAC;CACf;AAED,qBAAqB;AACrB,MAAM,MAAM,UAAU,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,WAAW,CAAA;CAAE,KAAK,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,CAAA;CAAE,CAAC,CAAC;AAE9L,+BAA+B;AAC/B,MAAM,WAAW,cAAc;IAC9B,6EAA6E;IAC7E,kBAAkB,CAAC,EAAE,MAAM,OAAO,CAAC,sBAAsB,EAAE,CAAC,CAAC;IAC7D,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,GAAG,CAAC,EAAE,UAAU,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;IACpD,WAAW,CAAC,EAAE,IAAI,CAAC,uBAAuB,EAAE,qBAAqB,CAAC,CAAC;IACnE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACnB;AAKD;;;;;;;;;;GAUG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE;IAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,WAAW,CAMrH;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,WAAW,CAM/E;AA8ED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,GAAE,cAAmB,GAAG,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,WAAW,CAAC,CA4B5G"}
@@ -7,9 +7,14 @@
7
7
  * usage-limit rule → `limited`; exit 0 → `available`; anything else
8
8
  * (network, login, timeout) → `unknown`.
9
9
  *
10
- * Other runtimes return `unknown` (a probe would spend their usage or needs
11
- * a login Crewly cannot check cheaply); the fallback then relies on the
12
- * parsed reset time, or retries after the probe interval.
10
+ * For the in-process Crewly Agent: one tiny API call (`max_tokens: 1`) to
11
+ * each provider its agents use, with the stored key. HTTP 402 / a usage or
12
+ * billing error → `limited`; 2xx → `available`; anything else → `unknown`.
13
+ *
14
+ * Other runtimes return `unsupported` (a probe would spend their usage or
15
+ * needs a login Crewly cannot check cheaply); the fallback then relies on the
16
+ * parsed reset time. `unknown` (the probe ran but could not tell) never
17
+ * switches an agent back.
13
18
  *
14
19
  * The probe never prints or logs a secret.
15
20
  *
@@ -21,7 +26,7 @@ import * as path from 'path';
21
26
  import { HARNESS_CONSTANTS, RUNTIME_TYPES } from '../../constants.js';
22
27
  import { getHarnessCredentialsStore } from '../harness/harness-credentials.store.js';
23
28
  import { buildHarnessPath, resolveExecutable, runCommand } from '../harness/harness-exec.utils.js';
24
- import { detectUsageLimit } from './usage-limit-rules.js';
29
+ import { detectUsageLimit, isExhaustingKind } from './usage-limit-rules.js';
25
30
  /** Env variables that would nest the probe in a Claude session or leak Crewly's token. */
26
31
  const STRIPPED_ENV = ['CREWLY_API_TOKEN', 'CLAUDECODE', 'CLAUDE_CODE_ENTRYPOINT', 'CLAUDE_CODE_SSE_PORT'];
27
32
  /**
@@ -38,12 +43,108 @@ const STRIPPED_ENV = ['CREWLY_API_TOKEN', 'CLAUDECODE', 'CLAUDE_CODE_ENTRYPOINT'
38
43
  export function classifyClaudeUsageProbe(result) {
39
44
  const output = `${result.stdout}\n${result.stderr}`;
40
45
  const match = detectUsageLimit(output, RUNTIME_TYPES.CLAUDE_CODE);
41
- if (match?.kind === 'usage_limit')
46
+ if (match && isExhaustingKind(match.kind))
42
47
  return 'limited';
43
48
  if (result.code === 0)
44
49
  return 'available';
45
50
  return 'unknown';
46
51
  }
52
+ /**
53
+ * Classify a provider's answer to a one-token request.
54
+ *
55
+ * @param status - HTTP status
56
+ * @param body - Response body (never logged)
57
+ * @returns `available` on 2xx, `limited` on 402 or a usage/billing error, else `unknown`
58
+ *
59
+ * @example
60
+ * ```ts
61
+ * classifyProviderProbe(402, '{"error":{"message":"Insufficient Balance"}}'); // 'limited'
62
+ * ```
63
+ */
64
+ export function classifyProviderProbe(status, body) {
65
+ if (status >= 200 && status < 300)
66
+ return 'available';
67
+ if (status === 402)
68
+ return 'limited';
69
+ const match = detectUsageLimit(`statusCode: ${status} ${body}`, RUNTIME_TYPES.CREWLY_AGENT);
70
+ if (match && isExhaustingKind(match.kind))
71
+ return 'limited';
72
+ return 'unknown';
73
+ }
74
+ /**
75
+ * The smallest request a provider bills (one output token).
76
+ *
77
+ * @param target - Provider, key, model
78
+ * @returns The request, or null for a provider without a cheap probe
79
+ */
80
+ function providerRequest(target) {
81
+ const prompt = [{ role: 'user', content: 'ok' }];
82
+ switch (target.provider) {
83
+ case 'deepseek':
84
+ return {
85
+ url: 'https://api.deepseek.com/chat/completions',
86
+ headers: { authorization: `Bearer ${target.apiKey}` },
87
+ body: { model: target.model || 'deepseek-chat', messages: prompt, max_tokens: 1 },
88
+ };
89
+ case 'openai':
90
+ if (!target.model)
91
+ return null;
92
+ return {
93
+ url: 'https://api.openai.com/v1/chat/completions',
94
+ headers: { authorization: `Bearer ${target.apiKey}` },
95
+ body: { model: target.model, messages: prompt, max_tokens: 1 },
96
+ };
97
+ case 'anthropic':
98
+ if (!target.model)
99
+ return null;
100
+ return {
101
+ url: 'https://api.anthropic.com/v1/messages',
102
+ headers: { 'x-api-key': target.apiKey, 'anthropic-version': '2023-06-01' },
103
+ body: { model: target.model, messages: prompt, max_tokens: 1 },
104
+ };
105
+ default:
106
+ return null;
107
+ }
108
+ }
109
+ /**
110
+ * Probe the providers the Crewly Agent runtime uses.
111
+ *
112
+ * @param targets - Providers with keys
113
+ * @param fetchFn - fetch
114
+ * @param timeoutMs - Per-request timeout
115
+ * @returns `limited` if any is out, `unknown` if any could not tell, `unsupported` when none can be probed, else `available`
116
+ */
117
+ async function probeCrewlyAgent(targets, fetchFn, timeoutMs) {
118
+ const results = [];
119
+ for (const target of targets) {
120
+ const req = providerRequest(target);
121
+ if (!req) {
122
+ results.push('unsupported');
123
+ continue;
124
+ }
125
+ try {
126
+ const res = await fetchFn(req.url, {
127
+ method: 'POST',
128
+ headers: { 'content-type': 'application/json', ...req.headers },
129
+ body: JSON.stringify(req.body),
130
+ signal: AbortSignal.timeout(timeoutMs),
131
+ });
132
+ results.push(classifyProviderProbe(res.status, await res.text().catch(() => '')));
133
+ }
134
+ catch {
135
+ results.push('unknown');
136
+ }
137
+ }
138
+ if (results.length === 0)
139
+ return 'unknown';
140
+ if (results.includes('limited'))
141
+ return 'limited';
142
+ if (results.includes('unknown'))
143
+ return 'unknown';
144
+ if (results.every((r) => r === 'unsupported'))
145
+ return 'unsupported';
146
+ return 'available';
147
+ }
47
148
  /**
48
149
  * Build the probe.
49
150
  *
@@ -58,8 +159,13 @@ export function createRuntimeUsageProbe(deps = {}) {
58
159
  const resolve = deps.resolveCommand ?? ((command) => resolveExecutable(command, buildHarnessPath(baseEnv.PATH, homeDir)));
59
160
  return async (runtime) => {
60
161
  try {
162
+ if (runtime === RUNTIME_TYPES.CREWLY_AGENT) {
163
+ const targets = deps.crewlyAgentTargets ? await deps.crewlyAgentTargets() : [];
164
+ const fetchFn = deps.fetch ?? globalThis.fetch;
165
+ return await probeCrewlyAgent(targets, fetchFn, timeoutMs);
166
+ }
61
167
  if (runtime !== RUNTIME_TYPES.CLAUDE_CODE)
62
- return 'unknown';
168
+ return 'unsupported';
63
169
  const binary = resolve('claude');
64
170
  if (!binary)
65
171
  return 'unknown';
@@ -1 +1 @@
1
- {"version":3,"file":"runtime-usage-probe.js","sourceRoot":"","sources":["../../../../../../backend/src/services/runtime-fallback/runtime-usage-probe.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runtime-usage-probe.js","sourceRoot":"","sources":["../../../../../../backend/src/services/runtime-fallback/runtime-usage-probe.ts"],"names":[],"mappings":"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"}
@@ -25,7 +25,7 @@
25
25
  * metric '… per day'`, `You exceeded your current quota`, `You have
26
26
  * exhausted your daily quota`; a bare 429 / RESOURCE_EXHAUSTED is transient.
27
27
  * - DeepSeek (the in-process Crewly Agent): HTTP 402 `Insufficient Balance`
28
- * is a usage limit; HTTP 429 `Rate Limit Reached` is transient.
28
+ * is a `billing` limit (no reset; the owner must top up); HTTP 429 `Rate Limit Reached` is transient.
29
29
  *
30
30
  * Context requirements keep an agent that merely reads or quotes this kind of
31
31
  * text (for example while working on this file) from tripping a rule: the
@@ -36,8 +36,22 @@
36
36
  *
37
37
  * @module services/runtime-fallback/usage-limit-rules
38
38
  */
39
- /** `usage_limit`: the account is out of usage; `transient`: a short rate limit the runtime retries. */
40
- export type UsageLimitKind = 'usage_limit' | 'transient';
39
+ /**
40
+ * `usage_limit`: the account is out of usage until a window resets;
41
+ * `billing`: the account is out of money / credit (DeepSeek 402 "Insufficient
42
+ * Balance", "credit balance is too low") — it has no reset time and only
43
+ * comes back when the owner tops up, so it is never retried on a timer;
44
+ * `transient`: a short rate limit the runtime retries.
45
+ */
46
+ export type UsageLimitKind = 'usage_limit' | 'billing' | 'transient';
47
+ /**
48
+ * Whether a kind means the runtime cannot be used (as opposed to a transient
49
+ * rate limit).
50
+ *
51
+ * @param kind - Match kind
52
+ * @returns True for `usage_limit` and `billing`
53
+ */
54
+ export declare function isExhaustingKind(kind: UsageLimitKind): boolean;
41
55
  /** One rule: every pattern must match (AND); `none` must not match. */
42
56
  export interface UsageLimitRule {
43
57
  /** Stable id, used in logs (never contains output) */
@@ -1 +1 @@
1
- {"version":3,"file":"usage-limit-rules.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/runtime-fallback/usage-limit-rules.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AAOH,uGAAuG;AACvG,MAAM,MAAM,cAAc,GAAG,aAAa,GAAG,WAAW,CAAC;AAEzD,uEAAuE;AACvE,MAAM,WAAW,cAAc;IAC9B,sDAAsD;IACtD,EAAE,EAAE,MAAM,CAAC;IACX,uCAAuC;IACvC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,cAAc,CAAC;IACrB,+DAA+D;IAC/D,GAAG,EAAE,SAAS,MAAM,EAAE,CAAC;IACvB,qEAAqE;IACrE,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACzB;AAED,2CAA2C;AAC3C,MAAM,WAAW,eAAe;IAC/B,kCAAkC;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,cAAc,CAAC;IACrB,gEAAgE;IAChE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB;AASD,8DAA8D;AAC9D,eAAO,MAAM,kBAAkB,EAAE,SAAS,cAAc,EAuDvD,CAAC;AAEF,mBAAmB;AACnB,eAAO,MAAM,iBAAiB,EAAE,SAAS,cAAc,EAmBtD,CAAC;AAoBF,6BAA6B;AAC7B,eAAO,MAAM,uBAAuB,EAAE,SAAS,cAAc,EAA8D,CAAC;AAE5H,uDAAuD;AACvD,eAAO,MAAM,kBAAkB,EAAE,SAAS,cAAc,EAAoD,CAAC;AAE7G;;;GAGG;AACH,eAAO,MAAM,wBAAwB,EAAE,SAAS,cAAc,EAmB7D,CAAC;AAWF;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,cAAc,EAAE,CAE7E;AAcD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,GAAE,MAAmB,EAAE,eAAe,CAAC,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI,CAmB5I"}
1
+ {"version":3,"file":"usage-limit-rules.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/runtime-fallback/usage-limit-rules.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AAOH;;;;;;GAMG;AACH,MAAM,MAAM,cAAc,GAAG,aAAa,GAAG,SAAS,GAAG,WAAW,CAAC;AAErE;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAE9D;AAED,uEAAuE;AACvE,MAAM,WAAW,cAAc;IAC9B,sDAAsD;IACtD,EAAE,EAAE,MAAM,CAAC;IACX,uCAAuC;IACvC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,cAAc,CAAC;IACrB,+DAA+D;IAC/D,GAAG,EAAE,SAAS,MAAM,EAAE,CAAC;IACvB,qEAAqE;IACrE,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACzB;AAED,2CAA2C;AAC3C,MAAM,WAAW,eAAe;IAC/B,kCAAkC;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,cAAc,CAAC;IACrB,gEAAgE;IAChE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB;AASD,8DAA8D;AAC9D,eAAO,MAAM,kBAAkB,EAAE,SAAS,cAAc,EAuDvD,CAAC;AAEF,mBAAmB;AACnB,eAAO,MAAM,iBAAiB,EAAE,SAAS,cAAc,EAmBtD,CAAC;AAoBF,6BAA6B;AAC7B,eAAO,MAAM,uBAAuB,EAAE,SAAS,cAAc,EAA8D,CAAC;AAE5H,uDAAuD;AACvD,eAAO,MAAM,kBAAkB,EAAE,SAAS,cAAc,EAAoD,CAAC;AAE7G;;;GAGG;AACH,eAAO,MAAM,wBAAwB,EAAE,SAAS,cAAc,EAyB7D,CAAC;AAWF;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,cAAc,EAAE,CAE7E;AAcD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,GAAE,MAAmB,EAAE,eAAe,CAAC,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI,CAoB5I"}
@@ -25,7 +25,7 @@
25
25
  * metric '… per day'`, `You exceeded your current quota`, `You have
26
26
  * exhausted your daily quota`; a bare 429 / RESOURCE_EXHAUSTED is transient.
27
27
  * - DeepSeek (the in-process Crewly Agent): HTTP 402 `Insufficient Balance`
28
- * is a usage limit; HTTP 429 `Rate Limit Reached` is transient.
28
+ * is a `billing` limit (no reset; the owner must top up); HTTP 429 `Rate Limit Reached` is transient.
29
29
  *
30
30
  * Context requirements keep an agent that merely reads or quotes this kind of
31
31
  * text (for example while working on this file) from tripping a rule: the
@@ -40,6 +40,16 @@ import { RUNTIME_TYPES } from '../../constants.js';
40
40
  import { normalizeTerminalOutput } from '../harness/login-rules.js';
41
41
  import { detectLoginExpiry } from '../harness/login-expiry-rules.js';
42
42
  import { parseResetTime } from './reset-time.js';
43
+ /**
44
+ * Whether a kind means the runtime cannot be used (as opposed to a transient
45
+ * rate limit).
46
+ *
47
+ * @param kind - Match kind
48
+ * @returns True for `usage_limit` and `billing`
49
+ */
50
+ export function isExhaustingKind(kind) {
51
+ return kind === 'usage_limit' || kind === 'billing';
52
+ }
43
53
  /** Claude UI context: the separator, a reset time, or a Claude slash command. */
44
54
  const CLAUDE_UI_CONTEXT = /[·∙•]|\bresets?\b|reset\s*at|continuing\s*automatically|\/(?:upgrade|extra-usage|usage-credits|rate-limit-options|model)\b|\|\s*\d{10}\b/i;
45
55
  /** API error context for Claude: a 429 / billing error. */
@@ -57,7 +67,7 @@ export const CLAUDE_USAGE_RULES = [
57
67
  {
58
68
  id: 'claude.api_credit_balance',
59
69
  runtime: RUNTIME_TYPES.CLAUDE_CODE,
60
- kind: 'usage_limit',
70
+ kind: 'billing',
61
71
  all: [/API\s*Error|"type"\s*:\s*"error"/i, /credit\s*balance\s*(?:is\s*)?too\s*low/i],
62
72
  },
63
73
  {
@@ -114,7 +124,7 @@ export const CODEX_USAGE_RULES = [
114
124
  {
115
125
  id: 'codex.quota_exceeded',
116
126
  runtime: RUNTIME_TYPES.CODEX_CLI,
117
- kind: 'usage_limit',
127
+ kind: 'billing',
118
128
  all: [/insufficient_quota|exceeded\s*your\s*current\s*quota/i],
119
129
  },
120
130
  {
@@ -153,14 +163,20 @@ export const CREWLY_AGENT_USAGE_RULES = [
153
163
  {
154
164
  id: 'crewly-agent.insufficient_balance',
155
165
  runtime: RUNTIME_TYPES.CREWLY_AGENT,
156
- kind: 'usage_limit',
166
+ kind: 'billing',
157
167
  all: [/Insufficient\s*Balance|\b402\b[^\n]*(?:Payment\s*Required|balance)/i],
158
168
  },
169
+ {
170
+ id: 'crewly-agent.out_of_credit',
171
+ runtime: RUNTIME_TYPES.CREWLY_AGENT,
172
+ kind: 'billing',
173
+ all: [/insufficient_quota|credit\s*balance\s*(?:is\s*)?too\s*low/i],
174
+ },
159
175
  {
160
176
  id: 'crewly-agent.quota_exceeded',
161
177
  runtime: RUNTIME_TYPES.CREWLY_AGENT,
162
178
  kind: 'usage_limit',
163
- all: [/insufficient_quota|exceeded\s*your\s*current\s*quota|exhausted\s*your\s*(?:daily\s*)?quota|credit\s*balance\s*(?:is\s*)?too\s*low|usage\s*limit\s*reached/i],
179
+ all: [/exceeded\s*your\s*current\s*quota|exhausted\s*your\s*(?:daily\s*)?quota|usage\s*limit\s*reached/i],
164
180
  },
165
181
  {
166
182
  id: 'crewly-agent.rate_limited',
@@ -232,6 +248,7 @@ export function detectUsageLimit(output, runtime, now = Date.now(), defaultTimeZ
232
248
  runtime: rule.runtime,
233
249
  ruleId: rule.id,
234
250
  kind: rule.kind,
251
+ // A billing limit has no reset time: it lifts when the owner tops up.
235
252
  resetAt: rule.kind === 'usage_limit' ? parseResetTime(screen.text, now, defaultTimeZone) : null,
236
253
  };
237
254
  }
@@ -1 +1 @@
1
- {"version":3,"file":"usage-limit-rules.js","sourceRoot":"","sources":["../../../../../../backend/src/services/runtime-fallback/usage-limit-rules.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"usage-limit-rules.js","sourceRoot":"","sources":["../../../../../../backend/src/services/runtime-fallback/usage-limit-rules.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"claim.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/task-pool/claim.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"claim.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/task-pool/claim.service.ts"],"names":[],"mappings":"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"}
@@ -15,6 +15,7 @@
15
15
  * @module services/task-pool/claim.service
16
16
  */
17
17
  import { LoggerService } from '../core/logger.service.js';
18
+ import { isPlannedRelaunch } from '../agent/planned-relaunch.registry.js';
18
19
  import { createTaskClaim, extendClaim, renewClaimLease, isLeaseExpired, isGracePeriodExceeded, canExtendLease, validateCreateClaimInput, DEFAULT_HEARTBEAT_INTERVAL_MS, DEFAULT_GRACE_PERIOD_MS, } from '../../types/v2/claim.types.js';
19
20
  /**
20
21
  * Consecutive grace-period revocations (with NO intervening heartbeat) after
@@ -341,7 +342,8 @@ export class ClaimService {
341
342
  getHungAgents(threshold = HUNG_SESSION_GRACE_REVOKE_THRESHOLD) {
342
343
  const hung = [];
343
344
  for (const [agentId, count] of this.consecutiveGraceRevokes) {
344
- if (count >= threshold)
345
+ // A session being relaunched on purpose (runtime fallback) is not hung.
346
+ if (count >= threshold && !isPlannedRelaunch(agentId))
345
347
  hung.push(agentId);
346
348
  }
347
349
  return hung;