[codex] Fix Control UI terminal run status recovery

This commit is contained in:
clawsweeper
2026-05-19 11:42:28 +00:00
parent 293cfb44fb
commit f9f503add0
3 changed files with 41 additions and 2 deletions
+1
View File
@@ -10,6 +10,7 @@ Docs: https://docs.openclaw.ai
### Fixes
- Control UI: treat terminal session status as authoritative over stale active-run flags so completed terminal runs stop showing abort/live UI. (#84057)
- CLI: preserve embedded equals signs in inline root option values instead of truncating after the second separator. (#83995) Thanks @ThiagoCAltoe.
- Providers/Ollama: default unknown-capabilities models to tool-capable so discovered native Ollama models can use tools when `/api/show` omits capabilities. (#84055) Thanks @dutifulbob.
- Installer/Windows: launch `install.ps1` onboarding as an attached child process so fresh native Windows installs do not freeze visibly at `Starting setup...` or corrupt the wizard's terminal rendering.
+35
View File
@@ -548,6 +548,41 @@ describe("sessions view", () => {
);
});
it("does not filter terminal sessions as live when active-run flags are stale", async () => {
const container = document.createElement("div");
render(
renderSessions({
...buildProps(
buildMultiResult([
{
key: "agent:main:done",
kind: "direct",
updatedAt: 20,
hasActiveRun: true,
status: "done",
},
{
key: "agent:main:running",
kind: "direct",
updatedAt: 10,
hasActiveRun: true,
status: "running",
},
]),
),
searchQuery: "live",
}),
container,
);
await Promise.resolve();
const rows = container.querySelectorAll("tbody tr.session-data-row");
expect(rows).toHaveLength(1);
expect(rows[0]?.querySelector(".session-key-cell")?.textContent?.trim()).toBe(
"agent:main:running",
);
});
it("keeps raw keys for inherited identity object properties", async () => {
const container = document.createElement("div");
render(
+5 -2
View File
@@ -248,8 +248,11 @@ function filterRows(
const displayName = normalizeLowercaseStringOrEmpty(row.displayName);
const runtime = normalizeLowercaseStringOrEmpty(resolveAgentRuntimeLabel(row.agentRuntime));
const status = normalizeLowercaseStringOrEmpty(row.status);
const liveState =
row.hasActiveRun === true ? "live running" : row.hasActiveRun === false ? "idle" : "";
const liveState = isSessionRunActive(row)
? "live running"
: row.hasActiveRun === false
? "idle"
: "";
if (
key.includes(q) ||
label.includes(q) ||