dsh-recall-plugin 2.5.1 → 2.5.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
@@ -4,6 +4,27 @@
4
4
 
5
5
  ## [Unreleased]
6
6
 
7
+ ## [2.5.2] - 2026-10-28
8
+
9
+ ### 修复
10
+
11
+ - **编辑重发带图片时「草稿填了却不发」(活体回归发现,仅 0.2.2-alpha.2 触发)**:`createDrafts` 第三参传 `true` 会让图片进输入态即后台上传,而官方 `sendSession` 会**等上传回执**才发 prompt——刚 fork 的子会话上传迟迟不结算时,草稿留在输入框、消息不发、控制台无错(真机复现两次;同场景纯文本编辑重发一次成功)。改为按场景分流:撤回回填(只填不发)仍传 `true` 保留即时上传;编辑重发(自动发送)传 `false`,图片字节随 prompt 内联,发送一步到位。
12
+
13
+ ### 兼容
14
+
15
+ - **dsh 0.2.2-alpha.2(一处破坏,已修)**:官方把 `readAttachment` 的入参从 `attachmentId` 字符串换成完整 `ImageAttachmentRef`,宿主不再回会话日志反查授权,裸 id 直接 `INVALID_ATTACHMENT_REF`。插件原先传裸 id → **撤回回填与编辑重发的图片会被逐项 `try/catch` 静默丢弃**。现按「完整引用 → 裸 id」探测回退并把命中代缓存在闭包,两代同时可用(0.1.x / 0.2.0 / 0.2.1 行为不变)。另补 `createDrafts` 第三参 `uploadImages=true`(旧版忽略),恢复「图片进输入态即上传」的官方语义;三参形态抛错时自动退回两参(图片改随 prompt 内联),不让整批附件丢失。
16
+ - **`sessions.fork` 停写 `parentSession`**:普通分支改由 header `origin` 判定,插件只读 `origin` 且血缘自存 `lineage.json`,无需改码;fork 子会话不再有被当作子代理的残余风险。
17
+ - **cordis 配置访问统一**:loader 的 ref 来源 `fiber.config` → `fiber.effectiveConfig`,volatile 提交与 `loader/volatile-update` 派发链未变,设置面热更不受影响。
18
+
19
+ ### 变更
20
+
21
+ - **`test:probe` 58 条**:新增「附件回读链(B1)」钉住 `readAttachment` 单参形状与 `{ attachment, data }` 返回;`createDrafts` 探针并入第三参(新旧两形态都放行);loader 探针按 `fiber.effectiveConfig` 同步改名并注明两种拼写。
22
+ - **client 单测 121 → 129**:新增 `tests/client/draft-fill.test.ts`(对象口径 / 字符串口径 / 命中代缓存 / 双失败降级 / 仅裸 id 的旧调用方形状 / 回填第三参 true / 自动发送第三参 false / 三参抛错退回两参);`attachmentRefsFromBlocks` 的形状断言并入既有 unit 用例(原始引用随行)。
23
+
24
+ ### 文档
25
+
26
+ - 台账同步 dsh 0.2.2-alpha.2:`dshReleases` 补 `0.2.2-alpha.2`、六条 `@deepseek-ai/dsh-*` peer 追加 `>=0.2.2-alpha.1 <0.3.0`(cordis `>=4.0.6-alpha.1 <4.0.7`、schemastery `>=3.18.6-alpha.1 <3.18.7`)、`docs/reference/` 第十一次重拉(13 源中 3 份有差异,均不落插件消费面)、`docs/dsh-contract.md` 对应版本与新增 §1.2「输入区写入链与附件回读」+ 沿革⑫、`docs/compat-audit.md` 新核验段、新增 [upgrade-assessments/dsh-0.2.2-alpha.2.md](docs/upgrade-assessments/dsh-0.2.2-alpha.2.md)、README 双语徽章与版本范围。
27
+
7
28
  ## [2.5.1] - 2026-10-27
8
29
 
9
30
  ### 兼容
package/README.en.md CHANGED
@@ -7,7 +7,7 @@
7
7
  ![Platform](https://img.shields.io/badge/platform-Windows%20%7C%20Linux%20%7C%20macOS-blue)
8
8
  ![Build](https://img.shields.io/badge/pure%20JS-green)
9
9
 
10
- [![DSH](https://img.shields.io/badge/DSH-0.2.1--rc.3-blue)](https://github.com/deepseek-ai/deepseek-harness/releases/tag/dsh-v0.2.1-rc.3)
10
+ [![DSH](https://img.shields.io/badge/DSH-0.2.2--alpha.2-blue)](https://github.com/deepseek-ai/deepseek-harness/releases/tag/dsh-v0.2.2-alpha.2)
11
11
  ![DSH](https://img.shields.io/badge/DSH-Desktop-blue)
12
12
 
13
13
  Under any message you've sent, click "↶ Recall" — **your workspace files and the conversation history roll back to just before that message was sent**.
@@ -87,7 +87,7 @@ Prerequisites:
87
87
 
88
88
  - git CLI: without it the recall button won't appear (a notice shows at the top of the page); DSH itself keeps running.
89
89
  - Shell: PowerShell 5.1 / 7 on Windows; bash on Linux/macOS.
90
- - DSH version: `0.1.2-alpha.1` through `0.2.1-rc.3`; later versions within a verified minor line are admitted automatically, while unverified new minor lines are blocked by the startup compatibility gate (window mechanics in the fold below).
90
+ - DSH version: `0.1.2-alpha.1` through `0.2.2-alpha.2`; later versions within a verified minor line are admitted automatically, while unverified new minor lines are blocked by the startup compatibility gate (window mechanics in the fold below).
91
91
  - **0.1.7-alpha.1 is a breaking release** (the shell execution and settings interfaces changed); the plugin ships both seams side by side — the same release works on every 0.1.2–0.1.6 line and on 0.1.7+, with unchanged behaviour on older DSH versions.
92
92
  - `0.1.1-rc.2` and earlier are not supported: their client runtime lacks the `sessions`/`workspaces`/`uiWorkspace` services, so the plugin UI silently fails to render.
93
93
 
@@ -97,10 +97,10 @@ Prerequisites:
97
97
  peerDependencies open a window per minor line, consistent with the `dsh.compatibility.dshReleases` declaration:
98
98
 
99
99
  ```
100
- >=0.1.2-alpha.1 <0.1.3 || >=0.1.3-alpha.1 <0.1.4 || >=0.1.5-alpha.1 <0.1.6 || >=0.1.6-alpha.1 <0.1.7 || >=0.1.7-alpha.1 <0.1.8 || >=0.2.0-rc.1 <0.2.1 || >=0.2.1-alpha.1 <0.3.0
100
+ >=0.1.2-alpha.1 <0.1.3 || >=0.1.3-alpha.1 <0.1.4 || >=0.1.5-alpha.1 <0.1.6 || >=0.1.6-alpha.1 <0.1.7 || >=0.1.7-alpha.1 <0.1.8 || >=0.2.0-rc.1 <0.2.1 || >=0.2.1-alpha.1 <0.3.0 || >=0.2.2-alpha.1 <0.3.0
101
101
  ```
102
102
 
103
- Each line is anchored at its first verified version with an upper bound at the next minor (the 0.2.1 window's upper bound is widened to `<0.3.0`, admitting every 0.2 release), so later prereleases/releases within a verified line are admitted without touching the peer declaration. Both the 0.2.0 and 0.2.1 lines need their own tuple: npm's prerelease gate only admits a prerelease from a comparator with the same tuple, so the existing `<0.1.8` segment cannot admit `0.2.0-rc.1`, nor `<0.2.1` admit `0.2.1-alpha.1` (prereleases of later tuples such as 0.2.2 obey the same gate and need their own segment once verified).
103
+ Each line is anchored at its first verified version with an upper bound at the next minor (the 0.2.1 and 0.2.2 windows widen their upper bound to `<0.3.0`, admitting every 0.2 release), so later prereleases/releases within a verified line are admitted without touching the peer declaration. The 0.2.0, 0.2.1 and 0.2.2 lines each need their own tuple: npm's prerelease gate only admits a prerelease from a comparator with the same tuple, so the existing `<0.1.8` segment cannot admit `0.2.0-rc.1`, `<0.2.1` cannot admit `0.2.1-alpha.1`, and `>=0.2.1-alpha.1 <0.3.0` cannot admit `0.2.2-alpha.2` (first verified 0.2.2 release, 2026-10-28).
104
104
 
105
105
  </details>
106
106
 
package/README.md CHANGED
@@ -5,7 +5,7 @@
5
5
  [![npm version](https://img.shields.io/npm/v/dsh-recall-plugin?style=flat-square&label=npm&color=3178C6)](https://www.npmjs.com/package/dsh-recall-plugin)
6
6
  [![npm downloads](https://img.shields.io/npm/dm/dsh-recall-plugin?style=flat-square&label=downloads&color=1F883D)](https://www.npmjs.com/package/dsh-recall-plugin)
7
7
  ![License](https://img.shields.io/badge/license-MIT-blue)
8
- [![DSH](https://img.shields.io/badge/DSH-0.2.1--rc.3-blue)](https://github.com/deepseek-ai/deepseek-harness/releases/tag/dsh-v0.2.1-rc.3)
8
+ [![DSH](https://img.shields.io/badge/DSH-0.2.2--alpha.2-blue)](https://github.com/deepseek-ai/deepseek-harness/releases/tag/dsh-v0.2.2-alpha.2)
9
9
 
10
10
  在任意一条你发过的消息下方点「↶ 撤回」——**工作区文件和对话历史一起回到那条消息发出之前的状态**。
11
11
 
@@ -84,7 +84,7 @@
84
84
 
85
85
  - git CLI:未安装时撤回按钮不出现(页面顶部会提示安装 git),不影响 DSH 运行。
86
86
  - shell:Windows 上 PowerShell 5.1 / 7 均可;Linux/macOS 需 bash。
87
- - DSH 版本:`0.1.2-alpha.1` 至 `0.2.1-rc.3`;已核验 minor 线内的后续版本自动放行,未核验的新 minor 线会被启动期兼容门禁拦截(开窗机制见下方折叠块)。
87
+ - DSH 版本:`0.1.2-alpha.1` 至 `0.2.2-alpha.2`;已核验 minor 线内的后续版本自动放行,未核验的新 minor 线会被启动期兼容门禁拦截(开窗机制见下方折叠块)。
88
88
  - **0.1.7-alpha.1 是破坏性版本**(shell 执行与 settings 面接口更换),插件内置双分支共存适配:同一发布同时兼容 0.1.2–0.1.6 各线与 0.1.7+,老版本 DSH 上行为不变。
89
89
  - `0.1.1-rc.2` 及更早不支持:那条线的客户端运行时没有 `sessions`/`workspaces`/`uiWorkspace` 服务,插件 UI 会静默不渲染。
90
90
 
@@ -94,10 +94,10 @@
94
94
  peerDependencies 按 minor 版本线开窗,与 `dsh.compatibility.dshReleases` 声明一致:
95
95
 
96
96
  ```
97
- >=0.1.2-alpha.1 <0.1.3 || >=0.1.3-alpha.1 <0.1.4 || >=0.1.5-alpha.1 <0.1.6 || >=0.1.6-alpha.1 <0.1.7 || >=0.1.7-alpha.1 <0.1.8 || >=0.2.0-rc.1 <0.2.1 || >=0.2.1-alpha.1 <0.3.0
97
+ >=0.1.2-alpha.1 <0.1.3 || >=0.1.3-alpha.1 <0.1.4 || >=0.1.5-alpha.1 <0.1.6 || >=0.1.6-alpha.1 <0.1.7 || >=0.1.7-alpha.1 <0.1.8 || >=0.2.0-rc.1 <0.2.1 || >=0.2.1-alpha.1 <0.3.0 || >=0.2.2-alpha.1 <0.3.0
98
98
  ```
99
99
 
100
- 每条线以首个核验版本为下限、上界开到下一 minor(0.2.1 段上限放宽到 `<0.3.0`,0.2 全线正式版自动放行),同线内后续 prerelease/正式版自动放行、无需改 peer 声明。0.2.0 与 0.2.1 两线都必须显式开窗:npm 的 prerelease 门槛要求同 tuple 且带 prerelease 的比较器,既有 `<0.1.8` 段放行不了 `0.2.0-rc.1`、`<0.2.1` 段放行不了 `0.2.1-alpha.1`(0.2.2 及以后 tuple 的 prerelease 同样受此门槛约束,待核验后另加段)。
100
+ 每条线以首个核验版本为下限、上界开到下一 minor(0.2.1 与 0.2.2 段上限均放宽到 `<0.3.0`,0.2 全线正式版自动放行),同线内后续 prerelease/正式版自动放行、无需改 peer 声明。0.2.0 / 0.2.1 / 0.2.2 每条线都必须显式开窗:npm 的 prerelease 门槛要求同 tuple 且带 prerelease 的比较器,既有 `<0.1.8` 段放行不了 `0.2.0-rc.1`、`<0.2.1` 段放行不了 `0.2.1-alpha.1`,`>=0.2.1-alpha.1 <0.3.0` 同样放行不了 `0.2.2-alpha.2`(首个 0.2.2 核验版本,2026-10-28)。
101
101
 
102
102
  </details>
103
103
 
package/lib/client.js CHANGED
@@ -1695,7 +1695,7 @@
1695
1695
  attachStarted = startAttachDrafts(conversation, shell, targetSessionId, attachmentFiles, () => {
1696
1696
  attachDone = true;
1697
1697
  submitIfReady();
1698
- });
1698
+ }, opts === void 0 || opts.submit !== true);
1699
1699
  }
1700
1700
  }
1701
1701
  }
@@ -1732,7 +1732,7 @@
1732
1732
  };
1733
1733
  setTimeout(tick, 0);
1734
1734
  }
1735
- function startAttachDrafts(conversation, shell, sessionId, files, onDone) {
1735
+ function startAttachDrafts(conversation, shell, sessionId, files, onDone, eagerUpload = true) {
1736
1736
  if (typeof conversation.createDrafts !== "function") return false;
1737
1737
  const actions = shell.actions;
1738
1738
  let add = null;
@@ -1749,7 +1749,12 @@
1749
1749
  }
1750
1750
  if (!Array.isArray(list) || list.length === 0) return;
1751
1751
  try {
1752
- const drafts = conversation.createDrafts ? conversation.createDrafts(sessionId, list) : [];
1752
+ let drafts;
1753
+ try {
1754
+ drafts = conversation.createDrafts ? conversation.createDrafts(sessionId, list, eagerUpload) : [];
1755
+ } catch (e) {
1756
+ drafts = conversation.createDrafts ? conversation.createDrafts(sessionId, list) : [];
1757
+ }
1753
1758
  const descriptors = Array.isArray(drafts) ? drafts : [];
1754
1759
  const ids = descriptors.map((draft) => draft && draft.id).filter((id) => typeof id === "string" && id !== "");
1755
1760
  if (ids.length === 0) return;
@@ -1763,20 +1768,45 @@
1763
1768
  })();
1764
1769
  return true;
1765
1770
  }
1771
+ let attachmentShape = null;
1772
+ async function readAttachmentBytes(read, ref) {
1773
+ const refArg = ref.attachment && typeof ref.attachment === "object" ? ref.attachment : null;
1774
+ const idArg = typeof ref.attachmentId === "string" && ref.attachmentId !== "" ? ref.attachmentId : null;
1775
+ const attempts = [];
1776
+ if (attachmentShape === "id") {
1777
+ if (idArg !== null) attempts.push({ shape: "id", arg: idArg });
1778
+ if (refArg !== null) attempts.push({ shape: "ref", arg: refArg });
1779
+ } else {
1780
+ if (refArg !== null) attempts.push({ shape: "ref", arg: refArg });
1781
+ if (idArg !== null) attempts.push({ shape: "id", arg: idArg });
1782
+ }
1783
+ for (const attempt of attempts) {
1784
+ try {
1785
+ const result = await read(attempt.arg);
1786
+ if (result && result.ok === true && result.value && result.value.data !== void 0 && result.value.data !== null) {
1787
+ attachmentShape = attempt.shape;
1788
+ return { attachment: result.value.attachment, data: result.value.data };
1789
+ }
1790
+ } catch (e) {
1791
+ }
1792
+ }
1793
+ return null;
1794
+ }
1766
1795
  function preloadAttachmentFiles(sourceSessionId, refs) {
1767
1796
  return (async () => {
1768
1797
  const sessions = ctx.sessions;
1769
1798
  const binding = sessions && typeof sessions.binding === "function" ? sessions.binding(sourceSessionId) : void 0;
1770
1799
  const session = binding && binding.session;
1771
1800
  if (!session || typeof session.readAttachment !== "function") return [];
1801
+ const read = session.readAttachment.bind(session);
1772
1802
  const out = [];
1773
1803
  for (const ref of refs) {
1774
1804
  try {
1775
- const result = await session.readAttachment(ref.attachmentId);
1776
- if (!result || result.ok !== true || !result.value || result.value.data === void 0 || result.value.data === null) continue;
1777
- const raw = result.value.data;
1805
+ const value = await readAttachmentBytes(read, ref);
1806
+ if (!value) continue;
1807
+ const raw = value.data;
1778
1808
  const bytes = raw instanceof Uint8Array ? raw : Uint8Array.from(raw);
1779
- const meta = result.value.attachment;
1809
+ const meta = value.attachment;
1780
1810
  const mediaType = meta && typeof meta.mediaType === "string" && meta.mediaType !== "" ? meta.mediaType : "application/octet-stream";
1781
1811
  const name = ref.name || (meta && typeof meta.name === "string" && meta.name !== "" ? meta.name : defaultAttachmentName(mediaType, out.length));
1782
1812
  const buffer = bytes.buffer.slice(bytes.byteOffset, bytes.byteOffset + bytes.byteLength);
@@ -1859,7 +1889,7 @@
1859
1889
  if (!block || block.type !== "image" && block.type !== "file") continue;
1860
1890
  const ref = block.attachment;
1861
1891
  if (!ref || typeof ref.attachmentId !== "string" || ref.attachmentId === "") continue;
1862
- const entry = { attachmentId: ref.attachmentId, kind: block.type };
1892
+ const entry = { attachmentId: ref.attachmentId, kind: block.type, attachment: block.attachment };
1863
1893
  if (typeof ref.name === "string" && ref.name !== "") entry.name = ref.name;
1864
1894
  refs.push(entry);
1865
1895
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dsh-recall-plugin",
3
- "version": "2.5.1",
3
+ "version": "2.5.2",
4
4
  "description": "在 DSH 中撤回自己发过的消息:工作区文件与对话历史一起回到那条消息发出之前,消息的文本与附件自动放回输入框,改完即可重发。文件走独立影子 git 快照(不碰项目自身的 git),对话走官方 sessions.fork,原会话归档可找回。",
5
5
  "icon": "assets/icon.svg",
6
6
  "type": "module",
@@ -75,19 +75,20 @@
75
75
  "0.2.1-alpha.5": "compatible",
76
76
  "0.2.1-rc.1": "compatible",
77
77
  "0.2.1-rc.2": "compatible",
78
- "0.2.1-rc.3": "compatible"
78
+ "0.2.1-rc.3": "compatible",
79
+ "0.2.2-alpha.2": "compatible"
79
80
  }
80
81
  }
81
82
  },
82
83
  "peerDependencies": {
83
- "@deepseek-ai/cordis": "^4.0.1 || >=4.0.5-alpha.1 <4.0.6",
84
- "@deepseek-ai/dsh-host-webserver": ">=0.1.2-alpha.1 <0.1.3 || >=0.1.3-alpha.1 <0.1.4 || >=0.1.5-alpha.1 <0.1.6 || >=0.1.6-alpha.1 <0.1.7 || >=0.1.7-alpha.1 <0.1.8 || >=0.2.0-rc.1 <0.2.1 || >=0.2.1-alpha.1 <0.3.0",
85
- "@deepseek-ai/dsh-sandbox-policy": ">=0.1.2-alpha.1 <0.1.3 || >=0.1.3-alpha.1 <0.1.4 || >=0.1.5-alpha.1 <0.1.6 || >=0.1.6-alpha.1 <0.1.7 || >=0.1.7-alpha.1 <0.1.8 || >=0.2.0-rc.1 <0.2.1 || >=0.2.1-alpha.1 <0.3.0",
86
- "@deepseek-ai/dsh-session": ">=0.1.2-alpha.1 <0.1.3 || >=0.1.3-alpha.1 <0.1.4 || >=0.1.5-alpha.1 <0.1.6 || >=0.1.6-alpha.1 <0.1.7 || >=0.1.7-alpha.1 <0.1.8 || >=0.2.0-rc.1 <0.2.1 || >=0.2.1-alpha.1 <0.3.0",
87
- "@deepseek-ai/dsh-session-query": ">=0.1.2-alpha.1 <0.1.3 || >=0.1.3-alpha.1 <0.1.4 || >=0.1.5-alpha.1 <0.1.6 || >=0.1.6-alpha.1 <0.1.7 || >=0.1.7-alpha.1 <0.1.8 || >=0.2.0-rc.1 <0.2.1 || >=0.2.1-alpha.1 <0.3.0",
88
- "@deepseek-ai/dsh-settings": ">=0.1.2-alpha.1 <0.1.3 || >=0.1.3-alpha.1 <0.1.4 || >=0.1.5-alpha.1 <0.1.6 || >=0.1.6-alpha.1 <0.1.7 || >=0.1.7-alpha.1 <0.1.8 || >=0.2.0-rc.1 <0.2.1 || >=0.2.1-alpha.1 <0.3.0",
89
- "@deepseek-ai/dsh-shell": ">=0.1.2-alpha.1 <0.1.3 || >=0.1.3-alpha.1 <0.1.4 || >=0.1.5-alpha.1 <0.1.6 || >=0.1.6-alpha.1 <0.1.7 || >=0.1.7-alpha.1 <0.1.8 || >=0.2.0-rc.1 <0.2.1 || >=0.2.1-alpha.1 <0.3.0",
90
- "@deepseek-ai/schemastery": "^3.18.1 || >=3.18.5-alpha.1 <3.18.6",
84
+ "@deepseek-ai/cordis": "^4.0.1 || >=4.0.5-alpha.1 <4.0.6 || >=4.0.6-alpha.1 <4.0.7",
85
+ "@deepseek-ai/dsh-host-webserver": ">=0.1.2-alpha.1 <0.1.3 || >=0.1.3-alpha.1 <0.1.4 || >=0.1.5-alpha.1 <0.1.6 || >=0.1.6-alpha.1 <0.1.7 || >=0.1.7-alpha.1 <0.1.8 || >=0.2.0-rc.1 <0.2.1 || >=0.2.1-alpha.1 <0.3.0 || >=0.2.2-alpha.1 <0.3.0",
86
+ "@deepseek-ai/dsh-sandbox-policy": ">=0.1.2-alpha.1 <0.1.3 || >=0.1.3-alpha.1 <0.1.4 || >=0.1.5-alpha.1 <0.1.6 || >=0.1.6-alpha.1 <0.1.7 || >=0.1.7-alpha.1 <0.1.8 || >=0.2.0-rc.1 <0.2.1 || >=0.2.1-alpha.1 <0.3.0 || >=0.2.2-alpha.1 <0.3.0",
87
+ "@deepseek-ai/dsh-session": ">=0.1.2-alpha.1 <0.1.3 || >=0.1.3-alpha.1 <0.1.4 || >=0.1.5-alpha.1 <0.1.6 || >=0.1.6-alpha.1 <0.1.7 || >=0.1.7-alpha.1 <0.1.8 || >=0.2.0-rc.1 <0.2.1 || >=0.2.1-alpha.1 <0.3.0 || >=0.2.2-alpha.1 <0.3.0",
88
+ "@deepseek-ai/dsh-session-query": ">=0.1.2-alpha.1 <0.1.3 || >=0.1.3-alpha.1 <0.1.4 || >=0.1.5-alpha.1 <0.1.6 || >=0.1.6-alpha.1 <0.1.7 || >=0.1.7-alpha.1 <0.1.8 || >=0.2.0-rc.1 <0.2.1 || >=0.2.1-alpha.1 <0.3.0 || >=0.2.2-alpha.1 <0.3.0",
89
+ "@deepseek-ai/dsh-settings": ">=0.1.2-alpha.1 <0.1.3 || >=0.1.3-alpha.1 <0.1.4 || >=0.1.5-alpha.1 <0.1.6 || >=0.1.6-alpha.1 <0.1.7 || >=0.1.7-alpha.1 <0.1.8 || >=0.2.0-rc.1 <0.2.1 || >=0.2.1-alpha.1 <0.3.0 || >=0.2.2-alpha.1 <0.3.0",
90
+ "@deepseek-ai/dsh-shell": ">=0.1.2-alpha.1 <0.1.3 || >=0.1.3-alpha.1 <0.1.4 || >=0.1.5-alpha.1 <0.1.6 || >=0.1.6-alpha.1 <0.1.7 || >=0.1.7-alpha.1 <0.1.8 || >=0.2.0-rc.1 <0.2.1 || >=0.2.1-alpha.1 <0.3.0 || >=0.2.2-alpha.1 <0.3.0",
91
+ "@deepseek-ai/schemastery": "^3.18.1 || >=3.18.5-alpha.1 <3.18.6 || >=3.18.6-alpha.1 <3.18.7",
91
92
  "react": "^18.2.0"
92
93
  },
93
94
  "peerDependenciesMeta": {