前言¶
做 Agent 的人大多遇到過兩件事:一邊是 Harness 裏的對話和任務,一邊是另一套日曆 / 待辦系統,兩邊的提醒和記錄對不上。要麼手動複製,要麼寫腳本同步。dsh-ai-calendar 處理的是後一種情況:它把一套日曆界面直接嵌進 DeepSeek Harness 的側欄,同時給 Agent 暴露一組日曆工具,並且把日曆自帶的 AI 助手換成 Harness 已配置的 DeepSeek 路由,不再單獨申請 key。
下面介紹這個插件是什麼、怎麼裝、怎麼用、有哪些坑。
這是什麼¶
dsh-ai-calendar 是 dengyinxi100-crypto 維護的 DeepSeek Harness 插件,npm 包名 dsh-ai-calendar,倉庫 dengyinxi100-crypto/ai-calendar-deepseek-harness。當前版本 1.2.1,許可證爲 UNLICENSED(非開源許可,使用前需自行確認授權範圍)。
它解決三件事:
- 在 Harness 側欄增加「日曆」入口,主區域嵌入完整日曆界面;
- 掛一個可拖拽、可縮放的定時任務浮窗,不打開日曆面板也能收到提醒;
- 給 Agent 註冊一組日曆工具,並讓 AI 直接執行新建 / 修改 / 刪除記錄。
日曆自身的多模型 AI 助手被替換爲 Harness 裏已配置的模型,按 token 計費,不額外填 key。
安裝與啓用¶
前置要求:Node.js ≥ 20,DeepSeek Harness(含 Web GUI),以及能編譯或下載 better-sqlite3 的平臺。
方式一,直接在 Harness 的插件管理裏安裝,填 npm 包名:
dsh-ai-calendar
也可以填本地目錄:
file:F:/path/to/dsh-ai-calendar
方式二,手動裝進 profile:
cd ~/.dsh/profiles/desktop
pnpm add dsh-ai-calendar
然後確認 package.json 的 dsh.profile.bundles 裏包含 dsh-ai-calendar。
裝完必須重啓一次 DeepSeek Harness,側欄纔會出現「日曆」。原因是宿主插件模塊只在啓動時加載一次,插件升級後也要重啓才生效;client / shim 部分刷新頁面即可。
側欄面板與定時任務浮窗¶
側欄出現「日曆」入口,未完成任務數用小徽標顯示。點擊後主區域嵌入完整日曆,包含月視圖、時間線、任務看板、日誌四種視圖。面板頂部顯示當日消耗,形如 DeepSeek API · 付費 · 今日 ¥0.0000 / 0 tok,懸停可看到總計、調用次數、輸入輸出 token。
左下角掛一個定時任務浮窗,可拖動、右下角可縮放,位置和尺寸會記住。浮窗顯示到點提醒(紅色強調條加「到點」膠囊)、接下來 4 條提醒、未完成任務數,點條目直接跳到日曆面板。提醒到點自動彈出並高亮 2.6 秒,× 或日曆面板裏「主題設置 → 懸浮窗」開關都能關掉。浮窗不依賴日曆面板是否打開:只要 Harness 開着,它每 15 秒輪詢一次後端。
Agent 日曆工具¶
插件註冊了 6 個工具:
| 工具 | 作用 |
|---|---|
calendar_status |
後端狀態、端口、數據路徑、記錄總數 |
calendar_list_logs |
按日期區間、是否週期、是否任務查詢 |
calendar_create_log |
新建日誌或任務 |
calendar_update_log |
修改已有記錄 |
calendar_delete_log |
刪除記錄 |
calendar_summarize |
讀真實日誌後讓 DeepSeek 生成中文總結 |
Agents 在任務裏可以直接調用這些工具管理日曆數據,不需要走 HTTP 接口自行拼裝。
AI 接管¶
AI 接管走 /api/ai/chat:插件把用戶消息連同數據庫摘要(總量、今天與之後的量、最近記錄含 id)一起餵給模型。模型返回 {"reply": "...", "ops": [...]},插件真正執行 create / update / delete,再按執行結果回一句人話。
回覆下方有一行淡灰色標註,形如 模型 deepseek-official/deepseek-flash · 入 N / 出 M tokens · ¥0.0000。界面不顯示 SQL、provider id 或技術細節。
配置¶
全部可選,通過環境變量傳入。
| 變量 | 默認 | 說明 |
|---|---|---|
DSH_CALENDAR_ROOT / DSH_CALENDAR_APP_ROOT |
包內 rsc/ |
覆蓋日曆前端與後端所在目錄,開發時指向源碼項目 |
DSH_CALENDAR_DB |
後端腳本旁的 calendar.db |
數據庫文件路徑,升級前建議指向固定目錄 |
DSH_CALENDAR_PORT |
3001 |
後端端口 |
DSH_CALENDAR_AI_MODEL |
跟隨 Harness 路由 | 強制指定模型名 |
DSH_CALENDAR_PRICE_INPUT_PER_M |
2 |
輸入單價(元 / 百萬 token),僅用於估算顯示 |
DSH_CALENDAR_PRICE_OUTPUT_PER_M |
8 |
輸出單價(元 / 百萬 token) |
數據與備份¶
日曆數據存在後端 SQLite,默認位置是後端腳本同目錄的 calendar.db,發佈包內即 rsc/server/calendar.db。插件會顯式把 DB_PATH 傳給後端,原因是後端 bundle 裏的寫法爲 DB_PATH || <後端腳本目錄>/calendar.db;一旦後端腳本被搬走(例如打包進插件包),不顯式傳參就會憑空生成一個空庫,看起來像數據被清空。
Harness 側的用量賬本存在瀏覽器 localStorage 的 dsh_ai_calendar_usage_v1,按天累計、保留 30 天。診斷日誌在 %TEMP%/dsh-ai-calendar/diag.log,其中 backend:db-path 事件記錄實際使用的數據庫路徑。
升級或重裝插件前,建議備份 calendar.db(連同 -wal / -shm 一起復制),或把 DSH_CALENDAR_DB 指向固定目錄。
常見問題¶
側欄沒有「日曆」:檢查 profile 的 dsh.profile.bundles 是否包含 dsh-ai-calendar,然後重啓 Harness。
面板裏空白:多半是靜態資源路徑問題。插件會在響應時注入 <base href="/dsh-calendar/app/">,構建產物裏不要自帶 <base href="/">。
提示「日曆服務沒能啓動」:端口 3001 被佔用,或 better-sqlite3 原生模塊沒裝好。裝好後點「刷新」,或先手動跑:
node rsc/server/index.cjs
改了日曆源碼但界面沒變:發佈包內的 rsc/ 是構建快照。重新構建應用後要同步(scripts/package-plugin.mjs 僅倉庫內開發者可用);開發時可以直接用 DSH_CALENDAR_ROOT=F:/AI calendar 指向源碼項目。
用量每次重啓清零:新版已改爲 localStorage 賬本,不再清零。若仍看到 0,請確認頁面已刷新到最新 client 版本。
適用場景與注意¶
適合需要在 Harness 裏統一管理任務、日誌和提醒,並希望 Agent 能讀寫日曆數據的開發者。
三點注意:
- 插件以當前 dsh 進程權限運行,安裝前應檢查其源碼與許可證,尤其是 UNLICENSED 的授權範圍;
- 日曆數據落在插件自帶的 SQLite,升級或重裝前應備份;
- 插件自帶的輔助腳本(
scripts/smoke.mjs、scripts/package-plugin.mjs等)不進發布包,本地開發時需自行準備。
小結¶
dsh-ai-calendar 的價值在於把日曆界面、定時提醒和 Agent 工具收斂進 Harness 一處,AI 部分複用已有的 DeepSeek 路由。
- 目錄頁:https://www.skillhub.cn/plugins/dengyinxi100-crypto/ai-calendar-deepseek-harness
- GitHub:https://github.com/dengyinxi100-crypto/ai-calendar-deepseek-harness