Plan 导读
消息通道 presentation refactor plan:先抓住它真正发力的那一下
这一页不是在堆术语,它像把“消息通道 presentation refactor plan”这台小机器搬到桌上,当着你的面拆开给你看。你先不用全记住,先抓住它到底在忙什么:Implemented for the shared 机器人朋友, CLI, 新本领插件 capability, and outbound delivery surfaces:。
先听这页的人话版
Channel presentation refactor plan
这一页不是在堆术语,它像把“消息通道 presentation refactor plan”这台小机器搬到桌上,当着你的面拆开给你看。你先不用全记住,先抓住它到底在忙什么:Implemented for the shared 机器人朋友, CLI, 新本领插件 capability, and outbound delivery surfaces:。
如果把这页当成“给普通人看的版本”,你最应该带走的是:它到底在教你一件什么事、什么时候要这样做、以及哪里最容易踩坑。
第 1 站
Status
这一节在讲一类能力是怎么工作的:它能做什么、不能做什么、适合在什么场景下调用。
这一节在讲一类能力是怎么工作的:它能做什么、不能做什么、适合在什么场景下调用。
你理解的是能力边界,不只是功能名字。
如果这节里同时出现命令、配置和例子,优先先看例子,再回头看配置。
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:Implemented for the shared 机器人朋友, CLI, 新本领插件 capability, and outbound delivery surfaces: Canonical docs now live in 小纸条…。
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:Implemented for the shared 机器人朋友, CLI, 新本领插件 capability, and outbound delivery surfaces:。
Implemented for the shared agent, CLI, plugin capability, and outbound delivery surfaces:
这一串条目别硬背,把它当成“Status”门口贴出来的几张便签就行。它们在提醒你先备好什么、别漏掉什么、哪里最容易走错:ReplyPayload.presentation carries semanti…、ReplyPayload.delivery.pin carries sent-小纸…、Shared 小纸条消息 actions expose presentation,…、Core renders or auto-degrades presentatio…。
ReplyPayload.presentationcarries semantic message UI.ReplyPayload.delivery.pincarries sent-message pin requests.- Shared message actions expose
presentation,delivery, andpininstead of provider-nativecomponents,blocks,buttons, orcard. - Core renders or auto-degrades presentation through plugin-declared outbound capabilities.
- Discord, Slack, Telegram, Mattermost, MS Teams, and Feishu renderers consume the generic contract.
- Discord channel control-plane code no longer imports Carbon-backed UI containers.
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:Canonical docs now live in 小纸条消息 Presentation. Keep this plan as historical implementation context; update the canonica…。
Canonical docs now live in Message Presentation. Keep this plan as historical implementation context; update the canonical guide for contract, renderer, or fallback behavior changes.
第 2 站
Problem
这一节在讲一类能力是怎么工作的:它能做什么、不能做什么、适合在什么场景下调用。
这一节在讲一类能力是怎么工作的:它能做什么、不能做什么、适合在什么场景下调用。
你理解的是能力边界,不只是功能名字。
如果这节里同时出现命令、配置和例子,优先先看例子,再回头看配置。
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:消息通道 UI is currently split across several incompatible surfaces: This makes core aware of native UI shapes, weakens 新本领…。
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:消息通道 UI is currently split across several incompatible surfaces:。
Channel UI is currently split across several incompatible surfaces:
这一串条目别硬背,把它当成“Problem”门口贴出来的几张便签就行。它们在提醒你先备好什么、别漏掉什么、哪里最容易走错:Core owns a Discord-shaped cross-context…、Discord 消息通道.ts can import native Carbon…、The 机器人朋友 and CLI expose native payload e…、ReplyPayload.消息通道Data carries both transp…。
- Core owns a Discord-shaped cross-context renderer hook through
buildCrossContextComponents. - Discord
channel.tscan import native Carbon UI throughDiscordUiContainer, which pulls runtime UI dependencies into the channel plugin control plane. - The agent and CLI expose native payload escape hatches such as Discord
components, Slackblocks, Telegram or Mattermostbuttons, and Teams or Feishucard. ReplyPayload.channelDatacarries both transport hints and native UI envelopes.- The generic
interactivemodel exists, but it is narrower than the richer layouts already used by Discord, Slack, Teams, Feishu, LINE, Telegram, and Mattermost.
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:This makes core aware of native UI shapes, weakens 新本领插件 runtime laziness, and gives 机器人朋友s too many provider-specific…。
This makes core aware of native UI shapes, weakens plugin runtime laziness, and gives agents too many provider-specific ways to express the same message intent.
第 3 站
Goals
这一节在讲一类能力是怎么工作的:它能做什么、不能做什么、适合在什么场景下调用。
这一节在讲一类能力是怎么工作的:它能做什么、不能做什么、适合在什么场景下调用。
你理解的是能力边界,不只是功能名字。
如果这节里同时出现命令、配置和例子,优先先看例子,再回头看配置。
这一小段像旁白,在提醒我们镜头已经切到下一站。
这一串条目别硬背,把它当成“Goals”门口贴出来的几张便签就行。它们在提醒你先备好什么、别漏掉什么、哪里最容易走错:Core decides the best semantic presentati…、Extensions declare capabilities and rende…、Web Control UI remains separate from chat…、Native 消息通道 payloads are not exposed thro…。
- Core decides the best semantic presentation for a message from declared capabilities.
- Extensions declare capabilities and render semantic presentation into native transport payloads.
- Web Control UI remains separate from chat native UI.
- Native channel payloads are not exposed through the shared agent or CLI message surface.
- Unsupported presentation features auto-degrade to the best text representation.
- Delivery behavior such as pinning a sent message is generic delivery metadata, not presentation.
第 4 站
Non goals
这一节主要在解释“Non goals”到底是干什么的,以及你什么时候会遇到它。
这一节主要在解释“Non goals”到底是干什么的,以及你什么时候会遇到它。
如果你是第一次接触 OpenClaw,这一节最值得看的不是术语本身,而是它背后的使用场景和限制。
真正动手时,先看它有没有默认值、有没有必须打开的选项、以及会不会影响安全边界。
这一小段像旁白,在提醒我们镜头已经切到下一站。
这一串条目别硬背,把它当成“Non goals”门口贴出来的几张便签就行。它们在提醒你先备好什么、别漏掉什么、哪里最容易走错:No backwards compatibility shim for build…、No public native escape hatches for compo…、No core imports of 消息通道-native UI librari…、No provider-specific SDK seams for bundle…。
- No backwards compatibility shim for
buildCrossContextComponents. - No public native escape hatches for
components,blocks,buttons, orcard. - No core imports of channel-native UI libraries.
- No provider-specific SDK seams for bundled channels.
第 5 站
Target 聪明脑袋模型
这一节在讲一类能力是怎么工作的:它能做什么、不能做什么、适合在什么场景下调用。
这一节在讲一类能力是怎么工作的:它能做什么、不能做什么、适合在什么场景下调用。
你理解的是能力边界,不只是功能名字。
如果这节里同时出现命令、配置和例子,优先先看例子,再回头看配置。
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:Add a core-owned presentation field to ReplyPayload. interactive becomes a subset of presentation during migration: The…。
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:Add a core-owned presentation field to ReplyPayload.
Add a core-owned presentation field to ReplyPayload.
这段像放在桌上的操作卡,谁来照着做,现场就会动起来。
- 这一行“type MessagePresentationTone = "neutral" | "info" | "success" | "warning" | "danger";”是在给电脑递一张小纸条,告诉它眼下该做哪一步。
- 这一行“type MessagePresentation = {”是在给电脑递一张小纸条,告诉它眼下该做哪一步。
- 这里在给“tone?”挂牌子,告诉系统它该指向“MessagePresentationTone;”。
type MessagePresentationTone = "neutral" | "info" | "success" | "warning" | "danger";
type MessagePresentation = {
tone?: MessagePresentationTone;
title?: string;
blocks: MessagePresentationBlock[];
};
type MessagePresentationBlock =
| { type: "text"; text: string }
| { type: "context"; text: string }
| { type: "divider" }
| { type: "buttons"; buttons: MessagePresentationButton[] }
| { type: "select"; placeholder?: string; options: MessagePresentationOption[] };
type MessagePresentationButton = {
label: string;
value?: string;
url?: string;
style?: "primary" | "secondary" | "success" | "danger";
};
type MessagePresentationOption = {
label: string;
value: string;
};
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:interactive becomes a subset of presentation during migration:。
interactive becomes a subset of presentation during migration:
这一串条目别硬背,把它当成“Target model”门口贴出来的几张便签就行。它们在提醒你先备好什么、别漏掉什么、哪里最容易走错:interactive text block maps to presentati…、interactive buttons block maps to present…、interactive select block maps to presenta…。
interactivetext block maps topresentation.blocks[].type = "text".interactivebuttons block maps topresentation.blocks[].type = "buttons".interactiveselect block maps topresentation.blocks[].type = "select".
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:The external 机器人朋友 and CLI schemas now use presentation; interactive remains an internal legacy parser/rendering helper…。
The external agent and CLI schemas now use presentation; interactive remains an internal legacy parser/rendering helper for existing reply producers. The public producer-facing API treats interactive as deprecated. Runtime support remains so existing approval helpers and older plugins continue to work while new code emits presentation.
第 6 站
Delivery metadata
这一节在讲规则和边界:什么默认允许、什么必须显式打开、什么被禁止。
这一节在讲规则和边界:什么默认允许、什么必须显式打开、什么被禁止。
这种内容决定了 OpenClaw 是“能做”还是“现在还不能做”,读懂它比记术语更重要。
你可以把这一节当成权限说明书,真正配置时优先盯住 default、required、allow、deny 这几个词。
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:Add a core-owned delivery field for send behavior that is not UI. Semantics: Current Telegram ACP topic binding should…。
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:Add a core-owned delivery field for send behavior that is not UI.
Add a core-owned delivery field for send behavior that is not UI.
这段像放在桌上的操作卡,谁来照着做,现场就会动起来。
- 这一行“type ReplyPayloadDelivery = {”是在给电脑递一张小纸条,告诉它眼下该做哪一步。
- 这里在给“pin?”挂牌子,告诉系统它该指向“”。
- 这一行“| boolean”是在给电脑递一张小纸条,告诉它眼下该做哪一步。
type ReplyPayloadDelivery = {
pin?:
| boolean
| {
enabled: boolean;
notify?: boolean;
required?: boolean;
};
};
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:Semantics:。
Semantics:
这一串条目别硬背,把它当成“Delivery metadata”门口贴出来的几张便签就行。它们在提醒你先备好什么、别漏掉什么、哪里最容易走错:delivery.pin = true means pin the first s…、notify defaults to false.、required defaults to false; unsupported 消…、Manual pin, unpin, and list-pins 小纸条消息 ac…。
delivery.pin = truemeans pin the first successfully delivered message.notifydefaults tofalse.requireddefaults tofalse; unsupported channels or failed pinning auto-degrade by continuing delivery.- Manual
pin,unpin, andlist-pinsmessage actions remain for existing messages.
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:Current Telegram ACP topic binding should move from 消息通道Data.telegram.pin = true to delivery.pin = true.
Current Telegram ACP topic binding should move from channelData.telegram.pin = true to delivery.pin = true.
第 7 站
Runtime capability contract
这一节在讲一类能力是怎么工作的:它能做什么、不能做什么、适合在什么场景下调用。
这一节在讲一类能力是怎么工作的:它能做什么、不能做什么、适合在什么场景下调用。
你理解的是能力边界,不只是功能名字。
如果这节里同时出现命令、配置和例子,优先先看例子,再回头看配置。
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:Add presentation and delivery render hooks to the runtime outbound adapter, not the control-plane 消息通道 新本领插件. Core beha…。
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:Add presentation and delivery render hooks to the runtime outbound adapter, not the control-plane 消息通道 新本领插件.
Add presentation and delivery render hooks to the runtime outbound adapter, not the control-plane channel plugin.
这段像放在桌上的操作卡,谁来照着做,现场就会动起来。
- 这一行“type ChannelPresentationCapabilities = {”是在给电脑递一张小纸条,告诉它眼下该做哪一步。
- 这里在给“supported”挂牌子,告诉系统它该指向“boolean;”。
- 这里在给“buttons?”挂牌子,告诉系统它该指向“boolean;”。
type ChannelPresentationCapabilities = {
supported: boolean;
buttons?: boolean;
selects?: boolean;
context?: boolean;
divider?: boolean;
tones?: MessagePresentationTone[];
limits?: {
actions?: {
maxActions?: number;
maxActionsPerRow?: number;
maxRows?: number;
maxLabelLength?: number;
maxValueBytes?: number;
supportsStyles?: boolean;
supportsDisabled?: boolean;
supportsLayoutHints?: boolean;
};
selects?: {
maxOptions?: number;
maxLabelLength?: number;
maxValueBytes?: number;
};
text?: {
maxLength?: number;
encoding?: "characters" | "utf8-bytes" | "utf16-units";
markdownDialect?: "plain" | "markdown" | "html" | "slack-mrkdwn" | "discord-markdown";
supportsEdit?: boolean;
};
};
};
type ChannelDeliveryCapabilities = {
pinSentMessage?: boolean;
};
type ChannelOutboundAdapter = {
presentationCapabilities?: ChannelPresentationCapabilities;
renderPresentation?: (params: {
payload: ReplyPayload;
presentation: MessagePresentation;
ctx: ChannelOutboundSendContext;
}) => ReplyPayload | null;
deliveryCapabilities?: ChannelDeliveryCapabilities;
pinDeliveredMessage?: (params: {
cfg: OpenClawConfig;
accountId?: string | null;
to: string;
threadId?: string | number | null;
messageId: string;
notify: boolean;
}) => Promise<void>;
};
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:Core behavior:。
Core behavior:
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:rendering.
rendering.
这一串条目别硬背,把它当成“Runtime capability contract”门口贴出来的几张便签就行。它们在提醒你先备好什么、别漏掉什么、哪里最容易走错:Resolve target 消息通道 and runtime adapter.、Ask for presentation capabilities.、Degrade unsupported blocks and apply gene…、Call renderPresentation.
- Resolve target channel and runtime adapter.
- Ask for presentation capabilities.
- Degrade unsupported blocks and apply generic capability limits before
- Call
renderPresentation. - If no renderer exists, convert presentation to text fallback.
- After successful send, call
pinDeliveredMessagewhendelivery.pinis requested and supported.
第 8 站
消息通道 mapping
这一节在讲规则和边界:什么默认允许、什么必须显式打开、什么被禁止。
这一节在讲规则和边界:什么默认允许、什么必须显式打开、什么被禁止。
这种内容决定了 OpenClaw 是“能做”还是“现在还不能做”,读懂它比记术语更重要。
你可以把这一节当成权限说明书,真正配置时优先盯住 default、required、allow、deny 这几个词。
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:Discord: Slack: Telegram: Mattermost: MS Teams: Feishu: LINE: Plain or limited 消息通道s:。
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:Discord:。
Discord:
这一串条目别硬背,把它当成“Channel mapping”门口贴出来的几张便签就行。它们在提醒你先备好什么、别漏掉什么、哪里最容易走错:Render presentation to components v2 and…、Keep accent color helpers in light module…、Remove DiscordUiContainer imports from 消息…。
- Render
presentationto components v2 and Carbon containers in runtime-only modules. - Keep accent color helpers in light modules.
- Remove
DiscordUiContainerimports from channel plugin control-plane code.
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:Slack:。
Slack:
这一串条目别硬背,把它当成“Channel mapping”门口贴出来的几张便签就行。它们在提醒你先备好什么、别漏掉什么、哪里最容易走错:Render presentation to Block Kit.、Remove 机器人朋友 and CLI blocks input.
- Render
presentationto Block Kit. - Remove agent and CLI
blocksinput.
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:Telegram:。
Telegram:
这一串条目别硬背,把它当成“Channel mapping”门口贴出来的几张便签就行。它们在提醒你先备好什么、别漏掉什么、哪里最容易走错:Render text, context, and dividers as tex…、Render actions and select as inline keybo…、Use text fallback when inline buttons are…、Move ACP topic pinning to delivery.pin.
- Render text, context, and dividers as text.
- Render actions and select as inline keyboards when configured and allowed for the target surface.
- Use text fallback when inline buttons are disabled.
- Move ACP topic pinning to
delivery.pin.
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:Mattermost:。
Mattermost:
这一串条目别硬背,把它当成“Channel mapping”门口贴出来的几张便签就行。它们在提醒你先备好什么、别漏掉什么、哪里最容易走错:Render actions as interactive buttons whe…、Render other blocks as text fallback.
- Render actions as interactive buttons where configured.
- Render other blocks as text fallback.
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:MS Teams:。
MS Teams:
这一串条目别硬背,把它当成“Channel mapping”门口贴出来的几张便签就行。它们在提醒你先备好什么、别漏掉什么、哪里最容易走错:Render presentation to Adaptive Cards.、Keep manual pin/unpin/list-pins actions.、Optionally implement pinDelivered小纸条消息 if…。
- Render
presentationto Adaptive Cards. - Keep manual pin/unpin/list-pins actions.
- Optionally implement
pinDeliveredMessageif Graph support is reliable for the target conversation.
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:Feishu:。
Feishu:
这一串条目别硬背,把它当成“Channel mapping”门口贴出来的几张便签就行。它们在提醒你先备好什么、别漏掉什么、哪里最容易走错:Render presentation to interactive cards.、Keep manual pin/unpin/list-pins actions.、Optionally implement pinDelivered小纸条消息 fo…。
- Render
presentationto interactive cards. - Keep manual pin/unpin/list-pins actions.
- Optionally implement
pinDeliveredMessagefor sent-message pinning if API behavior is reliable.
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:LINE:。
LINE:
这一串条目别硬背,把它当成“Channel mapping”门口贴出来的几张便签就行。它们在提醒你先备好什么、别漏掉什么、哪里最容易走错:Render presentation to Flex or template 小…、Fall back to text for unsupported blocks.、Remove LINE UI payloads from 消息通道Data.
- Render
presentationto Flex or template messages where possible. - Fall back to text for unsupported blocks.
- Remove LINE UI payloads from
channelData.
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:Plain or limited 消息通道s:。
Plain or limited channels:
这一串条目别硬背,把它当成“Channel mapping”门口贴出来的几张便签就行。它们在提醒你先备好什么、别漏掉什么、哪里最容易走错:Convert presentation to text with conserv…。
- Convert presentation to text with conservative formatting.
第 9 站
Refactor steps
这一节在讲一类能力是怎么工作的:它能做什么、不能做什么、适合在什么场景下调用。
这一节在讲一类能力是怎么工作的:它能做什么、不能做什么、适合在什么场景下调用。
你理解的是能力边界,不只是功能名字。
如果这节里同时出现命令、配置和例子,优先先看例子,再回头看配置。
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:1. Reapply the Discord release fix that splits ui-colors.ts from Carbon-backed UI and removes DiscordUiContainer from e…。
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:1. Reapply the Discord release fix that splits ui-colors.ts from Carbon-backed UI and removes DiscordUiContainer from e…。
1. Reapply the Discord release fix that splits ui-colors.ts from Carbon-backed UI and removes DiscordUiContainer from extensions/discord/src/channel.ts. 2. Add presentation and delivery to ReplyPayload, outbound payload normalization, delivery summaries, and hook payloads. 3. Add MessagePresentation schema and parser helpers in a narrow SDK/runtime subpath. 4. Replace message capabilities buttons, cards, components, and blocks with semantic presentation capabilities. 5. Add runtime outbound adapter hooks for presentation render and delivery pinning. 6. Replace cross-context component construction with buildCrossContextPresentation. 7. Delete src/infra/outbound/channel-adapters.ts and remove buildCrossContextComponents from channel plugin types. 8. Change maybeApplyCrossContextMarker to attach presentation instead of native params. 9. Update plugin-dispatch send paths to consume only semantic presentation and delivery metadata. 10. Remove agent and CLI native payload params: components, blocks, buttons, and card. 11. Remove SDK helpers that create native message-tool schemas, replacing them with presentation schema helpers. 12. Remove UI/native envelopes from channelData; keep only transport metadata until each remaining field is reviewed. 13. Migrate Discord, Slack, Telegram, Mattermost, MS Teams, Feishu, and LINE renderers. 14. Update docs for message CLI, channel pages, plugin SDK, and capability cookbook. 15. Run import fanout profiling for Discord and affected channel entrypoints.
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:Steps 1-11 and 13-14 are implemented in this refactor for the shared 机器人朋友, CLI, 新本领插件 capability, and outbound adapter…。
Steps 1-11 and 13-14 are implemented in this refactor for the shared agent, CLI, plugin capability, and outbound adapter contracts. Step 12 remains a deeper internal cleanup pass for provider-private channelData transport envelopes. Step 15 remains follow-up validation if we want quantified import-fanout numbers beyond the type/test gate.
第 10 站
Tests
这一节在讲一类能力是怎么工作的:它能做什么、不能做什么、适合在什么场景下调用。
这一节在讲一类能力是怎么工作的:它能做什么、不能做什么、适合在什么场景下调用。
你理解的是能力边界,不只是功能名字。
如果这节里同时出现命令、配置和例子,优先先看例子,再回头看配置。
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:Add or update:。
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:Add or update:。
Add or update:
这一串条目别硬背,把它当成“Tests”门口贴出来的几张便签就行。它们在提醒你先备好什么、别漏掉什么、哪里最容易走错:Presentation normalization tests.、Presentation auto-degrade tests for unsup…、Cross-context marker tests for 新本领插件 disp…、消息通道 render matrix tests for Discord, Sla…。
- Presentation normalization tests.
- Presentation auto-degrade tests for unsupported blocks.
- Cross-context marker tests for plugin dispatch and core delivery paths.
- Channel render matrix tests for Discord, Slack, Telegram, Mattermost, MS Teams, Feishu, LINE, and text fallback.
- Message tool schema tests proving native fields are gone.
- CLI tests proving native flags are gone.
- Discord entrypoint import-laziness regression covering Carbon.
- Delivery pin tests covering Telegram and generic fallback.
第 11 站
Open questions
这一节在讲一类能力是怎么工作的:它能做什么、不能做什么、适合在什么场景下调用。
这一节在讲一类能力是怎么工作的:它能做什么、不能做什么、适合在什么场景下调用。
你理解的是能力边界,不只是功能名字。
如果这节里同时出现命令、配置和例子,优先先看例子,再回头看配置。
这一小段像旁白,在提醒我们镜头已经切到下一站。
这一串条目别硬背,把它当成“Open questions”门口贴出来的几张便签就行。它们在提醒你先备好什么、别漏掉什么、哪里最容易走错:Should delivery.pin be implemented for Di…、Should delivery eventually absorb existin…、Should presentation support images or fil…。
- Should
delivery.pinbe implemented for Discord, Slack, MS Teams, and Feishu in the first pass, or only Telegram first? - Should
deliveryeventually absorb existing fields such asreplyToId,replyToCurrent,silent, andaudioAsVoice, or stay focused on post-send behaviors? - Should presentation support images or file references directly, or should media remain separate from UI layout for now?
第 12 站
Related
这一节在讲一类能力是怎么工作的:它能做什么、不能做什么、适合在什么场景下调用。
这一节在讲一类能力是怎么工作的:它能做什么、不能做什么、适合在什么场景下调用。
你理解的是能力边界,不只是功能名字。
如果这节里同时出现命令、配置和例子,优先先看例子,再回头看配置。
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:---。
这一串条目别硬背,把它当成“Related”门口贴出来的几张便签就行。它们在提醒你先备好什么、别漏掉什么、哪里最容易走错:消息通道s overview、小纸条消息 presentation。
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:---。
---
AdSense 连接验证已经放在页面头部;广告单元等站点审批通过后再启用。
google-adsense-account: ca-pub-3833673520933536