惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园_首页
J
Java Code Geeks
aimingoo的专栏
aimingoo的专栏
Microsoft Security Blog
Microsoft Security Blog
U
Unit 42
罗磊的独立博客
小众软件
小众软件
酷 壳 – CoolShell
酷 壳 – CoolShell
D
Docker
B
Blog RSS Feed
F
Fortinet All Blogs
博客园 - Franky
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
博客园 - 司徒正美
云风的 BLOG
云风的 BLOG
C
Check Point Blog
M
Microsoft Research Blog - Microsoft Research
爱范儿
爱范儿
人人都是产品经理
人人都是产品经理
Cisco Talos Blog
Cisco Talos Blog
C
Cyber Attacks, Cyber Crime and Cyber Security
NISL@THU
NISL@THU
E
Exploit-DB.com RSS Feed
L
LINUX DO - 最新话题
W
WeLiveSecurity
N
News and Events Feed by Topic
C
Comments on: Blog
Scott Helme
Scott Helme
L
LINUX DO - 热门话题
S
Security @ Cisco Blogs
Google Online Security Blog
Google Online Security Blog
Hacker News: Ask HN
Hacker News: Ask HN
P
Proofpoint News Feed
S
Securelist
SecWiki News
SecWiki News
The Register - Security
The Register - Security
K
Kaspersky official blog
Security Latest
Security Latest
V
Visual Studio Blog
T
Troy Hunt's Blog
WordPress大学
WordPress大学
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
Martin Fowler
Martin Fowler
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
宝玉的分享
宝玉的分享
H
Help Net Security
T
Threat Research - Cisco Blogs
大猫的无限游戏
大猫的无限游戏
N
News and Events Feed by Topic
MongoDB | Blog
MongoDB | Blog

Recent Commits to openclaw:main

docs(config): quote bracket config paths (#83058) · openclaw/openclaw@88f50e8 docs: link Copilot model availability (#76252) · openclaw/openclaw@14b2b8a test(telegram): await watchdog registration event · openclaw/openclaw@9fae5f7 ci: run binding command escape in release checks · openclaw/openclaw@4b63502 test: add docker proof for plugin binding command escape · openclaw/openclaw@d756e1c test(telegram): wait for polling watchdog deterministically · openclaw/openclaw@7c9127c ci: skip pnpm auto repair in Crabbox shell · openclaw/openclaw@0241a6e fix(gateway): add .catch() to SIGTERM/SIGUSR1 signal handlers (#83131) fix: release cron runtime state after isolated runs (#85053) · openclaw/openclaw@247e536 fix(cron): suppress fatal error completion announce (#83724) · openclaw/openclaw@0c7220f fix(exec): parse nested approval metadata in async followups (#72268) · openclaw/openclaw@34c441c ci: share Crabbox hydrate pnpm store · openclaw/openclaw@7552634 chore(release): refresh plugin SDK baseline · openclaw/openclaw@736e7de ci(release): harden node setup before pnpm cache · openclaw/openclaw@a26aba6 ci(release): pass node pin to pnpm setup ci: use stable pnpm wrapper for Crabbox hydrate · openclaw/openclaw@b00d306 docs: refine maintainer docs sweep docs(memory): add guidance for action-sensitive memories (#82788) · openclaw/openclaw@bd04b1e docs(feishu): add dynamicAgentCreation and per-user isolation docs (#… docs(secrets): clarify agent-readable plaintext boundary (#84574) · openclaw/openclaw@ce5dcb0 docs(channels): document ackReactionScope for Slack & Telegram (DM go… · openclaw/openclaw@bbbed26 build(pnpm): use packageManager as pnpm source · openclaw/openclaw@a0702e1 ci: export Crabbox hydrate pnpm layout · openclaw/openclaw@f6840ac fix(gateway): preserve fresh agent session state · openclaw/openclaw@6f41653 fix(gateway): attribute agent wait timeouts ci: keep Crabbox hydrate runs reusable · openclaw/openclaw@489ea84 Speed up /models browse replies (#84735) · openclaw/openclaw@936dfaa docs: update changelog for plugin binding command escape (#85188) · openclaw/openclaw@9fc5346 Let binding commands escape plugin routes · openclaw/openclaw@af12082 ci: fix Crabbox hydrate pnpm modules dir · openclaw/openclaw@c9b17c5 Restore Control UI gateway token pairing [AI] (#85459) · openclaw/openclaw@10cb0a5 fix(docker): accept single-object pnpm list output · openclaw/openclaw@5e97045 fix: apply docs sweep updates · openclaw/openclaw@59aef2f fix(update): roll back failed git updates · openclaw/openclaw@769fd0b test(docker): expect prod store seed command fix(agents): bound embedded compaction write locks · openclaw/openclaw@46de078 fix(update): repair managed npm plugin peers · openclaw/openclaw@571f364 fix(update): repair managed npm plugin peers (#83794) (thanks @fuller… · openclaw/openclaw@de8a82a fix(telegram): honor table mode in outbound chunks (#85455) · openclaw/openclaw@7fc691a fix(docker): precreate owned named volume targets (#85454) · openclaw/openclaw@d8b9736 fix(ui): strip ANSI from displayed gateway logs (#85453) · openclaw/openclaw@664611c fix(skills): accept macos os requirement on darwin (#85451) fix(gateway): preserve message-tool replies in chat history test: track Docker prod store seed command · openclaw/openclaw@9a816f4 fix: satisfy prod store package list lint · openclaw/openclaw@d5247d0 test(plugins): clear lookup metadata memo fix(docker): seed prod store before offline prune · openclaw/openclaw@6788aa1 fix(memory): expand home paths in extra memory paths (#85449) · openclaw/openclaw@48bf037 docs: add security FAQ guidance chore(deps): refresh npm shrinkwraps docs: clarify OpenAI HTTP client guidance docs: remove stale showcase intro videos · openclaw/openclaw@00d3dca fix(gateway): point model override error to config docs docs: document secrets provider plan fields docs: clarify media directive formatting · openclaw/openclaw@c876fec docs: align memory search cache default refactor(ios): centralize setup auth parsing test(release): wait for config reload log proof refactor(ios): consolidate manual auth override inputs · openclaw/openclaw@d93c597 fix(ui): hide thinking options for non-reasoning models (#85406) · openclaw/openclaw@bb4d88e fix(ui): attach pasted data image text (#85392) · openclaw/openclaw@a03a8d9 fix(gateway): preserve OpenAI usage aliases in chat history (#85383) · openclaw/openclaw@d9c6c5f feat(ios): add realtime talk relay mode · openclaw/openclaw@e730e9b fix(browser): hint WSL portproxy CDP empty replies (#85379) · openclaw/openclaw@933f01c fix(installer): persist portable Git on Windows · openclaw/openclaw@5b90a48 fix(opencode-go): strip Kimi reasoning replay fields (#85377) · openclaw/openclaw@d22bcfc fix(build): normalize cache paths on Windows (#85437) · openclaw/openclaw@81d22c8 fix(update): detect nested macOS gateway ancestry (#85391) · openclaw/openclaw@adc6adc fix(docker): seed offline prune store in runtime stage · openclaw/openclaw@faf2a6c fix(ci): stabilize npm shrinkwrap metadata · openclaw/openclaw@21bedd3 fix(codex): route node exec through OpenClaw tools · openclaw/openclaw@5cc0dbc test(installer): track portable node root helper · openclaw/openclaw@9364b21 fix(ui): sync talk transcript translations fix(ui): localize talk transcript labels · openclaw/openclaw@8fc48af fix(release): stabilize config restart QA · openclaw/openclaw@cc91ff0 fix(installer): extract portable Node directly test(qa-lab): report scenario pack coverage · openclaw/openclaw@dcd98bf fix(plugins): drop stale tlon tool contract · openclaw/openclaw@d70dc4b fix(installer): prefer tar for portable Node extraction · openclaw/openclaw@a54a881 fix(codex): deliver native subagent completions feat: add context-engine host capability requirements (#84994) · openclaw/openclaw@cff5244 fix(release): keep shrinkwrap pinned to pnpm lock · openclaw/openclaw@9d24fde fix: surface plan updates as status notices · openclaw/openclaw@dc04503 test(google): narrow web search fake timers · openclaw/openclaw@fe7d13c fix(installer): extract portable Node with ZipFile · openclaw/openclaw@ffa6cd8 fix(gateway): defer provider auth prewarm after startup (#85369) · openclaw/openclaw@69255f8 fix(talk): stabilize realtime voice consults · openclaw/openclaw@683ad75 test(qa): tolerate slow gateway rpc startup · openclaw/openclaw@29118a0 chore(diagnostics): refresh plugin sdk baseline · openclaw/openclaw@ab684f5 fix(diagnostics): surface async queue drops fix(diagnostics): bound diagnostic buffers · openclaw/openclaw@bdcaac0 fix(installer): copy portable Node into place · openclaw/openclaw@c21ca88 fix(cli): recover replaced device approvals (#85342) · openclaw/openclaw@6ea907c test(release): align prerelease validation · openclaw/openclaw@0def3e2 fix(installer): install portable Node directory atomically · openclaw/openclaw@2890b1a fix(runtime-llm): avoid duplicate provider prefix in allowlist diagno… · openclaw/openclaw@937a756 fix(gateway): include openclaw bin in service PATH (#84475) · openclaw/openclaw@66d1d13 fix(gateway): handle concurrent launchd bootstrap restart race (#84722) · openclaw/openclaw@ba86716 feat: support pi and opencode autoreview engines · openclaw/openclaw@31a189d ci(package): gate acceptance on package integrity · openclaw/openclaw@5275929
fix(tui): dismiss watchdog notice when response actually arrives (#77… · openclaw/openclaw@b741ddb
RomneyDa · 2026-05-23 · via Recent Commits to openclaw:main

@@ -8,6 +8,8 @@ type HandlerChatLog = {

88

startTool: (...args: unknown[]) => void;

99

updateToolResult: (...args: unknown[]) => void;

1010

addSystem: (...args: unknown[]) => void;

11+

addPendingSystem: (...args: unknown[]) => void;

12+

dismissPendingSystem: (...args: unknown[]) => void;

1113

updateAssistant: (...args: unknown[]) => void;

1214

finalizeAssistant: (...args: unknown[]) => void;

1315

dropAssistant: (...args: unknown[]) => void;

@@ -21,6 +23,8 @@ type MockChatLog = {

2123

startTool: MockFn;

2224

updateToolResult: MockFn;

2325

addSystem: MockFn;

26+

addPendingSystem: MockFn;

27+

dismissPendingSystem: MockFn;

2428

updateAssistant: MockFn;

2529

finalizeAssistant: MockFn;

2630

dropAssistant: MockFn;

@@ -36,6 +40,8 @@ function createMockChatLog(): MockChatLog & HandlerChatLog {

3640

startTool: vi.fn(),

3741

updateToolResult: vi.fn(),

3842

addSystem: vi.fn(),

43+

addPendingSystem: vi.fn(),

44+

dismissPendingSystem: vi.fn(),

3945

updateAssistant: vi.fn(),

4046

finalizeAssistant: vi.fn(),

4147

dropAssistant: vi.fn(),

@@ -1178,7 +1184,7 @@ describe("tui-event-handlers: streaming watchdog", () => {

1178118411791185

expect(setActivityStatus).toHaveBeenLastCalledWith("idle");

11801186

expect(state.activeChatRunId).toBeNull();

1181-

expect(chatLog.addSystem).toHaveBeenCalledWith(expectedTimeoutMessage);

1187+

expect(chatLog.addPendingSystem).toHaveBeenCalledWith("run-stuck", expectedTimeoutMessage);

1182118811831189

handlers.dispose?.();

11841190

});

@@ -1384,7 +1390,7 @@ describe("tui-event-handlers: streaming watchdog", () => {

13841390

expect(setActivityStatus).toHaveBeenLastCalledWith("idle");

13851391

expect(state.activeChatRunId).toBeNull();

13861392

expect(loadHistory).toHaveBeenCalledTimes(1);

1387-

expect(chatLog.addSystem).not.toHaveBeenCalledWith(expectedTimeoutMessage);

1393+

expect(chatLog.addPendingSystem).not.toHaveBeenCalled();

1388139413891395

handlers.dispose?.();

13901396

});

@@ -1410,8 +1416,8 @@ describe("tui-event-handlers: streaming watchdog", () => {

14101416

vi.advanceTimersByTime(10_000);

1411141714121418

const statusCalls = setActivityStatus.mock.calls.map((c) => c[0]);

1413-

expect(statusCalls.reduce((count, s) => count + (s === "idle" ? 1 : 0), 0)).toBe(1);

1414-

expect(chatLog.addSystem).not.toHaveBeenCalledWith(expectedTimeoutMessage);

1419+

expect(statusCalls.filter((s) => s === "idle").length).toBe(1);

1420+

expect(chatLog.addPendingSystem).not.toHaveBeenCalled();

14151421

expect(state.activeChatRunId).toBeNull();

1416142214171423

handlers.dispose?.();

@@ -1432,7 +1438,7 @@ describe("tui-event-handlers: streaming watchdog", () => {

14321438

vi.advanceTimersByTime(60_000);

1433143914341440

expect(setActivityStatus).not.toHaveBeenCalledWith("idle");

1435-

expect(chatLog.addSystem).not.toHaveBeenCalled();

1441+

expect(chatLog.addPendingSystem).not.toHaveBeenCalled();

14361442

expect(state.activeChatRunId).toBe("run-no-watchdog");

1437144314381444

handlers.dispose?.();

@@ -1474,7 +1480,7 @@ describe("tui-event-handlers: streaming watchdog", () => {

1474148014751481

expect(setActivityStatus).toHaveBeenLastCalledWith("idle");

14761482

expect(state.activeChatRunId).toBeNull();

1477-

expect(chatLog.addSystem).toHaveBeenCalledTimes(2);

1483+

expect(chatLog.addPendingSystem).toHaveBeenCalledTimes(2);

1478148414791485

handlers.dispose?.();

14801486

});

@@ -1495,6 +1501,60 @@ describe("tui-event-handlers: streaming watchdog", () => {

14951501

vi.advanceTimersByTime(10_000);

1496150214971503

expect(setActivityStatus).not.toHaveBeenCalledWith("idle");

1498-

expect(chatLog.addSystem).not.toHaveBeenCalled();

1504+

expect(chatLog.addPendingSystem).not.toHaveBeenCalled();

1505+

});

1506+1507+

it("dismisses the watchdog notice when a delta arrives after the watchdog fires", () => {

1508+

const { state, chatLog, handlers } = createHarness({

1509+

streamingWatchdogMs: 5_000,

1510+

});

1511+1512+

handlers.handleChatEvent({

1513+

runId: "run-late",

1514+

sessionKey: state.currentSessionKey,

1515+

state: "delta",

1516+

message: { content: "starting" },

1517+

} satisfies ChatEvent);

1518+1519+

vi.advanceTimersByTime(5_001);

1520+

expect(chatLog.addPendingSystem).toHaveBeenCalledWith("run-late", expectedTimeoutMessage);

1521+1522+

handlers.handleChatEvent({

1523+

runId: "run-late",

1524+

sessionKey: state.currentSessionKey,

1525+

state: "delta",

1526+

message: { content: "actually here" },

1527+

} satisfies ChatEvent);

1528+1529+

expect(chatLog.dismissPendingSystem).toHaveBeenCalledWith("run-late");

1530+1531+

handlers.dispose?.();

1532+

});

1533+1534+

it("dismisses the watchdog notice when the final arrives after the watchdog fires", () => {

1535+

const { state, chatLog, handlers } = createHarness({

1536+

streamingWatchdogMs: 5_000,

1537+

});

1538+1539+

handlers.handleChatEvent({

1540+

runId: "run-final-late",

1541+

sessionKey: state.currentSessionKey,

1542+

state: "delta",

1543+

message: { content: "starting" },

1544+

} satisfies ChatEvent);

1545+1546+

vi.advanceTimersByTime(5_001);

1547+

expect(chatLog.addPendingSystem).toHaveBeenCalledWith("run-final-late", expectedTimeoutMessage);

1548+1549+

handlers.handleChatEvent({

1550+

runId: "run-final-late",

1551+

sessionKey: state.currentSessionKey,

1552+

state: "final",

1553+

message: { content: [{ type: "text", text: "done" }], stopReason: "stop" },

1554+

} satisfies ChatEvent);

1555+1556+

expect(chatLog.dismissPendingSystem).toHaveBeenCalledWith("run-final-late");

1557+1558+

handlers.dispose?.();

14991559

});

15001560

});