Skip to content

Releases: wssfk12138/dsh-damage-pulse

4.2.7: DeepSeek Harness 0.2.1-rc.2 兼容(桌面与 Web)

Choose a tag to compare

@wssfk12138 wssfk12138 released this 17 Oct 11:30

dsh-damage-pulse 4.2.7

兼容 DeepSeek Harness 0.2.1-rc.2 桌面版与 Web 版:新版宿主把全部 @deepseek-ai 包提升到 0.2.1-rc.2,插件原先声明的版本范围未包含该预发布版本,会被宿主跳过或拒绝加载。本版仅新增经过验证的精确版本,原有宿主支持范围保持。

继续保留 4.2.5 的 TUN / Fake-IP 余额修复;客户端界面、计费规则、设置、账本和模块状态保持原有行为。

已在 0.2.1-rc.2 桌面版以实际 tgz 核验宿主加载、合成非零余额与用量、父子会话金额、设置保存与完整重启保持、桌面及窄窗口布局;并在隔离 Web profile 以同一候选包完成安装、组装与启动核验。微信扫码与真实消息投递未在本次重验。安装或升级后请完整退出程序再启动。

4.2.6: DeepSeek Harness 0.2.1-rc.1 兼容

Choose a tag to compare

@wssfk12138 wssfk12138 released this 17 Oct 08:46

dsh-damage-pulse 4.2.6

兼容 DeepSeek Harness 0.2.1-rc.1 桌面版,修复新版宿主因插件版本范围未包含该预发布版本而跳过加载的问题。仅新增经过验证的精确版本,原有宿主支持范围保持。

继续保留 4.2.5 的 TUN / Fake-IP 余额修复;客户端界面、计费规则、设置、账本和模块状态保持原有行为。

已在 0.2.1-rc.1 桌面版以实际 tgz 核验合成非零余额与用量、父子会话金额、设置保存与完整重启保持、桌面及窄窗口布局。微信扫码与真实消息投递未在本次重验。安装或升级后请完整退出桌面程序再启动。

v4.2.5

Choose a tag to compare

@wssfk12138 wssfk12138 released this 14 Oct 13:12

4.2.5 修复开启 TUN / Fake-IP 代理后余额不显示的问题,本次通过 GitHub Release 提供预编译包。

  • 余额查询现在会自动接受代理对普通域名返回的 198.18.0.0/15(Fake-IP)解析并正常显示余额,不需要新增任何设置,也没有新增按钮或开关。
  • 查询失败后的重试更快:统一 15 秒短退避,不再按失败次数逐步拉长到 30–300 秒;供应商返回 429 时按其给出的等待时间处理(15 秒到 30 分钟)。代理重启或网络恢复后,余额会在一个轮询周期内自动回来。
  • 失败行为与之前一致:无法取得余额时,卡片仍回到原来的“无余额显示”,不出现错误码或错误文案;后台只记录一条固定格式的诊断。
  • 安全边界保持不变:请求仍只使用插件已批准的供应商端点与余额脚本,DNS 结果在附加密钥前完成校验并钉扎,TLS 证书身份仍是原供应商域名,不跟随重定向,密钥只在检查通过后发送。
  • 已知限制:代理通过 IPv6 或 IPv4-mapped 地址返回 Fake-IP 时暂不支持,表现与查询失败相同(只显示无余额、无错误码)。

升级:余额卡右键 → 卸载与更新 → 检查更新 → 安装新版 → 完整退出桌面(包括托盘)→ 重启。也可通过桌面插件页安装本 Release 的 dsh-damage-pulse-4.2.5.tgz,或使用 npm 包名 dsh-damage-pulse。

已在 DeepSeek Harness 0.2.0-rc.2 桌面版进行实际包与业务路径验证(含 TUN 同款 Fake-IP 答复、重启保持、非法目标仍然拒绝且不显示错误码、恢复及时)。其它宿主版本未逐一实机验证。请使用预编译 tgz;Source code 压缩包不含打包生成的 runtime。

v4.2.4

Choose a tag to compare

@wssfk12138 wssfk12138 released this 05 Oct 12:13

4.2.4 修复子会话用量显示及三个社区反馈问题,本次通过 GitHub Release 提供预编译包。npm 暂未更新至 4.2.4。

  • 子会话用量聚合、会话行金额及刷新链路修复,主任务汇总与子任务用量按业务规则显示。
  • #28:修复右键菜单继承余额卡悬停说明,以及菜单选中/图标标记不一致;移除余额卡悬停说明。
  • #29:拖动位置改为窗口内相对位置记忆,窗口缩放、卡片尺寸变化及重启后保持;不新增“恢复默认位置”菜单入口。
  • #30:整体卸载只清理一次;显式重装完整包后可恢复,普通重启不会复活已卸载插件,部分模块恢复保留原语义。
  • 鲸鱼娘动画默认缩放为 80%,已有显式自定义值保留。

升级:余额卡右键 → 卸载与更新 → 检查更新 → 安装新版 → 完整退出桌面(包括托盘)→ 重启。也可通过桌面插件页安装本 Release 的 dsh-damage-pulse-4.2.4.tgz。npm 暂未发布本版本,请通过 GitHub 更新或安装预编译 tgz。

已在 DeepSeek Harness 0.2.0-rc.2 桌面版进行实际包与业务路径验证。其它宿主版本未逐一实机验证。请使用预编译 tgz;Source code 压缩包不含打包生成的 runtime。

v4.2.3

Choose a tag to compare

@wssfk12138 wssfk12138 released this 01 Oct 09:44

4.2.3:修复内置更新后仍加载旧界面

部分用户通过插件内的「安装更新」升级到 4.2.2 后,版本号已经更新,亮色主题下的右键菜单却仍然是浅色背景、文字发白。原因是旧更新流程更新了模块文件,但桌面仍从另一个入口加载旧前端;仅重启旧版本不能修复这个文件差异。

本版在启动时校验并同步桌面实际读取的前端入口,让内置更新也能加载 4.2.2 已包含的菜单对比度修复。只有校验和同步成功后才完成重启状态确认;文件已经一致时不会重复写入。

如何升级

  1. 余额悬浮卡右键 →「卸载与更新」→「检查更新」→ 安装 4.2.3。
  2. 等待安装成功,完整退出 DeepSeek Harness 桌面程序,再重新打开。如果程序仍在托盘运行,请从托盘菜单退出;只关闭面板或窗口不一定退出整个程序。
  3. 在本插件的「卸载与更新」中确认当前版本为 4.2.3;亮色主题下右键菜单应为深色背景、清晰浅色文字。

正常升级无需删除设置、清空用量账本或重装。原有设置、账本和模块卸载状态保留,主动卸载的模块不会自动恢复。宿主插件列表可能保留最初安装包的版本号,请以本插件面板和重启后的实际界面共同核对。

新安装可使用 npm 包名 dsh-damage-pulse,或本页的 dsh-damage-pulse-4.2.3.tgz。GitHub 与 npm 发布同一份预编译包;请勿把 Source code 压缩包当作安装包。其余 manifest 与模块文件供内置更新器下载,无需手动逐个安装。

验证范围

  • DeepSeek Harness 0.2.0-rc.2 真实桌面版:4.2.1 内置升级、模块 4.2.2 / 旧前端混合状态升级,以及本版 tgz 全新安装均通过。
  • 完整重启后无需手动刷新;已核对实际加载的前端、明暗菜单、设置保存与重启保持、非零用量、图片资源、已卸载模块保持和整插件卸载后的休眠。
  • 入口同步与模块生命周期相关自动化、类型检查、构建及打包门禁通过。其他宿主版本未逐一实机验证。

v4.2.2

Choose a tag to compare

@wssfk12138 wssfk12138 released this 01 Oct 02:13

修复内容

  • 完成回复后可以正常分支(#27):用量记录晚于回复写入时,将其显示位置绑定到对应回复,避免宿主误认为回复后还有新内容。保留原始用量、事件序号和账本,不通过删除记录恢复按钮。
  • 计费规则显示与实际扣费一致(#26):实际计费、工具查询和设置界面使用同一套规则归属判断。DeepSeek 账号继承官方价格时,显示有效价格并提供“编辑共享规则”入口;明确提示共享修改的影响范围。已有独立账号规则仍整体优先,包括禁用和空规则。
  • 防止工具误改继承规则:查询工具返回规则来源;更新工具遇到继承条目时明确拒绝且不保存,避免创建不完整的账号规则并遮蔽共享价格。
  • 亮色主题右键菜单更清晰:菜单固定使用深灰背景与浅色文字,修复白底下发白、低对比度的问题。
  • 桌面更新入口与安装提示:识别桌面的 profile 目录并调用正确的安装入口;安装载荷缺失时说明可能原因和正确重装方法。

安装与升级

在目标桌面 profile 的插件页安装 dsh-damage-pulse,或下载本 Release 的 dsh-damage-pulse-4.2.2.tgz 安装。若页面提示已经安装,请先卸载旧包再安装,并重启对应 profile。不要使用仓库源码地址或“Source code”压缩包替代预编译 tgz。

GitHub Release 与 npm 已分发同一份冻结 tgz,两个通道的实际下载内容已校验一致;安装时请核对实际版本为 4.2.2。其余 manifest 与六个模块压缩包供内置模块管理器使用。

验证范围

  • 自动化回归、类型检查、构建与包校验通过;实际 tgz 已在隔离的 DeepSeek Harness 桌面版验证非零计费、设置保存与重启保持、分支操作和亮色菜单,用户视觉验收通过。
  • 本次实测桌面及关键内部组件版本为 0.2.0-rc.2。该宿主会触发安全保护而停止写入自定义会话用量事件,因此 #27 的对照采用合成会话的受控晚到事件重放:相同事件顺序下,4.2.1 按钮不可用,4.2.2 可分支且重载后仍可用。未绕过产品兼容保护。
  • 不承诺自动修复缺少来源事件序号的全部旧历史。真实 DeepSeek 账号登录、微信扫码及插件投递不在本次实机验证范围内;账号规则由前后端自动化与实际打包 runtime 组合测试覆盖。

v4.2.1

Choose a tag to compare

@wssfk12138 wssfk12138 released this 30 Sep 09:17

dsh-damage-pulse 4.2.1

4.2.1 修复独立安装中的设置兼容与桌面运行问题,并保留现有账本、偏好和模块卸载状态。

  • 补齐旧版 settings namespace 的注册、持久化和更新事件类型;保留 revision 冲突保护与数字自动保存。
  • 修复桌面图片基址、动态面板路由、原生会话行金额兜底与明暗/窄窗口布局;菜单支持键盘和 Escape。
  • 模块卸载执行物理文件清理;重启和升级不自动复活已删除模块,整体卸载后的待清理操作可重试。
  • 为变更后的载荷使用独立 4.2.1 清单,保持 SHA-256、大小和版本校验。

安装与升级

下载本 Release 的 dsh-damage-pulse-4.2.1.tgz,通过宿主插件安装入口安装到原有 profile。Web CLI 可执行:

dsh plugin --profile web add https://github.com/wssfk12138/dsh-damage-pulse/releases/download/v4.2.1/dsh-damage-pulse-4.2.1.tgz

升级保留设置、usage.jsonl 与卸载标记。不要删除账本、清除卸载标记或放宽摘要校验。已卸载模块需要在“卸载与更新”中显式恢复;版本变更前建议备份 profile 与插件数据,不承诺降级自动回退迁移。

验证与范围

完整相关自动化、类型检查和构建通过。DSH 0.2.0-rc.2 真实桌面 EXE 的隔离 profile 已验证新装、升级、四面板明暗/窄宽/放大字体、真实余额查询、既有成功扣费记录保持、设置重启保持、五模块物理卸载与整体删除重试。旧 settings 0.1.0-rc.7 与 0.1.7 profile 兼容链另有验证;不将 peer 范围等同逐版本实机证明。

本轮未重新测试真实微信扫码和插件消息投递;通知作用域、请求校验与进程 stop/drain 有自动化覆盖。视觉与交互检查按本次用户授权由模型执行,不宣称用户亲自目视验收。

本 Release 提供完整插件 tgz 和 7 个模块更新资产。npm 已后续发布 dsh-damage-pulse@4.2.1,latest=4.2.1;npm 与 GitHub 的插件 tgz 已核对为逐字节一致。npm 4.2.1。

v4.2.0

Choose a tag to compare

@wssfk12138 wssfk12138 released this 29 Sep 16:51

v4.2.0 账号路由与官方 API key 路由共用同一套官方计价

本次发布让 DeepSeek 账号路由(provider id deepseek-account)在计费资格、默认规则、余额来源、用量查询与客户端扣费反馈上与官方 API key 路由(deepseek-official)同族同价。此前资格判定只认 deepseek-official,账号路由下的调用会落成「未计价」,悬浮卡片的用量概览查不到记录而显示「未记录」,客户端的扣费事件也被整体丢弃(既不显示「-¥」飘字,也不触发鲸鱼娘的受击/扣血动画)。

问题

  • resolvePricingEligibility 只对 provider === 'deepseek-official' 返回价格命中,账号路由被直接判为不合格,账本记 billingStatus: 'unpriced'、cost 为 0。
  • 默认计费规则没有账号供商标板;已保存的旧快照(本机 desktop profile 的 state.json 即只有 deepseek-official/openai/zhipu/kimi/hunyuan/qwen/fast)同样没有账号条目,账号路由即使放行也找不到规则。
  • 悬浮卡片概览(/api/token-monitor/overview)与用量明细的 provider 过滤是精确匹配:记录存 deepseek-official 时,客户端按当前 provider deepseek-account 查询会返回 null。
  • 官方余额来源与内置脚本/端点判定同样只认 deepseek-official。
  • 客户端扣费门禁 hasConfiguredBillingRule 按精确 provider 匹配已保存规则:账号路由的扣费事件因找不到 deepseek-account 条目而被 continue 跳过,视觉管线拿不到事件——飘字与鲸鱼娘的受击/扣血动画都不再触发(余额条仍正常,所以现象只表现为「动画不播」)。

修复

  • plugins/dsh-token-monitor/src/pricing.ts:新增 OFFICIAL_PROVIDER_IDS = ['deepseek-official', 'deepseek-account']、isOfficialProvider() 与 sameProviderFamily();资格门禁改用 isOfficialProvider,命中结果携带实际路由 id,PricingEligibility.provider 类型放宽为 string。

  • billing.ts:isDeepseekBillingModel 与 rule.source 的官方判定改用 isOfficialProvider;defaultBillingRules 默认增补 deepseek-account 模板(与官方同模型同价);billUsage 在已保存快照没有账号条目时回退到官方条目计价。

  • balance-provider.ts / balance-config.ts:官方余额来源判定改用 isOfficialProvider,并接受 settingsNs = llm-deepseek-account。

  • details.ts / detail-query.ts:悬浮卡片概览与用量明细的 provider 过滤改为 sameProviderFamily(空值不过滤、官方族互认)。

  • usage-summary.ts:概览聚合按官方族过滤,历史 deepseek-official 记录在账号路由配置下同样计入。

  • packages/client/ui-token-monitor/src/client/BalanceWidget.tsx:新增本地 OFFICIAL_PROVIDER_IDS 与 isOfficialRoute(),hasConfiguredBillingRule 在已保存规则缺账号条目时按官方条目回退(与 Host billUsage 的回退口径一致),并把原先手写 'deepseek-official' 的三处判定(保存后应用快照、扣减本地余额、峰谷标签门禁)统一走 isOfficialRoute()。这一条修掉的就是用户在桌面端反馈的「鲸鱼娘扣血动画与受击效果不能正常播放」:账号路由的扣费事件此前在客户端被整体丢弃。

  • packages/client/ui-token-monitor/src/client/hostCompatApi.ts:新增 SHOW_HOST_COMPAT_HINT 开关。按 2026-09-29 的决定先不展示「已停止写入会话日志」提示——会话金额已由本地账本统计,界面再报这句话会让使用者误以为功能不可用;宿主补上 ignorable 转发后把开关改回 true 即恢复,判定逻辑与状态数据都不动。hostCompatHint 增加可选 show 参数,测试据此继续覆盖文案内容。

  • 供应商同族去重(2026-09-30):账号路由与官方 API key 路由在界面上原本会各占一行(数据概览的供应商下拉、设置面板的供应商下拉、计费规则编辑器里的两条 DeepSeek)。现在 Host 新增 displayProviderId() 把同族统一成 deepseek-official 再列表,默认规则里重复播种的 deepseek-account 模板已删除(账号定价仍由 billUsage 的官方族回退负责),客户端新增共享模块 providerFamily.ts 统一判定。

  • 浮窗最大化不再被桌面窗口按钮遮挡(2026-09-30):最大化矩形此前只做四边等距内缩,浮窗自己的「还原 / 关闭」按钮会落在桌面外壳标题条下面而点不到;现在 useFloatingWindow 与右键菜单都改用外壳发布的 --dsh-frame-top-clearance 避让。

依赖声明

  • 根 package.json:ipaddr.js 2.2.0 由 devDependencies 移入 dependencies(runtime/host/billing.mjs 顶部静态 import 它),pnpm-lock.yaml 同步。

兼容性

  • 已保存的旧快照无需迁移:账号路由按官方条目回退计价与判定;非官方 provider 的行为不变。
  • 客户端产物 lib/client.js 与宿主入口 lib/index.js 均按新源码重建。

范围

  • plugins/dsh-token-monitor/src/{pricing,billing,balance-provider,balance-config,details,detail-query,usage-summary}.ts
  • packages/client/ui-token-monitor/src/client/{hostCompatApi,BalanceWidget}.tsx
  • 测试:plugins/dsh-token-monitor/tests/{billing-custom,billing-tools-composition}.spec.ts、packages/client/ui-token-monitor/tests/{host-compat,settings-panel,whale-charge-reaction}.client.spec*(whale-charge-reaction 为本版新增回归)
  • lib/index.js、lib/client.js(重建)、package.json(4.2.0)、pnpm-lock.yaml、plugins/dsh-token-monitor/src/update.ts(CURRENT_RELEASE_VERSION)、README.md、docs/releases/v4.2.0.md

验证

  • tsdown、scripts/prepare-package-runtime.mjs、scripts/check-standard-bundle.mjs 全部无失败项;tsc --noEmit -p tsconfig.bundle.json 退出 0。
  • node --test tests/*.test.ts 38/38;vitest run 85 文件 / 615 用例全过。
  • 解包 tgz 在隔离夹具里跑完整生命周期:全新安装启动、五个模块就位、用量/概览/账单/设置路由 200、素材路由返回 PNG、设置写入与重启保持、五个模块逐个卸载后各自的物理文件消失、其余模块文件完好、重启后全部 tombstone,整插件移除后 core 产物消失并在 core 已缺失时完成清理。
  • 新增回归 whale-charge-reaction.client.spec.tsx:在「已保存规则只有官方条目」的前提下投递一条 deepseek-account 扣费事件,断言鲸鱼娘姿态离开 idle;去掉本版修复后该用例失败(姿态全程 idle),即本次问题的可复现证据。
  • 桌面端真实计费任务核验(2026-09-29/30,用户发起、后台按账本核验):同一会话新增 18 条 deepseek-account 记录,全部 priced,合计 ¥0.21621468;金额重算(含分项求和)、峰谷模式与冻结时段一致性、采用费率与冻结规则一致性、账本前缀未改写、无重复键全部通过;读数侧用插件自身 summarizeUsage 按 deepseek-official 与 deepseek-account 两种过滤得到完全相同的条数与金额。明细见 work/billing-verify-20260929/REPORT.md。
  • 包内隐私检查:解包目录扫描 E 盘工作路径与 C 盘用户路径命中 0,常见密钥前缀(sk- / npm_ / ghp_ / Bearer)命中 0。
  • 未执行(需另行授权与连通性):推送、打 tag、GitHub Release、npm publish。本轮同时记录两项外部阻塞:本机 GitHub 连接被重置/超时,npm 凭据过期(npm whoami 返回 E401)。

未验证

  • 客户端修复的肉眼效果(「-¥」飘字与鲸鱼娘受击/扣血动画)需要用户在桌面端确认;自动化只覆盖到「姿态离开 idle」这一层,未覆盖 Canvas 逐帧渲染。

v4.1.3

Choose a tag to compare

@wssfk12138 wssfk12138 released this 28 Sep 11:26

v4.1.3 会话用量记录不再写坏历史对话

本次发布修掉一个由本插件写入的会话事件引起的兼容性问题:在会丢掉 ignorable 标记的宿主构建上,插件写下的用量记录没有标记,而宿主读取端对「不在已知类型表内的未知事件」只在带标记时才允许跳过,于是整份会话日志被拒绝解释,历史对话打不开(对应 issue #24)。修复包含三部分:确认宿主 append 是否真的转发该标记(读它的入口实现,而不是看版本号)、写入后回读确认并在标记丢失时永久停写、设置页给出提示。

问题

宿主的已知类型表(packages/core/session/src/known-event-types.ts)由仓库内 SessionEventMap 生成,仓库外插件的事件按定义不在表内;读取端(packages/session/session-persistence/src/storage-contract.ts)只在事件带持久化 ignorable: true 时才允许跳过。上游架构说明 2026-08-30-retain-ignorable-external-session-events 明确该标记是唯一的兼容机制,并且继续拒绝没有标记的未知事件。

插件写入的两处都传了 { ignorable: true },但这个标记能否落盘取决于宿主的 Session.append:已发布的 @deepseek-ai/dsh-session@0.1.7-alpha.2 与 0.1.7-rc.2(npm 上 latest/next 均为后者)都只转发 sourceEventSeqs 与 surfaceOp,会丢掉它——issue #24 的两位报告者分别给出了打包产物里 append 与 .d.ts 的证据,本仓库也复核了发布包。因此在这些宿主上运行过插件的用户,其会话日志里会留下没有标记的 token-usage/record;之后任何宿主(包括升级后的同一个宿主)读这些会话都会被整体拒绝,金额与用量一起消失。日志本身没有损坏,但当前宿主不会放松该判定,而且版本号区分不出宿主是否转发该标记,所以不能用版本线放行。

修复

  • 新增 plugins/dsh-token-monitor/src/session-records.ts:写入前解析宿主 @deepseek-ai/dsh-session 的入口文件,确认 append 的元数据构造里存在 ignorable 转发才写入;入口无法解析或读取失败时一律停写。每次写入后仍回读宿主实际返回的 event,一旦发现标记丢失就永久停写并上报原因。
  • 两个采集器改为只经该出口写入(collector.ts / collector-core.ts 的 appendUsageRecord 选项);没有写入器时不再自行追加,避免任何调用方绕过前置检查。
  • 停写后会话金额退回既有兜底路径(插件自有账本 usage.jsonl 与 GET /api/token-monitor/session-costs);这些宿主上不再出现对话流内的单次用量行。
  • 新增只读路由 GET /api/token-monitor/host-compat:返回写入能力、检测到的宿主版本与入口路径、以及原因;设置页在界面顶部以提示条展示原因与恢复方式。
  • 环境变量 DSH_TOKEN_MONITOR_FORCE_SESSION_RECORDS=1 可显式放开写入(宿主实现无法读取、但已人工确认可用的场景)。

兼容性

  • 实现里确认转发该标记的宿主(例如本仓库检出的 harness 源码、以及将来发布该转发的宿主版本)行为不变:继续写入会话用量记录,对话流内的单次用量行照常出现。
  • 目前已发布的所有宿主版本都不转发该标记,因此这些环境不再写入会话用量记录,避免继续产生打不开的会话;金额仍由账本与兜底路由提供,设置页会明确说明原因。
  • 本次改动同时涉及客户端(设置页提示与新路由客户端),lib/client.js 已按新源码重建。

范围

  • plugins/dsh-token-monitor/src/session-records.ts(新增)、host-compat-route.ts(新增)、collector.ts、collector-core.ts、runtime-core.ts
  • packages/client/ui-token-monitor/src/client/hostCompatApi.ts(新增)、TokenMonitorSettingsPanel.tsx、BalanceWidget.tsx
  • 测试:tests/session-records.spec.ts、tests/collector-appender.ts(新增)、tests/collector.spec.ts、tests/pricing-v41.spec.ts、tests/fixtures/billing-cold-restart.ts、packages/client/ui-token-monitor/tests/host-compat.client.spec.ts(新增)、tests/settings-panel.client.spec.tsx、根 tests/collector.test.ts
  • lib/client.js(重建)、package.json(4.1.3)、README.md、docs/releases/v4.1.3.md

验证

  • tsdown、scripts/prepare-package-runtime.mjs 与 scripts/check-standard-bundle.mjs 无失败项;tsc --noEmit -p tsconfig.bundle.json 退出 0。
  • node --test tests/*.test.ts 38/38;vitest run 84 文件 / 610 用例全过(含新增的 session-records.spec.ts 与 host-compat.client.spec.ts)。
  • 打包后的 tgz 在隔离夹具里跑完整生命周期:全新安装启动、五个模块就位、用量与账单路由 200、素材路由返回 PNG、设置写入与重启保持、单模块卸载后物理文件消失、整插件移除后 core 产物消失并在 core 已缺失时完成清理。
  • 新增用例覆盖:宿主实现探测(转发形态识别、发布包形态判定为不支持、读不到时保持未知)、不支持或未知时不写入、写入后标记丢失即永久停写(后续不再调用 append)、写入抛错不停写、显式覆盖与环境变量放开;客户端侧覆盖响应解析、非 2xx、提示文案与设置页渲染。

已经写坏的会话

无标记的记录无法被当前宿主读取,插件也无法改写宿主存储。受影响会话需要在日志里给那几条 token-usage/record 补上 ignorable: true 才能恢复(见 issue #24 的说明),或先把它们移出 sessions 目录;本版本只保证不再产生新的这类会话。补充:patches/README.md 第 1 条宿主补丁只覆盖 @deepseek-ai/dsh-session@0.1.7-alpha.2;0.1.7-rc.2 需要按同样思路单独调整宿主安装树,而且会随宿主升级失效。

v4.1.2

Choose a tag to compare

@wssfk12138 wssfk12138 released this 27 Sep 16:23

v4.1.2 修掉源地址安装缺 runtime/ 的问题,安装引导收敛到 npm 包

本次发布只修正一条「装得上、但必然加载失败」的安装路径缺陷,不涉及计费、投影、客户端界面与 runtime 载荷内容,其余功能与 4.1.1 一致。

问题

runtime/ 是随包发布的预编译产物,由 prepack 阶段的 scripts/prepare-package-runtime.mjs 生成,按设计不入库(.gitignore 的 /runtime/)。README 的安装章节此前给的是:

dsh plugin --profile web add github:wssfk12138/dsh-damage-pulse

从 git 源安装时,pnpm 不会执行这个打包脚本,而且不会报错:命令 exit 0,装出来的包里就是没有 runtime/。插件启动时无条件读 runtime/manifest.json,于是只剩一条无法自我定位的报错:

failed to apply loader entry dsh-token-monitor (dsh-damage-pulse) Error: ENOENT ... \runtime\manifest.json

装了「启动失败隔离」类插件的宿主还会顺手把这一行写进 profile 的 cordis.patch.yml 并置 disabled: true,故障从「插件报错」变成「插件静默消失」,界面上只表现为插件不存在。

复现与对照

在空目录用 pnpm 12.4.1 / Node v24.18.1 / Windows 执行等价的 git 源安装:exit 0、全程没有任何构建脚本日志,安装目录只有 assets/ docs/ lib/ node_modules/ patches/ cordis.patch.yml LICENSE package.json README.md tsconfig.bundle.json;与 4.1.1 的 npm 包逐文件比对,差异只有 runtime/(97 个文件)与 CRLF 换行。反向对照:npm 包与 GitHub Release 资产里的 runtime/ 完整可用。

修复

  • README.md:安装章节主推 npm 发布包 dsh plugin --profile web add dsh-damage-pulse,说明源地址装法为什么拿不到 payload,并补上被隔离插件写 disabled: true 之后的排查方式。
  • plugins/dsh-token-monitor/src/module-bootstrap.ts:新增 payload 前置检查,在创建任何 profile 状态目录之前确认 runtime/manifest.json 存在;缺失时抛出点名修复方式的错误,而不是让 loader 抛裸 ENOENT。
  • pnpm-workspace.yaml:allowBuilds 的占位字符串 esbuild: set this to true or false 改为 esbuild: true。占位值不是合法取值,会让本仓库自身的安装拿不到 esbuild 构建放行。

以上三处来自社区 PR #23(@KevinLIN719),已合并且保留原作者署名。PR 里同时新增的 package.json prepare 脚本未采纳:它会让 git 安装树为了构建先装 87 个 devDependencies(build-modules.mjs 依赖 tsdown),而 pnpm 10.26+ 对 git 依赖的构建仍需用户按 <包名>@<git地址>#<commit> 放行一次,且这一改动没有真实 github: 安装产出 payload 的实测证据,代价与收益不成比例。

兼容性

  • 宿主兼容范围不变:0.1.0-rc.5 起的全部旧版、DSH Desktop 2.0.4、0.1.5 / 0.1.6 线,以及最新的 0.1.7-rc.2。
  • npm 包与 Release 通道的安装、升级、模块通道行为完全不变;lib/client.js 与 runtime 载荷未改动。
  • 行为差异只出现在「payload 缺失」这一种原本必然失败的场景:报错从裸 ENOENT 变为可自查的提示。

范围

  • README.md、plugins/dsh-token-monitor/src/module-bootstrap.ts、plugins/dsh-token-monitor/tests/module-bootstrap.spec.ts、pnpm-workspace.yaml、package.json(版本 4.1.2,移除 prepare)、plugins/dsh-token-monitor/src/update.ts(CURRENT_RELEASE_VERSION)、lib/index.js(按新源码重建)。

验证

  • tsdown 重建的 lib/index.js 与 PR 提交的产物逐字节一致(git hash-object 同为 8b789ea782622328c7d8b7c72a26eb138e6b8ec5)。
  • tsc --noEmit -p tsconfig.bundle.json 退出 0;node --test tests/*.test.ts 38/38;vitest run 82 文件 / 591 用例全过。
  • scripts/prepare-package-runtime.mjs 与 scripts/check-standard-bundle.mjs 无失败项;模块包按 4.1.2 生成(core 33 / pet 59 / overview 1 / notify 1 / billing 1 / wechat 1)。
  • 打包后的 tgz 在隔离夹具里跑完整个生命周期:全新安装启动、五个模块就位、用量与账单路由 200、素材路由返回 PNG、设置写入与重启保持、单模块卸载后物理文件消失、整插件移除后 core 产物消失并在 core 已缺失时完成清理。