@deepseek-ai/dsh-web-app 0.1.1-rc.2 → 0.1.2-alpha.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/README.i18n.yaml +2 -2
- package/README.md +136 -10
- package/README.zh.md +137 -11
- package/cordis.patch.yml +50 -50
- package/lib/index.js +29 -17
- package/lib/types/index.d.ts +3 -3
- package/package.json +80 -78
package/README.i18n.yaml
CHANGED
|
@@ -2,5 +2,5 @@
|
|
|
2
2
|
# side as of the last confirmed-consistent state. Both languages carry equal authority;
|
|
3
3
|
# after editing either side, bring the other along and re-record with:
|
|
4
4
|
# pnpm run verify-translation-pairing --write packages/bundle/web-app/README.md
|
|
5
|
-
README.md:
|
|
6
|
-
README.zh.md:
|
|
5
|
+
README.md: 5588c7e72e6d61454620075c239ea571d026c5cf
|
|
6
|
+
README.zh.md: bfd7a58bf5343ddd06b49b97b622493f389da72f
|
package/README.md
CHANGED
|
@@ -1,20 +1,130 @@
|
|
|
1
|
-
|
|
1
|
+
---
|
|
2
|
+
description: "The browser GUI for dsh: interactive chat, model and settings management, and session history, for users running the dsh web surface."
|
|
3
|
+
kind: "package-bundle"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# @deepseek-ai/dsh-web-app
|
|
2
7
|
|
|
3
8
|
English | [中文](README.zh.md)
|
|
4
9
|
|
|
5
|
-
|
|
10
|
+
## Summary
|
|
11
|
+
|
|
12
|
+
Run `dsh --profile web` and the interface opens in your default browser, ready for interactive chat with the agent. You get the conversation view, model and settings management, and session history, backed by the same model access, tools, and safety defaults as every other surface. The command prints a tokenized startup URL; the browser exchanges that token for a signed session cookie and redirects to the clean root URL. You can change the port, suppress the browser handoff, and allow extra hosts from the command line; binding all network interfaces is intentionally not supported. Choose it for interactive work in the browser; `dsh-headless` is the one-shot command-line sibling.
|
|
13
|
+
|
|
14
|
+
## Table of Contents
|
|
15
|
+
|
|
16
|
+
- [Use this package](#use-this-package)
|
|
17
|
+
- [Understand the implementation](#understand-the-implementation)
|
|
18
|
+
- [Further Exploration](#further-exploration)
|
|
19
|
+
- [Model Experience](#model-experience)
|
|
20
|
+
- [Known Limitations and Deferred Work](#known-limitations-and-deferred-work)
|
|
21
|
+
- [Dev Note](#dev-note)
|
|
22
|
+
|
|
23
|
+
-----
|
|
24
|
+
|
|
25
|
+
<a id="use-this-package"></a>
|
|
26
|
+
## Use this package
|
|
27
|
+
|
|
28
|
+
Start the GUI, open your browser, and start talking to the agent. The flags fine-tune the invocation.
|
|
29
|
+
|
|
30
|
+
### Starting the Web GUI
|
|
31
|
+
|
|
32
|
+
```sh
|
|
33
|
+
dsh --profile web
|
|
34
|
+
dsh --profile web --no-open --port 8080
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
After startup you see a `dsh web:` line whose root URL carries a fresh process token. Unless `--no-open` or an SSH session suppresses it, the default browser opens that URL, receives a signed cookie, and redirects to the clean root page. You know it worked when the page loads and you can chat with the agent. Two failures to expect: if the frontend is not built, startup stops with a build hint (`pnpm run build` in a checkout); if the browser cannot be opened, a credential-free diagnostic prints to stderr while the server keeps running — open the printed startup URL yourself.
|
|
38
|
+
|
|
39
|
+
### Configuration
|
|
40
|
+
|
|
41
|
+
Most users never set these; the command-line flags feed the four settings below — `--host`, `--port`, and `--trusted-host` come from the invocation, and `--no-open` turns the browser handoff off for that invocation:
|
|
42
|
+
|
|
43
|
+
| Field | Default | Meaning |
|
|
44
|
+
|---|---|---|
|
|
45
|
+
| `openBrowser` | `true` | Open the default browser after startup; SSH launches suppress it |
|
|
46
|
+
| `printUrl` | `true` | Print the `dsh web:` URL line at startup |
|
|
47
|
+
| `surfaceContext` | `true` | Give the agent GUI-orientation context and expose `DSH_WEB_URL` to its shell commands |
|
|
48
|
+
| `trustedHosts` | `[]` | Extra hosts allowed to reach the GUI from the network |
|
|
49
|
+
|
|
50
|
+
The generated [configuration catalog](../../../docs/config-catalog.md#deepseek-aidsh-web-app) is the exhaustive source for every accepted field and its JSDoc.
|
|
51
|
+
|
|
52
|
+
### LAN access and trusted hosts
|
|
53
|
+
|
|
54
|
+
By default the GUI accepts connections from this machine only. A deployment that binds all network interfaces also allows browsers from the LAN, and the printed URL then includes a LAN address; `--trusted-host` adds extra hosts in either case. Host and Origin checks control reachability, while the token exchange authenticates every Host API method and WebSocket stream. The LAN addresses are sampled once at startup, so a network change later is not picked up — restart the GUI to re-advertise.
|
|
55
|
+
|
|
56
|
+
### Running over SSH
|
|
57
|
+
|
|
58
|
+
When you launch `dsh --profile web` over SSH, the URL line still prints but the browser is not opened for you: the SSH client or editor owns the local forwarding address. Open the forwarded URL on your machine yourself; the printed URL names the remote host's loopback endpoint.
|
|
59
|
+
|
|
60
|
+
### Per-session agent setup
|
|
61
|
+
|
|
62
|
+
Each browser session composes its own agent from the shipped presets (the `standard` preset by default), instead of sharing one process-wide tool set. You can change the default preset or add your own presets under `$DSH_HOME/.agent-presets`.
|
|
63
|
+
|
|
64
|
+
-----
|
|
65
|
+
|
|
66
|
+
<a id="understand-the-implementation"></a>
|
|
67
|
+
## Understand the implementation
|
|
68
|
+
|
|
69
|
+
<details>
|
|
70
|
+
<summary>Implementation internals — click to expand</summary>
|
|
6
71
|
|
|
7
|
-
|
|
72
|
+
The bundle is one patch plus one runtime glue plugin. The storage stack and projection cache come from `dsh-base`; the web overlay's workspace and message-feedback rows consume that shared `storageDomain` service. The patch restates the surface-specific values the base deliberately omits, inserts the web-only host rows and browser roster, then moves the agent plane behind presets. The glue plugin owns dist serving, trust sampling, prompt sections, the bash variable, and the readiness announcements.
|
|
8
73
|
|
|
9
|
-
|
|
74
|
+
### Patch semantics
|
|
10
75
|
|
|
76
|
+
A patch replaces the targeted row's whole `config`, so each web row restates every key it owns: the persona, the `DSH_TOOLS_MODE` PTC mode opt-in, and the `session-query-sqlite` values on the base rows, then `insert` adds the web host rows, transport, and browser roster. The per-agent tool rows the base mounts process-wide are disabled here and the preset roster takes over; the reasoning for each host-plane versus preset-plane decision is inline in the patch.
|
|
77
|
+
|
|
78
|
+
### Readiness
|
|
79
|
+
|
|
80
|
+
The URL line and browser handoff are readiness signals: supervisors RPC as soon as they observe the line, and a browser requests the page as soon as it opens, so both run only after the Loader tree settles and Connection authentication is available — or immediately in a hand-built tree without a Loader. A tree disposed mid-boot announces nothing.
|
|
81
|
+
|
|
82
|
+
### LAN trust sampling
|
|
83
|
+
|
|
84
|
+
`resolveLanTrust` samples the network once at boot: a loopback bind (`127.0.0.1`) derives no LAN addresses, while an all-interfaces bind adds every non-internal IPv4 literal. The derived literals plus the explicit `--trusted-host` authorities form the `/api` browser-trust fence, and the printed LAN URL always matches that fence.
|
|
85
|
+
|
|
86
|
+
### Source map
|
|
87
|
+
|
|
88
|
+
| File | Role |
|
|
89
|
+
|---|---|
|
|
90
|
+
| [`src/index.ts`](src/index.ts) | The `web-app` glue plugin: dist resolution, LAN trust sampling, prompt sections, bash variable, URL line, browser handoff |
|
|
91
|
+
| [`src/startup.ts`](src/startup.ts) | The `web-startup` provider: `--host`, `--port`, `--trusted-host`, `--no-open`, `--help` |
|
|
92
|
+
| [`cordis.patch.yml`](cordis.patch.yml) | The web patch: restated base values, web host rows, browser roster, agent plane behind presets |
|
|
93
|
+
| [`src/invariant.ts`](src/invariant.ts) | Invariant companion: no runtime invariant; every contribution is registry-disposed |
|
|
94
|
+
| [`tests/web-app.spec.ts`](tests/web-app.spec.ts) | Dist resolution, fallback seat, prompt sections, readiness |
|
|
95
|
+
| [`tests/startup.spec.ts`](tests/startup.spec.ts) | Command-line parsing over a real Loader tree |
|
|
96
|
+
| [`tests/trusted-hosts.spec.ts`](tests/trusted-hosts.spec.ts) | LAN-trust sampling |
|
|
97
|
+
| [`tests/browser-open.spec.ts`](tests/browser-open.spec.ts) | Default-browser handoff after the page is reachable |
|
|
98
|
+
|
|
99
|
+
### Invariant ownership
|
|
100
|
+
|
|
101
|
+
The invariant companion registers an empty installer because every contribution — the frontend-static child plugin, the prompt sections, and the bash variable registration — is registry-disposed with the fiber, and each owning registry's package carries that relation's invariant.
|
|
102
|
+
|
|
103
|
+
</details>
|
|
104
|
+
|
|
105
|
+
-----
|
|
106
|
+
|
|
107
|
+
<a id="further-exploration"></a>
|
|
108
|
+
## Further Exploration
|
|
109
|
+
|
|
110
|
+
Read these pages when you want to go deeper into the shared core, the browser reload pipeline, or the built frontend.
|
|
111
|
+
|
|
112
|
+
- [Bundle package map](../README.md) — the surfaces built on the same core.
|
|
113
|
+
- [dsh-base](../base/README.md) — the shared core the GUI runs on.
|
|
114
|
+
- [dsh-client-hmr](../../client/hmr/README.md) — how client-plugin changes reload during development.
|
|
115
|
+
- [frontend-static](../../host/frontend-static/README.md) — how the built frontend is served.
|
|
116
|
+
- [Generated configuration catalog](../../../docs/config-catalog.md#deepseek-aidsh-web-app) — every accepted config field and its source declaration.
|
|
117
|
+
|
|
118
|
+
-----
|
|
119
|
+
|
|
120
|
+
<a id="model-experience"></a>
|
|
11
121
|
## Model Experience
|
|
12
122
|
|
|
13
123
|
### Harness-source and Web-surface context
|
|
14
124
|
|
|
15
125
|
#### What the model sees
|
|
16
126
|
|
|
17
|
-
When `surfaceContext` is true, the `harness:source` section identifies the on-disk Harness implementation without claiming it is the working directory, and the `app:web-surface` global section (order −
|
|
127
|
+
When `surfaceContext` is true, the `harness:source` section identifies the on-disk Harness implementation without claiming it is the working directory, and the `app:web-surface` global section (first-party order −800) orients the model to the GUI: the canonical local URL, the "this page" referent, the update contract (the reload receiver is always on; no-refresh reloads additionally need the `pnpm run dev:web` watcher), and the instruction not to start replacement servers. `DSH_WEB_URL` additionally appears in the managed bash environment with its description, resolved per invocation from the live server. When it is false, neither section nor the variable is registered.
|
|
18
128
|
|
|
19
129
|
#### Token effect
|
|
20
130
|
|
|
@@ -26,8 +136,24 @@ The prompt section sits near the system prompt's head and is stable for the life
|
|
|
26
136
|
|
|
27
137
|
## Known Limitations and Deferred Work
|
|
28
138
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
139
|
+
<a id="known-limitations-and-deferred-work"></a>
|
|
140
|
+
|
|
141
|
+
|
|
142
|
+
These limits tell you what to expect in unusual setups — a source checkout, SSH sessions, or strict networks. They are current package constraints, not a general browser comparison or a task backlog.
|
|
143
|
+
|
|
144
|
+
- **The frontend must be built** — a source checkout needs `pnpm run build` first; startup stops with a build hint when the dist is missing, and there is no source-serving fallback.
|
|
145
|
+
- **LAN addresses are sampled once at startup** — interface changes after boot are not re-advertised; the printed LAN URL always matches what was sampled.
|
|
146
|
+
- **Only the handoff start is observable** — the GUI reports that the browser was asked to open, not that it actually opened; a later browser exit is never reported, and the printed URL is your manual fallback.
|
|
147
|
+
- **SSH sessions keep the URL but skip the browser handoff** — the printed URL names the remote host's loopback endpoint; the SSH client or editor must expose and open the local forwarded address.
|
|
148
|
+
- **`BROWSER` overrides only come from the environment** — a discovered `.env` cannot set `BROWSER`; only an inherited value can choose the executable for the automatic handoff.
|
|
149
|
+
- **Binding all network interfaces is not supported** — `--host 0.0.0.0` is rejected at startup for safety; use the default loopback host.
|
|
150
|
+
|
|
151
|
+
<a id="dev-note"></a>
|
|
152
|
+
### Dev Note
|
|
153
|
+
|
|
154
|
+
<details>
|
|
155
|
+
<summary>Working context for maintainers — click to expand</summary>
|
|
156
|
+
|
|
157
|
+
None.
|
|
158
|
+
|
|
159
|
+
</details>
|
package/README.zh.md
CHANGED
|
@@ -1,20 +1,130 @@
|
|
|
1
|
-
|
|
1
|
+
---
|
|
2
|
+
description: "dsh 的浏览器 GUI:交互式聊天、模型与设置管理、会话历史,供用户运行 dsh web 表层。"
|
|
3
|
+
kind: "package-bundle"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# @deepseek-ai/dsh-web-app
|
|
2
7
|
|
|
3
8
|
[English](README.md) | 中文
|
|
4
9
|
|
|
5
|
-
|
|
10
|
+
## 概述
|
|
11
|
+
|
|
12
|
+
运行 `dsh --profile web`,界面会在你的默认浏览器中打开,即可与 agent(智能体)交互式聊天。你会获得会话视图、模型与设置管理以及会话历史,背后与其他表层相同的模型访问、工具与安全默认值。该命令会打印带 token 的启动 URL;浏览器用该 token 换取签名会话 cookie,再重定向到干净的根 URL。你可以从命令行更改端口、关闭浏览器交接并允许额外主机;有意不支持绑定所有网络接口。需要浏览器中的交互式工作时选择它;`dsh-headless` 是一次性的命令行兄弟表层。
|
|
13
|
+
|
|
14
|
+
## 目录
|
|
15
|
+
|
|
16
|
+
- [使用本包](#use-this-package)
|
|
17
|
+
- [理解实现](#understand-the-implementation)
|
|
18
|
+
- [进一步探索](#further-exploration)
|
|
19
|
+
- [模型体验](#model-experience)
|
|
20
|
+
- [已知限制与延期工作](#known-limitations-and-deferred-work)
|
|
21
|
+
- [开发备注](#dev-note)
|
|
22
|
+
|
|
23
|
+
-----
|
|
24
|
+
|
|
25
|
+
<a id="use-this-package"></a>
|
|
26
|
+
## 使用本包
|
|
27
|
+
|
|
28
|
+
启动 GUI、打开浏览器,然后开始与 agent(智能体)对话。flag 用于微调本次调用。
|
|
29
|
+
|
|
30
|
+
### 启动 Web GUI
|
|
31
|
+
|
|
32
|
+
```sh
|
|
33
|
+
dsh --profile web
|
|
34
|
+
dsh --profile web --no-open --port 8080
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
启动后你会看到 `dsh web:` 行,其根 URL 携带新的进程 token。除非 `--no-open` 或 SSH 会话抑制,否则默认浏览器会打开该 URL、取得签名 cookie,再重定向到干净的根页面。页面加载且你可以与 agent(智能体)对话,就说明成功了。两种可预期的失败:前端未构建时,启动会以构建提示停止(checkout 中运行 `pnpm run build`);浏览器无法打开时,stderr 会打印不含凭据的诊断,但服务器会继续运行——请自行打开已打印的启动 URL。
|
|
38
|
+
|
|
39
|
+
### 配置
|
|
40
|
+
|
|
41
|
+
大多数用户不需要设置这些;命令行 flag 会提供给下面四个设置——`--host`、`--port` 与 `--trusted-host` 来自本次调用,`--no-open` 仅对本次调用关闭浏览器交接:
|
|
42
|
+
|
|
43
|
+
| 字段 | 默认值 | 含义 |
|
|
44
|
+
|---|---|---|
|
|
45
|
+
| `openBrowser` | `true` | 启动后用默认浏览器打开;SSH 启动会抑制它 |
|
|
46
|
+
| `printUrl` | `true` | 启动时打印 `dsh web:` URL 行 |
|
|
47
|
+
| `surfaceContext` | `true` | 给 agent(智能体)提供 GUI 定位上下文,并把 `DSH_WEB_URL` 暴露给其 shell 命令 |
|
|
48
|
+
| `trustedHosts` | `[]` | 允许从网络访问 GUI 的额外主机 |
|
|
49
|
+
|
|
50
|
+
生成的[配置目录](../../../docs/config-catalog.zh.md#deepseek-aidsh-web-app)是每个受支持字段及其 JSDoc 的穷尽式真源。
|
|
51
|
+
|
|
52
|
+
### LAN 访问与可信主机
|
|
53
|
+
|
|
54
|
+
默认情况下 GUI 只接受本机的连接。绑定所有网络接口的部署也会允许 LAN 内的浏览器访问,此时打印的 URL 会附带一个 LAN 地址;`--trusted-host` 在两种情况下都能添加额外主机。Host 与 Origin 检查控制可达性,token 交换则认证每个 Host API 方法与 WebSocket stream。LAN 地址只在启动时采样一次,因此之后的网络变化不会被感知——重启 GUI 以重新公告。
|
|
55
|
+
|
|
56
|
+
### 通过 SSH 运行
|
|
57
|
+
|
|
58
|
+
通过 SSH 启动 `dsh --profile web` 时,URL 行仍会打印,但不会为你打开浏览器:本地转发地址由 SSH 客户端或编辑器持有。请在自己的机器上打开转发后的 URL;打印出的 URL 指向远端宿主机 loopback 端点。
|
|
59
|
+
|
|
60
|
+
### 按会话的 agent 设置
|
|
61
|
+
|
|
62
|
+
每个浏览器会话都从随发行版交付的 preset(默认 `standard`)组合自己的 agent(智能体),而不是共享一套进程级工具集。你可以更改默认 preset,或在 `$DSH_HOME/.agent-presets` 下添加自己的 preset。
|
|
63
|
+
|
|
64
|
+
-----
|
|
65
|
+
|
|
66
|
+
<a id="understand-the-implementation"></a>
|
|
67
|
+
## 理解实现
|
|
68
|
+
|
|
69
|
+
<details>
|
|
70
|
+
<summary>实现细节——点击展开</summary>
|
|
6
71
|
|
|
7
|
-
|
|
72
|
+
本组合包是一份 patch 加一个运行时粘合插件。patch 重述 base 刻意省略的表层专属值,插入仅 Web 使用的宿主行与浏览器名录,然后把 agent 层移到 preset 之后;粘合插件负责 dist 服务、信任采样、提示词段落、bash 变量与就绪宣告。
|
|
8
73
|
|
|
9
|
-
|
|
74
|
+
### patch 语义
|
|
10
75
|
|
|
76
|
+
patch 会替换目标行的整个 `config`,因此每个 Web 行都重述自己拥有的每个键:基础行上的 persona、`DSH_TOOLS_MODE` PTC mode 开关与 `session-query-sqlite` 值,随后 `insert` 添加 Web 宿主行、传输层与浏览器名录。base 以进程级挂载的按 agent 工具行在这里被禁用,由 preset 名录接管;每项宿主层与 preset 层归属决策的理由以行内注释写在 patch 里。
|
|
77
|
+
|
|
78
|
+
### 就绪宣告
|
|
79
|
+
|
|
80
|
+
URL 行与浏览器交接都是就绪信号:监督方一观察到该行就发起 RPC,浏览器一打开就请求页面,因此两者只在 Loader 配置树结算且 Connection 认证可用后运行——在没有 Loader 的手工构建树中则立即运行。启动中途被释放的树不会宣告任何内容。
|
|
81
|
+
|
|
82
|
+
### LAN 信任采样
|
|
83
|
+
|
|
84
|
+
`resolveLanTrust` 在启动时只采样一次网络:loopback 绑定(`127.0.0.1`)不派生任何 LAN 地址,绑定所有网卡则会加入每个非 internal IPv4 字面量。派生字面量加上显式的 `--trusted-host` 权威标识组成 `/api` 浏览器信任栅栏,打印的 LAN URL 始终与该栅栏一致。
|
|
85
|
+
|
|
86
|
+
### 源码地图
|
|
87
|
+
|
|
88
|
+
| 文件 | 职责 |
|
|
89
|
+
|---|---|
|
|
90
|
+
| [`src/index.ts`](src/index.ts) | `web-app` 粘合插件:dist 解析、LAN 信任采样、提示词段落、bash 变量、URL 行、浏览器交接 |
|
|
91
|
+
| [`src/startup.ts`](src/startup.ts) | `web-startup` 提供方:`--host`、`--port`、`--trusted-host`、`--no-open`、`--help` |
|
|
92
|
+
| [`cordis.patch.yml`](cordis.patch.yml) | Web patch:重述的基础值、Web 宿主行、浏览器名录、preset 之后的 agent 层 |
|
|
93
|
+
| [`src/invariant.ts`](src/invariant.ts) | 不变式伴生插件:无运行时不变式;每项贡献都由 registry 释放 |
|
|
94
|
+
| [`tests/web-app.spec.ts`](tests/web-app.spec.ts) | dist 解析、fallback 席位、提示词段落、就绪宣告 |
|
|
95
|
+
| [`tests/startup.spec.ts`](tests/startup.spec.ts) | 在真实 Loader 树上的命令行解析 |
|
|
96
|
+
| [`tests/trusted-hosts.spec.ts`](tests/trusted-hosts.spec.ts) | LAN 信任采样 |
|
|
97
|
+
| [`tests/browser-open.spec.ts`](tests/browser-open.spec.ts) | 页面可达后的默认浏览器交接 |
|
|
98
|
+
|
|
99
|
+
### 不变式归属
|
|
100
|
+
|
|
101
|
+
不变式伴生插件注册一个空安装器,因为每项贡献——frontend-static 子插件、提示词段落与 bash 变量注册——都会随 fiber 由 registry 释放,且每个所属 registry 的包负责该关系的不变式。
|
|
102
|
+
|
|
103
|
+
</details>
|
|
104
|
+
|
|
105
|
+
-----
|
|
106
|
+
|
|
107
|
+
<a id="further-exploration"></a>
|
|
108
|
+
## 进一步探索
|
|
109
|
+
|
|
110
|
+
当你想深入了解共享核心、浏览器重载流水线或已构建的前端时,阅读以下页面。
|
|
111
|
+
|
|
112
|
+
- [组合包包映射](../README.zh.md)——基于同一核心构建的表层。
|
|
113
|
+
- [dsh-base](../base/README.zh.md)——GUI 运行其上的共享核心。
|
|
114
|
+
- [dsh-client-hmr](../../client/hmr/README.zh.md)——开发期间客户端插件变更如何重载。
|
|
115
|
+
- [frontend-static](../../host/frontend-static/README.zh.md)——已构建的前端如何被服务。
|
|
116
|
+
- [生成配置目录](../../../docs/config-catalog.zh.md#deepseek-aidsh-web-app)——每个受支持配置字段及其源声明。
|
|
117
|
+
|
|
118
|
+
-----
|
|
119
|
+
|
|
120
|
+
<a id="model-experience"></a>
|
|
11
121
|
## 模型体验
|
|
12
122
|
|
|
13
123
|
### Harness 源码与 Web 表层上下文
|
|
14
124
|
|
|
15
|
-
####
|
|
125
|
+
#### 模型看到什么
|
|
16
126
|
|
|
17
|
-
当 `surfaceContext` 为 true 时,`harness:source` 段落标明磁盘上的 Harness 实现,但不会声称它就是工作目录;全局段落 `app:web-surface
|
|
127
|
+
当 `surfaceContext` 为 true 时,`harness:source` 段落标明磁盘上的 Harness 实现,但不会声称它就是工作目录;全局段落 `app:web-surface`(first-party 顺序 −800)则向模型说明 GUI:规范的本地 URL、「this page」指代什么、更新约定(重载接收端始终开启;无刷新重载还需要 `pnpm run dev:web` watcher),以及不要启动替代服务器的指令。`DSH_WEB_URL` 还会连同描述出现在受管 bash 环境中,每次调用时从运行中的服务器解析。当它为 false 时,这两个段落和该变量都不会注册。
|
|
18
128
|
|
|
19
129
|
#### Token 影响
|
|
20
130
|
|
|
@@ -26,8 +136,24 @@ Web 使用共享的有界 normal 默认值,在首次请求后最多再重试
|
|
|
26
136
|
|
|
27
137
|
## 已知限制与延期工作
|
|
28
138
|
|
|
29
|
-
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
139
|
+
<a id="known-limitations-and-deferred-work"></a>
|
|
140
|
+
|
|
141
|
+
|
|
142
|
+
这些限制告诉你在不常见的环境下会遇到什么——源码 checkout、SSH 会话或严格网络。它们是当前包约束,不是通用的浏览器对比或任务积压。
|
|
143
|
+
|
|
144
|
+
- **前端必须已构建**——源码 checkout 需要先运行 `pnpm run build`;dist 缺失时启动会以构建提示停止,且没有从源码直接服务的回退路径。
|
|
145
|
+
- **LAN 地址只在启动时采样一次**——启动后的网卡变化不会重新公告;打印的 LAN URL 始终与采样结果一致。
|
|
146
|
+
- **只能观察到交接的启动**——GUI 只报告浏览器被请求打开,而不是它确实打开了;之后的浏览器退出永远不会上报,打印的 URL 是你的手动回退路径。
|
|
147
|
+
- **SSH 会话保留 URL 但跳过浏览器交接**——打印的 URL 指向远端宿主机 loopback 端点;SSH 客户端或编辑器必须暴露并打开本地转发地址。
|
|
148
|
+
- **`BROWSER` 覆盖只能来自环境**——被发现的 `.env` 不能设置 `BROWSER`;只有继承值能为自动交接选择可执行文件。
|
|
149
|
+
- **不支持绑定所有网络接口**——出于安全考虑,`--host 0.0.0.0` 会在启动时被拒绝;请使用默认 loopback 主机。
|
|
150
|
+
|
|
151
|
+
<a id="dev-note"></a>
|
|
152
|
+
### 开发备注
|
|
153
|
+
|
|
154
|
+
<details>
|
|
155
|
+
<summary>维护者的工作上下文——点击展开</summary>
|
|
156
|
+
|
|
157
|
+
无。
|
|
158
|
+
|
|
159
|
+
</details>
|
package/cordis.patch.yml
CHANGED
|
@@ -18,10 +18,6 @@
|
|
|
18
18
|
persona: >-
|
|
19
19
|
You are a coding agent powered by the {{model}} model. Your working directory is {{cwd}}.
|
|
20
20
|
|
|
21
|
-
# TODO: Re-enable shared HMR for Web after its reload lifecycle is tested.
|
|
22
|
-
- id: hmr
|
|
23
|
-
disabled: true
|
|
24
|
-
|
|
25
21
|
# Full-text session search is opt-in (the base row's `openAt: never`). This
|
|
26
22
|
# restatement keeps the Web values on one ephemeral in-memory index; a
|
|
27
23
|
# deployment enabling content search overrides `openAt` to `first-search` in a
|
|
@@ -34,8 +30,8 @@
|
|
|
34
30
|
|
|
35
31
|
- id: tools
|
|
36
32
|
config:
|
|
37
|
-
# TEMPORARY workaround: DSH_TOOLS_MODE (native|
|
|
38
|
-
# process into
|
|
33
|
+
# TEMPORARY workaround: DSH_TOOLS_MODE (native|ptc|both) opts a whole dsh
|
|
34
|
+
# process into PTC mode while per-session tool-presentation selection is being
|
|
39
35
|
# designed; unset keeps the schema default (native). Remove the env seam
|
|
40
36
|
# once the web UI owns the choice per session.
|
|
41
37
|
mode: !!js process.env.DSH_TOOLS_MODE
|
|
@@ -45,22 +41,14 @@
|
|
|
45
41
|
# `dsh.client` rows are the browser roster the modules node half scans into
|
|
46
42
|
# window.__DSH_BOOT__; the modules row is simultaneously a host row.
|
|
47
43
|
- insert:
|
|
44
|
+
# Host-owned opt-in sampled when a new Web session receives its preset
|
|
45
|
+
# delegation tools. The Plugins page edits this settings namespace.
|
|
46
|
+
- id: subagent-model-selection-settings
|
|
47
|
+
name: '@deepseek-ai/dsh-tool-subagent/model-selection-settings'
|
|
48
|
+
|
|
48
49
|
- id: code-runtime
|
|
49
50
|
name: '@deepseek-ai/dsh-code-runtime-worker-thread'
|
|
50
51
|
|
|
51
|
-
- id: storage
|
|
52
|
-
name: '@deepseek-ai/dsh-storage'
|
|
53
|
-
|
|
54
|
-
- id: storage-json
|
|
55
|
-
name: '@deepseek-ai/dsh-storage-json'
|
|
56
|
-
config:
|
|
57
|
-
root: !!js dshHomePath('storages')
|
|
58
|
-
|
|
59
|
-
- id: storage-domain
|
|
60
|
-
name: '@deepseek-ai/dsh-storage-domain'
|
|
61
|
-
config:
|
|
62
|
-
backend: json
|
|
63
|
-
|
|
64
52
|
- id: message-feedback
|
|
65
53
|
name: '@deepseek-ai/dsh-message-feedback'
|
|
66
54
|
config:
|
|
@@ -73,12 +61,6 @@
|
|
|
73
61
|
- id: workspace
|
|
74
62
|
name: '@deepseek-ai/dsh-workspace'
|
|
75
63
|
|
|
76
|
-
- id: session-projection-cache
|
|
77
|
-
name: '@deepseek-ai/dsh-session-projection-cache'
|
|
78
|
-
config:
|
|
79
|
-
writeEveryEvents: 200
|
|
80
|
-
writeIntervalMs: 5000
|
|
81
|
-
|
|
82
64
|
- id: session-reference
|
|
83
65
|
name: '@deepseek-ai/dsh-session-reference'
|
|
84
66
|
|
|
@@ -100,10 +82,18 @@
|
|
|
100
82
|
- id: plugin-inventory
|
|
101
83
|
name: '@deepseek-ai/dsh-host-plugin-inventory'
|
|
102
84
|
|
|
103
|
-
#
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
85
|
+
# Session commands, cold reads, and live control over Typert Remote.
|
|
86
|
+
- id: session-controller
|
|
87
|
+
name: '@deepseek-ai/dsh-api-session-controller'
|
|
88
|
+
|
|
89
|
+
# Configuration-surface reads and writes over Typert Remote. Each method
|
|
90
|
+
# reports an actionable error when its settings-domain provider is absent.
|
|
91
|
+
- id: settings-controller
|
|
92
|
+
name: '@deepseek-ai/dsh-api-settings-controller'
|
|
93
|
+
|
|
94
|
+
# Workspace commands and reconnect-safe projection over Typert Remote.
|
|
95
|
+
- id: workspace-controller
|
|
96
|
+
name: '@deepseek-ai/dsh-api-workspace-controller'
|
|
107
97
|
|
|
108
98
|
- id: cordis-host-runner
|
|
109
99
|
name: '@deepseek-ai/dsh-cordis-host-runner'
|
|
@@ -124,6 +114,9 @@
|
|
|
124
114
|
config:
|
|
125
115
|
host: !!js ctx.webStartup.host ?? '127.0.0.1'
|
|
126
116
|
port: !!js ctx.webStartup.port ?? 3080
|
|
117
|
+
compression: gzip
|
|
118
|
+
compressionLevel: 1
|
|
119
|
+
compressionThresholdBytes: 1024
|
|
127
120
|
|
|
128
121
|
# Web glue owned by this bundle: resolves the built frontend dist (an
|
|
129
122
|
# assembly fact of dsh-web-app, never user config), mounts the
|
|
@@ -173,9 +166,6 @@
|
|
|
173
166
|
- id: api-remotes
|
|
174
167
|
name: '@deepseek-ai/dsh-api-remotes'
|
|
175
168
|
|
|
176
|
-
- id: client-runtime
|
|
177
|
-
name: '@deepseek-ai/dsh-client-runtime'
|
|
178
|
-
|
|
179
169
|
- id: cordis-client-runner
|
|
180
170
|
name: '@deepseek-ai/dsh-cordis-client-runner'
|
|
181
171
|
|
|
@@ -191,6 +181,9 @@
|
|
|
191
181
|
- id: ui-renderer
|
|
192
182
|
name: '@deepseek-ai/dsh-client-ui-renderer'
|
|
193
183
|
|
|
184
|
+
- id: ui-session
|
|
185
|
+
name: '@deepseek-ai/dsh-client-ui-session'
|
|
186
|
+
|
|
194
187
|
- id: ui-sidebar
|
|
195
188
|
name: '@deepseek-ai/dsh-client-ui-sidebar'
|
|
196
189
|
|
|
@@ -209,6 +202,12 @@
|
|
|
209
202
|
- id: ui-conversation
|
|
210
203
|
name: '@deepseek-ai/dsh-client-ui-conversation'
|
|
211
204
|
|
|
205
|
+
- id: ui-approval
|
|
206
|
+
name: '@deepseek-ai/dsh-client-ui-approval'
|
|
207
|
+
|
|
208
|
+
- id: ui-chat
|
|
209
|
+
name: '@deepseek-ai/dsh-client-ui-chat'
|
|
210
|
+
|
|
212
211
|
# Official occupants for the generic sidebar and conversation brand slots.
|
|
213
212
|
- id: ui-brand-official
|
|
214
213
|
name: '@deepseek-ai/dsh-client-ui-brand-official'
|
|
@@ -254,6 +253,13 @@
|
|
|
254
253
|
- id: ui-reference
|
|
255
254
|
name: '@deepseek-ai/dsh-client-ui-reference'
|
|
256
255
|
|
|
256
|
+
# Read-only active Schedule catalog. The shipped Web graph resolves the
|
|
257
|
+
# client package but leaves it disabled; the explicit Schedule overlay
|
|
258
|
+
# enables this same row together with the host Schedule services.
|
|
259
|
+
- id: ui-schedule
|
|
260
|
+
name: '@deepseek-ai/dsh-client-ui-schedule'
|
|
261
|
+
disabled: true
|
|
262
|
+
|
|
257
263
|
# Background jobs: the session-header list over the jobsBySession mirror.
|
|
258
264
|
- id: ui-jobs
|
|
259
265
|
name: '@deepseek-ai/dsh-client-ui-jobs'
|
|
@@ -354,14 +360,11 @@
|
|
|
354
360
|
- id: tool-skill
|
|
355
361
|
disabled: true
|
|
356
362
|
|
|
357
|
-
# The goal
|
|
358
|
-
#
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
# That is the `shell-env` criterion read from the other side: injection is not
|
|
363
|
-
# the only host relationship a Service can have. The registry is keyed by
|
|
364
|
-
# session, so one host instance serves every session exactly as before presets.
|
|
363
|
+
# The goal service and session driver stay on the host plane, where Gateway
|
|
364
|
+
# remotes resolve them. Presets own the human command and model-facing tool.
|
|
365
|
+
|
|
366
|
+
- id: command-goal
|
|
367
|
+
disabled: true
|
|
365
368
|
|
|
366
369
|
- id: tool-goal
|
|
367
370
|
disabled: true
|
|
@@ -428,16 +431,13 @@
|
|
|
428
431
|
- id: tool-web
|
|
429
432
|
disabled: true
|
|
430
433
|
|
|
431
|
-
# The preset roster.
|
|
432
|
-
#
|
|
433
|
-
# where a person — or an
|
|
434
|
-
#
|
|
435
|
-
#
|
|
436
|
-
#
|
|
437
|
-
#
|
|
438
|
-
# same treatment `distIndex` gets on the webserver row. The writable root is
|
|
439
|
-
# `dsh-agent-presets`' own default (`includeUserRoot`), so a composition that
|
|
440
|
-
# never reaches that patch still finds a person's presets.
|
|
434
|
+
# The preset roster. The shipped presets are bundled inside
|
|
435
|
+
# `dsh-agent-presets` itself and prepended as a read-only `system` root
|
|
436
|
+
# (`includeShippedRoot`); `$DSH_HOME/.agent-presets` is where a person — or an
|
|
437
|
+
# agent — authors their own, appended by the same package (`includeUserRoot`),
|
|
438
|
+
# and carries the same trust as shell access because a preset IS a
|
|
439
|
+
# composition. This row only names the default and any deployment-added
|
|
440
|
+
# `roots`; no launcher patching is involved.
|
|
441
441
|
- insert:
|
|
442
442
|
- id: agent-presets
|
|
443
443
|
name: '@deepseek-ai/dsh-agent-presets'
|
package/lib/index.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { createRequire } from "node:module";
|
|
2
2
|
import { spawn } from "node:child_process";
|
|
3
|
+
import { dirname, join } from "node:path";
|
|
3
4
|
import { networkInterfaces } from "node:os";
|
|
4
5
|
import { fileURLToPath } from "node:url";
|
|
5
6
|
import z from "@deepseek-ai/schemastery";
|
|
@@ -15,15 +16,16 @@ import { scrubbedParentEnv } from "@deepseek-ai/dsh-subprocess";
|
|
|
15
16
|
* the built frontend dist (workspace knowledge of this bundle, never user
|
|
16
17
|
* config), mounts the `frontend-static` fallback owner over it, registers the
|
|
17
18
|
* harness-source and web-surface prompt sections, the bash-visible web runtime
|
|
18
|
-
* variable, the URL line, and the default-browser handoff.
|
|
19
|
-
*
|
|
20
|
-
* patch.
|
|
19
|
+
* variable, the process-token URL line, and the default-browser handoff. The
|
|
20
|
+
* model and shell retain the clean URL. App command-line values arrive through
|
|
21
|
+
* the `webStartup` service expressions in the bundle patch.
|
|
21
22
|
* @module @deepseek-ai/dsh-web-app
|
|
22
23
|
*/
|
|
23
24
|
/** Stable Cordis plugin name. */
|
|
24
25
|
const name = "web-app";
|
|
25
26
|
/** This dsh installation's root, from either this package's source or built entry. */
|
|
26
27
|
const SOURCE_ROOT = fileURLToPath(new URL("../../../..", import.meta.url));
|
|
28
|
+
const ANNOUNCED_ROOTS = /* @__PURE__ */ new WeakSet();
|
|
27
29
|
/** Runtime service that releases Web rows after bind-dependent values resolve. */
|
|
28
30
|
const WEB_RUNTIME_SERVICE = "webRuntime";
|
|
29
31
|
/** Services required before the web runtime can mount. */
|
|
@@ -103,14 +105,20 @@ function localWebUrl(ctx) {
|
|
|
103
105
|
if (port === void 0) throw new Error("web-app: webServer service missing while resolving Web runtime");
|
|
104
106
|
return `http://${LOOPBACK_HOST}:${String(port)}`;
|
|
105
107
|
}
|
|
106
|
-
/**
|
|
108
|
+
/**
|
|
109
|
+
* Dist location is workspace knowledge of this bundle: anchored on the
|
|
110
|
+
* frontend package manifest, not configured. Existence is a request-time
|
|
111
|
+
* concern — the fallback owner reads files per request, so a composition
|
|
112
|
+
* whose page never reaches the fallback seat (the static worker preview
|
|
113
|
+
* ships its own page and carries no dist) boots without one.
|
|
114
|
+
*/
|
|
107
115
|
function resolveDistIndex() {
|
|
108
116
|
const require = createRequire(import.meta.url);
|
|
109
117
|
try {
|
|
110
|
-
return require.resolve("@deepseek-ai/dsh-web-frontend/dist
|
|
118
|
+
return join(dirname(require.resolve("@deepseek-ai/dsh-web-frontend/package.json")), "dist", "index.html");
|
|
111
119
|
} catch {
|
|
112
|
-
/* v8 ignore next 2 -- reachable only
|
|
113
|
-
throw new Error("web-app: frontend
|
|
120
|
+
/* v8 ignore next 2 -- reachable only when the frontend package is absent from the checkout */
|
|
121
|
+
throw new Error("web-app: @deepseek-ai/dsh-web-frontend is not resolvable from this composition");
|
|
114
122
|
}
|
|
115
123
|
}
|
|
116
124
|
/** Start the maintained platform opener without forwarding Harness credentials. */
|
|
@@ -179,7 +187,7 @@ function apply(ctx, config) {
|
|
|
179
187
|
addHarnessSourceSection(promptCtx, SOURCE_ROOT);
|
|
180
188
|
promptCtx.systemPrompt.section({
|
|
181
189
|
name: "app:web-surface",
|
|
182
|
-
order:
|
|
190
|
+
order: promptCtx.systemPrompt.getSectionOrder("WEB_SURFACE"),
|
|
183
191
|
text: () => webSurfacePrompt(localWebUrl(promptCtx))
|
|
184
192
|
});
|
|
185
193
|
});
|
|
@@ -191,26 +199,30 @@ function apply(ctx, config) {
|
|
|
191
199
|
});
|
|
192
200
|
});
|
|
193
201
|
}
|
|
194
|
-
if (config.printUrl || handoffBrowser) {
|
|
202
|
+
if (config.printUrl || handoffBrowser) ctx.inject(["connection"], (connectionCtx) => {
|
|
195
203
|
const announceReady = () => {
|
|
196
|
-
|
|
204
|
+
if (ANNOUNCED_ROOTS.has(connectionCtx.root)) return;
|
|
205
|
+
const webUrl = localWebUrl(connectionCtx);
|
|
206
|
+
const authenticatedUrl = connectionCtx.connection.authenticatedUrl(webUrl);
|
|
197
207
|
const lanCandidate = runtime.lanAddresses[0];
|
|
198
|
-
const port =
|
|
199
|
-
|
|
208
|
+
const port = connectionCtx.webServer.port;
|
|
209
|
+
const lanUrl = lanCandidate === void 0 ? void 0 : connectionCtx.connection.authenticatedUrl(`http://${lanCandidate}:${String(port)}`);
|
|
210
|
+
ANNOUNCED_ROOTS.add(connectionCtx.root);
|
|
211
|
+
if (config.printUrl) console.log(`dsh web: ${authenticatedUrl}${lanUrl === void 0 ? "" : ` (LAN: ${lanUrl})`}`);
|
|
200
212
|
if (handoffBrowser) {
|
|
201
213
|
console.log("dsh web: opening the default browser; pass --no-open to disable");
|
|
202
|
-
internals.openBrowser(
|
|
214
|
+
internals.openBrowser(authenticatedUrl).catch((error) => {
|
|
203
215
|
const reason = error instanceof Error ? error.message : String(error);
|
|
204
|
-
console.error(`web-app: could not open the default browser because ${reason};
|
|
216
|
+
console.error(`web-app: could not open the default browser because ${reason}; use the dsh web URL printed at startup`);
|
|
205
217
|
});
|
|
206
218
|
}
|
|
207
219
|
};
|
|
208
|
-
const settled =
|
|
220
|
+
const settled = connectionCtx.get("loader")?.await();
|
|
209
221
|
if (settled === void 0) announceReady();
|
|
210
222
|
else settled.then(() => {
|
|
211
|
-
if (
|
|
223
|
+
if (connectionCtx.get("webServer") !== void 0 && connectionCtx.get("connection") !== void 0) announceReady();
|
|
212
224
|
}, () => {});
|
|
213
|
-
}
|
|
225
|
+
});
|
|
214
226
|
}
|
|
215
227
|
//#endregion
|
|
216
228
|
export { Config, apply, inject, internals, name, resolveLanTrust };
|
package/lib/types/index.d.ts
CHANGED
|
@@ -5,9 +5,9 @@
|
|
|
5
5
|
* the built frontend dist (workspace knowledge of this bundle, never user
|
|
6
6
|
* config), mounts the `frontend-static` fallback owner over it, registers the
|
|
7
7
|
* harness-source and web-surface prompt sections, the bash-visible web runtime
|
|
8
|
-
* variable, the URL line, and the default-browser handoff.
|
|
9
|
-
*
|
|
10
|
-
* patch.
|
|
8
|
+
* variable, the process-token URL line, and the default-browser handoff. The
|
|
9
|
+
* model and shell retain the clean URL. App command-line values arrive through
|
|
10
|
+
* the `webStartup` service expressions in the bundle patch.
|
|
11
11
|
* @module @deepseek-ai/dsh-web-app
|
|
12
12
|
*/
|
|
13
13
|
import type { Context } from '@deepseek-ai/cordis';
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@deepseek-ai/dsh-web-app",
|
|
3
3
|
"description": "The dsh browser-surface bundle: the web patch layer over dsh-base plus the runtime glue plugin (frontend dist serving, web-surface prompt, bash runtime variables, URL line)",
|
|
4
|
-
"version": "0.1.
|
|
4
|
+
"version": "0.1.2-alpha.2",
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"access": "public"
|
|
7
7
|
},
|
|
@@ -46,86 +46,88 @@
|
|
|
46
46
|
"dependencies": {
|
|
47
47
|
"commander": "^15.0.0",
|
|
48
48
|
"open": "^11.0.0",
|
|
49
|
-
"@deepseek-ai/dsh-agent-presets": "^0.1.
|
|
50
|
-
"@deepseek-ai/dsh-
|
|
51
|
-
"@deepseek-ai/dsh-
|
|
52
|
-
"@deepseek-ai/dsh-client-
|
|
53
|
-
"@deepseek-ai/dsh-client-
|
|
54
|
-
"@deepseek-ai/dsh-client-
|
|
55
|
-
"@deepseek-ai/dsh-client-ui-
|
|
56
|
-
"@deepseek-ai/dsh-client-
|
|
57
|
-
"@deepseek-ai/dsh-client-ui-
|
|
58
|
-
"@deepseek-ai/dsh-client-ui-
|
|
59
|
-
"@deepseek-ai/dsh-client-ui-brand-official": "^0.1.
|
|
60
|
-
"@deepseek-ai/dsh-client-ui-commands": "^0.1.
|
|
61
|
-
"@deepseek-ai/dsh-client-ui-conversation": "^0.1.
|
|
62
|
-
"@deepseek-ai/dsh-client-ui-cordis": "^0.1.
|
|
63
|
-
"@deepseek-ai/dsh-client-ui-deliverables": "^0.1.
|
|
64
|
-
"@deepseek-ai/dsh-client-ui-directory-picker-
|
|
65
|
-
"@deepseek-ai/dsh-client-ui-directory-picker-
|
|
66
|
-
"@deepseek-ai/dsh-client-ui-message-feedback": "^0.1.
|
|
67
|
-
"@deepseek-ai/dsh-client-ui-goal": "^0.1.
|
|
68
|
-
"@deepseek-ai/dsh-client-ui-layout": "^0.1.
|
|
69
|
-
"@deepseek-ai/dsh-client-ui-model-selection": "^0.1.
|
|
70
|
-
"@deepseek-ai/dsh-client-
|
|
71
|
-
"@deepseek-ai/dsh-client-ui-settings-plugin-inventory": "^0.1.
|
|
72
|
-
"@deepseek-ai/dsh-client-ui-
|
|
73
|
-
"@deepseek-ai/dsh-client-ui-
|
|
74
|
-
"@deepseek-ai/dsh-client-ui-
|
|
75
|
-
"@deepseek-ai/dsh-client-ui-
|
|
76
|
-
"@deepseek-ai/dsh-client-ui-
|
|
77
|
-
"@deepseek-ai/dsh-client-ui-settings
|
|
78
|
-
"@deepseek-ai/dsh-client-ui-
|
|
79
|
-
"@deepseek-ai/dsh-client-ui-
|
|
80
|
-
"@deepseek-ai/dsh-client-ui-
|
|
81
|
-
"@deepseek-ai/dsh-client-ui-
|
|
82
|
-
"@deepseek-ai/dsh-client-ui-
|
|
83
|
-
"@deepseek-ai/dsh-client-ui-
|
|
84
|
-
"@deepseek-ai/dsh-client-ui-
|
|
85
|
-
"@deepseek-ai/dsh-client-ui-
|
|
86
|
-
"@deepseek-ai/dsh-client-ui-
|
|
87
|
-
"@deepseek-ai/dsh-client-ui-
|
|
88
|
-
"@deepseek-ai/dsh-client-ui-
|
|
89
|
-
"@deepseek-ai/dsh-
|
|
90
|
-
"@deepseek-ai/dsh-
|
|
91
|
-
"@deepseek-ai/dsh-
|
|
92
|
-
"@deepseek-ai/dsh-
|
|
93
|
-
"@deepseek-ai/dsh-client-
|
|
94
|
-
"@deepseek-ai/dsh-host-
|
|
95
|
-
"@deepseek-ai/dsh-
|
|
96
|
-
"@deepseek-ai/dsh-host-
|
|
97
|
-
"@deepseek-ai/dsh-
|
|
98
|
-
"@deepseek-ai/dsh-host-directory-picker-
|
|
99
|
-
"@deepseek-ai/dsh-host-
|
|
100
|
-
"@deepseek-ai/dsh-host-
|
|
101
|
-
"@deepseek-ai/dsh-
|
|
102
|
-
"@deepseek-ai/dsh-file-reference
|
|
103
|
-
"@deepseek-ai/dsh-
|
|
104
|
-
"@deepseek-ai/dsh-message-feedback": "^0.1.
|
|
105
|
-
"@deepseek-ai/dsh-session-reference": "^0.1.
|
|
106
|
-
"@deepseek-ai/dsh-session-log-export": "^0.1.
|
|
107
|
-
"@deepseek-ai/dsh-session-stats": "^0.1.
|
|
108
|
-
"@deepseek-ai/dsh-
|
|
109
|
-
"@deepseek-ai/dsh-
|
|
110
|
-
"@deepseek-ai/dsh-
|
|
111
|
-
"@deepseek-ai/dsh-
|
|
112
|
-
"@deepseek-ai/dsh-
|
|
113
|
-
"@deepseek-ai/dsh-
|
|
114
|
-
"@deepseek-ai/
|
|
115
|
-
"@deepseek-ai/
|
|
49
|
+
"@deepseek-ai/dsh-agent-presets": "^0.1.2-alpha.2",
|
|
50
|
+
"@deepseek-ai/dsh-client-hmr": "^0.1.2-alpha.2",
|
|
51
|
+
"@deepseek-ai/dsh-client-locale": "^0.1.2-alpha.2",
|
|
52
|
+
"@deepseek-ai/dsh-client-modules": "^0.1.2-alpha.2",
|
|
53
|
+
"@deepseek-ai/dsh-client-ui-renderer": "^0.1.2-alpha.2",
|
|
54
|
+
"@deepseek-ai/dsh-client-connection": "^0.1.2-alpha.2",
|
|
55
|
+
"@deepseek-ai/dsh-client-ui-attachment": "^0.1.2-alpha.2",
|
|
56
|
+
"@deepseek-ai/dsh-client-ui-agent-preset": "^0.1.2-alpha.2",
|
|
57
|
+
"@deepseek-ai/dsh-client-ui-approval": "^0.1.2-alpha.2",
|
|
58
|
+
"@deepseek-ai/dsh-client-ui-chat": "^0.1.2-alpha.2",
|
|
59
|
+
"@deepseek-ai/dsh-client-ui-brand-official": "^0.1.2-alpha.2",
|
|
60
|
+
"@deepseek-ai/dsh-client-ui-commands": "^0.1.2-alpha.2",
|
|
61
|
+
"@deepseek-ai/dsh-client-ui-conversation": "^0.1.2-alpha.2",
|
|
62
|
+
"@deepseek-ai/dsh-client-ui-cordis": "^0.1.2-alpha.2",
|
|
63
|
+
"@deepseek-ai/dsh-client-ui-deliverables": "^0.1.2-alpha.2",
|
|
64
|
+
"@deepseek-ai/dsh-client-ui-directory-picker-native": "^0.1.2-alpha.2",
|
|
65
|
+
"@deepseek-ai/dsh-client-ui-directory-picker-browse": "^0.1.2-alpha.2",
|
|
66
|
+
"@deepseek-ai/dsh-client-ui-message-feedback": "^0.1.2-alpha.2",
|
|
67
|
+
"@deepseek-ai/dsh-client-ui-goal": "^0.1.2-alpha.2",
|
|
68
|
+
"@deepseek-ai/dsh-client-ui-layout": "^0.1.2-alpha.2",
|
|
69
|
+
"@deepseek-ai/dsh-client-ui-model-selection": "^0.1.2-alpha.2",
|
|
70
|
+
"@deepseek-ai/dsh-client-ui-settings-models": "^0.1.2-alpha.2",
|
|
71
|
+
"@deepseek-ai/dsh-client-ui-settings-plugin-inventory": "^0.1.2-alpha.2",
|
|
72
|
+
"@deepseek-ai/dsh-client-ui-plan": "^0.1.2-alpha.2",
|
|
73
|
+
"@deepseek-ai/dsh-client-ui-schedule": "^0.1.2-alpha.2",
|
|
74
|
+
"@deepseek-ai/dsh-client-ui-session": "^0.1.2-alpha.2",
|
|
75
|
+
"@deepseek-ai/dsh-client-ui-settings-plugins": "^0.1.2-alpha.2",
|
|
76
|
+
"@deepseek-ai/dsh-client-ui-user-questions": "^0.1.2-alpha.2",
|
|
77
|
+
"@deepseek-ai/dsh-client-ui-settings": "^0.1.2-alpha.2",
|
|
78
|
+
"@deepseek-ai/dsh-client-ui-settings-general": "^0.1.2-alpha.2",
|
|
79
|
+
"@deepseek-ai/dsh-client-ui-sidebar": "^0.1.2-alpha.2",
|
|
80
|
+
"@deepseek-ai/dsh-client-ui-permission-presets": "^0.1.2-alpha.2",
|
|
81
|
+
"@deepseek-ai/dsh-client-ui-skill": "^0.1.2-alpha.2",
|
|
82
|
+
"@deepseek-ai/dsh-client-ui-input-trigger": "^0.1.2-alpha.2",
|
|
83
|
+
"@deepseek-ai/dsh-client-ui-reference": "^0.1.2-alpha.2",
|
|
84
|
+
"@deepseek-ai/dsh-client-ui-subagent": "^0.1.2-alpha.2",
|
|
85
|
+
"@deepseek-ai/dsh-client-ui-jobs": "^0.1.2-alpha.2",
|
|
86
|
+
"@deepseek-ai/dsh-client-ui-theme": "^0.1.2-alpha.2",
|
|
87
|
+
"@deepseek-ai/dsh-client-ui-tool": "^0.1.2-alpha.2",
|
|
88
|
+
"@deepseek-ai/dsh-client-ui-workflow-run": "^0.1.2-alpha.2",
|
|
89
|
+
"@deepseek-ai/dsh-client-ui-trajectory": "^0.1.2-alpha.2",
|
|
90
|
+
"@deepseek-ai/dsh-client-ui-workspace": "^0.1.2-alpha.2",
|
|
91
|
+
"@deepseek-ai/dsh-cmdline": "^0.1.2-alpha.2",
|
|
92
|
+
"@deepseek-ai/dsh-code-runtime-worker-thread": "^0.1.2-alpha.2",
|
|
93
|
+
"@deepseek-ai/dsh-cordis-client-runner": "^0.1.2-alpha.2",
|
|
94
|
+
"@deepseek-ai/dsh-cordis-host-runner": "^0.1.2-alpha.2",
|
|
95
|
+
"@deepseek-ai/dsh-web-frontend": "^0.1.2-alpha.2",
|
|
96
|
+
"@deepseek-ai/dsh-host-frontend-static": "^0.1.2-alpha.2",
|
|
97
|
+
"@deepseek-ai/dsh-host-directory-picker-auto": "^0.1.2-alpha.2",
|
|
98
|
+
"@deepseek-ai/dsh-host-directory-picker-browse": "^0.1.2-alpha.2",
|
|
99
|
+
"@deepseek-ai/dsh-host-directory-picker-native": "^0.1.2-alpha.2",
|
|
100
|
+
"@deepseek-ai/dsh-host-plugin-inventory": "^0.1.2-alpha.2",
|
|
101
|
+
"@deepseek-ai/dsh-host-webserver": "^0.1.2-alpha.2",
|
|
102
|
+
"@deepseek-ai/dsh-file-reference": "^0.1.2-alpha.2",
|
|
103
|
+
"@deepseek-ai/dsh-file-reference-local": "^0.1.2-alpha.2",
|
|
104
|
+
"@deepseek-ai/dsh-message-feedback": "^0.1.2-alpha.2",
|
|
105
|
+
"@deepseek-ai/dsh-session-reference": "^0.1.2-alpha.2",
|
|
106
|
+
"@deepseek-ai/dsh-session-log-export": "^0.1.2-alpha.2",
|
|
107
|
+
"@deepseek-ai/dsh-session-stats": "^0.1.2-alpha.2",
|
|
108
|
+
"@deepseek-ai/dsh-api-session-controller": "^0.1.2-alpha.2",
|
|
109
|
+
"@deepseek-ai/dsh-api-settings-controller": "^0.1.2-alpha.2",
|
|
110
|
+
"@deepseek-ai/dsh-api-workspace-controller": "^0.1.2-alpha.2",
|
|
111
|
+
"@deepseek-ai/dsh-subprocess": "^0.1.2-alpha.2",
|
|
112
|
+
"@deepseek-ai/dsh-workspace": "^0.1.2-alpha.2",
|
|
113
|
+
"@deepseek-ai/dsh-launch-environment": "^0.1.2-alpha.2",
|
|
114
|
+
"@deepseek-ai/schemastery": "^3.18.2",
|
|
115
|
+
"@deepseek-ai/dsh-tool-subagent": "^0.1.2-alpha.2",
|
|
116
|
+
"@deepseek-ai/dsh-api-remotes": "^0.1.2-alpha.2",
|
|
117
|
+
"@deepseek-ai/dsh-app-boot": "^0.1.2-alpha.2"
|
|
116
118
|
},
|
|
117
119
|
"peerDependencies": {
|
|
118
|
-
"@deepseek-ai/cordis-plugin-loader": "^1.0.
|
|
119
|
-
"@deepseek-ai/dsh-shell-env": "^0.1.
|
|
120
|
-
"@deepseek-ai/dsh-invariants": "^0.1.
|
|
121
|
-
"@deepseek-ai/dsh-system-prompt": "^0.1.
|
|
122
|
-
"@deepseek-ai/cordis": "^4.0.
|
|
120
|
+
"@deepseek-ai/cordis-plugin-loader": "^1.0.3",
|
|
121
|
+
"@deepseek-ai/dsh-shell-env": "^0.1.2-alpha.2",
|
|
122
|
+
"@deepseek-ai/dsh-invariants": "^0.1.2-alpha.2",
|
|
123
|
+
"@deepseek-ai/dsh-system-prompt": "^0.1.2-alpha.2",
|
|
124
|
+
"@deepseek-ai/cordis": "^4.0.2"
|
|
123
125
|
},
|
|
124
126
|
"devDependencies": {
|
|
125
|
-
"@deepseek-ai/
|
|
126
|
-
"@deepseek-ai/dsh-
|
|
127
|
-
"@deepseek-ai/
|
|
128
|
-
"@deepseek-ai/cordis
|
|
129
|
-
"@deepseek-ai/dsh-system-prompt": "^0.1.
|
|
127
|
+
"@deepseek-ai/cordis-plugin-loader": "^1.0.3",
|
|
128
|
+
"@deepseek-ai/dsh-shell-env": "^0.1.2-alpha.2",
|
|
129
|
+
"@deepseek-ai/dsh-invariants": "^0.1.2-alpha.2",
|
|
130
|
+
"@deepseek-ai/cordis": "^4.0.2",
|
|
131
|
+
"@deepseek-ai/dsh-system-prompt": "^0.1.2-alpha.2"
|
|
130
132
|
}
|
|
131
133
|
}
|