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

推荐订阅源

Stack Overflow Blog
Stack Overflow Blog
量子位
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
美团技术团队
小众软件
小众软件
aimingoo的专栏
aimingoo的专栏
Recent Announcements
Recent Announcements
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Microsoft Security Blog
Microsoft Security Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
酷 壳 – CoolShell
酷 壳 – CoolShell
J
Java Code Geeks
V
V2EX
大猫的无限游戏
大猫的无限游戏
D
DataBreaches.Net
博客园 - Franky
爱范儿
爱范儿
T
Tailwind CSS Blog
A
About on SuperTechFans
Google DeepMind News
Google DeepMind News
博客园_首页
B
Blog RSS Feed
博客园 - 司徒正美
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知

Recent Commits to openclaw:main

test: merge chat side-result checks · openclaw/openclaw@ddd2c2a test: merge cron history checks · openclaw/openclaw@f7eb746 test: merge responsive navigation shell checks · openclaw/openclaw@c2e4b47 docs(changelog): add codex oauth fixes · openclaw/openclaw@628e6cd test: merge navigation routing cases · openclaw/openclaw@5d8cecb Tests: mock channel registry bundled fallback · openclaw/openclaw@2b08233 Secrets: avoid broad web search discovery for single plugin config · openclaw/openclaw@a464f59 test: merge config view browser checks · openclaw/openclaw@20cf511 fix(status): align oauth health with runtime · openclaw/openclaw@eed7116 feat: add macOS screen snapshots for monitor preview (#67954) thanks … · openclaw/openclaw@f377db1 fix: report shared auth scopes in hello-ok (#67810) thanks @BunsDev · openclaw/openclaw@0b6c39b Auto-reply: avoid eager bundled route fallback · openclaw/openclaw@3ea1bf4 Tests: narrow session binding contract setup · openclaw/openclaw@54e4e16 fix(macOS): enable undo/redo in webchat composer text input (#34962) · openclaw/openclaw@00951dc Tests: speed up channel setup promotion · openclaw/openclaw@82b529a Docs: refresh agent instructions · openclaw/openclaw@5775fe2 fix(auth): serialize OAuth refresh across agents to fix #26322 (#67876) · openclaw/openclaw@8e79080 test: allow ollama public surface boundary test · openclaw/openclaw@7d4f1a6 Docs: add test performance guardrails · openclaw/openclaw@89706d3 Tests: restore context-engine usage proof · openclaw/openclaw@e4c4f95 Tests: slim context engine runtime coverage · openclaw/openclaw@74c198f ci: retry failed custom checkouts · openclaw/openclaw@0ee5baf test: trim duplicate provider auth onboarding cases · openclaw/openclaw@1ffc02e matrix: fix sessions_spawn --thread subagent session spawning (#67643) · openclaw/openclaw@1ce2596 test: reduce auth choice fixture churn · openclaw/openclaw@857b9cd test: mock health status config boundaries · openclaw/openclaw@9d5ab4a test: mock onboard config io boundary · openclaw/openclaw@299694d test: mock legacy state plugin boundaries · openclaw/openclaw@2713089 test: mock channel install boundaries · openclaw/openclaw@b945248 test: mock doctor preview channel boundaries · openclaw/openclaw@b1a3ad4
fix(agents): skip dormant completion wake probes · opencl...
galiniliev · 2026-05-19 · via Recent Commits to openclaw:main
Original file line numberDiff line numberDiff line change

@@ -6,6 +6,7 @@ Docs: https://docs.openclaw.ai

66
77

### Fixes

88
9+

- Agents/subagents: skip stale embedded-run wake probes for dormant completion requesters, so late subagent completions go straight to requester-agent/direct handoff instead of producing `reason=no_active_run` queue noise. (#82964) Thanks @galiniliev.

910

- WhatsApp: drain pending outbound deliveries on a 30s periodic timer in addition to the reconnect handler, so messages enqueued while the provider is already connected no longer wait for the next reconnect to send. (#79083) Thanks @Oviemudiaga.

1011
1112

## 2026.5.19

Original file line numberDiff line numberDiff line change

@@ -849,12 +849,14 @@ describe("deliverSubagentAnnouncement completion delivery", () => {

849849
850850

it("keeps direct external delivery for dormant completion requesters", async () => {

851851

const callGateway = createGatewayMock();

852+

const queueEmbeddedPiMessageWithOutcome = createQueueOutcomeMock(false);

852853

await deliverSlackThreadAnnouncement({

853854

callGateway,

854855

sessionId: "requester-session-2",

855856

isActive: false,

856857

expectsCompletionMessage: true,

857858

directIdempotencyKey: "announce-1b",

859+

queueEmbeddedPiMessageWithOutcome,

858860

});

859861
860862

expectGatewayAgentParams(callGateway, {

@@ -865,6 +867,7 @@ describe("deliverSubagentAnnouncement completion delivery", () => {

865867

threadId: "171.222",

866868

bestEffortDeliver: true,

867869

});

870+

expect(queueEmbeddedPiMessageWithOutcome).not.toHaveBeenCalled();

868871

});

869872
870873

it("uses in-process agent dispatch for dormant completion requesters", async () => {

@@ -1389,7 +1392,7 @@ describe("deliverSubagentAnnouncement completion delivery", () => {

13891392

const result = await deliverSlackChannelAnnouncement({

13901393

callGateway,

13911394

sessionId: "requester-session-channel",

1392-

isActive: false,

1395+

isActive: true,

13931396

expectsCompletionMessage: true,

13941397

directIdempotencyKey: "announce-channel-empty-direct-steer-fallback",

13951398

queueEmbeddedPiMessageWithOutcome,

Original file line numberDiff line numberDiff line change

@@ -457,8 +457,8 @@ async function maybeSteerSubagentAnnounce(params: {

457457

}

458458

const { cfg, entry } = loadRequesterSessionEntry(params.requesterSessionKey);

459459

const canonicalKey = resolveRequesterStoreKey(cfg, params.requesterSessionKey);

460-

const { sessionId } = resolveRequesterSessionActivity(canonicalKey);

461-

if (!sessionId) {

460+

const { sessionId, isActive } = resolveRequesterSessionActivity(canonicalKey);

461+

if (!sessionId || !isActive) {

462462

return { status: "none" };

463463

}

464464

@@ -691,7 +691,11 @@ async function sendSubagentAnnounceDirectly(params: {

691691

directOrigin?.channel,

692692

sessionEntry: requesterEntry,

693693

});

694-

if (params.expectsCompletionMessage && requesterActivity.sessionId) {

694+

if (

695+

params.expectsCompletionMessage &&

696+

requesterActivity.sessionId &&

697+

requesterActivity.isActive

698+

) {

695699

const wakeOutcome = await resolveQueueEmbeddedPiMessageOutcome(

696700

requesterActivity.sessionId,

697701

params.triggerMessage,

@@ -715,14 +719,12 @@ async function sendSubagentAnnounceDirectly(params: {

715719

path: "steered",

716720

};

717721

}

718-

if (requesterActivity.isActive) {

719-

defaultRuntime.log(

720-

`[warn] Active requester session could not be woken for subagent completion; falling back to requester-agent handoff: ${formatQueueWakeFailureError(

721-

"active requester session could not be woken",

722-

wakeOutcome,

723-

)}`,

724-

);

725-

}

722+

defaultRuntime.log(

723+

`[warn] Active requester session could not be woken for subagent completion; falling back to requester-agent handoff: ${formatQueueWakeFailureError(

724+

"active requester session could not be woken",

725+

wakeOutcome,

726+

)}`,

727+

);

726728

}

727729

if (params.signal?.aborted) {

728730

return {