前言¶
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