fix(agents): classify internal aborts as non-deliverable · openclaw/openclaw@a4d3add
obviyus
·
2026-05-31
·
via Recent Commits to openclaw:main
File tree
src/agents/embedded-agent-runner/run
| Original file line number | Diff line number | Diff line change |
|---|
@@ -11,6 +11,7 @@ function baseParams(
|
11 | 11 | ): ResolveAttemptTrajectoryTerminalParams { |
12 | 12 | return { |
13 | 13 | aborted: false, |
| 14 | +externalAbort: false, |
14 | 15 | timedOut: false, |
15 | 16 | assistantTexts: [], |
16 | 17 | toolMetas: [], |
@@ -177,6 +178,21 @@ describe("attempt trajectory status", () => {
|
177 | 178 | ).toEqual({ status: "success" }); |
178 | 179 | }); |
179 | 180 | |
| 181 | +it("marks internally aborted tool-use attempts without delivery as non-deliverable", () => { |
| 182 | +expect( |
| 183 | +resolveAttemptTrajectoryTerminal( |
| 184 | +baseParams({ |
| 185 | +aborted: true, |
| 186 | +toolMetas: [{ toolName: "web_search" }], |
| 187 | +lastAssistantStopReason: "toolUse", |
| 188 | +}), |
| 189 | +), |
| 190 | +).toEqual({ |
| 191 | +status: "error", |
| 192 | +terminalError: NON_DELIVERABLE_TERMINAL_TURN_REASON, |
| 193 | +}); |
| 194 | +}); |
| 195 | + |
180 | 196 | it("keeps async-started media tool-use attempts as terminal progress", () => { |
181 | 197 | expect( |
182 | 198 | resolveAttemptTrajectoryTerminal( |
@@ -195,5 +211,10 @@ describe("attempt trajectory status", () => {
|
195 | 211 | expect(resolveAttemptTrajectoryTerminal(baseParams({ timedOut: true }))).toEqual({ |
196 | 212 | status: "interrupted", |
197 | 213 | }); |
| 214 | +expect( |
| 215 | +resolveAttemptTrajectoryTerminal(baseParams({ aborted: true, externalAbort: true })), |
| 216 | +).toEqual({ |
| 217 | +status: "interrupted", |
| 218 | +}); |
198 | 219 | }); |
199 | 220 | }); |
| Original file line number | Diff line number | Diff line change |
|---|
@@ -15,6 +15,7 @@ export type AttemptTrajectoryTerminal = {
|
15 | 15 | export type ResolveAttemptTrajectoryTerminalParams = { |
16 | 16 | promptError?: unknown; |
17 | 17 | aborted: boolean; |
| 18 | +externalAbort: boolean; |
18 | 19 | timedOut: boolean; |
19 | 20 | assistantTexts: string[]; |
20 | 21 | toolMetas: Array<{ toolName: string; meta?: string; asyncStarted?: boolean }>; |
@@ -81,7 +82,7 @@ export function resolveAttemptTrajectoryTerminal(
|
81 | 82 | if (params.promptError) { |
82 | 83 | return { status: "error" }; |
83 | 84 | } |
84 | | -if (params.aborted || params.timedOut) { |
| 85 | +if ((params.aborted && params.externalAbort) || params.timedOut) { |
85 | 86 | return { status: "interrupted" }; |
86 | 87 | } |
87 | 88 | |
|
| Original file line number | Diff line number | Diff line change |
|---|
@@ -4658,6 +4658,7 @@ export async function runEmbeddedAttempt(
|
4658 | 4658 | const attemptTrajectoryTerminal = resolveAttemptTrajectoryTerminal({ |
4659 | 4659 | promptError, |
4660 | 4660 | aborted, |
| 4661 | + externalAbort, |
4661 | 4662 | timedOut, |
4662 | 4663 | assistantTexts: terminalAssistantTexts, |
4663 | 4664 | toolMetas: toolMetasNormalized, |
|
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。