From 2200d100d071d20fc53a550ca97c970ab7c99e1c Mon Sep 17 00:00:00 2001 From: Kit Langton Date: Fri, 24 Jul 2026 13:32:14 -0400 Subject: [PATCH] refactor(core): name the unsettled-tool sweep scope and untangle hosted settlement (#38724) --- packages/core/src/session/runner/llm.ts | 37 ++++++------------- .../src/session/runner/publish-llm-event.ts | 4 +- 2 files changed, 13 insertions(+), 28 deletions(-) diff --git a/packages/core/src/session/runner/llm.ts b/packages/core/src/session/runner/llm.ts index ed358e66666..0762e5f2465 100644 --- a/packages/core/src/session/runner/llm.ts +++ b/packages/core/src/session/runner/llm.ts @@ -364,32 +364,17 @@ const layer = Layer.effect( // these sweeps only close calls that could not produce a truthful settlement. if (providerFailed) yield* serialized(publisher.failUnsettledTools({ type: "aborted", message: "Tool execution interrupted" })) - if (llmFailure && !providerFailed) - yield* serialized( - publisher.failUnsettledTools( - { - type: "tool.result-missing", - message: "Provider did not return a tool result", - }, - true, - ), - ) - const hostedResultMissing = - stream._tag === "Success" && !providerFailed - ? yield* serialized( - publisher.failUnsettledTools( - { type: "tool.result-missing", message: "Provider did not return a tool result" }, - true, - ), - ) - : false - if (hostedResultMissing && !publisher.stepSettlement()) - yield* serialized( - publisher.failAssistant({ - type: "tool.result-missing", - message: "Provider did not return a tool result", - }), - ) + const resultMissing = { + type: "tool.result-missing", + message: "Provider did not return a tool result", + } as const + if (llmFailure && !providerFailed) yield* serialized(publisher.failUnsettledTools(resultMissing, "hosted")) + // A clean stream that still left hosted calls unresolved fails the step itself. + if (stream._tag === "Success" && !providerFailed) { + const hostedResultMissing = yield* serialized(publisher.failUnsettledTools(resultMissing, "hosted")) + if (hostedResultMissing && !publisher.stepSettlement()) + yield* serialized(publisher.failAssistant(resultMissing)) + } const stepFailure = publisher.stepFailure() const stepSettlement = publisher.stepSettlement() diff --git a/packages/core/src/session/runner/publish-llm-event.ts b/packages/core/src/session/runner/publish-llm-event.ts index bb00c540c65..cefe60da869 100644 --- a/packages/core/src/session/runner/publish-llm-event.ts +++ b/packages/core/src/session/runner/publish-llm-event.ts @@ -277,9 +277,9 @@ export const createLLMEventPublisher = (events: Pick {