dsh-codex-workbench:把每次 Codex 派活收成一張只讀清單

前言

在 DeepSeek Harness(DSH)裏把任務交給 Codex,往往是一次「異步投遞」:命令已經返回,進程還在後臺跑。主界面裏不一定有對應會話,想回答「它跑到哪一步、花了多少 token、產出了什麼」,常見做法是反覆打開 ~/.codex/sessions 看文件時間戳,或在對話裏手動彙報三態。下面介紹的 dsh-codex-workbench(界面裏叫「派活臺」)把 Codex 自己寫的 rollout 日誌讀成一張表,用浮卡和右欄兩個入口展示,插件本身只讀不寫會話目錄。

這是什麼

dsh-codex-workbench 由社區維護者 accoutmissing 發佈,在 DSH 生態裏屬於客戶端類插件(當前目錄頁星標爲 0)。它解決的是「派活清單不可見」:每次派給 Codex 的工作目錄、任務原話、已跑時長、token 用量、推斷狀態,以及可列出的產物文件,彙總成一行;數據全部來自 Codex 寫入的 rollout,路徑爲 %USERPROFILE%\.codex\sessions\<YYYY>\<MM>\<DD>\rollout-*.jsonl(存在 CODEX_HOME 時用該變量)。npm 包名爲 @local/dsh-codex-workbench,文檔中版本爲 0.4.1,許可 MIT。

核心功能

兩個入口,同一份數據

入口 掛載點 行爲
右下角浮卡 shell.overlay 收起時爲藥丸「派活臺 · N 在跑」,可拖動;有活在跑時可自動展開
右欄標籤頁 sidebar.right.pane.tab 全量列表(不截斷),篩選:全部 / 派活 / 審查 / 子代理

浮卡與右欄讀同一份掃描結果。手動收起後狀態記在 localStorage,不會反覆自動彈開;藥丸位置記的是左上角座標。展開後藥丸仍在原位並變爲「收起」,從同一位置進出。

列表裏每一行表示什麼

  • 工作目錄:派活所在路徑(示例界面中爲類似 D:\Fun 的目錄)。
  • 任務原話:來自 rollout 裏 item_completed 且 item.type === "UserMessage" 的文本,即用戶輸入,不是系統 base prompt。
  • 時間列:運行中顯示已跑時長(activeMs);否則顯示距最後事件的閒置時長,不是會話文件創建時間。
  • Token:token_count 事件中的 input / cached / output(界面示例形如 229.8M↓ 223.0Mc 690k↑)。
  • 分類:由 session_meta.thread_source 區分——user(派活)、guardian_review(審查)、subagent(子代理);排序時審查與子代理靠後,避免擠掉真派活。
  • 狀態:running(近 10 分鐘有事件且最後一輪未結束)、done(已 task_complete)、stale(未完成但靜默超過 10 分鐘)。狀態不只靠顏色:運行中爲實心強調色與呼吸環,已結束爲灰實心,卡住爲空心環。

點擊某行可展開詳情:任務原文、工作目錄、最後一段回覆,以及按 mtime 倒序的產物文件列表。

宿主側讀取策略

插件不發起外部網絡請求,dependencies 均爲空。掃描在後臺單飛;按 size + mtime 增量,未變文件不重讀。每個 rollout 默認只讀文件尾部 512 KB;session_meta 首行可能很長,按 8 KB → 256 KB → 1 MB 逐級放大直到讀到行尾並緩存。列表窗口爲最近 3 天、最多 24 條,面向「現在在跑什麼」而非全歷史。README 記載的本機實測:232 個 rollout 文件、3 天窗口留下 24 條;全量掃描約 1.4 s,命中緩存後約 0.2 s。

HTTP 路由(僅 loopback)

路由 方法 說明
/plugins/codex-workbench/state GET 會話列表、掃描統計、client 版本戳、插件版本
/plugins/codex-workbench/files?id=<sessionId> GET 單次派活的產物(BFS 深度 3,跳過 node_modules 等)

非 GET 返回 405。client bundle 若比磁盤舊,界面頂部會出現「界面代碼已更新 · 點此刷新」,點一下重載即可。

安裝與啓用

這是帶 dsh.bundle.patch(指向 cordis.patch.yml)的 DSH bundle,裝法與本地 bundle 相同。在 DSH 會話裏讓 Agent 執行:

// 在 DSH 會話裏讓 Agent 執行
plugin_manager({ action: 'install_bundle',
                 target: 'D:\\路徑\\到\\dsh-codex-workbench' })

將 target 換成本機 clone 或解壓後的目錄絕對路徑。返回 application: "applied" 纔算生效;failed 時查看 warnings。安裝後需刷新頁面(Ctrl+R)纔會加載新的 client bundle。

改代碼後不重啓 DSH 也可熱切換:

plugin_manager({ action:'set_plugin', target:'include:dsh-codex-workbench', enabled:false })
plugin_manager({ action:'set_plugin', target:'include:dsh-codex-workbench', enabled:true })

注意 entry id 是 include:dsh-codex-workbench,不是包名。自檢可請求 GET /plugins/codex-workbench/state:version 應對應 package.json;staleHost 爲 false 且 hostStamp 不大於 loadedAt 表示宿主模塊一致;clientStamp 與 client.js 的 mtime 一致表示瀏覽器端已更新。

典型用法

  1. 安裝 bundle 並刷新 DSH 頁面。
  2. 照常通過 DSH 向 Codex 派活;Codex 會在 ~/.codex/sessions 下寫 rollout。
  3. 看右下角浮卡:有進行中的派活時藥丸會顯示數量,展開即可掃一眼目錄、原話、token 與 wait_agent 等狀態。
  4. 需要完整列表或按類型篩選時,打開右欄「派活臺」標籤,在「全部 / 派活 / 審查 / 子代理」間切換;括號內爲當前篩選條數。
  5. 某次派活完成後,點開行內詳情,在產物區查看本次寫入的文件;需要 API 級列表時對 loopback 調用 /plugins/codex-workbench/files?id=<sessionId>。

浮卡藥丸可在窗口內拖動,鬆手後位置持久化;展開態點藥丸上的「收起」回到藥丸形態。

適用場景與注意

適合誰:在 DSH 桌面版上頻繁把長任務交給 Codex、又不想手動翻 sessions 目錄的開發者。目標是「一眼區分還在跑、卡住、已完事」,而不是替代 Codex 自帶的完整會話 UI。

環境與限制(均來自 README):

  • 僅在 Windows + DSH 桌面版上實測(Electron 自帶 Node 24);其他平臺未在文檔中承諾可用。
  • 只解析 rollout 中的結構化事件;ops_bash 命令字符串裏隱含的產物不會猜測。
  • 狀態靠事件靜默時長推斷,無進程級探活:例如 9 分鐘無輸出仍可能顯示 running,文檔說明這是爲避免把仍在運行的活誤判爲已死。
  • UI 配色跟隨當前皮膚 token(如 --dsh-claude-*、--dsw-alias-*),插件不自帶調色板;面板表面不透明,不使用 backdrop-filter。

安全與信任:插件以當前 DSH 進程權限運行,只讀本地 Codex 會話目錄並通過 loopback 提供兩條 GET 路由。安裝前應在 GitHub 倉庫 查看源碼與 MIT 許可證,確認路徑與行爲符合你的環境。DSH 社區插件目錄(SkillHub 條目)由社區維護,與 DeepSeek / 幻方無官方從屬關係。

結尾

dsh-codex-workbench 把 ~/.codex/sessions 裏的 rollout 收成派活臺:浮卡盯進行中的活,右欄做全量篩選與詳情。無構建步驟,宿主邏輯在 index.js,界面在 client.js;開發自檢可執行 node --check index.js && node --check client.js。

  • 目錄頁:https://www.skillhub.cn/plugins/accoutmissing/dsh-codex-workbench
  • 源碼與 README:https://github.com/accoutmissing/dsh-codex-workbench
羽毛球分组比赛记分
小程序二维码

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

小夜