@michengai/dsh-codex-pet 0.1.19 → 1.0.1
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 +11 -1
- package/CHANGELOG.zh-CN.md +11 -1
- package/README.md +2 -4
- package/README.zh-CN.md +2 -4
- package/lib/client.js +9 -136
- package/package.json +11 -11
package/CHANGELOG.md
CHANGED
|
@@ -1,6 +1,16 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
-
##
|
|
3
|
+
## [1.0.1] - 2026-10-17
|
|
4
|
+
|
|
5
|
+
- Add compatibility with DSH `0.2.1-rc.2` without dropping `0.2.0-rc.1`, `0.2.0-rc.2`, or `0.2.1-rc.1`. Pin development types and the default end-to-end host to `0.2.1-rc.2`. Cordis stays `4.0.5`.
|
|
6
|
+
- This host still provides the session APIs the pet uses, so no new host branch was added. Hosts before `0.2.0` and the `0.2.1` alphas are still rejected by the version gate, and the plugin will not run. Pet settings are not deleted.
|
|
7
|
+
|
|
8
|
+
## [1.0.0] - 2026-10-17
|
|
9
|
+
|
|
10
|
+
- Supported hosts are now DeepSeek Harness `0.2.0-rc.1`, `0.2.0-rc.2`, and `0.2.1-rc.1`. Development types and the default end-to-end host are pinned to `0.2.1-rc.1`. Cordis is `4.0.5`.
|
|
11
|
+
- Hosts before `0.2.0` are rejected by the version gate, and the plugin will not run. That includes the previously supported `0.1.2-rc.1`, `0.1.5-rc.1`, `0.1.5-rc.2`, `0.1.5-rc.3`, `0.1.7-rc.1`, and `0.1.7-rc.2`. If you still use one of those hosts, install `@michengai/dsh-codex-pet@0.1.19` instead of `@latest`.
|
|
12
|
+
- `0.2.1-alpha.1` through `0.2.1-alpha.5` are also rejected by the version gate, and the plugin will not run. The intermediate alpha hosts are no longer supported.
|
|
13
|
+
- The version gate only refuses to load the plugin. Pet selection, position, and custom pets remain under `DSH_HOME/codex-pet` (default `~/.dsh/codex-pet`) and are not deleted.
|
|
4
14
|
|
|
5
15
|
## [0.1.19] - 2026-10-14
|
|
6
16
|
|
package/CHANGELOG.zh-CN.md
CHANGED
|
@@ -1,6 +1,16 @@
|
|
|
1
1
|
# 更新日志
|
|
2
2
|
|
|
3
|
-
##
|
|
3
|
+
## [1.0.1] - 2026-10-17
|
|
4
|
+
|
|
5
|
+
- 新增 DSH `0.2.1-rc.2` 兼容,不移除已支持的 `0.2.0-rc.1`、`0.2.0-rc.2`、`0.2.1-rc.1`。开发类型和默认端到端宿主固定到 `0.2.1-rc.2`。Cordis 仍为 `4.0.5`。
|
|
6
|
+
- 该版本没有去掉宠物使用的会话接口,因此没有新增宿主分支。`0.2.0` 之前的宿主和 `0.2.1` 的 alpha 仍会被版本门拒绝,插件不会运行;宠物配置不会被删除。
|
|
7
|
+
|
|
8
|
+
## [1.0.0] - 2026-10-17
|
|
9
|
+
|
|
10
|
+
- 支持的宿主改为 DeepSeek Harness `0.2.0-rc.1`、`0.2.0-rc.2`、`0.2.1-rc.1`。开发类型和默认端到端宿主固定到 `0.2.1-rc.1`。Cordis 对齐为 `4.0.5`。
|
|
11
|
+
- `0.2.0` 之前的宿主会被版本门拒绝,插件不会运行。这包括此前支持的 `0.1.2-rc.1`、`0.1.5-rc.1`、`0.1.5-rc.2`、`0.1.5-rc.3`、`0.1.7-rc.1`、`0.1.7-rc.2`。仍在使用这些版本时,请安装 `@michengai/dsh-codex-pet@0.1.19`,不要装 `@latest`。
|
|
12
|
+
- `0.2.1-alpha.1` 至 `0.2.1-alpha.5` 同样会被版本门拒绝,插件不会运行。中间的阿尔法版本不再保留。
|
|
13
|
+
- 版本门只拒绝加载。宠物选择、位置和自定义宠物仍留在本机 `DSH_HOME/codex-pet`(默认 `~/.dsh/codex-pet`),不会被删除。
|
|
4
14
|
|
|
5
15
|
## [0.1.19] - 2026-10-14
|
|
6
16
|
|
package/README.md
CHANGED
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
|
|
19
19
|
</div>
|
|
20
20
|
|
|
21
|
-
> DSH Codex Pet is a community-maintained pet plugin for DeepSeek Harness (DSH), not an official OpenAI or DeepSeek AI product.
|
|
21
|
+
> DSH Codex Pet is a community-maintained pet plugin for DeepSeek Harness (DSH), not an official OpenAI or DeepSeek AI product. From 1.0.1 it supports DSH `0.2.0-rc.1`, `0.2.0-rc.2`, `0.2.1-rc.1`, and `0.2.1-rc.2`. Earlier hosts and the `0.2.1` alphas are rejected by the version gate, so the plugin will not run; local pet settings and custom pets are not deleted.
|
|
22
22
|
|
|
23
23
|
## Features
|
|
24
24
|
|
|
@@ -74,7 +74,7 @@ For a desktop workbench, download [DSH Codex Desktop](https://github.com/Micheng
|
|
|
74
74
|
|
|
75
75
|
## Installation
|
|
76
76
|
|
|
77
|
-
Supported DeepSeek Harness versions: **`0.1.2-rc.
|
|
77
|
+
Supported DeepSeek Harness versions: **`0.2.0-rc.1`, `0.2.0-rc.2`, `0.2.1-rc.1`, and `0.2.1-rc.2`**. Hosts before `0.2.0` (including the previously supported `0.1.2-rc.1`, `0.1.5-rc.1`, `0.1.5-rc.2`, `0.1.5-rc.3`, `0.1.7-rc.1`, and `0.1.7-rc.2`) and `0.2.1-alpha.1` through `0.2.1-alpha.5` are rejected by the version gate, and the plugin will not run. If you still use one of those hosts, install `@michengai/dsh-codex-pet@0.1.19` instead of `@latest`. The version gate only refuses to load the plugin. It does not delete pet selection, position, or custom pets under `DSH_HOME/codex-pet`. Make sure the `dsh` command is available. The example uses the `web` profile; replace it with your target profile.
|
|
78
78
|
|
|
79
79
|
```powershell
|
|
80
80
|
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8
|
|
@@ -102,8 +102,6 @@ Open **Settings → Pets** (`宠物` in the current UI), or open settings from t
|
|
|
102
102
|
|
|
103
103
|
The pet is a notification and action surface. Start new conversations and write follow-up messages in the main DSH interface.
|
|
104
104
|
|
|
105
|
-
Known issue: in DSH `0.1.5-rc.2`, stopping a task before the model starts responding may cause the pet to show a failure notification.
|
|
106
|
-
|
|
107
105
|
### Create a custom pet
|
|
108
106
|
|
|
109
107
|
1. Open pet settings, click **Create** (`创建`), and describe the companion.
|
package/README.zh-CN.md
CHANGED
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
|
|
19
19
|
</div>
|
|
20
20
|
|
|
21
|
-
> DSH Codex Pet 是社区维护的 DeepSeek Harness(DSH)宠物插件,并非 OpenAI 或 DeepSeek AI 官方产品。
|
|
21
|
+
> DSH Codex Pet 是社区维护的 DeepSeek Harness(DSH)宠物插件,并非 OpenAI 或 DeepSeek AI 官方产品。1.0.1 起支持 DSH `0.2.0-rc.1`、`0.2.0-rc.2`、`0.2.1-rc.1`、`0.2.1-rc.2`。更早的宿主和 `0.2.1` 的 alpha 会被版本门拒绝,插件不会运行;本机宠物配置和自定义宠物不会因此删除。
|
|
22
22
|
|
|
23
23
|
## 功能概览
|
|
24
24
|
|
|
@@ -74,7 +74,7 @@
|
|
|
74
74
|
|
|
75
75
|
## 安装
|
|
76
76
|
|
|
77
|
-
支持的 DeepSeek Harness 版本:**`0.1.2-rc.
|
|
77
|
+
支持的 DeepSeek Harness 版本:**`0.2.0-rc.1`、`0.2.0-rc.2`、`0.2.1-rc.1`、`0.2.1-rc.2`**。`0.2.0` 之前的宿主(包括此前支持的 `0.1.2-rc.1`、`0.1.5-rc.1`、`0.1.5-rc.2`、`0.1.5-rc.3`、`0.1.7-rc.1`、`0.1.7-rc.2`)以及 `0.2.1-alpha.1` 至 `0.2.1-alpha.5` 会被版本门拒绝,插件不会运行。仍在使用这些宿主时,请安装 `@michengai/dsh-codex-pet@0.1.19`,不要装 `@latest`。版本门只拒绝加载,不删除 `DSH_HOME/codex-pet` 里的宠物选择、位置和自定义宠物。需要可用的 `dsh` 命令。以下示例使用 `web` profile,请按实际环境替换。
|
|
78
78
|
|
|
79
79
|
```powershell
|
|
80
80
|
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8
|
|
@@ -102,8 +102,6 @@ dsh plugin --profile web add @michengai/dsh-codex-pet@latest --registry=https://
|
|
|
102
102
|
|
|
103
103
|
宠物承担通知和待处理操作。新建会话、输入后续消息仍在 DSH 主界面完成。
|
|
104
104
|
|
|
105
|
-
已知问题:在 DSH `0.1.5-rc.2` 中,若模型尚未开始响应就停止任务,宠物可能显示失败通知。
|
|
106
|
-
|
|
107
105
|
### 创建自定义宠物
|
|
108
106
|
|
|
109
107
|
1. 打开宠物设置,点击 **创建**,描述想要的伙伴。
|
package/lib/client.js
CHANGED
|
@@ -39,7 +39,6 @@ module.exports = __toCommonJS(client_exports);
|
|
|
39
39
|
|
|
40
40
|
// src/session-compat.ts
|
|
41
41
|
function compatibleSessions(sessions, navigate, status) {
|
|
42
|
-
const cache = /* @__PURE__ */ new WeakMap();
|
|
43
42
|
const refs = /* @__PURE__ */ new Map();
|
|
44
43
|
const sweep = () => {
|
|
45
44
|
const ids = new Set(sessions.list?.getSnapshot?.()?.ids ?? []);
|
|
@@ -56,7 +55,7 @@ function compatibleSessions(sessions, navigate, status) {
|
|
|
56
55
|
list: sessions.list,
|
|
57
56
|
status: status ?? sessions.status,
|
|
58
57
|
using: sessions.using?.bind(sessions),
|
|
59
|
-
open:
|
|
58
|
+
open: navigate,
|
|
60
59
|
create: (options) => {
|
|
61
60
|
if (!sessions.create) throw new Error("\u521B\u5EFA\u4F1A\u8BDD\u5C1A\u4E0D\u53EF\u7528\uFF0C\u8BF7\u91CD\u8BD5");
|
|
62
61
|
return sessions.create(options);
|
|
@@ -76,29 +75,7 @@ function compatibleSessions(sessions, navigate, status) {
|
|
|
76
75
|
}
|
|
77
76
|
binding = ref.binding;
|
|
78
77
|
}
|
|
79
|
-
|
|
80
|
-
const cached = cache.get(binding);
|
|
81
|
-
if (cached) return cached;
|
|
82
|
-
let lastSeq = -1, initialized = false;
|
|
83
|
-
let snapshot = { revision: 0, change: { kind: "replace", entries: [] } };
|
|
84
|
-
const eventSource = {
|
|
85
|
-
getSnapshot() {
|
|
86
|
-
const state = binding.session.getSnapshot();
|
|
87
|
-
if (state.openState === "cold" || state.openState === "loading") initialized = false;
|
|
88
|
-
const events = [...state.chat?.timeline.turns.values() ?? []].flatMap((turn) => [turn.start, turn.end]).filter((entry) => !!entry).sort((a, b) => a.seq - b.seq);
|
|
89
|
-
const additions = events.filter((entry) => entry.seq > lastSeq);
|
|
90
|
-
if (additions.length) {
|
|
91
|
-
lastSeq = additions.at(-1).seq;
|
|
92
|
-
snapshot = { revision: snapshot.revision + 1, change: { kind: initialized ? "append" : "replace", entries: additions.map((entry) => ({ type: "event", event: entry })) } };
|
|
93
|
-
}
|
|
94
|
-
initialized = state.openState === void 0 || state.openState === "open";
|
|
95
|
-
return snapshot;
|
|
96
|
-
},
|
|
97
|
-
subscribe: (listener) => binding.session.subscribe(listener)
|
|
98
|
-
};
|
|
99
|
-
const adapted = { ...binding, eventSource };
|
|
100
|
-
cache.set(binding, adapted);
|
|
101
|
-
return adapted;
|
|
78
|
+
return binding;
|
|
102
79
|
}
|
|
103
80
|
};
|
|
104
81
|
}
|
|
@@ -128,104 +105,6 @@ function pendingFromSessionStatus(status) {
|
|
|
128
105
|
};
|
|
129
106
|
}
|
|
130
107
|
|
|
131
|
-
// src/legacy-pending.ts
|
|
132
|
-
function compatiblePending(sessions, resolveModern) {
|
|
133
|
-
const legacy = legacyPending(sessions);
|
|
134
|
-
const listeners = /* @__PURE__ */ new Set();
|
|
135
|
-
let source = legacy;
|
|
136
|
-
let off;
|
|
137
|
-
let timer;
|
|
138
|
-
const notify = () => {
|
|
139
|
-
for (const listener of listeners) listener();
|
|
140
|
-
};
|
|
141
|
-
const sync = () => {
|
|
142
|
-
const next = resolveModern() ?? legacy;
|
|
143
|
-
if (next === source && off) return;
|
|
144
|
-
off?.();
|
|
145
|
-
source = next;
|
|
146
|
-
off = listeners.size ? source.subscribe(notify) : void 0;
|
|
147
|
-
notify();
|
|
148
|
-
};
|
|
149
|
-
return {
|
|
150
|
-
getSnapshot: () => source.getSnapshot(),
|
|
151
|
-
subscribe(listener) {
|
|
152
|
-
listeners.add(listener);
|
|
153
|
-
if (!timer) {
|
|
154
|
-
sync();
|
|
155
|
-
timer = setInterval(sync, 250);
|
|
156
|
-
}
|
|
157
|
-
return () => {
|
|
158
|
-
listeners.delete(listener);
|
|
159
|
-
if (!listeners.size) {
|
|
160
|
-
clearInterval(timer);
|
|
161
|
-
timer = void 0;
|
|
162
|
-
off?.();
|
|
163
|
-
off = void 0;
|
|
164
|
-
}
|
|
165
|
-
};
|
|
166
|
-
}
|
|
167
|
-
};
|
|
168
|
-
}
|
|
169
|
-
function legacyPending(sessions) {
|
|
170
|
-
const listeners = /* @__PURE__ */ new Set();
|
|
171
|
-
const subscriptions = /* @__PURE__ */ new Map();
|
|
172
|
-
let snapshot = /* @__PURE__ */ new Map();
|
|
173
|
-
let offList;
|
|
174
|
-
const refresh = () => {
|
|
175
|
-
const list = sessions.list.getSnapshot();
|
|
176
|
-
for (const [id, item] of subscriptions) if (!list.byId[id] || list.byId[id].origin === "subagent") {
|
|
177
|
-
item.off();
|
|
178
|
-
subscriptions.delete(id);
|
|
179
|
-
}
|
|
180
|
-
const next = /* @__PURE__ */ new Map();
|
|
181
|
-
for (const id of list.ids) {
|
|
182
|
-
if (list.byId[id]?.origin === "subagent") continue;
|
|
183
|
-
const source = sessions.binding(id)?.session;
|
|
184
|
-
if (!source) continue;
|
|
185
|
-
if (listeners.size && subscriptions.get(id)?.source !== source) {
|
|
186
|
-
subscriptions.get(id)?.off();
|
|
187
|
-
subscriptions.set(id, { source, off: source.subscribe(refresh) });
|
|
188
|
-
}
|
|
189
|
-
const wait = source.getSnapshot().pending?.[0];
|
|
190
|
-
if (!wait) continue;
|
|
191
|
-
next.set(id, {
|
|
192
|
-
kind: wait.kind,
|
|
193
|
-
key: wait.key,
|
|
194
|
-
sessionId: wait.sessionId,
|
|
195
|
-
...wait.payload,
|
|
196
|
-
async answer(answer) {
|
|
197
|
-
if (wait.sessionId !== id || !source.getSnapshot().pending?.includes(wait)) throw new Error("\u8BF7\u6C42\u5DF2\u7ED3\u675F\u6216\u5DF2\u66F4\u6362");
|
|
198
|
-
const normalized = wait.kind === "question" ? { answers: answer.answers.map(({ custom, ...item }) => ({ ...item, ...custom?.trim() ? { custom: custom.trim() } : {} })) } : answer;
|
|
199
|
-
const value = wait.kind === "approval" ? { sessionId: id, approvalId: wait.payload.approvalId, outcome: answer } : { sessionId: id, answer: normalized };
|
|
200
|
-
const receipt = await wait.respond({ ok: true, value });
|
|
201
|
-
if (!receipt.accepted) throw new Error(receipt.reason ?? "\u5BBF\u4E3B\u62D2\u7EDD\u54CD\u5E94");
|
|
202
|
-
}
|
|
203
|
-
});
|
|
204
|
-
}
|
|
205
|
-
snapshot = next;
|
|
206
|
-
for (const listener of listeners) listener();
|
|
207
|
-
};
|
|
208
|
-
return {
|
|
209
|
-
getSnapshot: () => snapshot,
|
|
210
|
-
subscribe(listener) {
|
|
211
|
-
listeners.add(listener);
|
|
212
|
-
if (!offList) {
|
|
213
|
-
offList = sessions.list.subscribe(refresh);
|
|
214
|
-
refresh();
|
|
215
|
-
}
|
|
216
|
-
return () => {
|
|
217
|
-
listeners.delete(listener);
|
|
218
|
-
if (!listeners.size) {
|
|
219
|
-
offList?.();
|
|
220
|
-
offList = void 0;
|
|
221
|
-
for (const item of subscriptions.values()) item.off();
|
|
222
|
-
subscriptions.clear();
|
|
223
|
-
}
|
|
224
|
-
};
|
|
225
|
-
}
|
|
226
|
-
};
|
|
227
|
-
}
|
|
228
|
-
|
|
229
108
|
// src/companion-api.ts
|
|
230
109
|
function createCompanionProvider(handlers) {
|
|
231
110
|
let snapshot = null, active = true, displays = 0, signature = "null";
|
|
@@ -956,7 +835,7 @@ function PluginUpdateHeader({ locale }) {
|
|
|
956
835
|
zh2 ? "\u5BA0\u7269" : "Pets",
|
|
957
836
|
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", { className: "dcp-version", children: [
|
|
958
837
|
"v",
|
|
959
|
-
"0.1
|
|
838
|
+
"1.0.1"
|
|
960
839
|
] })
|
|
961
840
|
] }),
|
|
962
841
|
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("nav", { className: "dcp-project-links", children: [
|
|
@@ -1946,7 +1825,6 @@ function Companion({
|
|
|
1946
1825
|
// src/activity.ts
|
|
1947
1826
|
function selectedSessionId(list) {
|
|
1948
1827
|
for (const id of list.ids) if ((list.byId[id]?.retainedBy?.mainView ?? 0) > 0) return id;
|
|
1949
|
-
return list.current;
|
|
1950
1828
|
}
|
|
1951
1829
|
|
|
1952
1830
|
// src/notifications.ts
|
|
@@ -2001,7 +1879,7 @@ function createNotifications(sessions, pending, notify, now = Date.now) {
|
|
|
2001
1879
|
const binding = sessions.binding(id);
|
|
2002
1880
|
let record = records.get(id);
|
|
2003
1881
|
if (!record) {
|
|
2004
|
-
record = { round: 0, running: row.running, completion: !!status?.completionUnread
|
|
1882
|
+
record = { round: 0, running: row.running, completion: !!status?.completionUnread, error: null, revision: binding?.eventSource?.getSnapshot().revision ?? -1, updatedAt: row.updatedAt ?? now(), lastPose: "" };
|
|
2005
1883
|
records.set(id, record);
|
|
2006
1884
|
}
|
|
2007
1885
|
const previous = bindings.get(id);
|
|
@@ -2054,7 +1932,7 @@ function createNotifications(sessions, pending, notify, now = Date.now) {
|
|
|
2054
1932
|
record.completion = true;
|
|
2055
1933
|
record.updatedAt = now();
|
|
2056
1934
|
}
|
|
2057
|
-
if (
|
|
1935
|
+
if (status?.completionUnread && !running && (!record.finished || record.finished === "completed")) record.completion = true;
|
|
2058
1936
|
const request2 = requests.get(id);
|
|
2059
1937
|
const activity = selectActivity([{ id, title: row.title ?? row.displayTitle, running, waiting: !!request2, error: running ? null : record.error, completed: !running && record.completion }]);
|
|
2060
1938
|
if (activity.pose === "idle") continue;
|
|
@@ -2414,7 +2292,7 @@ function probe(ctx, name2) {
|
|
|
2414
2292
|
function liveSessionStatus(ctx) {
|
|
2415
2293
|
const resolve = () => {
|
|
2416
2294
|
const live = probe(ctx, "uiSession");
|
|
2417
|
-
return live
|
|
2295
|
+
return live?.sessionStatus;
|
|
2418
2296
|
};
|
|
2419
2297
|
return {
|
|
2420
2298
|
getSnapshot() {
|
|
@@ -2439,21 +2317,16 @@ function liveSessionStatus(ctx) {
|
|
|
2439
2317
|
};
|
|
2440
2318
|
}
|
|
2441
2319
|
function apply(ctx) {
|
|
2320
|
+
const status = liveSessionStatus(ctx);
|
|
2442
2321
|
const sessions = compatibleSessions(
|
|
2443
2322
|
ctx.sessions,
|
|
2444
2323
|
(id) => {
|
|
2445
|
-
const open = ctx.sessions.open;
|
|
2446
|
-
if (open) return open.call(ctx.sessions, id);
|
|
2447
2324
|
const uiWorkspace = probe(ctx, "uiWorkspace");
|
|
2448
2325
|
if (uiWorkspace) return uiWorkspace.openSession(id);
|
|
2449
2326
|
},
|
|
2450
|
-
|
|
2327
|
+
status
|
|
2451
2328
|
);
|
|
2452
|
-
const pending =
|
|
2453
|
-
const live = probe(ctx, "uiSession");
|
|
2454
|
-
if (live && "sessionStatus" in live && live.sessionStatus) return pendingFromSessionStatus(live.sessionStatus);
|
|
2455
|
-
return live && "pendingInteractions" in live ? live.pendingInteractions : void 0;
|
|
2456
|
-
});
|
|
2329
|
+
const pending = pendingFromSessionStatus(status);
|
|
2457
2330
|
ctx.slots.inject(
|
|
2458
2331
|
"settings.section",
|
|
2459
2332
|
() => ctx.slots.register(
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@michengai/dsh-codex-pet",
|
|
3
|
-
"version": "0.1
|
|
3
|
+
"version": "1.0.1",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"description": "DSH Codex Pet — 为 DeepSeek Harness 提供宠物陪伴、多任务提醒与交互,以及 Skill 自定义宠物 · A pet companion with multi-task notifications, interactions, and Skill-based custom pets for DeepSeek Harness",
|
|
6
6
|
"type": "module",
|
|
@@ -61,7 +61,7 @@
|
|
|
61
61
|
"assets:import": "tsx scripts/import-codex.ts"
|
|
62
62
|
},
|
|
63
63
|
"peerDependencies": {
|
|
64
|
-
"@deepseek-ai/dsh-host-webserver": "0.
|
|
64
|
+
"@deepseek-ai/dsh-host-webserver": "0.2.0-rc.1 || 0.2.0-rc.2 || 0.2.1-rc.1 || 0.2.1-rc.2",
|
|
65
65
|
"react": "^18.2.0",
|
|
66
66
|
"react-dom": "^18.2.0"
|
|
67
67
|
},
|
|
@@ -71,15 +71,15 @@
|
|
|
71
71
|
}
|
|
72
72
|
},
|
|
73
73
|
"devDependencies": {
|
|
74
|
-
"@deepseek-ai/cordis": "4.0.5
|
|
75
|
-
"@deepseek-ai/dsh": "0.2.1-
|
|
76
|
-
"@deepseek-ai/dsh-api-session-controller": "0.2.1-
|
|
77
|
-
"@deepseek-ai/dsh-client-locale": "0.2.1-
|
|
78
|
-
"@deepseek-ai/dsh-client-ui-renderer": "0.2.1-
|
|
79
|
-
"@deepseek-ai/dsh-client-ui-session": "0.2.1-
|
|
80
|
-
"@deepseek-ai/dsh-client-ui-slots": "0.2.1-
|
|
81
|
-
"@deepseek-ai/dsh-client-ui-workspace": "0.2.1-
|
|
82
|
-
"@deepseek-ai/dsh-host-webserver": "0.2.1-
|
|
74
|
+
"@deepseek-ai/cordis": "4.0.5",
|
|
75
|
+
"@deepseek-ai/dsh": "0.2.1-rc.2",
|
|
76
|
+
"@deepseek-ai/dsh-api-session-controller": "0.2.1-rc.2",
|
|
77
|
+
"@deepseek-ai/dsh-client-locale": "0.2.1-rc.2",
|
|
78
|
+
"@deepseek-ai/dsh-client-ui-renderer": "0.2.1-rc.2",
|
|
79
|
+
"@deepseek-ai/dsh-client-ui-session": "0.2.1-rc.2",
|
|
80
|
+
"@deepseek-ai/dsh-client-ui-slots": "0.2.1-rc.2",
|
|
81
|
+
"@deepseek-ai/dsh-client-ui-workspace": "0.2.1-rc.2",
|
|
82
|
+
"@deepseek-ai/dsh-host-webserver": "0.2.1-rc.2",
|
|
83
83
|
"@electron/asar": "^3.4.1",
|
|
84
84
|
"@radix-ui/react-icons": "^1.3.2",
|
|
85
85
|
"@types/node": "^24.0.0",
|