CodeFlow Canvas:把智能體編碼任務畫成可審計、可回滾的工作流圖

前言

在 DeepSeek Harness(DSH)裏讓智能體改一批文件,常見結局是對話裏一句「已完成」。隨後你要自己覈對:到底動了哪些文件、有沒有漏項、有沒有越界修改;一旦結果不對,往往只能靠手工 git 回退,且很難和「當時打算做什麼」對齊。對話 transcript 能記錄敘述,卻不能像 diff 那樣給出可執行的計劃與完成證據。

CodeFlow Canvas(dsh-codeflow-canvas)是 DSH 側欄裏的工作流畫布插件:界面借鑑 ComfyUI 的節點連線方式,每個節點對應智能體可在工作區執行的一條編碼任務,連線表示數據流依賴。維護者爲 TheLiudawei;當前版本 1.4.2,MIT 許可證,面向 DSH 桌面端(platform: DSH desktop),運行時 npm 依賴爲 0,無需單獨構建。插件由 ZCode 的 codeflow-canvas v0.2.2 移植而來,畫布編輯器保留,會話、工具協議、持久化、交付與撤銷等宿主對接在 DSH 上重寫。

這是什麼

一句話定位:把倉庫掃描結果與人工編排的任務,變成雙視圖節點圖(任務流水線 + 模塊結構),並在運行時有可追溯狀態與按次撤銷。

DSH 生態強調「一切皆插件」;社區目錄 SkillHub 是獨立站點,與 DeepSeek / 幻方無官方從屬關係,安裝前仍應自行閱讀源碼與許可證。

與「只在對話裏做計劃」的差異

README 用表格對比「在 transcript 裏規劃」與畫布模式,核心差異包括:

維度 對話裏規劃 CodeFlow 畫布
計劃來源 每次嘗試由模型重新生成 本地掃描樹:語言檢測、符號、TODO/FIXME 等,不調用模型、不消耗 prompt token
失敗信息 從對話重建 落在節點卡片上,節點停止 spinning
「說完成了」 往往只能信任表述 回合結束若無進展,宿主 reconciled 爲 failed
撤銷 手工 git,易過度回退 每次運行前快照;一條命令同時恢復文件與節點狀態
交付物 散落在聊天裏 原生 present 卡片與 docs/DELIVERY.md

作者提供的基準測試(npm run bench,固定 60 模塊 fixture)測得:冷/熱導入約 90 ms / 70 ms 量級,導入階段 agent 喚醒與 prompt token 均爲 0;兩次獨立導入在分析字段上 48/48 一致;撤銷相關檢查 4/4 通過。絕對耗時會因機器而異,零 token 與一致性計數在 CI 中由同一腳本約束。

核心功能

無模型導入倉庫

/flow-import 與導入對話框在本地掃描目錄,秒級生成任務流水線圖與模塊結構圖。同一 commit 上兩次掃描在任務、文件與評分上應一致,因爲結果來自確定性分析(實現見 lib/importer.js、lib/analyst.js、lib/duo.js),而非模型臆造。

雙視圖與實時過程

  • 任務視圖:節點爲可執行的編碼任務,依賴由連線表達。
  • 模塊視圖:展示模塊級結構關係。
  • 運行過程中可通過 GET /codeflow/api/activity 等接口查看思考流、步驟、進度與文件編輯(過程數據在內存環形緩衝,不落盤、不進日誌)。

界面跟隨 DSH 語言與主題,提供深色與淺色配色並隨宿主切換。

節點狀態有嚴格語義

節點在 prompt 入隊時進入 running,僅在智能體回報進度後變爲 done。若回合結束仍無進展,宿主標記爲 failed(例如「agent did not execute this node」),並可一鍵重試;狀態不依據模型口頭表述推斷(相關邏輯在 lib/gestures.js、lib/index.js、lib/activity.js)。

按次撤銷(Undo run)

每次 RUN_NODE / RUN_ALL 前對項目樹做快照(排除 node_modules、dist、.git 等)。「撤銷運行」按 LIFO 同時恢復文件與節點狀態,DSH 重啓後仍可用;恢復前會備份當前狀態,避免覆蓋丟失(lib/undo.js)。

其他已文檔化能力

  • 16 種節點類型,端口類型校驗(text / json / code / report / file / any)。
  • 智能體通過 codeflow_canvas 工具回填圖狀態;技能 codeflow-canvas 定義編排契約,/flow* 會自動帶上。
  • 零構建:宿主半側爲 ESM,瀏覽器半側爲手寫 bundle。

安裝與啓用

官方 README(簡體中文)給出的安裝方式爲從本地目錄鏈接安裝,不需要構建:

# 從本地目錄安裝 —— 不需要構建
dsh plugin --profile desktop add link:<本目錄的絕對路徑>

也可以在 DSH「設置 → 插件」中選擇安裝本地目錄。安裝後需重啓 DSH(宿主半側不支持熱重載),並刷新頁面。

SkillHub 目錄頁 提供面向 Harness 的安裝話術(例如讓 DSH 安裝 TheLiudawei/dsh-codeflow-canvas 並先讀取插件說明);具體以你使用的 DSH 版本支持的插件安裝方式爲準,勿在未覈對文檔的情況下自行拼接未出現的 CLI 形式。

確認插件是否加載:

curl -i http://127.0.0.1:<端口>/codeflow/canvas   # 期望 200 + HTML

若返回 404,且對應 profile 下找不到 codeflow 相關條目,需重新執行安裝並重啓。

前提: DSH 桌面端需提供 sessionController 才能運行節點。缺少時畫布仍可編輯、導入、保存,但運行會給出明確錯誤,而不是隨意綁定會話。

典型用法

下面入口來自官方用法表,可按需組合。

入口 作用
/flow 打開畫布(載入最近項目);帶參數時可按需求建項目
/flow-new [需求] 新建項目
/flow-import <路徑> 導入項目:宿主掃描併產出兩張圖,不經過 agent;支持 @ 選擇、~、引號與 file://
codeflow_canvas 工具 agent 回填:load / render / read / save / progress;view: "tasks" \| "modules"
node lib/importer.js <路徑> 命令行獨立導入,無需 DSH 進程

導入再運行的一條路徑:

  1. 在 DSH 中對目標源碼目錄執行 /flow-import <路徑>(或走導入對話框),得到任務圖與模塊圖。
  2. 在畫布中檢查節點與依賴;必要時編輯參數(改參數會重置下游,見端口類型規則)。
  3. 右鍵節點選擇「運行」,或使用工具欄「運行全部」。宿主先快照,再向項目專用會話投遞 [CodeFlow:RUN_NODE] / [CodeFlow:RUN_ALL],節點立即顯示 running。
  4. 智能體通過 codeflow_canvas 回報進度;完成後節點爲 done,失敗則留在卡片上的原因並可重試。
  5. 若整次運行不滿意,使用「撤銷運行」恢復至快照前的文件與節點狀態。

項目數據默認落在 <工作區>/CodeFlow/flow-projects/<項目名>/(含 workflow.json、workflow.modules.json 等)。工作區須由用戶在 DSH 已登記列表中選擇,插件不會自行創建工作區根目錄。

適用場景與注意

適合: 需要在 DSH 桌面端把多步編碼任務結構化、希望計劃來自本地掃描而非反覆讓模型「重寫計劃」、且要在單次運行粒度上審計與回滾的團隊或個人。

注意:

  • 插件以當前 DSH 進程的權限讀寫工作區與快照目錄;安裝前應通讀 GitHub 倉庫 源碼與 MIT 許可證,確認符合你的安全策略。
  • 導入需要能解析出圖文件落點的工作區;全新安裝且尚未綁定工作區時,導入流程會說明如何綁定,而不是猜測路徑。
  • 改 lib/*.js 需重啓 DSH;改 lib/client.js 刷新頁面即可。
  • 日誌:codeflow.log 記錄插件生命週期與 UI 動作等,不記錄提示詞與源碼;可通過 CODEFLOW_LOG=off 關閉。

結尾

CodeFlow Canvas 把「智能體編碼」從不可 diff 的對話計劃,換成可本地掃描生成、可雙視圖編輯、以節點狀態爲證據、以快照爲撤銷邊界的工作流。查閱版本說明與截圖見 GitHub README;在社區目錄檢索見 SkillHub:dsh-codeflow-canvas 與 TheLiudawei/dsh-codeflow-canvas。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜