JiepengLab/dsh-neptune:把尼普頓充電樁接進 DSH,查餘額、看插座、定明早六點的續充

前言

DSH 的理念是「一切皆插件」,充電樁這種又窄又老的業務系統,通常是插件而不是 MCP server 更合適。寫一個聯網插件時會碰到幾個繞不開的問題:憑證從哪來、出了事怎麼審批、定時任務誰執行、廠商接口改了怎麼辦。JiepengLab/dsh-neptune 是一個跑在用戶本機的充電插件,覆蓋了這一整條鏈路。作者是 JiepengLab,倉庫地址 https://github.com/JiepengLab/dsh-neptune,社區目錄頁 https://www.skillhub.cn/plugins/JiepengLab/dsh-neptune 。

下面介紹它的能力、安裝方式、使用流程,以及幾條容易踩到的限制。

這是什麼

一句話定位:用聊天操控尼普頓充電樁——查餘額和訂單、看某根樁哪些插座空着、定一個明早六點的續充任務,到點自動起單。

它解決的是這類需求:用戶睡前把車插上,早上六點前要續上,但凌晨可能沒人守着電腦。插件跑在用戶的 dsh 進程裏,定時續充由宿主在任務到點時投回會話執行。

插件不連服務器,直接打廠商接口。openId 是廠商側的配對憑證,只存在插件進程內存裏,不進模型上下文,也不落盤。

核心功能

能力和對應的工具如下,插件本身不提供命令,你在聊天裏說,agent 轉成工具調用。

1、neptune_pair:取憑證。授權之後帶 openId 的網址進了本機微信的瀏覽歷史,插件從那裏取憑證,不需要用戶手打字符串。
2、neptune_status:查餘額、當前訂單、可充時段、最近一單。
3、neptune_sockets:查某根樁每個插座的佔用狀態。
4、neptune_charge_at:起一個 DSH 定時任務,是唯一的起單寫入口。
5、neptune_charge:到點執行續充,只在宿主投遞那條任務時使用。
6、neptune_scan:從插座二維碼的照片裏讀出樁號和插座號。
7、neptune_recipe:把賬號信息或起單網址寫進剪貼板,供手機自動化這類場景使用。

考慮到便攜性和穩定性,插件在起單前設有五道閘門:已經在充、不在可充時段、餘額爲 0、餘額不夠預扣、目標插座不空閒。另外無人值守續充只續被午夜斷電切掉的那一單——這是爲了避免車已經開走卻白起一單。

安裝與啓用

安裝命令如下(PowerShell,屬於 DSH 的 --profile 安裝方式):

dsh plugin --profile desktop add github:JiepengLab/dsh-neptune

兼容性:DSH >=0.2.2-rc.1 <0.3.0-0,Node 20 或更高,無構建步驟,package.json 裏聲明的 peer dependency 是 @deepseek-ai/dsh-tools >=0.0.1。許可證爲 MIT。

裝完並不等於能用。第一次使用前還有兩件事要做。

第一是在電腦微信裏打開一次廠商鏈接,把鏈接末尾的 8 位數字換成用戶那根樁的編號(編號印在樁上):

https://szlzn.cn/wechat/wxscan/50959120

授權那一步只能在微信裏完成,在普通瀏覽器裏打開會回「請在微信客戶端打開鏈接」。授權之後,帶 openId 的網址進入微信瀏覽歷史,插件從那裏取憑證。落地頁可能顯示不出來,是因爲廠商那臺機器只走 http,從 https 頁面調它會被瀏覽器攔掉——這是預期行爲。

第二是起定時任務前確認電腦能開到早上六點,這個下面單獨講。

典型用法

以下幾條都來自 README 的措辭表,可以直接用這些說法調試插件。

你說的話 插件做什麼
查一下我的充電狀態 餘額、當前訂單、可充時段、最近一單
那個樁哪些插座空着 逐個插座的佔用狀態
幫我續上 起一個 DSH 任務,默認早上六點那一單,到點自動續
明早六點幫我續上 同上,不給時刻就定在 06:05
現在就續 當場續沒有。告到點再充,或起一個最近時刻的任務
拍了插座上二維碼的照片 neptune_scan 讀出樁號與插座號,再定一個 06:05 的任務

注意「明早六點幫我續上」建的是一條宿主任務。那條任務記錄就是批准憑據:它寫着續哪個樁哪個插座,到點由宿主投回會話。批准在簽發時發生,不在執行時,到點那次調用不會再問用戶。這會帶來一點點 token 消耗——到點任務會叫醒 agent 執行續充。

電腦晚上不能開機怎麼辦

這個插件跑在用戶的電腦上。宿舍斷電或關機,六點的續充就沒人執行。README 給的建議是:起定時任務前先問一句「這臺電腦能開到早上六點嗎」。

不能的話有兩條替代路線,代價各不相同。

1、GitHub Actions。Fork 上游倉庫,配三個 secret(NEPTUNE_OPEN_ID、NEPTUNE_AREA_ID、NEPTUNE_EMPLOYEE_ID),每半小時跑一次,從 02:47 到 06:07 北京時間。代價是憑證進 GitHub Secrets,要有 GitHub 賬號;它按餘額封頂,餘額多少就充多少,作者設置的封頂是 2 元。
2、手機自動化。插件把起單網址寫進剪貼板,在手機自動化里加一個「打開 URL」的動作,定在 06:05。這條網址沒有閘門:不查插座佔用、餘額、昨晚是否斷電單;網址帶 openId,不能貼進聊天。這條只在「車一定停在那個插座」時安全,因爲廠商不攔在別人佔用的插座上起單,會給別人的車計費,賬上用戶付。

兩條路線都要用戶自己改環境或配倉庫,README 沒有提供可直接照抄的 workflow 文件。

安全邊界與排錯

插件的憑證處理規則集中寫在 README 的安全邊界一節,這幾條對維護者來說比功能更重要。

1、openId 只存在插件內存裏,不進模型上下文,不返回給調用方,不落盤。廠商有些接口會回顯 openId,插件在讀應答的那一層就打碼,模型看到的都是打碼後的串。
2、neptune_recipe 會把值寫進剪貼板,寫之前應該先問用戶;值不進模型上下文,也不進聊天。Windows 的剪貼板歷史(Win+V)與剪貼板同步會留副本,值進了剪貼板就等於交給這些機制。
3、憑證來源有環境變量、agent 給的目錄、本機微信瀏覽歷史三種,插件自己讀文件;agent 的權限只限於列目錄名,不得讀 History 文件的內容。
4、授權憑據是宿主那條定時任務,它由宿主持久化,在任務頁面看得見,也刪得掉。

排錯一節的幾條高頻現象:

1、「沒找到廠商的網址」:按提示在電腦微信裏打開鏈接,或用文件工具找到微信數據目錄餵給 dir。
2、「還沒到可充電時段」:樁的可充時段是 6:00 到 24:00,窗口外起單會被廠商結束。
3、「目標插座不空閒」:那個插座有人在充。廠商不攔,但結束訂單會清掉對方的狀態。
4、「系統繁忙,請2分鐘後操作!」:廠商限流,等兩分鐘,不要改字段重試。
5、「認不出這條定時任務批准的是哪個插座」:宿主改了提醒正文的格式,重新說一句「明早六點續上」再起一個新任務。
6、「沒找到 psh」:Windows 上要裝 PowerShell 7 才能寫剪貼板。這是原文拼寫如此,實際排查時找的是 pwsh。
7、插件沒加載,或 agent 說沒有這些工具:查 profile 的 patch。

適用場景與注意

適合的是:睡前插上、早上六點要續上的車主;以及想給自家充電場景做自動化的個人開發者。插件以當前 dsh 進程權限運行,安裝前應該先讀一遍 JiepengLab/dsh-neptune 的源碼和許可證(MIT),確認口徑與你的環境一致再啓用。

它不是一個可以隨時退掉的工具。廠商接口改了就會失效,表現爲工具報「廠商拒絕了請求」;廠商改了計費檔位或訂單字段時,需要一起改 core/neptune-core.mjs 與 skills/neptune-resume/SKILL.md。作者在 README 裏明確寫了倉庫不含任何人的 openId,作者也拿不到任何人的憑證,每個人第一次用都要自己做一次配對。不要把 openId 寫進配置發給別人,那等於賬戶密碼。

插件可以刪。刪了只是沒了這套工具。

小結

dsh-neptune 的價值不在多,而在把充電這件小事裏的憑證發現、定時執行、安全閘門都固定成了一種約定:憑證只在內存,寫操作走宿主任務,續充一律定到點。想了解細節可以看 GitHub 上的 CONTRIBUTING.md(代碼位置、本地加載方式、要跑的檢查),或直接在社區目錄頁找到它。

目錄頁:https://www.skillhub.cn/plugins/JiepengLab/dsh-neptune
GitHub:https://github.com/JiepengLab/dsh-neptune

羽毛球分组比赛记分
小程序二维码

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

小夜