Trạng thái
Đã triển khai cho các bề mặt agent dùng chung, CLI, năng lực Plugin và phân phối đi:ReplyPayload.presentationmang UI thông điệp theo ngữ nghĩa.ReplyPayload.delivery.pinmang yêu cầu ghim thông điệp đã gửi.- Các hành động thông điệp dùng chung phơi bày
presentation,deliveryvàpinthay vìcomponents,blocks,buttonshoặccardgốc theo nhà cung cấp. - Core kết xuất hoặc tự động hạ cấp presentation thông qua các năng lực gửi đi do Plugin khai báo.
- Các bộ kết xuất Discord, Slack, Telegram, Mattermost, MS Teams và Feishu sử dụng hợp đồng chung.
- Mã mặt phẳng điều khiển 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 được chia giữa nhiều bề mặt không tương thích:- Core sở hữu hook bộ kết xuất xuyên ngữ cảnh mang 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 mặt phẳng điều khiển của Plugin kênh.- Agent và CLI phơi bày các lối thoát payload gốc như Discord
components, Slackblocks, Telegram hoặc Mattermostbuttons, và Teams hoặc Feishucard. ReplyPayload.channelDatamang cả gợi ý truyền tải lẫn phong bì UI gốc.- Mô hình
interactivechung đã tồn tại, nhưng hẹp hơn các bố cục phong phú đang được Discord, Slack, Teams, Feishu, LINE, Telegram và Mattermost sử dụng.
Mục tiêu
- Core quyết định presentation theo ngữ nghĩa tốt nhất cho một thông điệp từ các năng lực đã khai báo.
- Phần mở rộng khai báo năng lực và kết xuất presentation theo ngữ nghĩa thành payload truyền tải 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 phơi bày qua bề mặt thông điệp agent dùng chung hoặc CLI.
- Các tính năng presentation không được hỗ trợ tự động hạ cấp về biểu diễn văn bản tốt nhất.
- Hành vi phân phối như ghim một thông điệp đã gửi là siêu dữ liệu 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 từ các thư viện UI gốc của kênh.
- Không có seam SDK đặc thù theo nhà cung cấp cho các kênh đóng gói sẵn.
Mô hình mục tiêu
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 di chuyển:
- 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 chọn
interactiveánh xạ tớipresentation.blocks[].type = "select".
presentation; interactive vẫn là helper phân tích/kết xuất legacy nội bộ cho các producer phản hồi hiện có.
API hướng tới producer công khai coi interactive là đã lỗi thời. Hỗ trợ runtime
vẫn còn để các helper phê duyệt hiện có và Plugin cũ tiếp tục hoạt động trong khi mã mới phát ra presentation.
Siêu dữ liệu phân phối
Thêm trườngdelivery do core sở hữu cho hành vi gửi không phải 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 được hỗ trợ hoặc việc ghim thất bại sẽ tự động hạ cấp bằng cách tiếp tục phân phối.- Các hành động thông điệp
pin,unpinvàlist-pinsthủ công vẫn giữ cho các thông điệp hiện có.
channelData.telegram.pin = true sang delivery.pin = true.
Hợp đồng năng lực runtime
Thêm hook kết xuất presentation và delivery vào bộ chuyển đổi gửi đi runtime, không phải Plugin kênh mặt phẳng điều khiển.- Phân giải kênh đích và bộ chuyển đổi runtime.
- Hỏi các năng lực presentation.
- Hạ cấp các khối không được hỗ trợ và áp dụng giới hạn năng lực chung trước khi kết xuất.
- Gọi
renderPresentation. - Nếu không có bộ kết xuất, chuyển presentation thành văn bản dự phòng.
- 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:- Kết xuất
presentationthành components v2 và container Carbon trong các mô-đun chỉ dành cho runtime. - Giữ các helper màu nhấn trong mô-đun nhẹ.
- Xóa import
DiscordUiContainerkhỏi mã mặt phẳng điều khiển của Plugin kênh.
- Kết xuất
presentationthành Block Kit. - Xóa đầu vào
blockscủa agent và CLI.
- Kết xuất văn bản, ngữ cảnh và đường phân cách thành văn bản.
- Kết xuất hành động và select thành bàn phím nội tuyến khi được cấu hình và được phép cho bề mặt đích.
- Dùng văn bản dự phòng khi nút nội tuyến bị tắt.
- Chuyển việc ghim chủ đề ACP sang
delivery.pin.
- Kết xuất hành động thành nút tương tác khi được cấu hình.
- Kết xuất các khối khác thành văn bản dự phòng.
- Kết xuất
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.
- Kết xuất
presentationthành thẻ tương tác. - 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.
- Kết xuất
presentationthành Flex hoặc thông điệp mẫu khi có thể. - Dự phòng 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 tái cấu trúc
- Áp dụng lại bản sửa phát hành 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 gửi đi, tóm tắt phân phối và payload hook. - Thêm schema
MessagePresentationvà helper phân tích trong một subpath SDK/runtime hẹp. - Thay thế các năng lực thông điệp
buttons,cards,componentsvàblocksbằng năng lực presentation theo ngữ nghĩa. - Thêm hook bộ chuyển đổi gửi đi runtime cho kết xuất presentation và ghim phân phối.
- Thay thế việc xây dựng component xuyên ngữ cảnh bằng
buildCrossContextPresentation. - Xóa
src/infra/outbound/channel-adapters.tsvà xóabuildCrossContextComponentskhỏi kiểu Plugin kênh. - Đổi
maybeApplyCrossContextMarkerđể đính kèmpresentationthay vì tham số gốc. - Cập nhật đường gửi plugin-dispatch để chỉ sử dụng presentation theo ngữ nghĩa và siêu dữ liệu phân phối.
- Xóa tham số payload gốc của agent và CLI:
components,blocks,buttonsvàcard. - Xóa các helper SDK tạo schema công cụ thông điệp gốc, thay bằng helper schema presentation.
- Xóa phong bì UI/gốc khỏi
channelData; chỉ giữ siêu dữ liệu truyền tải cho đến khi từng trường còn lại được xem xét. - Di chuyển các bộ kết xuất 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 năng lực.
- Chạy lập hồ sơ fanout import cho Discord và các entrypoint kênh bị ảnh hưởng.
channelData riêng tư theo nhà cung cấp. Bước 15 vẫn là xác thực theo dõi nếu chúng ta muốn các số liệu fanout import định lượng ngoài cổng kiểu/kiểm thử.
Kiểm thử
Thêm hoặc cập nhật:- Kiểm thử chuẩn hóa presentation.
- Kiểm thử tự động hạ cấp presentation cho các khối không được hỗ trợ.
- Kiểm thử marker xuyên ngữ cảnh cho plugin dispatch và đường phân phối core.
- Kiểm thử ma trận kết xuất kênh cho Discord, Slack, Telegram, Mattermost, MS Teams, Feishu, LINE và văn bản dự phòng.
- 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.
- Hồi quy tính lười import entrypoint Discord bao phủ Carbon.
- Kiểm thử ghim phân phối bao phủ Telegram và dự phòng 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 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 media hiện vẫn nên tách biệt khỏi bố cục UI?