dsh-connect-trae 4.6.5 → 4.6.7

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
@@ -1,5 +1,109 @@
1
1
  # Changelog
2
2
 
3
+ ## 4.6.7 (2026-10-30)
4
+
5
+ > **「最早到期:23:59」是明天晚上,不是今晚。** 输入框积分面板用一个只输出时分的
6
+ > 格式化函数渲染「未来某天」的到期时刻,于是 36 小时后的到期被显示成今晚——整整差一天,
7
+ > 而这句文案的全部价值就在「还剩多久」。同一个插件里,同一句文案在卡片中用另一套格式化,
8
+ > 渲染出的是带日期的正确结果。
9
+
10
+ ### 修复
11
+
12
+ - **积分面板的「最早到期」补上日期**(#71,报告人
13
+ [@ManYue259](https://github.com/ManYue259))。
14
+ - **现象**:国内版输入框积分面板显示
15
+ `有 164 积分将在 7 天内过期(1 个套餐)` / `最早到期:23:59`,读起来是「今晚 23:59」。
16
+ 实际那一包是 **明天** 23:59 到期(取样时刻 2026-10-30 11:26 +08:00,
17
+ `earliestExpiresAtMs = 1793462399000` → `2026-10-31 23:59:59`,距取样 36.6 小时)。
18
+ - **根因**:`ComposerPoints.tsx` 用 `formatClock` 渲染到期时刻,而 `formatClock` 只为
19
+ **同一天内**的时刻而写(`composer.lastRefresh` 也在用它,那个用途是对的)。它被顺手
20
+ 复用到「未来某天」的到期上,于是丢掉日期这一半。更糟的是它把 locale 硬编码成
21
+ `'zh-CN'`,英文界面下仍按中文习惯排。
22
+ - **修法**:该处改用 `display.ts` 早已导出、卡片就在用的 `formatDateTime`(跟随读者
23
+ locale,年月日时分)。`formatClock` 保留,但补上注释说明它只可用于同一天的即时时刻,
24
+ 并写明被误用过一次、造成什么后果。
25
+ - **为什么这是缺陷而非取舍**:同一个 locale key `row.expiryEarliest` 在同一个插件里有
26
+ 两套渲染粒度——卡片 `TraeAccountPanel.tsx` 走 `formatDateTime`(`最早到期:2026/10/31 23:59`),
27
+ 面板走 `formatClock`(`最早到期:23:59`)。同一个 key 不该有两种含义。
28
+ - **不变的部分**:文案 key 与全部文案原样不动;「最近刷新」仍是纯时分(它永远是当天);
29
+ 卡片的渲染路径未改;`soonestExpiryOf` 的取值逻辑未改。
30
+
31
+ ### 测试
32
+
33
+ - 新增 **2** 例 `tests/composer-points.spec.tsx`:
34
+ - **到期行必须带日期**:用 issue 给出的真实样本,断言渲染文本包含 `formatDateTime` 的结果
35
+ 与一个四位年份,并且**不等于**旧代码产出的那个字符串。此前全仓对到期渲染**没有任何断言**
36
+ (该文件 24 例中零命中),格式化走偏无人挡。
37
+ - **同一行的「最近刷新」仍是纯时分**:防止修复越界,把 `lastRefresh` 也改成带日期而撑宽
38
+ 窄面板的底部。
39
+ - **变异验证**:把该处改回 `formatClock`,新增用例立刻转红(1 failed / 25 passed)。
40
+ - 全仓 **1224** 例通过(96 文件,较 4.6.6 净增 2 例,已用 `git stash` 基线对拍确认),
41
+ 双 tsconfig 类型检查通过,构建通过。
42
+
43
+ ### 说明
44
+
45
+ - 本版**不含** issue #71 的另外两条位置建议(积分读数从 `conversation.input.left` 挪到
46
+ `conversation.input.right`、以及三姊妹插件同步),那是视觉/交互口径变更而非缺陷,
47
+ 待单独决策后处理。
48
+ - issue 提到的 `within3d` 桶未参与 `soonestExpiryOf`/文案阶梯一事,经核对**结论正确**
49
+ (`within7d ⊇ within3d`,且 24h 桶为空时两桶取到同一个最小 `earliestExpiresAtMs`),
50
+ 但「2 天后到期显示 7 天内」属产品口径,留待单独 issue。
51
+
52
+ ## 4.6.6 (2026-10-30)
53
+
54
+ > **对齐宿主 DSH 0.2.1-rc.5(经停 rc.4):纯版本推进,插件代码零改动。**
55
+ > 两版之间 13 个提交里约 240 个文件只是各包 `package.json` 的版本号行,有实质代码的
56
+ > 只有四处——而四处都不落在本插件消费的面上。插件消费的 13 个宿主包在
57
+ > rc.3→rc.5 之间**逐字节相同**。
58
+
59
+ ### 变更
60
+
61
+ - **对齐宿主 DSH 0.2.1-rc.5**:13 个 `@deepseek-ai/dsh-*` devDependency 从 `0.2.1-rc.3`
62
+ 推进到 `0.2.1-rc.5`。`cordis`(`4.0.5`)/ `schemastery`(`3.18.5`)/ `pi-ai`(仍 `1.1.0`)
63
+ 均未变——宿主 `app.asar` 实测随包的 pi-ai 仍是 `1.1.0`,3.4.2 起的双向适配结论原样成立。
64
+ - **peer 范围无需改动**:`0.2.1-rc.4` / `0.2.1-rc.5` 对 `>=0.1.7-rc.1 <0.3.0-0` 已判通过。
65
+
66
+ ### 已核对确认无变化
67
+
68
+ - 逐字节比对 npm 上 `0.2.1-rc.3` 与 `0.2.1-rc.5` 两版的全量文件树(`lib/**.js` 汇总哈希,
69
+ 忽略 `package.json` 的版本号行):插件消费的 13 个包——`dsh-llm`、`dsh-llm-pi-ai`、
70
+ `dsh-settings`、`dsh-host-webserver`、`dsh-atomic-write`、`dsh-home-paths`、`dsh-attachment`、
71
+ `dsh-client-ui-renderer`、`dsh-client-ui-settings`、`dsh-client-ui-settings-plugins`、
72
+ `dsh-client-ui-slots`、`dsh-client-locale`、`dsh-client-ui-primitives`——**全部逐字节相同**。
73
+ (rc.3 时唯一有代码变化的是 `dsh-client-ui-primitives`;本版它停住了。)
74
+ - 本插件注册的 5 个槽位(`plugins.bundle.config`、`plugins.row.config`、
75
+ `conversation.input.left`、`conversation.composer.dock`、`conversation.input.model.label`)
76
+ 在 rc.5 中**仍然存在且契约未变**。
77
+ - 浏览器外壳的 `staticModules` 白名单(`dsh-web-frontend` 的 `index-*.js`)在 rc.3 与 rc.5
78
+ 之间**文件哈希相同**;本插件 bundle 实际 `require` 的 `react` / `react-dom` /
79
+ `react/jsx-runtime` 全部在表内。
80
+
81
+ ### rc.4 的两处行为变化为什么不击中本插件
82
+
83
+ - **`conversation.chat.reasoning.body` 新增 `rawText`,`text` 改为显示用文本**(会剥掉
84
+ `<signature>…</signature>` 前缀),上游专门发了升级指南。本插件全仓不注册、不消费任何
85
+ `conversation.chat.*` 槽位(`grep -rn "conversation.chat" src tests` 零命中),也不包装
86
+ reasoning 渲染。
87
+ - **把目录加载的诊断从 stdout 改到 stderr**(理由是「ACP 保留 stdout」)。本插件宿主侧
88
+ 从不用 stdout:`grep` `console.log|info|debug` 与 `process.stdout` 在 `src` 与
89
+ `lib/index.js` 中均零命中,诊断走卡片自己的诊断面板(`raw-diagnostic.ts`)。这条修复
90
+ 对本插件是**已满足的前提**,不是需要跟随的范式。
91
+
92
+ ### 测试
93
+
94
+ - `tests/dsh-peer-range.spec.ts` 的 `MUST_ADMIT` 补入 `0.2.1-rc.4` / `0.2.1-rc.5`——
95
+ 保持「当前正在使用的宿主版本必须在放行清单里」这条不变量。
96
+ - 双 tsconfig 类型检查通过,全仓 **1222** 例测试全绿(96 文件),`tsdown` 构建通过;
97
+ 重建后 `lib/client.js` 的 `require` 仍只有 react / react-dom / react/jsx-runtime,
98
+ 宿主进程存活(无渲染进程崩溃)。
99
+
100
+ ### 文档
101
+
102
+ - 新增 `docs/DSH_0.2.1_RC1_SYNC.md` 第十一节:`0.2.1-rc.5` 复核记录(取证、上游改动、
103
+ 契约面、槽位核对、外壳共享模块表、peer 门禁)。
104
+ - `README.md` / `README.en.md` 的宿主版本结论推进到 `0.2.1-rc.5`,并新增
105
+ 「`0.2.1-rc.5` 同步结论」小节。
106
+
3
107
  ## 4.6.5 (2026-10-30)
4
108
 
5
109
  > **一条没带上下文窗口的目录行,会让整个 `trae` 区域不可用。** 失效的不是
package/README.en.md CHANGED
@@ -192,7 +192,7 @@ Restart the DSH process after install/update/uninstall.
192
192
  ## DSH version compatibility
193
193
 
194
194
  **Requires DSH 0.1.7-rc.1 and up** (since 2.3.0 the plugin no longer targets hosts older than 0.1.7; the peer dependency ranges are narrowed accordingly).
195
- **The peer upper bound is `<0.3.0-0`, so both the 0.1.7 and the 0.2 line are supported (including 0.2.1-rc.3, verified).**
195
+ **The peer upper bound is `<0.3.0-0`, so both the 0.1.7 and the 0.2 line are supported (including 0.2.1-rc.5, verified).**
196
196
 
197
197
  ### Both pi-ai context generations are supported (since 3.4.2)
198
198
 
@@ -217,13 +217,13 @@ The 0.2.0 line breaks **no** contract this plugin consumes — a symbol-by-symbo
217
217
 
218
218
  ### DSH 0.2.1 line (pi-ai 1.1.0) sync
219
219
 
220
- The `0.2.1-rc.1` host moved `@earendil-works/pi-ai` from `^0.85.1` to **`^1.1.0`** (unchanged through `0.2.1-rc.2` and `0.2.1-rc.3`) — the only change on the 0.2 line with real behavioural impact. Three conclusions:
220
+ The `0.2.1-rc.1` host moved `@earendil-works/pi-ai` from `^0.85.1` to **`^1.1.0`** (unchanged from `0.2.1-rc.2` through `0.2.1-rc.5`) — the only change on the 0.2 line with real behavioural impact. Three conclusions:
221
221
 
222
222
  1. **The request body did not regress (measured, not inferred).** The 1.1.0 api reads the prompt **only** from a transcript system message and never touches top-level `systemPrompt` / `tools`, while `dsh-llm-pi-ai`'s `piContext()` still emits the legacy envelope. The bidirectional adapter this plugin has shipped since 3.4.2 covers exactly that: feeding the real host envelope through real `1.1.0` with a local SSE capture yields `roles: ["system","user"]`, an intact system text and `tools: 1`; **without the adapter it degenerates to `roles: ["user"]`, system `null`, `tools: 0`** — with no error. That contrast is pinned as a wire-level matrix in `tests/pi-ai-context.spec.ts`.
223
223
  2. **Types were fixed.** 1.1.0 changed `ProviderStreams`' second parameter to a **branded** `TranscriptContext` (a `unique symbol` only `normalizeContext()` can produce). The adapter casts once at that single boundary (`withContextAdaptation` in `src/adapter.ts`) and documents why the brand cannot be obtained honestly there.
224
- 3. **The peer range needed no change.** DSH evaluates with `semver.satisfies(runtime, range, { includePrerelease: true })` and checks only the `@deepseek-ai/dsh*` namespace, so `>=0.1.7-rc.1 <0.3.0-0` already admits `0.2.1-rc.1`, `0.2.1-rc.2` and `0.2.1-rc.3` (verified). Note the prerelease cliff only exists under **default** options — it is not this plugin's situation.
224
+ 3. **The peer range needed no change.** DSH evaluates with `semver.satisfies(runtime, range, { includePrerelease: true })` and checks only the `@deepseek-ai/dsh*` namespace, so `>=0.1.7-rc.1 <0.3.0-0` already admits every release from `0.2.1-rc.1` through `0.2.1-rc.5` (verified). Note the prerelease cliff only exists under **default** options — it is not this plugin's situation.
225
225
 
226
- The dev tree pins `@earendil-works/pi-ai` at exactly **1.1.0** (the version the host actually bundles — still 1.1.0 on `0.2.1-rc.3`) rather than `^1.1.0`, so local typecheck and tests run against the same contract users do; the `schemastery` override moved to `3.18.5` (`dsh-llm-pi-ai@0.2.1-rc.3` declares `~3.18.5`).
226
+ The dev tree pins `@earendil-works/pi-ai` at exactly **1.1.0** (the version the host actually bundles — still 1.1.0 on `0.2.1-rc.5`) rather than `^1.1.0`, so local typecheck and tests run against the same contract users do; the `schemastery` override moved to `3.18.5` (`dsh-llm-pi-ai@0.2.1-rc.5` declares `~3.18.5`).
227
227
 
228
228
  ### `0.2.1-rc.3` sync (since 4.4.6)
229
229
 
@@ -238,6 +238,20 @@ For **this plugin**:
238
238
 
239
239
  Details: [section 10 of `docs/DSH_0.2.1_RC1_SYNC.md`](https://github.com/dingminhua/dsh-connect-trae/blob/main/docs/DSH_0.2.1_RC1_SYNC.md).
240
240
 
241
+ ### `0.2.1-rc.5` sync (since 4.6.6)
242
+
243
+ The host moved to `0.2.1-rc.5`, through `rc.4`. Of the 13 commits between the two releases, roughly 240 files are nothing but version-bump lines in each package's `package.json`; **only four carry real code**: ACP/MCP moving catalog-load diagnostics off stdout to stderr, View tab tooltips shown only when the label overflows, the More-menu tooltip losing its dynamic copy, and custom thinking-block rendering.
244
+
245
+ For **this plugin**:
246
+
247
+ - The 13 host packages it consumes are **byte-for-byte identical** between rc.3 and rc.5 — including `dsh-client-ui-primitives`, the one package that had changed on rc.3. **Zero adaptation.**
248
+ - rc.4's only behavioural change is to the `conversation.chat.reasoning.body` slot: it gains `rawText`, and `text` becomes the **display-ready** text (with a leading `<signature>…</signature>` block stripped). This plugin registers and consumes **no** `conversation.chat.*` slot at all, so it is not affected.
249
+ - rc.4's reason for moving diagnostics off stdout is that "ACP reserves stdout for protocol messages". This plugin's host half **never writes to stdout** (no `console.log/info/debug`, no `process.stdout.write`); diagnostics go to the card's own diagnostics panel. That fix is therefore **a precondition already satisfied**, not a pattern to follow.
250
+ - All five slots this plugin registers **still exist with unchanged contracts** on rc.5.
251
+ - The peer range **needs no change**: both `0.2.1-rc.4` and `0.2.1-rc.5` are admitted by `>=0.1.7-rc.1 <0.3.0-0`.
252
+
253
+ Details: [section 11 of `docs/DSH_0.2.1_RC1_SYNC.md`](https://github.com/dingminhua/dsh-connect-trae/blob/main/docs/DSH_0.2.1_RC1_SYNC.md).
254
+
241
255
 
242
256
  ### Why the upper bound is not `<0.2.0`
243
257
 
package/README.md CHANGED
@@ -211,7 +211,7 @@ npm install dsh-connect-trae
211
211
  ## DSH 版本兼容
212
212
 
213
213
  **要求 DSH 0.1.7-rc.1 及以上**(2.3.0 起不再支持 0.1.7 之前的宿主;peer 依赖范围已按此收窄)。
214
- **peer 上界为 `<0.3.0-0`:0.1.7 与 0.2 两条线均受支持(含 0.2.1-rc.3,已实测)。**
214
+ **peer 上界为 `<0.3.0-0`:0.1.7 与 0.2 两条线均受支持(含 0.2.1-rc.5,已实测)。**
215
215
 
216
216
  ### 同时支持 pi-ai 的两代上下文(3.4.2 起)
217
217
 
@@ -245,7 +245,7 @@ peer 范围不满足的 bundle 会被**整体跳过**,只往 stderr 写一行
245
245
 
246
246
  ### DSH 0.2.1 线(pi-ai 1.1.0)同步结论
247
247
 
248
- 宿主 `0.2.1-rc.1` 把 `@earendil-works/pi-ai` 从 `^0.85.1` 抬到了 **`^1.1.0`**(`0.2.1-rc.2` / `0.2.1-rc.3` 均保持不变),这是 0.2 线里
248
+ 宿主 `0.2.1-rc.1` 把 `@earendil-works/pi-ai` 从 `^0.85.1` 抬到了 **`^1.1.0`**(`0.2.1-rc.2` 起至 `0.2.1-rc.5` 均保持不变),这是 0.2 线里
249
249
  唯一有实际行为影响的变化。三项结论:
250
250
 
251
251
  1. **请求体没有丢东西(已实测)**。1.1.0 的 api **只**读 transcript 里的 system 消息,
@@ -258,13 +258,13 @@ peer 范围不满足的 bundle 会被**整体跳过**,只往 stderr 写一行
258
258
  `TranscriptContext`,只有 `normalizeContext()` 能产出。适配层在这条边界上做一次显式转型
259
259
  (`src/adapter.ts` 的 `withContextAdaptation`),并在两处调用点写明为何品牌在此处不可诚实获得。
260
260
  3. **peer 范围无需改动**。DSH 用 `semver.satisfies(runtime, range, { includePrerelease: true })`
261
- 求值,且只校验 `@deepseek-ai/dsh*` 命名空间,因此 `>=0.1.7-rc.1 <0.3.0-0` 对 `0.2.1-rc.1` / `0.2.1-rc.2` / `0.2.1-rc.3` 均已判通过
261
+ 求值,且只校验 `@deepseek-ai/dsh*` 命名空间,因此 `>=0.1.7-rc.1 <0.3.0-0` 对 `0.2.1-rc.1` 至 `0.2.1-rc.5` 均已判通过
262
262
  (已实测)。**注意**:预发布悬崖只在**默认选项**下成立——那是 `dsh-connect-workbuddy` 侧
263
263
  调研文档所描述的困境,本插件不适用。
264
264
 
265
- 开发树的 `@earendil-works/pi-ai` 钉在 **1.1.0**(宿主实际随包的版本,`0.2.1-rc.3` 实测仍是 1.1.0)而非 `^1.1.0`,
265
+ 开发树的 `@earendil-works/pi-ai` 钉在 **1.1.0**(宿主实际随包的版本,`0.2.1-rc.5` 实测仍是 1.1.0)而非 `^1.1.0`,
266
266
  使本地 typecheck 与测试跑在与用户完全一致的契约上;`schemastery` 的 override 同步抬到
267
- `3.18.5`(`dsh-llm-pi-ai@0.2.1-rc.3` 声明 `~3.18.5`)。
267
+ `3.18.5`(`dsh-llm-pi-ai@0.2.1-rc.5` 声明 `~3.18.5`)。
268
268
 
269
269
  ### `0.2.1-rc.3` 同步结论(4.4.6 起)
270
270
 
@@ -289,6 +289,28 @@ More 菜单、埋点),1 个是 DeepSeek API-key 通道改走官方 `/models`
289
289
 
290
290
  细节见 [`docs/DSH_0.2.1_RC1_SYNC.md`](https://github.com/dingminhua/dsh-connect-trae/blob/main/docs/DSH_0.2.1_RC1_SYNC.md) 第十节。
291
291
 
292
+ ### `0.2.1-rc.5` 同步结论(4.6.6 起)
293
+
294
+ 宿主推进到 `0.2.1-rc.5`(经停 `rc.4`)。两版之间的 13 个提交里,约 240 个文件只是各包
295
+ `package.json` 的版本号行,**有实质代码的只有四处**:ACP/MCP 把目录加载诊断从 stdout 改到
296
+ stderr、View 标签的 tooltip 只在文字溢出时显示、More 菜单 tooltip 去掉动态文案、
297
+ 以及 thinking 区块的自定义渲染。
298
+
299
+ 对**本插件**而言:
300
+
301
+ - 插件消费的 13 个宿主包在 rc.3→rc.5 之间**逐字节相同**(含 rc.3 时唯一有过变化的
302
+ `dsh-client-ui-primitives`,本版它没有变化),因此**零适配**。
303
+ - rc.4 唯一的行为变化是 `conversation.chat.reasoning.body` 槽位新增 `rawText`、`text` 改为
304
+ 「显示用文本」(会剥掉 `<signature>` 前缀)。本插件全仓不注册、不消费任何
305
+ `conversation.chat.*` 槽位,**不击中**。
306
+ - rc.4 把诊断日志赶出 stdout 的理由是「ACP 保留 stdout」。本插件宿主侧**从不用 stdout**
307
+ (无 `console.log/info/debug`、无 `process.stdout.write`),诊断走卡片自己的诊断面板,
308
+ 因此这条**已是满足的前提**,不是需要跟随的范式。
309
+ - 插件注册的全部 5 个槽位在 rc.5 中**仍然存在且契约未变**。
310
+ - peer 范围**无需改动**:`0.2.1-rc.4` / `0.2.1-rc.5` 对 `>=0.1.7-rc.1 <0.3.0-0` 均已判通过。
311
+
312
+ 细节见 [`docs/DSH_0.2.1_RC1_SYNC.md`](https://github.com/dingminhua/dsh-connect-trae/blob/main/docs/DSH_0.2.1_RC1_SYNC.md) 第十一节。
313
+
292
314
 
293
315
  ### peer 上界为什么不写 `<0.2.0`
294
316
 
package/lib/client.js CHANGED
@@ -6398,6 +6398,18 @@ window.__ModuleLoader__.load({
6398
6398
  packs: String(expiry.expired.packs)
6399
6399
  });
6400
6400
  }
6401
+ /**
6402
+ * A clock time, for the ONE thing in this panel that is always the same day:
6403
+ * `composer.lastRefresh`, which is "now" by construction.
6404
+ *
6405
+ * DO NOT reuse this for credit expiry. It was reused for that once (issue #71)
6406
+ * and produced `最早到期:23:59` for a pack expiring TOMORROW at 23:59 — a full
6407
+ * day earlier than the truth, in the one sentence whose entire job is "how long
6408
+ * do I have left". The card already rendered the same locale key
6409
+ * (`row.expiryEarliest`) through `formatDateTime`, so one key had two
6410
+ * granularities in one plugin. Expiry goes through `formatDateTime`; only
6411
+ * same-day instants may use this.
6412
+ */
6401
6413
  function formatClock(value) {
6402
6414
  return new Date(value).toLocaleTimeString("zh-CN", {
6403
6415
  hour: "2-digit",
@@ -6728,7 +6740,7 @@ window.__ModuleLoader__.load({
6728
6740
  role: "status",
6729
6741
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: expiryMessageOf(signedIn.credits.expiry, t) }), soonestExpiryOf(signedIn.credits.expiry) === void 0 ? null : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
6730
6742
  className: "dsm-trae-expiry-detail",
6731
- children: t("row.expiryEarliest", { time: formatClock(soonestExpiryOf(signedIn.credits.expiry)) })
6743
+ children: t("row.expiryEarliest", { time: formatDateTime(soonestExpiryOf(signedIn.credits.expiry)) })
6732
6744
  })]
6733
6745
  }) : null,
6734
6746
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "dsh-connect-trae",
3
3
  "displayName": "DSH Connect Trae",
4
4
  "description": "把本机登录的 Trae 模型接入 DeepSeek Harness:国内版与国际版双供应商并行,提供用量/积分概览与每日签到领取。",
5
- "version": "4.6.5",
5
+ "version": "4.6.7",
6
6
  "author": "dingminhua",
7
7
  "copyright": "Copyright (c) 2026 LaoDing",
8
8
  "license": "MIT",
@@ -100,19 +100,19 @@
100
100
  },
101
101
  "devDependencies": {
102
102
  "@deepseek-ai/cordis": "^4.0.5",
103
- "@deepseek-ai/dsh-atomic-write": "0.2.1-rc.3",
104
- "@deepseek-ai/dsh-attachment": "0.2.1-rc.3",
105
- "@deepseek-ai/dsh-client-locale": "0.2.1-rc.3",
106
- "@deepseek-ai/dsh-client-ui-primitives": "0.2.1-rc.3",
107
- "@deepseek-ai/dsh-client-ui-renderer": "0.2.1-rc.3",
108
- "@deepseek-ai/dsh-client-ui-settings": "0.2.1-rc.3",
109
- "@deepseek-ai/dsh-client-ui-settings-plugins": "0.2.1-rc.3",
110
- "@deepseek-ai/dsh-client-ui-slots": "0.2.1-rc.3",
111
- "@deepseek-ai/dsh-home-paths": "0.2.1-rc.3",
112
- "@deepseek-ai/dsh-host-webserver": "0.2.1-rc.3",
113
- "@deepseek-ai/dsh-llm": "0.2.1-rc.3",
114
- "@deepseek-ai/dsh-llm-pi-ai": "0.2.1-rc.3",
115
- "@deepseek-ai/dsh-settings": "0.2.1-rc.3",
103
+ "@deepseek-ai/dsh-atomic-write": "0.2.1-rc.5",
104
+ "@deepseek-ai/dsh-attachment": "0.2.1-rc.5",
105
+ "@deepseek-ai/dsh-client-locale": "0.2.1-rc.5",
106
+ "@deepseek-ai/dsh-client-ui-primitives": "0.2.1-rc.5",
107
+ "@deepseek-ai/dsh-client-ui-renderer": "0.2.1-rc.5",
108
+ "@deepseek-ai/dsh-client-ui-settings": "0.2.1-rc.5",
109
+ "@deepseek-ai/dsh-client-ui-settings-plugins": "0.2.1-rc.5",
110
+ "@deepseek-ai/dsh-client-ui-slots": "0.2.1-rc.5",
111
+ "@deepseek-ai/dsh-home-paths": "0.2.1-rc.5",
112
+ "@deepseek-ai/dsh-host-webserver": "0.2.1-rc.5",
113
+ "@deepseek-ai/dsh-llm": "0.2.1-rc.5",
114
+ "@deepseek-ai/dsh-llm-pi-ai": "0.2.1-rc.5",
115
+ "@deepseek-ai/dsh-settings": "0.2.1-rc.5",
116
116
  "@deepseek-ai/schemastery": "3.18.5",
117
117
  "@earendil-works/pi-ai": "1.1.0",
118
118
  "@testing-library/dom": "^10.4.2",