@ai-sdk/code-mode 1.0.21 → 1.0.22

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 (50) hide show
  1. package/README.md +1 -1
  2. package/dist/continuation-capability.js +5 -0
  3. package/dist/continuation-capability.js.map +1 -1
  4. package/dist/errors.js +1 -136
  5. package/dist/errors.js.map +1 -1
  6. package/dist/host-interrupt.js +2 -14
  7. package/dist/host-interrupt.js.map +1 -1
  8. package/dist/index.d.ts +14 -44
  9. package/dist/index.js +1 -1
  10. package/dist/index.js.map +1 -1
  11. package/dist/interrupt-continuation.js +3 -8
  12. package/dist/interrupt-continuation.js.map +1 -1
  13. package/dist/run-code-mode.js +543 -2
  14. package/dist/run-code-mode.js.map +1 -1
  15. package/dist/tool-invocation.js +9 -23
  16. package/dist/tool-invocation.js.map +1 -1
  17. package/dist/utils/serialization.js +4 -0
  18. package/dist/utils/serialization.js.map +1 -1
  19. package/package.json +8 -7
  20. package/src/continuation-capability.ts +18 -0
  21. package/src/errors.ts +0 -190
  22. package/src/host-interrupt.ts +2 -31
  23. package/src/index.ts +1 -1
  24. package/src/interrupt-continuation.ts +13 -15
  25. package/src/run-code-mode.ts +706 -3
  26. package/src/tool-invocation.ts +9 -23
  27. package/src/types.ts +38 -68
  28. package/src/utils/serialization.ts +4 -0
  29. package/dist/runtime/guest-sources.js +0 -350
  30. package/dist/runtime/guest-sources.js.map +0 -1
  31. package/dist/runtime/manager.js +0 -794
  32. package/dist/runtime/manager.js.map +0 -1
  33. package/dist/runtime/max-workers.js +0 -40
  34. package/dist/runtime/max-workers.js.map +0 -1
  35. package/dist/runtime/protocol.js +0 -1
  36. package/dist/runtime/protocol.js.map +0 -1
  37. package/dist/runtime/worker-source.d.ts +0 -11
  38. package/dist/runtime/worker-source.js +0 -2
  39. package/dist/utils/options.js +0 -76
  40. package/dist/utils/options.js.map +0 -1
  41. package/dist/utils/source-cache.js +0 -77
  42. package/dist/utils/source-cache.js.map +0 -1
  43. package/src/runtime/guest-sources.ts +0 -351
  44. package/src/runtime/manager.ts +0 -963
  45. package/src/runtime/max-workers.ts +0 -65
  46. package/src/runtime/protocol.ts +0 -74
  47. package/src/runtime/worker-source.ts +0 -10
  48. package/src/runtime/worker.ts +0 -607
  49. package/src/utils/options.ts +0 -83
  50. package/src/utils/source-cache.ts +0 -91
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/runtime/manager.ts"],"sourcesContent":["import { AsyncResource } from 'node:async_hooks';\nimport { Buffer } from 'node:buffer';\nimport { randomBytes } from 'node:crypto';\nimport { Worker } from 'node:worker_threads';\nimport {\n isCodeModeApprovalInterruptPayload,\n normalizeApprovalResolution,\n} from '../approval.js';\nimport {\n resolveCodeModeContinuationSecurity,\n signCodeModeContinuation,\n verifyCodeModeContinuation,\n type ResolvedCodeModeContinuationSecurity,\n} from '../continuation-capability.js';\nimport {\n CodeModeAbortedError,\n CodeModeBridgeLimitError,\n CodeModeConcurrencyError,\n CodeModeDetachedBridgeRequestError,\n CodeModeProtocolError,\n CodeModeTimeoutError,\n CodeModeToolApprovalDeniedError,\n deserializeError,\n serializeBridgeErrorForGuest,\n} from '../errors.js';\nimport { invokeHostTool } from '../tool-invocation.js';\nimport { normalizeOptions } from '../utils/options.js';\nimport { assertSourceSize, transformSource } from '../utils/source-cache.js';\nimport type {\n CodeModeContinuationLedgerEntry,\n CodeModeInterrupt,\n CodeModeInterruptExecutionContext,\n CodeModeToolExecutionOptions,\n NormalizedCodeModeOptions,\n RunCodeModeInput,\n} from '../types.js';\nimport { getMaxWorkers } from './max-workers.js';\nimport type {\n MainToWorkerMessage,\n WorkerReadyMessage,\n WorkerResultMessage,\n WorkerToolRequest,\n WorkerToMainMessage,\n} from './protocol.js';\nimport { INLINE_CODE_MODE_WORKER_SOURCE } from './worker-source.js';\n\ninterface PooledWorker {\n worker: Worker;\n destroyed: boolean;\n}\n\ninterface ManagedWorkerRun {\n result: Promise<unknown>;\n}\n\nlet invocationCounter = 0;\nlet activeInvocations = 0;\nlet inlineWorkerUrl: URL | undefined;\nconst idleWorkers: PooledWorker[] = [];\n\nexport async function runManagedCodeMode(\n input: RunCodeModeInput,\n): Promise<unknown> {\n const normalizedOptions = normalizeOptions(input.options);\n const continuationSecurity = resolveCodeModeContinuationSecurity(\n input.options?.continuationSecurity,\n );\n const maxWorkers = getMaxWorkers({\n memoryLimitBytes: normalizedOptions.memoryLimitBytes,\n activeWorkers: activeInvocations,\n });\n if (activeInvocations >= maxWorkers) {\n throw new CodeModeConcurrencyError(maxWorkers);\n }\n\n activeInvocations++;\n try {\n if (input.toolExecutionOptions?.abortSignal?.aborted) {\n throw new CodeModeAbortedError();\n }\n\n assertSourceSize(input.js, normalizedOptions.maxSourceBytes);\n const js = transformSource(input.js);\n assertContinuationInput({\n js,\n continuation: input.continuation,\n interruptResolution: input.interruptResolution,\n continuationSecurity,\n });\n const run = startWorkerRun({\n ...input,\n js,\n normalizedOptions,\n maxWorkers,\n continuationSecurity,\n });\n return await run.result;\n } finally {\n releaseInvocationSlot(normalizedOptions.memoryLimitBytes);\n }\n}\n\nfunction startWorkerRun({\n js,\n tools,\n toolExecutionOptions,\n options,\n continuation,\n interruptResolution,\n normalizedOptions,\n maxWorkers,\n continuationSecurity,\n}: RunCodeModeInput & {\n normalizedOptions: NormalizedCodeModeOptions;\n maxWorkers: number;\n continuationSecurity: ResolvedCodeModeContinuationSecurity;\n}): ManagedWorkerRun {\n const invocationId = `code-mode-${++invocationCounter}`;\n const pooledWorker = acquireWorker(maxWorkers);\n const worker = pooledWorker.worker;\n const invocationContext = new AsyncResource('ai-sdk-code-mode:invocation');\n const bindInvocationContext = <Args extends unknown[]>(\n handler: (...args: Args) => void,\n ): ((...args: Args) => void) => {\n return (...args: Args): void => {\n invocationContext.runInAsyncScope(handler, undefined, ...args);\n };\n };\n\n const outerAbortSignal = toolExecutionOptions?.abortSignal;\n const invocationAbortController = new AbortController();\n let nestedToolCounter = getMaxNestedToolCounter(continuation?.ledger ?? []);\n const forwardedContext =\n toolExecutionOptions?.context ?? toolExecutionOptions?.experimental_context;\n const forwardedExperimentalContext =\n toolExecutionOptions?.experimental_context ?? toolExecutionOptions?.context;\n const baseExecutionOptions: CodeModeToolExecutionOptions = {\n toolCallId:\n toolExecutionOptions?.toolCallId ??\n continuation?.outerToolCallId ??\n invocationId,\n messages: toolExecutionOptions?.messages ?? [],\n abortSignal: invocationAbortController.signal,\n ...(forwardedExperimentalContext !== undefined\n ? { experimental_context: forwardedExperimentalContext }\n : {}),\n ...(forwardedContext !== undefined ? { context: forwardedContext } : {}),\n };\n\n let resultMessage: WorkerResultMessage | undefined;\n let callerSettled = false;\n let terminalReached = false;\n let workerCleanedUp = false;\n let totalBridgeRequests = 0;\n let inFlightBridgeRequests = 0;\n let interruptEntryIndex: number | undefined;\n let interruptDrainCounter = 0;\n let pendingInterruptDrainId: string | undefined;\n let interruptResolutionConsumed = interruptResolution === undefined;\n const seenWorkerRequestIds = new Set<string>();\n const bridgeLedger = cloneLedger(continuation?.ledger ?? []);\n const determinism = continuation?.determinism ?? createDeterminismState();\n\n let resolveResult!: (value: unknown) => void;\n let rejectResult!: (reason?: unknown) => void;\n const result = new Promise<unknown>((resolve, reject) => {\n resolveResult = resolve;\n rejectResult = reject;\n });\n\n const abortInvocation = (reason: unknown) => {\n if (!invocationAbortController.signal.aborted) {\n invocationAbortController.abort(reason);\n }\n };\n\n const cleanupWorker = (reuseWorker: boolean) => {\n if (workerCleanedUp) {\n return;\n }\n workerCleanedUp = true;\n clearTimeout(timeoutHandle);\n outerAbortSignal?.removeEventListener('abort', onAbort);\n worker.off('message', onMessage);\n worker.off('error', onError);\n worker.off('exit', onExit);\n invocationContext.emitDestroy();\n if (reuseWorker) {\n releaseWorker(pooledWorker);\n } else {\n destroyWorker(pooledWorker);\n }\n };\n\n const settleCaller = (settle: () => void) => {\n if (callerSettled) {\n return;\n }\n callerSettled = true;\n try {\n settle();\n } catch (error) {\n rejectResult(error);\n }\n };\n\n const failTerminal = (error: unknown) => {\n if (terminalReached) {\n return;\n }\n terminalReached = true;\n abortInvocation(error);\n cleanupWorker(false);\n settleCaller(() => rejectResult(error));\n };\n\n const onAbort = bindInvocationContext(() => {\n failTerminal(new CodeModeAbortedError());\n });\n\n const timeoutHandle = setTimeout(\n bindInvocationContext(() => {\n failTerminal(new CodeModeTimeoutError(normalizedOptions.timeoutMs));\n }),\n normalizedOptions.timeoutMs,\n );\n\n const onMessage = bindInvocationContext((message: WorkerToMainMessage) => {\n if (message.invocationId !== invocationId) {\n failTerminal(\n new CodeModeProtocolError(\n `Worker message invocationId mismatch: expected ${invocationId}, received ${message.invocationId}.`,\n {\n expectedInvocationId: invocationId,\n receivedInvocationId: message.invocationId,\n messageType: message.type,\n },\n ),\n );\n return;\n }\n\n if (message.type === 'result') {\n if (resultMessage !== undefined) {\n failTerminal(\n new CodeModeProtocolError(\n `Worker sent duplicate result for invocation ${invocationId}.`,\n { invocationId },\n ),\n );\n return;\n }\n resultMessage = message;\n return;\n }\n\n if (message.type === 'ready') {\n handleReadyMessage(message);\n return;\n }\n\n if (message.type === 'bridge-drained') {\n if (\n pendingInterruptDrainId === undefined ||\n message.drainId !== pendingInterruptDrainId\n ) {\n failTerminal(\n new CodeModeProtocolError(\n `Worker sent unexpected bridge drain acknowledgement ${message.drainId}.`,\n {\n invocationId,\n expectedDrainId: pendingInterruptDrainId,\n receivedDrainId: message.drainId,\n },\n ),\n );\n return;\n }\n pendingInterruptDrainId = undefined;\n if (inFlightBridgeRequests === 0) {\n settleInterrupt();\n }\n return;\n }\n\n const bridgeIndex = markWorkerRequest(message);\n if (bridgeIndex !== undefined) {\n void handleToolRequest(message, bridgeIndex);\n }\n });\n\n const onError = bindInvocationContext((error: Error) => {\n failTerminal(error);\n });\n\n const onExit = bindInvocationContext((code: number) => {\n if (!terminalReached) {\n failTerminal(\n new Error(\n `Code mode worker exited before completion with code ${code}.`,\n ),\n );\n }\n });\n\n worker.on('message', onMessage);\n worker.on('error', onError);\n worker.on('exit', onExit);\n outerAbortSignal?.addEventListener('abort', onAbort, { once: true });\n if (outerAbortSignal?.aborted) {\n onAbort();\n }\n\n const runMessage: MainToWorkerMessage = {\n type: 'run',\n invocationId,\n js,\n determinism,\n options: {\n timeoutMs: normalizedOptions.timeoutMs,\n memoryLimitBytes: normalizedOptions.memoryLimitBytes,\n maxStackSizeBytes: normalizedOptions.maxStackSizeBytes,\n maxResultBytes: normalizedOptions.maxResultBytes,\n maxConsoleOutputBytes: normalizedOptions.maxConsoleOutputBytes,\n },\n };\n\n if (!terminalReached) {\n try {\n // eslint-disable-next-line unicorn/require-post-message-target-origin -- Node.js Worker has no targetOrigin parameter.\n worker.postMessage(runMessage);\n } catch (error) {\n failTerminal(error);\n }\n }\n\n return { result };\n\n function markWorkerRequest(message: WorkerToolRequest): number | undefined {\n if (terminalReached) {\n return undefined;\n }\n if (seenWorkerRequestIds.has(message.requestId)) {\n failTerminal(\n new CodeModeProtocolError(\n `Worker sent duplicate requestId ${message.requestId}.`,\n { invocationId, requestId: message.requestId },\n ),\n );\n return undefined;\n }\n seenWorkerRequestIds.add(message.requestId);\n\n if (totalBridgeRequests >= normalizedOptions.maxBridgeRequests) {\n failTerminal(\n new CodeModeBridgeLimitError(\n `Code mode exceeded the ${normalizedOptions.maxBridgeRequests} bridge request limit.`,\n {\n invocationId,\n maxBridgeRequests: normalizedOptions.maxBridgeRequests,\n },\n ),\n );\n return undefined;\n }\n if (inFlightBridgeRequests >= normalizedOptions.maxInFlightBridgeRequests) {\n failTerminal(\n new CodeModeBridgeLimitError(\n `Code mode exceeded the ${normalizedOptions.maxInFlightBridgeRequests} in-flight bridge request limit.`,\n {\n invocationId,\n maxInFlightBridgeRequests:\n normalizedOptions.maxInFlightBridgeRequests,\n },\n ),\n );\n return undefined;\n }\n\n totalBridgeRequests++;\n inFlightBridgeRequests++;\n return totalBridgeRequests;\n }\n\n async function handleToolRequest(\n message: WorkerToolRequest,\n bridgeIndex: number,\n ): Promise<void> {\n const replayEntry = bridgeLedger[bridgeIndex - 1];\n try {\n if (replayEntry !== undefined) {\n assertReplayEntryMatches(replayEntry, message, bridgeIndex);\n\n if (replayEntry.status === 'fulfilled') {\n postBridgeResponse({\n type: 'bridge-response',\n invocationId,\n requestId: message.requestId,\n success: true,\n dateNowMs: replayEntry.dateNowMs,\n valueJson: replayEntry.valueJson,\n });\n return;\n }\n\n if (replayEntry.status === 'rejected') {\n postBridgeResponse({\n type: 'bridge-response',\n invocationId,\n requestId: message.requestId,\n success: false,\n dateNowMs: replayEntry.dateNowMs,\n error: replayEntry.error,\n });\n return;\n }\n\n if (interruptResolution?.interruptId !== replayEntry.interruptId) {\n requestInterrupt(bridgeIndex - 1);\n return;\n }\n\n interruptResolutionConsumed = true;\n const isApproval = isCodeModeApprovalInterruptPayload(\n replayEntry.interruptPayload,\n );\n if (isApproval) {\n const decision = normalizeApprovalResolution(\n interruptResolution.resolution,\n );\n if (!decision.approved) {\n const error = new CodeModeToolApprovalDeniedError(\n replayEntry.name,\n fromJsonPayload(message.inputJson),\n replayEntry.toolCallId,\n decision.reason,\n );\n const dateNowMs = Date.now();\n const guestError = serializeBridgeErrorForGuest(error, 'tool');\n bridgeLedger[bridgeIndex - 1] = {\n kind: 'tool',\n name: message.toolName,\n inputJson: message.inputJson,\n toolCallId: replayEntry.toolCallId,\n status: 'rejected',\n dateNowMs,\n error: guestError,\n };\n postBridgeResponse({\n type: 'bridge-response',\n invocationId,\n requestId: message.requestId,\n success: false,\n dateNowMs,\n error: guestError,\n });\n return;\n }\n }\n\n const codeModeInterrupt: CodeModeInterruptExecutionContext | undefined =\n isApproval\n ? undefined\n : {\n interruptId: replayEntry.interruptId,\n payload: replayEntry.interruptPayload,\n resolution: interruptResolution.resolution,\n };\n const outcome = await invokeHostTool({\n toolName: message.toolName,\n inputJson: message.inputJson,\n tools,\n baseExecutionOptions,\n codeModeOptions: options ?? {},\n maxToolInputBytes: normalizedOptions.maxToolInputBytes,\n maxToolOutputBytes: normalizedOptions.maxToolOutputBytes,\n toolCallId: replayEntry.toolCallId,\n ...(codeModeInterrupt !== undefined ? { codeModeInterrupt } : {}),\n skipApproval: true,\n });\n if (outcome.type === 'interrupted') {\n bridgeLedger[bridgeIndex - 1] = {\n kind: 'tool',\n name: message.toolName,\n inputJson: message.inputJson,\n toolCallId: replayEntry.toolCallId,\n interruptId: `${replayEntry.toolCallId}:interrupt`,\n interruptPayload: outcome.payload,\n status: 'interrupted',\n };\n requestInterrupt(bridgeIndex - 1);\n return;\n }\n\n const dateNowMs = Date.now();\n bridgeLedger[bridgeIndex - 1] = {\n kind: 'tool',\n name: message.toolName,\n inputJson: message.inputJson,\n toolCallId: replayEntry.toolCallId,\n status: 'fulfilled',\n dateNowMs,\n valueJson: outcome.valueJson,\n };\n postBridgeResponse({\n type: 'bridge-response',\n invocationId,\n requestId: message.requestId,\n success: true,\n dateNowMs,\n valueJson: outcome.valueJson,\n });\n return;\n }\n\n const toolCallId = `${baseExecutionOptions.toolCallId}:tool-${++nestedToolCounter}`;\n const outcome = await invokeHostTool({\n toolName: message.toolName,\n inputJson: message.inputJson,\n tools,\n baseExecutionOptions,\n codeModeOptions: options ?? {},\n maxToolInputBytes: normalizedOptions.maxToolInputBytes,\n maxToolOutputBytes: normalizedOptions.maxToolOutputBytes,\n toolCallId,\n });\n if (outcome.type === 'interrupted') {\n bridgeLedger[bridgeIndex - 1] = {\n kind: 'tool',\n name: message.toolName,\n inputJson: message.inputJson,\n toolCallId,\n interruptId: `${toolCallId}:interrupt`,\n interruptPayload: outcome.payload,\n status: 'interrupted',\n };\n requestInterrupt(bridgeIndex - 1);\n return;\n }\n\n const dateNowMs = Date.now();\n bridgeLedger[bridgeIndex - 1] = {\n kind: 'tool',\n name: message.toolName,\n inputJson: message.inputJson,\n toolCallId,\n status: 'fulfilled',\n dateNowMs,\n valueJson: outcome.valueJson,\n };\n postBridgeResponse({\n type: 'bridge-response',\n invocationId,\n requestId: message.requestId,\n success: true,\n dateNowMs,\n valueJson: outcome.valueJson,\n });\n } catch (error) {\n if (error instanceof CodeModeProtocolError) {\n failTerminal(error);\n return;\n }\n const dateNowMs = Date.now();\n const guestError = serializeBridgeErrorForGuest(error, 'tool');\n const toolCallId =\n replayEntry?.toolCallId ??\n `${baseExecutionOptions.toolCallId}:tool-${nestedToolCounter}`;\n if (\n replayEntry === undefined ||\n (replayEntry.status === 'interrupted' &&\n interruptResolution?.interruptId === replayEntry.interruptId)\n ) {\n bridgeLedger[bridgeIndex - 1] = {\n kind: 'tool',\n name: message.toolName,\n inputJson: message.inputJson,\n toolCallId,\n status: 'rejected',\n dateNowMs,\n error: guestError,\n };\n }\n postBridgeResponse({\n type: 'bridge-response',\n invocationId,\n requestId: message.requestId,\n success: false,\n dateNowMs,\n error: guestError,\n });\n } finally {\n inFlightBridgeRequests--;\n settleInterruptIfReady();\n }\n }\n\n function requestInterrupt(entryIndex: number): void {\n interruptEntryIndex ??= entryIndex;\n }\n\n function settleInterruptIfReady(): void {\n if (\n interruptEntryIndex === undefined ||\n terminalReached ||\n inFlightBridgeRequests > 0 ||\n pendingInterruptDrainId !== undefined ||\n !interruptResolutionConsumed\n ) {\n return;\n }\n pendingInterruptDrainId = `${invocationId}:drain-${++interruptDrainCounter}`;\n postBridgeResponse({\n type: 'bridge-drain',\n invocationId,\n drainId: pendingInterruptDrainId,\n });\n }\n\n function settleInterrupt(): void {\n if (\n interruptEntryIndex === undefined ||\n terminalReached ||\n inFlightBridgeRequests > 0 ||\n !interruptResolutionConsumed\n ) {\n return;\n }\n\n const entry = bridgeLedger[interruptEntryIndex];\n if (entry === undefined || entry.status !== 'interrupted') {\n failTerminal(\n new CodeModeProtocolError(\n 'Code mode interruption references a missing or resolved ledger entry.',\n { invocationId, interruptEntryIndex },\n ),\n );\n return;\n }\n\n const continuationState = signCodeModeContinuation(\n {\n version: 1,\n js,\n outerToolCallId: baseExecutionOptions.toolCallId,\n determinism: { ...determinism },\n ledger: cloneLedger(bridgeLedger),\n },\n continuationSecurity,\n );\n const interrupt: CodeModeInterrupt = {\n type: 'code-mode-interrupt',\n interruptId: entry.interruptId,\n toolName: entry.name,\n toolCallId: entry.toolCallId,\n outerToolCallId: continuationState.outerToolCallId,\n input: fromJsonPayload(entry.inputJson),\n payload: structuredClone(entry.interruptPayload),\n continuation: continuationState,\n };\n\n terminalReached = true;\n abortInvocation(interrupt);\n cleanupWorker(false);\n settleCaller(() => resolveResult(interrupt));\n }\n\n function postBridgeResponse(message: MainToWorkerMessage): void {\n if (terminalReached) {\n return;\n }\n try {\n // eslint-disable-next-line unicorn/require-post-message-target-origin -- Node.js Worker has no targetOrigin parameter.\n worker.postMessage(message);\n } catch (error) {\n failTerminal(error);\n }\n }\n\n function handleReadyMessage(message: WorkerReadyMessage): void {\n if (terminalReached) {\n return;\n }\n if (interruptEntryIndex !== undefined) {\n settleInterruptIfReady();\n return;\n }\n if (resultMessage === undefined) {\n failTerminal(\n new CodeModeProtocolError(\n `Code mode worker became ready without a result for ${message.invocationId}.`,\n { invocationId: message.invocationId },\n ),\n );\n return;\n }\n\n if (!interruptResolutionConsumed) {\n failTerminal(\n new CodeModeProtocolError(\n 'Code mode continuation completed without consuming its interrupt resolution.',\n { interruptId: interruptResolution?.interruptId },\n ),\n );\n return;\n }\n if (\n continuation !== undefined &&\n totalBridgeRequests < bridgeLedger.length\n ) {\n failTerminal(\n new CodeModeProtocolError(\n 'Code mode continuation returned before replaying the full bridge ledger.',\n {\n replayedBridgeRequests: totalBridgeRequests,\n ledgerEntries: bridgeLedger.length,\n },\n ),\n );\n return;\n }\n\n terminalReached = true;\n const finalResultMessage = resultMessage;\n if (inFlightBridgeRequests > 0) {\n const error = finalResultMessage.success\n ? new CodeModeDetachedBridgeRequestError(\n `Code mode returned while ${inFlightBridgeRequests} bridge request(s) were still in flight.`,\n {\n invocationId,\n inFlightBridgeRequests,\n totalBridgeRequests,\n },\n )\n : deserializeResultError(finalResultMessage);\n abortInvocation(error);\n cleanupWorker(false);\n settleCaller(() => rejectResult(error));\n return;\n }\n\n cleanupWorker(true);\n settleCaller(() =>\n settleWithResultMessage(finalResultMessage, resolveResult, rejectResult),\n );\n }\n}\n\nfunction assertContinuationInput({\n js,\n continuation,\n interruptResolution,\n continuationSecurity,\n}: {\n js: string;\n continuation: RunCodeModeInput['continuation'];\n interruptResolution: RunCodeModeInput['interruptResolution'];\n continuationSecurity: ResolvedCodeModeContinuationSecurity;\n}): void {\n if (continuation === undefined) {\n if (interruptResolution !== undefined) {\n throw new CodeModeProtocolError(\n 'A code-mode interrupt resolution was provided without continuation state.',\n );\n }\n return;\n }\n\n verifyCodeModeContinuation(continuation, continuationSecurity);\n if (continuation.version !== 1) {\n throw new CodeModeProtocolError(\n 'Unsupported code-mode continuation version.',\n );\n }\n if (continuation.js !== js) {\n throw new CodeModeProtocolError(\n 'Code mode continuation source does not match the resumed source.',\n );\n }\n if (\n !Number.isInteger(continuation.determinism.dateNowMs) ||\n !/^[0-9a-f]{32}$/i.test(continuation.determinism.randomSeed)\n ) {\n throw new CodeModeProtocolError(\n 'Code mode continuation determinism state is malformed.',\n );\n }\n for (const entry of continuation.ledger) {\n if (\n entry.kind !== 'tool' ||\n typeof entry.name !== 'string' ||\n typeof entry.inputJson !== 'string' ||\n typeof entry.toolCallId !== 'string'\n ) {\n throw new CodeModeProtocolError(\n 'Code mode continuation ledger is malformed.',\n );\n }\n }\n if (interruptResolution !== undefined) {\n const matches = continuation.ledger.filter(\n entry =>\n entry.status === 'interrupted' &&\n entry.interruptId === interruptResolution.interruptId,\n );\n if (matches.length !== 1) {\n throw new CodeModeProtocolError(\n 'Interrupt resolution does not match exactly one pending continuation ledger entry.',\n {\n interruptId: interruptResolution.interruptId,\n matches: matches.length,\n },\n );\n }\n }\n}\n\nfunction assertReplayEntryMatches(\n entry: CodeModeContinuationLedgerEntry,\n message: WorkerToolRequest,\n bridgeIndex: number,\n): void {\n if (\n entry.name !== message.toolName ||\n entry.inputJson !== message.inputJson\n ) {\n throw new CodeModeProtocolError(\n 'Code mode continuation replay diverged from its bridge ledger.',\n {\n bridgeIndex,\n expectedToolName: entry.name,\n receivedToolName: message.toolName,\n },\n );\n }\n}\n\nfunction createDeterminismState(): {\n dateNowMs: number;\n randomSeed: string;\n} {\n return {\n dateNowMs: Date.now(),\n randomSeed: randomBytes(16).toString('hex'),\n };\n}\n\nfunction cloneLedger(\n ledger: CodeModeContinuationLedgerEntry[],\n): CodeModeContinuationLedgerEntry[] {\n return structuredClone(ledger);\n}\n\nfunction getMaxNestedToolCounter(\n ledger: CodeModeContinuationLedgerEntry[],\n): number {\n let max = 0;\n for (const entry of ledger) {\n const match = /:tool-(\\d+)$/u.exec(entry.toolCallId);\n if (match !== null) {\n max = Math.max(max, Number(match[1]));\n }\n }\n return max;\n}\n\nfunction fromJsonPayload(valueJson: string): unknown {\n return valueJson === '' ? undefined : JSON.parse(valueJson);\n}\n\nfunction acquireWorker(maxPoolSize: number): PooledWorker {\n let pooledWorker = idleWorkers.pop();\n while (pooledWorker?.destroyed) {\n pooledWorker = idleWorkers.pop();\n }\n pooledWorker ??= createWorker();\n pooledWorker.worker.removeAllListeners('exit');\n pooledWorker.worker.ref();\n trimIdleWorkers(Math.max(0, maxPoolSize - activeInvocations));\n return pooledWorker;\n}\n\nfunction createWorker(): PooledWorker {\n return {\n worker: new Worker(getInlineWorkerUrl(), { execArgv: [] }),\n destroyed: false,\n };\n}\n\nfunction getInlineWorkerUrl(): URL {\n inlineWorkerUrl ??= new URL(\n `data:text/javascript;base64,${Buffer.from(INLINE_CODE_MODE_WORKER_SOURCE).toString('base64')}`,\n );\n return inlineWorkerUrl;\n}\n\nfunction releaseWorker(pooledWorker: PooledWorker): void {\n if (pooledWorker.destroyed) {\n return;\n }\n pooledWorker.worker.once('exit', () => {\n pooledWorker.destroyed = true;\n const index = idleWorkers.indexOf(pooledWorker);\n if (index !== -1) {\n idleWorkers.splice(index, 1);\n }\n });\n pooledWorker.worker.unref();\n idleWorkers.push(pooledWorker);\n}\n\nfunction destroyWorker(pooledWorker: PooledWorker): void {\n if (pooledWorker.destroyed) {\n return;\n }\n pooledWorker.destroyed = true;\n pooledWorker.worker.removeAllListeners();\n void pooledWorker.worker.terminate();\n}\n\nfunction trimIdleWorkers(maxIdleWorkers: number): void {\n while (idleWorkers.length > maxIdleWorkers) {\n const pooledWorker = idleWorkers.pop();\n if (pooledWorker !== undefined) {\n destroyWorker(pooledWorker);\n }\n }\n}\n\nfunction releaseInvocationSlot(memoryLimitBytes: number): void {\n activeInvocations = Math.max(0, activeInvocations - 1);\n const maxWorkers = getMaxWorkers({\n memoryLimitBytes,\n activeWorkers: activeInvocations,\n });\n trimIdleWorkers(Math.max(0, maxWorkers - activeInvocations));\n}\n\nfunction settleWithResultMessage(\n message: WorkerResultMessage,\n resolve: (value: unknown) => void,\n reject: (reason?: unknown) => void,\n): void {\n if (!message.success) {\n reject(deserializeResultError(message));\n return;\n }\n resolve(\n message.valueJson === '' || message.valueJson === undefined\n ? undefined\n : JSON.parse(message.valueJson),\n );\n}\n\nfunction deserializeResultError(message: WorkerResultMessage): Error {\n if (message.error === undefined) {\n return new CodeModeProtocolError(\n `Code mode worker failed without an error for ${message.invocationId}.`,\n { invocationId: message.invocationId },\n );\n }\n return deserializeError(message.error);\n}\n"],"mappings":"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","names":["dateNowMs","outcome"]}
@@ -1,40 +0,0 @@
1
- import os from "node:os";
2
- const DEFAULT_MAX_WORKERS_CAP = 32;
3
- const DEFAULT_WORKER_OVERHEAD_BYTES = 48 * 1024 * 1024;
4
- let configuredMaxWorkers;
5
- function setMaxWorkers(maxWorkers) {
6
- if (maxWorkers === void 0) {
7
- configuredMaxWorkers = void 0;
8
- return;
9
- }
10
- if (!Number.isInteger(maxWorkers) || maxWorkers <= 0) {
11
- throw new TypeError("maxWorkers must be a positive integer.");
12
- }
13
- configuredMaxWorkers = maxWorkers;
14
- }
15
- function getMaxWorkers({
16
- memoryLimitBytes,
17
- activeWorkers
18
- }) {
19
- if (configuredMaxWorkers !== void 0) {
20
- return configuredMaxWorkers;
21
- }
22
- const estimatedBytesPerWorker = memoryLimitBytes + DEFAULT_WORKER_OVERHEAD_BYTES;
23
- const additionalWorkers = Math.floor(
24
- availableMemory() / estimatedBytesPerWorker
25
- );
26
- return Math.max(
27
- 1,
28
- Math.min(DEFAULT_MAX_WORKERS_CAP, activeWorkers + additionalWorkers)
29
- );
30
- }
31
- function availableMemory() {
32
- const processWithAvailableMemory = process;
33
- const bytes = typeof processWithAvailableMemory.availableMemory === "function" ? processWithAvailableMemory.availableMemory() : os.freemem();
34
- return Number.isFinite(bytes) && bytes > 0 ? bytes : 0;
35
- }
36
- export {
37
- getMaxWorkers,
38
- setMaxWorkers
39
- };
40
- //# sourceMappingURL=max-workers.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/runtime/max-workers.ts"],"sourcesContent":["import os from 'node:os';\n\nconst DEFAULT_MAX_WORKERS_CAP = 32;\nconst DEFAULT_WORKER_OVERHEAD_BYTES = 48 * 1024 * 1024;\n\nlet configuredMaxWorkers: number | undefined;\n\n/**\n * Sets the process-global maximum number of active code-mode workers.\n *\n * Pass `undefined` or call without an argument to restore the dynamic\n * memory-based default. The default admits at least one invocation and admits\n * additional workers only when available memory can cover another worker.\n *\n * @param maxWorkers - Positive integer worker cap, or `undefined` to reset.\n */\nexport function setMaxWorkers(maxWorkers?: number): void {\n if (maxWorkers === undefined) {\n configuredMaxWorkers = undefined;\n return;\n }\n if (!Number.isInteger(maxWorkers) || maxWorkers <= 0) {\n throw new TypeError('maxWorkers must be a positive integer.');\n }\n configuredMaxWorkers = maxWorkers;\n}\n\n/**\n * Returns the currently effective worker cap.\n *\n * @internal\n */\nexport function getMaxWorkers({\n memoryLimitBytes,\n activeWorkers,\n}: {\n memoryLimitBytes: number;\n activeWorkers: number;\n}): number {\n if (configuredMaxWorkers !== undefined) {\n return configuredMaxWorkers;\n }\n\n const estimatedBytesPerWorker =\n memoryLimitBytes + DEFAULT_WORKER_OVERHEAD_BYTES;\n const additionalWorkers = Math.floor(\n availableMemory() / estimatedBytesPerWorker,\n );\n\n return Math.max(\n 1,\n Math.min(DEFAULT_MAX_WORKERS_CAP, activeWorkers + additionalWorkers),\n );\n}\n\nfunction availableMemory(): number {\n const processWithAvailableMemory = process as typeof process & {\n availableMemory?: () => number;\n };\n const bytes =\n typeof processWithAvailableMemory.availableMemory === 'function'\n ? processWithAvailableMemory.availableMemory()\n : os.freemem();\n return Number.isFinite(bytes) && bytes > 0 ? bytes : 0;\n}\n"],"mappings":"AAAA,OAAO,QAAQ;AAEf,MAAM,0BAA0B;AAChC,MAAM,gCAAgC,KAAK,OAAO;AAElD,IAAI;AAWG,SAAS,cAAc,YAA2B;AACvD,MAAI,eAAe,QAAW;AAC5B,2BAAuB;AACvB;AAAA,EACF;AACA,MAAI,CAAC,OAAO,UAAU,UAAU,KAAK,cAAc,GAAG;AACpD,UAAM,IAAI,UAAU,wCAAwC;AAAA,EAC9D;AACA,yBAAuB;AACzB;AAOO,SAAS,cAAc;AAAA,EAC5B;AAAA,EACA;AACF,GAGW;AACT,MAAI,yBAAyB,QAAW;AACtC,WAAO;AAAA,EACT;AAEA,QAAM,0BACJ,mBAAmB;AACrB,QAAM,oBAAoB,KAAK;AAAA,IAC7B,gBAAgB,IAAI;AAAA,EACtB;AAEA,SAAO,KAAK;AAAA,IACV;AAAA,IACA,KAAK,IAAI,yBAAyB,gBAAgB,iBAAiB;AAAA,EACrE;AACF;AAEA,SAAS,kBAA0B;AACjC,QAAM,6BAA6B;AAGnC,QAAM,QACJ,OAAO,2BAA2B,oBAAoB,aAClD,2BAA2B,gBAAgB,IAC3C,GAAG,QAAQ;AACjB,SAAO,OAAO,SAAS,KAAK,KAAK,QAAQ,IAAI,QAAQ;AACvD;","names":[]}
@@ -1 +0,0 @@
1
- //# sourceMappingURL=protocol.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -1,11 +0,0 @@
1
- /**
2
- * Inline worker source generated into `dist/runtime/worker-source.js` during
3
- * package builds.
4
- *
5
- * The source placeholder is intentionally unusable before the build step so a
6
- * broken package build fails loudly instead of trying to run an empty worker.
7
- *
8
- */
9
- declare const INLINE_CODE_MODE_WORKER_SOURCE = "throw new Error(\"Code mode inline worker source was not generated.\");";
10
-
11
- export { INLINE_CODE_MODE_WORKER_SOURCE };