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

推荐订阅源

博客园 - 三生石上(FineUI控件)
T
Threat Research - Cisco Blogs
月光博客
月光博客
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
爱范儿
爱范儿
Hugging Face - Blog
Hugging Face - Blog
腾讯CDC
云风的 BLOG
云风的 BLOG
D
Docker
罗磊的独立博客
U
Unit 42
博客园 - 聂微东
人人都是产品经理
人人都是产品经理
P
Proofpoint News Feed
博客园 - Franky
Apple Machine Learning Research
Apple Machine Learning Research
MyScale Blog
MyScale Blog
B
Blog RSS Feed
美团技术团队
J
Java Code Geeks
S
Securelist
Cyberwarzone
Cyberwarzone
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
NISL@THU
NISL@THU
Security Latest
Security Latest
Recent Commits to openclaw:main
Recent Commits to openclaw:main
Recorded Future
Recorded Future
Hacker News - Newest:
Hacker News - Newest: "LLM"
L
LINUX DO - 热门话题
Recent Announcements
Recent Announcements
Last Week in AI
Last Week in AI
A
About on SuperTechFans
MongoDB | Blog
MongoDB | Blog
Spread Privacy
Spread Privacy
T
Tenable Blog
I
Intezer
N
News | PayPal Newsroom
大猫的无限游戏
大猫的无限游戏
A
Arctic Wolf
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
V
V2EX - 技术
S
Schneier on Security
S
SegmentFault 最新的问题
Latest news
Latest news
宝玉的分享
宝玉的分享
V
Visual Studio Blog
V
V2EX
T
Tor Project blog
C
Comments on: Blog

Recent Commits to openclaw:main

fix(macos): prevent duplicate menu bar icons · openclaw/openclaw@e18099b perf(agents): avoid full setup registry for runtime aliases · openclaw/openclaw@a52c4d1 fix(agents): prevent embedded runtime shadowing · openclaw/openclaw@4ef141d refactor(cron): split tool and doctor repair helpers perf: reduce tui refresh work feat: default exec shell snapshots fix(ui): keep chat usable during session loading fix(cron): guard flat atMs canonicalization refactor(cron): keep runtime on canonical sqlite rows fix(codex): restore bounded recovery continuity · openclaw/openclaw@827ceb5 refactor: clean up ACP package metadata and helpers (#88659) · openclaw/openclaw@7b78941 fix(discord): ping mention-bearing final replies · openclaw/openclaw@a5d8f09 fix(telegram): preserve usage footer for tool-only replies · openclaw/openclaw@8f941ea fix(agents): avoid alias setup load for matching refs · openclaw/openclaw@b334e7e chore(ui): translate thinking default label fix(agents): preserve runtime tools in lean mode (#88381) fix(messages): use best-effort for implicit tool-only source replies … docs: raise bulk PR close threshold · openclaw/openclaw@66775c0 feat: add exec shell snapshot cache · openclaw/openclaw@c389839 fix: use typed tui empty session defaults · openclaw/openclaw@50c6519 perf: speed up tui session refresh · openclaw/openclaw@18dc6e5 fix(ci): align agent thinking default surfaces · openclaw/openclaw@9a4b631 docs: require live batch issue verification · openclaw/openclaw@832b648 ci(release): extend QA runtime parity timeout · openclaw/openclaw@d689893 ci: stabilize Testbox changed checks · openclaw/openclaw@d1bec46 fix(agents): report stale session locks without cleanup · openclaw/openclaw@7ca7712 fix(gateway): reject stale lifecycle session updates · openclaw/openclaw@fb7e217 docs(agents): require typed presentation actions · openclaw/openclaw@88c99dd fix(models): keep auth login out of main config · openclaw/openclaw@1bfae9d fix: guard stale lifecycle snapshots (#88583) fix(gateway): reject pre-reset run lifecycle events from clobbering r… · openclaw/openclaw@613f51a fix: apply ACP spawn model defaults · openclaw/openclaw@ff22b1e fix(agents): accept disabled thinking params fix(gateway): expose agent thinking defaults · openclaw/openclaw@f8f5259 ci: use normal node_modules for Blacksmith Testbox · openclaw/openclaw@d99934a fix(agents): inherit subagent thinking defaults fix(plugins): scope tool callbacks during materialization · openclaw/openclaw@643633c fix(plugins): remove redundant proxy assertion · openclaw/openclaw@82a0ba8 fix(agents): keep async media starts nonterminal · openclaw/openclaw@3ebbf9a fix(plugins): preserve wrapped tool descriptors · openclaw/openclaw@f62a22c fix(codex): let async media coexist with terminal batches fix(plugins): delegate wrapped tool properties · openclaw/openclaw@d99c824 fix(codex): clear completed dynamic tool release blockers fix(gateway): enforce OpenAI tool_choice contracts feat: add MCP code-mode namespace (#88636) fix(agents): avoid synthetic tool results during parallel races · openclaw/openclaw@44c65de fix(e2e): show plugins docker sweep progress · openclaw/openclaw@0833c68 docs: require gh comment drafts · openclaw/openclaw@f2ace9f docs: require codex source citations · openclaw/openclaw@036acbd fix(agents): release session lock on manual abort · openclaw/openclaw@95890fe docs: clarify autoreview refactor follow-up · openclaw/openclaw@a7075f3 fix(agents): scope timeout cooldowns by model · openclaw/openclaw@582fea9 test(discord): drive application id retry timer · openclaw/openclaw@d927e73 docs: strengthen review dependency inspection rules refactor: expand acp core package (#88618) · openclaw/openclaw@7dea283 fix(doctor): diagnose malformed provider catalogs · openclaw/openclaw@cc29005 fix(agents): normalize prefixed Anthropic model ids (#88587) · openclaw/openclaw@826b378 chore: bump OpenClaw version to 2026.5.31 · openclaw/openclaw@0d17623 feat(codex): add portable Codex command pickers (#82224) fix(tui): preserve pending local runs during session sync (#87959) · openclaw/openclaw@5a0e677 docs: clarify inline code comments · openclaw/openclaw@85beee6 fix(auto-reply): warn on substantive private message-tool finals · openclaw/openclaw@75e0053 fix(tui): use middle truncation for paths and commands in tool displa… · openclaw/openclaw@81b9da0 fix(webchat): suppress stale active session rows (#87962) · openclaw/openclaw@e452d16 fix(tui): skip history reload when final event has displayable output… · openclaw/openclaw@9a1b95c test(discord): isolate timer-sensitive request tests · openclaw/openclaw@5dc4531 fix(e2e): heartbeat resource-sampled docker lanes fix(auth): coerce persisted device auth tokens refactor: unify subagent handoffs into agent steering queue fix(tasks): reclaim ACP zombie runs blocking gateway restart (#88281) · openclaw/openclaw@02c7b5b test(release): wait for bundled runtime commands · openclaw/openclaw@100dd79 fix(hooks): isolate slug-generator auth failures · openclaw/openclaw@318cae1 docs: require issue summaries in agent replies · openclaw/openclaw@17c8602 docs: clarify agent workflow rules refactor(openai): confine legacy codex repair to doctor · openclaw/openclaw@7423e9c fix(auto-reply): honor per-model thinking params · openclaw/openclaw@2f7e6ec refactor(cron): keep legacy notify migration in doctor · openclaw/openclaw@b222b5f fix(exec): allow predicate shell builtins in allowlist mode · openclaw/openclaw@2fe019c test(voice-call): drive Twilio stream failure timers · openclaw/openclaw@657a668 fix(diagnostics): surface Bonjour state in support exports · openclaw/openclaw@c797f02 perf(cli): narrow gateway dispatch startup · openclaw/openclaw@32c0279 docs: tighten refactor storage policy · openclaw/openclaw@44512b5 docs: require PR review transparency · openclaw/openclaw@f1fc204 docs: clarify runtime migration boundary fix(agents): preserve reasoning replay from model metadata · openclaw/openclaw@cf315dd test(release): harden beta validation gates fix(exec): allow known safe shell builtins in allowlist mode · openclaw/openclaw@fee4e52 docs: explain per-agent model params refactor: move plugin state stores to sqlite (#88609) fix: preserve discord policy close narrowing · openclaw/openclaw@fd88f34 fix: queue subagent completion handoffs (#88613) docs(codex): clarify first-party plugin marketplaces · openclaw/openclaw@729712d docs: tighten env surface policy · openclaw/openclaw@97a97ad docs: tighten config surface policy · openclaw/openclaw@2e25400 fix(devices): refresh paired device last-seen metadata · openclaw/openclaw@703fae1 fix(agents): classify expired thinking signatures (#88340) · openclaw/openclaw@fdf8ddd fix(browser): document stable tab references (#88393) · openclaw/openclaw@3a88142 fix(discord): log gateway websocket close details · openclaw/openclaw@94b1427 chore(lint): trim remaining suppressions · openclaw/openclaw@f83886c test(release): stabilize beta validation after rebase
fix(outbound): route source replies through configured channels · openclaw/openclaw@1955f42
steipete · 2026-05-31 · via Recent Commits to openclaw:main

@@ -42,6 +42,7 @@ import { stripFormattedReasoningMessage } from "../../shared/text/formatted-reas

4242

import { parseInlineDirectives } from "../../utils/directive-tags.js";

4343

import {

4444

INTERNAL_MESSAGE_CHANNEL,

45+

normalizeMessageChannel,

4546

type GatewayClientMode,

4647

type GatewayClientName,

4748

} from "../../utils/message-channel.js";

@@ -630,17 +631,39 @@ function hasCurrentSourceReplyContext(input: RunMessageActionParams): boolean {

630631

);

631632

}

632633633-

function shouldUseInternalSourceReplySink(

634+

async function hasConfiguredCurrentSourceChannel(input: RunMessageActionParams): Promise<boolean> {

635+

const provider =

636+

normalizeMessageChannel(input.toolContext?.currentChannelProvider) ??

637+

normalizeOptionalLowercaseString(input.toolContext?.currentChannelProvider);

638+

if (!provider || provider === INTERNAL_MESSAGE_CHANNEL) {

639+

return false;

640+

}

641+

if (!resolveOutboundChannelPlugin({ channel: provider, cfg: input.cfg, allowBootstrap: true })) {

642+

return false;

643+

}

644+

const configuredChannels = await listConfiguredMessageChannels(input.cfg);

645+

return configuredChannels.some((channel) => channel === provider);

646+

}

647+648+

async function shouldUseInternalSourceReplySink(

634649

input: RunMessageActionParams,

635650

params: Record<string, unknown>,

636651

) {

637-

return (

652+

const hasImplicitCurrentSourceRoute =

638653

input.action === "send" &&

639654

input.sourceReplyDeliveryMode === "message_tool_only" &&

640655

hasCurrentSourceReplyContext(input) &&

641656

Boolean(input.sessionKey?.trim()) &&

642-

!hasExplicitRouteParam(params)

643-

);

657+

!hasExplicitRouteParam(params);

658+

if (!hasImplicitCurrentSourceRoute) {

659+

return false;

660+

}

661+

if (!normalizeOptionalString(input.toolContext?.currentChannelId)) {

662+

return true;

663+

}

664+

// Configured current-source channels can infer the target and deliver through

665+

// the normal plugin path; the sink is only the private fallback.

666+

return !(await hasConfiguredCurrentSourceChannel(input));

644667

}

645668646669

async function runGatewayPluginMessageActionOrNull(params: {

@@ -1404,7 +1427,7 @@ export async function runMessageAction(

14041427

if (action === "send" && hasPollCreationParams(params)) {

14051428

throw new Error('Poll fields require action "poll"; use action "poll" instead of "send".');

14061429

}

1407-

if (shouldUseInternalSourceReplySink(input, params)) {

1430+

if (await shouldUseInternalSourceReplySink(input, params)) {

14081431

return handleInternalSourceReplySendAction({ ...input, agentId: resolvedAgentId }, params);

14091432

}

14101433

applyImplicitSourceReplySendPolicy(input, params);