Documentation Index
Fetch the complete documentation index at: https://docs.openclaw.ai/llms.txt
Use this file to discover all available pages before exploring further.
Trạng thái
Đã triển khai cho các bề mặt agent dùng chung, CLI, khả năng Plugin và phân phối đi:ReplyPayload.presentationmang UI thông điệp ngữ nghĩa.ReplyPayload.delivery.pinmang các yêu cầu ghim thông điệp đã gửi.- Các hành động thông điệp dùng chung hiển thị
presentation,deliveryvàpinthay vìcomponents,blocks,buttonshoặccardgốc của nhà cung cấp. - Core hiển thị hoặc tự động giảm cấp presentation thông qua các khả năng gửi đi do plugin khai báo.
- Các renderer của Discord, Slack, Telegram, Mattermost, MS Teams và Feishu sử dụng hợp đồng chung.
- Mã control-plane của kênh Discord không còn nhập các container UI dựa trên Carbon.
Vấn đề
UI kênh hiện đang bị chia tách trên nhiều bề mặt không tương thích:- Core sở hữu một hook renderer liên ngữ cảnh theo hình dạng Discord thông qua
buildCrossContextComponents. channel.tscủa Discord có thể nhập UI Carbon gốc thông quaDiscordUiContainer, kéo các phụ thuộc UI runtime vào control plane của plugin kênh.- Agent và CLI hiển thị các lối thoát payload gốc như
componentscủa Discord,blockscủa Slack,buttonscủa Telegram hoặc Mattermost, vàcardcủa Teams hoặc Feishu. ReplyPayload.channelDatamang cả gợi ý transport lẫn phong bì UI gốc.- Mô hình
interactivechung đã tồn tại, nhưng hẹp hơn các layout phong phú đang được Discord, Slack, Teams, Feishu, LINE, Telegram và Mattermost sử dụng.
Mục tiêu
- Core quyết định presentation ngữ nghĩa tốt nhất cho một thông điệp dựa trên các khả năng đã khai báo.
- Các plugin khai báo khả năng và render presentation ngữ nghĩa thành payload transport gốc.
- Web Control UI vẫn tách biệt với UI gốc của chat.
- Payload kênh gốc không được hiển thị qua bề mặt thông điệp agent hoặc CLI dùng chung.
- Các tính năng presentation không được hỗ trợ tự động giảm cấp về biểu diễn văn bản tốt nhất.
- Hành vi phân phối như ghim thông điệp đã gửi là metadata phân phối chung, không phải presentation.
Không phải mục tiêu
- Không có shim tương thích ngược cho
buildCrossContextComponents. - Không có lối thoát gốc công khai cho
components,blocks,buttonshoặccard. - Không có import core của thư viện UI gốc theo kênh.
- Không có seam SDK phụ thuộc nhà cung cấp cho các kênh đi kèm.
Mô hình đích
Thêm trườngpresentation do core sở hữu vào ReplyPayload.
interactive trở thành một tập con của presentation trong quá trình migration:
- Khối văn bản
interactiveánh xạ tớipresentation.blocks[].type = "text". - Khối nút
interactiveánh xạ tớipresentation.blocks[].type = "buttons". - Khối select
interactiveánh xạ tớipresentation.blocks[].type = "select".
presentation; interactive vẫn là helper parser/rendering legacy nội bộ cho các producer reply hiện có.
Metadata phân phối
Thêm trườngdelivery do core sở hữu cho hành vi gửi không thuộc UI.
delivery.pin = truenghĩa là ghim thông điệp đầu tiên được phân phối thành công.notifymặc định làfalse.requiredmặc định làfalse; các kênh không hỗ trợ hoặc thao tác ghim thất bại sẽ tự động giảm cấp bằng cách tiếp tục phân phối.- Các hành động thông điệp thủ công
pin,unpinvàlist-pinsvẫn được giữ cho các thông điệp hiện có.
channelData.telegram.pin = true sang delivery.pin = true.
Hợp đồng khả năng runtime
Thêm các hook render presentation và delivery vào adapter outbound runtime, không phải plugin kênh control-plane.- Phân giải kênh đích và adapter runtime.
- Hỏi các khả năng presentation.
- Giảm cấp các khối không được hỗ trợ trước khi render.
- Gọi
renderPresentation. - Nếu không có renderer, chuyển presentation thành fallback văn bản.
- Sau khi gửi thành công, gọi
pinDeliveredMessagekhidelivery.pinđược yêu cầu và được hỗ trợ.
Ánh xạ kênh
Discord:- Render
presentationthành components v2 và container Carbon trong các module chỉ dành cho runtime. - Giữ helper màu nhấn trong các module nhẹ.
- Xóa import
DiscordUiContainerkhỏi mã control-plane của plugin kênh.
- Render
presentationthành Block Kit. - Xóa input
blockscủa agent và CLI.
- Render văn bản, context và divider dưới dạng văn bản.
- Render action và select dưới dạng inline keyboard khi được cấu hình và được phép cho bề mặt đích.
- Dùng fallback văn bản khi inline button bị tắt.
- Chuyển ghim chủ đề ACP sang
delivery.pin.
- Render action dưới dạng nút tương tác khi được cấu hình.
- Render các khối khác dưới dạng fallback văn bản.
- Render
presentationthành Adaptive Cards. - Giữ các hành động thủ công pin/unpin/list-pins.
- Tùy chọn triển khai
pinDeliveredMessagenếu hỗ trợ Graph đáng tin cậy cho cuộc trò chuyện đích.
- Render
presentationthành interactive cards. - Giữ các hành động thủ công pin/unpin/list-pins.
- Tùy chọn triển khai
pinDeliveredMessageđể ghim thông điệp đã gửi nếu hành vi API đáng tin cậy.
- Render
presentationthành thông điệp Flex hoặc template khi có thể. - Fallback về văn bản cho các khối không được hỗ trợ.
- Xóa payload UI LINE khỏi
channelData.
- Chuyển presentation thành văn bản với định dạng thận trọng.
Các bước refactor
- Áp dụng lại bản sửa release Discord tách
ui-colors.tskhỏi UI dựa trên Carbon và xóaDiscordUiContainerkhỏiextensions/discord/src/channel.ts. - Thêm
presentationvàdeliveryvàoReplyPayload, chuẩn hóa payload outbound, tóm tắt phân phối và payload hook. - Thêm schema
MessagePresentationvà helper parser trong một subpath SDK/runtime hẹp. - Thay các khả năng thông điệp
buttons,cards,componentsvàblocksbằng các khả năng presentation ngữ nghĩa. - Thêm hook adapter outbound runtime để render presentation và ghim delivery.
- Thay việc dựng component liên ngữ cảnh bằng
buildCrossContextPresentation. - Xóa
src/infra/outbound/channel-adapters.tsvà xóabuildCrossContextComponentskhỏi loại plugin kênh. - Đổi
maybeApplyCrossContextMarkerđể đính kèmpresentationthay vì params gốc. - Cập nhật các đường gửi plugin-dispatch để chỉ sử dụng presentation ngữ nghĩa và metadata delivery.
- Xóa params payload gốc của agent và CLI:
components,blocks,buttonsvàcard. - Xóa các helper SDK tạo schema message-tool gốc, thay bằng helper schema presentation.
- Xóa phong bì UI/gốc khỏi
channelData; chỉ giữ metadata transport cho đến khi từng trường còn lại được rà soát. - Migration các renderer Discord, Slack, Telegram, Mattermost, MS Teams, Feishu và LINE.
- Cập nhật tài liệu cho CLI thông điệp, trang kênh, plugin SDK và cookbook khả năng.
- Chạy profiling fanout import cho Discord và các entrypoint kênh bị ảnh hưởng.
channelData riêng của nhà cung cấp. Bước 15 vẫn là xác thực tiếp theo nếu muốn có số liệu import-fanout định lượng ngoài gate kiểu/test.
Kiểm thử
Thêm hoặc cập nhật:- Kiểm thử chuẩn hóa presentation.
- Kiểm thử tự động giảm cấp presentation cho các khối không được hỗ trợ.
- Kiểm thử marker liên ngữ cảnh cho plugin dispatch và các đường delivery core.
- Kiểm thử ma trận renderer kênh cho Discord, Slack, Telegram, Mattermost, MS Teams, Feishu, LINE và fallback văn bản.
- Kiểm thử schema công cụ thông điệp chứng minh các trường gốc đã biến mất.
- Kiểm thử CLI chứng minh các cờ gốc đã biến mất.
- Kiểm thử hồi quy import-laziness entrypoint Discord bao phủ Carbon.
- Kiểm thử ghim delivery bao phủ Telegram và fallback chung.
Câu hỏi mở
delivery.pinnên được triển khai cho Discord, Slack, MS Teams và Feishu trong lượt đầu, hay chỉ Telegram trước?deliverycuối cùng có nên hấp thụ các trường hiện có nhưreplyToId,replyToCurrent,silentvàaudioAsVoice, hay vẫn tập trung vào các hành vi sau khi gửi?- Presentation có nên hỗ trợ trực tiếp hình ảnh hoặc tham chiếu tệp, hay hiện tại media nên vẫn tách biệt khỏi layout UI?