From c04845d96dca379aa558889d13e6e5dd6a7e9c5d Mon Sep 17 00:00:00 2001 From: Ben Follington <5009316+bfollington@users.noreply.github.com> Date: Thu, 9 Oct 2025 09:26:04 +1000 Subject: [PATCH 1/2] Revert to promise-based waiting for pattern tool results Fixes `searchWeb` --- packages/runner/src/builtins/llm-dialog.ts | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/packages/runner/src/builtins/llm-dialog.ts b/packages/runner/src/builtins/llm-dialog.ts index a53d4ac4a..45cc938f7 100644 --- a/packages/runner/src/builtins/llm-dialog.ts +++ b/packages/runner/src/builtins/llm-dialog.ts @@ -358,6 +358,8 @@ async function invokeToolCall( await ensureSourceCharmRunning(runtime, charmMeta); } + const { resolve, promise } = Promise.withResolvers(); + // runSynced charm runtime.editWithRetry((tx) => { if (pattern) { @@ -372,12 +374,24 @@ async function invokeToolCall( } }); - await runtime.idle(); + if (pattern) { + // wait until we know we have the result of the tool call + // not just that the transaction has been comitted + const cancel = result.sink((r) => { + r !== undefined && resolve(r); + }); + const resultValue = await promise; + cancel(); + + // stop it now that we have the result + runtime.runner.stop(result); + return { type: "json", value: resultValue }; + } else { + await runtime.idle(); + return { type: "json", value: result.get() }; + } - // If this was a pattern, stop it now that we have the result - if (pattern) runtime.runner.stop(result); - return { type: "json", value: result.get() }; } /** From 277b34f35f417fa37259f9ba32def238533aa1b7 Mon Sep 17 00:00:00 2001 From: Ben Follington <5009316+bfollington@users.noreply.github.com> Date: Thu, 9 Oct 2025 09:28:01 +1000 Subject: [PATCH 2/2] Format pass --- packages/runner/src/builtins/llm-dialog.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/packages/runner/src/builtins/llm-dialog.ts b/packages/runner/src/builtins/llm-dialog.ts index 45cc938f7..470a26e5a 100644 --- a/packages/runner/src/builtins/llm-dialog.ts +++ b/packages/runner/src/builtins/llm-dialog.ts @@ -390,8 +390,6 @@ async function invokeToolCall( await runtime.idle(); return { type: "json", value: result.get() }; } - - } /**