跨平臺編程指南:基于 knowledge-work-plugins Meeting SDK 技能的完整實現(xiàn))
Zoom 分組會議室Breakout Rooms跨平臺編程指南基于 knowledge-work-plugins Meeting SDK 技能的完整實現(xiàn)【免費下載鏈接】knowledge-work-pluginsOpen source repository of plugins primarily intended for knowledge workers to use in Claude Cowork項目地址: https://gitcode.com/GitHub_Trending/kn/knowledge-work-plugins本篇技術(shù)指南基于 knowledge-work-plugins 倉庫中 Zoom 插件的 Meeting SDK 技能參考文檔 breakout-rooms.md系統(tǒng)講解如何通過 SDK 與 REST API 以編程方式創(chuàng)建、分配、開啟、關(guān)閉并管理 Zoom 會議的分組會議室Breakout Rooms。讀完本文你將掌握 Web、iOS、Android、Windows、macOS 五個平臺的 Breakout Room API 用法、REST API 預(yù)分配房間的請求格式、角色權(quán)限模型、容量限制與錄制限制以及 Video SDK 平臺下的 Subsessions 替代方案能夠直接在自己的集成項目中實現(xiàn)分組討論的全流程自動化控制。1. 什么是 Breakout Rooms各平臺支持程度如何Breakout Rooms分組會議室允許主持人將會議參與者拆分到更小的分組中實現(xiàn)分組討論、培訓(xùn)演練、頭腦風(fēng)暴等場景。本文的核心骨架文檔覆蓋了各平臺 SDK 中創(chuàng)建、管理和控制 breakout rooms 的完整 API。該文檔給出了如下平臺支持矩陣這是選型前的第一張對照表平臺支持程度說明Web SDK完整支持完整 APIiOS SDK完整支持Creator Admin 輔助接口helpersAndroid SDK完整支持Creator Admin 輔助接口helpersWindows SDK完整支持Controller 接口macOS SDK完整支持Controller 接口Linux SDK有限支持僅基礎(chǔ)功能Video SDK不同實現(xiàn)使用 Subsessions 概念并非原生 breakout rooms重要提示Video SDK 沒有原生 breakout rooms。它采用的是 Subsessions子會話概念需要自行進行手動會話管理詳見第 9 節(jié)。從倉庫結(jié)構(gòu)看meeting-sdk 技能入口將該文檔定位為 Features 參考之一Programmatic breakout room management與 授權(quán)簽名、Webinar 功能、故障排查 等參考并列說明 breakout rooms 是 Meeting SDK 集成中獨立而高頻的功能模塊。2. REST API創(chuàng)建預(yù)分配Pre-assigned分組房間在會議開始前可以通過 REST API 創(chuàng)建帶有預(yù)分配 breakout rooms 的會議從而在會議啟動時參與者已經(jīng)按名單歸組。請求端點POST /v2/users/{userId}/meetings請求體示例{ topic: Team Workshop, type: 2, settings: { breakout_room: { enable: true, rooms: [ { name: Team Alpha, participants: [user1example.com, user2example.com] }, { name: Team Beta, participants: [user3example.com, user4example.com] } ] } } }關(guān)鍵字段說明type: 2表示會議類型為會議meetingsettings.breakout_room.enable: true開啟 breakout rooms 功能rooms數(shù)組中每個元素是一個分組包含name房間名和participants按郵箱預(yù)分配的參與者列表。關(guān)鍵限制預(yù)分配的房間不會自動開啟。會議開始后主持人必須手動開啟 breakout rooms且不存在任何 REST API 可以自動開啟房間。這一限制直接影響架構(gòu)設(shè)計如果你的集成目標(biāo)是會議一開始就自動進入分組討論則必須在會議內(nèi)通過 SDK見下文各平臺實現(xiàn)觸發(fā)開啟動作或由主持人/機器人留在會內(nèi)完成開啟。3. Web SDK完整的 Breakout Room APIWeb SDKClient View即 CDN 提供的ZoomMtg全局對象回調(diào)式 API提供了 breakout rooms 最完整的 API 面。以下為原文檔覆蓋的全部接口。3.1 創(chuàng)建分組房間// 創(chuàng)建 5 個房間名稱自動生成Room 1, Room 2, ... ZoomMtg.BreakoutRoom.createBreakoutRoom({ data: 5, success: (response) console.log(Rooms created:, response), error: (error) console.error(Error:, error) }); // 創(chuàng)建帶自定義名稱的房間 ZoomMtg.BreakoutRoom.createBreakoutRoom({ data: [ { name: Engineering }, { name: Design }, { name: Product } ], success: (response) console.log(Rooms created:, response), error: (error) console.error(Error:, error) });data參數(shù)支持兩種形態(tài)傳一個數(shù)字表示按數(shù)量創(chuàng)建名稱自動生成為 Room N傳一個對象數(shù)組則為每個房間指定name。3.2 查詢分組房間列表ZoomMtg.BreakoutRoom.getBreakoutRooms({ success: (response) { const rooms response.result.rooms; rooms.forEach(room { console.log(Room ID: ${room.boId}, Name: ${room.name}); }); }, error: (error) console.error(Error:, error) });響應(yīng)中每個房間的核心標(biāo)識是boIdbreakout room ID與name。boId是后續(xù)分配、移動用戶時必須使用的房間標(biāo)識。3.3 分配參與者到房間// 先獲取未分配參會者列表 ZoomMtg.BreakoutRoom.getUnassignedAttendeeList({ success: (response) { const unassigned response.result.unassignedAttendeeList; console.log(Unassigned:, unassigned); } }); // 將某用戶分配到指定房間 ZoomMtg.BreakoutRoom.assignUserToBreakoutRoom({ targetRoomId: room-id-here, userId: 12345678, success: (response) console.log(Assigned:, response), error: (error) console.error(Error:, error) });3.4 在房間之間移動參與者ZoomMtg.BreakoutRoom.moveUserToBreakoutRoom({ targetRoomId: destination-room-id, userId: 12345678, success: (response) console.log(Moved:, response), error: (error) console.error(Error:, error) });3.5 開啟分組房間這是最復(fù)雜的調(diào)用options對象控制房間開啟后的行為ZoomMtg.BreakoutRoom.openBreakoutRooms({ options: { isAutoJoinRoom: false, // 讓參與者自己選擇房間 isBackToMainSessionEnabled: true, // 允許隨時返回主會場 isTimerEnabled: true, // 啟用倒計時 timerDuration: 1800, // 30 分鐘秒 needCountDown: true, // 顯示倒計時 waitSeconds: 60 // 自動加入前的等待秒數(shù) }, success: (response) console.log(Rooms opened:, response), error: (error) console.error(Error:, error) });參數(shù)語義對照結(jié)合 Windows 示例中SetBOOption的等價字段可以確認(rèn)這些開關(guān)在各平臺的語義一致參數(shù)語義對應(yīng) Windows SDK 字段isAutoJoinRoom是否自動將已分配用戶拉入房間IsAutoMoveAllAssignedParticipantsEnabledisBackToMainSessionEnabled參與者能否隨時返回主會場IsParticipantCanReturnToMainSessionAtAnyTimeisTimerEnabled/timerDuration分組計時器及分鐘/秒數(shù)IsBOTimerEnabled/timerDurationneedCountDown/waitSeconds關(guān)閉前倒計時提醒IsTimerAutoStopBOEnabled/countdown3.6 關(guān)閉分組房間ZoomMtg.BreakoutRoom.closeBreakoutRooms({ success: (response) console.log(Rooms closed:, response), error: (error) console.error(Error:, error) });3.7 向所有房間廣播消息ZoomMtg.BreakoutRoom.broadcast({ message: Please return to the main room in 2 minutes, success: (response) console.log(Broadcast sent:, response), error: (error) console.error(Error:, error) });3.8 查詢用戶狀態(tài)// 獲取當(dāng)前用戶的 breakout room ZoomMtg.BreakoutRoom.getCurrentBreakoutRoom({ success: (response) { const { roomId, name, attendeeStatus } response.result; console.log(Current room: ${name}, Status: ${attendeeStatus}); } }); // attendeeStatus 取值 // 1: UNASSIGNED - 未分配到任何房間 // 2: ASSIGNED_NOT_JOIN - 已分配但尚未加入 // 3: IN_BO - 當(dāng)前在 breakout room 中attendeeStatus的三態(tài)模型是編寫自動化分配邏輯的關(guān)鍵狀態(tài) 3 的用戶應(yīng)使用移動而非分配否則會觸發(fā)沖突。3.9 Web 端實操注意事項倉庫中專門有一篇 Component View Breakout Rooms 參考它補充了原文檔未展開的上下文約束Breakout rooms 是主持人控制的功能。即使 SDK UI 支持 breakout rooms編程方式的創(chuàng)建/開啟/關(guān)閉通常同時要求正確的角色host/co-host、會議本身已啟用 breakout rooms、以及你所用視圖類型Client View 的ZoomMtg或 Component View 的ZoomMtgEmbedded確實提供對應(yīng) API兩種視圖的 API不保證對等dont assume parity自動化前需要確認(rèn)具體 SDK 版本和視圖類型下 API 是否存在。另外從 SKILL.md 的 Web 快速入門可以確認(rèn)CDN 分發(fā)提供的是ZoomMtgClient View回調(diào)風(fēng)格npm 包zoom/meetingsdk提供的是ZoomMtgEmbeddedComponent ViewPromise 風(fēng)格。上文所有ZoomMtg.BreakoutRoom.*示例均屬于 Client View API。4. iOS SDKCreator/Admin 雙 Helper 模型iOS 端通過 MobileRTC 框架的 Meeting Service 獲取 breakout room 輔助接口。4.1 獲取 Helpers#import MobileRTC/MobileRTC.h // 獲取會議服務(wù) MobileRTCMeetingService *meetingService [[MobileRTC sharedRTC] getMeetingService]; // 獲取 breakout room creator用于創(chuàng)建房間 MobileRTCBOCreator *boCreator [meetingService getCreatorHelper]; // 獲取 breakout room admin用于管理房間 MobileRTCBOAdmin *boAdmin [meetingService getAdminHelper];4.2 創(chuàng)建房間// 創(chuàng)建 3 個 breakout rooms [boCreator createBreakoutRoom:3 completion:^(NSError *error) { if (error) { NSLog(Error: %, error.localizedDescription); } else { NSLog(Rooms created); } }]; // 創(chuàng)建指定名稱的房間 [boCreator createBreakoutRoomWithName:Engineering completion:^(NSError *error) { // 處理結(jié)果 }];4.3 管理房間// 開啟所有房間 [boAdmin openAllRoomsCompletion:^(NSError *error) { if (!error) { NSLog(Rooms opened); } }]; // 將用戶分配到房間 [boAdmin assignUser:userId toRoom:roomId completion:^(NSError *error) { if (!error) { NSLog(User assigned); } }]; // 關(guān)閉所有房間 [boAdmin closeAllRoomsCompletion:^(NSError *error) { if (!error) { NSLog(Rooms closed); } }];4.4 事件處理房間狀態(tài)變更iOS 端通過MobileRTCMeetingServiceDelegate協(xié)議回調(diào)接收 breakout room 狀態(tài)變化interface MyDelegate : NSObject MobileRTCMeetingServiceDelegate end implementation MyDelegate - (void)onMeetingBreakoutRoomStatusChanged:(MobileRTCBreakoutRoomStatus)status { switch (status) { case MobileRTCBreakoutRoomStatusNotStarted: NSLog(Breakout rooms not started); break; case MobileRTCBreakoutRoomStatusStarted: NSLog(Breakout rooms started); break; case MobileRTCBreakoutRoomStatusClosed: NSLog(Breakout rooms closed); break; } } end三態(tài)狀態(tài)枚舉NotStarted / Started / Closed與 Web 端房間生命周期一致跨平臺的狀態(tài)機邏輯可以復(fù)用。5. Android SDKIn-Meeting Controller 模型Android 端的 API 組織方式為ZoomSDK單例 →meetingService→inMeetingBreakoutRoomController再向下取 creator/admin helper。5.1 獲取 Helpersimport us.zoom.sdk.ZoomSDK val zoomSDK ZoomSDK.getInstance() val meetingService zoomSDK.meetingService val boController meetingService?.inMeetingBreakoutRoomController // 獲取 creator用于創(chuàng)建房間 val creator boController?.getCreatorHelper() // 獲取 admin用于管理房間 val admin boController?.getAdminHelper()5.2 創(chuàng)建房間// 創(chuàng)建 breakout rooms val error creator?.createBreakoutRoom(5) // 創(chuàng)建 5 個房間 if (error SDKError.SDKERR_SUCCESS) { Log.d(Breakout, Rooms created) } // 創(chuàng)建指定名稱的房間 creator?.createBreakoutRoomWithName(Engineering)注意 Android 的錯誤處理風(fēng)格與 iOS 不同不是 completion 回調(diào)而是同步返回SDKError枚舉SDKError.SDKERR_SUCCESS表示成功與倉庫 troubleshooting 參考 中錯誤碼 0 通常表示成功的說明一致。5.3 管理房間// 開啟所有房間 admin?.openAllRooms() // 將用戶分配到房間 admin?.assignUser(userId, roomId) // 在房間之間移動用戶 admin?.assignUser(userId, newRoomId) // 自動從原房間移除 // 廣播消息 admin?.broadcastToAll(Please return in 2 minutes) // 關(guān)閉所有房間 admin?.closeAllRooms()一個值得注意的實現(xiàn)細(xì)節(jié)Android 上移動用戶復(fù)用assignUser接口向新房間再次 assign 即自動從舊房間移除與 Web 端獨立的moveUserToBreakoutRoom形成對照——跨平臺移植代碼時不能直接按方法名對譯。6. Windows / macOS 桌面 SDKController 與事件回調(diào)6.1 WindowsC#include meeting_breakout_rooms_interface.h class MyBreakoutRoomsEvent : public IMeetingBreakoutRoomsEvent { public: void OnBreakoutRoomsStartedNotification(const wchar_t* stBID) override { // 處理 breakout rooms 開啟事件 wprintf(LBreakout rooms started: %s\n, stBID); } }; // 獲取 controller IMeetingBreakoutRoomsController* pController pMeetingService-GetBreakoutRoomsController(nullptr); // 注冊事件處理器 pController-SetEvent(new MyBreakoutRoomsEvent()); // 獲取房間列表 IListIBreakoutRoomsInfo** pRoomList pController-GetBreakoutRoomsInfoList(); for (int i 0; i pRoomList-GetItemCount(); i) { IBreakoutRoomsInfo* pRoom pRoomList-GetItem(i); wprintf(LRoom: %s (ID: %s)\n, pRoom-GetBreakoutRoomName(), pRoom-GetBID()); } // 加入 breakout room pController-JoinBreakoutRoom(Lroom-id); // 離開 breakout room pController-LeaveBreakoutRoom();6.2 macOSObjective-C#import ZoomSDK/ZoomSDK.h // 獲取 controller ZoomSDKBreakoutRoomsController *boController [[ZoomSDK sharedSDK] getMeetingService] getBreakoutRoomsController]; // 加入 breakout room [boController requestJoinBreakoutRoom:room-id]; // 離開 breakout room [boController requestLeaveBreakoutRoom]; // 關(guān)閉所有房間僅 host 可用 [boController requestCloseAllBreakoutRooms];6.3 倉庫縱深補充Windows 端的五角色模型原文檔的 Windows 示例展示了GetBreakoutRoomsController這一簡化 Controller 接口。倉庫中更完整的 Windows Breakout Rooms 示例基于 Windows Meeting SDK v6.7.2.26830揭示了底層實際的五角色接口模型——同一個用戶在會內(nèi)可以同時持有多個角色角色接口能力DataIBOData讀取 breakout room 信息、用戶分配、名稱AdminIBOAdmin管理運行中的 BO、接收求助請求、分配用戶、廣播CreatorIBOCreator創(chuàng)建/修改 BO、配置選項、預(yù)分配用戶AssistantIBOAssistant無需分配即可加入任意 BO次要角色AttendeeIBOAttendee加入被分配的 BO、向 admin 發(fā)起求助典型角色組合Host持有 Creator Admin DataCo-host持有 Admin Data普通參會者持有 Attendee Data。該示例還給出了原文檔未覆蓋的兩塊重要細(xì)節(jié)其一SetBOOption的完整選項集對應(yīng) Web 端openBreakoutRooms的options參數(shù)的桌面等價物BOOption option; option.IsBOTimerEnabled true; option.timerDuration 15; // 15 分鐘 option.IsTimerAutoStopBOEnabled true; // 計時結(jié)束后自動關(guān)閉 option.countdown BOStopCountdown_Seconds_60; // 60 秒關(guān)閉預(yù)警 option.IsParticipantCanChooseBO true; // 參與者可自選房間 option.IsParticipantCanReturnToMainSessionAtAnyTime true; option.IsAutoMoveAllAssignedParticipantsEnabled true; option.IsUserConfigMaxRoomUserLimitsEnabled true; option.nUserConfigMaxRoomUserLimits 10; // 每房間人數(shù)上限 bool success creator-SetBOOption(option);其二BO Controller 錯誤碼表可作為桌面端錯誤處理的依據(jù)碼名稱含義0BOControllerError_NULL_POINTERBO controller 為空——SDK 未初始化1BOControllerError_WRONG_CURRENT_STATUS當(dāng)前狀態(tài)不正確2BOControllerError_TOKEN_NOT_READYToken 未就緒3BOControllerError_NO_PRIVILEGE無權(quán)限執(zhí)行該操作4BOControllerError_BO_LIST_IS_UPLOADINGBO 列表正在上傳5BOControllerError_UPLOAD_FAILBO 列表上傳失敗6BOControllerError_NO_ONE_HAS_BEEN_ASSIGNED無法開啟——沒有用戶被分配100BOControllerError_UNKNOWN未知錯誤該示例中給出的端到端工作流為注冊角色監(jiān)聽器 → 收到 Creator 角色后配置選項并創(chuàng)建房間 → 收到創(chuàng)建回調(diào)后通過IBOData查找用戶/房間 ID 并預(yù)分配 → Admin 調(diào)用StartBO()開啟 → 參會者端收到 Attendee 角色后JoinBo()。這一角色驅(qū)動、回調(diào)串聯(lián)的模型是桌面端實現(xiàn)自動化 breakout 流程的標(biāo)準(zhǔn)結(jié)構(gòu)。7. 權(quán)限模型Host / Co-Host / Participant原文檔給出了跨平臺一致的權(quán)限矩陣操作HostCo-HostParticipant創(chuàng)建 breakout rooms允許允許禁止開啟 breakout rooms允許允許禁止關(guān)閉 breakout rooms允許允許禁止分配參與者允許允許禁止移動參與者允許禁止禁止廣播消息允許允許禁止加入任意房間允許允許*禁止*Co-host 只能加入由 host 分配的房間。權(quán)限模型與第 6.3 節(jié)的五角色接口一一對應(yīng)Web/iOS/Android 的 helpercreator/admin與桌面端的IBOCreator/IBOAdmin就是權(quán)限在 API 層的投影——沒有對應(yīng)角色時helper 為空或調(diào)用返回?zé)o權(quán)限錯誤如BOControllerError_NO_PRIVILEGE。設(shè)計集成方案時應(yīng)以應(yīng)用運行時實際獲得的角色為準(zhǔn)而非登錄身份。8. 容量限制與工程陷阱8.1 容量上限賬戶類型最大房間數(shù)最大參與人數(shù)Standard50 個房間共 500 人Large Meeting Add-on100 個房間共 1,000 人8.2 錄制限制云錄制只錄制主會場本地錄制只錄制錄制者所在的房間Host 無法錄制自己不在的 breakout room。這三條決定了分組討論全程留痕類需求必須改變方案要么 host/機器人巡回進入各房間做本地錄制要么只接受主會場云錄制。8.3 無法自動開啟預(yù)分配房間原文檔將此列為Critical限制不存在任何 API 可以自動開啟預(yù)分配的 breakout rooms會議開始后必須由 host 手動開啟。這與第 2 節(jié)的 REST 限制呼應(yīng)意味著REST 預(yù)分配 SDK 自動開啟是最可行的半自動架構(gòu)純 REST 路徑無法閉環(huán)。8.4 主會場會話超時Breakout rooms 進行期間如果主會場沒有任何參與者留下主會場可能在超時后關(guān)閉。必須確保至少一名參與者h(yuǎn)ost 或機器人留在主會場。對無人值守的自動化會議例如 bot 主持的培訓(xùn)會議這一點是常見的隱性故障源——主會場一旦關(guān)閉所有房間的closeBreakoutRooms流程都會失效。9. 最佳實踐原文檔三條 倉庫補充9.1 創(chuàng)建前先探測支持能力ZoomMtg.BreakoutRoom.getBreakoutRoomOptions({ success: (response) { if (response.result.isSupportBreakoutRoom) { // 會議支持 breakout rooms繼續(xù)創(chuàng)建 } } });isSupportBreakoutRoom是防御性編程的第一道閘門不同會議類型普通會議/ Webinar、不同賬戶配置下 breakout rooms 可能整體不可用直接創(chuàng)建會失敗。9.2 分配前檢查用戶狀態(tài)// 分配前先檢查 ZoomMtg.BreakoutRoom.getUserStatus({ userId: userId, success: (response) { const { attendeeStatus } response.result; if (attendeeStatus 3) { // IN_BO // 用戶已在某個房間中——應(yīng)使用移動而不是分配 } } });9.3 錯誤分類處理function handleBreakoutError(error) { switch (error.method) { case createBreakoutRoom: if (error.errorMessage.includes(not support)) { alert(Breakout rooms not enabled for this meeting); } break; case assignUserToBreakoutRoom: if (error.errorMessage.includes(not host)) { alert(Only host/co-host can assign participants); } break; } }按error.method定位失敗操作、按errorMessage關(guān)鍵字區(qū)分功能未開啟與權(quán)限不足這兩類錯誤的處理路徑完全不同前者需要改會議設(shè)置或降級 UI后者需要提示角色問題。9.4 倉庫補充Web 端視圖與角色的雙重確認(rèn)結(jié)合 component-view-breakout-rooms 參考 的排查模式Web 端遇到breakout rooms API 無效/缺失時推薦按序確認(rèn)三件事當(dāng)前運行身份是 host 還是 participant使用的是 Client ViewZoomMtg還是 Component ViewZoomMtgEmbedded且該視圖是否提供所需 API會議設(shè)置中 breakout rooms 是否已啟用getBreakoutRoomOptions探測。這三步與 9.1 的isSupportBreakoutRoom探測、第 7 節(jié)權(quán)限矩陣共同構(gòu)成 Web 端 breakout 問題的完整診斷鏈。10. Video SDK 平臺Subsessions 替代路線Video SDK沒有原生 breakout rooms。官方替代概念是 Subsessions需要自行實現(xiàn)分組邏輯創(chuàng)建多個獨立的 Video SDK 會話subsessions以編程方式在會話之間移動參與者自行實現(xiàn)房間管理邏輯計時、廣播、返回主會場等。倉庫的 Video SDK Web 技能文檔 在功能清單中將 Subsessions 標(biāo)注為 Breakout room support并從 API 映射表可見其入口為client.getSubsessionClient()。可以推斷在 Video SDK 場景下breakout room 完全退化為應(yīng)用層的多會話編排問題本文第 3 至 6 節(jié)的 Meeting SDK API 均不適用如果產(chǎn)品形態(tài)要求自繪 UIVideo SDK 的典型場景分組討論的實現(xiàn)成本與 Meeting SDK 路徑不在同一量級選型時應(yīng)將這一點計入決策。11. 小結(jié)按平臺選擇實現(xiàn)路徑將原文檔骨架與倉庫補充材料合并后各平臺的推薦實現(xiàn)路徑可以收斂為下表場景推薦路徑關(guān)鍵接口主要約束Web 會議內(nèi)嵌Client View完整自動化ZoomMtg.BreakoutRoom.*全套 APIhost/co-host 角色 會議開啟功能Web Component View先確認(rèn) API 對等性ZoomMtgEmbedded對應(yīng) API不保證與 Client View 對等iOS / AndroidHelper 模型getCreatorHelper/getAdminHelper狀態(tài)事件需走 delegate 回調(diào)Windows / macOSController 模型GetBreakoutRoomsController/getBreakoutRoomsController角色驅(qū)動五角色接口會前預(yù)分配REST APIPOST /v2/users/{userId}/meetings無法自動開啟需會內(nèi)補一刀Video SDKSubsessionsgetSubsessionClient()全部房間邏輯需自研本文全部事實與代碼示例均可溯源到倉庫文件主體內(nèi)容來自 breakout-rooms.md平臺上下文來自 meeting-sdk 技能入口、Windows Breakout Rooms 示例、Component View Breakout Rooms 參考、troubleshooting 參考 與 Video SDK Web 技能文檔。需要進一步深入某平臺的完整生命周期加入、簽名、UI 生命周期可沿 meeting-sdk 技能的 Detailed References 索引繼續(xù)查閱各平臺子目錄下的 SKILL.md。【免費下載鏈接】knowledge-work-pluginsOpen source repository of plugins primarily intended for knowledge workers to use in Claude Cowork項目地址: https://gitcode.com/GitHub_Trending/kn/knowledge-work-plugins創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考