dsh-connect-agnes-token-plan 0.10.0 → 0.10.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -2,6 +2,52 @@
2
2
 
3
3
  本文件只记**公开行为变化**(新增能力、破坏性改动、重要修复)。实现细节、重构与测试加固请直接看 `git log`。
4
4
 
5
+ ## [0.10.2] — 2026-10-10
6
+
7
+ ### 修复:视频状态轮询断点续查、额度渲染与模型花名册的几处真实缺陷 + 凭据隔离加固
8
+
9
+ - **修(视频工具):异步视频轮询被拒时原本不带 `video_id` 且只走「超时 / 超轮次」两路径**,agent 首次查询拿不到 task id 就无法续查,任务卡在「查不到」。`video-client` 现改为携带 `video_id` 并有限重试(`queryRetries=2` → 初查 + 2 次重试 = 3 次调用),与超时 / 超轮次两条路径对齐。新增 `video.test.mjs` 覆盖耗尽路径与 `queryRetries=0` 边界。
10
+ - **修(额度渲染):`usagePct` 有值而 `used` 缺失时,`count(null)` 被渲染成 `0`,面板会打印「已用 0 / N」**(F1)。`UsageTotals` 四个主计数另加 `typeof` 门:缺席字段不再画成「0」——真实数据流下此门不触发(`countOf` 已把缺席平台字段压成数字 0、`overview` 失败时 `quota.totals:null` 见红线⑥ / ADR-007),属渲染层自防御,防未来 partial 对象被构造出来。
11
+ - **修(AgnesCode 花名册):两处目录正确性缺陷**。(F5)排除别名 `id === EXCLUDED_IDS[0]` 改为 `.includes(id)`,第二个别名不再静默失效、继续混进花名册;(F10)`provider-controls` 的 `idList` 用 `String(id)` 强转,`null` 会变成字符串 `"null"` 这个假模型 id 出现在候选列表里,改用 `models.ts` 的 `rosterIds`(只收非空字符串)。
12
+ - **修(凭据隔离):AgnesCode 的 DPAPI PowerShell 子进程不再继承含凭据的父进程 env**,新增 `dpapiChildEnv` 剥除四枚凭据名(`AGNES_PASSWORD` / `AGNES_USERNAME` / `AGNES_TOKEN_PLAN_API_KEY` / `AGNESCODE_CREDENTIAL`),与全仓凭据 REF 集合逐字一致——降低解密第三方桌面端会话文件那一步的凭据泄漏半径(红线①)。`harvest attempts[].detail` 与 `state().error` 出口统一过 `redactSecrets`。
13
+ - **内部加固 / 清理(不属公开行为变化,详见 `git log`)**:收敛三轮四域代码审查的约 22 项缺陷与计数器 / 方法归一化 / 单飞泄漏 / JSDoc 归位等低危项;删除 25 个零读者 style token(`details*` / `grant*` / `models*` / `trend*` / `poolsGrid` / `primaryHover`)与全仓零引用的孤儿 `jsqr` devDependency;统一 `countOf` 与 `Number(x)||0` 两处数值惯用法、`requestMethod` 六路由共用、BFF 门控头收敛为单一 `AGNESCODE_BASE_HEADERS`;CI `build-gate` 确保暂存目录存在再 `mkdtemp`。上述均以新增断言钉住,无破坏性改动。
14
+ - 影响面:`src/{host,client}/`(多文件)、`lib/`、`client.js`(随 src 同 commit 重建,构建零漂移)、`test/`(多套件 + 断言)、`package.json`(版本 + 去孤儿依赖)。`npm test` 全绿:28 套件 + tsc / build / dup / e2e 四门禁通过,e2e 66/66 PASSED。
15
+
16
+ ## [0.10.1] — 2026-10-06
17
+
18
+ ### 修复:AgnesCode 截图里的真实账号昵称已脱敏(该图曾随 0.10.0 发布)
19
+
20
+ - **修(资产泄漏):`assets/panel-AgnesCode.png` 此前把面板上的真实关联账号昵称原样截进了市场页截图**——面板那一行渲染的是登录账号的昵称字段(`i18n` 的 `agnescode.loggedIn` 槽位 `已关联:{nick}`),截图取景时该值未做任何遮挡。昵称指向的是一个真实账号,**这不是示例数据**,因此 0.10.0 的 tarball 里那张图等同于把该账号名随包分发。图已重截,该行改为中性占位文案,账号名不再出现在任何像素里。
21
+ - **这是 0.10.1 头号动机,优先级高于本节其余条目**:0.10.0 已发布且**不可覆盖**(npm 同版本号唯一,`unpublish` 后同号也不可复用),所以修复只能随新版本到达用户——这也是本版应当尽快发布的原因。
22
+ - **处置边界要说清,避免误判风险面**:泄漏面**仅此一个二进制资源**。已核对 0.10.0 tarball 内全部文本类文件(`.md` / `.json` / `.yml`),账号名**无任何文本残留**;其余两张截图不含账号名。本仓红线条目(凭据不入库、错误文本脱敏)针对的是凭据与令牌,昵称属个人信息、不在凭据服务内,故**不触发凭据层面的处置流程**,但仍按泄漏修掉。
23
+ - **`screenshots.json` 与文件名未变**:只换了图片内容,未增删文件,因此市场页的清单与 `files` 白名单不需跟着改(`files` 含 `assets`,重截自动随包发布)。
24
+ - 影响面:`assets/panel-AgnesCode.png`(仅此一个文件,无代码改动)。
25
+
26
+ ### 登录表单服从 Host 下发的节流窗口:刷新页面不再让按钮在锁定期内可点
27
+
28
+ - **修:跨进程 / 跨 profile 的锁定期内在面板上按一次就可能撞锁**。登录节流写在插件自己的 `throttle.json` 里,**机器级共享**(desktop profile 吃到的 429,在 web profile 的 Host 上同样真实),而 Host 一直把「剩余窗口」与「已停车」两个事实下发到快照的 `auth` 块。面板此前**不读它们**:倒计时从组件本地 state 起步,只有本进程那次登录失败才会被填上。刷新页面、换 profile、换 Host 进程这三种再正常不过的操作,都会让提交按钮在一个 Host 仍在服务的窗口里显示为可用——而 `POST /account` 是**刻意**清节流的(理由是「用户是在按面板的指示操作」),那次点击于是不止白费:它抹掉另一个进程正在遵守的记录,并把一次真实尝试打进可能已锁的账号。倒计时现由 `servedWaitMs` 判定、`servedWaitUntil` 换算,表单用前者播种并单调吸收后续窗口(只延后不缩短,避免把读者已在等的窗口提前解锁)。
29
+ - **新增:已停车(`needsUserAction`)时给一句话而不是倒计时**。错密码、需人工验证、自造退避用尽这三类拒绝**没有**可等待的期限——倒计时数到零不会有任何东西重试,所以那个数字是撒谎。面板现在明说「已停止自动重试,请核对账号与密码后手动登录」并保持提交按钮可用(重新输入才是出路),与 `auth.locked`(平台说账号本身被锁)分作两句。
30
+ - **修:验证码类拒绝会同时渲染两句矛盾的话**。`POST /account` 的失败体在「平台给了 `Retry-After`」时会同时带一个整段窗口与 `needsUserAction: true`,于是旧渲染路径上「已停止自动重试」与一个两小时倒计时同时出现。`submit` 现在让 parked 优先于窗口——`AccountForm` 与 `snapshot.ts` 的规则同源,此前只有后者。
31
+ - **`API.md` 补上 `auth` 块两个节流字段的契约**(单位是**剩余**毫秒不是整段窗口;parked 时不许倒计时;面板必须服从它们而非只认自己那次失败),`AUTH.md` §7 与 `ARCHITECTURE.md` §3 数据流图同步接入。字段此前只有两个 JSON 值、没有任何语义说明,按字面读会把「parked 也倒计时」这类 bug 写出来。
32
+ - 影响面:`src/client/{snapshot,account-form,i18n}.ts`、`test/{panel.test.mjs,panel-decision.js}`、`docs/{API,AUTH,ARCHITECTURE,ADR}.md`、`docs/PITFALLS.md`(新增 §52–§54)、`docs/ADR.md`(新增 ADR-010)、`client.js`(重建产物)。`lib/` 未改——本次全部改动在 client 半边。
33
+
34
+ ### 插件卡补上图标:Plugins 页不再裸显示包名 + 一段英文
35
+
36
+ - **新增 `icon.svg`**(`icon: "./icon.svg"`):Plugins 页的插件卡此前只有文字,卡片图标由 DSH Host 读 `package.json` 的 `icon` 字段渲染——不提供就缺一块。沿用面板的「积分币」母题(渐变圆盘 + 白色记数笔画),配色对齐本插件自己的品牌蓝 `--agnes-brand`(#1E40AF),与面板开关 / tab 下边框 / 额度进度条同一套 token,不跟 DSH 的中性色走。几何与兄弟插件 `dsh-connect-sensenova-token-plan` 保持一致,避免同系列插件卡片形态各异。
37
+ - **读取端是硬校验,不是降级**:`icon` 必须是相对路径、扩展名限 SVG/PNG/JPEG/WebP、文件必须落在 `files` 白名单目录内、体积 ≤256 KiB——任一不满足会让整条插件元数据报错(该经验的出处是 `dsh-connect-sensenova-token-plan` CHANGELOG 0.4.4,已写进 `docs/PITFALLS.md` §27)。因此 `icon.svg` 同时进 `files` 白名单,`exports` 无需新增子路径(图标由 Host 直接按仓库路径读,不走包导出)。
38
+ - 影响面:`icon.svg`、`package.json`、`docs/DSH-PLUGIN.md`(教学快照同步 `icon` 字段与 `files` 数组)。
39
+
40
+ ### 评审整改:红线④文档措辞更正 + 新增 ADR-012「大统一」爆炸半径权衡
41
+
42
+ - **修(文档 / 红线④):`AGENTS.md` 红线④称「`AUTH_DEFAULTS.consoleOrigin` 是唯一出处」与代码不符**。代码里后端源站字面量实际有两处——`agnes-auth.ts:47` 的 `AUTH_DEFAULTS.consoleOrigin` 与 `host-config.ts:41` 的 `CONFIG_DEFAULTS.consoleBase`——两者值一致,且由 `host-config.ts:323`(`resolveAuthOverrides` 在 `:384` 以 `consoleOrigin: consoleBase` 汇流)合并为单一 `consoleOrigin`,运行时是一条源、非漂移 bug。红线④现改为「两处字面量一致、配置边界汇流为单一 `consoleOrigin`,别写第三处也别让两处分叉」。
43
+ - **新增(决策账本):`ADR-012` 把「大统一」的结构性爆炸半径列为已知权衡**。ADR-001 把额度面板升级为商汤全过程集成单点入口;实测同进程现承载 LLM provider 注册、出图执行、视频异步状态机,以及解密第三方桌面端 AgnesCode 的 os_crypt/DPAPI 会话文件(攻击面最敏感的一块)。隔离纪律真实(agnescode 与主线 publisher 共用 `publish-core.ts` 机制、不共用状态;`kind:"grant"` 单点构造/判定;throttle 与凭据 grant 刻意共享不统一),但结构性爆炸半径被重新集中——这正是对 PITFALLS §6「私有状态误进凭据服务会炸整台机器」那次教训的现代重演形态。判定:属设计张力非缺陷;主动缓解是 §5 不变量(五源软失败 / 一个模块缺席不埋别的模块)与 ADR-005 准入门槛 + 拆分蓝图把结构债从事后锐评变事前决策点。
44
+ - 影响面:`AGENTS.md`(红线④措辞)、`docs/ADR.md`(新增 ADR-012)、本文件。
45
+
46
+ ### 评审整改(续):ADR-012 债务控制阀落地为可执行术前自查
47
+
48
+ - **把 ADR-012 的「债务控制阀」从账本里的已知权衡变成吸收决策的实际闸门**。原条目只说「后续新能力吸收先对照这条」,现在钉死成 ADR-005「申报容器」步骤里必填的一张**爆炸半径对照表**——四问:① 承重面归类(落在四类既有承重面之一,还是引入第五类共享承重面 → 自动触发拆分蓝图);② 新增共享状态(写盘 / 凭据引用 / 解密密钥访问是否复用既有机制,不得新开 state 窝点又不走蓝图);③ 失败域边界(会不会撞 ADR-004/007「一个模块缺席不许埋掉别的模块」);④ 基线可冻结(行为基线能否写进 store/routes 测试)。四问任一命中「引入新承重面 / 新 state 窝点 / 失败域外溢 / 基线不可冻」,先回 ADR-005 拆分蓝图或降级改造,而非带债落地。
49
+ - 影响面:`docs/ADR.md`(ADR-012 债务控制阀段扩充)、本文件。
50
+
5
51
  ## [0.10.0] — 2026-10-04
6
52
 
7
53
  ### AgnesCode 目录改读 `/v2/models`:模型名带上平台真实的积分倍率与促销标
@@ -63,6 +109,11 @@
63
109
 
64
110
  **AgnesCode 面板从「只读花名册」升级为「可勾选的模型推送给」**:每个模型一行勾选框,决定哪些模型注册进 DSH 模型列表,改动即时生效;配套搜索 + 全部勾选/取消 + 已勾选计数,与 Token Plan 那套同一形状。勾选存在独立的 profile 级状态文件,**空 = 不筛选 = 全推**,所以没勾过的安装行为完全不变。面板信息架构另有一刀(额度 / 累计 / 套餐拆成三个 section)。另修掉一个「删注释时误删三元条件行、构建失败、插件无法加载」的问题。
65
111
 
112
+ ### 评审整改:API.md §1 补上 `/agnescode` 的 `saveModels` 动作与 `enabledModelIds` 字段
113
+
114
+ - **`/agnescode` 契约文档漏记已上线能力**:代码(`routes/agnescode.ts:248`、`lib/index.js`、`client.js`、`agnescode-tab.ts`、`agnescode.test.mjs`)早已实现第三个 POST 动作 `saveModels`(持久化花名册勾选并即时重发过滤后 roster),且 GET 响应含 `enabledModelIds` 推送允许清单,但 `docs/API.md` §1 仍写「POST 动作两种」、GET 形状也未列 `enabledModelIds`。本次把 POST 改为三种动作、GET 形状补 `enabledModelIds`,与 CHANGELOG「AgnesCode:模型勾选」那条及路由代码对齐。
115
+ - 影响面:`docs/API.md`(§1 agnescode 块)、本文件。
116
+
66
117
  ### AgnesCode:模型勾选决定哪些模型推送进 DSH
67
118
 
68
119
  - **能力**:AgnesCode tab 的模型花名册每行加勾选框(未勾选行降低透明度),决定哪些模型注册进 DSH 模型列表;保存后**立刻**重发一次过滤后的 roster,不必等下一次轮询。
@@ -300,7 +351,7 @@
300
351
  ### 模型花名册重排(WorkBuddy 形态)
301
352
 
302
353
  - **行去卡内框、改用分隔线**:`modelRow` 由横向 flex 行改为纵向列(头行 + 缩进的参数行),新增 `modelRowHead` 包裹头行;徽章只标 notable 态(删「纯文本」徽章、补「额度耗尽」徽章)。工具行计数成组右置,批量按钮 32px 与搜索框等高。
303
- - **每行只留会变的 per-model 事实**:参数段从「上下文 · 最大输出 · 默认思考强度」改为**本模型实际可选档位**——「思考 关闭/低/中/高/极高[/最高]」,由 Host 新导出的 `supportedThinkingLevels` 按 pi-ai `getSupportedThinkingLevels` 同一规则过滤(与 DSH 选择器同源),glm-5.2 独显「最高」。provider 级常数(默认思考强度)收进花名册头部只说一次(`llm.rosterThinkingDefault`),**删掉逐行重复的恒定默认档**——用户锐评「恒定默认档逐行重复=噪音」,该反模式已记入 `docs/IMPROVEMENTS.md` §7。
354
+ - **每行只留会变的 per-model 事实**:参数段从「上下文 · 最大输出 · 默认思考强度」改为**本模型实际可选档位**——「思考 关闭/低/中/高/极高[/最高]」,由 Host 新导出的 `supportedThinkingLevels` 按 pi-ai `getSupportedThinkingLevels` 同一规则过滤(与 DSH 选择器同源),glm-5.2 独显「最高」。provider 级常数(默认思考强度)收进花名册头部只说一次(`llm.rosterThinkingDefault`),**删掉逐行重复的恒定默认档**——用户锐评「恒定默认档逐行重复=噪音」,该反模式记于 `docs/ARCHIVE-IMPROVEMENTS-2026-09.md` §7(2026-10-05 归档)。
304
355
  - **`tokenSize` 修正 1049k → 1M**:千整走十进制、纯二进制走 1024、≥1M 归 M。Host 侧新增 `maxOutputLength` 投影(`0` = 未声明则整段不画,绝不猜)。
305
356
  - **`matchMultiplier` 单一匹配器**:趋势行 ×N 与花名册 ×N 同源同值,两处显示不可能不一致。
306
357
 
@@ -421,7 +472,7 @@ Token Plan 与小浣熊同为商汤旗下产品线,`sensenova` 这个名头名
421
472
 
422
473
  ### 文档修正:撤销 ROADMAP §0 被证伪的前提
423
474
 
424
- - [ROADMAP.md](docs/ROADMAP.md) §0 与 §2 引言原写「本插件已是双 profile 的 `agent-default-model`——即这台机器的**默认推理通道**,故障域已升级为推理可用性」。该论断 2026-09-29 已被 [IMPROVEMENTS.md](docs/IMPROVEMENTS.md) §1.2 撤销(`agent-default-model` 是宿主的选择记录服务,原引用不可复现),但 ROADMAP 未同步。现改为「**能力事实**:可注册 provider `sensenova-token-plan`;是否默认通道由 profile 与用户模型选择决定;一旦某 profile 选它作默认,故障域才从面板升级为推理可用性(条件性爆炸半径)」。两份文档不再正面矛盾。
475
+ - [ROADMAP.md](docs/ROADMAP.md) §0 与 §2 引言原写「本插件已是双 profile 的 `agent-default-model`——即这台机器的**默认推理通道**,故障域已升级为推理可用性」。该论断 2026-09-29 已被研究原稿 §1.2 撤销(`agent-default-model` 是宿主的选择记录服务,原引用不可复现;撤销原文现见 [ARCHIVE-BOUNDARY-DECISIONS.md](docs/ARCHIVE-BOUNDARY-DECISIONS.md) A1),但 ROADMAP 未同步。现改为「**能力事实**:可注册 provider `sensenova-token-plan`;是否默认通道由 profile 与用户模型选择决定;一旦某 profile 选它作默认,故障域才从面板升级为推理可用性(条件性爆炸半径)」。两份文档不再正面矛盾。
425
476
 
426
477
  ### 文档与仓库纪律
427
478
 
package/README.md CHANGED
@@ -1,24 +1,25 @@
1
1
  # dsh-connect-agnes-token-plan
2
2
 
3
- 把 Agnes 接进 DSH 的 **Plugins 页**插件卡。**DSH** 即 **DeepSeek Harness**;**Agnes** 是商汤科技的模型平台(本插件对接其控制台 API 与推理 API)。
3
+ 把 Agnes 接进 DSH 的 **Plugins 页**插件卡。**DSH** 即 **DeepSeek Harness**;**Agnes**(爱思)是全模态大模型平台,本插件对接其**控制台 API** 与**推理 API**。
4
+
4
5
 
5
6
  > **第一次读这个仓库?先看这三句。**
6
7
  >
7
8
  > 1. **这是给 DeepSeek Harness 用的插件**,不是独立应用;所有入口都在 DSH 的 Plugins 页那张卡上(三个 tab,见下)。
8
- > 2. **三种「红」是正常的,不是回归**:① `store/routes/wiring.test.mjs` 等 peer 套件报 `cannot resolve the peer dependency` —— 那是 DSH runtime 自带的包不在本仓库,属环境问题,先查 `test/peer-roots.mjs`;② 没装 `dsh` CLI 时 e2e 会 SKIP,属预期;③ 若在 **23:00–00:00** 之间单独跑 `render.test.mjs` 报红,那是历史上的午夜窗口缺陷(已修,见 [docs/PITFALLS.md](docs/PITFALLS.md) §48),升级到含该修复的版本即消失。
9
+ > 2. **三种「红」是正常的,不是回归**:① `test/wiring.test.mjs` 等 peer 套件报 `cannot resolve the peer dependency` —— 那是 DSH runtime 自带的包不在本仓库,属环境问题,先查 `test/peer-roots.mjs`;② 没装 `dsh` CLI 时 e2e 会 SKIP,属预期;③ 若在 **23:00–00:00** 之间单独跑 `render.test.mjs` 报红,那是历史上的午夜窗口缺陷(已在 0.10.0 修复,见 [docs/PITFALLS.md](docs/PITFALLS.md) §48),当前安装版本已含,无需升级。
9
10
  > 3. **见到「奇怪」的写法先别定罪**——本仓多数刻意的取舍都在 [docs/PITFALLS.md](docs/PITFALLS.md) / [docs/ADR.md](docs/ADR.md) 有明文出处。**动手前先 grep 一遍 docs/**。
10
11
  >
11
12
  > 协作会话的完整纪律见 [AGENTS.md](AGENTS.md)。
12
13
 
13
14
  - **积分额度**——登录一次,实时查看积分余额、额度窗口与每模型消耗,令牌自动续期,之后无需再管;
14
- - **接入 API**——把爱思模型注册为 DSH provider,参与对话、出图与出视频;
15
- - **Agnescode**——上游限流较宽松的另一条爱思办公产品线,独立账号、独立积分。
15
+ - **接入 API**——把 Agnes 模型注册为 DSH provider,参与对话、出图与出视频;
16
+ - **AgnesCode**——上游限流较宽松的另一条产品线(爱思办公桌面端),独立账号、独立积分。
16
17
 
17
18
  面板分三个 tab,按「先看数、再接入、最后可选加桌面端上游」排序:
18
19
 
19
20
  ## 积分额度
20
21
 
21
- 将 Agnes 的 Token Plan 接入dsh,,用超了只能等窗口重置。这个 tab 把数字搬进 DSH,写代码时不用切网页就能盯住:
22
+ 将 Agnes 的 Token Plan 接入 DSH,用超了只能等窗口重置。这个 tab 把数字搬进 DSH,写代码时不用切网页就能盯住:
22
23
 
23
24
  - **额度窗口**:模型请求(5 小时滚动)、每周请求、生图与视频(各 24 小时),**平台报出已用量**、独立滚动,(含百分比与重置时间)
24
25
  - **账号累计用量**:控制台口径的累计请求 / 文本 Token / 生图 / 视频秒数 / 活跃天数,以及近 N 天的分桶柱图
@@ -66,7 +67,7 @@
66
67
 
67
68
  1. 在 DSH「插件」页搜索 `dsh-connect-agnes-token-plan` 点击安装,或运行:
68
69
 
69
- ```powershell
70
+ ```bash
70
71
  dsh plugin --profile web add dsh-connect-agnes-token-plan # Web 端
71
72
  dsh plugin --profile desktop add dsh-connect-agnes-token-plan # 桌面端
72
73
  ```
@@ -96,16 +97,17 @@ npm run doctor:json # 机器读:JSON(可进你的巡检 / 工单脚本
96
97
 
97
98
  ## 文档
98
99
 
100
+ - [docs/README.md](docs/README.md) — 全量文档索引(每篇按「内容 / 何时查」路由;本表只列主文档)
99
101
  - [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md) — 架构与数据流
100
102
  - [docs/SETUP.md](docs/SETUP.md) — 配置字段、改动后重启、常见信号
101
103
  - [docs/AUTH.md](docs/AUTH.md) — 登录 / 重登 / 节流设计
102
104
  - [docs/API.md](docs/API.md) — 路由与控制台端点
103
105
  - [docs/AGNES-API.md](docs/AGNES-API.md) — Agnes 接口全集(控制台额度侧 + 推理侧)
104
106
  - [docs/TESTING.md](docs/TESTING.md) — 测试体系
105
- - [docs/PITFALLS.md](docs/PITFALLS.md) — 真实踩坑(49 条)
107
+ - [docs/PITFALLS.md](docs/PITFALLS.md) — 真实踩坑(55 条)
106
108
  - [CHANGELOG.md](CHANGELOG.md) — 版本变化
107
109
 
108
- AI 协作会话请先读 [AGENTS.md](AGENTS.md)。
110
+ AI 协作会话请先读 [AGENTS.md](AGENTS.md)。人类贡献者先读 [SETUP.md](docs/SETUP.md) 与 [ARCHITECTURE.md](docs/ARCHITECTURE.md) §2 理解结构与改动代价,改代码前再读 [AGENTS.md](AGENTS.md) 的红线与 [TESTING.md](docs/TESTING.md) 的 `npm test` 门禁。
109
111
 
110
112
  ## 诚实声明
111
113
 
@@ -32,7 +32,7 @@
32
32
 
33
33
  `package.json` 的 `files` 打包清单(由 `test/package.test.mjs` 的 import 闭包检查钉住)**不包含任何第三方代码**:
34
34
 
35
- - `peerDependencies`(`react`、`@deepseek-ai/dsh`、`@deepseek-ai/dsh-credentials`)由 DSH Host 运行时在运行期提供,不随本插件安装或打包(见 `docs/DSH-PLUGIN.md` §2);测试基建 `test/peer-roots.mjs` 就地解析它们,不引入新依赖;
35
+ - `peerDependencies`(共 13 个,由 DSH Host 运行时在运行期提供,不随本插件安装或打包;见 `package.json` 的 `peerDependencies` 与 `docs/DSH-PLUGIN.md` §2):`@deepseek-ai/cordis`、`@deepseek-ai/dsh-client-locale`、`@deepseek-ai/dsh-client-ui-layout`、`@deepseek-ai/dsh-client-ui-renderer`、`@deepseek-ai/dsh-credentials`、`@deepseek-ai/dsh-home-paths`、`@deepseek-ai/dsh-host-webserver`、`@deepseek-ai/dsh-llm`、`@deepseek-ai/dsh-llm-pi-ai`、`@deepseek-ai/dsh-settings`、`@deepseek-ai/dsh-tools`、`@deepseek-ai/schemastery`、`@earendil-works/pi-ai`。其中 `@deepseek-ai/cordis` 在 `peerDependenciesMeta` 中标记为 optional。注意:**本插件不依赖 `react`**,也不依赖 `@deepseek-ai/dsh`(与旧文案不同);测试基建 `test/peer-roots.mjs` 就地解析这些 peer,不引入新依赖;
36
36
  - `react` 为 MIT 许可;`@deepseek-ai/*` 属 DSH 运行时发行物,其许可证以 DSH 官方发行版为准;
37
37
  - `LICENSE` 与本文随包携带,但均为本项目自身文档。
38
38
 
Binary file