@michengai/dsh-codex-pet 0.1.2 → 0.1.4
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 +9 -0
- package/CHANGELOG.zh-CN.md +9 -0
- package/README.md +33 -99
- package/README.zh-CN.md +33 -101
- package/lib/client.js +144 -5
- package/package.json +19 -5
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,14 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.1.4] - 2026-09-11
|
|
4
|
+
|
|
5
|
+
- Restore compatibility with DSH `0.1.0-rc.8`, `0.1.1-rc.2`, `0.1.2-rc.1`, and `0.1.5-rc.1` while retaining `0.1.5-rc.2`. Adapt legacy session requests so pet notifications can answer questions and approvals on older hosts.
|
|
6
|
+
|
|
7
|
+
## [0.1.3] - 2026-09-11
|
|
8
|
+
|
|
9
|
+
- Support DSH Web `0.1.5-rc.2` and correct client service injection so the plugin loads with the updated host. Older DSH versions are outside the supported range.
|
|
10
|
+
- Known upstream limitation: stopping before the model returns an HTTP response may produce a `turn/end` serialization error and a failure notification; stopping after streaming starts is supported.
|
|
11
|
+
|
|
3
12
|
## [0.1.2] - 2026-09-09
|
|
4
13
|
|
|
5
14
|
- License original plugin code under Apache-2.0 and include LICENSE and third-party artwork NOTICE in the npm package.
|
package/CHANGELOG.zh-CN.md
CHANGED
|
@@ -1,5 +1,14 @@
|
|
|
1
1
|
# 更新日志
|
|
2
2
|
|
|
3
|
+
## [0.1.4] - 2026-09-11
|
|
4
|
+
|
|
5
|
+
- 恢复 DSH `0.1.0-rc.8`、`0.1.1-rc.2`、`0.1.2-rc.1`、`0.1.5-rc.1` 兼容,同时保留 `0.1.5-rc.2`;适配旧版会话请求,使宠物通知可处理旧宿主的提问和审批。
|
|
6
|
+
|
|
7
|
+
## [0.1.3] - 2026-09-11
|
|
8
|
+
|
|
9
|
+
- 支持 DSH Web `0.1.5-rc.2`,修正客户端服务注入声明,使插件可在新版宿主加载;旧版 DSH 不在支持范围内。
|
|
10
|
+
- 已知上游限制:模型尚未返回 HTTP 响应时停止任务,可能产生 `turn/end` 序列化错误并显示失败通知;已开始流式响应后的停止操作可用。
|
|
11
|
+
|
|
3
12
|
## [0.1.2] - 2026-09-09
|
|
4
13
|
|
|
5
14
|
- 原创插件代码采用 Apache-2.0,npm 包包含 LICENSE 和第三方宠物素材 NOTICE。
|
package/README.md
CHANGED
|
@@ -1,27 +1,31 @@
|
|
|
1
1
|
<p align="center">
|
|
2
|
-
<img src="assets/branding/dsh-codex-pet-banner.png" alt="DSH Codex Pet
|
|
2
|
+
<img src="assets/branding/dsh-codex-pet-banner.png" alt="DSH Codex Pet" width="100%">
|
|
3
3
|
</p>
|
|
4
4
|
|
|
5
5
|
<div align="center">
|
|
6
6
|
|
|
7
7
|
# DSH Codex Pet
|
|
8
8
|
|
|
9
|
-
**A little companion for your DeepSeek Harness tasks
|
|
9
|
+
**A little companion for your DeepSeek Harness tasks**
|
|
10
10
|
|
|
11
|
-
[简体中文](README.zh-CN.md) · [
|
|
11
|
+
[简体中文](README.zh-CN.md) · [Changelog](CHANGELOG.md) · [Apache-2.0](LICENSE)
|
|
12
12
|
|
|
13
|
-
[](LICENSE)
|
|
14
|
+
[](https://www.npmjs.com/package/@michengai/dsh-codex-pet)
|
|
15
|
+
[](https://www.npmjs.com/package/@michengai/dsh-codex-pet)
|
|
16
|
+
[](https://github.com/MichengAI/dsh-codex-pet)
|
|
14
17
|
[](https://nodejs.org/)
|
|
15
|
-
[](https://www.npmjs.com/package/@michengai/dsh-codex-pet)
|
|
16
18
|
|
|
17
19
|
</div>
|
|
18
20
|
|
|
19
|
-
DSH Codex Pet
|
|
21
|
+
> DSH Codex Pet is a community-maintained pet plugin for DeepSeek Harness (DSH), not an official OpenAI or DeepSeek AI product.
|
|
20
22
|
|
|
21
23
|
## Features
|
|
22
24
|
|
|
25
|
+
Keep a companion nearby while you work in DSH, follow task progress, and handle requests that need your attention. Choose a built-in pet or create your own with a Skill.
|
|
26
|
+
|
|
23
27
|
- **Nine built-in pets**: choose a companion and adjust its size in pet settings. Assets are bundled locally.
|
|
24
|
-
- **In-page companion**:
|
|
28
|
+
- **In-page companion**: keep a companion in DSH Web. Floating desktop pets require a desktop app with pet support.
|
|
25
29
|
- **Multiple tasks at a glance**: follow running tasks, completion, errors, and requests that need your attention. An empty notification list leaves only the pet visible.
|
|
26
30
|
- **Act from the notification**: open the associated task, stop its current turn, or handle supported approval, question, and plan requests.
|
|
27
31
|
- **Quiet when you need it**: dismiss an individual reminder without stopping its task; collapse or restore the pet through its menu or settings.
|
|
@@ -52,7 +56,7 @@ Keep working in DSH while the pet and task notifications remain in the corner of
|
|
|
52
56
|
|
|
53
57
|
## DSH product ecosystem
|
|
54
58
|
|
|
55
|
-
|
|
59
|
+
Add plugins as needed to your existing DeepSeek Harness environment.
|
|
56
60
|
|
|
57
61
|
| Plugin | What you can do |
|
|
58
62
|
| --- | --- |
|
|
@@ -66,51 +70,18 @@ Install plugins as needed in an existing DeepSeek Harness environment. External
|
|
|
66
70
|
| [Simplify](https://github.com/MichengAI/dsh-simplify) | Improve code within your Git changes |
|
|
67
71
|
| [Codex Pet](https://github.com/MichengAI/dsh-codex-pet) | Keep a companion nearby and handle task notifications |
|
|
68
72
|
|
|
69
|
-
## Prerequisites
|
|
70
|
-
|
|
71
|
-
- DeepSeek Harness with its Web interface and the `dsh` command available.
|
|
72
|
-
- Node.js **22.19 or newer** for building from source.
|
|
73
|
-
- A configured image-generation tool in DSH to create custom pets.
|
|
74
|
-
|
|
75
73
|
## Installation
|
|
76
74
|
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
Automatic updates use `--config.minimumReleaseAge=0` for that install command so a newly published version can be installed immediately. This bypasses pnpm’s release-age delay for the command without changing the global configuration. The package name, npm registry, and resolved version remain fixed by the server.
|
|
80
|
-
|
|
81
|
-
Version 0.1.2 includes the settings, localization, npm updater, and consumer API changes described here; see the [changelog](CHANGELOG.md).
|
|
82
|
-
|
|
83
|
-
The current version is **0.1.2**, available on [npm](https://www.npmjs.com/package/@michengai/dsh-codex-pet). See [GitHub Releases](https://github.com/MichengAI/dsh-codex-pet/releases) for release notes. Replace `web` below with your actual DSH profile.
|
|
84
|
-
|
|
85
|
-
Run `dsh plugin --profile web add @michengai/dsh-codex-pet@latest --registry=https://registry.npmjs.org/ --ignore-scripts`, then reload DSH. The source build instructions follow.
|
|
86
|
-
|
|
87
|
-
### Ask an agent to install it
|
|
88
|
-
|
|
89
|
-
```text
|
|
90
|
-
Install DSH Codex Pet from my local source checkout into the DSH web profile. In that checkout, run npm ci, npm run check, npm test, and npm pack. If all checks pass, install the generated michengai-dsh-codex-pet-0.1.2.tgz using dsh plugin --profile web add .\michengai-dsh-codex-pet-0.1.2.tgz --ignore-scripts. Run dsh --profile web --dump-config and confirm michengai-codex-pet is present. Explain how to reload DSH and open pet settings. Preserve existing tasks and user data.
|
|
91
|
-
```
|
|
92
|
-
|
|
93
|
-
### Build and install manually
|
|
94
|
-
|
|
95
|
-
Run from the project root:
|
|
75
|
+
Supported DeepSeek Harness versions: **`0.1.0-rc.8`, `0.1.1-rc.2`, `0.1.2-rc.1`, `0.1.5-rc.1`, and `0.1.5-rc.2`**. New compatibility is added without dropping these older releases. Make sure the `dsh` command is available. The example uses the `web` profile; replace it with your target profile.
|
|
96
76
|
|
|
97
77
|
```powershell
|
|
98
78
|
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8
|
|
99
79
|
$OutputEncoding = [System.Text.Encoding]::UTF8
|
|
100
80
|
|
|
101
|
-
|
|
102
|
-
npm run check
|
|
103
|
-
npm test
|
|
104
|
-
npm pack
|
|
105
|
-
dsh plugin --profile web add .\michengai-dsh-codex-pet-0.1.2.tgz --ignore-scripts
|
|
106
|
-
dsh --profile web --dump-config
|
|
81
|
+
dsh plugin --profile web add @michengai/dsh-codex-pet@latest --registry=https://registry.npmjs.org/ --ignore-scripts
|
|
107
82
|
```
|
|
108
83
|
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
### Reloading
|
|
112
|
-
|
|
113
|
-
After active tasks finish, restart the relevant DSH Web service and refresh its Web interface. A browser refresh alone does not replace an already loaded Host module.
|
|
84
|
+
Restart DSH after installation, then open **Settings → Pets**.
|
|
114
85
|
|
|
115
86
|
## Usage
|
|
116
87
|
|
|
@@ -129,6 +100,8 @@ Open **Settings → Pets** (`宠物` in the current UI), or open settings from t
|
|
|
129
100
|
|
|
130
101
|
The pet is a notification and action surface. Start new conversations and write follow-up messages in the main DSH interface.
|
|
131
102
|
|
|
103
|
+
Known upstream limitation: cancelling before the model returns an HTTP response in DSH `0.1.5-rc.2` can report a non-JSON-serializable `turn/end` error, which the pet displays as a failure notification. Cancellation after streaming has started passed end-to-end validation.
|
|
104
|
+
|
|
132
105
|
### Create a custom pet
|
|
133
106
|
|
|
134
107
|
1. Open pet settings, click **Create** (`创建`), and describe the companion.
|
|
@@ -136,24 +109,13 @@ The pet is a notification and action surface. Start new conversations and write
|
|
|
136
109
|
3. Follow that task's progress. Creation uses DSH's configured model and image tools.
|
|
137
110
|
4. Once the pet files are saved, refresh the pet library and select the new companion.
|
|
138
111
|
|
|
139
|
-
|
|
112
|
+
Creating pets requires an image-generation tool configured in DSH.
|
|
140
113
|
|
|
141
|
-
##
|
|
114
|
+
## Updates and uninstallation
|
|
142
115
|
|
|
143
|
-
|
|
144
|
-
- Custom pets: `${DSH_HOME}\codex-pet\pets`; when `DSH_HOME` is unset, the base directory is the user's `.dsh` directory.
|
|
145
|
-
- Existing Codex pets are not automatically read, moved, or migrated.
|
|
146
|
-
- Uninstalling the plugin leaves custom pet files and configuration in place.
|
|
116
|
+
Use **Settings → Pets → Check for updates**. If automatic installation is unavailable, copy the update command shown in the dialog. Wait for running tasks to finish, then update and restart DSH as prompted.
|
|
147
117
|
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
Original plugin code is licensed under [Apache-2.0](LICENSE), matching the other plugins in this series. Third-party pet artwork is excluded from that license grant; see [NOTICE](NOTICE).
|
|
151
|
-
|
|
152
|
-
## Plugin updates
|
|
153
|
-
|
|
154
|
-
Pet settings show the running version, GitHub and issue links, and **Check for updates**. The updater queries npm and installs into the current DSH profile using the verified DSH CLI. Unsupported hosts can copy a manual update command. Wait for active tasks to finish before installing an update; reload DSH when prompted.
|
|
155
|
-
|
|
156
|
-
## Uninstallation
|
|
118
|
+
To uninstall:
|
|
157
119
|
|
|
158
120
|
```powershell
|
|
159
121
|
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8
|
|
@@ -162,57 +124,29 @@ $OutputEncoding = [System.Text.Encoding]::UTF8
|
|
|
162
124
|
dsh plugin --profile web remove @michengai/dsh-codex-pet
|
|
163
125
|
```
|
|
164
126
|
|
|
165
|
-
|
|
127
|
+
Custom pets are stored in `.dsh/codex-pet/pets` under your user directory by default; open the folder from pet settings. If `DSH_HOME` is set, pets are stored in its `codex-pet/pets` folder. Uninstalling keeps those files and settings.
|
|
128
|
+
|
|
129
|
+
## Development checks
|
|
166
130
|
|
|
167
|
-
|
|
131
|
+
Development dependencies and the lockfile pin DSH `0.1.5-rc.2`. Use `npm ci` to reproduce the environment; `npm run check` also checks the plugin against official service types.
|
|
168
132
|
|
|
169
133
|
```powershell
|
|
170
134
|
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8
|
|
171
135
|
$OutputEncoding = [System.Text.Encoding]::UTF8
|
|
172
|
-
|
|
173
136
|
npm ci
|
|
137
|
+
npx playwright install chromium
|
|
174
138
|
npm run check
|
|
175
139
|
npm test
|
|
176
|
-
npm run
|
|
140
|
+
npm run smoke
|
|
141
|
+
npm run test:e2e
|
|
177
142
|
```
|
|
178
143
|
|
|
179
|
-
- `
|
|
180
|
-
- `skills/`: the bundled pet creation Skill.
|
|
181
|
-
- `test/`: library, creation, and notification regression tests.
|
|
182
|
-
- `scripts/`: build, asset maintenance, package verification, and isolated Electron smoke checks.
|
|
183
|
-
- `lib/`: generated runtime output; edit `src/` instead.
|
|
184
|
-
|
|
185
|
-
There is no standalone HTML preview or native window entry. Verify the plugin inside DSH. `assets:import` is a maintainer command for updating original assets, not an installation requirement.
|
|
186
|
-
|
|
187
|
-
For CodeGraph, run `codegraph init .` once, `codegraph sync .` after changes, and `codegraph status .` to check freshness. The index and local project documentation under `docs/` are excluded from Git.
|
|
188
|
-
|
|
189
|
-
## Validation and current limits
|
|
190
|
-
|
|
191
|
-
Type checking, 25 automated tests, the build, and controlled browser client interaction checks have passed. These cover task notifications and the creation request flow. Complete image generation, real-model task interaction and real npm updates still need end-to-end acceptance testing.
|
|
192
|
-
|
|
193
|
-
## Browser smoke test
|
|
194
|
-
|
|
195
|
-
After `npm ci`, run `npx playwright install chromium`, then `npm run smoke`. Playwright is a development dependency of this project. The test uses headless Chromium and a unique system temporary directory, cleaned after the test process exits. No Electron, sibling repository, `.preview`, or docs output is required.
|
|
196
|
-
|
|
197
|
-
## Consumer API v1
|
|
198
|
-
|
|
199
|
-
The plugin publishes `window.dshPet` in the DSH page and emits `dsh-pet-ready` / `dsh-pet-disposed`. Consumers subscribe and render independently; the plugin never imports or probes a consumer. Previous native window routes and window bridges have been removed. Existing native adapters must migrate to this contract.
|
|
200
|
-
|
|
201
|
-
| Method | Contract |
|
|
202
|
-
| --- | --- |
|
|
203
|
-
| `getSnapshot()` | Returns a copied `{pet, config, language, notifications}` or `null` before loading/after disposal. Resolve relative pet asset URLs against the DSH page origin. |
|
|
204
|
-
| `subscribe(listener)` | Receives changed snapshots or `null` on disposal; returns an unsubscribe function. Read the initial snapshot separately. |
|
|
205
|
-
| `command(value)` | Executes notification commands (`open`, `stop`, `dismiss`, `restore`, `approve`, `reject`, `answer`, `sort`). Targeted commands require the current notification `id` and `token`; request answers also require `requestKey`. Validation and rejection stay in the plugin. |
|
|
206
|
-
| `updateConfig(value)` | Updates pet settings through the existing validated Host API. |
|
|
207
|
-
| `openSettings()` | Opens plugin settings in DSH. |
|
|
208
|
-
| `acquireDisplay()` | Hides only the page overlay and returns an idempotent release function. Call release when disconnecting; the overlay returns after all consumers release. This does not change persisted visibility. |
|
|
209
|
-
|
|
210
|
-
Consumers own their renderer, native window, IPC validation, and disconnect cleanup. The interface carries no native window implementation. User titles, questions, and answer options remain unchanged; the `language` field identifies the display locale.
|
|
144
|
+
End-to-end tests also require pnpm on PATH (CI uses `11.25.0`). They install the local package through the official CLI and boot the full DSH Web app to test pet settings, persistence, session creation, question responses, completion and failure notifications, and cancellation. Only the external model HTTP service is replaced with a local fixture; no paid model or image generation is used. Tests use a separate `DSH_HOME` and keep logs and screenshots in the ignored `.preview/e2e-latest-*` directory without changing your everyday profile.
|
|
211
145
|
|
|
212
|
-
|
|
146
|
+
The official type check verifies structural compatibility, not service lifecycle behavior. E2E runs as a separate CI job with a 25-minute budget; publishing requires a successful main push CI run for the exact tagged commit, including both language jobs for all five supported host versions. Wait for CI before tagging; missing, running, skipped, or failed checks block publishing. Windows Profile link errors (`EBUSY`) retry after 5 seconds within a shared 120-second startup budget; shutdown may require up to 10 additional seconds. This mitigates transient failures without claiming Windows stability. Other failures remain failures. Reports retain the locale, original failure, retry observations, and separate cleanup errors. PowerShell (`powershell.exe` on Windows, `pwsh` elsewhere) retains the latest five completed, marked runs. Unmarked historical evidence, unfinished runs, and directories containing `.keep` are preserved; pruning never follows directory links. Add `.keep` to release acceptance evidence before subsequent runs.
|
|
213
147
|
|
|
214
|
-
|
|
148
|
+
Set `DSH_PET_E2E_LOCALE` to `zh-CN` (default) or `en-US` to choose the browser language; CI tests both languages on all five supported versions. Set `DSH_PET_E2E_VERSION` to choose an older host; its complete official dependency graph is installed in isolation with exact versions. Development dependencies remain on rc.2. Set `DSH_PET_E2E_ROOT` to a separate directory named `.preview` to place isolated hosts and evidence on another volume.
|
|
215
149
|
|
|
216
|
-
|
|
150
|
+
## License
|
|
217
151
|
|
|
218
|
-
|
|
152
|
+
Original plugin code is licensed under [Apache License 2.0](LICENSE). Bundled pet artwork originates from OpenAI Codex and is excluded from this project's Apache-2.0 license grant; see [NOTICE](NOTICE).
|
package/README.zh-CN.md
CHANGED
|
@@ -1,27 +1,31 @@
|
|
|
1
1
|
<p align="center">
|
|
2
|
-
<img src="assets/branding/dsh-codex-pet-banner.png" alt="DSH Codex Pet
|
|
2
|
+
<img src="assets/branding/dsh-codex-pet-banner.png" alt="DSH Codex Pet" width="100%">
|
|
3
3
|
</p>
|
|
4
4
|
|
|
5
5
|
<div align="center">
|
|
6
6
|
|
|
7
7
|
# DSH Codex Pet
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
**让宠物陪你处理 DeepSeek Harness 任务**
|
|
10
10
|
|
|
11
|
-
[English](README.md) · [
|
|
11
|
+
[English](README.md) · [更新日志](CHANGELOG.zh-CN.md) · [Apache-2.0](LICENSE)
|
|
12
12
|
|
|
13
|
-
[](LICENSE)
|
|
14
|
+
[](https://www.npmjs.com/package/@michengai/dsh-codex-pet)
|
|
15
|
+
[](https://www.npmjs.com/package/@michengai/dsh-codex-pet)
|
|
16
|
+
[](https://github.com/MichengAI/dsh-codex-pet)
|
|
14
17
|
[](https://nodejs.org/)
|
|
15
|
-
[](#验证与当前边界)
|
|
16
18
|
|
|
17
19
|
</div>
|
|
18
20
|
|
|
19
|
-
DSH Codex Pet
|
|
21
|
+
> DSH Codex Pet 是社区维护的 DeepSeek Harness(DSH)宠物插件,并非 OpenAI 或 DeepSeek AI 官方产品。
|
|
20
22
|
|
|
21
23
|
## 功能概览
|
|
22
24
|
|
|
25
|
+
让宠物陪你处理 DSH 任务,随时查看会话进展和待处理请求。你可以选择内置宠物,也可以通过 Skill 创建自己的伙伴。
|
|
26
|
+
|
|
23
27
|
- **9 只内置宠物**:在宠物设置中选择伙伴、调整大小,资源随插件本地打包。
|
|
24
|
-
-
|
|
28
|
+
- **页内陪伴**:在 DSH 网页中陪伴工作;桌面浮窗需要使用支持宠物功能的桌面端。
|
|
25
29
|
- **多会话动态**:查看运行中、完成、错误和待处理请求;没有通知时只显示宠物。
|
|
26
30
|
- **就近处理任务**:从通知打开对应会话、停止当前轮次,或处理支持的审批、问题和计划请求。
|
|
27
31
|
- **按需安静**:关闭单条提醒不会停止任务;通过菜单或设置收起、恢复宠物。
|
|
@@ -52,7 +56,7 @@ DSH Codex Pet 为 [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-har
|
|
|
52
56
|
|
|
53
57
|
## DSH 产品生态
|
|
54
58
|
|
|
55
|
-
为已有 DeepSeek Harness
|
|
59
|
+
为已有 DeepSeek Harness 环境按需添加功能。
|
|
56
60
|
|
|
57
61
|
| 插件 | 你可以用它做什么 |
|
|
58
62
|
| --- | --- |
|
|
@@ -66,51 +70,18 @@ DSH Codex Pet 为 [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-har
|
|
|
66
70
|
| [Simplify](https://github.com/MichengAI/dsh-simplify) | 整理 Git 改动范围内的代码 |
|
|
67
71
|
| [Codex Pet](https://github.com/MichengAI/dsh-codex-pet) | 宠物陪伴,查看和处理任务通知 |
|
|
68
72
|
|
|
69
|
-
## 前置条件
|
|
70
|
-
|
|
71
|
-
- 已安装 DeepSeek Harness,可使用 Web 界面和 `dsh` 命令。
|
|
72
|
-
- 从源码构建需要 **Node.js 22.19 或更高版本**。
|
|
73
|
-
- 创建自定义宠物需要在 DSH 中配置可用的图像生成工具。
|
|
74
|
-
|
|
75
73
|
## 安装
|
|
76
74
|
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
自动更新命令使用 `--config.minimumReleaseAge=0`,以便立即安装刚发布的版本;该参数仅对本次安装跳过 pnpm 的发布时间等待,不改写全局配置。包名、npm registry 和解析后的版本仍由服务端固定。
|
|
80
|
-
|
|
81
|
-
v0.1.2 安装包包含本文描述的设置、本地化、npm 更新器和消费者接口改动,详见[更新日志](CHANGELOG.zh-CN.md)。
|
|
82
|
-
|
|
83
|
-
当前版本为 **0.1.2**,通过 [npm](https://www.npmjs.com/package/@michengai/dsh-codex-pet) 安装;版本记录见 [GitHub Releases](https://github.com/MichengAI/dsh-codex-pet/releases)。以下命令使用 `web` profile,请按实际环境替换。
|
|
84
|
-
|
|
85
|
-
执行 `dsh plugin --profile web add @michengai/dsh-codex-pet@latest --registry=https://registry.npmjs.org/ --ignore-scripts`,然后重新加载 DSH。也可按下面的步骤从源码构建。
|
|
86
|
-
|
|
87
|
-
### 让 Agent 帮你安装
|
|
88
|
-
|
|
89
|
-
```text
|
|
90
|
-
请从我的本地源码目录将 DSH Codex Pet 安装到 DSH 的 web profile。在源码目录依次执行 npm ci、npm run check、npm test 和 npm pack。检查通过后,执行 dsh plugin --profile web add .\michengai-dsh-codex-pet-0.1.2.tgz --ignore-scripts 安装生成的包,再执行 dsh --profile web --dump-config,确认包含 michengai-codex-pet。说明如何重新加载 DSH 并打开宠物设置,保留已有任务和用户数据。
|
|
91
|
-
```
|
|
92
|
-
|
|
93
|
-
### 手动构建并安装
|
|
94
|
-
|
|
95
|
-
在项目根目录执行:
|
|
75
|
+
支持 DeepSeek Harness **`0.1.0-rc.8`、`0.1.1-rc.2`、`0.1.2-rc.1`、`0.1.5-rc.1`、`0.1.5-rc.2`**,需要可使用 `dsh` 命令。新增兼容不移除这些旧版。以下示例使用 `web` profile,请按实际环境替换。
|
|
96
76
|
|
|
97
77
|
```powershell
|
|
98
78
|
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8
|
|
99
79
|
$OutputEncoding = [System.Text.Encoding]::UTF8
|
|
100
80
|
|
|
101
|
-
|
|
102
|
-
npm run check
|
|
103
|
-
npm test
|
|
104
|
-
npm pack
|
|
105
|
-
dsh plugin --profile web add .\michengai-dsh-codex-pet-0.1.2.tgz --ignore-scripts
|
|
106
|
-
dsh --profile web --dump-config
|
|
81
|
+
dsh plugin --profile web add @michengai/dsh-codex-pet@latest --registry=https://registry.npmjs.org/ --ignore-scripts
|
|
107
82
|
```
|
|
108
83
|
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
### 重新加载
|
|
112
|
-
|
|
113
|
-
等待正在执行的任务结束后,重启对应 DSH Web 服务并刷新页面。仅刷新浏览器不能替换已经加载的 Host 模块。
|
|
84
|
+
安装后重启 DSH,再打开 **设置 → 宠物**。
|
|
114
85
|
|
|
115
86
|
## 使用
|
|
116
87
|
|
|
@@ -129,6 +100,8 @@ dsh --profile web --dump-config
|
|
|
129
100
|
|
|
130
101
|
宠物承担通知和待处理操作。新建会话、输入后续消息仍在 DSH 主界面完成。
|
|
131
102
|
|
|
103
|
+
已知上游边界:DSH `0.1.5-rc.2` 在模型尚未返回 HTTP 响应时停止任务,可能因 `turn/end` 数据不可 JSON 序列化而上报错误,宠物会显示失败通知。已开始流式响应时的停止操作已通过端到端验证。
|
|
104
|
+
|
|
132
105
|
### 创建自定义宠物
|
|
133
106
|
|
|
134
107
|
1. 打开宠物设置,点击 **创建**,描述想要的伙伴。
|
|
@@ -136,24 +109,13 @@ dsh --profile web --dump-config
|
|
|
136
109
|
3. 在该任务中查看进展,创建使用 DSH 当前配置的模型和图像工具。
|
|
137
110
|
4. 宠物文件生成并保存后,刷新宠物库并选择新伙伴。
|
|
138
111
|
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
## 数据与资源
|
|
112
|
+
创建宠物需要先在 DSH 中配置图像生成工具。
|
|
142
113
|
|
|
143
|
-
|
|
144
|
-
- 自定义宠物:`${DSH_HOME}\codex-pet\pets`;未设置 `DSH_HOME` 时,以用户目录下的 `.dsh` 为基础目录。
|
|
145
|
-
- 不自动读取、移动或迁移原有 Codex 宠物。
|
|
146
|
-
- 卸载插件会保留自定义宠物文件和配置。
|
|
114
|
+
## 更新与卸载
|
|
147
115
|
|
|
148
|
-
|
|
116
|
+
在 **设置 → 宠物 → 检查更新** 中更新。若当前环境不支持在线安装,可复制界面提供的更新命令。等待正在运行的任务结束后操作,完成后按提示重启 DSH。
|
|
149
117
|
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
## 插件更新
|
|
153
|
-
|
|
154
|
-
宠物设置页显示当前运行版本、GitHub 和问题反馈链接,以及**检查更新**入口。更新器查询 npm,通过已验证的 DSH CLI 安装到当前 profile;npm 尚未发布时会明确提示。宿主不支持在线安装时,可复制手动更新命令。请等待任务结束后更新,并按提示重新加载 DSH。
|
|
155
|
-
|
|
156
|
-
## 卸载
|
|
118
|
+
卸载命令:
|
|
157
119
|
|
|
158
120
|
```powershell
|
|
159
121
|
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8
|
|
@@ -162,59 +124,29 @@ $OutputEncoding = [System.Text.Encoding]::UTF8
|
|
|
162
124
|
dsh plugin --profile web remove @michengai/dsh-codex-pet
|
|
163
125
|
```
|
|
164
126
|
|
|
165
|
-
|
|
127
|
+
自定义宠物默认保存在用户目录的 `.dsh/codex-pet/pets` 下,可从宠物设置打开。设置了 `DSH_HOME` 时使用该目录下的 `codex-pet/pets`。卸载插件会保留这些文件与配置。
|
|
166
128
|
|
|
167
|
-
##
|
|
129
|
+
## 开发验证
|
|
130
|
+
|
|
131
|
+
开发依赖和锁文件固定 DSH `0.1.5-rc.2`。使用 `npm ci` 复现,`npm run check` 同时检查插件与官方服务类型的兼容性。
|
|
168
132
|
|
|
169
133
|
```powershell
|
|
170
134
|
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8
|
|
171
135
|
$OutputEncoding = [System.Text.Encoding]::UTF8
|
|
172
|
-
|
|
173
136
|
npm ci
|
|
137
|
+
npx playwright install chromium
|
|
174
138
|
npm run check
|
|
175
139
|
npm test
|
|
176
|
-
npm run
|
|
140
|
+
npm run smoke
|
|
141
|
+
npm run test:e2e
|
|
177
142
|
```
|
|
178
143
|
|
|
179
|
-
|
|
180
|
-
- `skills/`:随包宠物创建 Skill。
|
|
181
|
-
- `test/`:宠物库、创建和通知回归测试。
|
|
182
|
-
- `scripts/`:构建、资源维护、安装包校验和隔离 Electron smoke 检查。
|
|
183
|
-
- `lib/`:生成的运行产物,修改源码应在 `src/` 中进行。
|
|
184
|
-
|
|
185
|
-
项目不提供独立 HTML 预览页或原生窗口入口,请在 DSH 内验证。`assets:import` 仅供维护者更新原始资源,使用者安装时无需执行。
|
|
186
|
-
|
|
187
|
-
使用 CodeGraph 时,首次运行 `codegraph init .`,修改后运行 `codegraph sync .`,通过 `codegraph status .` 检查索引新鲜度。索引与 `docs/` 下的本地项目文档均不纳入 Git。
|
|
188
|
-
|
|
189
|
-
## 验证与当前边界
|
|
190
|
-
|
|
191
|
-
类型检查、25 项自动化测试、构建和受控浏览器客户端交互验证已通过,覆盖任务通知和创建请求流程。完整图像生成、真实模型任务联动及真实 npm 更新仍待端到端验收。
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
## 浏览器冒烟测试
|
|
196
|
-
|
|
197
|
-
执行 `npm ci` 后,运行 `npx playwright install chromium`,再执行 `npm run smoke`。Playwright 是本项目的开发依赖,测试使用无头 Chromium 和独立系统临时目录,测试进程退出后自动清理;不需要 Electron、相邻仓库、`.preview` 或 docs 输出。
|
|
198
|
-
|
|
199
|
-
## 消费者接口 v1
|
|
200
|
-
|
|
201
|
-
插件在 DSH 页面提供 `window.dshPet`,发布 `dsh-pet-ready` / `dsh-pet-disposed` 事件。消费者主动订阅和展示,插件不导入或探测消费者。旧原生窗口路由与窗口桥接已移除,已有原生适配需迁移到此接口。
|
|
202
|
-
|
|
203
|
-
| 方法 | 约定 |
|
|
204
|
-
| --- | --- |
|
|
205
|
-
| `getSnapshot()` | 返回独立副本 `{pet, config, language, notifications}`;未加载或卸载后为 `null`。宠物资源相对 URL 按 DSH 页面 origin 解析。 |
|
|
206
|
-
| `subscribe(listener)` | 内容变化时通知,卸载时收到 `null`;返回退订函数。初始状态另行调用 getSnapshot。 |
|
|
207
|
-
| `command(value)` | 执行通知操作:open、stop、dismiss、restore、approve、reject、answer、sort。目标操作携带当前通知 id、token;请求回答另带 requestKey。校验和拒绝由插件执行。 |
|
|
208
|
-
| `updateConfig(value)` | 通过现有 Host 校验接口更新宠物设置。 |
|
|
209
|
-
| `openSettings()` | 在 DSH 打开宠物设置。 |
|
|
210
|
-
| `acquireDisplay()` | 暂时隐藏页内浮层,返回幂等释放函数。消费者断开时必须释放,所有接管者释放后恢复页内显示,不改持久化可见性配置。 |
|
|
211
|
-
|
|
212
|
-
消费者负责自身渲染器、原生窗口、IPC 校验和断开清理;接口不携带原生窗口实现。用户标题、问题与回答选项保持原文,language 字段提供显示语言。
|
|
144
|
+
端到端测试另需 PATH 中有 pnpm(CI 使用 `11.25.0`)。它通过官方 CLI 安装本地发行包、启动完整 DSH Web,验证宠物设置、持久化、创建会话、提问回传、完成与失败通知和停止任务。只有外部模型 HTTP 服务使用本地夹具,不调用付费模型或生成图片。测试使用独立 `DSH_HOME`,日志和截图保存在忽略的 `.preview/e2e-latest-*` 下,不改动日常 Profile。
|
|
213
145
|
|
|
214
|
-
|
|
146
|
+
官方类型检查验证结构兼容性,不替代服务生命周期验证。E2E 拆为独立 CI job,限时 25 分钟;发布前必须验证标签提交对应的 main push CI 成功,且全部 5 个宿主版本的中英文 job 均通过;先等待 CI,再打标签,缺失、运行中、跳过或失败的检查都会阻止发布。Windows Profile 链接错误(`EBUSY`)在共享的 120 秒启动预算内每次等待 5 秒后重试,关闭进程最多另需 10 秒;这只缓解瞬时竞争,不代表 Windows 已稳定,其他错误直接失败。报告同时保留语言、原始失败、重试记录及独立清理错误。通过 PowerShell(Windows 使用 `powershell.exe`,其他平台使用 `pwsh`)保留最近 5 次已标记并结束的运行;未标记的历史证据、未结束运行及含 `.keep` 文件的目录不回收,清理不跟随目录链接。发布验收证据应在后续运行前添加 `.keep`。
|
|
215
147
|
|
|
216
|
-
|
|
148
|
+
可设置 `DSH_PET_E2E_LOCALE` 为 `zh-CN`(默认)或 `en-US` 选择浏览器语言,CI 对全部 5 个版本分别验证两种语言。设置 `DSH_PET_E2E_VERSION` 可选择旧版宿主,其完整官方依赖图在隔离目录内精确安装,开发依赖继续保持 rc.2。可通过 `DSH_PET_E2E_ROOT` 指向另一个名为 `.preview` 的独立目录,将测试宿主和证据放到其他磁盘。
|
|
217
149
|
|
|
218
|
-
|
|
150
|
+
## 许可证
|
|
219
151
|
|
|
220
|
-
|
|
152
|
+
原创插件代码采用 [Apache License 2.0](LICENSE)。随包宠物图集来源于 OpenAI Codex,不属于本项目授予的 Apache-2.0 许可范围,详见 [NOTICE](NOTICE)。
|
package/lib/client.js
CHANGED
|
@@ -37,6 +37,140 @@ __export(client_exports, {
|
|
|
37
37
|
});
|
|
38
38
|
module.exports = __toCommonJS(client_exports);
|
|
39
39
|
|
|
40
|
+
// src/session-compat.ts
|
|
41
|
+
function compatibleSessions(sessions) {
|
|
42
|
+
const cache = /* @__PURE__ */ new WeakMap();
|
|
43
|
+
return {
|
|
44
|
+
list: sessions.list,
|
|
45
|
+
open: (id) => sessions.open(id),
|
|
46
|
+
create: (options) => sessions.create(options),
|
|
47
|
+
binding(id) {
|
|
48
|
+
const binding = sessions.binding(id);
|
|
49
|
+
if (!binding || binding.eventSource) return binding;
|
|
50
|
+
const cached = cache.get(binding);
|
|
51
|
+
if (cached) return cached;
|
|
52
|
+
let lastSeq = -1, initialized = false;
|
|
53
|
+
let snapshot = { revision: 0, change: { kind: "replace", entries: [] } };
|
|
54
|
+
const eventSource = {
|
|
55
|
+
getSnapshot() {
|
|
56
|
+
const state = binding.session.getSnapshot();
|
|
57
|
+
if (state.openState === "cold" || state.openState === "loading") initialized = false;
|
|
58
|
+
const events = [...state.chat?.timeline.turns.values() ?? []].flatMap((turn) => [turn.start, turn.end]).filter((entry) => !!entry).sort((a, b) => a.seq - b.seq);
|
|
59
|
+
const additions = events.filter((entry) => entry.seq > lastSeq);
|
|
60
|
+
if (additions.length) {
|
|
61
|
+
lastSeq = additions.at(-1).seq;
|
|
62
|
+
snapshot = { revision: snapshot.revision + 1, change: { kind: initialized ? "append" : "replace", entries: additions.map((entry) => ({ type: "event", event: entry })) } };
|
|
63
|
+
}
|
|
64
|
+
initialized = state.openState === void 0 || state.openState === "open";
|
|
65
|
+
return snapshot;
|
|
66
|
+
},
|
|
67
|
+
subscribe: (listener) => binding.session.subscribe(listener)
|
|
68
|
+
};
|
|
69
|
+
const adapted = { ...binding, eventSource };
|
|
70
|
+
cache.set(binding, adapted);
|
|
71
|
+
return adapted;
|
|
72
|
+
}
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
// src/legacy-pending.ts
|
|
77
|
+
function compatiblePending(sessions, resolveModern) {
|
|
78
|
+
const legacy = legacyPending(sessions);
|
|
79
|
+
const listeners = /* @__PURE__ */ new Set();
|
|
80
|
+
let source = legacy;
|
|
81
|
+
let off;
|
|
82
|
+
let timer;
|
|
83
|
+
const notify = () => {
|
|
84
|
+
for (const listener of listeners) listener();
|
|
85
|
+
};
|
|
86
|
+
const sync = () => {
|
|
87
|
+
const next = resolveModern() ?? legacy;
|
|
88
|
+
if (next === source && off) return;
|
|
89
|
+
off?.();
|
|
90
|
+
source = next;
|
|
91
|
+
off = listeners.size ? source.subscribe(notify) : void 0;
|
|
92
|
+
notify();
|
|
93
|
+
};
|
|
94
|
+
return {
|
|
95
|
+
getSnapshot: () => source.getSnapshot(),
|
|
96
|
+
subscribe(listener) {
|
|
97
|
+
listeners.add(listener);
|
|
98
|
+
if (!timer) {
|
|
99
|
+
sync();
|
|
100
|
+
timer = setInterval(sync, 250);
|
|
101
|
+
}
|
|
102
|
+
return () => {
|
|
103
|
+
listeners.delete(listener);
|
|
104
|
+
if (!listeners.size) {
|
|
105
|
+
clearInterval(timer);
|
|
106
|
+
timer = void 0;
|
|
107
|
+
off?.();
|
|
108
|
+
off = void 0;
|
|
109
|
+
}
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
function legacyPending(sessions) {
|
|
115
|
+
const listeners = /* @__PURE__ */ new Set();
|
|
116
|
+
const subscriptions = /* @__PURE__ */ new Map();
|
|
117
|
+
let snapshot = /* @__PURE__ */ new Map();
|
|
118
|
+
let offList;
|
|
119
|
+
const refresh = () => {
|
|
120
|
+
const list = sessions.list.getSnapshot();
|
|
121
|
+
for (const [id, item] of subscriptions) if (!list.byId[id] || list.byId[id].origin === "subagent") {
|
|
122
|
+
item.off();
|
|
123
|
+
subscriptions.delete(id);
|
|
124
|
+
}
|
|
125
|
+
const next = /* @__PURE__ */ new Map();
|
|
126
|
+
for (const id of list.ids) {
|
|
127
|
+
if (list.byId[id]?.origin === "subagent") continue;
|
|
128
|
+
const source = sessions.binding(id)?.session;
|
|
129
|
+
if (!source) continue;
|
|
130
|
+
if (listeners.size && subscriptions.get(id)?.source !== source) {
|
|
131
|
+
subscriptions.get(id)?.off();
|
|
132
|
+
subscriptions.set(id, { source, off: source.subscribe(refresh) });
|
|
133
|
+
}
|
|
134
|
+
const wait = source.getSnapshot().pending?.[0];
|
|
135
|
+
if (!wait) continue;
|
|
136
|
+
next.set(id, {
|
|
137
|
+
kind: wait.kind,
|
|
138
|
+
key: wait.key,
|
|
139
|
+
sessionId: wait.sessionId,
|
|
140
|
+
...wait.payload,
|
|
141
|
+
async answer(answer) {
|
|
142
|
+
if (wait.sessionId !== id || !source.getSnapshot().pending?.includes(wait)) throw new Error("\u8BF7\u6C42\u5DF2\u7ED3\u675F\u6216\u5DF2\u66F4\u6362");
|
|
143
|
+
const normalized = wait.kind === "question" ? { answers: answer.answers.map(({ custom, ...item }) => ({ ...item, ...custom?.trim() ? { custom: custom.trim() } : {} })) } : answer;
|
|
144
|
+
const value = wait.kind === "approval" ? { sessionId: id, approvalId: wait.payload.approvalId, outcome: answer } : { sessionId: id, answer: normalized };
|
|
145
|
+
const receipt = await wait.respond({ ok: true, value });
|
|
146
|
+
if (!receipt.accepted) throw new Error(receipt.reason ?? "\u5BBF\u4E3B\u62D2\u7EDD\u54CD\u5E94");
|
|
147
|
+
}
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
snapshot = next;
|
|
151
|
+
for (const listener of listeners) listener();
|
|
152
|
+
};
|
|
153
|
+
return {
|
|
154
|
+
getSnapshot: () => snapshot,
|
|
155
|
+
subscribe(listener) {
|
|
156
|
+
listeners.add(listener);
|
|
157
|
+
if (!offList) {
|
|
158
|
+
offList = sessions.list.subscribe(refresh);
|
|
159
|
+
refresh();
|
|
160
|
+
}
|
|
161
|
+
return () => {
|
|
162
|
+
listeners.delete(listener);
|
|
163
|
+
if (!listeners.size) {
|
|
164
|
+
offList?.();
|
|
165
|
+
offList = void 0;
|
|
166
|
+
for (const item of subscriptions.values()) item.off();
|
|
167
|
+
subscriptions.clear();
|
|
168
|
+
}
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
|
|
40
174
|
// src/companion-api.ts
|
|
41
175
|
function createCompanionProvider(handlers) {
|
|
42
176
|
let snapshot = null, active = true, displays = 0, signature = "null";
|
|
@@ -759,7 +893,7 @@ function PluginUpdateHeader({ locale }) {
|
|
|
759
893
|
zh2 ? "\u5BA0\u7269" : "Pets",
|
|
760
894
|
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", { className: "dcp-version", children: [
|
|
761
895
|
"v",
|
|
762
|
-
"0.1.
|
|
896
|
+
"0.1.4"
|
|
763
897
|
] })
|
|
764
898
|
] }),
|
|
765
899
|
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("nav", { className: "dcp-project-links", children: [
|
|
@@ -1977,7 +2111,7 @@ function observePetSettingsIcon() {
|
|
|
1977
2111
|
// src/client.tsx
|
|
1978
2112
|
var import_jsx_runtime4 = require("react/jsx-runtime");
|
|
1979
2113
|
var name = "michengai-codex-pet";
|
|
1980
|
-
var inject = ["slots", "sessions", "
|
|
2114
|
+
var inject = ["slots", "sessions", "locale"];
|
|
1981
2115
|
function openSettings() {
|
|
1982
2116
|
const trigger = document.querySelector("[data-dcu-settings-trigger]");
|
|
1983
2117
|
if (trigger)
|
|
@@ -2150,6 +2284,11 @@ function Page({
|
|
|
2150
2284
|
);
|
|
2151
2285
|
}
|
|
2152
2286
|
function apply(ctx) {
|
|
2287
|
+
const sessions = compatibleSessions(ctx.sessions);
|
|
2288
|
+
const pending = compatiblePending(sessions, () => {
|
|
2289
|
+
const service = ctx.reflect ? ctx.reflect.get("uiSession") : ctx.uiSession;
|
|
2290
|
+
return service?.pendingInteractions;
|
|
2291
|
+
});
|
|
2153
2292
|
ctx.slots.inject(
|
|
2154
2293
|
"settings.section",
|
|
2155
2294
|
() => ctx.slots.register(
|
|
@@ -2159,7 +2298,7 @@ function apply(ctx) {
|
|
|
2159
2298
|
label: () => translator(ctx.locale.getSnapshot().active)("\u5BA0\u7269"),
|
|
2160
2299
|
order: 12
|
|
2161
2300
|
},
|
|
2162
|
-
() => /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(Page, { sessions
|
|
2301
|
+
() => /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(Page, { sessions, locale: ctx.locale })
|
|
2163
2302
|
)
|
|
2164
2303
|
);
|
|
2165
2304
|
ctx.slots.inject(
|
|
@@ -2169,8 +2308,8 @@ function apply(ctx) {
|
|
|
2169
2308
|
() => /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
|
|
2170
2309
|
Overlay,
|
|
2171
2310
|
{
|
|
2172
|
-
sessions
|
|
2173
|
-
pending
|
|
2311
|
+
sessions,
|
|
2312
|
+
pending,
|
|
2174
2313
|
locale: ctx.locale
|
|
2175
2314
|
}
|
|
2176
2315
|
)
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@michengai/dsh-codex-pet",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.4",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"description": "独立实现的 DSH 宠物插件:Codex 原始宠物库、Skill 创建、Web 页内显示与消费者接入接口",
|
|
6
6
|
"type": "module",
|
|
@@ -43,9 +43,8 @@
|
|
|
43
43
|
"client": {
|
|
44
44
|
"platform": "web",
|
|
45
45
|
"inject": [
|
|
46
|
-
"@deepseek-ai/dsh-client-
|
|
47
|
-
"@deepseek-ai/dsh-client-ui-
|
|
48
|
-
"@deepseek-ai/dsh-client-ui-session",
|
|
46
|
+
"@deepseek-ai/dsh-client-ui-conversation",
|
|
47
|
+
"@deepseek-ai/dsh-client-ui-renderer",
|
|
49
48
|
"@deepseek-ai/dsh-client-locale"
|
|
50
49
|
]
|
|
51
50
|
}
|
|
@@ -54,15 +53,30 @@
|
|
|
54
53
|
"prepack": "npm run build && tsx scripts/verify-package.ts",
|
|
55
54
|
"build": "node scripts/build.mjs",
|
|
56
55
|
"check": "tsc --noEmit",
|
|
57
|
-
"test": "tsx --test test/*.test.ts",
|
|
56
|
+
"test": "tsx --test test/*.test.ts test/*.test.mjs",
|
|
57
|
+
"test:e2e": "node scripts/e2e-latest.mjs",
|
|
58
58
|
"smoke": "npm run build && node scripts/run-smoke.cjs",
|
|
59
59
|
"assets:import": "tsx scripts/import-codex.ts"
|
|
60
60
|
},
|
|
61
61
|
"peerDependencies": {
|
|
62
|
+
"@deepseek-ai/dsh-host-webserver": "0.1.0-rc.8 || 0.1.1-rc.2 || 0.1.2-rc.1 || 0.1.5-rc.1 || 0.1.5-rc.2",
|
|
62
63
|
"react": "^18.2.0",
|
|
63
64
|
"react-dom": "^18.2.0"
|
|
64
65
|
},
|
|
66
|
+
"peerDependenciesMeta": {
|
|
67
|
+
"@deepseek-ai/dsh-host-webserver": {
|
|
68
|
+
"optional": true
|
|
69
|
+
}
|
|
70
|
+
},
|
|
65
71
|
"devDependencies": {
|
|
72
|
+
"@deepseek-ai/cordis": "4.0.2",
|
|
73
|
+
"@deepseek-ai/dsh": "0.1.5-rc.2",
|
|
74
|
+
"@deepseek-ai/dsh-api-session-controller": "0.1.5-rc.2",
|
|
75
|
+
"@deepseek-ai/dsh-client-locale": "0.1.5-rc.2",
|
|
76
|
+
"@deepseek-ai/dsh-client-ui-renderer": "0.1.5-rc.2",
|
|
77
|
+
"@deepseek-ai/dsh-client-ui-session": "0.1.5-rc.2",
|
|
78
|
+
"@deepseek-ai/dsh-client-ui-slots": "0.1.5-rc.2",
|
|
79
|
+
"@deepseek-ai/dsh-host-webserver": "0.1.5-rc.2",
|
|
66
80
|
"@electron/asar": "^3.4.1",
|
|
67
81
|
"@radix-ui/react-icons": "^1.3.2",
|
|
68
82
|
"@types/node": "^24.0.0",
|