@cat-factory/server 0.315.2 → 0.317.0

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 (40) hide show
  1. package/dist/agents/ContainerAgentExecutor.d.ts +24 -20
  2. package/dist/agents/ContainerAgentExecutor.d.ts.map +1 -1
  3. package/dist/agents/ContainerAgentExecutor.js +61 -113
  4. package/dist/agents/ContainerAgentExecutor.js.map +1 -1
  5. package/dist/agents/ContainerEnvironmentProbeAgent.d.ts +163 -0
  6. package/dist/agents/ContainerEnvironmentProbeAgent.d.ts.map +1 -0
  7. package/dist/agents/ContainerEnvironmentProbeAgent.js +414 -0
  8. package/dist/agents/ContainerEnvironmentProbeAgent.js.map +1 -0
  9. package/dist/agents/ModelRouter.d.ts +40 -4
  10. package/dist/agents/ModelRouter.d.ts.map +1 -1
  11. package/dist/agents/ModelRouter.js +1 -1
  12. package/dist/agents/ModelRouter.js.map +1 -1
  13. package/dist/agents/containerJobAccounting.d.ts +10 -3
  14. package/dist/agents/containerJobAccounting.d.ts.map +1 -1
  15. package/dist/agents/containerJobAccounting.js +11 -4
  16. package/dist/agents/containerJobAccounting.js.map +1 -1
  17. package/dist/agents/containerJobAuth.d.ts +146 -0
  18. package/dist/agents/containerJobAuth.d.ts.map +1 -0
  19. package/dist/agents/containerJobAuth.js +171 -0
  20. package/dist/agents/containerJobAuth.js.map +1 -0
  21. package/dist/agents/dispatchPromptContext.d.ts +30 -0
  22. package/dist/agents/dispatchPromptContext.d.ts.map +1 -0
  23. package/dist/agents/dispatchPromptContext.js +23 -0
  24. package/dist/agents/dispatchPromptContext.js.map +1 -0
  25. package/dist/agents/singleKindModel.d.ts +46 -0
  26. package/dist/agents/singleKindModel.d.ts.map +1 -0
  27. package/dist/agents/singleKindModel.js +59 -0
  28. package/dist/agents/singleKindModel.js.map +1 -0
  29. package/dist/agents/testCredentials.d.ts +25 -0
  30. package/dist/agents/testCredentials.d.ts.map +1 -0
  31. package/dist/agents/testCredentials.js +23 -0
  32. package/dist/agents/testCredentials.js.map +1 -0
  33. package/dist/index.d.ts +4 -0
  34. package/dist/index.d.ts.map +1 -1
  35. package/dist/index.js +6 -0
  36. package/dist/index.js.map +1 -1
  37. package/dist/modules/environments/EnvironmentController.d.ts.map +1 -1
  38. package/dist/modules/environments/EnvironmentController.js +46 -1
  39. package/dist/modules/environments/EnvironmentController.js.map +1 -1
  40. package/package.json +7 -7
@@ -0,0 +1,414 @@
1
+ import { failureKindFromHarnessCause, getErrorMessage } from '@cat-factory/kernel';
2
+ import { environmentProbeSystemPrompt, environmentProbeUserPrompt, ENVIRONMENT_PROBE_SHAPE_HINT, } from '@cat-factory/agents';
3
+ import { environmentProbeAgentKind, isEnvironmentProbeReportPayload } from '@cat-factory/contracts';
4
+ import { ContainerJobAccounting, } from './containerJobAccounting.js';
5
+ import { providerOf } from './containerJobAddressing.js';
6
+ import { resolveTestCredentials } from './testCredentials.js';
7
+ import { githubRepoOrigin } from './containerAgentBody.js';
8
+ import { RunnerJobClient } from './RunnerJobClient.js';
9
+ import { logger } from '../observability/logger.js';
10
+ // ---------------------------------------------------------------------------
11
+ // The AGENT DRY RUN's dispatcher: one read-only `explore` job pointed at a freshly provisioned
12
+ // ephemeral environment, whose whole product is the structured report on `result.custom`.
13
+ //
14
+ // It implements the kernel {@link EnvironmentProbeAgent} port and is shaped exactly like
15
+ // {@link import('./ContainerEnvConfigRepairer.js').ContainerEnvConfigRepairer}: mint the tokens,
16
+ // build the harness body, dispatch through the shared {@link RunnerJobClient}, poll, reclaim. What
17
+ // differs from that flow is only what the job IS: `mode: 'explore'` with a structured output and
18
+ // NO push (this agent must never change the repository), against `infra: ephemeral`, which stands
19
+ // nothing up and hands the environment's URL to the harness so a container backend can bridge it.
20
+ //
21
+ // Four details are load-bearing and each cost a real bug elsewhere in this codebase first:
22
+ //
23
+ // - The dispatch DECLARES its environment through `RunnerDispatchOptions.environments`. That is
24
+ // what feeds the container's hosts entry (`--add-host` / `hostAliases`), and a transport is
25
+ // documented never to reach into the body for it. Omitted, the local backend cannot bridge the
26
+ // environment's name and every operation the prober attempts reports `unreachable`.
27
+ // - The IMAGE is pinned per surface, and the same value rides the `RunnerJobRef` on every poll
28
+ // and release. A per-run container backend puts a differently-imaged job in its own container,
29
+ // so a poll that forgot the variant polls a container that was never started, and a release
30
+ // that forgot it leaves a browser container running for its full lifetime.
31
+ // - The MODEL is resolved PER DISPATCH, by the same precedence a pipeline step's is (the frame's
32
+ // pin, else the workspace's model preset for this prober's kind, else the deployment's env
33
+ // routing), and with it the HARNESS and the credential that opens it. Read at wiring from the
34
+ // env routing instead, it is whatever that deployment defaults to: a workspace running
35
+ // everything on its Claude preset had its dry run dispatched at Qwen, which the LLM proxy then
36
+ // refused for having no key, and the prober's subscription was never asked for at all.
37
+ // - The TEST SECRETS are resolved ONCE here: the values go on the body's dedicated `testSecrets`
38
+ // field (the harness turns them into the agent process's environment) and the key +
39
+ // description pairs of that SAME list are what the prompt advertises. One resolution, so the
40
+ // prompt cannot name a variable the container does not carry, and the three states that
41
+ // resolution can END in are stated to the prober rather than collapsed into an empty list.
42
+ // - What the dispatch RESOLVED rides back on the handle and is persisted by the caller, and what
43
+ // the job SPENT is filed through the same `ContainerJobAccounting` a pipeline step's is. A
44
+ // subscription-routed dry run talks straight to the vendor, so the LLM proxy meters none of it:
45
+ // with no accounting here its whole burn was absent from `llm_call_metrics`, from the leased
46
+ // token's usage-aware rotation, and from the modeled quota cycle. Free and invisible, on the one
47
+ // flow whose own admission gate is a budget.
48
+ // ---------------------------------------------------------------------------
49
+ /**
50
+ * The `provider:model` label a dispatch is recorded under, spelled the same way the step path
51
+ * spells it (`ContainerAgentExecutor`'s `buildJobBody`), so one reader can parse either.
52
+ */
53
+ function modelLabel(ref) {
54
+ return `${ref.provider}:${ref.model}`;
55
+ }
56
+ /** Which executor image each surface needs. */
57
+ const IMAGE_BY_SURFACE = {
58
+ // The plain harness image: `curl` and the repo's own runtime are all an HTTP prober needs.
59
+ api: undefined,
60
+ // The heavier UI image, which bundles Playwright and a browser. A browser prober on the plain
61
+ // image discovers it has no browser only after the container is up and the model has started
62
+ // reasoning, and reports it as `tooling_missing`: a spent dispatch that says nothing about the
63
+ // environment.
64
+ ui: 'ui',
65
+ };
66
+ export class ContainerEnvironmentProbeAgent {
67
+ deps;
68
+ jobs;
69
+ accounting;
70
+ constructor(deps) {
71
+ this.deps = deps;
72
+ this.jobs = new RunnerJobClient(deps.resolveTransport);
73
+ this.accounting = new ContainerJobAccounting(deps.accounting ?? {});
74
+ }
75
+ /**
76
+ * Whether the workspace's resolved runner backend can serve this surface's executor image.
77
+ *
78
+ * The backend is asked because it is the only thing that knows: a Worker binds container
79
+ * classes, a local transport pins image tags, and a self-hosted pool resolves images on its own
80
+ * side and cannot answer at all. That last case answers TRUE (see the port): an unknown is not a
81
+ * refusal, and a deployment whose pool has no UI image still fails at dispatch exactly as every
82
+ * other container flow does there.
83
+ *
84
+ * A transport that cannot even be RESOLVED is `false`: a dry run needs a runner, and refusing at
85
+ * admission is the whole point of asking here.
86
+ */
87
+ async supports(workspaceId, surface) {
88
+ const transport = await this.deps.resolveTransport(workspaceId).catch(() => null);
89
+ if (!transport)
90
+ return false;
91
+ return transport.supportsImage?.(IMAGE_BY_SURFACE[surface]) ?? true;
92
+ }
93
+ /**
94
+ * Whether the model this frame's dry run resolves to can actually be dispatched, run at ADMISSION
95
+ * over the same two steps `start` takes: resolve the model (which refuses a provider the LLM proxy
96
+ * cannot serve), then ask the auth resolver whether the harness that model names has a credential
97
+ * to open it.
98
+ *
99
+ * Asked here rather than left to the dispatch because both answers are already knowable, and
100
+ * neither is knowable cheaply later: reached from inside `stage.dispatch`, each one fails the run
101
+ * at `probing` after a throwaway branch, a full provision and a teardown, to report something the
102
+ * workspace's own preset said before anything was created.
103
+ *
104
+ * A resolution that THROWS is the refusal, carried verbatim: `resolveDispatchRef`'s message
105
+ * already names the fix (pick a Workers AI model, configure a provider key, add a local runner),
106
+ * and re-wording it here would hand the operator two spellings of one problem.
107
+ */
108
+ async checkDispatchable(subject) {
109
+ let resolved;
110
+ try {
111
+ resolved = await this.resolveModel(subject, subject.surface);
112
+ }
113
+ catch (error) {
114
+ return { ok: false, detail: getErrorMessage(error) };
115
+ }
116
+ const gap = await this.deps.auth.describeAuthGap({
117
+ harness: resolved.harness,
118
+ subscriptionVendor: resolved.subscriptionVendor,
119
+ workspaceId: subject.workspaceId,
120
+ ...(subject.initiatedBy ? { initiatedByUserId: subject.initiatedBy } : {}),
121
+ });
122
+ return gap ? { ok: false, detail: gap } : { ok: true, model: modelLabel(resolved.ref) };
123
+ }
124
+ async start(request) {
125
+ const { workspaceId, jobId, surface, repo, environment } = request;
126
+ const log = logger.child({
127
+ jobId,
128
+ workspaceId,
129
+ surface,
130
+ repo: `${repo.owner}/${repo.name}`,
131
+ });
132
+ const installation = await this.deps.installationRepository.getByWorkspace(workspaceId);
133
+ if (!installation || installation.deletedAt) {
134
+ throw new Error(`Workspace '${workspaceId}' is not connected to a source-control provider, so the ` +
135
+ 'agent dry run has no repository to read.');
136
+ }
137
+ if (!environment.url) {
138
+ throw new Error('The environment exposed no URL, so there is nothing for an agent to drive.');
139
+ }
140
+ const agentKind = environmentProbeAgentKind(surface);
141
+ // The model this dispatch runs, then the credential that opens it. Both per dispatch, and in
142
+ // this order: the harness the model names decides which auth channel there is to resolve.
143
+ const { ref, harness, subscriptionVendor } = await this.resolveModel(request, surface);
144
+ const { auth, subscriptionTokenId } = await this.deps.auth.resolve({
145
+ harness,
146
+ ref,
147
+ subscriptionVendor,
148
+ workspaceId,
149
+ // The self-test run IS this flow's run, so its id is what the container's calls are metered
150
+ // under, and (for an individual-usage vendor) the id the initiator's credential activation
151
+ // was minted against by the start gate.
152
+ executionId: jobId,
153
+ agentKind,
154
+ ...(request.initiatedBy ? { initiatedByUserId: request.initiatedBy } : {}),
155
+ });
156
+ // ONE resolution, two consumers: the values become the container's environment variables and
157
+ // the keys + descriptions of the same list are what the prompt advertises. See the class note.
158
+ // The SAME resolution the tester step's dispatch uses: one read, two projections (the values
159
+ // for the container, the state for the prompt). Shared because a dry run's claim is that it
160
+ // predicts what a tester will be handed, which it cannot do from a different read.
161
+ const secrets = await resolveTestCredentials({
162
+ ...(this.deps.resolveTestSecrets ? { resolve: this.deps.resolveTestSecrets } : {}),
163
+ workspaceId,
164
+ blockId: request.blockId,
165
+ logger: log,
166
+ });
167
+ const repoIds = await this.resolveRepoScope(workspaceId, repo.owner, repo.name);
168
+ const ghToken = await this.deps.mintInstallationToken(installation.installationId, {
169
+ executionId: jobId,
170
+ workspaceId,
171
+ repoIds,
172
+ ...(request.initiatedBy ? { initiatedBy: request.initiatedBy } : {}),
173
+ });
174
+ const origin = (this.deps.resolveRepoOrigin ?? githubRepoOrigin)({
175
+ installationId: installation.installationId,
176
+ repoId: repoIds[0] ?? '',
177
+ owner: repo.owner,
178
+ name: repo.name,
179
+ baseBranch: repo.branch,
180
+ ...(repo.provider ? { provider: repo.provider } : {}),
181
+ ...(repo.serviceDirectory ? { serviceDirectory: repo.serviceDirectory } : {}),
182
+ });
183
+ const body = {
184
+ jobId,
185
+ workspaceId,
186
+ // A single-job flow: its run IS its one job, so the correlation id the container logs bind
187
+ // to is the self-test run id, exactly as bootstrap and config-repair do.
188
+ executionId: jobId,
189
+ mode: 'explore',
190
+ systemPrompt: environmentProbeSystemPrompt(surface),
191
+ userPrompt: environmentProbeUserPrompt({
192
+ surface,
193
+ service: request.service,
194
+ environment,
195
+ testSecrets: secrets.brief,
196
+ repo: {
197
+ owner: repo.owner,
198
+ name: repo.name,
199
+ branch: repo.branch,
200
+ ...(repo.serviceDirectory ? { serviceDirectory: repo.serviceDirectory } : {}),
201
+ },
202
+ }),
203
+ model: ref.model,
204
+ // The resolved auth channel, spread exactly as a pipeline step's body spreads it, so the
205
+ // harness cannot tell a dry run's dispatch from a step's by how it was authenticated.
206
+ ...auth,
207
+ ghToken,
208
+ repo: {
209
+ owner: repo.owner,
210
+ name: repo.name,
211
+ baseBranch: repo.branch,
212
+ cloneUrl: origin.cloneUrl,
213
+ provider: origin.provider,
214
+ ...(repo.serviceDirectory ? { serviceDirectory: repo.serviceDirectory } : {}),
215
+ },
216
+ // The THROWAWAY branch the environment was provisioned from, so the tree the prober reads
217
+ // is the tree that is running.
218
+ branch: repo.branch,
219
+ // `repair: true` because a dry run's whole deliverable is this JSON and a single malformed
220
+ // field would discard a report somebody has to act on. Deliberately NOT
221
+ // `failOnUnusableFinal`: the coercion is lenient by design, so a partial report is worth
222
+ // more than a failed stage, and a reply with nothing in it at all still reaches the caller
223
+ // as an `inoperable` verdict with no operations, which reads exactly as what happened.
224
+ output: { kind: 'structured', shapeHint: ENVIRONMENT_PROBE_SHAPE_HINT, repair: true },
225
+ // Stand NOTHING up: the environment is already deployed and the URL is echoed for context.
226
+ // The same spec a Tester gets for a provisioned service, which is what keeps the harness
227
+ // free of any knowledge that this flow exists.
228
+ infra: { kind: 'service', environment: 'ephemeral', environmentUrl: environment.url },
229
+ // Narrowed to `{ key, value }`, exactly as the step executor's `testSecretEnv` is: the
230
+ // DESCRIPTION is prompt-facing metadata, and this is the secret-bearing channel the
231
+ // agent-context snapshot's allow-list omits. Sending it here would put prose in a field
232
+ // nothing reads and the harness does not parse.
233
+ ...(secrets.env.length ? { testSecrets: secrets.env } : {}),
234
+ ...(this.deps.githubApiBase ? { githubApiBase: this.deps.githubApiBase } : {}),
235
+ };
236
+ log.info('environment dry run: dispatching container');
237
+ await this.jobs.dispatch(workspaceId, this.ref(jobId, surface), body, 'agent', {
238
+ ...(IMAGE_BY_SURFACE[surface] ? { image: IMAGE_BY_SURFACE[surface] } : {}),
239
+ // Declared, never read back out of the body: see the class note. `address` rides along
240
+ // whenever the platform proved one, because a name that resolves nowhere from inside the
241
+ // container is the whole reason the bridge exists.
242
+ environments: [
243
+ {
244
+ url: environment.url,
245
+ ...(environment.reachability?.address
246
+ ? { address: environment.reachability.address }
247
+ : {}),
248
+ },
249
+ ],
250
+ });
251
+ log.info('environment dry run: container accepted job');
252
+ return {
253
+ workspaceId,
254
+ jobId,
255
+ surface,
256
+ blockId: request.blockId,
257
+ initiatedBy: request.initiatedBy,
258
+ // What only THIS moment knows, handed back for the caller to persist: see
259
+ // `EnvironmentProbeDispatch`. The leased pooled token id in particular has no second source,
260
+ // and it is the row the settled job's tokens are attributed back to.
261
+ dispatch: {
262
+ model: modelLabel(ref),
263
+ ...(subscriptionTokenId ? { subscriptionTokenId } : {}),
264
+ ...(subscriptionVendor ? { subscriptionVendor } : {}),
265
+ },
266
+ };
267
+ }
268
+ async poll(handle) {
269
+ const view = await this.jobs.poll(handle.workspaceId, this.ref(handle.jobId, handle.surface));
270
+ // What the job has SPENT, filed on every poll and on every terminal state alike, exactly as the
271
+ // step path files it. See `settleAccounting` for why the failed branches below are not
272
+ // shortcuts past it.
273
+ await this.accounting.recordCalls(this.jobHandle(handle), view.callMetrics);
274
+ if (view.state === 'running') {
275
+ return view.progress ? { state: 'running', subtasks: view.progress } : { state: 'running' };
276
+ }
277
+ await this.settleAccounting(handle, view);
278
+ if (view.state === 'failed') {
279
+ return {
280
+ state: 'failed',
281
+ // The transport's structured eviction verdict first, then the harness's own cause. Both
282
+ // eviction kinds collapse to `evicted`: a dry run has no recovery budget to split them
283
+ // with (only the run driver's `recoverContainerEviction` does), so the distinction would
284
+ // be recorded and never acted on.
285
+ failureKind: view.evicted
286
+ ? 'evicted'
287
+ : (failureKindFromHarnessCause(view.failureCause) ?? 'agent'),
288
+ error: view.error ?? 'The agent dry run job failed.',
289
+ ...(view.error ? { detail: view.error } : {}),
290
+ };
291
+ }
292
+ const result = view.result ?? {};
293
+ if (result.error) {
294
+ return {
295
+ state: 'failed',
296
+ failureKind: failureKindFromHarnessCause(view.failureCause) ?? 'agent',
297
+ error: `The agent dry run failed: ${result.error}`,
298
+ detail: result.error,
299
+ };
300
+ }
301
+ if (!isEnvironmentProbeReportPayload(result.custom)) {
302
+ // The job completed and returned nothing a report can be read out of: no `custom` at all, or
303
+ // a top-level array/string/number the harness's repair pass let through. Reported as a
304
+ // FAILED dry run rather than as an empty report, and the shape question is asked with the
305
+ // SAME predicate the coercion applies: an agent that produced nothing has established
306
+ // nothing about the environment, while an empty report is graded `inoperable` and rendered
307
+ // as a finding about the service.
308
+ return {
309
+ state: 'failed',
310
+ failureKind: failureKindFromHarnessCause(view.failureCause) ?? 'agent',
311
+ error: 'The agent dry run finished without returning a usable report, so nothing was ' +
312
+ 'established about the environment.',
313
+ };
314
+ }
315
+ // The model the container RAN, as the dispatch recorded it and the caller handed it back: never
316
+ // re-resolved here. A fresh poll process asking the frame and the preset again would answer
317
+ // about them as they are NOW, so a pin cleared while the container worked stamps the report
318
+ // with a model nobody ran, which is the one label an operator weighs the verdict by. Absent is
319
+ // a state the report already documents ("absent when the dispatch did not say"), so a handle
320
+ // that carries none leaves the field off rather than guessing at one.
321
+ return {
322
+ state: 'done',
323
+ report: result.custom,
324
+ ...(handle.dispatch?.model ? { model: handle.dispatch.model } : {}),
325
+ };
326
+ }
327
+ /**
328
+ * Everything a SETTLED job owes the ledger, run once the poll knows the job is terminal and
329
+ * BEFORE any of the failure branches return.
330
+ *
331
+ * Before them deliberately: a dry run that spent tokens and then failed (an evicted container, a
332
+ * reply with no JSON) is exactly the run an operator most needs the spend for, and it is the one
333
+ * whose numbers a `return` above this line would drop. The three writes are the step path's own,
334
+ * each idempotent per job id, so the durable driver's replay of a terminal poll cannot
335
+ * double-count.
336
+ *
337
+ * A Pi job reports none of this: the LLM proxy is its single metering point and files its rows
338
+ * itself, so every call here is a no-op for it and the whole method exists for the subscription
339
+ * harnesses, which talk to the vendor direct and are metered nowhere else.
340
+ */
341
+ async settleAccounting(handle, view) {
342
+ const job = this.jobHandle(handle);
343
+ const result = view.result ?? {};
344
+ await this.accounting.recordCallsOnce(job, result);
345
+ await this.accounting.recordPooledUsageOnce(job, result);
346
+ await this.accounting.recordQuotaUsageOnce(job, result);
347
+ }
348
+ /**
349
+ * The dry run's handle as the shared accounting reads one.
350
+ *
351
+ * A self-test is a SINGLE-JOB flow, so the run and the job are one row and `runId` is the job id
352
+ * (which is what makes the recorded rows join to the self-test run the SPA renders). The model,
353
+ * the leased token and the initiator all come off the persisted dispatch attribution rather than
354
+ * being re-derived, for the reason `EnvironmentProbeDispatch` states.
355
+ */
356
+ jobHandle(handle) {
357
+ const model = handle.dispatch?.model;
358
+ return {
359
+ jobId: handle.jobId,
360
+ runId: handle.jobId,
361
+ workspaceId: handle.workspaceId,
362
+ agentKind: environmentProbeAgentKind(handle.surface),
363
+ ...(model ? { model, provider: providerOf(model) } : {}),
364
+ ...(handle.dispatch?.subscriptionTokenId
365
+ ? { subscriptionTokenId: handle.dispatch.subscriptionTokenId }
366
+ : {}),
367
+ ...(handle.dispatch?.subscriptionVendor
368
+ ? { subscriptionVendor: handle.dispatch.subscriptionVendor }
369
+ : {}),
370
+ ...(handle.initiatedBy ? { initiatedByUserId: handle.initiatedBy } : {}),
371
+ };
372
+ }
373
+ async stop(handle) {
374
+ await this.jobs.release(handle.workspaceId, this.ref(handle.jobId, handle.surface));
375
+ }
376
+ /**
377
+ * The model + harness + vendor this surface's prober runs on, asked under the prober's OWN agent
378
+ * kind.
379
+ *
380
+ * Its own kind rather than the tester's, which is what {@link environmentProbeAgentKind}
381
+ * documents: a workspace routes its probers by editing the preset entry named after them, and
382
+ * the START gate resolves an individual-usage vendor for that same kind. Borrowing `tester-api`
383
+ * here would put the gate and the dispatch on two different questions.
384
+ */
385
+ resolveModel(subject, surface) {
386
+ return this.deps.resolveModel({
387
+ workspaceId: subject.workspaceId,
388
+ blockId: subject.blockId,
389
+ agentKind: environmentProbeAgentKind(surface),
390
+ ...(subject.initiatedBy ? { initiatedByUserId: subject.initiatedBy } : {}),
391
+ });
392
+ }
393
+ /**
394
+ * The job's address. The IMAGE is part of it on every call, not only the dispatch: see the
395
+ * class note on why a poll or release that drops it addresses the wrong container.
396
+ */
397
+ ref(jobId, surface) {
398
+ const image = IMAGE_BY_SURFACE[surface];
399
+ return { runId: jobId, jobId, ...(image ? { image } : {}) };
400
+ }
401
+ /**
402
+ * The repo the prober's token may reach, as the neutral id the mint's scope speaks in. An empty
403
+ * result is returned rather than thrown, for the reason the repairer states: a projection
404
+ * lagging behind a just-linked repo is a reason to widen the token and report it, not to refuse
405
+ * a diagnostic the developer asked for.
406
+ */
407
+ async resolveRepoScope(workspaceId, owner, repo) {
408
+ const projected = await this.deps.repoRepository.list(workspaceId);
409
+ const match = projected.find((row) => row.owner.toLowerCase() === owner.toLowerCase() &&
410
+ row.name.toLowerCase() === repo.toLowerCase());
411
+ return match ? [String(match.githubId)] : [];
412
+ }
413
+ }
414
+ //# sourceMappingURL=ContainerEnvironmentProbeAgent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ContainerEnvironmentProbeAgent.js","sourceRoot":"","sources":["../../src/agents/ContainerEnvironmentProbeAgent.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,2BAA2B,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAClF,OAAO,EACL,4BAA4B,EAC5B,0BAA0B,EAC1B,4BAA4B,GAC7B,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAAE,yBAAyB,EAAE,+BAA+B,EAAE,MAAM,wBAAwB,CAAA;AAEnG,OAAO,EACL,sBAAsB,GAEvB,MAAM,6BAA6B,CAAA;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAA;AACxD,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAA;AAG7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAA;AAC1D,OAAO,EAAE,eAAe,EAA+B,MAAM,sBAAsB,CAAA;AACnF,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAA;AAEnD,8EAA8E;AAC9E,+FAA+F;AAC/F,0FAA0F;AAC1F,EAAE;AACF,yFAAyF;AACzF,iGAAiG;AACjG,mGAAmG;AACnG,iGAAiG;AACjG,kGAAkG;AAClG,kGAAkG;AAClG,EAAE;AACF,2FAA2F;AAC3F,EAAE;AACF,iGAAiG;AACjG,+FAA+F;AAC/F,kGAAkG;AAClG,uFAAuF;AACvF,gGAAgG;AAChG,kGAAkG;AAClG,+FAA+F;AAC/F,8EAA8E;AAC9E,kGAAkG;AAClG,8FAA8F;AAC9F,iGAAiG;AACjG,0FAA0F;AAC1F,kGAAkG;AAClG,0FAA0F;AAC1F,kGAAkG;AAClG,uFAAuF;AACvF,gGAAgG;AAChG,2FAA2F;AAC3F,8FAA8F;AAC9F,kGAAkG;AAClG,8FAA8F;AAC9F,mGAAmG;AACnG,gGAAgG;AAChG,oGAAoG;AACpG,gDAAgD;AAChD,8EAA8E;AAE9E;;;GAGG;AACH,SAAS,UAAU,CAAC,GAAwC;IAC1D,OAAO,GAAG,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,KAAK,EAAE,CAAA;AACvC,CAAC;AAED,+CAA+C;AAC/C,MAAM,gBAAgB,GAAoE;IACxF,2FAA2F;IAC3F,GAAG,EAAE,SAAS;IACd,8FAA8F;IAC9F,6FAA6F;IAC7F,+FAA+F;IAC/F,eAAe;IACf,EAAE,EAAE,IAAI;CACT,CAAA;AAsED,MAAM,OAAO,8BAA8B;IAIZ,IAAI;IAHhB,IAAI,CAAiB;IACrB,UAAU,CAAwB;IAEnD,YAA6B,IAAgD;oBAAhD,IAAI;QAC/B,IAAI,CAAC,IAAI,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAA;QACtD,IAAI,CAAC,UAAU,GAAG,IAAI,sBAAsB,CAAC,IAAI,CAAC,UAAU,IAAI,EAAE,CAAC,CAAA;IACrE,CAAC;IAED;;;;;;;;;;;OAWG;IACH,KAAK,CAAC,QAAQ,CAAC,WAAmB,EAAE,OAAgC;QAClE,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAA;QACjF,IAAI,CAAC,SAAS;YAAE,OAAO,KAAK,CAAA;QAC5B,OAAO,SAAS,CAAC,aAAa,EAAE,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,IAAI,IAAI,CAAA;IACrE,CAAC;IAED;;;;;;;;;;;;;;OAcG;IACH,KAAK,CAAC,iBAAiB,CAAC,OAKvB;QACC,IAAI,QAAyB,CAAA;QAC7B,IAAI,CAAC;YACH,QAAQ,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,CAAA;QAC9D,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,eAAe,CAAC,KAAK,CAAC,EAAE,CAAA;QACtD,CAAC;QACD,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC;YAC/C,OAAO,EAAE,QAAQ,CAAC,OAAO;YACzB,kBAAkB,EAAE,QAAQ,CAAC,kBAAkB;YAC/C,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,iBAAiB,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC3E,CAAC,CAAA;QACF,OAAO,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAA;IACzF,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,OAAgC;QAC1C,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,OAAO,CAAA;QAClE,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC;YACvB,KAAK;YACL,WAAW;YACX,OAAO;YACP,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,EAAE;SACnC,CAAC,CAAA;QAEF,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,cAAc,CAAC,WAAW,CAAC,CAAA;QACvF,IAAI,CAAC,YAAY,IAAI,YAAY,CAAC,SAAS,EAAE,CAAC;YAC5C,MAAM,IAAI,KAAK,CACb,cAAc,WAAW,0DAA0D;gBACjF,0CAA0C,CAC7C,CAAA;QACH,CAAC;QACD,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,4EAA4E,CAAC,CAAA;QAC/F,CAAC;QAED,MAAM,SAAS,GAAG,yBAAyB,CAAC,OAAO,CAAC,CAAA;QACpD,6FAA6F;QAC7F,0FAA0F;QAC1F,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,kBAAkB,EAAE,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;QACtF,MAAM,EAAE,IAAI,EAAE,mBAAmB,EAAE,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;YACjE,OAAO;YACP,GAAG;YACH,kBAAkB;YAClB,WAAW;YACX,4FAA4F;YAC5F,2FAA2F;YAC3F,wCAAwC;YACxC,WAAW,EAAE,KAAK;YAClB,SAAS;YACT,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,iBAAiB,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC3E,CAAC,CAAA;QAEF,6FAA6F;QAC7F,+FAA+F;QAC/F,6FAA6F;QAC7F,4FAA4F;QAC5F,mFAAmF;QACnF,MAAM,OAAO,GAAG,MAAM,sBAAsB,CAAC;YAC3C,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAClF,WAAW;YACX,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,MAAM,EAAE,GAAG;SACZ,CAAC,CAAA;QACF,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,CAAA;QAC/E,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,YAAY,CAAC,cAAc,EAAE;YACjF,WAAW,EAAE,KAAK;YAClB,WAAW;YACX,OAAO;YACP,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACrE,CAAC,CAAA;QACF,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,IAAI,gBAAgB,CAAC,CAAC;YAC/D,cAAc,EAAE,YAAY,CAAC,cAAc;YAC3C,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE;YACxB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,UAAU,EAAE,IAAI,CAAC,MAAM;YACvB,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACrD,GAAG,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC9E,CAAC,CAAA;QAEF,MAAM,IAAI,GAAG;YACX,KAAK;YACL,WAAW;YACX,2FAA2F;YAC3F,yEAAyE;YACzE,WAAW,EAAE,KAAK;YAClB,IAAI,EAAE,SAAS;YACf,YAAY,EAAE,4BAA4B,CAAC,OAAO,CAAC;YACnD,UAAU,EAAE,0BAA0B,CAAC;gBACrC,OAAO;gBACP,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,WAAW;gBACX,WAAW,EAAE,OAAO,CAAC,KAAK;gBAC1B,IAAI,EAAE;oBACJ,KAAK,EAAE,IAAI,CAAC,KAAK;oBACjB,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,MAAM,EAAE,IAAI,CAAC,MAAM;oBACnB,GAAG,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBAC9E;aACF,CAAC;YACF,KAAK,EAAE,GAAG,CAAC,KAAK;YAChB,yFAAyF;YACzF,sFAAsF;YACtF,GAAG,IAAI;YACP,OAAO;YACP,IAAI,EAAE;gBACJ,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,UAAU,EAAE,IAAI,CAAC,MAAM;gBACvB,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,GAAG,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC9E;YACD,0FAA0F;YAC1F,+BAA+B;YAC/B,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,2FAA2F;YAC3F,wEAAwE;YACxE,yFAAyF;YACzF,2FAA2F;YAC3F,uFAAuF;YACvF,MAAM,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,SAAS,EAAE,4BAA4B,EAAE,MAAM,EAAE,IAAI,EAAE;YACrF,2FAA2F;YAC3F,yFAAyF;YACzF,+CAA+C;YAC/C,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,WAAW,EAAE,cAAc,EAAE,WAAW,CAAC,GAAG,EAAE;YACrF,uFAAuF;YACvF,oFAAoF;YACpF,wFAAwF;YACxF,gDAAgD;YAChD,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3D,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC/E,CAAA;QAED,GAAG,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAA;QACtD,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE;YAC7E,GAAG,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,gBAAgB,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC1E,uFAAuF;YACvF,yFAAyF;YACzF,mDAAmD;YACnD,YAAY,EAAE;gBACZ;oBACE,GAAG,EAAE,WAAW,CAAC,GAAG;oBACpB,GAAG,CAAC,WAAW,CAAC,YAAY,EAAE,OAAO;wBACnC,CAAC,CAAC,EAAE,OAAO,EAAE,WAAW,CAAC,YAAY,CAAC,OAAO,EAAE;wBAC/C,CAAC,CAAC,EAAE,CAAC;iBACR;aACF;SACF,CAAC,CAAA;QACF,GAAG,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAA;QACvD,OAAO;YACL,WAAW;YACX,KAAK;YACL,OAAO;YACP,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,0EAA0E;YAC1E,6FAA6F;YAC7F,qEAAqE;YACrE,QAAQ,EAAE;gBACR,KAAK,EAAE,UAAU,CAAC,GAAG,CAAC;gBACtB,GAAG,CAAC,mBAAmB,CAAC,CAAC,CAAC,EAAE,mBAAmB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACvD,GAAG,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,kBAAkB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACtD;SACF,CAAA;IACH,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,MAA8B;QACvC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAA;QAC7F,gGAAgG;QAChG,uFAAuF;QACvF,qBAAqB;QACrB,MAAM,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,CAAA;QAC3E,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YAC7B,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAA;QAC7F,CAAC;QACD,MAAM,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;QACzC,IAAI,IAAI,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC5B,OAAO;gBACL,KAAK,EAAE,QAAQ;gBACf,wFAAwF;gBACxF,uFAAuF;gBACvF,yFAAyF;gBACzF,kCAAkC;gBAClC,WAAW,EAAE,IAAI,CAAC,OAAO;oBACvB,CAAC,CAAC,SAAS;oBACX,CAAC,CAAC,CAAC,2BAA2B,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,OAAO,CAAC;gBAC/D,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,+BAA+B;gBACpD,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC9C,CAAA;QACH,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,EAAE,CAAA;QAChC,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YACjB,OAAO;gBACL,KAAK,EAAE,QAAQ;gBACf,WAAW,EAAE,2BAA2B,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,OAAO;gBACtE,KAAK,EAAE,6BAA6B,MAAM,CAAC,KAAK,EAAE;gBAClD,MAAM,EAAE,MAAM,CAAC,KAAK;aACrB,CAAA;QACH,CAAC;QACD,IAAI,CAAC,+BAA+B,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;YACpD,6FAA6F;YAC7F,uFAAuF;YACvF,0FAA0F;YAC1F,sFAAsF;YACtF,2FAA2F;YAC3F,kCAAkC;YAClC,OAAO;gBACL,KAAK,EAAE,QAAQ;gBACf,WAAW,EAAE,2BAA2B,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,OAAO;gBACtE,KAAK,EACH,+EAA+E;oBAC/E,oCAAoC;aACvC,CAAA;QACH,CAAC;QACD,gGAAgG;QAChG,4FAA4F;QAC5F,4FAA4F;QAC5F,+FAA+F;QAC/F,6FAA6F;QAC7F,sEAAsE;QACtE,OAAO;YACL,KAAK,EAAE,MAAM;YACb,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,GAAG,CAAC,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACpE,CAAA;IACH,CAAC;IAED;;;;;;;;;;;;;OAaG;IACK,KAAK,CAAC,gBAAgB,CAC5B,MAA8B,EAC9B,IAAmB;QAEnB,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAA;QAClC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,EAAE,CAAA;QAChC,MAAM,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;QAClD,MAAM,IAAI,CAAC,UAAU,CAAC,qBAAqB,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;QACxD,MAAM,IAAI,CAAC,UAAU,CAAC,oBAAoB,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;IACzD,CAAC;IAED;;;;;;;OAOG;IACK,SAAS,CAAC,MAA8B;QAC9C,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAA;QACpC,OAAO;YACL,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,WAAW,EAAE,MAAM,CAAC,WAAW;YAC/B,SAAS,EAAE,yBAAyB,CAAC,MAAM,CAAC,OAAO,CAAC;YACpD,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACxD,GAAG,CAAC,MAAM,CAAC,QAAQ,EAAE,mBAAmB;gBACtC,CAAC,CAAC,EAAE,mBAAmB,EAAE,MAAM,CAAC,QAAQ,CAAC,mBAAmB,EAAE;gBAC9D,CAAC,CAAC,EAAE,CAAC;YACP,GAAG,CAAC,MAAM,CAAC,QAAQ,EAAE,kBAAkB;gBACrC,CAAC,CAAC,EAAE,kBAAkB,EAAE,MAAM,CAAC,QAAQ,CAAC,kBAAkB,EAAE;gBAC5D,CAAC,CAAC,EAAE,CAAC;YACP,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,iBAAiB,EAAE,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACzE,CAAA;IACH,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,MAA8B;QACvC,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAA;IACrF,CAAC;IAED;;;;;;;;OAQG;IACK,YAAY,CAClB,OAA8E,EAC9E,OAAgC;QAEhC,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC;YAC5B,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,SAAS,EAAE,yBAAyB,CAAC,OAAO,CAAC;YAC7C,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,iBAAiB,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC3E,CAAC,CAAA;IACJ,CAAC;IAED;;;OAGG;IACK,GAAG,CAAC,KAAa,EAAE,OAAgC;QACzD,MAAM,KAAK,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAA;QACvC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAA;IAC7D,CAAC;IAED;;;;;OAKG;IACK,KAAK,CAAC,gBAAgB,CAC5B,WAAmB,EACnB,KAAa,EACb,IAAY;QAEZ,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;QAClE,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAC1B,CAAC,GAAG,EAAE,EAAE,CACN,GAAG,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,KAAK,CAAC,WAAW,EAAE;YAC/C,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC,WAAW,EAAE,CAChD,CAAA;QACD,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;IAC9C,CAAC;CACF"}
@@ -1,6 +1,42 @@
1
- import type { AgentRunContext, ModelFlavor, ModelRef, SubscriptionVendor } from '@cat-factory/kernel';
1
+ import type { LocalModelDeclarations, ModelFlavor, ModelRef, SubscriptionVendor } from '@cat-factory/kernel';
2
2
  import type { HarnessKind } from '@cat-factory/kernel';
3
3
  import { type AgentRouting } from '@cat-factory/agents';
4
+ /**
5
+ * Everything the router reads to pick a model: the agent kind, the workspace, whatever the block
6
+ * pins, and who started the work.
7
+ *
8
+ * A structural SUBSET of {@link import('@cat-factory/kernel').AgentRunContext}, which is what the
9
+ * pipeline path still passes. The point is the caller that has no run context to pass: the AGENT
10
+ * DRY RUN's prober is not an `ExecutionInstance`: it has a workspace, a frame and an initiator, and
11
+ * nothing else the run context describes. Asking it for a whole `AgentRunContext` would have it
12
+ * fabricate a pipeline name, a step index and a final-step flag, and a fabricated run context is a
13
+ * thing later code reads as one. Taking the subset instead is what lets that dispatch resolve its
14
+ * model through THIS precedence rather than reaching for the deployment's env routing directly,
15
+ * which is a model nobody's preset chose.
16
+ *
17
+ * The two OTHER single-job container flows still read the env routing at WIRING and do not come
18
+ * through here: the env-config repairer pins `coder`'s routed ref (and disables itself when it is
19
+ * not proxyable), and the repo bootstrapper pins `architect`'s. Neither has a frame to resolve
20
+ * against (`EnvConfigRepairRequest` and a bootstrap both name a REPOSITORY, and a bootstrap runs
21
+ * before the board has a service block at all), so giving them this precedence is a change to their
22
+ * ports, not a change here.
23
+ */
24
+ export interface StepModelSelection {
25
+ agentKind: string;
26
+ /** Absent ⇒ no workspace defaults are consulted and the env routing decides. */
27
+ workspaceId?: string;
28
+ /** Whoever started the work: whose personal (individual-usage) subscription may be leased. */
29
+ initiatedByUserId?: string;
30
+ /** The route order the preset in force states; absent ⇒ the deployment's default order. */
31
+ providerPreference?: readonly ModelFlavor[];
32
+ /** The initiator's local-runner declarations, folded onto the resolved ref. */
33
+ localModelDeclarations?: readonly LocalModelDeclarations[];
34
+ /** What the block itself pins, if anything. `{}` for a caller whose subject pins nothing. */
35
+ block: {
36
+ modelId?: string;
37
+ modelPresetId?: string;
38
+ };
39
+ }
4
40
  /** The collaborators {@link ModelRouter} needs to resolve a step's model + subscription path. */
5
41
  export interface ModelRouterDependencies {
6
42
  /** Default model routing; used when the block pins no (usable) model. */
@@ -43,7 +79,7 @@ export declare class ModelRouter {
43
79
  * workspace per-kind default > env routing). Side-effect-free and dispatch-free,
44
80
  * so it backs both the up-front `resolveModel` preview and `buildJobBody`.
45
81
  */
46
- resolveRef(context: AgentRunContext): Promise<ModelRef>;
82
+ resolveRef(context: StepModelSelection): Promise<ModelRef>;
47
83
  /**
48
84
  * The canonical catalog model id the step resolves to (block pin > workspace
49
85
  * per-kind default), or undefined when it falls through to the env routing
@@ -62,7 +98,7 @@ export declare class ModelRouter {
62
98
  * base. So a subscriber runs GLM on their plan while a non-subscriber on the same
63
99
  * workspace falls back to Cloudflare GLM.
64
100
  */
65
- resolveEffectiveRef(context: AgentRunContext, workspaceId: string): Promise<{
101
+ resolveEffectiveRef(context: StepModelSelection, workspaceId: string): Promise<{
66
102
  ref: ModelRef;
67
103
  subscriptionVendor?: SubscriptionVendor;
68
104
  }>;
@@ -78,7 +114,7 @@ export declare class ModelRouter {
78
114
  * harnesses (Claude Code / Codex) talk direct to the vendor with a pooled token, so the
79
115
  * proxyable guard does not apply to them.
80
116
  */
81
- resolveDispatchRef(context: AgentRunContext, workspaceId: string): Promise<{
117
+ resolveDispatchRef(context: StepModelSelection, workspaceId: string): Promise<{
82
118
  ref: ModelRef;
83
119
  harness: HarnessKind;
84
120
  subscriptionVendor?: SubscriptionVendor;
@@ -1 +1 @@
1
- {"version":3,"file":"ModelRouter.d.ts","sourceRoot":"","sources":["../../src/agents/ModelRouter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EACf,WAAW,EACX,QAAQ,EACR,kBAAkB,EACnB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAEtD,OAAO,EAAE,KAAK,YAAY,EAA4C,MAAM,qBAAqB,CAAA;AAEjG,iGAAiG;AACjG,MAAM,WAAW,uBAAuB;IACtC,yEAAyE;IACzE,YAAY,EAAE,YAAY,CAAA;IAC1B,2FAA2F;IAC3F,iBAAiB,EAAE,CACjB,OAAO,EAAE,MAAM,GAAG,SAAS,EAC3B,kBAAkB,CAAC,EAAE,SAAS,WAAW,EAAE,KACxC,QAAQ,GAAG,SAAS,CAAA;IACzB;;;OAGG;IACH,4BAA4B,CAAC,EAAE,CAC7B,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,aAAa,CAAC,EAAE,MAAM,KACnB,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAA;IAChC;;;;;OAKG;IACH,oBAAoB,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,kBAAkB,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;IAC5F;;;;;;OAMG;IACH,uBAAuB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,kBAAkB,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;CAC3F;AAED;;;;;;GAMG;AACH,qBAAa,WAAW;IACV,OAAO,CAAC,QAAQ,CAAC,IAAI;IAAjC,YAA6B,IAAI,EAAE,uBAAuB,EAAI;IAE9D;;;;OAIG;IACH,UAAU,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,QAAQ,CAAC,CA4BtD;IAED;;;;;OAKG;YACW,uBAAuB;IAcrC;;;;;;;;;;OAUG;IACG,mBAAmB,CACvB,OAAO,EAAE,eAAe,EACxB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC;QAAE,GAAG,EAAE,QAAQ,CAAC;QAAC,kBAAkB,CAAC,EAAE,kBAAkB,CAAA;KAAE,CAAC,CA2BrE;IAED;;;;;;;;;;;OAWG;IACG,kBAAkB,CACtB,OAAO,EAAE,eAAe,EACxB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC;QAAE,GAAG,EAAE,QAAQ,CAAC;QAAC,OAAO,EAAE,WAAW,CAAC;QAAC,kBAAkB,CAAC,EAAE,kBAAkB,CAAA;KAAE,CAAC,CAa3F;CACF"}
1
+ {"version":3,"file":"ModelRouter.d.ts","sourceRoot":"","sources":["../../src/agents/ModelRouter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,sBAAsB,EACtB,WAAW,EACX,QAAQ,EACR,kBAAkB,EACnB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAEtD,OAAO,EAAE,KAAK,YAAY,EAA4C,MAAM,qBAAqB,CAAA;AAEjG;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAA;IACjB,gFAAgF;IAChF,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,8FAA8F;IAC9F,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,2FAA2F;IAC3F,kBAAkB,CAAC,EAAE,SAAS,WAAW,EAAE,CAAA;IAC3C,+EAA+E;IAC/E,sBAAsB,CAAC,EAAE,SAAS,sBAAsB,EAAE,CAAA;IAC1D,6FAA6F;IAC7F,KAAK,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,aAAa,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CACpD;AAED,iGAAiG;AACjG,MAAM,WAAW,uBAAuB;IACtC,yEAAyE;IACzE,YAAY,EAAE,YAAY,CAAA;IAC1B,2FAA2F;IAC3F,iBAAiB,EAAE,CACjB,OAAO,EAAE,MAAM,GAAG,SAAS,EAC3B,kBAAkB,CAAC,EAAE,SAAS,WAAW,EAAE,KACxC,QAAQ,GAAG,SAAS,CAAA;IACzB;;;OAGG;IACH,4BAA4B,CAAC,EAAE,CAC7B,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,aAAa,CAAC,EAAE,MAAM,KACnB,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAA;IAChC;;;;;OAKG;IACH,oBAAoB,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,kBAAkB,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;IAC5F;;;;;;OAMG;IACH,uBAAuB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,kBAAkB,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;CAC3F;AAED;;;;;;GAMG;AACH,qBAAa,WAAW;IACV,OAAO,CAAC,QAAQ,CAAC,IAAI;IAAjC,YAA6B,IAAI,EAAE,uBAAuB,EAAI;IAE9D;;;;OAIG;IACH,UAAU,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,QAAQ,CAAC,CA4BzD;IAED;;;;;OAKG;YACW,uBAAuB;IAcrC;;;;;;;;;;OAUG;IACG,mBAAmB,CACvB,OAAO,EAAE,kBAAkB,EAC3B,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC;QAAE,GAAG,EAAE,QAAQ,CAAC;QAAC,kBAAkB,CAAC,EAAE,kBAAkB,CAAA;KAAE,CAAC,CA2BrE;IAED;;;;;;;;;;;OAWG;IACG,kBAAkB,CACtB,OAAO,EAAE,kBAAkB,EAC3B,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC;QAAE,GAAG,EAAE,QAAQ,CAAC;QAAC,OAAO,EAAE,WAAW,CAAC;QAAC,kBAAkB,CAAC,EAAE,kBAAkB,CAAA;KAAE,CAAC,CAa3F;CACF"}
@@ -110,7 +110,7 @@ export class ModelRouter {
110
110
  const { ref, subscriptionVendor } = await this.resolveEffectiveRef(context, workspaceId);
111
111
  const harness = ref.harness ?? 'pi';
112
112
  if (harness === 'pi' && !isProxyableProvider(ref.provider)) {
113
- throw new Error(`Container implementation needs a model the LLM proxy can serve ` +
113
+ throw new Error(`A container dispatch needs a model the LLM proxy can serve ` +
114
114
  `(Workers AI, a direct OpenAI-compatible provider, or a local runner); ` +
115
115
  `'${ref.provider}' is not supported. Pick a Workers AI model, configure a ` +
116
116
  `provider key (QWEN_API_KEY / DEEPSEEK_API_KEY / MOONSHOT_API_KEY), or add a local ` +
@@ -1 +1 @@
1
- {"version":3,"file":"ModelRouter.js","sourceRoot":"","sources":["../../src/agents/ModelRouter.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAA;AAC/E,OAAO,EAAqB,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAA;AAqCjG;;;;;;GAMG;AACH,MAAM,OAAO,WAAW;IACO,IAAI;IAAjC,YAA6B,IAA6B;oBAA7B,IAAI;IAA4B,CAAC;IAE9D;;;;OAIG;IACH,UAAU,CAAC,OAAwB;QACjC,OAAO,mBAAmB,CACxB;YACE,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,YAAY;YACpC,iBAAiB,EAAE,IAAI,CAAC,IAAI,CAAC,iBAAiB;YAC9C,4BAA4B,EAAE,IAAI,CAAC,IAAI,CAAC,4BAA4B;SACrE,EACD;YACE,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,YAAY,EAAE,OAAO,CAAC,KAAK,CAAC,OAAO;YACnC,aAAa,EAAE,OAAO,CAAC,KAAK,CAAC,aAAa;YAC1C,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,wFAAwF;YACxF,wFAAwF;YACxF,8EAA8E;YAC9E,GAAG,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,kBAAkB,EAAE,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACzF,uFAAuF;YACvF,yFAAyF;YACzF,qFAAqF;YACrF,0FAA0F;YAC1F,yFAAyF;YACzF,wFAAwF;YACxF,sFAAsF;YACtF,GAAG,CAAC,OAAO,CAAC,sBAAsB;gBAChC,CAAC,CAAC,EAAE,sBAAsB,EAAE,OAAO,CAAC,sBAAsB,EAAE;gBAC5D,CAAC,CAAC,EAAE,CAAC;SACR,CACF,CAAA;IACH,CAAC;IAED;;;;;OAKG;IACK,KAAK,CAAC,uBAAuB,CAAC,OAAwB;QAC5D,IAAI,OAAO,CAAC,KAAK,CAAC,OAAO;YAAE,OAAO,OAAO,CAAC,KAAK,CAAC,OAAO,CAAA;QACvD,IAAI,IAAI,CAAC,IAAI,CAAC,4BAA4B,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;YAClE,OAAO,CACL,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,4BAA4B,CAC3C,OAAO,CAAC,WAAW,EACnB,OAAO,CAAC,SAAS,EACjB,OAAO,CAAC,KAAK,CAAC,aAAa,CAC5B,CAAC,IAAI,SAAS,CAChB,CAAA;QACH,CAAC;QACD,OAAO,SAAS,CAAA;IAClB,CAAC;IAED;;;;;;;;;;OAUG;IACH,KAAK,CAAC,mBAAmB,CACvB,OAAwB,EACxB,WAAmB;QAEnB,IAAI,GAAG,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAA;QACxC,IAAI,kBAAkD,CAAA;QACtD,MAAM,SAAS,GAAG,qBAAqB,CAAC,MAAM,IAAI,CAAC,uBAAuB,CAAC,OAAO,CAAC,CAAC,CAAA;QACpF,IAAI,SAAS,EAAE,CAAC;YACd,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;gBAChB,kBAAkB,GAAG,SAAS,CAAC,MAAM,CAAA;YACvC,CAAC;iBAAM,IAAI,kBAAkB,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;gBAChD,mFAAmF;gBACnF,kFAAkF;gBAClF,IACE,OAAO,CAAC,iBAAiB;oBACzB,IAAI,CAAC,IAAI,CAAC,uBAAuB;oBACjC,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,OAAO,CAAC,iBAAiB,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,EACtF,CAAC;oBACD,GAAG,GAAG,SAAS,CAAC,GAAG,CAAA;oBACnB,kBAAkB,GAAG,SAAS,CAAC,MAAM,CAAA;gBACvC,CAAC;YACH,CAAC;iBAAM,IACL,IAAI,CAAC,IAAI,CAAC,oBAAoB;gBAC9B,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,WAAW,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,EACrE,CAAC;gBACD,GAAG,GAAG,SAAS,CAAC,GAAG,CAAA;gBACnB,kBAAkB,GAAG,SAAS,CAAC,MAAM,CAAA;YACvC,CAAC;QACH,CAAC;QACD,OAAO,EAAE,GAAG,EAAE,GAAG,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,kBAAkB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAA;IACvE,CAAC;IAED;;;;;;;;;;;OAWG;IACH,KAAK,CAAC,kBAAkB,CACtB,OAAwB,EACxB,WAAmB;QAEnB,MAAM,EAAE,GAAG,EAAE,kBAAkB,EAAE,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,WAAW,CAAC,CAAA;QACxF,MAAM,OAAO,GAAgB,GAAG,CAAC,OAAO,IAAI,IAAI,CAAA;QAChD,IAAI,OAAO,KAAK,IAAI,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC3D,MAAM,IAAI,KAAK,CACb,iEAAiE;gBAC/D,wEAAwE;gBACxE,IAAI,GAAG,CAAC,QAAQ,2DAA2D;gBAC3E,oFAAoF;gBACpF,sDAAsD,CACzD,CAAA;QACH,CAAC;QACD,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,kBAAkB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAA;IAChF,CAAC;CACF"}
1
+ {"version":3,"file":"ModelRouter.js","sourceRoot":"","sources":["../../src/agents/ModelRouter.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAA;AAC/E,OAAO,EAAqB,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAA;AAuEjG;;;;;;GAMG;AACH,MAAM,OAAO,WAAW;IACO,IAAI;IAAjC,YAA6B,IAA6B;oBAA7B,IAAI;IAA4B,CAAC;IAE9D;;;;OAIG;IACH,UAAU,CAAC,OAA2B;QACpC,OAAO,mBAAmB,CACxB;YACE,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,YAAY;YACpC,iBAAiB,EAAE,IAAI,CAAC,IAAI,CAAC,iBAAiB;YAC9C,4BAA4B,EAAE,IAAI,CAAC,IAAI,CAAC,4BAA4B;SACrE,EACD;YACE,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,YAAY,EAAE,OAAO,CAAC,KAAK,CAAC,OAAO;YACnC,aAAa,EAAE,OAAO,CAAC,KAAK,CAAC,aAAa;YAC1C,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,wFAAwF;YACxF,wFAAwF;YACxF,8EAA8E;YAC9E,GAAG,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,kBAAkB,EAAE,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACzF,uFAAuF;YACvF,yFAAyF;YACzF,qFAAqF;YACrF,0FAA0F;YAC1F,yFAAyF;YACzF,wFAAwF;YACxF,sFAAsF;YACtF,GAAG,CAAC,OAAO,CAAC,sBAAsB;gBAChC,CAAC,CAAC,EAAE,sBAAsB,EAAE,OAAO,CAAC,sBAAsB,EAAE;gBAC5D,CAAC,CAAC,EAAE,CAAC;SACR,CACF,CAAA;IACH,CAAC;IAED;;;;;OAKG;IACK,KAAK,CAAC,uBAAuB,CAAC,OAA2B;QAC/D,IAAI,OAAO,CAAC,KAAK,CAAC,OAAO;YAAE,OAAO,OAAO,CAAC,KAAK,CAAC,OAAO,CAAA;QACvD,IAAI,IAAI,CAAC,IAAI,CAAC,4BAA4B,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;YAClE,OAAO,CACL,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,4BAA4B,CAC3C,OAAO,CAAC,WAAW,EACnB,OAAO,CAAC,SAAS,EACjB,OAAO,CAAC,KAAK,CAAC,aAAa,CAC5B,CAAC,IAAI,SAAS,CAChB,CAAA;QACH,CAAC;QACD,OAAO,SAAS,CAAA;IAClB,CAAC;IAED;;;;;;;;;;OAUG;IACH,KAAK,CAAC,mBAAmB,CACvB,OAA2B,EAC3B,WAAmB;QAEnB,IAAI,GAAG,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAA;QACxC,IAAI,kBAAkD,CAAA;QACtD,MAAM,SAAS,GAAG,qBAAqB,CAAC,MAAM,IAAI,CAAC,uBAAuB,CAAC,OAAO,CAAC,CAAC,CAAA;QACpF,IAAI,SAAS,EAAE,CAAC;YACd,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;gBAChB,kBAAkB,GAAG,SAAS,CAAC,MAAM,CAAA;YACvC,CAAC;iBAAM,IAAI,kBAAkB,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;gBAChD,mFAAmF;gBACnF,kFAAkF;gBAClF,IACE,OAAO,CAAC,iBAAiB;oBACzB,IAAI,CAAC,IAAI,CAAC,uBAAuB;oBACjC,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,OAAO,CAAC,iBAAiB,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,EACtF,CAAC;oBACD,GAAG,GAAG,SAAS,CAAC,GAAG,CAAA;oBACnB,kBAAkB,GAAG,SAAS,CAAC,MAAM,CAAA;gBACvC,CAAC;YACH,CAAC;iBAAM,IACL,IAAI,CAAC,IAAI,CAAC,oBAAoB;gBAC9B,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,WAAW,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,EACrE,CAAC;gBACD,GAAG,GAAG,SAAS,CAAC,GAAG,CAAA;gBACnB,kBAAkB,GAAG,SAAS,CAAC,MAAM,CAAA;YACvC,CAAC;QACH,CAAC;QACD,OAAO,EAAE,GAAG,EAAE,GAAG,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,kBAAkB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAA;IACvE,CAAC;IAED;;;;;;;;;;;OAWG;IACH,KAAK,CAAC,kBAAkB,CACtB,OAA2B,EAC3B,WAAmB;QAEnB,MAAM,EAAE,GAAG,EAAE,kBAAkB,EAAE,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,WAAW,CAAC,CAAA;QACxF,MAAM,OAAO,GAAgB,GAAG,CAAC,OAAO,IAAI,IAAI,CAAA;QAChD,IAAI,OAAO,KAAK,IAAI,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC3D,MAAM,IAAI,KAAK,CACb,6DAA6D;gBAC3D,wEAAwE;gBACxE,IAAI,GAAG,CAAC,QAAQ,2DAA2D;gBAC3E,oFAAoF;gBACpF,sDAAsD,CACzD,CAAA;QACH,CAAC;QACD,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,kBAAkB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAA;IAChF,CAAC;CACF"}
@@ -104,9 +104,16 @@ export declare class ContainerJobAccounting {
104
104
  /**
105
105
  * Fold the SAME subscription usage into the modeled quota-cycle counters (Part B), for
106
106
  * BOTH pooled and personal runs. A subscription run is the one reporting per-call
107
- * metrics (Pi is proxy-metered and has none), and the handle's provider is the vendor
108
- * slug. Scope = the leased pool token when present, else the run initiator (personal).
109
- * Best-effort, once per job id so a replayed poll can't double-count.
107
+ * metrics (Pi is proxy-metered and has none). Scope = the leased pool token when present,
108
+ * else the run initiator (personal). Best-effort, once per job id so a replayed poll can't
109
+ * double-count.
110
+ *
111
+ * Keyed on the VENDOR the dispatch resolved, and only then on the provider parsed off the
112
+ * model. The two differ for four of the five vendors (`claude`⇄`anthropic`, `codex`⇄`openai`,
113
+ * `glm`⇄`zai`, `kimi`⇄`moonshot`), so a fold that took the provider alone matched DeepSeek and
114
+ * silently counted nothing for the rest: a quota cycle that reported zero for the vendors the
115
+ * feature exists to track. The provider stays as the fallback, so a handle minted before the
116
+ * dispatch carried a vendor still folds exactly as it used to.
110
117
  */
111
118
  recordQuotaUsageOnce(handle: AgentJobHandle, result: RunnerJobResult): Promise<void>;
112
119
  }
@@ -1 +1 @@
1
- {"version":3,"file":"containerJobAccounting.d.ts","sourceRoot":"","sources":["../../src/agents/containerJobAccounting.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,iBAAiB,EACtB,KAAK,eAAe,EACpB,KAAK,uBAAuB,EAE7B,MAAM,qBAAqB,CAAA;AAC5B,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAA;AAoBzE,wFAAwF;AACxF,MAAM,WAAW,0BAA0B;IACzC,0FAA0F;IAC1F,kBAAkB,CAAC,EAAE,CAAC,KAAK,EAAE,uBAAuB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACtE,uEAAuE;IACvE,uBAAuB,CAAC,EAAE,CACxB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,KACjD,OAAO,CAAC,IAAI,CAAC,CAAA;IAClB,mFAAmF;IACnF,4BAA4B,CAAC,EAAE,CAC7B,MAAM,EAAE,uBAAuB,EAC/B,KAAK,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,KACjD,OAAO,CAAC,IAAI,CAAC,CAAA;CACnB;AAED,qBAAa,sBAAsB;IA4CrB,OAAO,CAAC,QAAQ,CAAC,IAAI;IA3CjC;;;;;;;;;OASG;IACH,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAoB;IAEtD;;;;;OAKG;IACH,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAoB;IAE3D;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAiC;IAElE;;;;;OAKG;IACH,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAoB;IAEtD,YAA6B,IAAI,EAAE,0BAA0B,EAAI;IAEjE;;;;;;;;;;;;;;OAcG;IACG,WAAW,CAAC,MAAM,EAAE,cAAc,EAAE,KAAK,EAAE,iBAAiB,EAAE,GAAG,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAmB/F;IAED;;;;OAIG;IACH,OAAO,CAAC,oBAAoB;IAS5B;;;;;;;;;;;OAWG;IACG,eAAe,CACnB,MAAM,EAAE,cAAc,EACtB,MAAM,EAAE;QAAE,WAAW,CAAC,EAAE,iBAAiB,EAAE,CAAA;KAAE,GAC5C,OAAO,CAAC,IAAI,CAAC,CAYf;IAED;;;;;OAKG;IACG,qBAAqB,CAAC,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAmB1F;IAED;;;;;;OAMG;IACG,oBAAoB,CAAC,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAqBzF;CACF"}
1
+ {"version":3,"file":"containerJobAccounting.d.ts","sourceRoot":"","sources":["../../src/agents/containerJobAccounting.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,iBAAiB,EACtB,KAAK,eAAe,EACpB,KAAK,uBAAuB,EAE7B,MAAM,qBAAqB,CAAA;AAC5B,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAA;AAoBzE,wFAAwF;AACxF,MAAM,WAAW,0BAA0B;IACzC,0FAA0F;IAC1F,kBAAkB,CAAC,EAAE,CAAC,KAAK,EAAE,uBAAuB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACtE,uEAAuE;IACvE,uBAAuB,CAAC,EAAE,CACxB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,KACjD,OAAO,CAAC,IAAI,CAAC,CAAA;IAClB,mFAAmF;IACnF,4BAA4B,CAAC,EAAE,CAC7B,MAAM,EAAE,uBAAuB,EAC/B,KAAK,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,KACjD,OAAO,CAAC,IAAI,CAAC,CAAA;CACnB;AAED,qBAAa,sBAAsB;IA4CrB,OAAO,CAAC,QAAQ,CAAC,IAAI;IA3CjC;;;;;;;;;OASG;IACH,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAoB;IAEtD;;;;;OAKG;IACH,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAoB;IAE3D;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAiC;IAElE;;;;;OAKG;IACH,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAoB;IAEtD,YAA6B,IAAI,EAAE,0BAA0B,EAAI;IAEjE;;;;;;;;;;;;;;OAcG;IACG,WAAW,CAAC,MAAM,EAAE,cAAc,EAAE,KAAK,EAAE,iBAAiB,EAAE,GAAG,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAmB/F;IAED;;;;OAIG;IACH,OAAO,CAAC,oBAAoB;IAS5B;;;;;;;;;;;OAWG;IACG,eAAe,CACnB,MAAM,EAAE,cAAc,EACtB,MAAM,EAAE;QAAE,WAAW,CAAC,EAAE,iBAAiB,EAAE,CAAA;KAAE,GAC5C,OAAO,CAAC,IAAI,CAAC,CAYf;IAED;;;;;OAKG;IACG,qBAAqB,CAAC,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAmB1F;IAED;;;;;;;;;;;;;OAaG;IACG,oBAAoB,CAAC,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAqBzF;CACF"}
@@ -162,12 +162,19 @@ export class ContainerJobAccounting {
162
162
  /**
163
163
  * Fold the SAME subscription usage into the modeled quota-cycle counters (Part B), for
164
164
  * BOTH pooled and personal runs. A subscription run is the one reporting per-call
165
- * metrics (Pi is proxy-metered and has none), and the handle's provider is the vendor
166
- * slug. Scope = the leased pool token when present, else the run initiator (personal).
167
- * Best-effort, once per job id so a replayed poll can't double-count.
165
+ * metrics (Pi is proxy-metered and has none). Scope = the leased pool token when present,
166
+ * else the run initiator (personal). Best-effort, once per job id so a replayed poll can't
167
+ * double-count.
168
+ *
169
+ * Keyed on the VENDOR the dispatch resolved, and only then on the provider parsed off the
170
+ * model. The two differ for four of the five vendors (`claude`⇄`anthropic`, `codex`⇄`openai`,
171
+ * `glm`⇄`zai`, `kimi`⇄`moonshot`), so a fold that took the provider alone matched DeepSeek and
172
+ * silently counted nothing for the rest: a quota cycle that reported zero for the vendors the
173
+ * feature exists to track. The provider stays as the fallback, so a handle minted before the
174
+ * dispatch carried a vendor still folds exactly as it used to.
168
175
  */
169
176
  async recordQuotaUsageOnce(handle, result) {
170
- const quotaVendor = handle.provider ?? providerOf(handle.model);
177
+ const quotaVendor = handle.subscriptionVendor ?? handle.provider ?? providerOf(handle.model);
171
178
  if (result.callMetrics &&
172
179
  result.callMetrics.length > 0 &&
173
180
  result.usage &&
@@ -1 +1 @@
1
- {"version":3,"file":"containerJobAccounting.js","sourceRoot":"","sources":["../../src/agents/containerJobAccounting.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"containerJobAccounting.js","sourceRoot":"","sources":["../../src/agents/containerJobAccounting.ts"],"names":[],"mappings":"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"}