@opengeni/worker-bundle 1.0.0-canary.0 → 1.0.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.
- package/dist/activities/agent-run-admission.d.ts +3 -1
- package/dist/activities/agent-turn/admission.d.ts +24 -3
- package/dist/activities/agent-turn/agent-build.d.ts +4 -0
- package/dist/activities/agent-turn/claude-usage-observer.d.ts +58 -0
- package/dist/activities/agent-turn/code-search.d.ts +60 -0
- package/dist/activities/agent-turn/codex-capacity.d.ts +13 -0
- package/dist/activities/agent-turn/codex-plan-entitlement.d.ts +105 -0
- package/dist/activities/agent-turn/codex.d.ts +3 -2
- package/dist/activities/agent-turn/compaction-prep.d.ts +21 -5
- package/dist/activities/agent-turn/credential-leases.d.ts +19 -33
- package/dist/activities/agent-turn/credential-restriction.d.ts +3 -0
- package/dist/activities/agent-turn/errors.d.ts +82 -11
- package/dist/activities/agent-turn/failure-settlement.d.ts +6 -3
- package/dist/activities/agent-turn/final-reply.d.ts +18 -0
- package/dist/activities/agent-turn/finalization-monitor.d.ts +17 -0
- package/dist/activities/agent-turn/finalization.d.ts +4 -2
- package/dist/activities/agent-turn/github-repository-bindings.d.ts +2 -0
- package/dist/activities/agent-turn/governance-model.d.ts +9 -2
- package/dist/activities/agent-turn/history-sink.d.ts +2 -0
- package/dist/activities/agent-turn/history.d.ts +2 -0
- package/dist/activities/agent-turn/input-wait-reply.d.ts +41 -0
- package/dist/activities/agent-turn/media-artifacts.d.ts +5 -3
- package/dist/activities/agent-turn/model-call-admission.d.ts +15 -0
- package/dist/activities/agent-turn/model-usage.d.ts +6 -0
- package/dist/activities/agent-turn/model-wire-dispatch.d.ts +15 -0
- package/dist/activities/agent-turn/optional-repositories.d.ts +59 -0
- package/dist/activities/agent-turn/provider-dispatch-barrier.d.ts +12 -1
- package/dist/activities/agent-turn/quiescence.d.ts +7 -7
- package/dist/activities/agent-turn/recovery-warning.d.ts +9 -0
- package/dist/activities/agent-turn/refresh-credentials.d.ts +6 -0
- package/dist/activities/agent-turn/run-credentials.d.ts +8 -3
- package/dist/activities/agent-turn/sandbox-establish.d.ts +2 -1
- package/dist/activities/agent-turn/sandbox-provision.d.ts +3 -1
- package/dist/activities/agent-turn/sandbox-route.d.ts +3 -20
- package/dist/activities/agent-turn/sandbox-runtime.d.ts +2 -2
- package/dist/activities/agent-turn/session-title.d.ts +34 -2
- package/dist/activities/agent-turn/skill-checkout.d.ts +25 -6
- package/dist/activities/agent-turn/skill-read.d.ts +70 -2
- package/dist/activities/agent-turn/skill-remove.d.ts +14 -0
- package/dist/activities/agent-turn/skill-search.d.ts +3 -1
- package/dist/activities/agent-turn/skill-tools.d.ts +15 -2
- package/dist/activities/agent-turn/skill-transfer.d.ts +18 -6
- package/dist/activities/agent-turn/stream-attempt.d.ts +7 -3
- package/dist/activities/agent-turn/subscription-lease.d.ts +38 -0
- package/dist/activities/agent-turn/tool-environment.d.ts +56 -6
- package/dist/activities/agent-turn/tool-policy.d.ts +43 -0
- package/dist/activities/agent-turn/turn-context.d.ts +29 -0
- package/dist/activities/agent-turn/turn-sandbox-access.d.ts +3 -0
- package/dist/activities/agent-turn/xai-capacity.d.ts +2 -1
- package/dist/activities/automations.d.ts +3 -1
- package/dist/activities/browser-deadline-checkpoint.d.ts +29 -0
- package/dist/activities/codemode-dispatcher.d.ts +9 -2
- package/dist/activities/codex-capacity.d.ts +18 -2
- package/dist/activities/codex-rotation.d.ts +7 -1
- package/dist/activities/context-compaction.d.ts +16 -2
- package/dist/activities/gmail-files.d.ts +32 -0
- package/dist/activities/goals.d.ts +8 -0
- package/dist/activities/knowledge-indexing.d.ts +19 -0
- package/dist/activities/mcp-account-routes.d.ts +3 -0
- package/dist/activities/mcp-credentials.d.ts +12 -13
- package/dist/activities/mcp-operation-authority.d.ts +0 -5
- package/dist/activities/model-call-fact-reconciler.d.ts +34 -0
- package/dist/activities/open-suffix-resume.d.ts +13 -0
- package/dist/activities/parent-wake.d.ts +6 -12
- package/dist/activities/retained-screenshots.d.ts +7 -2
- package/dist/activities/rig-verification.d.ts +2 -3
- package/dist/activities/run-credential-renewal.d.ts +1 -0
- package/dist/activities/run-credentials.d.ts +15 -3
- package/dist/activities/sandbox-images.d.ts +1 -1
- package/dist/activities/sandbox-lease.d.ts +47 -9
- package/dist/activities/scheduled-tasks.d.ts +4 -35
- package/dist/activities/session-state.d.ts +70 -3
- package/dist/activities/types.d.ts +55 -6
- package/dist/activities/workspace-capture.d.ts +2 -0
- package/dist/activities/workspace-credential-provider.d.ts +46 -0
- package/dist/{activities-control-HMFGSKC5.js → activities-control-BNPTRTOE.js} +1896 -418
- package/dist/activities-control-BNPTRTOE.js.map +1 -0
- package/dist/activities-control.d.ts +182 -4
- package/dist/{activities-turn-AP67JADS.js → activities-turn-5LGZOSVU.js} +4476 -1327
- package/dist/activities-turn-5LGZOSVU.js.map +1 -0
- package/dist/activities.d.ts +182 -4
- package/dist/artifact-materializer-entry.js +5 -2
- package/dist/artifact-materializer-entry.js.map +1 -1
- package/dist/artifact-outbox-entry.js +5 -2
- package/dist/artifact-outbox-entry.js.map +1 -1
- package/dist/browser-deadline-checkpoint-contract.d.ts +2 -0
- package/dist/{chunk-A4XQWVZK.js → chunk-3ZTRWDMN.js} +307 -4
- package/dist/chunk-3ZTRWDMN.js.map +1 -0
- package/dist/{chunk-RAMNYSAW.js → chunk-4ER3YXOT.js} +22 -4
- package/dist/chunk-4ER3YXOT.js.map +1 -0
- package/dist/{chunk-CYITU5UH.js → chunk-LJX7Z2KP.js} +1445 -343
- package/dist/chunk-LJX7Z2KP.js.map +1 -0
- package/dist/editable-artifact-materializer-service.d.ts +2 -2
- package/dist/editable-artifact-outbox-service.d.ts +2 -2
- package/dist/host-export-pump.d.ts +3 -1
- package/dist/host-export.d.ts +1 -1
- package/dist/host-export.js +1 -1
- package/dist/http.d.ts +1 -1
- package/dist/index.d.ts +95 -3
- package/dist/index.js +137 -43
- package/dist/index.js.map +1 -1
- package/dist/observability-metrics.d.ts +118 -8
- package/dist/retained-process-diagnostics.d.ts +4 -0
- package/dist/retained-process-retry.d.ts +7 -0
- package/dist/sandbox-resume.d.ts +55 -13
- package/dist/sandbox-routing.d.ts +5 -3
- package/dist/sandbox-snapshot-diagnostics.d.ts +20 -0
- package/dist/session-event-fanout.d.ts +6 -0
- package/dist/warm-capture-holder.d.ts +3 -0
- package/dist/worker-service-lifecycle.d.ts +12 -0
- package/dist/workflow-bundle.js +273 -41
- package/dist/workflows/activities.d.ts +1 -1
- package/dist/workflows/browser-deadline-checkpoint.d.ts +9 -0
- package/dist/workflows/scheduled-tasks.d.ts +4 -0
- package/dist/workflows/session.d.ts +36 -0
- package/dist/workflows.d.ts +1 -0
- package/package.json +21 -19
- package/src/activities/agent-run-admission.ts +17 -1
- package/src/activities/agent-turn/admission.ts +66 -3
- package/src/activities/agent-turn/agent-build.ts +84 -10
- package/src/activities/agent-turn/claim.ts +186 -43
- package/src/activities/agent-turn/claude-usage-observer.ts +221 -0
- package/src/activities/agent-turn/code-search.ts +275 -0
- package/src/activities/agent-turn/codex-capacity.ts +172 -8
- package/src/activities/agent-turn/codex-plan-entitlement.ts +254 -0
- package/src/activities/agent-turn/codex.ts +13 -5
- package/src/activities/agent-turn/compaction-prep.ts +170 -102
- package/src/activities/agent-turn/credential-leases.ts +122 -216
- package/src/activities/agent-turn/credential-restriction.ts +14 -0
- package/src/activities/agent-turn/errors.ts +647 -48
- package/src/activities/agent-turn/failure-settlement.ts +682 -130
- package/src/activities/agent-turn/final-reply.ts +46 -0
- package/src/activities/agent-turn/finalization-monitor.ts +120 -0
- package/src/activities/agent-turn/finalization.ts +146 -43
- package/src/activities/agent-turn/github-repository-bindings.ts +3 -1
- package/src/activities/agent-turn/governance-model.ts +69 -28
- package/src/activities/agent-turn/history-sink.ts +16 -2
- package/src/activities/agent-turn/history.ts +38 -11
- package/src/activities/agent-turn/input-wait-reply.ts +103 -0
- package/src/activities/agent-turn/knowledge-source-tools.ts +2 -0
- package/src/activities/agent-turn/media-artifacts.ts +2 -1
- package/src/activities/agent-turn/model-call-admission.ts +94 -0
- package/src/activities/agent-turn/model-usage.ts +64 -3
- package/src/activities/agent-turn/model-wire-dispatch.ts +27 -0
- package/src/activities/agent-turn/optional-repositories.ts +224 -0
- package/src/activities/agent-turn/provider-dispatch-barrier.ts +22 -0
- package/src/activities/agent-turn/quiescence.ts +10 -7
- package/src/activities/agent-turn/recovery-warning.ts +16 -0
- package/src/activities/agent-turn/refresh-credentials.ts +44 -0
- package/src/activities/agent-turn/run-credentials.ts +116 -55
- package/src/activities/agent-turn/run.ts +320 -93
- package/src/activities/agent-turn/sandbox-establish.ts +84 -8
- package/src/activities/agent-turn/sandbox-provision.ts +3 -1
- package/src/activities/agent-turn/sandbox-route.ts +4 -21
- package/src/activities/agent-turn/sandbox-runtime.ts +343 -18
- package/src/activities/agent-turn/session-title.ts +81 -5
- package/src/activities/agent-turn/skill-checkout.ts +111 -24
- package/src/activities/agent-turn/skill-install.ts +1 -1
- package/src/activities/agent-turn/skill-read.ts +374 -28
- package/src/activities/agent-turn/skill-remove.ts +46 -0
- package/src/activities/agent-turn/skill-save.ts +1 -1
- package/src/activities/agent-turn/skill-search.ts +10 -1
- package/src/activities/agent-turn/skill-selection.ts +4 -0
- package/src/activities/agent-turn/skill-tools.ts +112 -18
- package/src/activities/agent-turn/skill-transfer.ts +68 -23
- package/src/activities/agent-turn/stream-attempt.ts +313 -77
- package/src/activities/agent-turn/subscription-lease.ts +115 -0
- package/src/activities/agent-turn/tool-environment.ts +316 -167
- package/src/activities/agent-turn/tool-policy.ts +80 -1
- package/src/activities/agent-turn/turn-context.ts +35 -0
- package/src/activities/agent-turn/turn-sandbox-access.ts +7 -1
- package/src/activities/agent-turn/xai-capacity.ts +94 -51
- package/src/activities/automations.ts +76 -4
- package/src/activities/browser-deadline-checkpoint.ts +279 -0
- package/src/activities/capabilities.ts +108 -11
- package/src/activities/codemode-dispatcher.ts +36 -8
- package/src/activities/codex-capacity.ts +60 -25
- package/src/activities/codex-rotation.ts +39 -17
- package/src/activities/context-compaction.ts +75 -18
- package/src/activities/gmail-files.ts +88 -0
- package/src/activities/goals.ts +116 -121
- package/src/activities/google-drive-publication.ts +1 -3
- package/src/activities/image-generation-operation.ts +1 -1
- package/src/activities/knowledge-indexing.ts +269 -15
- package/src/activities/knowledge-source-sync.ts +10 -0
- package/src/activities/mcp-account-routes.ts +17 -0
- package/src/activities/mcp-credentials.ts +83 -194
- package/src/activities/mcp-operation-authority.ts +16 -41
- package/src/activities/model-call-fact-reconciler.ts +112 -0
- package/src/activities/open-suffix-resume.ts +15 -2
- package/src/activities/parent-wake.ts +46 -21
- package/src/activities/retained-screenshots.ts +82 -11
- package/src/activities/rig-verification.ts +38 -37
- package/src/activities/run-credential-renewal.ts +13 -1
- package/src/activities/run-credentials.ts +59 -17
- package/src/activities/run-input.ts +25 -16
- package/src/activities/sandbox-images.ts +0 -1
- package/src/activities/sandbox-lease.ts +798 -82
- package/src/activities/scheduled-tasks.ts +550 -178
- package/src/activities/session-state.ts +245 -6
- package/src/activities/site-auth-maintenance.ts +3 -0
- package/src/activities/types.ts +72 -5
- package/src/activities/workflow-wake.ts +2 -17
- package/src/activities/workspace-capture.ts +13 -2
- package/src/activities/workspace-credential-provider.ts +283 -0
- package/src/activities-control.ts +4 -0
- package/src/activities-turn.ts +5 -0
- package/src/activities.ts +13 -0
- package/src/activity-services.ts +16 -4
- package/src/browser-deadline-checkpoint-contract.ts +5 -0
- package/src/editable-artifact-hint-broker.ts +3 -0
- package/src/editable-artifact-materializer-service.ts +7 -3
- package/src/editable-artifact-outbox-service.ts +4 -4
- package/src/github-rest-mcp.ts +1 -2
- package/src/host-export-pump.ts +26 -4
- package/src/host-export.ts +3 -0
- package/src/http.ts +4 -2
- package/src/index.ts +99 -37
- package/src/observability-metrics.ts +510 -5
- package/src/personal-github-git-credentials.ts +2 -1
- package/src/pr-review-credentials.ts +1 -3
- package/src/retained-process-diagnostics.ts +50 -0
- package/src/retained-process-retry.ts +36 -0
- package/src/sandbox-resume.ts +388 -101
- package/src/sandbox-routing.ts +150 -25
- package/src/sandbox-snapshot-diagnostics.ts +112 -0
- package/src/session-event-fanout.ts +23 -0
- package/src/warm-capture-holder.ts +15 -0
- package/src/worker-service-lifecycle.ts +53 -0
- package/src/workflows/activities.ts +16 -1
- package/src/workflows/browser-deadline-checkpoint.ts +50 -0
- package/src/workflows/file-upload-reaper.ts +2 -0
- package/src/workflows/scheduled-tasks.ts +26 -13
- package/src/workflows/session.ts +242 -22
- package/src/workflows.ts +4 -0
- package/dist/activities/agent-turn/knowledge-sources.d.ts +0 -20
- package/dist/activities/packs.d.ts +0 -55
- package/dist/activities-control-HMFGSKC5.js.map +0 -1
- package/dist/activities-turn-AP67JADS.js.map +0 -1
- package/dist/chunk-A4XQWVZK.js.map +0 -1
- package/dist/chunk-CYITU5UH.js.map +0 -1
- package/dist/chunk-RAMNYSAW.js.map +0 -1
- package/src/activities/agent-turn/knowledge-sources.ts +0 -86
- package/src/activities/packs.ts +0 -166
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import {
|
|
2
|
+
authorizeAutomaticSandboxCheckpointRecovery,
|
|
2
3
|
getEnrollment,
|
|
3
4
|
getSandbox,
|
|
4
5
|
readActiveSandbox,
|
|
@@ -6,7 +7,10 @@ import {
|
|
|
6
7
|
assertPersonalMachineForAttempt,
|
|
7
8
|
type SandboxRecord,
|
|
8
9
|
} from "@opengeni/db";
|
|
9
|
-
import {
|
|
10
|
+
import {
|
|
11
|
+
sandboxOperationMetricObserver,
|
|
12
|
+
sandboxCaptureWaitMetricObserver,
|
|
13
|
+
} from "@opengeni/observability";
|
|
10
14
|
import {
|
|
11
15
|
withRunCredentialsSession,
|
|
12
16
|
runOwnedSandboxSetup,
|
|
@@ -29,10 +33,14 @@ import {
|
|
|
29
33
|
type MintedRunGitCredentials,
|
|
30
34
|
type SandboxCodemodeAuthority,
|
|
31
35
|
} from "../environment";
|
|
32
|
-
import { rigProviderImageSourceImage } from "../
|
|
36
|
+
import { rigProviderImageSourceImage } from "../sandbox-images";
|
|
33
37
|
import type { TurnActivityServices as ActivityServices, RunAgentTurnInput } from "../types";
|
|
34
38
|
import type { currentActivityContext } from "../streaming";
|
|
35
|
-
import {
|
|
39
|
+
import {
|
|
40
|
+
createFreshSandboxReadinessReplacementBudget,
|
|
41
|
+
resumeBoxForTurn,
|
|
42
|
+
type ResumedTurnSandbox,
|
|
43
|
+
} from "../../sandbox-resume";
|
|
36
44
|
import {
|
|
37
45
|
wrapTurnBoxWithRouting,
|
|
38
46
|
wrapLazyTurnBoxWithRouting,
|
|
@@ -41,6 +49,8 @@ import {
|
|
|
41
49
|
} from "../../sandbox-routing";
|
|
42
50
|
import {
|
|
43
51
|
makeMachineOpObserver,
|
|
52
|
+
recordSandboxAutomaticRecoverySelected,
|
|
53
|
+
sandboxAutomaticRecoveryOutcome,
|
|
44
54
|
recordSandboxLogicalProvision,
|
|
45
55
|
recordSandboxProvisionAttempt,
|
|
46
56
|
recordSandboxSharedPreparation,
|
|
@@ -92,6 +102,7 @@ export type SandboxRouteOk = {
|
|
|
92
102
|
machinePrimary: boolean;
|
|
93
103
|
groupBoxBackend: Settings["sandboxBackend"];
|
|
94
104
|
groupBoxImage: ReturnType<typeof rigProviderImageSourceImage>;
|
|
105
|
+
groupBoxImagePolicy: "new_creates_only";
|
|
95
106
|
sandboxCreationBackend: Settings["sandboxBackend"];
|
|
96
107
|
effectiveRunCredentialBackend: Settings["sandboxBackend"];
|
|
97
108
|
};
|
|
@@ -289,12 +300,16 @@ export async function resolveSandboxRoute(deps: SandboxRouteDeps): Promise<Sandb
|
|
|
289
300
|
machinePrimary,
|
|
290
301
|
groupBoxBackend,
|
|
291
302
|
groupBoxImage,
|
|
303
|
+
groupBoxImagePolicy: "new_creates_only",
|
|
292
304
|
sandboxCreationBackend,
|
|
293
305
|
effectiveRunCredentialBackend,
|
|
294
306
|
};
|
|
295
307
|
}
|
|
296
308
|
|
|
297
309
|
export async function establishTurnSandbox(deps: EstablishTurnSandboxDeps): Promise<void> {
|
|
310
|
+
// One fresh-box readiness replacement per turn attempt, shared by the eager
|
|
311
|
+
// establish and every lazy provisioner retry of this attempt.
|
|
312
|
+
const freshSandboxReadinessReplacementBudget = createFreshSandboxReadinessReplacementBudget();
|
|
298
313
|
const {
|
|
299
314
|
input,
|
|
300
315
|
settings,
|
|
@@ -328,6 +343,7 @@ export async function establishTurnSandbox(deps: EstablishTurnSandboxDeps): Prom
|
|
|
328
343
|
machinePrimary,
|
|
329
344
|
groupBoxBackend,
|
|
330
345
|
groupBoxImage,
|
|
346
|
+
groupBoxImagePolicy,
|
|
331
347
|
rigVersion,
|
|
332
348
|
turnResources,
|
|
333
349
|
} = deps;
|
|
@@ -368,7 +384,54 @@ export async function establishTurnSandbox(deps: EstablishTurnSandboxDeps): Prom
|
|
|
368
384
|
) {
|
|
369
385
|
const sandboxEstablishStartedAt = performance.now();
|
|
370
386
|
let sandboxEstablishOutcome: "completed" | "failed" = "completed";
|
|
387
|
+
// A committed system recovery decision is rematerialized in this turn even
|
|
388
|
+
// when the sandbox is otherwise on-demand: the decision pins group
|
|
389
|
+
// membership until publication, and the next turn must not dead-end.
|
|
390
|
+
let automaticRecoveryPending = false;
|
|
371
391
|
try {
|
|
392
|
+
if (!machinePrimary && groupBoxBackend === "modal" && activeSandboxBackend !== "selfhosted") {
|
|
393
|
+
// This happens before buildTurnAgent reads the durable instruction
|
|
394
|
+
// tail, even for an on-demand sandbox. The DB admits only a provider-
|
|
395
|
+
// lost group with no unresolved workspace writers in ANY member: the
|
|
396
|
+
// latest verified checkpoint, or a new empty workspace when none is
|
|
397
|
+
// usable. Every group member receives its durable warning receipt.
|
|
398
|
+
const fallback = await authorizeAutomaticSandboxCheckpointRecovery(db, {
|
|
399
|
+
accountId: input.accountId,
|
|
400
|
+
workspaceId: input.workspaceId,
|
|
401
|
+
sessionId: input.sessionId,
|
|
402
|
+
attemptId: input.attemptId,
|
|
403
|
+
});
|
|
404
|
+
automaticRecoveryPending = fallback.status !== "not_eligible";
|
|
405
|
+
if (fallback.status === "authorized") {
|
|
406
|
+
try {
|
|
407
|
+
recordSandboxAutomaticRecoverySelected(
|
|
408
|
+
observability,
|
|
409
|
+
"modal",
|
|
410
|
+
sandboxAutomaticRecoveryOutcome(fallback),
|
|
411
|
+
);
|
|
412
|
+
} catch {
|
|
413
|
+
// Telemetry must not turn a committed recovery into another failure.
|
|
414
|
+
}
|
|
415
|
+
if (fallback.lane === "checkpoint") {
|
|
416
|
+
observability.warn("managed sandbox selected an older verified checkpoint", {
|
|
417
|
+
backend: "modal",
|
|
418
|
+
workspaceId: input.workspaceId,
|
|
419
|
+
sessionId: input.sessionId,
|
|
420
|
+
archiveGeneration: fallback.selection.archiveGeneration,
|
|
421
|
+
workspaceGeneration: fallback.selection.workspaceGeneration,
|
|
422
|
+
groupSessionCount: fallback.groupSessionCount,
|
|
423
|
+
});
|
|
424
|
+
} else {
|
|
425
|
+
observability.warn("managed sandbox continues on an empty workspace after loss", {
|
|
426
|
+
backend: "modal",
|
|
427
|
+
workspaceId: input.workspaceId,
|
|
428
|
+
sessionId: input.sessionId,
|
|
429
|
+
reason: fallback.reason,
|
|
430
|
+
groupSessionCount: fallback.groupSessionCount,
|
|
431
|
+
});
|
|
432
|
+
}
|
|
433
|
+
}
|
|
434
|
+
}
|
|
372
435
|
const managedOwnership = managedSandboxOwnershipForTurn(
|
|
373
436
|
machinePrimary,
|
|
374
437
|
input.attemptId,
|
|
@@ -444,6 +507,7 @@ export async function establishTurnSandbox(deps: EstablishTurnSandboxDeps): Prom
|
|
|
444
507
|
bus,
|
|
445
508
|
onOp: machineOpObserver.observer,
|
|
446
509
|
onSandboxOperation: sandboxOperationObserver,
|
|
510
|
+
onSandboxCaptureWait: sandboxCaptureWaitMetricObserver(observability),
|
|
447
511
|
opJournal,
|
|
448
512
|
},
|
|
449
513
|
{
|
|
@@ -515,6 +579,7 @@ export async function establishTurnSandbox(deps: EstablishTurnSandboxDeps): Prom
|
|
|
515
579
|
opJournal,
|
|
516
580
|
onOp: machineOpObserver.observer,
|
|
517
581
|
onSandboxOperation: sandboxOperationObserver,
|
|
582
|
+
onSandboxCaptureWait: sandboxCaptureWaitMetricObserver(observability),
|
|
518
583
|
onHomeSandboxRebound,
|
|
519
584
|
...(runtimeCancellationSignal ? { waitSignal: runtimeCancellationSignal } : {}),
|
|
520
585
|
},
|
|
@@ -587,8 +652,11 @@ export async function establishTurnSandbox(deps: EstablishTurnSandboxDeps): Prom
|
|
|
587
652
|
logicalFallbackSettings: logicalSandboxSettings,
|
|
588
653
|
cancellationSignal: sandboxResumeSignal,
|
|
589
654
|
sandboxMetrics: runtimeMetricsHooksForObservability(observability),
|
|
655
|
+
observability,
|
|
656
|
+
freshSandboxReadinessReplacementBudget,
|
|
590
657
|
onSandboxLost: publishSandboxLost,
|
|
591
658
|
objectStorage,
|
|
659
|
+
bus,
|
|
592
660
|
},
|
|
593
661
|
{
|
|
594
662
|
accountId: input.accountId,
|
|
@@ -601,6 +669,7 @@ export async function establishTurnSandbox(deps: EstablishTurnSandboxDeps): Prom
|
|
|
601
669
|
...(groupBoxImage
|
|
602
670
|
? {
|
|
603
671
|
image: groupBoxImage,
|
|
672
|
+
imagePolicy: groupBoxImagePolicy,
|
|
604
673
|
}
|
|
605
674
|
: {}),
|
|
606
675
|
// The lazy acquire must enforce the same frozen rig authority
|
|
@@ -619,6 +688,7 @@ export async function establishTurnSandbox(deps: EstablishTurnSandboxDeps): Prom
|
|
|
619
688
|
hasRepositoryResources: turnResources.some(
|
|
620
689
|
(resource) => resource.kind === "repository",
|
|
621
690
|
),
|
|
691
|
+
automaticRecoveryPending,
|
|
622
692
|
})
|
|
623
693
|
) {
|
|
624
694
|
startRunGitCredentialsMint();
|
|
@@ -662,8 +732,11 @@ export async function establishTurnSandbox(deps: EstablishTurnSandboxDeps): Prom
|
|
|
662
732
|
logicalFallbackSettings: logicalSandboxSettings,
|
|
663
733
|
cancellationSignal: sandboxResumeSignal,
|
|
664
734
|
sandboxMetrics: runtimeMetricsHooksForObservability(observability),
|
|
735
|
+
observability,
|
|
736
|
+
freshSandboxReadinessReplacementBudget,
|
|
665
737
|
onSandboxLost: publishSandboxLost,
|
|
666
738
|
objectStorage,
|
|
739
|
+
bus,
|
|
667
740
|
},
|
|
668
741
|
{
|
|
669
742
|
accountId: input.accountId,
|
|
@@ -677,17 +750,17 @@ export async function establishTurnSandbox(deps: EstablishTurnSandboxDeps): Prom
|
|
|
677
750
|
backend: groupBoxBackend,
|
|
678
751
|
os: groupBoxOs,
|
|
679
752
|
environment: sandboxEnvironment,
|
|
680
|
-
//
|
|
681
|
-
//
|
|
682
|
-
//
|
|
683
|
-
//
|
|
684
|
-
// the image for the actual group-box backend; a configured Modal image must
|
|
753
|
+
// Deployment/workspace pins select NEW creates only. The lease
|
|
754
|
+
// retains a live group's image through between-turn repins, even
|
|
755
|
+
// with other holders; only rotation/reaping elects a new image.
|
|
756
|
+
// Select the image for the actual group-box backend; a configured Modal image must
|
|
685
757
|
// never override a Docker run. The selfhosted branch
|
|
686
758
|
// (establishSelfhostedTurnSession) NEVER passes
|
|
687
759
|
// an image — B3 lives only on this managed-box branch.
|
|
688
760
|
...(groupBoxImage
|
|
689
761
|
? {
|
|
690
762
|
image: groupBoxImage,
|
|
763
|
+
imagePolicy: groupBoxImagePolicy,
|
|
691
764
|
}
|
|
692
765
|
: {}),
|
|
693
766
|
// RIG IS SHARED STATE (M3): stamp the frozen rig version so the lease
|
|
@@ -755,6 +828,7 @@ export async function establishTurnSandbox(deps: EstablishTurnSandboxDeps): Prom
|
|
|
755
828
|
bus,
|
|
756
829
|
opJournal,
|
|
757
830
|
onSandboxOperation: sandboxOperationObserver,
|
|
831
|
+
onSandboxCaptureWait: sandboxCaptureWaitMetricObserver(observability),
|
|
758
832
|
onHomeSandboxLost: publishSandboxLost,
|
|
759
833
|
onHomeSandboxRebound,
|
|
760
834
|
...(runtimeCancellationSignal ? { waitSignal: runtimeCancellationSignal } : {}),
|
|
@@ -1004,6 +1078,7 @@ export async function bindLazySandboxProvisioner(
|
|
|
1004
1078
|
{
|
|
1005
1079
|
settings: runSettings,
|
|
1006
1080
|
environment: sandboxEnvironment,
|
|
1081
|
+
recordLazyManifest: true,
|
|
1007
1082
|
onRuntimeEvent: async (event) => {
|
|
1008
1083
|
await eventing.publish?.([{ type: event.type, payload: event.payload }], true);
|
|
1009
1084
|
},
|
|
@@ -1122,6 +1197,7 @@ export async function bindLazySandboxProvisioner(
|
|
|
1122
1197
|
opJournal,
|
|
1123
1198
|
onOp: machineOpObserver.observer,
|
|
1124
1199
|
onSandboxOperation: sandboxOperationObserver,
|
|
1200
|
+
onSandboxCaptureWait: sandboxCaptureWaitMetricObserver(observability),
|
|
1125
1201
|
onHomeSandboxLost: publishSandboxLost,
|
|
1126
1202
|
onHomeSandboxRebound,
|
|
1127
1203
|
...(runtimeCancellationSignal ? { waitSignal: runtimeCancellationSignal } : {}),
|
|
@@ -570,8 +570,10 @@ export function createTurnSandboxProvisioner<T>(
|
|
|
570
570
|
* - legacy/built-in OpenAI or Azure Responses fallback (resolvedModel null);
|
|
571
571
|
* - resolved built-in OpenAI/Azure providers;
|
|
572
572
|
* - ChatGPT/Codex subscription backend (its strict allowlist permits the field).
|
|
573
|
+
* - native Anthropic Messages (maps the internal key to Claude session identity;
|
|
574
|
+
* the OpenAI field is never sent on that wire).
|
|
573
575
|
*
|
|
574
|
-
*
|
|
576
|
+
* Other registry API-key providers are intentionally excluded. Fireworks' prompt-cache
|
|
575
577
|
* docs prescribe `user` or `x-session-affinity`, not `prompt_cache_key`; Z.AI/GLM
|
|
576
578
|
* documents automatic context caching plus `user_id`. Sending OpenAI-only fields
|
|
577
579
|
* to unknown OpenAI-compatible providers risks unsupported-parameter 400s.
|
|
@@ -142,13 +142,16 @@ export function shouldPrefetchManagedSandbox(input: {
|
|
|
142
142
|
machinePrimary: boolean;
|
|
143
143
|
groupBoxBackend: Settings["sandboxBackend"];
|
|
144
144
|
hasRepositoryResources: boolean;
|
|
145
|
+
/** A committed automatic post-loss recovery decision still awaits its box.
|
|
146
|
+
* Rematerialize now instead of leaving the group pinned until a tool call. */
|
|
147
|
+
automaticRecoveryPending?: boolean;
|
|
145
148
|
}): boolean {
|
|
146
149
|
if (input.establishPolicy !== "on-demand") return false;
|
|
147
150
|
if (input.machinePrimary) return false;
|
|
148
151
|
if (input.groupBoxBackend === "none" || input.groupBoxBackend === "selfhosted") {
|
|
149
152
|
return false;
|
|
150
153
|
}
|
|
151
|
-
return input.hasRepositoryResources;
|
|
154
|
+
return input.hasRepositoryResources || input.automaticRecoveryPending === true;
|
|
152
155
|
}
|
|
153
156
|
|
|
154
157
|
/**
|
|
@@ -268,15 +271,6 @@ export async function reconcileActiveSandboxPointer(
|
|
|
268
271
|
return { pointer: reread, record: rereadRecord };
|
|
269
272
|
}
|
|
270
273
|
|
|
271
|
-
/**
|
|
272
|
-
* Warm the Modal private-registry image for the image ref this turn actually
|
|
273
|
-
* resolved, not only the deployment-global OPENGENI_MODAL_IMAGE_REF warmed at
|
|
274
|
-
* worker boot. A provider-native modalImageId bypasses registry import and is
|
|
275
|
-
* resolved by ModalImageSelector.fromId during create. Otherwise packs can
|
|
276
|
-
* override `modalImageRef` per workspace/turn, so a private pack image must be
|
|
277
|
-
* resolved before sandbox creation or Modal falls back to the unauthenticated
|
|
278
|
-
* `fromTag` path.
|
|
279
|
-
*/
|
|
280
274
|
export async function ensureTurnModalRegistryImage(
|
|
281
275
|
runSettings: Settings,
|
|
282
276
|
sandboxCreationBackend: Settings["sandboxBackend"] | undefined,
|
|
@@ -302,17 +296,6 @@ export type SandboxArtifactRuntimeAdmission = Readonly<{
|
|
|
302
296
|
environment: Readonly<Record<string, string>>;
|
|
303
297
|
}>;
|
|
304
298
|
|
|
305
|
-
/**
|
|
306
|
-
* Admit the optional native standalone-file runtime only for the deployment's
|
|
307
|
-
* exact base sandbox image contract. A pack/rig image override is an
|
|
308
|
-
* independent filesystem and therefore fails closed even when the deployment
|
|
309
|
-
* base image is capable. Collaborative artifact skills are admitted separately
|
|
310
|
-
* from the frozen canonical tool catalog.
|
|
311
|
-
*
|
|
312
|
-
* This keeps lazy provisioning intact: CI/release proves the image closure,
|
|
313
|
-
* while a before-agent-start doctor verifies the actual box before any model
|
|
314
|
-
* call. No speculative sandbox is created merely to populate the skill index.
|
|
315
|
-
*/
|
|
316
299
|
export function sandboxArtifactRuntimeAdmission(
|
|
317
300
|
deploymentSettings: Settings,
|
|
318
301
|
runSettings: Settings,
|