DSH 日曆日記:側欄純記事本

前言

DeepSeek Harness(DSH)的定位是「一切皆插件」,開發者可以自由擴展側欄面板、命令與工具鏈。然而多數側欄插件要麼做日程提醒,要麼做筆記聚合,很少提供「本地、離線、持久化」的簡單記事方式。DSH 社區裏也缺少一個純記事本:把一天的記錄寫在一個 Excel 文件裏,側欄按月曆展示,不聯網、不依賴雲同步。

插件定位

dsh-calendar-diary(日曆日記)是 DSH 的一個純記事本插件,由 liwangzimo 維護。它不提供提醒、通知、標籤、搜索或雲同步,也不與 DSH 的官方「自動化任務」聯動。插件通過側欄月曆面板展示日期,每一天的內容寫在用戶指定的 .xlsx 文件裏(默認位置爲用戶目錄下的 .dsh/dsh-calendar-diary/diary.xlsx)。數據格式與桌面日曆軟件 DesktopCal 導出的兩列結構一致,方便導入已有數據。

核心功能

側欄「日曆日記」面板

  • 月曆網格一次顯示 10 周(10 行 × 7 天,週一開頭)。
  • 格子內直接顯示當天內容,超出部分裁切;鼠標懸停查看全文。
  • 有記錄的日子帶標記。
  • 支持左右切換月份、回到今天。
  • 點擊某天彈出編輯框,可新增、修改、刪除當日記錄;保存或 Ctrl+Enter 提交,刪除按鈕清空當日文本但保留行。

數據文件管理

  • 面板頂部顯示當前數據文件路徑,點擊「更改…」可切換文件(只改變指向,不移動數據)。
  • 數據文件爲 .xlsx,默認位置與格式見「數據格式」。
  • 支持導入 .xlsx / .xls 文件,導入前先預覽:顯示來源、行數、日期範圍、新增 / 衝突 / 未變 / 跳過的條目數,並逐條列出衝突。
  • 選擇衝突策略(默認「保留現有」),確認後執行導入,寫入前自動備份。

導出功能

  • 支持導出範圍:全部 / 某年 / 某月。
  • 導出爲同構的 .xlsx,只寫入新文件,不修改數據文件本身。
  • 目標若爲當前數據文件本身會被拒絕,避免一次導出導致範圍外的天數被清空。

安裝與啓用

安裝前需要 DSH(桌面版或網頁版均可),插件同時包含宿主半與客戶端半。

方式一:從 GitHub 安裝

& '<DSH 安裝目錄>\resources\runtime\cli\bin\dsh.cmd' plugin --profile <profile> add "github:liwangzimo/dsh-calendar-diary" --config.minimumReleaseAge=0

方式二:克隆到本地後按目錄安裝

git clone https://github.com/liwangzimo/dsh-calendar-diary.git
& '<DSH 安裝目錄>\resources\runtime\cli\bin\dsh.cmd' plugin --profile <profile> add "link:<克隆下來的目錄>" --config.minimumReleaseAge=0

--config.minimumReleaseAge=0 只放寬這一次命令的供應鏈策略(DSH 的 profile 默認拒絕”太新”的包)。不加可能因 ERR_PNPM_MINIMUM_RELEASE_AGE_VIOLATION 失敗。

註冊 bundle

dsh plugin add 只安裝依賴,還需在 profile 的 package.json 裏登記插件:

"dsh": {
  "profile": {
    "bundles": [
      "…",
      "dsh-calendar-diary"
    ]
  }
}

修改後完全退出並重啓 DSH。重啓後側欄應出現「日曆日記」面板,或訪問 http://<DSH 地址>/dsh-calendar-diary/state 檢查 JSON 輸出。

卸載

& '<DSH 安裝目錄>\resources\runtime\cli\bin\dsh.cmd' plugin --profile <profile> remove dsh-calendar-diary

刪除 dsh.profile.bundles 中的對應條目,重啓。

數據格式

數據文件爲 .xlsx,默認位置爲用戶目錄下的 .dsh/dsh-calendar-diary/diary.xlsx(首次運行時創建):

項 值
工作表 DesktopCal
A 列 整數 Excel 日期序列號(1900 系統),單元格格式固定 m/d/yy
B 列 自由文本,可多行(\r\n),時間直接寫在文本里
行序 日期降序;一天最多一行

該格式與 DesktopCal 導出的兩列一致,因此已有的 DesktopCal 導出數據可直接導入。

HTTP 接口

插件在宿主半註冊了以下 HTTP 路由(客戶端同源調用,無會話依賴):

方法 路徑 說明
GET /dsh-calendar-diary/state 數據文件路徑、是否存在 / 可寫、總行數、有記錄的月份(降序)、今天
GET /dsh-calendar-diary/entries?month=YYYY-MM 該月條目 [{ date, serial, text }]
POST /dsh-calendar-diary/entries { date, text } 寫入 / 覆蓋一天;text:'' 置空但保留行
POST /dsh-calendar-diary/entries/remove { date } 刪掉該行
POST /dsh-calendar-diary/path { dataPath } 換數據文件(校驗是可用日記、拒絕 .xls)
POST /dsh-calendar-diary/pick-dir 原生文件夾對話框(不可用時返回 {ok:false,error},界面回落手輸)
POST /dsh-calendar-diary/list-files { dir } 列出候選 .xlsx / .xls
POST /dsh-calendar-diary/import/scan 只讀預覽導入,不寫盤
POST /dsh-calendar-diary/import/apply { sourcePath, policy } 執行導入(先備份再原子寫)
POST /dsh-calendar-diary/export { scope, value, outPath } 導出新 .xlsx

錯誤一律返回 JSON:{ ok:false, error:'<code>' },並伴隨相應的 4xx / 5xx 狀態碼。

適用場景與注意事項

  • 適合需要本地、離線、持久化記錄的用戶,尤其是習慣用 Excel 管理條目的場景。
  • 數據完全在本地,插件只讀寫指定的 .xlsx 文件,不聯網、不依賴雲服務。
  • 一天只保留一行:如果數據文件裏同一天有多行,讀取時按首行優先,後續寫入會覆蓋該行。
  • 導入必須先預覽再應用:預覽由客戶端實現,宿主半無狀態,/import/apply 單獨調用也會執行,但無法按天逐個決策。
  • 兩位數年份的文本日期(如 11/25/26)按 20xx 解釋,與 Excel 在該日期範圍內的行爲一致。
  • 插件以當前 DSH 進程的權限運行,安裝前建議檢查源碼與許可證(MIT)。

小結

dsh-calendar-diary 提供了一個極簡的本地記事方案:側欄月曆面板配合 .xlsx 文件,支持導入導出與衝突處理,不聯網、不依賴雲同步。對於希望把記錄落在自己控制文件中的開發者,它是一個輕量、可控的補充工具。

  • 插件主頁:https://github.com/liwangzimo/dsh-calendar-diary
  • 技能社區目錄:https://www.skillhub.cn/plugins/liwangzimo/dsh-calendar-diary
羽毛球分组比赛记分
小程序二维码

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

小夜