前言¶
在 DeepSeek Harness(DSH)的聊天窗口中,AI 生成的長文檔容易刷屏,修改一個段落往往需要重發全文,且對話歷史中的版本難以追溯。collab-canvas(話布)提供瞭解決方案:它將長內容從對話中剝離,託管到一個獨立的 Markdown 文檔畫布上。你在瀏覽器內直接編輯,AI 通過 9 個專用工具讀寫,雙方的操作均進入撤銷歷史並支持衝突檢測。
核心功能¶
- 瀏覽器內編輯:畫布在 DSH 界面內渲染與編輯,改動自動保存。
- AI 可讀寫:AI 通過
canvas_*系列工具直接操作畫布,而非將內容貼入對話。 - 撤銷歷史:每次寫入入棧,人和 AI 的改動均可回退。
- 衝突檢測:
canvas_write支持baseVersion強一致檢查,若內容被覆蓋則返回E_CONFLICT。 - 文件持久化:畫布以普通 Markdown 文件存儲,配合
.canvases.json記錄元信息。 - 劃詞引用:選中畫布文字可彈出引用欄,將段落帶入對話。
- 文檔鏈接/拖放:支持在畫布內拖入文檔或生成鏈接。
- 存儲根可配:通過
canvas_configure可將畫布根目錄固定到任意位置。 - 跟隨主題:界面使用
var(--dsw-*)設計 token,自動適配主題換膚。
安裝與啓用¶
安裝命令如下:
dsh plugin --profile web add collab-canvas
安裝完成後,必須進行兩步配置才能啓用插件:
- 在 profile 的
package.json中將"collab-canvas"加進dsh.profile.bundles數組。 - 確保
dependencies字段也包含該包。
注意:只添加 dependencies 而不加 bundles 會導致 cordis.patch.yml 未生效,表現爲“裝上了但功能不在”。推薦使用 npm 安裝,可避免 git 依賴觸發的構建授權問題,且能在市場顯示下載量。
AI 工具¶
插件提供了 9 個工具,用於管理畫布:
canvas_list:列出全部畫布與當前活躍畫布。canvas_create:新建一個畫布。canvas_read:讀取畫布內容(head參數可截取前 N 字符)。canvas_write:寫入或修改畫布(支持replace/append/prepend及baseVersion)。canvas_save:保存畫布到指定文件路徑。canvas_load:將已有 Markdown 文件加載爲畫布。canvas_locate:在文檔中精確定位一段原文(處理重複文本)。canvas_delete:刪除畫布記錄。canvas_configure:固定畫布存儲根目錄。
數據存放與架構¶
畫布文件與元信息存儲在指定的存儲根目錄下:
<存儲根>/
├── .canvases.json # 畫布元信息(id、標題、關聯文件、版本)
├── <標題>.md # 畫布正文
├── .sessions/ # 會話級清單
└── attachments/ # 粘貼/拖入的圖片
默認存儲根爲當前會話工作區。架構分爲兩部分:
- Host(DSH Node 進程):運行在
dist/host.js,負責註冊工具、HTTP 端點、狀態持久化與編輯器腳本。 - Client(瀏覽器頁面):運行在
lib/client.js,負責注入 UI、劃詞欄及與 Host 的 RPC 通信。
開發與部署¶
開發涉及構建與搬運到 DSH 部署目錄:
npm run build # 編譯 src/host/*.js → dist/host.js
npm run deploy # 搬運到部署目錄
npm run verify # 上線前總檢
部署目錄默認由 DSH_HOME 推導,可通過環境變量 CCV_DEPLOY_DIR 覆蓋。
生效規則:
- 修改了 src/host/*.js → 搬運後必須完全重啓 dsh web(刷新頁面不夠)。
- 只修改了客戶端 → 搬運後刷新頁面即可。
適用場景¶
適合需要將 AI 協作內容沉澱爲文檔、進行版本控制或多人(人+AI)協同編輯的場景。使用前請檢查源碼與許可證。
總結¶
collab-canvas 解決了 DSH 中長文檔難以管理的問題,通過工具化接口讓 AI 能夠安全地讀寫 Markdown 文檔。掌握其安裝配置與部署規則,是高效利用該插件的前提。