





























@@ -101,6 +101,8 @@ type CodeModeRunState = {
101101102102type CodeModeToolContext = ToolSearchToolContext;
103103104+type CodeModeFailureCode = "invalid_input" | "runtime_unavailable" | "timeout" | "internal_error";
105+104106type CodeModeWorkerResult =
105107| {
106108status: "completed";
@@ -116,7 +118,7 @@ type CodeModeWorkerResult =
116118| {
117119status: "failed";
118120error: string;
119-code: "invalid_input" | "internal_error";
121+code: CodeModeFailureCode;
120122output: unknown[];
121123};
122124@@ -504,13 +506,31 @@ function codeModeWorkerUrl(): URL {
504506return resolveCodeModeWorkerUrl(import.meta.url);
505507}
506508509+function failedCodeModeWorkerResult(
510+error: unknown,
511+code: CodeModeFailureCode,
512+): Extract<CodeModeWorkerResult, { status: "failed" }> {
513+return {
514+status: "failed",
515+error: errorMessage(error),
516+ code,
517+output: [],
518+};
519+}
520+507521async function runCodeModeWorker(
508522workerData: unknown,
509523timeoutMs: number,
524+workerUrl?: URL,
510525): Promise<CodeModeWorkerResult> {
511-const worker = new Worker(codeModeWorkerUrl(), {
512- workerData,
513-});
526+let worker: Worker;
527+try {
528+worker = new Worker(workerUrl ?? codeModeWorkerUrl(), {
529+ workerData,
530+});
531+} catch (error) {
532+return failedCodeModeWorkerResult(error, "runtime_unavailable");
533+}
514534let timer: ReturnType<typeof setTimeout> | undefined;
515535try {
516536return await new Promise<CodeModeWorkerResult>((resolve) => {
@@ -527,7 +547,7 @@ async function runCodeModeWorker(
527547finish({
528548status: "failed",
529549error: "code mode worker timeout exceeded",
530-code: "internal_error",
550+code: "timeout",
531551output: [],
532552});
533553}, timeoutMs);
@@ -545,21 +565,16 @@ async function runCodeModeWorker(
545565);
546566});
547567worker.once("error", (error) => {
548-finish({
549-status: "failed",
550-error: errorMessage(error),
551-code: "internal_error",
552-output: [],
553-});
568+finish(failedCodeModeWorkerResult(error, "runtime_unavailable"));
554569});
555570worker.once("exit", (code) => {
556571if (code !== 0) {
557-finish({
558-status: "failed",
559-error: `code mode worker exited with code ${code}`,
560-code: "internal_error",
561-output: [],
562-});
572+finish(
573+failedCodeModeWorkerResult(
574+ new Error(`code mode worker exited with code ${code}`),
575+ "runtime_unavailable",
576+),
577+);
563578}
564579});
565580});
@@ -949,6 +964,7 @@ export const testing = {
949964 activeRuns,
950965 resumingRunIds,
951966 codeModeWorkerUrl,
967+ runCodeModeWorker,
952968 resolveCodeModeWorkerUrl,
953969 resolveCodeModeConfig,
954970getTypescriptRuntimePromise: () => typescriptRuntimePromise,
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。