dsh-mnemon 0.4.5 → 0.4.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/README.md CHANGED
@@ -24,7 +24,7 @@
24
24
  <p align="center">
25
25
  <a href="./docs/en/capabilities.md"><strong>Explore the capability map</strong></a> ·
26
26
  <a href="./docs/en/getting-started.md">Start in five minutes</a> ·
27
- <a href="./docs/en/releases/v0.4.5.md">Read the v0.4.5 notes</a> ·
27
+ <a href="./docs/en/releases/v0.4.7.md">Read the v0.4.7 notes</a> ·
28
28
  <a href="https://github.com/omdsh-dev/dsh-mnemon/blob/e6ca446e45bdd17991f3c7c98560456de465282b/docs/assets/media/dsh-mnemon-memory-system-demo.mp4">Watch the widescreen demo</a>
29
29
  </p>
30
30
 
@@ -46,6 +46,10 @@ v0.4.4 fixes session history failures on older DSH hosts by supporting both sess
46
46
 
47
47
  v0.4.5 registers Memory System with an installed Better Sidebar while keeping the normal DSH Sidebar entry and both client activation orders working. See the [patch release notes](./docs/en/releases/v0.4.5.md).
48
48
 
49
+ v0.4.6 keeps DSH 0.1.1-rc.2 as the stable baseline while adding capability-detected support for the Session event snapshots used by DSH 0.1.2-alpha.4 and alpha.5. See the [patch release notes](./docs/en/releases/v0.4.6.md).
50
+
51
+ v0.4.7 promotes the published DSH 0.1.2-rc.1 release to the stable registry baseline, keeps source verification against its alpha.5 predecessor, and retains a real WebUI regression on the previous 0.1.1-rc.2 line. See the [patch release notes](./docs/en/releases/v0.4.7.md).
52
+
49
53
  ## Understand the scope in 30 seconds
50
54
 
51
55
  | Tier | Keep here | How it reaches the Agent | Managed by |
@@ -120,10 +124,10 @@ Windows users can install the official v0.2.3-or-newer release ZIP. The expected
120
124
 
121
125
  ### 2. Install DSH and the plugin
122
126
 
123
- The registry installation remains verified against DSH 0.1.1-rc.2, whose complete profiles require Node.js `^22.19.0 || >=24.0.0`; Node 20 lacks host primitives used by rc.2. Source compatibility is also verified against the source-only DSH 0.1.2-alpha.1 preview; it is not an npm installation target. The dsh-mnemon package itself retains Node.js 20 compatibility for older compatible DSH hosts. Use the exact published version below for a reproducible installation; plugin authors can follow the [alpha source workflow](./docs/en/development.md#dsh-012-alpha1-source-verification).
127
+ The registry installation is verified against stable DSH 0.1.2-rc.1, whose complete profiles require Node.js `^22.19.0 || >=24.0.0`. The immediately preceding DSH 0.1.2-alpha.5 remains covered from source, and the previous 0.1.1-rc.2 registry line remains a backward-regression target. The dsh-mnemon package itself retains Node.js 20 compatibility for older compatible DSH hosts. Use the exact published version below for a reproducible installation; plugin authors can follow the [alpha source workflow](./docs/en/development.md#dsh-012-alpha5-source-compatibility).
124
128
 
125
129
  ```sh
126
- npm install -g @deepseek-ai/dsh@0.1.1-rc.2
130
+ npm install -g @deepseek-ai/dsh@0.1.2-rc.1
127
131
  dsh --version
128
132
  ```
129
133
 
@@ -132,6 +136,8 @@ dsh plugin --profile web add dsh-mnemon
132
136
  dsh --profile web
133
137
  ```
134
138
 
139
+ When the Web profile is published under a cloud hostname, stable DSH 0.1.2-rc.1 needs an HTTPS reverse proxy or access gateway, an explicit trusted authority, and the one-time launch URL printed at Host startup. Follow the [cloud-hosted WebUI procedure](./docs/en/operations.md#cloud-hosted-webui); do not expose the loopback service directly.
140
+
135
141
  DSH profiles have independent plugin rosters. Install the same package separately for one-shot Headless tasks:
136
142
 
137
143
  ```sh
@@ -220,7 +226,7 @@ See [Operations, security, and troubleshooting](./docs/en/operations.md) for bac
220
226
  | Back up, update, or troubleshoot | [Operations](./docs/en/operations.md) |
221
227
  | Integrate tools, commands, or RPC | [Interface reference](./docs/en/interfaces.md) |
222
228
  | Build a Layer, Adapter, Strategy, Guard, or MemorySource extension | [Extension guide](./docs/en/extensions.md) |
223
- | Review the release | [v0.4.5 release notes](./docs/en/releases/v0.4.5.md) |
229
+ | Review the release | [v0.4.7 release notes](./docs/en/releases/v0.4.7.md) |
224
230
 
225
231
  See the [documentation hub](./docs/en/README.md) for the full map.
226
232
 
package/README.zh-CN.md CHANGED
@@ -24,7 +24,7 @@
24
24
  <p align="center">
25
25
  <a href="./docs/zh-CN/capabilities.md"><strong>先看能力地图</strong></a> ·
26
26
  <a href="./docs/zh-CN/getting-started.md">5 分钟开始</a> ·
27
- <a href="./docs/zh-CN/releases/v0.4.5.md">v0.4.5 升级说明</a> ·
27
+ <a href="./docs/zh-CN/releases/v0.4.7.md">v0.4.7 升级说明</a> ·
28
28
  <a href="https://github.com/omdsh-dev/dsh-mnemon/blob/e6ca446e45bdd17991f3c7c98560456de465282b/docs/assets/media/dsh-mnemon-memory-system-demo.mp4">观看宽屏实机演示</a>
29
29
  </p>
30
30
 
@@ -46,6 +46,10 @@ v0.4.4 同时支持新旧 DSH 会话投影接口,修复旧版宿主读取会
46
46
 
47
47
  v0.4.5 在已安装 Better Sidebar 时向其注册记忆系统,同时保留 DSH 普通 Sidebar 入口,并兼容两种客户端加载顺序。详见[补丁发布说明](./docs/zh-CN/releases/v0.4.5.md)。
48
48
 
49
+ v0.4.6 继续以 DSH 0.1.1-rc.2 作为稳定基线,并通过能力检测兼容 DSH 0.1.2-alpha.4 与 alpha.5 的 Session 事件快照接口。详见[补丁发布说明](./docs/zh-CN/releases/v0.4.6.md)。
50
+
51
+ v0.4.7 将已发布的 DSH 0.1.2-rc.1 提升为稳定的 registry 基线,继续对其 alpha.5 前序版本执行源码验证,并保留上一条 0.1.1-rc.2 版本线的真实 WebUI 回归。详见[补丁发布说明](./docs/zh-CN/releases/v0.4.7.md)。
52
+
49
53
  ## 30 秒理解能力边界
50
54
 
51
55
  | 层级 | 适合保存 | 如何进入 Agent 上下文 | 由谁管理 |
@@ -120,10 +124,10 @@ Windows 推荐安装 v0.2.3 或更高版本的官方 ZIP;标准安装目录与
120
124
 
121
125
  ### 2. 安装 DSH 与插件
122
126
 
123
- Registry 安装仍以 DSH 0.1.1-rc.2 验证;其完整 profile 需要 Node.js `^22.19.0 || >=24.0.0`,Node 20 缺少 rc.2 使用的宿主原语。源码兼容性也已针对仅提供源码的 DSH 0.1.2-alpha.1 预览版验证;它不是 npm 安装目标。dsh-mnemon 包本身仍为较旧且兼容的 DSH Host 保留 Node.js 20 支持。下面显式指定已发布版本以保证可复现安装;插件作者可参照 [alpha 源码验证流程](./docs/zh-CN/development.md#dsh-012-alpha1-源码验证)。
127
+ Registry 安装以稳定的 DSH 0.1.2-rc.1 验证;其完整 profile 需要 Node.js `^22.19.0 || >=24.0.0`。它的直接前序版本 DSH 0.1.2-alpha.5 继续通过源码覆盖,上一条 0.1.1-rc.2 registry 版本线则保留为向后回归目标。dsh-mnemon 包本身仍为较旧且兼容的 DSH Host 保留 Node.js 20 支持。下面显式指定已发布版本以保证可复现安装;插件作者可参照 [alpha 源码兼容流程](./docs/zh-CN/development.md#dsh-012-alpha5-源码兼容)。
124
128
 
125
129
  ```sh
126
- npm install -g @deepseek-ai/dsh@0.1.1-rc.2
130
+ npm install -g @deepseek-ai/dsh@0.1.2-rc.1
127
131
  dsh --version
128
132
  ```
129
133
 
@@ -132,6 +136,8 @@ dsh plugin --profile web add dsh-mnemon
132
136
  dsh --profile web
133
137
  ```
134
138
 
139
+ 将 Web profile 发布到云端域名时,稳定版 DSH 0.1.2-rc.1 需要 HTTPS 反向代理或访问网关、显式可信 authority,以及 Host 启动时输出的一次性启动 URL。请按[云端 WebUI 操作步骤](./docs/zh-CN/operations.md#cloud-hosted-webui)配置,不要把回环服务直接暴露到公网。
140
+
135
141
  DSH 各 profile 的插件清单彼此独立。一次性 Headless 任务需要单独安装:
136
142
 
137
143
  ```sh
@@ -220,7 +226,7 @@ dsh plugin --profile headless add "link:/absolute/path/to/dsh-mnemon"
220
226
  | 备份、更新或排障 | [运维指南](./docs/zh-CN/operations.md) |
221
227
  | 接入工具、命令或 RPC | [接口参考](./docs/zh-CN/interfaces.md) |
222
228
  | 开发 Layer、Adapter、Strategy、Guard 或 MemorySource 扩展 | [扩展开发指南](./docs/zh-CN/extensions.md) |
223
- | 查看本次升级 | [v0.4.5 发布说明](./docs/zh-CN/releases/v0.4.5.md) |
229
+ | 查看本次升级 | [v0.4.7 发布说明](./docs/zh-CN/releases/v0.4.7.md) |
224
230
 
225
231
  完整目录见[文档中心](./docs/zh-CN/README.md)。
226
232
 
package/lib/index.js CHANGED
@@ -6085,6 +6085,29 @@ var LiveMnemonRuntime = class {
6085
6085
  }
6086
6086
  };
6087
6087
  //#endregion
6088
+ //#region src/session-events.ts
6089
+ function eventArray(value) {
6090
+ return Array.isArray(value) ? value : void 0;
6091
+ }
6092
+ /**
6093
+ * Materialize one immutable event-log snapshot across supported DSH releases.
6094
+ * Capability detection keeps alpha and stable rc behavior on one code path.
6095
+ */
6096
+ function hostSessionEvents(session) {
6097
+ if (typeof session.snapshotEvents === "function") {
6098
+ const events = eventArray(session.snapshotEvents());
6099
+ if (events !== void 0) return events;
6100
+ }
6101
+ const events = eventArray(session.events);
6102
+ if (events !== void 0) return events;
6103
+ throw new TypeError("Unsupported DSH Session event API: expected snapshotEvents() or events[]");
6104
+ }
6105
+ /** Read one exact event without materializing the alpha log when possible. */
6106
+ function hostSessionEventAt(session, seq) {
6107
+ if (typeof session.eventAt === "function") return session.eventAt(seq);
6108
+ return hostSessionEvents(session)[seq];
6109
+ }
6110
+ //#endregion
6088
6111
  //#region src/subagent.ts
6089
6112
  function isAgentRuntimeSource$1(value) {
6090
6113
  return typeof value === "object" && value !== null && "forAgent" in value && typeof value.forAgent === "function";
@@ -6519,7 +6542,7 @@ function subagentFailureDetail(run, result) {
6519
6542
  const diagnostic = safeFailureDetail(result.diagnostic);
6520
6543
  if (diagnostic !== "") return diagnostic;
6521
6544
  }
6522
- const events = run.localAgent?.session.events ?? [];
6545
+ const events = run.localAgent === void 0 ? [] : hostSessionEvents(run.localAgent.session);
6523
6546
  for (let index = events.length - 1; index >= 0; index -= 1) {
6524
6547
  const event = events[index];
6525
6548
  if (event?.type !== "turn/end") continue;
@@ -7877,7 +7900,7 @@ function agentMemoryScope(agent, graph) {
7877
7900
  /** The durable log, not a parent session id, identifies the executing turn. */
7878
7901
  function openAgentTurn(agent) {
7879
7902
  let open;
7880
- for (const event of agent.session.events) {
7903
+ for (const event of hostSessionEvents(agent.session)) {
7881
7904
  const turn = typeof event.data.turn === "number" ? event.data.turn : void 0;
7882
7905
  if (event.type === "turn/start" && turn !== void 0) open = turn;
7883
7906
  else if (event.type === "turn/end" && turn === open) open = void 0;
@@ -8181,7 +8204,7 @@ var MnemonAgentLifecycle = class {
8181
8204
  startSource: this.startSource,
8182
8205
  primePending: this.primePending,
8183
8206
  guidedTurns: this.guidedTurns.size,
8184
- memoryToolCalls: memoryToolCalls(this.agent.session.events),
8207
+ memoryToolCalls: memoryToolCalls(hostSessionEvents(this.agent.session)),
8185
8208
  idleReviewPending: this.idleReviewTimer !== void 0,
8186
8209
  reviewRunning: this.reviewRunning,
8187
8210
  reviewActivity: this.reviewActivity(),
@@ -8200,11 +8223,11 @@ var MnemonAgentLifecycle = class {
8200
8223
  }
8201
8224
  /** Incremental snapshot of settled Mnemon activity in this durable log. */
8202
8225
  turnMemoryActivities() {
8203
- return this.memoryActivity.snapshot(this.agent.session.events);
8226
+ return this.memoryActivity.snapshot(hostSessionEvents(this.agent.session));
8204
8227
  }
8205
8228
  /** Plain text of one finalized assistant message, from this agent's session log. */
8206
8229
  assistantMessageText(messageId) {
8207
- return assistantMessageText(this.agent.session.events, messageId);
8230
+ return assistantMessageText(hostSessionEvents(this.agent.session), messageId);
8208
8231
  }
8209
8232
  memoryWake() {
8210
8233
  const pinned = this.memoryTurn?.current;
@@ -8225,7 +8248,7 @@ var MnemonAgentLifecycle = class {
8225
8248
  cueAlreadyVisible() {
8226
8249
  const nodes = this.agent.session.surface?.nodes;
8227
8250
  if (nodes === void 0) return this.cueInjected;
8228
- for (const seq of nodes) if (isOwnUserMessageEvent(this.agent.session.events[seq])) return true;
8251
+ for (const seq of nodes) if (isOwnUserMessageEvent(hostSessionEventAt(this.agent.session, seq))) return true;
8229
8252
  return false;
8230
8253
  }
8231
8254
  /**
@@ -8315,14 +8338,14 @@ var MnemonAgentLifecycle = class {
8315
8338
  if (!this.config.lifecycleEnabled || !this.config.writeEnabled || this.config.writebackMode !== "guided") return;
8316
8339
  this.cancelIdleReview(true);
8317
8340
  const activity = this.ensureTurnActivity(turn);
8318
- const tools = completedToolActivity(this.agent.session.events, turn);
8341
+ const tools = completedToolActivity(hostSessionEvents(this.agent.session), turn);
8319
8342
  activity.toolCallCount = tools.count;
8320
8343
  activity.toolNames = tools.names;
8321
8344
  if (!this.reviewActivity().eligible || !this.reviewAdmitted(turn)) return;
8322
8345
  this.idleReviewTimer = setTimeout(() => {
8323
8346
  this.idleReviewTimer = void 0;
8324
8347
  if (this.agent.status !== "idle") return;
8325
- if (!this.agent.session.events.some((event) => event.type === "turn/end" && eventTurn(event) === turn) || !this.reviewActivity().eligible || !this.reviewAdmitted(turn)) return;
8348
+ if (!hostSessionEvents(this.agent.session).some((event) => event.type === "turn/end" && eventTurn(event) === turn) || !this.reviewActivity().eligible || !this.reviewAdmitted(turn)) return;
8326
8349
  this.runIdleReview();
8327
8350
  }, this.config.idleReviewMs);
8328
8351
  }
@@ -8394,7 +8417,7 @@ var MnemonAgentLifecycle = class {
8394
8417
  explicitCandidate ||= activity.explicitCandidate;
8395
8418
  completedNonMemoryTool ||= activity.toolCallCount > 0 && [...activity.toolNames].some((name) => !name.startsWith("mnemon_"));
8396
8419
  }
8397
- const assistantTextLength = this.agent.session.events.filter((event) => {
8420
+ const assistantTextLength = hostSessionEvents(this.agent.session).filter((event) => {
8398
8421
  const turn = eventTurn(event);
8399
8422
  return turn !== void 0 && turns.has(turn);
8400
8423
  }).map(assistantEventTextLength).reduce((total, length) => total + length, 0);
@@ -1,4 +1,4 @@
1
- import type { SnapshotSelectorHook } from '@deepseek-ai/dsh-client-ui-slots';
1
+ import type { SnapshotSelectorHook } from '@deepseek-ai/dsh-client-store';
2
2
  import type { MnemonClientContext, MnemonSessionListState } from './dsh-compat.ts';
3
3
  export declare const MNEMON_SUBAGENT_TOKEN_USAGE_KEY = "mnemonSubagentTokenUsage";
4
4
  export interface MnemonTokenUsageProjection {
@@ -129,6 +129,34 @@ export interface HostSessionEvent {
129
129
  time?: number;
130
130
  data: Record<string, unknown>;
131
131
  }
132
+ /**
133
+ * Minimum session log surface shared by the stable DSH rc line and the 0.1.2
134
+ * alpha line. rc.2 exposes the immutable log through `events`; alpha.4+
135
+ * replaces that property with range snapshots and indexed reads.
136
+ */
137
+ export interface HostSession {
138
+ header?: {
139
+ origin?: 'subagent';
140
+ parentSession?: string;
141
+ delegationDepth?: number;
142
+ cwd?: string;
143
+ agentPreset?: string;
144
+ };
145
+ /** Stable rc.2 event-log accessor. */
146
+ events?: readonly HostSessionEvent[];
147
+ /** DSH 0.1.2-alpha.4+ event-log accessor. */
148
+ snapshotEvents?(fromSeq?: number, toSeqExclusive?: number): readonly HostSessionEvent[];
149
+ /** DSH 0.1.2-alpha.4+ indexed event accessor. */
150
+ eventAt?(seq: number): HostSessionEvent | undefined;
151
+ /**
152
+ * Model-visible event sequences, in order. Optional because not every host
153
+ * publishes a surface projection; when absent, callers fall back to
154
+ * session-scoped state.
155
+ */
156
+ surface?: {
157
+ readonly nodes: readonly number[];
158
+ };
159
+ }
132
160
  export type HostPreStepDecision = {
133
161
  kind: 'reject';
134
162
  } | {
@@ -156,24 +184,7 @@ export interface HostAgent {
156
184
  model?: string;
157
185
  maxTokens?: number;
158
186
  };
159
- session: {
160
- header?: {
161
- origin?: 'subagent';
162
- parentSession?: string;
163
- delegationDepth?: number;
164
- cwd?: string;
165
- agentPreset?: string;
166
- };
167
- events: readonly HostSessionEvent[];
168
- /**
169
- * Model-visible event sequences, in order. Optional because not every host
170
- * publishes a surface projection; when absent, callers fall back to
171
- * session-scoped state.
172
- */
173
- surface?: {
174
- readonly nodes: readonly number[];
175
- };
176
- };
187
+ session: HostSession;
177
188
  ctx: HostAgentContext;
178
189
  followup(message: HostUserMessage): void;
179
190
  steer(message: HostUserMessage): void;
@@ -0,0 +1,8 @@
1
+ import type { HostSession, HostSessionEvent } from './contracts.ts';
2
+ /**
3
+ * Materialize one immutable event-log snapshot across supported DSH releases.
4
+ * Capability detection keeps alpha and stable rc behavior on one code path.
5
+ */
6
+ export declare function hostSessionEvents(session: HostSession): readonly HostSessionEvent[];
7
+ /** Read one exact event without materializing the alpha log when possible. */
8
+ export declare function hostSessionEventAt(session: HostSession, seq: number): HostSessionEvent | undefined;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dsh-mnemon",
3
- "version": "0.4.5",
3
+ "version": "0.4.7",
4
4
  "description": "Composable three-tier memory control plane for DeepSeek Harness: persistent runtime context, searchable project documents, pluggable long-term memory, guarded strategies, WebUI, and headless tools.",
5
5
  "keywords": [
6
6
  "deepseek-harness",
@@ -150,28 +150,30 @@
150
150
  },
151
151
  "devDependencies": {
152
152
  "@arethetypeswrong/cli": "^0.18.5",
153
- "@deepseek-ai/cordis": "^4.0.1",
154
- "@deepseek-ai/dsh": "0.1.1-rc.2",
155
- "@deepseek-ai/dsh-agent": "0.1.1-rc.2",
156
- "@deepseek-ai/dsh-agent-loop": "0.1.1-rc.2",
157
- "@deepseek-ai/dsh-client-connection": "0.1.1-rc.2",
158
- "@deepseek-ai/dsh-client-locale": "0.1.1-rc.2",
159
- "@deepseek-ai/dsh-client-ui-conversation": "0.1.1-rc.2",
160
- "@deepseek-ai/dsh-client-ui-primitives": "0.1.1-rc.2",
161
- "@deepseek-ai/dsh-client-ui-renderer": "0.1.1-rc.2",
162
- "@deepseek-ai/dsh-client-ui-settings": "0.1.1-rc.2",
163
- "@deepseek-ai/dsh-client-ui-slots": "0.1.1-rc.2",
164
- "@deepseek-ai/dsh-client-ui-tool": "0.1.1-rc.2",
165
- "@deepseek-ai/dsh-llm": "0.1.1-rc.2",
166
- "@deepseek-ai/dsh-session": "0.1.1-rc.2",
167
- "@deepseek-ai/dsh-session-persistence-jsonl": "0.1.1-rc.2",
168
- "@deepseek-ai/dsh-session-projection": "0.1.1-rc.2",
153
+ "@deepseek-ai/cordis": "^4.0.2",
154
+ "@deepseek-ai/dsh": "0.1.2-rc.1",
155
+ "@deepseek-ai/dsh-agent": "0.1.2-rc.1",
156
+ "@deepseek-ai/dsh-agent-loop": "0.1.2-rc.1",
157
+ "@deepseek-ai/dsh-client-connection": "0.1.2-rc.1",
158
+ "@deepseek-ai/dsh-client-locale": "0.1.2-rc.1",
159
+ "@deepseek-ai/dsh-client-store": "0.1.2-rc.1",
160
+ "@deepseek-ai/dsh-client-ui-conversation": "0.1.2-rc.1",
161
+ "@deepseek-ai/dsh-client-ui-primitives": "0.1.2-rc.1",
162
+ "@deepseek-ai/dsh-client-ui-renderer": "0.1.2-rc.1",
163
+ "@deepseek-ai/dsh-client-ui-settings": "0.1.2-rc.1",
164
+ "@deepseek-ai/dsh-client-ui-slots": "0.1.2-rc.1",
165
+ "@deepseek-ai/dsh-client-ui-tool": "0.1.2-rc.1",
166
+ "@deepseek-ai/dsh-invariants": "0.1.2-rc.1",
167
+ "@deepseek-ai/dsh-llm": "0.1.2-rc.1",
168
+ "@deepseek-ai/dsh-session": "0.1.2-rc.1",
169
+ "@deepseek-ai/dsh-session-persistence-jsonl": "0.1.2-rc.1",
170
+ "@deepseek-ai/dsh-session-projection": "0.1.2-rc.1",
169
171
  "@deepseek-ai/dsh-session-projection-legacy": "npm:@deepseek-ai/dsh-session-projection@0.1.0-rc.8",
170
- "@deepseek-ai/dsh-session-query": "0.1.1-rc.2",
171
- "@deepseek-ai/dsh-subagent": "0.1.1-rc.2",
172
- "@deepseek-ai/dsh-subagent-spawn-in-process": "0.1.1-rc.2",
173
- "@deepseek-ai/dsh-system-prompt": "0.1.1-rc.2",
174
- "@deepseek-ai/dsh-tools": "0.1.1-rc.2",
172
+ "@deepseek-ai/dsh-session-query": "0.1.2-rc.1",
173
+ "@deepseek-ai/dsh-subagent": "0.1.2-rc.1",
174
+ "@deepseek-ai/dsh-subagent-spawn-in-process": "0.1.2-rc.1",
175
+ "@deepseek-ai/dsh-system-prompt": "0.1.2-rc.1",
176
+ "@deepseek-ai/dsh-tools": "0.1.2-rc.1",
175
177
  "@testing-library/react": "^16.3.0",
176
178
  "@types/node": "^22.0.0",
177
179
  "@types/react": "^18.3.0",