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