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.
- package/dist/backend/backend/src/constants.d.ts +21 -0
- package/dist/backend/backend/src/constants.d.ts.map +1 -1
- package/dist/backend/backend/src/constants.js +25 -0
- package/dist/backend/backend/src/constants.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 +11 -0
- package/dist/backend/backend/src/services/agent/agent-heartbeat-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/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/runtime-fallback/runtime-fallback.service.d.ts +44 -4
- package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.service.js +124 -17
- package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.service.js.map +1 -1
- package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.store.d.ts.map +1 -1
- package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.store.js +2 -0
- package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.store.js.map +1 -1
- package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.types.d.ts +9 -1
- package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.types.d.ts.map +1 -1
- package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.types.js.map +1 -1
- package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.wiring.d.ts +13 -0
- package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.wiring.d.ts.map +1 -1
- package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.wiring.js +93 -26
- package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.wiring.js.map +1 -1
- package/dist/backend/backend/src/services/runtime-fallback/runtime-usage-probe.d.ts +43 -3
- package/dist/backend/backend/src/services/runtime-fallback/runtime-usage-probe.d.ts.map +1 -1
- package/dist/backend/backend/src/services/runtime-fallback/runtime-usage-probe.js +112 -6
- package/dist/backend/backend/src/services/runtime-fallback/runtime-usage-probe.js.map +1 -1
- package/dist/backend/backend/src/services/runtime-fallback/usage-limit-rules.d.ts +17 -3
- package/dist/backend/backend/src/services/runtime-fallback/usage-limit-rules.d.ts.map +1 -1
- package/dist/backend/backend/src/services/runtime-fallback/usage-limit-rules.js +22 -5
- package/dist/backend/backend/src/services/runtime-fallback/usage-limit-rules.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/build-info.json +2 -2
- package/dist/cli/backend/src/constants.d.ts +21 -0
- package/dist/cli/backend/src/constants.d.ts.map +1 -1
- package/dist/cli/backend/src/constants.js +25 -0
- package/dist/cli/backend/src/constants.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/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/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/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
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
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
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
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
|
|
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
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
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
|
|
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 '
|
|
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":"AAAA
|
|
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
|
|
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
|
-
/**
|
|
40
|
-
|
|
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
|
|
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
|
|
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: '
|
|
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: '
|
|
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: '
|
|
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: [/
|
|
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":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,uBAAuB,EAAyB,MAAM,2BAA2B,CAAC;AAC3F,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;
|
|
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":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;
|
|
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
|
-
|
|
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;
|