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

推荐订阅源

T
The Blog of Author Tim Ferriss
IT之家
IT之家
Engineering at Meta
Engineering at Meta
WordPress大学
WordPress大学
博客园 - 三生石上(FineUI控件)
博客园 - 聂微东
C
Check Point Blog
T
Tailwind CSS Blog
博客园 - Franky
H
Help Net Security
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Google DeepMind News
Google DeepMind News
博客园 - 叶小钗
J
Java Code Geeks
腾讯CDC
罗磊的独立博客
爱范儿
爱范儿
阮一峰的网络日志
阮一峰的网络日志
Martin Fowler
Martin Fowler
酷 壳 – CoolShell
酷 壳 – CoolShell
I
InfoQ
B
Blog
V
Visual Studio Blog
F
Fortinet All Blogs

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: cover per-peer LINE cron recovery (#81704) · opencla...
steipete · 2026-05-16 · via Recent Commits to openclaw:main
Original file line numberDiff line numberDiff line change

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

1515

- Agents: strip Gemini/Gemma `<final>` tags with attributes or self-closing syntax from delivered replies, including strict final-tag streaming enforcement. Fixes #65867.

1616

- macOS/update: disarm legacy `ai.openclaw.update.*` LaunchAgents when `openclaw update` starts from one, preventing KeepAlive relaunch loops that repeatedly restart the Gateway and replay update continuations. Fixes #82167.

1717

- LINE: acknowledge signed webhook events before agent processing so slow model replies do not cause LINE `request_timeout` delivery failures. Fixes #65375. Thanks @myericho.

18+

- LINE: stop cron recovery from inferring lowercased LINE recipients from canonical session keys, so long-running task replies do not silently retry undeliverable push targets. Fixes #81628. (#81704) Thanks @edenfunf.

1819

- TTS: preserve channel-derived voice-note delivery for `/tts audio` replies even when the provider output is not natively voice-compatible. (#82174) Thanks @xuruiray.

1920

- Codex/Lossless: keep Codex explicit compaction on native app-server threads while allowing Lossless through the context-engine slot; `openclaw doctor --fix` now migrates legacy `compaction.provider: "lossless-claw"` config to `plugins.slots.contextEngine`.

2021

- Cron/doctor: report scheduled jobs with explicit `payload.model` overrides, including provider namespace counts and default-model mismatches, so stale cron model pins are visible during auth or billing investigations. Fixes #82151. Thanks @mgonto.

Original file line numberDiff line numberDiff line change

@@ -859,9 +859,7 @@ describe("cron tool", () => {

859859

dmScope: "per-account-channel-peer",

860860

peerId: "Uabcdef0123456789abcdef0123456789",

861861

});

862-

expect(sessionKey).toBe(

863-

"agent:main:line:primary:direct:uabcdef0123456789abcdef0123456789",

864-

);

862+

expect(sessionKey).toBe("agent:main:line:primary:direct:uabcdef0123456789abcdef0123456789");

865863
866864

const delivery = await executeAddAndReadDelivery({

867865

callId: "call-line-direct-no-context-81628",

@@ -871,6 +869,24 @@ describe("cron tool", () => {

871869

expect(delivery?.to).toBeUndefined();

872870

});

873871
872+

it("does not surface lowercased LINE DM recipients with per-peer scope (#81628)", async () => {

873+

const sessionKey = buildAgentPeerSessionKey({

874+

agentId: "main",

875+

channel: "line",

876+

peerKind: "direct",

877+

dmScope: "per-peer",

878+

peerId: "Uabcdef0123456789abcdef0123456789",

879+

});

880+

expect(sessionKey).toBe("agent:main:direct:uabcdef0123456789abcdef0123456789");

881+
882+

const delivery = await executeAddAndReadDelivery({

883+

callId: "call-line-per-peer-no-context-81628",

884+

agentSessionKey: sessionKey,

885+

});

886+
887+

expect(delivery?.to).toBeUndefined();

888+

});

889+
874890

it("does not let current delivery context override explicit delivery targets", async () => {

875891

expect(

876892

await executeAddAndReadDelivery({

Original file line numberDiff line numberDiff line change

@@ -575,6 +575,7 @@ function inferDeliveryFromSessionKey(agentSessionKey?: string): CronDelivery | n

575575

if (!peerId) {

576576

return null;

577577

}

578+

const marker = parts[markerIndex];

578579
579580

let channel: CronMessageChannel | undefined;

580581

if (markerIndex >= 1) {

@@ -587,11 +588,12 @@ function inferDeliveryFromSessionKey(agentSessionKey?: string): CronDelivery | n

587588

// HTTP 400, so refuse the fallback for LINE and let the caller surface the

588589

// missing target instead of silently scheduling an undeliverable job.

589590

// openclaw/openclaw#81628

590-

if (channel === "line") {

591+

const isChannellessLineDirectId =

592+

!channel && (marker === "direct" || marker === "dm") && /^[ucr][a-f0-9]{32}$/.test(peerId);

593+

if (channel === "line" || isChannellessLineDirectId) {

591594

return null;

592595

}

593596
594-

const marker = parts[markerIndex];

595597

const delivery: CronDelivery = { mode: "announce", to: peerId };

596598

if (channel) {

597599

delivery.channel = channel;