dsh-task-notice
消息通讯 活跃维护

dsh-task-notice

Haoxiang-Fant/dsh-task-notice

安装插件并进入设置完成授权,即可为DeepSeek Harness添加任务完成系统通知能力,同时展示各模型使用情况,操作简单无额外配置,方便实时查看任务进度与模型用量。

1
Stars 标星
0
Forks 分支
1
Watchers 关注
0
Open Issues
JavaScript
主要语言
MIT
开源协议
405 KB
仓库大小
13 天前
最后推送
一键安装扩展 / 插件指令
dsh plugin --profile web add github:Haoxiang-Fant/dsh-task-notice
git clone https://github.com/Haoxiang-Fant/dsh-task-notice.git
git clone git@github.com:Haoxiang-Fant/dsh-task-notice.git
README.md main

dsh-task-notice

DeepSeek Harness 插件:代理任务完工通知 + 按 Provider(Key)的 Token 消耗统计 + 价格编辑 + 使用分析

  • 完工通知:代理每完成一轮任务(或目标 goal 完成)时,在 Web 界面弹出通知,并经浏览器 Web Notifications API 发送 Windows 系统通知(桌面右下角横幅 + 操作中心;需页面授权,点击通知回到本页),展示本次任务消耗的 tokens(缓存输入 / 缓外输入 / 输出 / 合计)与金额。
  • 操作提醒:对话需要你处理时同样提醒——代理发起权限请求(批准/拒绝)或提问(等待你回答)时,页内弹窗 + 系统通知(遵循系统通知开关与发送时机设置)。实现上订阅官方 UI 的待处理交互存储(uiSession.pendingInteractions)做纯观察,不参与 approval/requestuser-questions/request 的应答链,绝不干扰审批/提问对话框。
  • 数据进制规则(0.3.2):所有数字展示(统计 / 分析 / 弹窗 / 价格)统一按「K M B T」进制——0-99,999 无单位;≥100,000 用 4 位数字 + 单位(千/百万/十亿/千亿),超出部分四舍五入,优先小单位(如 120,050 → 120.1K、980,920 → 980.9K、9999K 下一个是 10.00M);鼠标悬停在含单位的数据上会浮现精确值。此规则只作用于显示,后台程序仍用精确数据计算。
  • Key 身份 = Provider ID(0.3.2):统计 / 分析 / Token Plan 里的「Key」指全局模型设置中的 Provider 路由(如 scnet / ten / deepseek-official),显示名用该 Provider 的 displayName(如 超算互联网 / DeepSeek),环境变量名(apiKeyEnv,如 SCNET_API_KEY / DEEPSEEK_API_KEY)只作辅助展示;旧账目 / 旧套餐的 key 标签自动迁移兼容。
  • 消耗统计:每次模型调用结束后记录其 usage,并按调用实际使用的 Provider 归集。插件设置页支持 1 年 / 6 个月 / 3 个月 / 1 个月 / 15 天 / 1 周 / 24 小时 / 自定义 时间范围,查看所有 Provider(Key)的 tokens 消耗量(分「缓存输入 / 缓外输入 / 输出」),附带调用次数、按 Provider 的按模型明细与跨 Provider 的按模型消耗总览
  • 使用分析(顶部导航切换):在 设置 → 任务通知与消耗 页顶部通过导航栏切换到「使用分析」页,分析规定时间范围内各大模型的使用资金状况:① 消耗金额展示——模型消耗金额占比饼图(鼠标悬停饼图块查看该模型具体使用情况:调用次数、各类 tokens、金额与占比)+ 饼图下方各 Provider 消耗额度表;② Token Plan 回本提示——每个设置为 Token Plan 的 Provider 一张子卡片(显示名、名下每个模型的消耗金额、是否回本、每 Credit 对应 tokens、重置当前周期按钮;0.3.3 起重置需输入 4 位数字验证码 + 两次点击不同位置的确认按钮才执行,重置后可「撤回重置」——同样验证码 + 两次确认,撤回恢复周期边界并把重置期间产生的消耗并入当前周期);0.3.4 起每个计费周期有唯一 TID(插件内部身份,不向用户显示),回本只统计当前生效 TID,旧 TID 数据冻结并经卡片「历史」按钮展开查阅;模型调用返回 402/429(Token Plan 错误码) 时该 Provider 标记待确认并弹「需要重置 Token Plan 吗?」,未回应则下次正常调用弹「是否已续费?」,期间消耗计入临时账本(卡片待确认横幅:已续费 / 没续费,回应后并入原周期合并显示);③ 性价比计算——1 元(CNY)能兑换多少 tokens(消耗 Token 总数 ÷ 消耗金额),相同品牌的大模型放在一起比较,Token Plan 的 Provider 只用当前生效计费周期(当前 TID)的 tokens 与订阅费加权摊薄,周期尚无数据时用当前消耗 ÷ 金额并标注「正在统计」;④ 每日费用消耗表——微型日历中代表一天的正方形的填充颜色深度区分每天用量的多少,日历下方列出每个日期的各模型消耗金额(Token Plan 的模型按加权平均计算,加权平均严格限定同一 TID:订阅费 ÷ 该 TID 周期总 tokens × 当天 tokens,同一天同一 Provider 出现在不同 TID 时相加合并为同一 Provider 显示),每个日期的数据默认堆叠,表格一次显示最近 6 天,其余用鼠标滚轮滚动查看;每日记录每个模型行前有颜色图例(0.3.3,与堆叠色条一致),429/402 待确认的临时账本行标「待确认」(0.3.4)。
  • 今日消耗(0.3.3,顶部导航第一位):在 设置 → 任务通知与消耗 页顶部导航栏第一个标签「今日消耗」,展示今天的模型消耗金额占比饼图今日各模型 tokens 消耗量(缓存输入/缓外输入/输出/合计)与今天的消费情况(总 tokens / 调用次数 / 金额);数据按今日 00:00(本地)至现在的账本计算,金额按当前价格与峰谷档现算。饼图只有一个模型时显示完整 100% 圆环;下方附今日消耗明细——每次模型调用产生消耗的单条记录(时间 / 模型 / Provider / 各类 tokens / 金额,时间倒序)。
  • 顶部导航(0.3.3 顺序):在 设置 → 任务通知与消耗 页顶部通过导航栏按「今日消耗 → 消耗统计 → 使用分析 → 价格编辑 → 设置」切换视图;导航栏 sticky 常驻页面顶部,往下翻阅时右侧出现「回到顶部」箭头按钮,点击平滑回到页面顶部;「设置」页含插件配置(全部开关、弹窗时长、保留天数等)、Token Plan Key 管理(0.3.2,取代原「价格编辑-Token订阅」)、Provider ID 管理(0.3.2)与清除记录数据(安全流程:滑条拖到底 → 输入随机 8 位验证码 → 连续两次确认,才清空全部消耗统计账本;价格/套餐/峰谷/Provider 目录配置保留)。
  • 价格编辑(顶部导航切换):在 设置 → 任务通知与消耗 页顶部点击「价格编辑」导航切换。模型价格跨 Provider 合并——不同 Provider 使用同一模型的调用都按该模型的价格计费,同一模型只有一行价格;未激活自定义的模型默认按内置官方价格目录计费(DeepSeek / OpenAI / Anthropic / Gemini / Kimi / Qwen / GLM / MiniMax / Seed / ERNIE / 混元 等 80+ 模型,双币种,含 DeepSeek 峰谷档;默认价以《主流大模型API官方价格汇总.xlsx》2026-09 为基准),点击「激活自定义」解锁该模型的价格编辑(基础价 + 峰时/谷时子档),「添加模型」可手动加入未出现过的模型。首次启动 / 无数据时,Provider 目录里已配置的模型也会列出,可提前定价。点「保存价格」后立即生效:汇总卡片、按 Provider 表、按模型表与完工通知金额马上按新价格重算。旧账目按低谷价:0.1/0.2 版本记录的旧消耗没有峰谷语义,默认按低谷价计算金额,不会被按峰时价回溯计费。
  • Token Plan Key 管理(0.3.2,设置页):管理所有 Key(Provider 目录 ∪ 消耗记录 ∪ 已有计划键)的 Token Plan 设置——勾选订阅、订阅费、套餐包含 Credit、套餐起效时间有效期(默认按 31 天计算,也可选择每月 1 号(UTC+0)自动重置),并按统计金额与订阅费对比判断有没有回本(进度条 + 已回本/未回本)与「换算 1 Credit = ? Tokens」;每个 Key 都可删除原有的 Token plan 属性(删除后不再按订阅计费,消耗记录与金额保留)。周期到期自动归档为「上一轮」,使用分析页可手动重置当前周期(重置后之前的消耗不再计入现在的回本计算,不影响消耗总额统计)。
  • Provider ID 管理(0.3.2,设置页):插件自维护 Provider 目录(Provider ID + 显示名 + 环境变量名 + 所含模型),支持重置(重新抓取全局模型设置 + 账本观测并持久化)手动删除失效 Provider ID(移出目录 + 删除其 Token Plan,重扫不再复活);首次启动 / 无数据时也会自动抓取已配置 Provider 的 ID / 显示名 / 所含模型。
  • 峰谷计价:实行峰谷计价的模型(如 DeepSeek)按每次调用的时刻取「峰时 / 谷时」价,窗口与工作日规则可配置(默认即 DeepSeek 官方规则)。

安装

推荐:打包成 tarball 安装(Windows 下 dsh plugin add <路径> 会被 pnpm 变成 link: 依赖,而 junction 的真实路径会破坏 Node 的模块解析——tarball 安装可避免):

# 1. 在插件源码目录执行,产出 tarball(文件名形如 dsh-task-notice-<版本>.tgz)
pnpm pack

# 2. 安装:把 <tarball 路径> 替换为上一步产出的文件的实际路径
#    (路径含空格时请加引号;要装到非默认 profile 时加 --profile <profile 名>)
dsh plugin add <tarball 路径>

dsh plugin add 会先 pnpm add 安装依赖,再把声明了 dsh.bundle.patch 的包加入 dsh.profile.bundles 层栈。完成后重启 DSH(如 dsh web)生效——即使该 profile 的 patchReload 为 live,依赖变更也需要重启。

直接用 dsh plugin add <目录> 也可以安装,但要用完整功能请用上面的 tarball 方式。

卸载:

dsh plugin remove dsh-task-notice
# 装到了非默认 profile 时,加上对应参数,例如:
# dsh plugin --profile <profile 名> remove dsh-task-notice

使用

完工通知

  • 每个顶层会话(非 subagent)完成一轮任务时,浏览器端收到通知帧后在 Web 界面右上角弹出 toast,并按配置经 Web Notifications API 发送 Windows 系统通知(桌面右下角横幅 + 操作中心);内容为本轮消耗(缓存输入 / 缓外输入 / 输出 / 合计)与金额。
  • 目标(goal)完成时同样触发系统通知与网页弹窗,显示该目标自创建以来的总消耗。
  • 代理发起权限请求提问(等待你回答)时,也会触发同样的页内弹窗 + 系统通知提醒你处理(通过观察官方 UI 的待处理交互存储实现,不影响对话框本身)。
  • 系统通知由浏览器 Web Notifications API发出:需先在插件设置页点击「授权并开启」(浏览器要求用户手势授权;GUI 需运行在 HTTPS 或 localhost 安全上下文)。开启后,Edge/Chrome 会调用 Windows Notification Platform API,把通知交给 Windows 操作中心统一管理与显示——桌面右下角弹出横幅、存入操作中心;点击通知浏览器自动聚焦回本页面
  • 发送时机可选:默认「仅页面后台时发送」(正在看本页时只显示页内弹窗,切走/最小化后才发系统通知);也可取消该选项,让每次完成都发系统通知。
  • 网页弹窗自动消失(默认 15 秒,可配),也可手动关闭;页面隐藏期间弹窗挂起,回到页面后继续计时。

消耗统计

打开 设置(Settings)→ 任务通知与消耗,即可:

  1. 选择时间范围:24小时 / 1周 / 15天 / 1个月 / 3个月 / 6个月 / 1年 / 自定义(自定义支持起止日期时间)。
  2. 查看汇总卡片(总消耗、调用次数、缓存输入、缓外输入、输出、金额)。
  3. 查看按 Provider(Key)的表:每个 Provider 一行(显示名 + Provider ID,环境变量名作辅助),列出调用次数、缓存输入、缓外输入、输出、金额与合计;展开可看按模型明细。
  4. 查看按模型消耗总览:跨全部 Provider 按模型名聚合每个模型的调用次数与各类 tokens 消耗与金额——同一模型名无论出现在哪个 Provider / 提供商下都合并为一行(与价格编辑页「同一模型只有一行价格」、使用分析饼图口径一致);不同版本(不同模型名)各占一行,价格互不影响。

口径:缓存输入 = cacheReadTokens(命中缓存);缓外输入 = inputTokens(未命中缓存);输出 = outputTokens。消耗按每次模型调用的 provider 上报 usage 记账,并按该调用实际使用的 Provider(全局模型设置路由)归集(Key 身份 = Provider ID,0.3.2;环境变量名如 DEEPSEEK_API_KEY 只作辅助展示)。

使用分析

设置 → 任务通知与消耗 页顶部点击「使用分析」导航切换到使用分析视图,分析规定时间范围内各大模型的使用资金状况(时间范围:24小时 / 1周 / 15天 / 1个月 / 3个月 / 6个月 / 1年 / 自定义,与分析页共用一套查询):

  1. 消耗金额展示:饼状图展示每个模型的消耗金额占比——鼠标悬停在某个饼图块上浮现该模型的具体使用情况(调用次数、缓存输入 / 缓外输入 / 输出 / 缓存写入 / 推理、金额与占比);饼状图下方用表格显示每一个 Provider(Key)的消耗额度(调用次数、tokens、金额)。
  2. Token Plan 回本提示:每个被设置为 Token Plan 的 Provider(Key)显示为一张独立的子卡片,卡片显示 Provider 显示名、名下每个模型的消耗金额(按当前计费周期)、是否回本(当前周期消耗金额 ≥ 订阅费)、每个 Credits 对应的 Tokens(当前周期 tokens ÷ 套餐 Credit)以及重置按钮。点「重置当前周期」把当前周期的消耗归档为上一轮、从现在开始新的周期——之前的消耗不再计入现在的回本计算,不影响消耗总额统计。0.3.4 起每个计费周期有唯一 TID(插件内部身份,不向用户显示),卡片只统计当前生效 TID,「历史」按钮可展开查阅全部已冻结周期(起止时间 / 订阅费 / tokens / 金额);检测到 402/429(Token Plan 错误码) 时卡片显示待确认横幅临时账本(之后产生的消耗,回应前不参与回本),可点「已续费 / 没续费」回应——续费则重置周期(临时账本并入原周期冻结),未续费则仅清除待确认。
  3. 性价比计算排名:将所有模型的 (Provider · 模型) 全部拿出来一起排名比较(排名名 = Provider 显示名 · 模型名称),按 1 元(CNY)能兑换多少 tokens(消耗 Token 总数 ÷ 消耗金额)从高到低排序,并附品牌列。Token Plan 额度分配使用基于 Tokens 消耗的对订阅费用的加权平均:每个模型的金额 = 订阅费 × 该模型 tokens ÷ 周期总 tokens(订阅费按各模型消耗的 tokens 占比摊薄);0.3.4 起只统计当前生效计费周期(当前 TID),不再优先用上一轮周期,周期尚无数据时标注「正在统计」并回退到展示范围的消耗按同一加权规则分配,保证所有模型都参与比较。
  4. 每日费用消耗表:微型日历中代表一天的正方形的填充颜色深度区分每天用量的多少(颜色越深消耗越多,悬停查看当日金额与 tokens);日历下方显示每一个日期的各模型消耗金额(Token Plan 的模型按加权平均计算,且加权平均严格限定同一 TID:订阅费 ÷ 该 TID 周期总 tokens × 当天 tokens,并标注「加权」;同一天同一 Provider 出现在不同 TID 时,当天各 TID 数据相加合并为同一 Provider 显示),每个日期的数据默认堆叠(日期头 + 该日各模型行 + 堆叠色条);429/402 待确认的消耗按模型价原值展示并标「待确认」;表格部分一次只显示最近 6 天的记录,其余记录用鼠标滚轮滚动查看。

周期口径:Token Plan 的回本 / 性价比 / 每日加权摊薄按计费周期(当前 TID)计算,不受当前选中的展示时间范围影响;饼图与 Provider 额度表按展示范围统计。TID 为插件内部周期身份,不向用户显示。

价格编辑

设置 → 任务通知与消耗 页顶部点击「价格编辑」导航切换到价格编辑视图:

  1. 选择币种(¥ / $)。
  2. 设置全局默认价格(每 1M tokens:缓存输入 / 缓外输入 / 输出 / 缓存写入 / 推理)——作为未收录官方价且未自定义的模型的兜底单价。
  3. 模型价格(跨 Provider 合并):页面列出全部 Provider 消耗记录中出现过的所有模型(0.3.2:首次启动 / 无数据时也列出 Provider 目录所含模型,可提前定价),同一模型只保留一行(标注使用该模型的提供商)。每行默认显示官方价(内置目录命中时)或「未收录官方价,按全局默认价计费」;点「激活自定义」解锁该模型的价格输入(基础价 + 峰时/谷时子档,激活时若尚未填写会用官方价预填),点「使用官方价」恢复为官方价计费。
  4. 添加模型:在输入框输入模型名称后点「添加模型」,可手动加入未出现在消耗记录中的模型行(同样可激活后自定义价格)。
  5. Token Plan 设置已移至 设置 → Token Plan Key 管理(0.3.2):本页只编辑模型价格;保存时套餐保持现状、不会被清空。
  6. 峰谷计价:开关、峰时段(UTC 小时)与「仅工作日」配置;默认即 DeepSeek 官方规则(北京时间周一至周五 9:00-12:00、14:00-18:00 为峰时,2026-08-16 16:00 UTC 前按基础价)。
  7. 点「保存价格」后立即生效:汇总卡片、按 Provider 表、按模型表与完工通知标题里的金额马上按新价格重算(服务端按每次调用的时刻逐条取峰谷档)。

金额口径 = 各类 tokens × 对应单价 ÷ 1M,价格按「每 1M tokens」计;改价只影响展示与通知标题,不改动原始 usage 账本。

旧账目(0.1/0.2)默认按低谷价:旧版本记录的账目没有峰谷语义,插件对无版本标记的旧条目统一取低谷价(模型未配置峰谷档时即基础价),避免旧数据被按峰时价回溯计费;0.3 起记录的消耗(账目带 ver)按每次调用的时刻取峰/谷档。

内置官方价格目录与峰谷计价

  • 默认价以《主流大模型API官方价格汇总.xlsx》(2026-09)为基准:目录中表格已收录的模型一律按表格取值——「输入价格」→ 缓存未命中输入(cacheOut)、「缓存命中价格」→ 缓存命中输入(cacheIn;表格未给出的海外模型按官方缓存折扣惯例补齐:OpenAI GPT-4.1 系列 25% / GPT-5.x 系列 10%、Anthropic 0.1×、Gemini 25%)、「输出价格」→ 输出(output);区间价(如 ¥8~10)取基础起步价;表格未收录的既有官方价条目(GPT-4o / o3 / Claude 4.x / Gemini 2.5 / kimi-k2 / qwen3-max / GLM-5.3 等)保留作为补充。
  • 官方价默认生效:未激活自定义的模型自动按内置目录的官方价计费(按当前币种),无需手动填写;目录命中时页面显示官方价明细与来源。
  • 币种与折算:表格「国内」厂商(DeepSeek / 阿里云 / 字节跳动 / 智谱 / 月之暗面 / 百度 / 腾讯 / MiniMax / 小米 / 零一万物 / 阶跃星辰 / 百川智能 / 科大讯飞)以人民币官方价入库;「海外」厂商(OpenAI / Anthropic / Google)以美元官方价入库;缺失一侧按固定汇率 1 USD = 7.2 CNY 折算。
  • 峰谷计价(DeepSeek 等):目录中 DeepSeek 模型自带峰/谷两档官方价(工作日 9:00-12:00 / 14:00-18:00 价格翻倍,峰 = 2× 谷);统计与通知金额按每次调用的时刻逐条取档计费。
  • 价格目录数据截至 2026-09,厂商可能调价;修改任意价格不会影响其他模型,历史金额随新价格即时重算。

插件配置

打开 设置 → 任务通知与消耗 页,在顶部导航切到「设置」视图即可调整:

字段 说明 默认
插件总开关 关闭后停止通知与记账
每轮任务弹窗 每完成一轮任务即弹窗
目标完成弹窗 目标(goal)完成时弹窗
权限请求提醒 代理请求权限时通知你处理
提问提醒 代理提问需要你回答时通知
弹窗时长(秒) 弹窗自动消失秒数(3–120,滑块) 15
浏览器系统通知 经 Web Notifications API 发送系统通知(需页面授权;Edge 横幅 + 操作中心)
仅后台时发送 页面在前台时只显示页内弹窗,切到后台/最小化后才发系统通知
账本保留天数 消耗账本保留天数(1–3650,滑块) 365

清除记录数据(0.3.1):设置页底部可清除全部 Token 消耗统计账本。为防误操作,必须依次完成:① 拖动图形验证码滑块(按住滑块拖到最右端,松手后变绿锁定);② 输入随后出现的随机 8 位英文数字验证码(区分大小写,可点「换一个」);③ 连续点击两次「确认清除」。清除后「消耗统计」「使用分析」与完工通知金额全部归零并自动刷新,价格 / 套餐 / 峰谷配置不受影响。若宿主进程尚未重启(remote 无 clearUsage),面板会提示重启 DSH。

数据存储

  • 账本:$DSH_HOME/storages/task-notice/usage.json(追加式,原子写,按保留天数裁剪;0.3.1 起每条账目带 ver 标记,旧账目按低谷价计费;0.3.1 修复 Key 归因后,启动时会按真实路由配置重算一次历史记录的归属;0.3.2 起 Key 身份 = Provider ID,账本旧 key 标签在读取侧自动迁移)。
  • 配置覆盖:$DSH_HOME/storages/task-notice/config.json(由设置页写入,含价格、Token Plan(0.3.2 起以 Provider ID 为键;0.3.4 起每个周期含内部 TID、冻结历史 cycles、429/402 待确认 pending 与撤回快照 _undo)、峰谷配置与插件自维护的 Provider 目录(0.3.2,providers 段:list + removed 黑名单))。

开发

lib/
  index.js        宿主插件入口(name / apply;零顶层外部 import,依赖解析失败只停用本插件)
  store.js        消耗账本(usage.json,原子写、保留裁剪)
  accounting.js   llm/stream 瀑布捕获(usage 块 → 记账;流抛错时识别 402/429/QUOTA 等 Token Plan 错误码,0.3.4)
  fold.js         会话日志折叠(turn/end、goal/change → 通知帧)
  notify.js       通知枢纽(推送队列 + 流订阅)
  keys.js         provider → 凭证引用(API Key)解析(按真实路由配置:llm-* 命名空间 providers[route].apiKeyEnv)
  providers.js    Provider 目录(0.3.2):从全局模型设置抓取 Provider ID / 显示名 / 环境变量名 / 所含模型;Key 身份归一、旧 env 键 → Provider 迁移
  service.js      taskNotice RPC 服务(getHealth/getConfig/updateConfig/getUsageStats/getUsageAnalysis/resetPlanCycle/undoPlanCycle/renewPlanCycle/dismissPlanPending/clearUsage/subscribeNotifications/getPriceCatalog/getProviderDirectory/refreshProviderDirectory/deleteProviderId)
  typert.host.js  手动注册的 Typert 清单工厂(zod v4 编解码)
  pricing.js      价格计算(模型跨 Provider 合并 / 官方价默认 / 旧账目低谷价 / 峰谷取档 / 金额折算 / Token Plan 计费周期)
  pricing-catalog.js  内置官方价格目录(80+ 主流模型,双币种,峰谷子档;默认价以《主流大模型API官方价格汇总》2026-09 为基准)
  analysis.js     使用分析计算(模型聚合 / Token Plan 计费周期轮换与重置 / TID 周期身份与冻结历史 / 429/402 临时账本 / 性价比 / 每日同 TID 加权平均摊薄)
  client.js       浏览器端(完工弹窗 + 今日消耗 + 消耗统计 + 使用分析(含 Token Plan 重置保护/撤回 + 429/402 提示弹窗/续费确认 + 历史周期 + 待确认横幅)+ 价格编辑 + 设置:插件配置 / Token Plan Key 管理 / Provider ID 管理 / 清除数据)
cordis.patch.yml  本包的 profile 层补丁(挂载一行)

依赖纪律:宿主入口零顶层外部 import(只 import Node 内建模块与自身模块);运行期可用的服务(session/settings/credentials/typert/loader/llm)一律经 ctx 访问。唯一的外部包 zod(Typert 编解码)只在 lib/typert.host.js 顶层 import,而该文件由 typert-loader 直接加载、不经宿主入口——即使依赖解析失败(如 Windows link: 安装的 junction realpath 陷阱),也只让本插件的 Typert 清单注册失败,DSH 照常启动。

License

MIT