@tangle-network/agent-runtime 0.208.0 → 0.208.1

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 (36) hide show
  1. package/dist/{activation-9wJniom2.js → activation-B86jXbpE.js} +2 -2
  2. package/dist/{activation-9wJniom2.js.map → activation-B86jXbpE.js.map} +1 -1
  3. package/dist/agent.js +2 -2
  4. package/dist/{coordination-driver-CqZGBqdt.js → coordination-driver-D9dbnSA0.js} +2 -2
  5. package/dist/{coordination-driver-CqZGBqdt.js.map → coordination-driver-D9dbnSA0.js.map} +1 -1
  6. package/dist/{delegate-CU7bWMuW.js → delegate-DP3QsLAy.js} +2 -2
  7. package/dist/{delegate-CU7bWMuW.js.map → delegate-DP3QsLAy.js.map} +1 -1
  8. package/dist/durable.js +2 -2
  9. package/dist/{graph-B0cNCFmD.js → graph-BXa0AN64.js} +3 -3
  10. package/dist/{graph-B0cNCFmD.js.map → graph-BXa0AN64.js.map} +1 -1
  11. package/dist/{improvement-cycle-Bsm8TBDT.js → improvement-cycle-BFg94oh7.js} +3 -3
  12. package/dist/{improvement-cycle-Bsm8TBDT.js.map → improvement-cycle-BFg94oh7.js.map} +1 -1
  13. package/dist/index.js +7 -7
  14. package/dist/intelligence.js +3 -3
  15. package/dist/kernel.js +8 -8
  16. package/dist/{loop-runner-bin-CLxG15ta.js → loop-runner-bin-Cv-sYY_b.js} +3 -3
  17. package/dist/{loop-runner-bin-CLxG15ta.js.map → loop-runner-bin-Cv-sYY_b.js.map} +1 -1
  18. package/dist/loop-runner-bin.js +1 -1
  19. package/dist/mcp/bin.js +3 -3
  20. package/dist/mcp/index.js +4 -4
  21. package/dist/{provision-supervisor-CEMk0grI.js → provision-supervisor-DARqIVIZ.js} +3 -3
  22. package/dist/{provision-supervisor-CEMk0grI.js.map → provision-supervisor-DARqIVIZ.js.map} +1 -1
  23. package/dist/{redact-BMwd8IBm.js → redact-DXxGazcg.js} +35 -21
  24. package/dist/redact-DXxGazcg.js.map +1 -0
  25. package/dist/{runtime-ByeeZbA3.js → runtime-DXz65UHu.js} +8 -8
  26. package/dist/{runtime-ByeeZbA3.js.map → runtime-DXz65UHu.js.map} +1 -1
  27. package/dist/{server-Bl1F2Y3v.js → server-DLxegwGE.js} +3 -3
  28. package/dist/{server-Bl1F2Y3v.js.map → server-DLxegwGE.js.map} +1 -1
  29. package/dist/{structural-rollout-DsGWoyj4.js → structural-rollout-D3Su8Dla.js} +2 -2
  30. package/dist/{structural-rollout-DsGWoyj4.js.map → structural-rollout-D3Su8Dla.js.map} +1 -1
  31. package/dist/{supervise-D3r_gEyO.js → supervise-B5kRyFJj.js} +3 -3
  32. package/dist/{supervise-D3r_gEyO.js.map → supervise-B5kRyFJj.js.map} +1 -1
  33. package/dist/testing.js +12 -12
  34. package/dist/tui/index.js +1 -1
  35. package/package.json +1 -1
  36. package/dist/redact-BMwd8IBm.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"provision-supervisor-CEMk0grI.js","names":["abortError"],"sources":["../src/runtime/retained-interactive-control.ts","../src/runtime/supervise/interactive-worker.ts","../src/runtime/supervise/provision-supervisor.ts"],"sourcesContent":["import type { AgentInteractiveSessionControlClaim } from '@tangle-network/agent-interface'\nimport {\n agentInteractiveSessionControlClaimRequestDigest,\n canonicalCandidateDigest,\n} from '@tangle-network/agent-interface'\nimport type { RetainedInteractiveRunHandle } from './retained-interactive-types'\nimport { abortError } from './retained-run-binding'\n\nconst MAX_GENERATION_CONFLICTS = 8\n\n/** Input for acquiring write authority over one exact interactive process. @stable */\nexport interface ClaimRetainedInteractiveControlOptions {\n readonly handle: RetainedInteractiveRunHandle\n readonly holderId: string\n /** Last known provider generation. Zero discovers the current generation safely. */\n readonly expectedGeneration?: number\n readonly signal?: AbortSignal\n}\n\n/**\n * Acquire provider-issued write authority without reading authority from status.\n *\n * A new coordinator starts at generation zero. If another claim already exists,\n * the provider returns its public generation and this helper retries one new\n * compare-and-swap operation. Every generation has a deterministic operation\n * identifier, so retrying after an ambiguous response cannot create two claims.\n * @stable\n */\nexport async function claimRetainedInteractiveControl(\n options: ClaimRetainedInteractiveControlOptions,\n): Promise<AgentInteractiveSessionControlClaim> {\n const expected = options.expectedGeneration ?? 0\n if (!Number.isSafeInteger(expected) || expected < 0) {\n throw new Error('interactive control expectedGeneration must be a non-negative integer')\n }\n\n let generation = expected\n for (let conflict = 0; conflict <= MAX_GENERATION_CONFLICTS; conflict += 1) {\n if (options.signal?.aborted) throw abortError(options.signal.reason)\n const material = {\n operationId: controlClaimOperationId(options.handle, options.holderId, generation),\n ref: options.handle.ref,\n holderId: options.holderId,\n expectedGeneration: generation,\n }\n const acknowledgement = await options.handle.claimControl(\n {\n ...material,\n requestDigest: agentInteractiveSessionControlClaimRequestDigest(material),\n },\n options.signal === undefined ? undefined : { signal: options.signal },\n )\n if (acknowledgement.status === 'accepted' || acknowledgement.status === 'replayed') {\n const control = acknowledgement.control\n if (control === undefined) {\n throw new Error('provider accepted interactive control without returning its claim')\n }\n if (Date.parse(control.expiresAt) <= Date.now()) {\n throw new Error('provider returned an expired interactive control claim')\n }\n return control\n }\n if (\n acknowledgement.status !== 'conflict' ||\n acknowledgement.conflictReason !== 'generation_mismatch'\n ) {\n throw new Error(\n acknowledgement.status === 'unknown'\n ? 'interactive control claim outcome is unknown; retry the same acquisition'\n : 'interactive control claim operation conflicts with different request material',\n )\n }\n const current = acknowledgement.currentGeneration\n if (current === undefined || current <= generation) {\n throw new Error('provider returned a non-advancing interactive control generation')\n }\n generation = current\n }\n throw new Error('interactive control changed too often to acquire safely')\n}\n\nfunction controlClaimOperationId(\n handle: RetainedInteractiveRunHandle,\n holderId: string,\n expectedGeneration: number,\n): string {\n const digest = canonicalCandidateDigest({\n kind: 'retained-interactive-control-claim.v1',\n ref: handle.ref,\n holderId,\n expectedGeneration,\n })\n return `interactive-claim-${digest.slice('sha256:'.length, 'sha256:'.length + 40)}`\n}\n","/**\n * Runtime-owned worker seam for a provider's native interactive coding-agent process.\n *\n * This adapter composes the retained-interactive lifecycle. It does not create a second stream,\n * replay buffer, session id, or cancellation protocol. The provider owns process state; Scope owns\n * the supervised worker, journal, budget, and local control inbox.\n */\n\nimport { randomUUID } from 'node:crypto'\nimport {\n type AgentInteractiveSessionPromptCommand,\n type AgentInteractiveSessionRef,\n type AgentInteractiveSessionStatus,\n type AgentInteractiveSessionStopAcknowledgement,\n type AgentInteractiveSessionStopCommand,\n type AgentProfile,\n agentInteractiveSessionPromptRequestDigest,\n agentInteractiveSessionStopRequestDigest,\n canonicalCandidateDigest,\n} from '@tangle-network/agent-interface'\nimport type {\n AgentEnvironment,\n AgentEnvironmentProvider,\n CreateAgentEnvironmentInput,\n} from '@tangle-network/agent-interface/environment-provider'\nimport { contentAddress } from '../../durable/spawn-journal'\nimport type { MakeWorkerAgent, WorkerSpawnContext } from '../../mcp/tools/coordination'\nimport { destroyInteractiveEnvironment } from '../retained-interactive-lifecycle'\nimport type { RetainedInteractiveRunHandle } from '../retained-interactive-types'\nimport { claimRetainedInteractiveControl, startRetainedInteractiveRun } from '../retained-run'\nimport { retainedCreateMaterial } from '../retained-run-intent'\nimport type { RetainedInteractiveAdmission } from '../retained-run-types'\nimport { abortError, linkAbort } from './abortable'\nimport { executableAgentProfileSnapshot } from './executable-spec'\nimport { createInbox } from './inbox'\nimport {\n type InteractiveAdmissionWriter,\n interactiveAdmissionSeamKey,\n} from './interactive-admission'\nimport {\n attestRuntimeOwnedPendingExecutor,\n finalizeRuntimeOwnedPendingExecutor,\n newExecutionAttemptId,\n} from './materialization'\nimport { concreteProfileModel } from './model-policy'\nimport { detachedSnapshot } from './snapshot'\nimport { taskToPrompt } from './task-prompt'\nimport type {\n Agent,\n AgentSpec,\n Executor,\n ExecutorCancellation,\n ExecutorContext,\n ExecutorResult,\n Runtime,\n Spend,\n UsageEvent,\n WorkerInteractiveSession,\n} from './types'\n\n/** Environment fields supplied to every interactive worker after Runtime adds the exact profile. */\nexport type InteractiveWorkerEnvironment = Omit<\n CreateAgentEnvironmentInput,\n 'profile' | 'idempotencyKey' | 'signal'\n>\n\n/** Native interactive worker output. Provider usage is intentionally not fabricated. */\nexport interface InteractiveWorkerResult {\n readonly provider: string\n readonly environmentId: string\n readonly sessionId: string\n readonly executionId: string\n readonly state: 'exited' | 'unknown'\n readonly ref: AgentInteractiveSessionRef\n readonly reason?: string\n readonly exitCode?: number\n readonly exitSignal?: string\n}\n\n/** Configuration shared by every worker produced by `workerFromInteractiveProvider`. */\nexport interface InteractiveWorkerOptions {\n /** Provider create fields. Runtime supplies `profile`, the two idempotency keys, and `signal`. */\n readonly environment?: InteractiveWorkerEnvironment\n /** Stable environment identity override. Defaults to a digest of the exact worker assignment. */\n readonly environmentIdempotencyKey?: (input: InteractiveWorkerKeyInput) => string\n /** Stable interactive-session identity override. Defaults to a digest of assignment and task. */\n readonly interactiveIdempotencyKey?: (input: InteractiveWorkerKeyInput) => string\n /** Provider holder id used only while the worker sends a steer or stop command. */\n readonly holderId?: string | ((input: InteractiveWorkerKeyInput) => string)\n /** Initial prompt override. The exact worker task is the default prompt. */\n readonly initialPrompt?: string | ((task: unknown, input: InteractiveWorkerKeyInput) => string)\n readonly cwd?: string\n readonly cols?: number\n readonly rows?: number\n /** Runtime tag written into tree snapshots. Defaults to the provider name. */\n readonly runtime?: Runtime\n /** Poll delay used while waiting for the provider's native process to exit. */\n readonly pollIntervalMs?: number\n /** Destroy the provider environment after the process is terminal. Defaults to true. */\n readonly destroyEnvironmentOnTeardown?: boolean\n}\n\nconst INTERACTIVE_TEARDOWN_TIMEOUT_MS = 30_000\n\n/** Stable input available to key and holder functions. */\nexport interface InteractiveWorkerKeyInput {\n readonly provider: string\n readonly profile: AgentProfile\n readonly context?: WorkerSpawnContext\n readonly task?: unknown\n readonly nodeId?: string\n}\n\n/**\n * Build a `MakeWorkerAgent` that starts one exact provider-owned native TUI per worker.\n *\n * A Scope supplies the durable admission hook and kernel-minted node attempt. The returned worker\n * exposes `interactiveReady`, so Scope writes the exact provider reference before the worker can be\n * attached by a different process. `attachWorker` then reconnects that same reference through the\n * provider's public `get`/interactive contract.\n */\nexport function workerFromInteractiveProvider(\n provider: AgentEnvironmentProvider,\n options: InteractiveWorkerOptions = {},\n): MakeWorkerAgent {\n if (!provider.name.trim())\n throw new Error('workerFromInteractiveProvider: provider.name required')\n if (!provider.get) {\n throw new Error(\n `workerFromInteractiveProvider(${provider.name}): provider.get is required for reconnect`,\n )\n }\n const capturedEnvironment = options.environment\n ? (structuredClone(options.environment) as InteractiveWorkerEnvironment)\n : undefined\n const unscopedNamespace = randomUUID()\n let unscopedOrdinal = 0\n const runtime = options.runtime ?? (provider.name as Runtime)\n\n return (rawProfile, spawnContext) => {\n const profile = executableAgentProfileSnapshot(\n rawProfile,\n `workerFromInteractiveProvider(${provider.name})`,\n )\n const input: InteractiveWorkerKeyInput = {\n provider: provider.name,\n profile,\n ...(spawnContext === undefined ? {} : { context: spawnContext }),\n }\n const assignmentId =\n spawnContext?.assignmentId ?? `unscoped:${unscopedNamespace}:${unscopedOrdinal++}`\n const baseInput = { ...input, nodeId: spawnContext?.parentNodeId }\n const environmentKey = stableKey(\n options.environmentIdempotencyKey?.({ ...baseInput }) ??\n derivedKey('supervised-interactive-environment', {\n provider: provider.name,\n assignmentId,\n parentNodeId: spawnContext?.parentNodeId,\n profile,\n }),\n 'environment idempotency key',\n )\n const name = profile.name ?? 'interactive-worker'\n\n const executorFactory = (\n spec: AgentSpec,\n ctx: ExecutorContext,\n ): Executor<InteractiveWorkerResult> =>\n interactiveExecutor({\n provider,\n profile: spec.profile,\n context: spawnContext,\n environment: capturedEnvironment,\n environmentKey,\n interactiveKey: (task: unknown) =>\n stableKey(\n options.interactiveIdempotencyKey?.({\n ...baseInput,\n task,\n }) ??\n derivedKey('supervised-interactive-session', {\n provider: provider.name,\n assignmentId,\n parentNodeId: spawnContext?.parentNodeId,\n profile: spec.profile,\n task,\n }),\n 'interactive idempotency key',\n ),\n holderId: (task: unknown) => {\n const selected =\n typeof options.holderId === 'function'\n ? options.holderId({ ...baseInput, task })\n : options.holderId\n return stableKey(\n selected ??\n `runtime-interactive-worker:${canonicalCandidateDigest({\n provider: provider.name,\n assignmentId,\n })}`,\n 'interactive holder id',\n )\n },\n initialPrompt: options.initialPrompt,\n cwd: options.cwd,\n cols: options.cols,\n rows: options.rows,\n runtime,\n pollIntervalMs: options.pollIntervalMs,\n destroyEnvironmentOnTeardown: options.destroyEnvironmentOnTeardown,\n executionAttemptId: ctx.node?.attemptId,\n nodeId: ctx.node?.nodeId,\n admission: admissionWriter(ctx, provider.name, ctx.node?.nodeId),\n })\n\n const spec: AgentSpec = {\n profile,\n harness: null,\n executorFactory,\n ...(spawnContext?.execution ? { execution: spawnContext.execution } : {}),\n }\n return {\n name,\n act: async () => {\n throw new Error(\n 'workerFromInteractiveProvider: interactive workers execute through executorSpec',\n )\n },\n executorSpec: spec,\n } as Agent<unknown, InteractiveWorkerResult> & { executorSpec: AgentSpec }\n }\n}\n\ninterface InteractiveExecutorInput {\n readonly provider: AgentEnvironmentProvider\n readonly profile: AgentProfile\n readonly context?: WorkerSpawnContext\n readonly environment?: InteractiveWorkerEnvironment\n readonly environmentKey: string\n readonly interactiveKey: (task: unknown) => string\n readonly holderId: (task: unknown) => string\n readonly initialPrompt?: InteractiveWorkerOptions['initialPrompt']\n readonly cwd?: string\n readonly cols?: number\n readonly rows?: number\n readonly runtime: Runtime\n readonly pollIntervalMs?: number\n readonly destroyEnvironmentOnTeardown?: boolean\n readonly executionAttemptId?: string\n readonly nodeId?: string\n readonly admission: InteractiveAdmissionWriter\n}\n\nfunction interactiveExecutor(input: InteractiveExecutorInput): Executor<InteractiveWorkerResult> {\n const attemptId =\n input.executionAttemptId ?? newExecutionAttemptId(input.nodeId ?? input.environmentKey)\n const localController = new AbortController()\n const inbox = createInbox()\n let handle: RetainedInteractiveRunHandle | undefined\n let createdEnvironment: AgentEnvironment | undefined\n let environmentId: string | undefined\n let artifact: ExecutorResult<InteractiveWorkerResult> | undefined\n let activeLink: ReturnType<typeof linkAbort> | undefined\n let startPromise: Promise<RetainedInteractiveRunHandle> | undefined\n let executeStarted = false\n let readyResolve!: (session: WorkerInteractiveSession) => void\n const ready = new Promise<WorkerInteractiveSession>((resolve) => {\n readyResolve = resolve\n })\n const stopOperations = new Map<string, Promise<ExecutorCancellation>>()\n const memoryAdmissions = new Map<string, RetainedInteractiveAdmission>()\n let teardownComplete = false\n let teardownPromise: Promise<{ destroyed: boolean }> | undefined\n let flushChain: Promise<void> = Promise.resolve()\n let controlError: unknown\n\n const executor: Executor<InteractiveWorkerResult> = {\n runtime: input.runtime,\n teardownTimeoutMs: INTERACTIVE_TEARDOWN_TIMEOUT_MS,\n execute(task, signal): AsyncIterable<UsageEvent> {\n if (executeStarted || teardownComplete || teardownPromise !== undefined) {\n throw new Error('workerFromInteractiveProvider: execute() may only be called once')\n }\n executeStarted = true\n startPromise = startInteractive(task, signal)\n return runInteractive(signal)\n },\n deliver(message: unknown): boolean {\n if (teardownComplete || teardownPromise !== undefined) return false\n const accepted = inbox.deliver(message)\n if (accepted) void flushInbox()\n return accepted\n },\n interactive(): WorkerInteractiveSession {\n return handle\n ? { status: 'available', handle }\n : { status: 'unavailable', reason: 'interactive-session-not-started' }\n },\n interactiveReady(): Promise<WorkerInteractiveSession> {\n return ready\n },\n async cancel(request): Promise<ExecutorCancellation> {\n const existing = stopOperations.get(request.operationId)\n if (existing) return existing\n const operation = stopInteractive(request.operationId, request.reason, request.signal)\n const tracked = operation.then((result) => {\n if (result.status === 'unknown' && stopOperations.get(request.operationId) === tracked) {\n stopOperations.delete(request.operationId)\n }\n return result\n })\n stopOperations.set(request.operationId, tracked)\n return tracked\n },\n teardown(grace): Promise<{ destroyed: boolean }> {\n void grace\n if (teardownComplete) return Promise.resolve({ destroyed: true })\n if (teardownPromise !== undefined) return teardownPromise\n const pending = teardownInteractive()\n teardownPromise = pending.then(\n (result) => {\n teardownComplete = true\n return result\n },\n (error) => {\n teardownPromise = undefined\n throw error\n },\n )\n return teardownPromise\n },\n resultArtifact(): ExecutorResult<InteractiveWorkerResult> {\n if (!artifact) {\n throw new Error(\n 'workerFromInteractiveProvider: resultArtifact() read before execution settled',\n )\n }\n return artifact\n },\n }\n\n const declaredEnvironment = input.environment\n ? retainedCreateMaterial({\n ...input.environment,\n profile: input.profile,\n idempotencyKey: input.environmentKey,\n })\n : null\n const profileModel = concreteProfileModel(input.profile)\n const plannedDeclaration = {\n effectiveProfile: input.profile,\n backend: input.provider.name,\n model: profileModel\n ? { status: 'known' as const, id: profileModel }\n : { status: 'unknown' as const, reason: 'provider selected the model' },\n execution: { kind: 'interactive-session', id: input.nodeId ?? input.environmentKey },\n materializer: 'retained-interactive-provider',\n plan: {\n kind: 'retained-interactive-provider',\n provider: input.provider.name,\n environment: declaredEnvironment,\n environmentIdempotencyKey: input.environmentKey,\n destroyEnvironmentOnTeardown: input.destroyEnvironmentOnTeardown !== false,\n },\n }\n attestRuntimeOwnedPendingExecutor(executor, input.runtime, plannedDeclaration, {\n attemptId,\n binding: {\n provider: input.provider.name,\n environmentIdempotencyKey: input.environmentKey,\n nodeId: input.nodeId ?? null,\n },\n descriptor: {\n kind: 'interactive-session',\n provider: input.provider.name,\n transport: 'agent-environment',\n },\n })\n\n async function startInteractive(\n task: unknown,\n signal: AbortSignal,\n ): Promise<RetainedInteractiveRunHandle> {\n try {\n activeLink = linkAbort(signal, localController.signal)\n const initialPrompt =\n typeof input.initialPrompt === 'function'\n ? input.initialPrompt(task, {\n provider: input.provider.name,\n profile: input.profile,\n ...(input.context === undefined ? {} : { context: input.context }),\n task,\n ...(input.nodeId === undefined ? {} : { nodeId: input.nodeId }),\n })\n : (input.initialPrompt ?? taskToPrompt(task))\n if (typeof initialPrompt !== 'string') {\n throw new Error('workerFromInteractiveProvider: initialPrompt must return a string')\n }\n const interactiveIdempotencyKey = input.interactiveKey(task)\n const started = await startRetainedInteractiveRun({\n provider: {\n ...input.provider,\n async create(environmentInput): Promise<AgentEnvironment> {\n const environment = await input.provider.create!(environmentInput)\n createdEnvironment = environment\n return environment\n },\n },\n environment: {\n ...(input.environment ?? {}),\n profile: input.profile,\n idempotencyKey: input.environmentKey,\n },\n interactiveIdempotencyKey,\n ...(initialPrompt.length === 0 ? {} : { initialPrompt }),\n ...(input.cwd === undefined ? {} : { cwd: input.cwd }),\n ...(input.cols === undefined ? {} : { cols: input.cols }),\n ...(input.rows === undefined ? {} : { rows: input.rows }),\n onAdmission: async (admission) => {\n environmentId =\n admission.phase === 'interactive_environment' ? admission.environmentId : environmentId\n const existing = memoryAdmissions.get(admission.phase)\n if (existing !== undefined) {\n if (canonicalCandidateDigest(existing) !== canonicalCandidateDigest(admission)) {\n throw new Error(\n `interactive admission phase '${admission.phase}' changed across retry`,\n )\n }\n } else {\n memoryAdmissions.set(\n admission.phase,\n detachedSnapshot(admission, 'interactive admission'),\n )\n }\n await input.admission(admission)\n },\n signal: activeLink.signal,\n })\n finalizeRuntimeOwnedPendingExecutor(\n executor,\n {\n ...plannedDeclaration,\n execution: { kind: 'interactive-session', id: started.ref.run.executionId },\n plan: {\n ...plannedDeclaration.plan,\n environmentId: started.ref.run.environmentId,\n interactiveIdempotencyKey,\n },\n },\n {\n attemptId,\n binding: {\n provider: input.provider.name,\n ref: started.ref,\n environmentId: started.ref.run.environmentId,\n },\n descriptor: {\n kind: 'interactive-session',\n provider: input.provider.name,\n transport: 'agent-environment',\n },\n },\n )\n handle = started\n readyResolve({ status: 'available', handle: started })\n void flushInbox()\n return started\n } catch (error) {\n readyResolve({ status: 'unavailable', reason: unavailableReason(error) })\n activeLink?.release()\n throw error\n }\n }\n\n async function* runInteractive(signal: AbortSignal): AsyncIterable<UsageEvent> {\n const startedAt = Date.now()\n try {\n const current = await startPromise\n if (current === undefined) {\n throw new Error('workerFromInteractiveProvider: interactive start did not begin')\n }\n yield { kind: 'iteration' }\n // Native TUI sessions do not expose a complete turn receipt. These zero counters are an\n // observed floor and the explicit false markers keep the run's accounting honest.\n yield { kind: 'tokens', input: 0, output: 0, tokensKnown: false }\n yield { kind: 'cost', usd: 0, usdKnown: false, provenance: 'uncaptured' }\n let status: AgentInteractiveSessionStatus | undefined\n for (;;) {\n if (signal.aborted || localController.signal.aborted) {\n throw abortError(\n signal.aborted ? signal : localController.signal,\n 'interactive execution aborted',\n )\n }\n status = await current.status({ signal: activeLink?.signal })\n await flushChain\n if (controlError !== undefined) throw controlErrorValue(controlError)\n if (status.state !== 'running') break\n await sleep(input.pollIntervalMs ?? 100, activeLink?.signal)\n }\n const finished = status\n const output: InteractiveWorkerResult = {\n provider: input.provider.name,\n environmentId: current.ref.run.environmentId,\n sessionId: current.ref.run.sessionId,\n executionId: current.ref.run.executionId,\n state: finished?.state === 'exited' ? 'exited' : 'unknown',\n ref: current.ref,\n ...(finished?.state === 'exited' && finished.reason ? { reason: finished.reason } : {}),\n ...(finished?.state === 'exited' && finished.exitCode !== undefined\n ? { exitCode: finished.exitCode }\n : {}),\n ...(finished?.state === 'exited' && finished.exitSignal !== undefined\n ? { exitSignal: finished.exitSignal }\n : {}),\n }\n const spent: Spend = {\n iterations: 1,\n tokens: { input: 0, output: 0 },\n tokensKnown: false,\n usd: 0,\n usdKnown: false,\n ms: Date.now() - startedAt,\n }\n artifact = {\n outRef: contentAddress(output),\n out: output,\n spent,\n }\n } finally {\n activeLink?.release()\n }\n }\n\n async function flushInbox(): Promise<void> {\n flushChain = flushChain.then(async () => {\n try {\n if (!handle) return\n const messages = inbox.drain()\n if (messages.length === 0) return\n const prompt = inbox.fold(messages)\n const operationId = `interactive-prompt-${canonicalCandidateDigest({\n ref: handle.ref,\n prompt,\n }).slice('sha256:'.length)}`\n const control = await claimRetainedInteractiveControl({\n handle,\n holderId: input.holderId(undefined),\n })\n const material = {\n operationId,\n ref: handle.ref,\n control,\n prompt,\n }\n const command: AgentInteractiveSessionPromptCommand = {\n ...material,\n requestDigest: agentInteractiveSessionPromptRequestDigest(material),\n }\n await handle.sendPrompt(command)\n } catch (error) {\n controlError ??= error\n }\n })\n await flushChain\n }\n\n async function stopInteractive(\n operationId: string,\n reason?: string,\n signal?: AbortSignal,\n ): Promise<ExecutorCancellation> {\n const observedAt = new Date().toISOString()\n if (!handle) {\n localController.abort(reason ?? 'interactive cancellation requested')\n return {\n status: 'unknown',\n effect: 'cancel_requested',\n observedAt,\n detail: 'interactive process has not published a provider reference',\n }\n }\n try {\n const control = await claimRetainedInteractiveControl({\n handle,\n holderId: input.holderId(undefined),\n signal,\n })\n const material = { operationId, ref: handle.ref, control }\n const command: AgentInteractiveSessionStopCommand = {\n ...material,\n requestDigest: agentInteractiveSessionStopRequestDigest(material),\n }\n const acknowledgement = await handle.stop(\n command,\n signal === undefined ? undefined : { signal },\n )\n localController.abort(reason ?? 'interactive cancellation requested')\n return cancellationFromAcknowledgement(acknowledgement, observedAt)\n } catch (error) {\n localController.abort(reason ?? 'interactive cancellation requested')\n return {\n status: 'unknown',\n effect: 'cancel_requested',\n observedAt,\n detail: error instanceof Error ? error.message : String(error),\n evidence: { operationId },\n }\n }\n }\n\n async function teardownInteractive(): Promise<{ destroyed: boolean }> {\n localController.abort('interactive worker teardown')\n activeLink?.release()\n await startPromise?.catch(() => undefined)\n if (handle) {\n const status = await safeStatus(handle)\n if (status?.state === 'running') {\n const operationId = `interactive-teardown-${canonicalCandidateDigest(handle.ref).slice(\n 'sha256:'.length,\n )}`\n const cancellation = await stopInteractive(operationId, 'interactive worker teardown')\n if (cancellation.status === 'rejected' || cancellation.status === 'unknown') {\n throw new Error(cancellation.detail ?? 'interactive teardown was not acknowledged')\n }\n }\n }\n await destroyEnvironment()\n return { destroyed: true }\n }\n\n async function destroyEnvironment(): Promise<void> {\n if (input.destroyEnvironmentOnTeardown === false) return\n if (createdEnvironment !== undefined) {\n await destroyInteractiveEnvironment(createdEnvironment)\n return\n }\n if (!input.provider.get) return\n // The exact provider reference is durable and remains available even when the admission\n // callback was interrupted after the environment was created. Use it as the cleanup identity\n // so an aborted provider signal cannot turn a real environment into an unconfirmed leak.\n const cleanupEnvironmentId = environmentId ?? handle?.ref.run.environmentId\n if (!cleanupEnvironmentId) return\n const environment = await input.provider.get(cleanupEnvironmentId)\n if (environment !== undefined && environment !== null) {\n await destroyInteractiveEnvironment(environment)\n }\n }\n\n return executor\n}\n\nfunction admissionWriter(\n ctx: ExecutorContext,\n provider: string,\n workerId: string | undefined,\n): InteractiveAdmissionWriter {\n const candidate = ctx.seams[interactiveAdmissionSeamKey]\n if (typeof candidate === 'function') {\n return async (admission) => {\n await (candidate as (value: RetainedInteractiveAdmission) => Promise<void>)(admission)\n }\n }\n // In-memory runs still need a real hook because retained-start refuses an omitted hook. The\n // durable Scope path always supplies the Runtime-owned writer above; this fallback is explicit\n // and process-local, never mistaken for restart evidence.\n const records = new Map<string, RetainedInteractiveAdmission>()\n return async (admission) => {\n const prior = records.get(admission.phase)\n if (prior && canonicalCandidateDigest(prior) !== canonicalCandidateDigest(admission)) {\n throw new Error(\n `worker ${workerId ?? '(unscoped)'} provider ${provider} admission changed in memory`,\n )\n }\n records.set(admission.phase, detachedSnapshot(admission, 'interactive admission'))\n }\n}\n\nfunction derivedKey(kind: string, value: unknown): string {\n return `${kind}-${canonicalCandidateDigest(value).slice('sha256:'.length)}`\n}\n\nfunction stableKey(value: string, label: string): string {\n if (typeof value !== 'string' || value.trim().length === 0) {\n throw new Error(`${label} must be a non-empty string`)\n }\n const key = value.trim()\n if (key.length > 256) throw new Error(`${label} must not exceed 256 bytes`)\n return key\n}\n\nfunction unavailableReason(\n error: unknown,\n): 'provider-has-no-interactive-contract' | 'interactive-binding-stale' {\n const message = error instanceof Error ? error.message : String(error)\n return message.includes('interactive') || message.includes('Interactive')\n ? 'provider-has-no-interactive-contract'\n : 'interactive-binding-stale'\n}\n\nfunction cancellationFromAcknowledgement(\n acknowledgement: AgentInteractiveSessionStopAcknowledgement,\n observedAt: string,\n): ExecutorCancellation {\n const status =\n acknowledgement.status === 'accepted' || acknowledgement.status === 'replayed'\n ? 'accepted'\n : acknowledgement.status === 'conflict'\n ? 'rejected'\n : 'unknown'\n const effect =\n acknowledgement.effect === 'stopped'\n ? 'cancelled'\n : acknowledgement.effect === 'not_live'\n ? 'not_live'\n : acknowledgement.effect === 'stop_requested'\n ? 'cancel_requested'\n : 'unknown'\n return {\n status,\n effect,\n observedAt,\n ...(acknowledgement.message === undefined ? {} : { detail: acknowledgement.message }),\n evidence: {\n operationId: acknowledgement.operationId,\n requestDigest: acknowledgement.requestDigest,\n providerStatus: acknowledgement.status,\n providerEffect: acknowledgement.effect,\n },\n }\n}\n\nfunction controlErrorValue(error: unknown): Error {\n return error instanceof Error ? error : new Error(String(error))\n}\n\nasync function safeStatus(\n handle: RetainedInteractiveRunHandle,\n): Promise<AgentInteractiveSessionStatus | undefined> {\n let timer: ReturnType<typeof setTimeout> | undefined\n const timeout = new Promise<undefined>((resolve) => {\n timer = setTimeout(() => resolve(undefined), 100)\n timer.unref?.()\n })\n try {\n // A provider environment created with the worker's abort signal may reject or hang all\n // subsequent calls after the scope begins teardown. Keep status best-effort and let the fresh\n // environment lookup below prove release without spending the teardown acknowledgement window\n // on a stale connection.\n return await Promise.race([handle.status(), timeout])\n } catch {\n return undefined\n } finally {\n if (timer !== undefined) clearTimeout(timer)\n }\n}\n\nasync function sleep(ms: number, signal?: AbortSignal): Promise<void> {\n await new Promise<void>((resolve) => {\n if (signal?.aborted) {\n resolve()\n return\n }\n let settled = false\n const onAbort = (): void => {\n if (settled) return\n settled = true\n clearTimeout(timer)\n signal?.removeEventListener('abort', onAbort)\n resolve()\n }\n const timer = setTimeout(\n () => {\n if (settled) return\n settled = true\n signal?.removeEventListener('abort', onAbort)\n resolve()\n },\n Math.max(0, ms),\n )\n signal?.addEventListener('abort', onAbort, { once: true })\n })\n}\n","/**\n * Public one-call composition for a durable Runtime supervisor proof run.\n *\n * This is intentionally a thin owner of existing Runtime primitives. The supervisor owns the\n * root abort channel and join barrier, Scope owns worker admission and lifecycle, and the provider\n * owns the environment and interactive process. External clients receive identifiers and opaque\n * handles; they do not receive a second supervisor protocol or a copy of provider state.\n *\n * @experimental\n */\n\nimport { randomUUID } from 'node:crypto'\nimport { mkdirSync } from 'node:fs'\nimport { tmpdir } from 'node:os'\nimport { dirname, join, resolve } from 'node:path'\nimport {\n type AgentProfile,\n agentProfileSchema,\n canonicalAgentProfileDigest,\n canonicalCandidateDigest,\n} from '@tangle-network/agent-interface'\nimport type {\n AgentEnvironmentCapabilities,\n AgentEnvironmentProvider,\n} from '@tangle-network/agent-interface/environment-provider'\nimport type { McpToolDescriptor } from '../../mcp/server'\nimport { createCoordinationTools } from '../../mcp/tools/coordination'\nimport { sandboxClientAsProvider } from '../environment-provider'\nimport type { SandboxClient } from '../types'\nimport { createCancelAcknowledger, createSteerAcknowledger } from './coordination-driver'\nimport { writeAtomicDurableFile } from './durable-file'\nimport {\n type InteractiveWorkerEnvironment,\n workerFromInteractiveProvider,\n} from './interactive-worker'\nimport { createFileRunContext } from './run-context'\nimport { supervisorRunDir } from './run-layout'\nimport { createRootHandle, createSupervisor } from './supervisor'\nimport type { Agent, Budget, Scope, SpawnEvent, SupervisedResult } from './types'\nimport { readWorkerInteractiveBinding } from './worker-interactive'\n\nconst DEFAULT_POLL_MS = 25\nconst ROOT_MAX_ITERATIONS = 100\nconst ROOT_MAX_TOKENS = 100_000\nconst WORKER_MAX_ITERATIONS = 25\nconst WORKER_MAX_TOKENS = 25_000\n\n/** Caller-supplied provider or Sandbox SDK connection for one supervisor run. */\nexport interface ProvisionSupervisorConnection {\n /** A fully constructed provider. This is the preferred programmatic seam and is testable. */\n readonly provider?: AgentEnvironmentProvider\n /** A Sandbox SDK-compatible client. Runtime adapts it to the public provider contract. */\n readonly client?: SandboxClient\n /** Alias for `client`, accepted so callers can pass their existing connection object. */\n readonly sandboxClient?: SandboxClient\n /** Sandbox API endpoint used only when Runtime constructs the SDK client. */\n readonly endpoint?: string\n /** Transient Sandbox API key used only when Runtime constructs the SDK client. */\n readonly apiKey?: string\n /** Connection kind is descriptive only and does not select a hidden implementation. */\n readonly kind?: string\n}\n\n/** Input to the public Runtime supervisor provisioner. */\nexport interface ProvisionSupervisorRequest {\n readonly invocationId: string\n /** Caller-owned task assigned to the first interactive worker. */\n readonly task: string\n /** Canonical profile assigned to the first interactive worker. */\n readonly profile: AgentProfile\n /** Generic provider create fields forwarded to the interactive worker. */\n readonly workerEnvironment?: InteractiveWorkerEnvironment\n /** Root directory for Runtime-owned `.agent/supervisor` state. */\n readonly workspaceDir?: string\n /** Maximum wall-clock time for the complete supervisor lifecycle, including cleanup. Omit for no lifecycle deadline. */\n readonly timeoutMs?: number\n /** Poll cadence for lifecycle/control readiness. */\n readonly pollMs?: number\n /** Explicit provider, client, or endpoint and API key for one provider connection. */\n readonly connection: ProvisionSupervisorConnection\n}\n\n/** Exact owner-scoped cleanup receipt returned after Runtime releases the run resources. */\nexport interface SupervisorCleanupReceipt {\n readonly status: 'completed'\n readonly rootDir: string\n readonly supervisorId: string\n readonly workerId: string\n readonly supervisorStatus: string\n readonly workerStatus: 'running' | 'done' | 'down' | 'cancelled'\n readonly resourcesReleased: true\n readonly remainingResources: readonly []\n}\n\n/** Handles for one Runtime-owned supervisor and its first interactive worker. */\nexport interface ProvisionedSupervisor {\n readonly rootDir: string\n readonly supervisorId: string\n readonly workerId: string\n /** Provider source for `attachWorker`; omitted only when resolution did not produce one. */\n readonly providers?: AgentEnvironmentProvider\n /** Capability-derived terminal takeover requirement. */\n readonly terminalTakeover: 'required' | 'unsupported' | 'unspecified'\n cleanup(): Promise<SupervisorCleanupReceipt>\n}\n\nclass SupervisorProvisionUnavailableError extends Error {\n readonly unavailable = true as const\n\n constructor(message: string, cause?: unknown) {\n super(message, cause === undefined ? undefined : { cause })\n this.name = 'SupervisorProvisionUnavailableError'\n }\n}\n\ninterface MutableState {\n readonly id: string\n status: string\n readonly task: string\n readonly workspaceDir: string\n readonly budget: number\n readonly workerModel?: string\n readonly startedAt: string\n completedAt?: string\n}\n\ninterface Deferred<T> {\n readonly promise: Promise<T>\n resolve(value: T): void\n reject(error: unknown): void\n readonly settled: () => boolean\n}\n\n/**\n * Provision one real provider-backed worker and keep its owning manager alive for controls.\n *\n * The root manager does not use a model. It runs the same coordination tools used by a driver in a\n * small deterministic loop, so durable steer and cancel requests are acknowledged by the owning\n * Runtime turn loop and never by a test-only shortcut. The caller owns profile, task, and provider\n * connection selection; Runtime does not infer them from process environment variables.\n */\nexport async function provisionSupervisor(\n request: ProvisionSupervisorRequest,\n): Promise<ProvisionedSupervisor> {\n const input = normalizeRequest(request)\n const provider = await resolveProvider(input)\n const capabilities = await readCapabilities(provider)\n const terminalTakeover = terminalCapability(capabilities)\n const profile = input.profile\n const rootDir = resolve(input.workspaceDir ?? makeWorkspaceDir())\n mkdirSync(rootDir, { recursive: true })\n const supervisorId = supervisorIdFor(input.invocationId)\n const eventDir = supervisorRunDir(rootDir, supervisorId)\n const statePath = join(eventDir, 'state.json')\n mkdirSync(dirname(eventDir), { recursive: true })\n try {\n // The run directory is the cross-process invocation lock. A non-recursive mkdir closes the\n // duplicate-start race before any journal or provider resource is created.\n mkdirSync(eventDir)\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === 'EEXIST') {\n throw unavailable(\n `Runtime supervisor '${supervisorId}' already exists at '${eventDir}'; use a new invocationId`,\n )\n }\n throw error\n }\n\n const context = createFileRunContext(eventDir)\n const startedAtMs = Date.now()\n const state: MutableState = {\n id: supervisorId,\n status: 'running',\n task: input.task,\n workspaceDir: rootDir,\n budget: ROOT_MAX_TOKENS,\n ...(profile.model?.default === undefined ? {} : { workerModel: profile.model.default }),\n startedAt: new Date(startedAtMs).toISOString(),\n }\n writeState(statePath, state)\n\n const rootHandle = createRootHandle<unknown>()\n const supervisor = createSupervisor<unknown, unknown>()\n supervisor.attach(rootHandle)\n const workerSpawned = deferred<string>()\n const workerRunning = deferred<void>()\n const workerProfile = profile\n const workerEnvironment = {\n ...(input.workerEnvironment ?? {}),\n metadata: {\n ...(input.workerEnvironment?.metadata ?? {}),\n runtime: 'agent-runtime',\n invocationId: input.invocationId,\n },\n name: input.workerEnvironment?.name ?? `runtime-${supervisorId}`,\n }\n const makeWorkerAgent = workerFromInteractiveProvider(provider, {\n environment: workerEnvironment,\n pollIntervalMs: input.pollMs,\n destroyEnvironmentOnTeardown: true,\n })\n\n const rootAgent: Agent<unknown, unknown> = {\n name: 'runtime-supervisor-root',\n async act(_task: unknown, scope: Scope<unknown>): Promise<unknown> {\n const coord = createCoordinationTools({\n scope,\n blobs: context.blobs,\n makeWorkerAgent,\n perWorker: workerBudget(),\n // Keep each supervisor turn bounded so control requests are observed while the remote\n // worker is running. The coordination tool keeps one settlement drain in flight, so a\n // timeout only ends this turn; it cannot lose the eventual worker event.\n awaitTimeoutMs: input.pollMs,\n })\n await coord.ready()\n const spawn = findTool(coord.tools, 'spawn_worker')\n const awaitEvent = findTool(coord.tools, 'await_event')\n const result = await spawn.handler({\n profile: workerProfile,\n task: input.task,\n label: 'interactive-worker',\n })\n const childId = workerIdFromSpawn(result)\n workerSpawned.resolve(childId)\n\n for (;;) {\n const child = scope.view.nodes.find((node) => node.id === childId)\n if (child?.status === 'running') break\n if (\n child === undefined ||\n child.status === 'done' ||\n child.status === 'failed' ||\n child.status === 'cancelled'\n ) {\n throw new Error(`Runtime supervisor worker '${childId}' ended before becoming live`)\n }\n await delay(input.pollMs)\n }\n workerRunning.resolve()\n\n const steerAcknowledger = createSteerAcknowledger({\n dir: eventDir,\n coord,\n now: Date.now,\n ownerId: scope.view.root,\n })\n const cancelAcknowledger = createCancelAcknowledger({\n dir: eventDir,\n coord,\n scope,\n now: Date.now,\n ownerId: scope.view.root,\n controlScope: 'run',\n })\n try {\n while (true) {\n await steerAcknowledger.pass('turn')\n cancelAcknowledger.pass('turn')\n // `await_event` owns the single scope cursor drain. Calling `scope.next()` directly here\n // would bypass the coordination ledger and make a real cancellation look unknown.\n const event = await awaitEvent.handler({ kinds: ['settled'] })\n if (isSettledEvent(event)) {\n await steerAcknowledger.pass('final')\n cancelAcknowledger.pass('final')\n return undefined\n }\n if (isIdleEvent(event)) {\n throw new Error(`Runtime supervisor worker '${childId}' ended without a settlement`)\n }\n if (!isPendingEvent(event)) {\n throw new Error(`Runtime supervisor returned an invalid settlement response`)\n }\n }\n } finally {\n // The final pass closes requests that landed after the last turn. It is idempotent with the\n // normal path and prevents an admitted operation from remaining open after root teardown.\n await steerAcknowledger.pass('final')\n cancelAcknowledger.pass('final')\n cancelAcknowledger.finish()\n }\n },\n }\n const runBudget = rootBudget(input.timeoutMs)\n let runResult: SupervisedResult<unknown> | undefined\n let runError: unknown\n let runSettled = false\n const runPromise = supervisor\n .run(rootAgent, input.task, {\n budget: runBudget,\n rootIdentity: {\n profileDigest: canonicalAgentProfileDigest(profile),\n taskDigest: canonicalCandidateDigest(input.task),\n },\n runId: supervisorId,\n ...context,\n interactiveBindingDir: eventDir,\n maxDepth: 1,\n maxLiveWorkers: 1,\n })\n .then(\n (result) => {\n runResult = result\n runSettled = true\n updateStateFromResult(state, result)\n writeState(statePath, state)\n return result\n },\n (error) => {\n runError = error\n runSettled = true\n state.status = 'down'\n state.completedAt = new Date().toISOString()\n writeState(statePath, state)\n throw error\n },\n )\n void runPromise.catch(() => undefined)\n\n let workerId: string\n try {\n workerId = await waitForWorkerSpawn(workerSpawned.promise, runPromise, input.timeoutMs)\n await waitForWorkerRunning(workerRunning.promise, runPromise, input.timeoutMs)\n if (terminalTakeover === 'required') {\n await waitForInteractiveBinding(eventDir, workerId, runPromise, input.timeoutMs, input.pollMs)\n }\n } catch (error) {\n if (!runSettled) {\n try {\n rootHandle.abort('supervisor provisioning failed')\n } catch {\n // The supervisor may have released the handle between the state read and this abort.\n }\n }\n await runPromise.catch(() => undefined)\n throw error\n }\n\n let cleanupPromise: Promise<SupervisorCleanupReceipt> | undefined\n const cleanup = async (): Promise<SupervisorCleanupReceipt> => {\n cleanupPromise ??= (async () => {\n if (!runSettled) {\n try {\n rootHandle.abort('supervisor cleanup')\n } catch {\n // A concurrent run completion already released the handle.\n }\n }\n const result = await runPromise.catch((error) => {\n runError = error\n return undefined\n })\n if (result !== undefined) runResult = result\n if (runError !== undefined) throw runError\n const finalEvents = await waitForWorkerTerminal(\n context.journal,\n supervisorId,\n workerId,\n input.timeoutMs,\n input.pollMs,\n )\n const workerStatus = workerStatusFromEvents(finalEvents, workerId)\n if (workerStatus === 'running') {\n throw new Error(`Runtime supervisor worker '${workerId}' did not reach a terminal state`)\n }\n if (runResult?.teardownUnconfirmed?.length) {\n throw new Error(\n `Runtime supervisor cleanup could not confirm ${runResult.teardownUnconfirmed.length} resource(s) released`,\n )\n }\n const supervisorStatus = state.status\n state.completedAt ??= new Date().toISOString()\n writeState(statePath, state)\n return Object.freeze({\n status: 'completed' as const,\n rootDir,\n supervisorId,\n workerId,\n supervisorStatus,\n workerStatus,\n resourcesReleased: true as const,\n remainingResources: Object.freeze([]) as readonly [],\n })\n })()\n return cleanupPromise\n }\n\n return Object.freeze({\n rootDir,\n supervisorId,\n workerId,\n providers: provider,\n terminalTakeover,\n cleanup,\n })\n}\n\nfunction normalizeRequest(request: ProvisionSupervisorRequest): ProvisionSupervisorRequest & {\n readonly invocationId: string\n readonly task: string\n readonly timeoutMs: number | undefined\n readonly pollMs: number\n readonly profile: AgentProfile\n readonly connection: ProvisionSupervisorConnection\n} {\n const invocationId = request.invocationId.trim()\n if (!invocationId) throw new SupervisorProvisionUnavailableError('invocationId is required')\n const task = request.task.trim()\n if (!task) throw new SupervisorProvisionUnavailableError('task is required')\n const profile = resolveProfile(request.profile)\n if (request.connection === undefined) {\n throw new SupervisorProvisionUnavailableError('provider connection is required')\n }\n const timeoutMs =\n request.timeoutMs === undefined ? undefined : positiveNumber(request.timeoutMs, 'timeoutMs')\n const pollMs = positiveNumber(request.pollMs ?? DEFAULT_POLL_MS, 'pollMs')\n return { ...request, invocationId, task, timeoutMs, pollMs, profile }\n}\n\nfunction positiveNumber(value: number, name: string): number {\n if (!Number.isSafeInteger(value) || value <= 0) {\n throw new SupervisorProvisionUnavailableError(`${name} must be a positive safe integer`)\n }\n return value\n}\n\nfunction makeWorkspaceDir(): string {\n return join(tmpdir(), `agent-runtime-supervisor-${randomUUID()}`)\n}\n\nfunction supervisorIdFor(invocationId: string): string {\n const digest = canonicalCandidateDigest({ kind: 'runtime-supervisor', invocationId })\n return `runtime-supervisor-${digest.slice('sha256:'.length)}`\n}\n\n/** A caller-supplied deadline covers the complete supervisor lifecycle from run start through cleanup. */\nfunction rootBudget(timeoutMs: number | undefined): Budget {\n return {\n maxIterations: ROOT_MAX_ITERATIONS,\n maxTokens: ROOT_MAX_TOKENS,\n ...(timeoutMs === undefined ? {} : { deadlineMs: timeoutMs }),\n }\n}\n\nfunction workerBudget(): Budget {\n return {\n maxIterations: WORKER_MAX_ITERATIONS,\n maxTokens: WORKER_MAX_TOKENS,\n }\n}\n\nfunction resolveProfile(profile: AgentProfile): AgentProfile {\n const parsed = agentProfileSchema.safeParse(profile)\n if (!parsed.success) {\n throw unavailable(\n `Runtime supervisor profile is invalid: ${parsed.error.issues\n .map((issue) => `${issue.path.join('.')}: ${issue.message}`)\n .join('; ')}`,\n )\n }\n return parsed.data\n}\n\nasync function resolveProvider(\n request: ProvisionSupervisorRequest,\n): Promise<AgentEnvironmentProvider> {\n const connection = request.connection\n if (connection === undefined) {\n throw unavailable('Runtime supervisor provider connection is required')\n }\n if (connection?.provider !== undefined) return requireReconnectProvider(connection.provider)\n const client = connection?.client ?? connection?.sandboxClient\n if (client !== undefined) {\n return requireReconnectProvider(sandboxClientAsProvider(client))\n }\n const apiKey = connection.apiKey?.trim()\n const endpoint = connection.endpoint?.trim()\n if (!apiKey || !endpoint) {\n throw unavailable(\n 'Runtime supervisor needs a provider/client or both connection.endpoint and connection.apiKey',\n )\n }\n let module: typeof import('@tangle-network/sandbox')\n try {\n module = await import('@tangle-network/sandbox')\n } catch (error) {\n throw unavailable('Runtime supervisor could not load the Sandbox SDK peer dependency', error)\n }\n const SandboxCtor = (module as { Sandbox?: new (config: unknown) => SandboxClient }).Sandbox\n if (SandboxCtor === undefined) throw unavailable('Sandbox SDK does not export a Sandbox client')\n const provider = sandboxClientAsProvider(new SandboxCtor({ apiKey, baseUrl: endpoint }))\n return requireReconnectProvider(provider)\n}\n\nfunction requireReconnectProvider(provider: AgentEnvironmentProvider): AgentEnvironmentProvider {\n if (!provider.name.trim()) throw unavailable('Runtime supervisor provider has no name')\n if (typeof provider.get !== 'function') {\n throw unavailable(\n `Runtime supervisor provider '${provider.name}' cannot reconnect environments`,\n )\n }\n return provider\n}\n\nasync function readCapabilities(\n provider: AgentEnvironmentProvider,\n): Promise<AgentEnvironmentCapabilities> {\n try {\n return await provider.capabilities()\n } catch (error) {\n throw unavailable(`Runtime supervisor could not read '${provider.name}' capabilities`, error)\n }\n}\n\nfunction terminalCapability(\n capabilities: AgentEnvironmentCapabilities,\n): 'required' | 'unsupported' | 'unspecified' {\n const interactive = capabilities.interactiveAgent\n if (interactive === undefined) return 'unsupported'\n const complete = [\n interactive.start,\n interactive.control,\n interactive.status,\n interactive.attach,\n interactive.reattach,\n interactive.sendPrompt,\n interactive.input,\n interactive.resize,\n interactive.stop,\n ].every((value) => value === true)\n return complete ? 'required' : 'unsupported'\n}\n\nfunction findTool(tools: readonly McpToolDescriptor[], name: string): McpToolDescriptor {\n const tool = tools.find((candidate) => candidate.name === name)\n if (tool === undefined)\n throw new Error(`Runtime supervisor coordination tool '${name}' is missing`)\n return tool\n}\n\nfunction workerIdFromSpawn(value: unknown): string {\n if (value === null || typeof value !== 'object' || Array.isArray(value)) {\n throw new Error('Runtime supervisor spawn did not return a worker id')\n }\n const workerId = (value as { workerId?: unknown }).workerId\n if (typeof workerId !== 'string' || !workerId.trim()) {\n throw new Error('Runtime supervisor spawn did not return a worker id')\n }\n return workerId\n}\n\nfunction isSettledEvent(value: unknown): boolean {\n return isObject(value) && value.type === 'settled'\n}\n\nfunction isIdleEvent(value: unknown): boolean {\n return isObject(value) && value.idle === true\n}\n\nfunction isPendingEvent(value: unknown): boolean {\n return isObject(value) && value.pending === true\n}\n\nfunction isObject(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null\n}\n\nasync function waitForWorkerSpawn(\n worker: Promise<string>,\n run: Promise<SupervisedResult<unknown>>,\n timeoutMs: number | undefined,\n): Promise<string> {\n return await withTimeout(\n Promise.race([\n worker,\n run.then(() => {\n throw new Error('Runtime supervisor ended before it spawned a worker')\n }),\n ]),\n timeoutMs,\n 'worker spawn',\n )\n}\n\nasync function waitForWorkerRunning(\n running: Promise<void>,\n run: Promise<SupervisedResult<unknown>>,\n timeoutMs: number | undefined,\n): Promise<void> {\n await withTimeout(\n Promise.race([\n running,\n run.then(() => {\n throw new Error('Runtime supervisor ended before the worker became live')\n }),\n ]),\n timeoutMs,\n 'worker readiness',\n )\n}\n\nasync function waitForInteractiveBinding(\n eventDir: string,\n workerId: string,\n run: Promise<SupervisedResult<unknown>>,\n timeoutMs: number | undefined,\n pollMs: number,\n): Promise<void> {\n await withTimeout(\n pollUntil(\n async () => {\n const binding = readWorkerInteractiveBinding(eventDir, workerId)\n if (binding?.status === 'available') return true\n if (binding?.status === 'unavailable') {\n throw unavailable(`Runtime worker '${workerId}' could not publish an interactive binding`)\n }\n return false\n },\n run,\n pollMs,\n ),\n timeoutMs,\n 'interactive terminal binding',\n )\n}\n\nasync function pollUntil(\n read: () => Promise<boolean> | boolean,\n run: Promise<SupervisedResult<unknown>>,\n pollMs: number,\n): Promise<void> {\n for (;;) {\n if (await read()) return\n await Promise.race([\n delay(pollMs),\n run.then(() => {\n throw new Error('Runtime supervisor ended before readiness was observed')\n }),\n ])\n }\n}\n\nasync function withTimeout<T>(\n promise: Promise<T>,\n timeoutMs: number | undefined,\n label: string,\n): Promise<T> {\n if (timeoutMs === undefined) return await promise\n let timer: ReturnType<typeof setTimeout> | undefined\n const timeout = new Promise<never>((_resolve, reject) => {\n timer = setTimeout(\n () => reject(unavailable(`Runtime supervisor timed out waiting for ${label}`)),\n timeoutMs,\n )\n if (typeof timer.unref === 'function') timer.unref()\n })\n try {\n return await Promise.race([promise, timeout])\n } finally {\n if (timer !== undefined) clearTimeout(timer)\n }\n}\n\nfunction delay(ms: number, keepAlive = false): Promise<void> {\n return new Promise((resolveDelay) => {\n const timer = setTimeout(resolveDelay, ms)\n if (!keepAlive && typeof timer.unref === 'function') timer.unref()\n })\n}\n\nfunction updateStateFromResult(state: MutableState, result: SupervisedResult<unknown>): void {\n state.status =\n result.kind === 'winner' ? 'done' : result.reason === 'cancelled' ? 'cancelled' : 'down'\n state.completedAt = new Date().toISOString()\n}\n\nfunction workerStatusFromEvents(\n events: readonly SpawnEvent[],\n workerId: string,\n): SupervisorCleanupReceipt['workerStatus'] {\n let status: SupervisorCleanupReceipt['workerStatus'] = 'running'\n let terminal = false\n for (const event of events) {\n if (event.id !== workerId) continue\n if (terminal) continue\n if (event.kind === 'spawned' || event.kind === 'progress') status = 'running'\n else if (event.kind === 'settled') {\n status = event.status === 'done' ? 'done' : 'down'\n terminal = true\n } else if (event.kind === 'cancelled') {\n status = 'cancelled'\n terminal = true\n }\n }\n return status\n}\n\nasync function waitForWorkerTerminal(\n journal: import('./types').SpawnJournal,\n root: string,\n workerId: string,\n timeoutMs: number | undefined,\n pollMs: number,\n): Promise<SpawnEvent[]> {\n const deadline = timeoutMs === undefined ? undefined : Date.now() + timeoutMs\n for (;;) {\n const events = await journal.loadTree(root)\n if (events !== undefined && workerStatusFromEvents(events, workerId) !== 'running') {\n return events\n }\n if (deadline !== undefined && Date.now() >= deadline) {\n throw unavailable(`Runtime supervisor timed out waiting for worker '${workerId}' to settle`)\n }\n // Cleanup is an explicit lifecycle operation. Keep this bounded poll referenced so a caller\n // awaiting cleanup cannot have Node exit while the provider is still committing the terminal\n // worker event.\n await delay(pollMs, true)\n }\n}\n\nfunction deferred<T>(): Deferred<T> {\n let done = false\n let resolveValue!: (value: T) => void\n let rejectValue!: (error: unknown) => void\n const promise = new Promise<T>((resolvePromise, rejectPromise) => {\n resolveValue = (value) => {\n if (done) return\n done = true\n resolvePromise(value)\n }\n rejectValue = (error) => {\n if (done) return\n done = true\n rejectPromise(error)\n }\n })\n return {\n promise,\n resolve: resolveValue,\n reject: rejectValue,\n settled: () => done,\n }\n}\n\nfunction unavailable(message: string, cause?: unknown): SupervisorProvisionUnavailableError {\n return new SupervisorProvisionUnavailableError(message, cause)\n}\n\nfunction writeState(path: string, state: MutableState): void {\n mkdirSync(dirname(path), { recursive: true })\n writeAtomicDurableFile(path, `${JSON.stringify(state)}\\n`, { mode: 0o600 })\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"provision-supervisor-DARqIVIZ.js","names":["abortError"],"sources":["../src/runtime/retained-interactive-control.ts","../src/runtime/supervise/interactive-worker.ts","../src/runtime/supervise/provision-supervisor.ts"],"sourcesContent":["import type { AgentInteractiveSessionControlClaim } from '@tangle-network/agent-interface'\nimport {\n agentInteractiveSessionControlClaimRequestDigest,\n canonicalCandidateDigest,\n} from '@tangle-network/agent-interface'\nimport type { RetainedInteractiveRunHandle } from './retained-interactive-types'\nimport { abortError } from './retained-run-binding'\n\nconst MAX_GENERATION_CONFLICTS = 8\n\n/** Input for acquiring write authority over one exact interactive process. @stable */\nexport interface ClaimRetainedInteractiveControlOptions {\n readonly handle: RetainedInteractiveRunHandle\n readonly holderId: string\n /** Last known provider generation. Zero discovers the current generation safely. */\n readonly expectedGeneration?: number\n readonly signal?: AbortSignal\n}\n\n/**\n * Acquire provider-issued write authority without reading authority from status.\n *\n * A new coordinator starts at generation zero. If another claim already exists,\n * the provider returns its public generation and this helper retries one new\n * compare-and-swap operation. Every generation has a deterministic operation\n * identifier, so retrying after an ambiguous response cannot create two claims.\n * @stable\n */\nexport async function claimRetainedInteractiveControl(\n options: ClaimRetainedInteractiveControlOptions,\n): Promise<AgentInteractiveSessionControlClaim> {\n const expected = options.expectedGeneration ?? 0\n if (!Number.isSafeInteger(expected) || expected < 0) {\n throw new Error('interactive control expectedGeneration must be a non-negative integer')\n }\n\n let generation = expected\n for (let conflict = 0; conflict <= MAX_GENERATION_CONFLICTS; conflict += 1) {\n if (options.signal?.aborted) throw abortError(options.signal.reason)\n const material = {\n operationId: controlClaimOperationId(options.handle, options.holderId, generation),\n ref: options.handle.ref,\n holderId: options.holderId,\n expectedGeneration: generation,\n }\n const acknowledgement = await options.handle.claimControl(\n {\n ...material,\n requestDigest: agentInteractiveSessionControlClaimRequestDigest(material),\n },\n options.signal === undefined ? undefined : { signal: options.signal },\n )\n if (acknowledgement.status === 'accepted' || acknowledgement.status === 'replayed') {\n const control = acknowledgement.control\n if (control === undefined) {\n throw new Error('provider accepted interactive control without returning its claim')\n }\n if (Date.parse(control.expiresAt) <= Date.now()) {\n throw new Error('provider returned an expired interactive control claim')\n }\n return control\n }\n if (\n acknowledgement.status !== 'conflict' ||\n acknowledgement.conflictReason !== 'generation_mismatch'\n ) {\n throw new Error(\n acknowledgement.status === 'unknown'\n ? 'interactive control claim outcome is unknown; retry the same acquisition'\n : 'interactive control claim operation conflicts with different request material',\n )\n }\n const current = acknowledgement.currentGeneration\n if (current === undefined || current <= generation) {\n throw new Error('provider returned a non-advancing interactive control generation')\n }\n generation = current\n }\n throw new Error('interactive control changed too often to acquire safely')\n}\n\nfunction controlClaimOperationId(\n handle: RetainedInteractiveRunHandle,\n holderId: string,\n expectedGeneration: number,\n): string {\n const digest = canonicalCandidateDigest({\n kind: 'retained-interactive-control-claim.v1',\n ref: handle.ref,\n holderId,\n expectedGeneration,\n })\n return `interactive-claim-${digest.slice('sha256:'.length, 'sha256:'.length + 40)}`\n}\n","/**\n * Runtime-owned worker seam for a provider's native interactive coding-agent process.\n *\n * This adapter composes the retained-interactive lifecycle. It does not create a second stream,\n * replay buffer, session id, or cancellation protocol. The provider owns process state; Scope owns\n * the supervised worker, journal, budget, and local control inbox.\n */\n\nimport { randomUUID } from 'node:crypto'\nimport {\n type AgentInteractiveSessionPromptCommand,\n type AgentInteractiveSessionRef,\n type AgentInteractiveSessionStatus,\n type AgentInteractiveSessionStopAcknowledgement,\n type AgentInteractiveSessionStopCommand,\n type AgentProfile,\n agentInteractiveSessionPromptRequestDigest,\n agentInteractiveSessionStopRequestDigest,\n canonicalCandidateDigest,\n} from '@tangle-network/agent-interface'\nimport type {\n AgentEnvironment,\n AgentEnvironmentProvider,\n CreateAgentEnvironmentInput,\n} from '@tangle-network/agent-interface/environment-provider'\nimport { contentAddress } from '../../durable/spawn-journal'\nimport type { MakeWorkerAgent, WorkerSpawnContext } from '../../mcp/tools/coordination'\nimport { destroyInteractiveEnvironment } from '../retained-interactive-lifecycle'\nimport type { RetainedInteractiveRunHandle } from '../retained-interactive-types'\nimport { claimRetainedInteractiveControl, startRetainedInteractiveRun } from '../retained-run'\nimport { retainedCreateMaterial } from '../retained-run-intent'\nimport type { RetainedInteractiveAdmission } from '../retained-run-types'\nimport { abortError, linkAbort } from './abortable'\nimport { executableAgentProfileSnapshot } from './executable-spec'\nimport { createInbox } from './inbox'\nimport {\n type InteractiveAdmissionWriter,\n interactiveAdmissionSeamKey,\n} from './interactive-admission'\nimport {\n attestRuntimeOwnedPendingExecutor,\n finalizeRuntimeOwnedPendingExecutor,\n newExecutionAttemptId,\n} from './materialization'\nimport { concreteProfileModel } from './model-policy'\nimport { detachedSnapshot } from './snapshot'\nimport { taskToPrompt } from './task-prompt'\nimport type {\n Agent,\n AgentSpec,\n Executor,\n ExecutorCancellation,\n ExecutorContext,\n ExecutorResult,\n Runtime,\n Spend,\n UsageEvent,\n WorkerInteractiveSession,\n} from './types'\n\n/** Environment fields supplied to every interactive worker after Runtime adds the exact profile. */\nexport type InteractiveWorkerEnvironment = Omit<\n CreateAgentEnvironmentInput,\n 'profile' | 'idempotencyKey' | 'signal'\n>\n\n/** Native interactive worker output. Provider usage is intentionally not fabricated. */\nexport interface InteractiveWorkerResult {\n readonly provider: string\n readonly environmentId: string\n readonly sessionId: string\n readonly executionId: string\n readonly state: 'exited' | 'unknown'\n readonly ref: AgentInteractiveSessionRef\n readonly reason?: string\n readonly exitCode?: number\n readonly exitSignal?: string\n}\n\n/** Configuration shared by every worker produced by `workerFromInteractiveProvider`. */\nexport interface InteractiveWorkerOptions {\n /** Provider create fields. Runtime supplies `profile`, the two idempotency keys, and `signal`. */\n readonly environment?: InteractiveWorkerEnvironment\n /** Stable environment identity override. Defaults to a digest of the exact worker assignment. */\n readonly environmentIdempotencyKey?: (input: InteractiveWorkerKeyInput) => string\n /** Stable interactive-session identity override. Defaults to a digest of assignment and task. */\n readonly interactiveIdempotencyKey?: (input: InteractiveWorkerKeyInput) => string\n /** Provider holder id used only while the worker sends a steer or stop command. */\n readonly holderId?: string | ((input: InteractiveWorkerKeyInput) => string)\n /** Initial prompt override. The exact worker task is the default prompt. */\n readonly initialPrompt?: string | ((task: unknown, input: InteractiveWorkerKeyInput) => string)\n readonly cwd?: string\n readonly cols?: number\n readonly rows?: number\n /** Runtime tag written into tree snapshots. Defaults to the provider name. */\n readonly runtime?: Runtime\n /** Poll delay used while waiting for the provider's native process to exit. */\n readonly pollIntervalMs?: number\n /** Destroy the provider environment after the process is terminal. Defaults to true. */\n readonly destroyEnvironmentOnTeardown?: boolean\n}\n\nconst INTERACTIVE_TEARDOWN_TIMEOUT_MS = 30_000\n\n/** Stable input available to key and holder functions. */\nexport interface InteractiveWorkerKeyInput {\n readonly provider: string\n readonly profile: AgentProfile\n readonly context?: WorkerSpawnContext\n readonly task?: unknown\n readonly nodeId?: string\n}\n\n/**\n * Build a `MakeWorkerAgent` that starts one exact provider-owned native TUI per worker.\n *\n * A Scope supplies the durable admission hook and kernel-minted node attempt. The returned worker\n * exposes `interactiveReady`, so Scope writes the exact provider reference before the worker can be\n * attached by a different process. `attachWorker` then reconnects that same reference through the\n * provider's public `get`/interactive contract.\n */\nexport function workerFromInteractiveProvider(\n provider: AgentEnvironmentProvider,\n options: InteractiveWorkerOptions = {},\n): MakeWorkerAgent {\n if (!provider.name.trim())\n throw new Error('workerFromInteractiveProvider: provider.name required')\n if (!provider.get) {\n throw new Error(\n `workerFromInteractiveProvider(${provider.name}): provider.get is required for reconnect`,\n )\n }\n const capturedEnvironment = options.environment\n ? (structuredClone(options.environment) as InteractiveWorkerEnvironment)\n : undefined\n const unscopedNamespace = randomUUID()\n let unscopedOrdinal = 0\n const runtime = options.runtime ?? (provider.name as Runtime)\n\n return (rawProfile, spawnContext) => {\n const profile = executableAgentProfileSnapshot(\n rawProfile,\n `workerFromInteractiveProvider(${provider.name})`,\n )\n const input: InteractiveWorkerKeyInput = {\n provider: provider.name,\n profile,\n ...(spawnContext === undefined ? {} : { context: spawnContext }),\n }\n const assignmentId =\n spawnContext?.assignmentId ?? `unscoped:${unscopedNamespace}:${unscopedOrdinal++}`\n const baseInput = { ...input, nodeId: spawnContext?.parentNodeId }\n const environmentKey = stableKey(\n options.environmentIdempotencyKey?.({ ...baseInput }) ??\n derivedKey('supervised-interactive-environment', {\n provider: provider.name,\n assignmentId,\n parentNodeId: spawnContext?.parentNodeId,\n profile,\n }),\n 'environment idempotency key',\n )\n const name = profile.name ?? 'interactive-worker'\n\n const executorFactory = (\n spec: AgentSpec,\n ctx: ExecutorContext,\n ): Executor<InteractiveWorkerResult> =>\n interactiveExecutor({\n provider,\n profile: spec.profile,\n context: spawnContext,\n environment: capturedEnvironment,\n environmentKey,\n interactiveKey: (task: unknown) =>\n stableKey(\n options.interactiveIdempotencyKey?.({\n ...baseInput,\n task,\n }) ??\n derivedKey('supervised-interactive-session', {\n provider: provider.name,\n assignmentId,\n parentNodeId: spawnContext?.parentNodeId,\n profile: spec.profile,\n task,\n }),\n 'interactive idempotency key',\n ),\n holderId: (task: unknown) => {\n const selected =\n typeof options.holderId === 'function'\n ? options.holderId({ ...baseInput, task })\n : options.holderId\n return stableKey(\n selected ??\n `runtime-interactive-worker:${canonicalCandidateDigest({\n provider: provider.name,\n assignmentId,\n })}`,\n 'interactive holder id',\n )\n },\n initialPrompt: options.initialPrompt,\n cwd: options.cwd,\n cols: options.cols,\n rows: options.rows,\n runtime,\n pollIntervalMs: options.pollIntervalMs,\n destroyEnvironmentOnTeardown: options.destroyEnvironmentOnTeardown,\n executionAttemptId: ctx.node?.attemptId,\n nodeId: ctx.node?.nodeId,\n admission: admissionWriter(ctx, provider.name, ctx.node?.nodeId),\n })\n\n const spec: AgentSpec = {\n profile,\n harness: null,\n executorFactory,\n ...(spawnContext?.execution ? { execution: spawnContext.execution } : {}),\n }\n return {\n name,\n act: async () => {\n throw new Error(\n 'workerFromInteractiveProvider: interactive workers execute through executorSpec',\n )\n },\n executorSpec: spec,\n } as Agent<unknown, InteractiveWorkerResult> & { executorSpec: AgentSpec }\n }\n}\n\ninterface InteractiveExecutorInput {\n readonly provider: AgentEnvironmentProvider\n readonly profile: AgentProfile\n readonly context?: WorkerSpawnContext\n readonly environment?: InteractiveWorkerEnvironment\n readonly environmentKey: string\n readonly interactiveKey: (task: unknown) => string\n readonly holderId: (task: unknown) => string\n readonly initialPrompt?: InteractiveWorkerOptions['initialPrompt']\n readonly cwd?: string\n readonly cols?: number\n readonly rows?: number\n readonly runtime: Runtime\n readonly pollIntervalMs?: number\n readonly destroyEnvironmentOnTeardown?: boolean\n readonly executionAttemptId?: string\n readonly nodeId?: string\n readonly admission: InteractiveAdmissionWriter\n}\n\nfunction interactiveExecutor(input: InteractiveExecutorInput): Executor<InteractiveWorkerResult> {\n const attemptId =\n input.executionAttemptId ?? newExecutionAttemptId(input.nodeId ?? input.environmentKey)\n const localController = new AbortController()\n const inbox = createInbox()\n let handle: RetainedInteractiveRunHandle | undefined\n let createdEnvironment: AgentEnvironment | undefined\n let environmentId: string | undefined\n let artifact: ExecutorResult<InteractiveWorkerResult> | undefined\n let activeLink: ReturnType<typeof linkAbort> | undefined\n let startPromise: Promise<RetainedInteractiveRunHandle> | undefined\n let executeStarted = false\n let readyResolve!: (session: WorkerInteractiveSession) => void\n const ready = new Promise<WorkerInteractiveSession>((resolve) => {\n readyResolve = resolve\n })\n const stopOperations = new Map<string, Promise<ExecutorCancellation>>()\n const memoryAdmissions = new Map<string, RetainedInteractiveAdmission>()\n let teardownComplete = false\n let teardownPromise: Promise<{ destroyed: boolean }> | undefined\n let flushChain: Promise<void> = Promise.resolve()\n let controlError: unknown\n\n const executor: Executor<InteractiveWorkerResult> = {\n runtime: input.runtime,\n teardownTimeoutMs: INTERACTIVE_TEARDOWN_TIMEOUT_MS,\n execute(task, signal): AsyncIterable<UsageEvent> {\n if (executeStarted || teardownComplete || teardownPromise !== undefined) {\n throw new Error('workerFromInteractiveProvider: execute() may only be called once')\n }\n executeStarted = true\n startPromise = startInteractive(task, signal)\n return runInteractive(signal)\n },\n deliver(message: unknown): boolean {\n if (teardownComplete || teardownPromise !== undefined) return false\n const accepted = inbox.deliver(message)\n if (accepted) void flushInbox()\n return accepted\n },\n interactive(): WorkerInteractiveSession {\n return handle\n ? { status: 'available', handle }\n : { status: 'unavailable', reason: 'interactive-session-not-started' }\n },\n interactiveReady(): Promise<WorkerInteractiveSession> {\n return ready\n },\n async cancel(request): Promise<ExecutorCancellation> {\n const existing = stopOperations.get(request.operationId)\n if (existing) return existing\n const operation = stopInteractive(request.operationId, request.reason, request.signal)\n const tracked = operation.then((result) => {\n if (result.status === 'unknown' && stopOperations.get(request.operationId) === tracked) {\n stopOperations.delete(request.operationId)\n }\n return result\n })\n stopOperations.set(request.operationId, tracked)\n return tracked\n },\n teardown(grace): Promise<{ destroyed: boolean }> {\n void grace\n if (teardownComplete) return Promise.resolve({ destroyed: true })\n if (teardownPromise !== undefined) return teardownPromise\n const pending = teardownInteractive()\n teardownPromise = pending.then(\n (result) => {\n teardownComplete = true\n return result\n },\n (error) => {\n teardownPromise = undefined\n throw error\n },\n )\n return teardownPromise\n },\n resultArtifact(): ExecutorResult<InteractiveWorkerResult> {\n if (!artifact) {\n throw new Error(\n 'workerFromInteractiveProvider: resultArtifact() read before execution settled',\n )\n }\n return artifact\n },\n }\n\n const declaredEnvironment = input.environment\n ? retainedCreateMaterial({\n ...input.environment,\n profile: input.profile,\n idempotencyKey: input.environmentKey,\n })\n : null\n const profileModel = concreteProfileModel(input.profile)\n const plannedDeclaration = {\n effectiveProfile: input.profile,\n backend: input.provider.name,\n model: profileModel\n ? { status: 'known' as const, id: profileModel }\n : { status: 'unknown' as const, reason: 'provider selected the model' },\n execution: { kind: 'interactive-session', id: input.nodeId ?? input.environmentKey },\n materializer: 'retained-interactive-provider',\n plan: {\n kind: 'retained-interactive-provider',\n provider: input.provider.name,\n environment: declaredEnvironment,\n environmentIdempotencyKey: input.environmentKey,\n destroyEnvironmentOnTeardown: input.destroyEnvironmentOnTeardown !== false,\n },\n }\n attestRuntimeOwnedPendingExecutor(executor, input.runtime, plannedDeclaration, {\n attemptId,\n binding: {\n provider: input.provider.name,\n environmentIdempotencyKey: input.environmentKey,\n nodeId: input.nodeId ?? null,\n },\n descriptor: {\n kind: 'interactive-session',\n provider: input.provider.name,\n transport: 'agent-environment',\n },\n })\n\n async function startInteractive(\n task: unknown,\n signal: AbortSignal,\n ): Promise<RetainedInteractiveRunHandle> {\n try {\n activeLink = linkAbort(signal, localController.signal)\n const initialPrompt =\n typeof input.initialPrompt === 'function'\n ? input.initialPrompt(task, {\n provider: input.provider.name,\n profile: input.profile,\n ...(input.context === undefined ? {} : { context: input.context }),\n task,\n ...(input.nodeId === undefined ? {} : { nodeId: input.nodeId }),\n })\n : (input.initialPrompt ?? taskToPrompt(task))\n if (typeof initialPrompt !== 'string') {\n throw new Error('workerFromInteractiveProvider: initialPrompt must return a string')\n }\n const interactiveIdempotencyKey = input.interactiveKey(task)\n const started = await startRetainedInteractiveRun({\n provider: {\n ...input.provider,\n async create(environmentInput): Promise<AgentEnvironment> {\n const environment = await input.provider.create!(environmentInput)\n createdEnvironment = environment\n return environment\n },\n },\n environment: {\n ...(input.environment ?? {}),\n profile: input.profile,\n idempotencyKey: input.environmentKey,\n },\n interactiveIdempotencyKey,\n ...(initialPrompt.length === 0 ? {} : { initialPrompt }),\n ...(input.cwd === undefined ? {} : { cwd: input.cwd }),\n ...(input.cols === undefined ? {} : { cols: input.cols }),\n ...(input.rows === undefined ? {} : { rows: input.rows }),\n onAdmission: async (admission) => {\n environmentId =\n admission.phase === 'interactive_environment' ? admission.environmentId : environmentId\n const existing = memoryAdmissions.get(admission.phase)\n if (existing !== undefined) {\n if (canonicalCandidateDigest(existing) !== canonicalCandidateDigest(admission)) {\n throw new Error(\n `interactive admission phase '${admission.phase}' changed across retry`,\n )\n }\n } else {\n memoryAdmissions.set(\n admission.phase,\n detachedSnapshot(admission, 'interactive admission'),\n )\n }\n await input.admission(admission)\n },\n signal: activeLink.signal,\n })\n finalizeRuntimeOwnedPendingExecutor(\n executor,\n {\n ...plannedDeclaration,\n execution: { kind: 'interactive-session', id: started.ref.run.executionId },\n plan: {\n ...plannedDeclaration.plan,\n environmentId: started.ref.run.environmentId,\n interactiveIdempotencyKey,\n },\n },\n {\n attemptId,\n binding: {\n provider: input.provider.name,\n ref: started.ref,\n environmentId: started.ref.run.environmentId,\n },\n descriptor: {\n kind: 'interactive-session',\n provider: input.provider.name,\n transport: 'agent-environment',\n },\n },\n )\n handle = started\n readyResolve({ status: 'available', handle: started })\n void flushInbox()\n return started\n } catch (error) {\n readyResolve({ status: 'unavailable', reason: unavailableReason(error) })\n activeLink?.release()\n throw error\n }\n }\n\n async function* runInteractive(signal: AbortSignal): AsyncIterable<UsageEvent> {\n const startedAt = Date.now()\n try {\n const current = await startPromise\n if (current === undefined) {\n throw new Error('workerFromInteractiveProvider: interactive start did not begin')\n }\n yield { kind: 'iteration' }\n // Native TUI sessions do not expose a complete turn receipt. These zero counters are an\n // observed floor and the explicit false markers keep the run's accounting honest.\n yield { kind: 'tokens', input: 0, output: 0, tokensKnown: false }\n yield { kind: 'cost', usd: 0, usdKnown: false, provenance: 'uncaptured' }\n let status: AgentInteractiveSessionStatus | undefined\n for (;;) {\n if (signal.aborted || localController.signal.aborted) {\n throw abortError(\n signal.aborted ? signal : localController.signal,\n 'interactive execution aborted',\n )\n }\n status = await current.status({ signal: activeLink?.signal })\n await flushChain\n if (controlError !== undefined) throw controlErrorValue(controlError)\n if (status.state !== 'running') break\n await sleep(input.pollIntervalMs ?? 100, activeLink?.signal)\n }\n const finished = status\n const output: InteractiveWorkerResult = {\n provider: input.provider.name,\n environmentId: current.ref.run.environmentId,\n sessionId: current.ref.run.sessionId,\n executionId: current.ref.run.executionId,\n state: finished?.state === 'exited' ? 'exited' : 'unknown',\n ref: current.ref,\n ...(finished?.state === 'exited' && finished.reason ? { reason: finished.reason } : {}),\n ...(finished?.state === 'exited' && finished.exitCode !== undefined\n ? { exitCode: finished.exitCode }\n : {}),\n ...(finished?.state === 'exited' && finished.exitSignal !== undefined\n ? { exitSignal: finished.exitSignal }\n : {}),\n }\n const spent: Spend = {\n iterations: 1,\n tokens: { input: 0, output: 0 },\n tokensKnown: false,\n usd: 0,\n usdKnown: false,\n ms: Date.now() - startedAt,\n }\n artifact = {\n outRef: contentAddress(output),\n out: output,\n spent,\n }\n } finally {\n activeLink?.release()\n }\n }\n\n async function flushInbox(): Promise<void> {\n flushChain = flushChain.then(async () => {\n try {\n if (!handle) return\n const messages = inbox.drain()\n if (messages.length === 0) return\n const prompt = inbox.fold(messages)\n const operationId = `interactive-prompt-${canonicalCandidateDigest({\n ref: handle.ref,\n prompt,\n }).slice('sha256:'.length)}`\n const control = await claimRetainedInteractiveControl({\n handle,\n holderId: input.holderId(undefined),\n })\n const material = {\n operationId,\n ref: handle.ref,\n control,\n prompt,\n }\n const command: AgentInteractiveSessionPromptCommand = {\n ...material,\n requestDigest: agentInteractiveSessionPromptRequestDigest(material),\n }\n await handle.sendPrompt(command)\n } catch (error) {\n controlError ??= error\n }\n })\n await flushChain\n }\n\n async function stopInteractive(\n operationId: string,\n reason?: string,\n signal?: AbortSignal,\n ): Promise<ExecutorCancellation> {\n const observedAt = new Date().toISOString()\n if (!handle) {\n localController.abort(reason ?? 'interactive cancellation requested')\n return {\n status: 'unknown',\n effect: 'cancel_requested',\n observedAt,\n detail: 'interactive process has not published a provider reference',\n }\n }\n try {\n const control = await claimRetainedInteractiveControl({\n handle,\n holderId: input.holderId(undefined),\n signal,\n })\n const material = { operationId, ref: handle.ref, control }\n const command: AgentInteractiveSessionStopCommand = {\n ...material,\n requestDigest: agentInteractiveSessionStopRequestDigest(material),\n }\n const acknowledgement = await handle.stop(\n command,\n signal === undefined ? undefined : { signal },\n )\n localController.abort(reason ?? 'interactive cancellation requested')\n return cancellationFromAcknowledgement(acknowledgement, observedAt)\n } catch (error) {\n localController.abort(reason ?? 'interactive cancellation requested')\n return {\n status: 'unknown',\n effect: 'cancel_requested',\n observedAt,\n detail: error instanceof Error ? error.message : String(error),\n evidence: { operationId },\n }\n }\n }\n\n async function teardownInteractive(): Promise<{ destroyed: boolean }> {\n localController.abort('interactive worker teardown')\n activeLink?.release()\n await startPromise?.catch(() => undefined)\n if (handle) {\n const status = await safeStatus(handle)\n if (status?.state === 'running') {\n const operationId = `interactive-teardown-${canonicalCandidateDigest(handle.ref).slice(\n 'sha256:'.length,\n )}`\n const cancellation = await stopInteractive(operationId, 'interactive worker teardown')\n if (cancellation.status === 'rejected' || cancellation.status === 'unknown') {\n throw new Error(cancellation.detail ?? 'interactive teardown was not acknowledged')\n }\n }\n }\n await destroyEnvironment()\n return { destroyed: true }\n }\n\n async function destroyEnvironment(): Promise<void> {\n if (input.destroyEnvironmentOnTeardown === false) return\n if (createdEnvironment !== undefined) {\n await destroyInteractiveEnvironment(createdEnvironment)\n return\n }\n if (!input.provider.get) return\n // The exact provider reference is durable and remains available even when the admission\n // callback was interrupted after the environment was created. Use it as the cleanup identity\n // so an aborted provider signal cannot turn a real environment into an unconfirmed leak.\n const cleanupEnvironmentId = environmentId ?? handle?.ref.run.environmentId\n if (!cleanupEnvironmentId) return\n const environment = await input.provider.get(cleanupEnvironmentId)\n if (environment !== undefined && environment !== null) {\n await destroyInteractiveEnvironment(environment)\n }\n }\n\n return executor\n}\n\nfunction admissionWriter(\n ctx: ExecutorContext,\n provider: string,\n workerId: string | undefined,\n): InteractiveAdmissionWriter {\n const candidate = ctx.seams[interactiveAdmissionSeamKey]\n if (typeof candidate === 'function') {\n return async (admission) => {\n await (candidate as (value: RetainedInteractiveAdmission) => Promise<void>)(admission)\n }\n }\n // In-memory runs still need a real hook because retained-start refuses an omitted hook. The\n // durable Scope path always supplies the Runtime-owned writer above; this fallback is explicit\n // and process-local, never mistaken for restart evidence.\n const records = new Map<string, RetainedInteractiveAdmission>()\n return async (admission) => {\n const prior = records.get(admission.phase)\n if (prior && canonicalCandidateDigest(prior) !== canonicalCandidateDigest(admission)) {\n throw new Error(\n `worker ${workerId ?? '(unscoped)'} provider ${provider} admission changed in memory`,\n )\n }\n records.set(admission.phase, detachedSnapshot(admission, 'interactive admission'))\n }\n}\n\nfunction derivedKey(kind: string, value: unknown): string {\n return `${kind}-${canonicalCandidateDigest(value).slice('sha256:'.length)}`\n}\n\nfunction stableKey(value: string, label: string): string {\n if (typeof value !== 'string' || value.trim().length === 0) {\n throw new Error(`${label} must be a non-empty string`)\n }\n const key = value.trim()\n if (key.length > 256) throw new Error(`${label} must not exceed 256 bytes`)\n return key\n}\n\nfunction unavailableReason(\n error: unknown,\n): 'provider-has-no-interactive-contract' | 'interactive-binding-stale' {\n const message = error instanceof Error ? error.message : String(error)\n return message.includes('interactive') || message.includes('Interactive')\n ? 'provider-has-no-interactive-contract'\n : 'interactive-binding-stale'\n}\n\nfunction cancellationFromAcknowledgement(\n acknowledgement: AgentInteractiveSessionStopAcknowledgement,\n observedAt: string,\n): ExecutorCancellation {\n const status =\n acknowledgement.status === 'accepted' || acknowledgement.status === 'replayed'\n ? 'accepted'\n : acknowledgement.status === 'conflict'\n ? 'rejected'\n : 'unknown'\n const effect =\n acknowledgement.effect === 'stopped'\n ? 'cancelled'\n : acknowledgement.effect === 'not_live'\n ? 'not_live'\n : acknowledgement.effect === 'stop_requested'\n ? 'cancel_requested'\n : 'unknown'\n return {\n status,\n effect,\n observedAt,\n ...(acknowledgement.message === undefined ? {} : { detail: acknowledgement.message }),\n evidence: {\n operationId: acknowledgement.operationId,\n requestDigest: acknowledgement.requestDigest,\n providerStatus: acknowledgement.status,\n providerEffect: acknowledgement.effect,\n },\n }\n}\n\nfunction controlErrorValue(error: unknown): Error {\n return error instanceof Error ? error : new Error(String(error))\n}\n\nasync function safeStatus(\n handle: RetainedInteractiveRunHandle,\n): Promise<AgentInteractiveSessionStatus | undefined> {\n let timer: ReturnType<typeof setTimeout> | undefined\n const timeout = new Promise<undefined>((resolve) => {\n timer = setTimeout(() => resolve(undefined), 100)\n timer.unref?.()\n })\n try {\n // A provider environment created with the worker's abort signal may reject or hang all\n // subsequent calls after the scope begins teardown. Keep status best-effort and let the fresh\n // environment lookup below prove release without spending the teardown acknowledgement window\n // on a stale connection.\n return await Promise.race([handle.status(), timeout])\n } catch {\n return undefined\n } finally {\n if (timer !== undefined) clearTimeout(timer)\n }\n}\n\nasync function sleep(ms: number, signal?: AbortSignal): Promise<void> {\n await new Promise<void>((resolve) => {\n if (signal?.aborted) {\n resolve()\n return\n }\n let settled = false\n const onAbort = (): void => {\n if (settled) return\n settled = true\n clearTimeout(timer)\n signal?.removeEventListener('abort', onAbort)\n resolve()\n }\n const timer = setTimeout(\n () => {\n if (settled) return\n settled = true\n signal?.removeEventListener('abort', onAbort)\n resolve()\n },\n Math.max(0, ms),\n )\n signal?.addEventListener('abort', onAbort, { once: true })\n })\n}\n","/**\n * Public one-call composition for a durable Runtime supervisor proof run.\n *\n * This is intentionally a thin owner of existing Runtime primitives. The supervisor owns the\n * root abort channel and join barrier, Scope owns worker admission and lifecycle, and the provider\n * owns the environment and interactive process. External clients receive identifiers and opaque\n * handles; they do not receive a second supervisor protocol or a copy of provider state.\n *\n * @experimental\n */\n\nimport { randomUUID } from 'node:crypto'\nimport { mkdirSync } from 'node:fs'\nimport { tmpdir } from 'node:os'\nimport { dirname, join, resolve } from 'node:path'\nimport {\n type AgentProfile,\n agentProfileSchema,\n canonicalAgentProfileDigest,\n canonicalCandidateDigest,\n} from '@tangle-network/agent-interface'\nimport type {\n AgentEnvironmentCapabilities,\n AgentEnvironmentProvider,\n} from '@tangle-network/agent-interface/environment-provider'\nimport type { McpToolDescriptor } from '../../mcp/server'\nimport { createCoordinationTools } from '../../mcp/tools/coordination'\nimport { sandboxClientAsProvider } from '../environment-provider'\nimport type { SandboxClient } from '../types'\nimport { createCancelAcknowledger, createSteerAcknowledger } from './coordination-driver'\nimport { writeAtomicDurableFile } from './durable-file'\nimport {\n type InteractiveWorkerEnvironment,\n workerFromInteractiveProvider,\n} from './interactive-worker'\nimport { createFileRunContext } from './run-context'\nimport { supervisorRunDir } from './run-layout'\nimport { createRootHandle, createSupervisor } from './supervisor'\nimport type { Agent, Budget, Scope, SpawnEvent, SupervisedResult } from './types'\nimport { readWorkerInteractiveBinding } from './worker-interactive'\n\nconst DEFAULT_POLL_MS = 25\nconst ROOT_MAX_ITERATIONS = 100\nconst ROOT_MAX_TOKENS = 100_000\nconst WORKER_MAX_ITERATIONS = 25\nconst WORKER_MAX_TOKENS = 25_000\n\n/** Caller-supplied provider or Sandbox SDK connection for one supervisor run. */\nexport interface ProvisionSupervisorConnection {\n /** A fully constructed provider. This is the preferred programmatic seam and is testable. */\n readonly provider?: AgentEnvironmentProvider\n /** A Sandbox SDK-compatible client. Runtime adapts it to the public provider contract. */\n readonly client?: SandboxClient\n /** Alias for `client`, accepted so callers can pass their existing connection object. */\n readonly sandboxClient?: SandboxClient\n /** Sandbox API endpoint used only when Runtime constructs the SDK client. */\n readonly endpoint?: string\n /** Transient Sandbox API key used only when Runtime constructs the SDK client. */\n readonly apiKey?: string\n /** Connection kind is descriptive only and does not select a hidden implementation. */\n readonly kind?: string\n}\n\n/** Input to the public Runtime supervisor provisioner. */\nexport interface ProvisionSupervisorRequest {\n readonly invocationId: string\n /** Caller-owned task assigned to the first interactive worker. */\n readonly task: string\n /** Canonical profile assigned to the first interactive worker. */\n readonly profile: AgentProfile\n /** Generic provider create fields forwarded to the interactive worker. */\n readonly workerEnvironment?: InteractiveWorkerEnvironment\n /** Root directory for Runtime-owned `.agent/supervisor` state. */\n readonly workspaceDir?: string\n /** Maximum wall-clock time for the complete supervisor lifecycle, including cleanup. Omit for no lifecycle deadline. */\n readonly timeoutMs?: number\n /** Poll cadence for lifecycle/control readiness. */\n readonly pollMs?: number\n /** Explicit provider, client, or endpoint and API key for one provider connection. */\n readonly connection: ProvisionSupervisorConnection\n}\n\n/** Exact owner-scoped cleanup receipt returned after Runtime releases the run resources. */\nexport interface SupervisorCleanupReceipt {\n readonly status: 'completed'\n readonly rootDir: string\n readonly supervisorId: string\n readonly workerId: string\n readonly supervisorStatus: string\n readonly workerStatus: 'running' | 'done' | 'down' | 'cancelled'\n readonly resourcesReleased: true\n readonly remainingResources: readonly []\n}\n\n/** Handles for one Runtime-owned supervisor and its first interactive worker. */\nexport interface ProvisionedSupervisor {\n readonly rootDir: string\n readonly supervisorId: string\n readonly workerId: string\n /** Provider source for `attachWorker`; omitted only when resolution did not produce one. */\n readonly providers?: AgentEnvironmentProvider\n /** Capability-derived terminal takeover requirement. */\n readonly terminalTakeover: 'required' | 'unsupported' | 'unspecified'\n cleanup(): Promise<SupervisorCleanupReceipt>\n}\n\nclass SupervisorProvisionUnavailableError extends Error {\n readonly unavailable = true as const\n\n constructor(message: string, cause?: unknown) {\n super(message, cause === undefined ? undefined : { cause })\n this.name = 'SupervisorProvisionUnavailableError'\n }\n}\n\ninterface MutableState {\n readonly id: string\n status: string\n readonly task: string\n readonly workspaceDir: string\n readonly budget: number\n readonly workerModel?: string\n readonly startedAt: string\n completedAt?: string\n}\n\ninterface Deferred<T> {\n readonly promise: Promise<T>\n resolve(value: T): void\n reject(error: unknown): void\n readonly settled: () => boolean\n}\n\n/**\n * Provision one real provider-backed worker and keep its owning manager alive for controls.\n *\n * The root manager does not use a model. It runs the same coordination tools used by a driver in a\n * small deterministic loop, so durable steer and cancel requests are acknowledged by the owning\n * Runtime turn loop and never by a test-only shortcut. The caller owns profile, task, and provider\n * connection selection; Runtime does not infer them from process environment variables.\n */\nexport async function provisionSupervisor(\n request: ProvisionSupervisorRequest,\n): Promise<ProvisionedSupervisor> {\n const input = normalizeRequest(request)\n const provider = await resolveProvider(input)\n const capabilities = await readCapabilities(provider)\n const terminalTakeover = terminalCapability(capabilities)\n const profile = input.profile\n const rootDir = resolve(input.workspaceDir ?? makeWorkspaceDir())\n mkdirSync(rootDir, { recursive: true })\n const supervisorId = supervisorIdFor(input.invocationId)\n const eventDir = supervisorRunDir(rootDir, supervisorId)\n const statePath = join(eventDir, 'state.json')\n mkdirSync(dirname(eventDir), { recursive: true })\n try {\n // The run directory is the cross-process invocation lock. A non-recursive mkdir closes the\n // duplicate-start race before any journal or provider resource is created.\n mkdirSync(eventDir)\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === 'EEXIST') {\n throw unavailable(\n `Runtime supervisor '${supervisorId}' already exists at '${eventDir}'; use a new invocationId`,\n )\n }\n throw error\n }\n\n const context = createFileRunContext(eventDir)\n const startedAtMs = Date.now()\n const state: MutableState = {\n id: supervisorId,\n status: 'running',\n task: input.task,\n workspaceDir: rootDir,\n budget: ROOT_MAX_TOKENS,\n ...(profile.model?.default === undefined ? {} : { workerModel: profile.model.default }),\n startedAt: new Date(startedAtMs).toISOString(),\n }\n writeState(statePath, state)\n\n const rootHandle = createRootHandle<unknown>()\n const supervisor = createSupervisor<unknown, unknown>()\n supervisor.attach(rootHandle)\n const workerSpawned = deferred<string>()\n const workerRunning = deferred<void>()\n const workerProfile = profile\n const workerEnvironment = {\n ...(input.workerEnvironment ?? {}),\n metadata: {\n ...(input.workerEnvironment?.metadata ?? {}),\n runtime: 'agent-runtime',\n invocationId: input.invocationId,\n },\n name: input.workerEnvironment?.name ?? `runtime-${supervisorId}`,\n }\n const makeWorkerAgent = workerFromInteractiveProvider(provider, {\n environment: workerEnvironment,\n pollIntervalMs: input.pollMs,\n destroyEnvironmentOnTeardown: true,\n })\n\n const rootAgent: Agent<unknown, unknown> = {\n name: 'runtime-supervisor-root',\n async act(_task: unknown, scope: Scope<unknown>): Promise<unknown> {\n const coord = createCoordinationTools({\n scope,\n blobs: context.blobs,\n makeWorkerAgent,\n perWorker: workerBudget(),\n // Keep each supervisor turn bounded so control requests are observed while the remote\n // worker is running. The coordination tool keeps one settlement drain in flight, so a\n // timeout only ends this turn; it cannot lose the eventual worker event.\n awaitTimeoutMs: input.pollMs,\n })\n await coord.ready()\n const spawn = findTool(coord.tools, 'spawn_worker')\n const awaitEvent = findTool(coord.tools, 'await_event')\n const result = await spawn.handler({\n profile: workerProfile,\n task: input.task,\n label: 'interactive-worker',\n })\n const childId = workerIdFromSpawn(result)\n workerSpawned.resolve(childId)\n\n for (;;) {\n const child = scope.view.nodes.find((node) => node.id === childId)\n if (child?.status === 'running') break\n if (\n child === undefined ||\n child.status === 'done' ||\n child.status === 'failed' ||\n child.status === 'cancelled'\n ) {\n throw new Error(`Runtime supervisor worker '${childId}' ended before becoming live`)\n }\n await delay(input.pollMs)\n }\n workerRunning.resolve()\n\n const steerAcknowledger = createSteerAcknowledger({\n dir: eventDir,\n coord,\n now: Date.now,\n ownerId: scope.view.root,\n })\n const cancelAcknowledger = createCancelAcknowledger({\n dir: eventDir,\n coord,\n scope,\n now: Date.now,\n ownerId: scope.view.root,\n controlScope: 'run',\n })\n try {\n while (true) {\n await steerAcknowledger.pass('turn')\n cancelAcknowledger.pass('turn')\n // `await_event` owns the single scope cursor drain. Calling `scope.next()` directly here\n // would bypass the coordination ledger and make a real cancellation look unknown.\n const event = await awaitEvent.handler({ kinds: ['settled'] })\n if (isSettledEvent(event)) {\n await steerAcknowledger.pass('final')\n cancelAcknowledger.pass('final')\n return undefined\n }\n if (isIdleEvent(event)) {\n throw new Error(`Runtime supervisor worker '${childId}' ended without a settlement`)\n }\n if (!isPendingEvent(event)) {\n throw new Error(`Runtime supervisor returned an invalid settlement response`)\n }\n }\n } finally {\n // The final pass closes requests that landed after the last turn. It is idempotent with the\n // normal path and prevents an admitted operation from remaining open after root teardown.\n await steerAcknowledger.pass('final')\n cancelAcknowledger.pass('final')\n cancelAcknowledger.finish()\n }\n },\n }\n const runBudget = rootBudget(input.timeoutMs)\n let runResult: SupervisedResult<unknown> | undefined\n let runError: unknown\n let runSettled = false\n const runPromise = supervisor\n .run(rootAgent, input.task, {\n budget: runBudget,\n rootIdentity: {\n profileDigest: canonicalAgentProfileDigest(profile),\n taskDigest: canonicalCandidateDigest(input.task),\n },\n runId: supervisorId,\n ...context,\n interactiveBindingDir: eventDir,\n maxDepth: 1,\n maxLiveWorkers: 1,\n })\n .then(\n (result) => {\n runResult = result\n runSettled = true\n updateStateFromResult(state, result)\n writeState(statePath, state)\n return result\n },\n (error) => {\n runError = error\n runSettled = true\n state.status = 'down'\n state.completedAt = new Date().toISOString()\n writeState(statePath, state)\n throw error\n },\n )\n void runPromise.catch(() => undefined)\n\n let workerId: string\n try {\n workerId = await waitForWorkerSpawn(workerSpawned.promise, runPromise, input.timeoutMs)\n await waitForWorkerRunning(workerRunning.promise, runPromise, input.timeoutMs)\n if (terminalTakeover === 'required') {\n await waitForInteractiveBinding(eventDir, workerId, runPromise, input.timeoutMs, input.pollMs)\n }\n } catch (error) {\n if (!runSettled) {\n try {\n rootHandle.abort('supervisor provisioning failed')\n } catch {\n // The supervisor may have released the handle between the state read and this abort.\n }\n }\n await runPromise.catch(() => undefined)\n throw error\n }\n\n let cleanupPromise: Promise<SupervisorCleanupReceipt> | undefined\n const cleanup = async (): Promise<SupervisorCleanupReceipt> => {\n cleanupPromise ??= (async () => {\n if (!runSettled) {\n try {\n rootHandle.abort('supervisor cleanup')\n } catch {\n // A concurrent run completion already released the handle.\n }\n }\n const result = await runPromise.catch((error) => {\n runError = error\n return undefined\n })\n if (result !== undefined) runResult = result\n if (runError !== undefined) throw runError\n const finalEvents = await waitForWorkerTerminal(\n context.journal,\n supervisorId,\n workerId,\n input.timeoutMs,\n input.pollMs,\n )\n const workerStatus = workerStatusFromEvents(finalEvents, workerId)\n if (workerStatus === 'running') {\n throw new Error(`Runtime supervisor worker '${workerId}' did not reach a terminal state`)\n }\n if (runResult?.teardownUnconfirmed?.length) {\n throw new Error(\n `Runtime supervisor cleanup could not confirm ${runResult.teardownUnconfirmed.length} resource(s) released`,\n )\n }\n const supervisorStatus = state.status\n state.completedAt ??= new Date().toISOString()\n writeState(statePath, state)\n return Object.freeze({\n status: 'completed' as const,\n rootDir,\n supervisorId,\n workerId,\n supervisorStatus,\n workerStatus,\n resourcesReleased: true as const,\n remainingResources: Object.freeze([]) as readonly [],\n })\n })()\n return cleanupPromise\n }\n\n return Object.freeze({\n rootDir,\n supervisorId,\n workerId,\n providers: provider,\n terminalTakeover,\n cleanup,\n })\n}\n\nfunction normalizeRequest(request: ProvisionSupervisorRequest): ProvisionSupervisorRequest & {\n readonly invocationId: string\n readonly task: string\n readonly timeoutMs: number | undefined\n readonly pollMs: number\n readonly profile: AgentProfile\n readonly connection: ProvisionSupervisorConnection\n} {\n const invocationId = request.invocationId.trim()\n if (!invocationId) throw new SupervisorProvisionUnavailableError('invocationId is required')\n const task = request.task.trim()\n if (!task) throw new SupervisorProvisionUnavailableError('task is required')\n const profile = resolveProfile(request.profile)\n if (request.connection === undefined) {\n throw new SupervisorProvisionUnavailableError('provider connection is required')\n }\n const timeoutMs =\n request.timeoutMs === undefined ? undefined : positiveNumber(request.timeoutMs, 'timeoutMs')\n const pollMs = positiveNumber(request.pollMs ?? DEFAULT_POLL_MS, 'pollMs')\n return { ...request, invocationId, task, timeoutMs, pollMs, profile }\n}\n\nfunction positiveNumber(value: number, name: string): number {\n if (!Number.isSafeInteger(value) || value <= 0) {\n throw new SupervisorProvisionUnavailableError(`${name} must be a positive safe integer`)\n }\n return value\n}\n\nfunction makeWorkspaceDir(): string {\n return join(tmpdir(), `agent-runtime-supervisor-${randomUUID()}`)\n}\n\nfunction supervisorIdFor(invocationId: string): string {\n const digest = canonicalCandidateDigest({ kind: 'runtime-supervisor', invocationId })\n return `runtime-supervisor-${digest.slice('sha256:'.length)}`\n}\n\n/** A caller-supplied deadline covers the complete supervisor lifecycle from run start through cleanup. */\nfunction rootBudget(timeoutMs: number | undefined): Budget {\n return {\n maxIterations: ROOT_MAX_ITERATIONS,\n maxTokens: ROOT_MAX_TOKENS,\n ...(timeoutMs === undefined ? {} : { deadlineMs: timeoutMs }),\n }\n}\n\nfunction workerBudget(): Budget {\n return {\n maxIterations: WORKER_MAX_ITERATIONS,\n maxTokens: WORKER_MAX_TOKENS,\n }\n}\n\nfunction resolveProfile(profile: AgentProfile): AgentProfile {\n const parsed = agentProfileSchema.safeParse(profile)\n if (!parsed.success) {\n throw unavailable(\n `Runtime supervisor profile is invalid: ${parsed.error.issues\n .map((issue) => `${issue.path.join('.')}: ${issue.message}`)\n .join('; ')}`,\n )\n }\n return parsed.data\n}\n\nasync function resolveProvider(\n request: ProvisionSupervisorRequest,\n): Promise<AgentEnvironmentProvider> {\n const connection = request.connection\n if (connection === undefined) {\n throw unavailable('Runtime supervisor provider connection is required')\n }\n if (connection?.provider !== undefined) return requireReconnectProvider(connection.provider)\n const client = connection?.client ?? connection?.sandboxClient\n if (client !== undefined) {\n return requireReconnectProvider(sandboxClientAsProvider(client))\n }\n const apiKey = connection.apiKey?.trim()\n const endpoint = connection.endpoint?.trim()\n if (!apiKey || !endpoint) {\n throw unavailable(\n 'Runtime supervisor needs a provider/client or both connection.endpoint and connection.apiKey',\n )\n }\n let module: typeof import('@tangle-network/sandbox')\n try {\n module = await import('@tangle-network/sandbox')\n } catch (error) {\n throw unavailable('Runtime supervisor could not load the Sandbox SDK peer dependency', error)\n }\n const SandboxCtor = (module as { Sandbox?: new (config: unknown) => SandboxClient }).Sandbox\n if (SandboxCtor === undefined) throw unavailable('Sandbox SDK does not export a Sandbox client')\n const provider = sandboxClientAsProvider(new SandboxCtor({ apiKey, baseUrl: endpoint }))\n return requireReconnectProvider(provider)\n}\n\nfunction requireReconnectProvider(provider: AgentEnvironmentProvider): AgentEnvironmentProvider {\n if (!provider.name.trim()) throw unavailable('Runtime supervisor provider has no name')\n if (typeof provider.get !== 'function') {\n throw unavailable(\n `Runtime supervisor provider '${provider.name}' cannot reconnect environments`,\n )\n }\n return provider\n}\n\nasync function readCapabilities(\n provider: AgentEnvironmentProvider,\n): Promise<AgentEnvironmentCapabilities> {\n try {\n return await provider.capabilities()\n } catch (error) {\n throw unavailable(`Runtime supervisor could not read '${provider.name}' capabilities`, error)\n }\n}\n\nfunction terminalCapability(\n capabilities: AgentEnvironmentCapabilities,\n): 'required' | 'unsupported' | 'unspecified' {\n const interactive = capabilities.interactiveAgent\n if (interactive === undefined) return 'unsupported'\n const complete = [\n interactive.start,\n interactive.control,\n interactive.status,\n interactive.attach,\n interactive.reattach,\n interactive.sendPrompt,\n interactive.input,\n interactive.resize,\n interactive.stop,\n ].every((value) => value === true)\n return complete ? 'required' : 'unsupported'\n}\n\nfunction findTool(tools: readonly McpToolDescriptor[], name: string): McpToolDescriptor {\n const tool = tools.find((candidate) => candidate.name === name)\n if (tool === undefined)\n throw new Error(`Runtime supervisor coordination tool '${name}' is missing`)\n return tool\n}\n\nfunction workerIdFromSpawn(value: unknown): string {\n if (value === null || typeof value !== 'object' || Array.isArray(value)) {\n throw new Error('Runtime supervisor spawn did not return a worker id')\n }\n const workerId = (value as { workerId?: unknown }).workerId\n if (typeof workerId !== 'string' || !workerId.trim()) {\n throw new Error('Runtime supervisor spawn did not return a worker id')\n }\n return workerId\n}\n\nfunction isSettledEvent(value: unknown): boolean {\n return isObject(value) && value.type === 'settled'\n}\n\nfunction isIdleEvent(value: unknown): boolean {\n return isObject(value) && value.idle === true\n}\n\nfunction isPendingEvent(value: unknown): boolean {\n return isObject(value) && value.pending === true\n}\n\nfunction isObject(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null\n}\n\nasync function waitForWorkerSpawn(\n worker: Promise<string>,\n run: Promise<SupervisedResult<unknown>>,\n timeoutMs: number | undefined,\n): Promise<string> {\n return await withTimeout(\n Promise.race([\n worker,\n run.then(() => {\n throw new Error('Runtime supervisor ended before it spawned a worker')\n }),\n ]),\n timeoutMs,\n 'worker spawn',\n )\n}\n\nasync function waitForWorkerRunning(\n running: Promise<void>,\n run: Promise<SupervisedResult<unknown>>,\n timeoutMs: number | undefined,\n): Promise<void> {\n await withTimeout(\n Promise.race([\n running,\n run.then(() => {\n throw new Error('Runtime supervisor ended before the worker became live')\n }),\n ]),\n timeoutMs,\n 'worker readiness',\n )\n}\n\nasync function waitForInteractiveBinding(\n eventDir: string,\n workerId: string,\n run: Promise<SupervisedResult<unknown>>,\n timeoutMs: number | undefined,\n pollMs: number,\n): Promise<void> {\n await withTimeout(\n pollUntil(\n async () => {\n const binding = readWorkerInteractiveBinding(eventDir, workerId)\n if (binding?.status === 'available') return true\n if (binding?.status === 'unavailable') {\n throw unavailable(`Runtime worker '${workerId}' could not publish an interactive binding`)\n }\n return false\n },\n run,\n pollMs,\n ),\n timeoutMs,\n 'interactive terminal binding',\n )\n}\n\nasync function pollUntil(\n read: () => Promise<boolean> | boolean,\n run: Promise<SupervisedResult<unknown>>,\n pollMs: number,\n): Promise<void> {\n for (;;) {\n if (await read()) return\n await Promise.race([\n delay(pollMs),\n run.then(() => {\n throw new Error('Runtime supervisor ended before readiness was observed')\n }),\n ])\n }\n}\n\nasync function withTimeout<T>(\n promise: Promise<T>,\n timeoutMs: number | undefined,\n label: string,\n): Promise<T> {\n if (timeoutMs === undefined) return await promise\n let timer: ReturnType<typeof setTimeout> | undefined\n const timeout = new Promise<never>((_resolve, reject) => {\n timer = setTimeout(\n () => reject(unavailable(`Runtime supervisor timed out waiting for ${label}`)),\n timeoutMs,\n )\n if (typeof timer.unref === 'function') timer.unref()\n })\n try {\n return await Promise.race([promise, timeout])\n } finally {\n if (timer !== undefined) clearTimeout(timer)\n }\n}\n\nfunction delay(ms: number, keepAlive = false): Promise<void> {\n return new Promise((resolveDelay) => {\n const timer = setTimeout(resolveDelay, ms)\n if (!keepAlive && typeof timer.unref === 'function') timer.unref()\n })\n}\n\nfunction updateStateFromResult(state: MutableState, result: SupervisedResult<unknown>): void {\n state.status =\n result.kind === 'winner' ? 'done' : result.reason === 'cancelled' ? 'cancelled' : 'down'\n state.completedAt = new Date().toISOString()\n}\n\nfunction workerStatusFromEvents(\n events: readonly SpawnEvent[],\n workerId: string,\n): SupervisorCleanupReceipt['workerStatus'] {\n let status: SupervisorCleanupReceipt['workerStatus'] = 'running'\n let terminal = false\n for (const event of events) {\n if (event.id !== workerId) continue\n if (terminal) continue\n if (event.kind === 'spawned' || event.kind === 'progress') status = 'running'\n else if (event.kind === 'settled') {\n status = event.status === 'done' ? 'done' : 'down'\n terminal = true\n } else if (event.kind === 'cancelled') {\n status = 'cancelled'\n terminal = true\n }\n }\n return status\n}\n\nasync function waitForWorkerTerminal(\n journal: import('./types').SpawnJournal,\n root: string,\n workerId: string,\n timeoutMs: number | undefined,\n pollMs: number,\n): Promise<SpawnEvent[]> {\n const deadline = timeoutMs === undefined ? undefined : Date.now() + timeoutMs\n for (;;) {\n const events = await journal.loadTree(root)\n if (events !== undefined && workerStatusFromEvents(events, workerId) !== 'running') {\n return events\n }\n if (deadline !== undefined && Date.now() >= deadline) {\n throw unavailable(`Runtime supervisor timed out waiting for worker '${workerId}' to settle`)\n }\n // Cleanup is an explicit lifecycle operation. Keep this bounded poll referenced so a caller\n // awaiting cleanup cannot have Node exit while the provider is still committing the terminal\n // worker event.\n await delay(pollMs, true)\n }\n}\n\nfunction deferred<T>(): Deferred<T> {\n let done = false\n let resolveValue!: (value: T) => void\n let rejectValue!: (error: unknown) => void\n const promise = new Promise<T>((resolvePromise, rejectPromise) => {\n resolveValue = (value) => {\n if (done) return\n done = true\n resolvePromise(value)\n }\n rejectValue = (error) => {\n if (done) return\n done = true\n rejectPromise(error)\n }\n })\n return {\n promise,\n resolve: resolveValue,\n reject: rejectValue,\n settled: () => done,\n }\n}\n\nfunction unavailable(message: string, cause?: unknown): SupervisorProvisionUnavailableError {\n return new SupervisorProvisionUnavailableError(message, cause)\n}\n\nfunction writeState(path: string, state: MutableState): void {\n mkdirSync(dirname(path), { recursive: true })\n writeAtomicDurableFile(path, `${JSON.stringify(state)}\\n`, { mode: 0o600 })\n}\n"],"mappings":"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"}
@@ -6150,30 +6150,23 @@ function retainedTurnMaterial(input, contextTransfer) {
6150
6150
  }
6151
6151
  //#endregion
6152
6152
  //#region src/runtime/retained-run-start.ts
6153
- const MAX_RETAINED_IDENTITY_BYTES = 128;
6154
6153
  /**
6155
6154
  * Mint deterministic dispatch coordinates from the two caller-supplied keys.
6156
6155
  * The same `(idempotencyKey, turnId)` pair yields the same coordinates in
6157
6156
  * every process, so a pre-dispatch admission record always names the exact
6158
- * session and execution the dispatch will request. Short inputs keep a
6159
- * readable URL-encoded identity. Long inputs use a full SHA-256 digest so
6160
- * provider storage layers never receive an overlong composite identifier.
6157
+ * session and execution the dispatch will request. A full SHA-256 digest
6158
+ * keeps provider session identifiers bounded and safe for workspace paths.
6161
6159
  */
6162
6160
  function mintRetainedIdentity(idempotencyKey, turnId) {
6163
- const base = `${encodeURIComponent(idempotencyKey)}:${encodeURIComponent(turnId)}`;
6164
6161
  const digest = canonicalCandidateDigest({
6165
6162
  kind: "retained-identity.v1",
6166
- base
6163
+ base: `${encodeURIComponent(idempotencyKey)}:${encodeURIComponent(turnId)}`
6167
6164
  }).slice(7);
6168
6165
  return {
6169
- sessionId: boundedRetainedIdentity("retained-session", base, digest),
6170
- executionId: boundedRetainedIdentity("retained-execution", base, digest)
6166
+ sessionId: `retained-session-${digest}`,
6167
+ executionId: `retained-execution-${digest}`
6171
6168
  };
6172
6169
  }
6173
- function boundedRetainedIdentity(prefix, base, digest) {
6174
- const readable = `${prefix}:${base}`;
6175
- return readable.length <= MAX_RETAINED_IDENTITY_BYTES ? readable : `${prefix}:${digest}`;
6176
- }
6177
6170
  /**
6178
6171
  * Dispatch one detached, replayable run and return only after exact durable
6179
6172
  * coordinates are confirmed by the provider and persisted by the caller.
@@ -6188,12 +6181,14 @@ function boundedRetainedIdentity(prefix, base, digest) {
6188
6181
  async function startRetainedRun(options) {
6189
6182
  assertStableText(options.environment.idempotencyKey, "environment idempotency key");
6190
6183
  assertStableText(options.turn.turnId, "turn idempotency key");
6191
- if (options.identity !== void 0) {
6192
- assertStableText(options.identity.sessionId, "retained session id");
6193
- assertStableText(options.identity.executionId, "retained execution id");
6194
- }
6195
6184
  if (typeof options.onAdmission !== "function") throw new Error("startRetainedRun requires an awaited onAdmission durability hook");
6196
- const identity = options.identity ?? mintRetainedIdentity(options.environment.idempotencyKey, options.turn.turnId);
6185
+ const { sessionId, executionId } = options.identity ?? options.intent ?? mintRetainedIdentity(options.environment.idempotencyKey, options.turn.turnId);
6186
+ const identity = {
6187
+ sessionId,
6188
+ executionId
6189
+ };
6190
+ assertStableText(identity.sessionId, "retained session id");
6191
+ assertStableText(identity.executionId, "retained execution id");
6197
6192
  const contextTransfer = retainedContextTransfer(options.turn.contextTransfer);
6198
6193
  if (!options.provider.get) throw new Error(`provider "${options.provider.name}" cannot reconstruct an environment by id`);
6199
6194
  const intent = retainedRunIntent(options, identity, contextTransfer);
@@ -6422,7 +6417,9 @@ async function recoverRetainedRun(options) {
6422
6417
  }
6423
6418
  /** Check public replay material before reconnecting an already-dispatched execution. */
6424
6419
  function assertRetainedRunReplayMaterial(provider, replay, admission) {
6425
- const identity = replay.identity ?? mintRetainedIdentity(replay.environment.idempotencyKey, replay.turn.turnId);
6420
+ const identity = replay.identity ?? admission;
6421
+ assertStableText(identity.sessionId, "retained session id");
6422
+ assertStableText(identity.executionId, "retained execution id");
6426
6423
  assertExactRetainedRunIntent(admission, retainedRunIntent({
6427
6424
  ...replay,
6428
6425
  provider
@@ -17913,7 +17910,12 @@ async function startRetainedInteractiveRun(options) {
17913
17910
  const profile = agentProfileSchema.parse(startOptions.environment.profile);
17914
17911
  if (profile.harness === void 0) throw new Error("retained interactive runs require AgentProfile.harness");
17915
17912
  const requestedProfileDigest = canonicalAgentProfileDigest(profile);
17916
- const identity = mintRetainedIdentity(startOptions.environment.idempotencyKey, startOptions.interactiveIdempotencyKey);
17913
+ const identity = startOptions.intent === void 0 ? mintRetainedIdentity(startOptions.environment.idempotencyKey, startOptions.interactiveIdempotencyKey) : {
17914
+ sessionId: startOptions.intent.sessionId,
17915
+ executionId: startOptions.intent.executionId
17916
+ };
17917
+ assertStableText(identity.sessionId, "retained session id");
17918
+ assertStableText(identity.executionId, "retained execution id");
17917
17919
  const intent = interactiveIntent(startOptions, profile, identity);
17918
17920
  if (startOptions.intent === void 0) await admitDurably(startOptions.onAdmission, intent);
17919
17921
  else assertExactInteractiveIntent(startOptions.intent, intent);
@@ -17987,9 +17989,21 @@ function exactRecoveryRequest(admission) {
17987
17989
  assertStableText(admission.interactiveIdempotencyKey, "interactive idempotency key");
17988
17990
  const request = exactAgentInteractiveSessionStart(admission.request);
17989
17991
  const identity = mintRetainedIdentity(admission.idempotencyKey, admission.interactiveIdempotencyKey);
17990
- if (request.run.provider !== admission.provider || request.run.environmentId !== admission.environmentId || request.run.sessionId !== identity.sessionId || request.run.executionId !== identity.executionId) throw new Error("interactive admission does not match its recovery coordinates");
17992
+ if (request.run.provider !== admission.provider || request.run.environmentId !== admission.environmentId || (request.run.sessionId !== identity.sessionId || request.run.executionId !== identity.executionId) && !matchesHistoricalInteractiveIdentity(admission, request)) throw new Error("interactive admission does not match its recovery coordinates");
17991
17993
  return request;
17992
17994
  }
17995
+ function matchesHistoricalInteractiveIdentity(admission, request) {
17996
+ const base = `${encodeURIComponent(admission.idempotencyKey)}:${encodeURIComponent(admission.interactiveIdempotencyKey)}`;
17997
+ const digest = canonicalCandidateDigest({
17998
+ kind: "retained-identity.v1",
17999
+ base
18000
+ }).slice(7);
18001
+ const historicalId = (prefix) => {
18002
+ const readable = `${prefix}:${base}`;
18003
+ return readable.length <= 128 ? readable : `${prefix}:${digest}`;
18004
+ };
18005
+ return request.run.sessionId === historicalId("retained-session") && request.run.executionId === historicalId("retained-execution");
18006
+ }
17993
18007
  /** Rebuild controls for one exact provider-owned coding-agent process. @stable */
17994
18008
  async function reconnectRetainedInteractiveRun(options) {
17995
18009
  options.signal?.throwIfAborted();
@@ -22322,4 +22336,4 @@ function resolveRedactor(redact) {
22322
22336
  //#endregion
22323
22337
  export { bridgeAdmissionRefusal as $, buildLoopSpanNodes as $n, newExecutionAttemptId as $r, spendFromUsageEvents as $t, consumeScopeRetainedOwnerResult as A, awaitAbortable$1 as Ai, throwIfAborted as An, fullProfileMaterialization as Ar, peerMailTools as At, workerInteractiveBindingFile as B, startRetainedRun as Bn, validateProfileMaterialization as Br, insideCursorNamespace as Bt, settledToIteration as C, mapSandboxToolEvent as Ci, hasCompleteCacheBreakdown as Cn, localHarnessExecutable as Cr, createInbox as Ct, timerAt as D, sumSandboxUsage as Di, sleep as Dn, assertProfileMaterialization as Dr, claimsAuthority as Dt, pollFor as E, sandboxProgressEvents as Ei, randomSuffix as En, AGENT_PROFILE_MATERIALIZATION_AXES as Er, PEER_MAIL_WIRE_KEY as Et, interactiveAdmissionSeamKey as F, RunCancellationReason as Fn, promptResourceProfileMaterialization as Fr, taskToPrompt as Ft, destroyInteractiveEnvironment as G, harnessUsageIsEmpty as Gn, writeAllBytes as Gr, WORKER_TOOL_TRACE_SCHEMA_VERSION as Gt, reconnectRetainedInteractiveRun as H, retainedCreateMaterial as Hn, isNoEntError as Hr, materializeTreeView as Ht, readWorkerInteractiveAdmissions as I, abortError$1 as In, renderProfileMaterializationIssues as Ir, FileResultBlobStore as It, queueOf as J, mergeTraceEnv as Jn, authoredProfileDigest as Jr, parseWorkerToolTraceArtifact as Jt, effectiveConcurrency as K, readCodexRolloutSession as Kn, attestRuntimeOwnedPendingExecutor as Kr, captureWorkerTraceEvidence as Kt, workerInteractiveAdmissionFile as L, linkAbort as Ln, renderUnsupported as Lr, FileSpawnJournal as Lt, scopeRetainedOwnerContext as M, promptOptionsFromAgentTurnInput as Mi, zeroSpend as Mn, promptControlProfileMaterialization as Mr, isLiveNodeStatus as Mt, scopeRetainedOwnerPriorSpend as N, providerMessageText as Ni, registerRetainedExecutorPreparation as Nn, promptModelProfileMaterialization as Nr, isTerminalNodeStatus as Nt, validateWaitSpec as O, decodeHarnessUsage as Oi, stringifySafe as On, controlProfileMaterialization as Or, createPeerMailbox as Ot, scopeRetainedOwnerResult as P, retainedExecutorSeamKey as Pn, promptOnlyProfileMaterialization as Pr, createInPlaceCliExecutor as Pt, bindReusableExecutorExecutionId as Q, buildLoopOtelSpans as Qn, knownMaterializationReceipt as Qr, createBudgetPool as Qt, attachWorker as R, reconnectRetainedRun as Rn, sandboxActProfileMaterialization as Rr, InMemoryResultBlobStore as Rt, scopeOwnerExecutorNodeContext as S, mapSandboxEvent as Si, deleteBoxSafe as Sn, harnessSupportsReasoningEffort as Sr, readWorkerProgress as St, isWaitOutcome as T, sandboxEventServedBackend as Ti, promptCacheTokenClasses as Tn, CodexExecutionDiagnosticError as Tr, DEFAULT_PEER_MAIL_LIMITS as Tt, recoverRetainedInteractiveRun as U, addHarnessUsage as Un, parseCommittedJsonLines as Ur, pendingWaits as Ut, workerInteractiveBindingsDir as V, startRetainedRunInEnvironment as Vn, worktreeCliProfileMaterialization as Vr, loadSpawnForest as Vt, startRetainedInteractiveRun as W, createCodexRolloutStoreReader as Wn, prepareJsonlAppend as Wr, replaySpawnTree as Wt, DEFAULT_SUCCESSFUL_SHUTDOWN_MS as X, traceContextToEnv as Xn, inheritRuntimeOwnedExecutorAttestation as Xr, contentAddress as Xt, rollingDispatch as Y, readTraceContextFromEnv as Yn, finalizeRuntimeOwnedPendingExecutor as Yr, workerTraceAnalysisStore as Yt, teardownExecutor as Z, INTELLIGENCE_WIRE_VERSION as Zn, knownExecutionBindingReceipt as Zr, assertValidBudget as Zt, deriveNodeExecutionIdentity as _, canonicalStreamEventFromSandboxEvent as _i, resolveAgentEnvironmentProvider as _n, captureWorktreeDiff as _r, createPushTraceSource as _t, createSupervisor as a, runtimeOwnedExecutorProviderEvidence as ai, createSandboxLineage as an, generateSpanId as ar, cliWorktreeExecutor as at, recordScopeOwnerMaterialization as b, extractLlmCallEvent as bi, chargedTokens as bn, DEFAULT_LOCAL_HARNESS as br, DEFAULT_STALL_AFTER_MS as bt, pickBestDelivered as c, unknownExecutionBindingReceipt as ci, assertBoxlessPromptOptions as cn, padTraceId as cr, snapshotExecutorConfig as ct, driverChild as d, executableAgentSpecSnapshot as di, runBrainLoop as dn, createRuntimeStreamEventCollector as dr, readWorkerTraceContext as dt, providerAttemptEvidence as ei, TERMINAL_DECISIONS as en, buildRuntimeEventOtelSpans as er, bridgeModelRouteRefusal as et, driverExecutorFactory as f, detachedFrozen as fi, canonicalObservedModelParts as fn, sanitizeAgentRuntimeEvent as fr, workerTraceEnv as ft, createScope as g, assertSandboxServedModel as gi, providerAsSandboxClient as gn, runWorktreeHarness as gr, createSteerableSandboxSession as gt, beginScopeOwnerAttempt as h, readSandboxOutcome as hi, providerAsExecutor as hn, runSettledCommand as hr, DEFAULT_SANDBOX_STEERING_MAX_TURNS as ht, createRootHandle as i, runtimeOwnedExecutorMaterialization as ii, runAgentRounds as in, flatOtelSpan as ir, cliInPlaceExecutor as it, prepareScopeRetainedOwnerTask as j, promptFromAgentTurnInput as ji, unmeteredSpend as jn, profileMaterializationAxes$1 as jr, peerMailVerbNames as jt, waitUntil as k, abortError$2 as ki, throwAbort as kn, defineProfileMaterializationContract as kr, isPeerMailEnvelope as kt, runFinalizer as l, unknownMaterializationReceipt as li, readPromptOptions as ln, toOtelAttributes as lr, createWorktreeCliExecutor as lt, withDriverExecutor as m, projectSandboxOutcome as mi, createAgentEnvironmentProviderRegistry as mn, sanitizeRuntimeStreamEvent as mr, workerTraceSeamKey as mt, defaultRedactorIdentityMaterial as n, runtimeOwnedDriveHarnessProviderEvidence as ni, defaultSelectWinner as nn, createOtelExporter as nr, bridgeStopSignalKey as nt, bestDelivered as o, runtimeOwnedPendingExecutorMaterialization as oi, probeSandboxCapabilities as on, loopEventToOtelSpan as or, createExecutor as ot, isDriverSpec as p, detachedSnapshot as pi, observedModelMatchesDeclared as pn, sanitizeKnowledgeReadinessReport as pr, workerTraceHeaders as pt, freeSlots as q, createPropagatingTraceEmitter as qn, attestRuntimeOwnedScopeOwner as qr, isTraceAnalysisStore as qt, resolveRedactor as r, runtimeOwnedExecutorExecutionBinding as ri, isTerminalDecision as rn, exportEvalRuns as rr, captureReusableExecutorConfig as rt, collectDelivered as s, runtimeOwnedScopeOwnerRuntime as si, acquireSandbox as sn, padSpanId as sr, createExecutorRegistry as st, defaultRedactor as t, recordRuntimeOwnedDriveHarnessProviderEvidence as ti, createSandboxForSpec as tn, createOpenInferenceFileExporter as tr, bridgeRuntimeAttachmentsKey as tt, runTree as u, executableAgentProfileSnapshot as ui, routerBrain as un, createRuntimeEventCollector as ur, WORKER_TRACE_PROPAGATION as ut, meterRuntimeOwnedAccounting as v, createSandboxToolPartState as vi, sandboxClientAsProvider as vn, createWorktree as vr, decodeToolPart as vt, createWaitProbes as w, notifySandboxEventObserver as wi, isAbortError$2 as wn, parseCodexTokenUsage as wr, AUTHORITY_MARKERS as wt, restoreScopeOwnerAcceptedExecution as x, isSandboxTerminalEvent as xi, cloneSpend as xn, LOCAL_HARNESSES as xr, createActivityLog as xt, meterRuntimeOwnedProviderAttempt as y, createSandboxUsageLedger as yi, addSpend as yn, removeWorktree as yr, sandboxSessionTraceSource as yt, readWorkerInteractiveBinding as z, recoverRetainedRun as zn, unsupportedProfileDimensions as zr, InMemorySpawnJournal as zt };
22324
22338
 
22325
- //# sourceMappingURL=redact-BMwd8IBm.js.map
22339
+ //# sourceMappingURL=redact-DXxGazcg.js.map