From aef92cc1f38f46d4b70b0239e7fa34cdb69b0f64 Mon Sep 17 00:00:00 2001 From: giles Date: Fri, 17 Apr 2026 13:40:43 +0000 Subject: [PATCH] Fix _driveAsync to handle dict-format IO requests from callFn path MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The callFn suspension returns requests as {op: "io-sleep", args: {items: [100]}} (dict format) but _driveAsync only handled list format (op-name arg ...). Result: io-sleep/wait resumes never fired — tests hung after first suspension. Co-Authored-By: Claude Opus 4.6 (1M context) --- shared/static/wasm/sx-platform.js | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/shared/static/wasm/sx-platform.js b/shared/static/wasm/sx-platform.js index 1b873404..40bebf8c 100644 --- a/shared/static/wasm/sx-platform.js +++ b/shared/static/wasm/sx-platform.js @@ -89,10 +89,17 @@ window._driveAsync = function driveAsync(result) { if (!result || !result.suspended) return; var req = result.request; - var items = req && (req.items || req); - var op = items && items[0]; - var opName = typeof op === "string" ? op : (op && op.name) || String(op); - var arg = items && items[1]; + // Request can be dict {op, args} or list (op-name arg ...) + var opName, arg; + if (req && req._type === "dict" && req.op) { + opName = req.op; + arg = req.args && req.args.items ? req.args.items[0] : null; + } else { + var items = req && (req.items || req); + var op = items && items[0]; + opName = typeof op === "string" ? op : (op && op.name) || String(op); + arg = items && items[1]; + } if (opName === "io-sleep" || opName === "wait") { setTimeout(function() { try { driveAsync(result.resume(null)); } catch(e) { console.error("[sx] driveAsync:", e.message); }