前言¶
在 DSH(DeepSeek Harness)裏做個人財務相關的工作流時,常見做法是把支出記進表格或外部 App,再另開渠道查基金收益;會話裏看到的數字往往來自不同來源,還容易把「可支配現金」和「持倉盈虧」混在一起。下面介紹 maintainer ainachoneko 發佈的 dsh-ledger-wealth:DeepSeek Harness 分類爲「工作流」的插件,把「今天花了多少」和「理財今天賺了多少」放進同一會話,但兩筆錢始終是兩本賬——分表存儲、分節彙報,任何地方都不相加。數據落在本機 SQLite,不經過自有服務器。
這是什麼¶
dsh-ledger-wealth 是本地優先的記賬 + 理財持倉 DSH 插件:支持記賬與小票 OCR、running balance、收益嚴格降級鏈、月末雙節報告(英文簡介:Local-first bookkeeping + wealth ledger for DeepSeek Harness)。
- 倉庫:ainachoneko/dsh-ledger-wealth
- 社區目錄頁:skillhub 插件頁
- 當前
package.json版本:1.0.0,許可證 MIT - 運行要求:Node >=22.5.0,DSH >=0.2.1-rc.1 <0.3.0-0
核心設計:兩模塊、物理隔離¶
插件把能力拆成 A 記賬 與 B 理財,在數據層用不同表隔離:
| 模塊 | 能力概要 |
|---|---|
| A 記賬 | 一句話或一張小票 → 結構化賬目 → 用戶確認後落庫;餘額 = 初始餘額 + 累計收入 − 累計支出;月末報告含支出、收入、淨結餘、分類佔比(前 5)、最大單筆、環比 |
| B 理財 | 持倉錄入 → 每日收益按嚴格降級鏈取數,每個數字帶來源標註;月末理財報告單獨一節 |
物理隔離:ledger_entries 與 wealth_* 分表;finance_monthly_report 用分隔線切開記賬與理財,沒有跨模塊合計。金額在庫內以整數分(*_cents)存儲,對外 JSON 和文案再轉爲「元 + 兩位小數」。
記賬工具(A)¶
安裝後註冊約 20 個工具。與記賬直接相關的包括:
| 工具 | 作用 |
|---|---|
ledger_set_initial_balance |
設置初始餘額(必填,不會默認按 0 處理) |
ledger_add_entry |
記一筆:先預覽,confirm:true 才落庫 |
ledger_list_entries |
按月份/類型列賬目 |
ledger_delete_entry |
刪賬目:先預覽,confirm:true 才刪 |
ledger_balance |
當前可支配餘額 + 本月收支 |
ledger_month_summary |
月度彙總:分類佔比、最大單筆、每日明細 |
ledger_scan_receipt |
小票圖片 → 草稿(識別不到就留空,不猜) |
典型流程:先 ledger_set_initial_balance 設期初,日常用 ledger_add_entry 記收支;有小票時用 ledger_scan_receipt 出草稿,再在確認後落庫。安裝腳本會真的加載一次並調用 ledger_balance 做驗證。
理財工具與收益降級鏈(B)¶
| 工具 | 作用 |
|---|---|
wealth_add_product / wealth_update_product |
錄入或修改持倉(含份額、手動收益、歸檔等) |
wealth_list_products |
列出持倉(可選含已歸檔) |
wealth_record_profit |
手填某天收益(同日重記冪等覆蓋) |
wealth_refresh_profit |
按降級鏈刷新收益,缺失的產品明確報缺失 |
wealth_summary |
理財月度彙總:本月/累計收益、來源、到期提醒 |
收益降級鏈按順序嘗試,每一步留在返回值的 attempts 裏:
manual— 手填當日收益api— 基金:份額 × (今日單位淨值 − 上一交易日單位淨值)estimated— 僅有漲跌幅時用持倉金額估算,明確標註估算not_covered— 銀行理財無免費源,直接不可用stale— 失敗則沿用上次記錄,標明「非實時」unavailable— 無歷史值則如實報缺失,不落庫、不編數字
任何情況下都不會用「年化收益率 ÷ 365」推算昨日收益;七日年化僅用於展示。銀行理財不做登錄態頁面抓取。
報告與定時任務¶
finance_monthly_report:月末雙節報告(記賬 + 理財,中間分隔線,無合併總額)finance_run_daily_job/finance_run_month_end_job:手動觸發定時任務(冪等)finance_setup_schedules/finance_schedule_status:註冊或查看定時任務finance_alerts/finance_status:數據源告警與插件自檢
默認定時(可在 profile 覆蓋):每日 0 20 * * *,月末 0 21 28-31 * *(配置項見下文)。
安裝與啓用¶
拿到 zip 或源碼目錄後,進入純英文、無空格的路徑,執行官方安裝腳本:
cd dsh-ledger-wealth # 解壓到純英文、不帶空格的路徑
node scripts/install-into-dsh.mjs
腳本用 DSH 自帶的 pnpm 裝進 profile,註冊工具並調用 ledger_balance 驗證通過後寫入 dsh.profile.bundles。裝完需重啓 DSH。不需要 dsh CLI、不需要 npm 賬號、沒有 Python 依賴(OCR 若用 rapidocr 需自行配置 Python 路徑)。
其他方式(完整說明見倉庫 docs/INSTALL.md):
node scripts/install-into-dsh.mjs --pack # 自包含副本,源碼目錄可刪
node scripts/install-into-dsh.mjs --remove # 卸載
dsh plugin --profile desktop add link:/絕對路徑/dsh-ledger-wealth # 有 dsh 命令時的等價寫法
注意:插件以當前 DSH 進程權限運行;安裝前應閱讀源碼與 MIT 許可證,確認 OCR、基金接口等行爲符合你的環境策略。社區目錄(如 skillhub)與 DeepSeek / 幻方無官方從屬關係;市場一鍵安裝依賴 awesome-dsh-plugin 收錄,本倉庫說明見 docs/PUBLISH.md。
配置¶
默認配置在插件包 cordis.patch.yml;覆蓋請在 profile 自己的 cordis.patch.yml 裏對同 id 增加 config(勿改包內文件,升級會被覆蓋):
- id: ledger-wealth
config:
timeZone: Asia/Shanghai
dbPath: '' # 空 = ~/.dsh/ledger-wealth/ledger.sqlite
dailyJobCron: '0 20 * * *'
monthlyJobCron: '0 21 28-31 * *'
fetchTimeoutMs: 8000
fundApiEnabled: true # 關掉 = 基金也走「沿用上次值」
bankApiEnabled: true # 銀行理財目前沒有免費源,恆 not_covered
ocrProvider: auto # auto | command | rapidocr | none
ocrCommand: '' # 自定義 OCR CLI,stdout 出文字
ocrVenvPython: '' # 裝了 rapidocr_onnxruntime 的 python
數據位置與隱私¶
數據庫默認路徑:
~/.dsh/ledger-wealth/ledger.sqlite
記賬表 ledger_entries;理財表 wealth_products、wealth_daily_profit;另有 meta、job_runs、monthly_reports、alerts 等運維表。備份即複製該 .sqlite;卸載插件不刪數據,徹底清理需自行刪除目錄。
隱私相關:無遙測、無賬號、無雲端同步;網絡請求主要爲基金淨值(東方財富公開接口),可在配置中關閉 fundApiEnabled。
開發與自檢¶
維護者本地可跑:
cd dsh-ledger-wealth
node tests/run.mjs # 64 個用例,全內存庫,不聯網
node scripts/check.mjs # 語法 + 清單自檢
表結構、工具簽名與錯誤碼見 docs/INTERFACES.md。
適用場景與小結¶
適合已在用 DSH、希望在本機會話裏完成記賬預覽確認、持倉收益帶來源標註、月末分節報告的智能體或開發者。不適合需要多設備雲同步或把現金與持倉合成一個「總資產」數字的場景——插件刻意不做跨模塊合計。
- 目錄頁:https://www.skillhub.cn/plugins/ainachoneko/dsh-ledger-wealth
- GitHub:https://github.com/ainachoneko/dsh-ledger-wealth