dsh-edge 0.3.0 → 0.4.0-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 +12 -10
- package/README.zh.md +12 -10
- package/dist/index.html +1 -1
- package/dist/plugins/@deepseek-ai/dsh-client-ui-settings-models/client.js +2812 -0
- package/package.json +27 -23
- package/scripts/cli.mjs +10 -0
- package/scripts/install.mjs +2 -2
- package/worker/direct/index.js +730 -728
- package/worker/isolated/index.js +485 -483
package/README.i18n.yaml
CHANGED
|
@@ -2,5 +2,5 @@
|
|
|
2
2
|
# last confirmed-consistent state. Both languages carry equal authority.
|
|
3
3
|
# After editing either side, update both and re-record every pair with:
|
|
4
4
|
# pnpm run doc-pairs -- --write
|
|
5
|
-
README.md:
|
|
6
|
-
README.zh.md:
|
|
5
|
+
README.md: 04d37d38a8414b164ab161cef9a0f29a5d0da137
|
|
6
|
+
README.zh.md: d8e4d6e4958b6d88df60b23ae16e7484e4fb99f3
|
package/README.md
CHANGED
|
@@ -2,7 +2,9 @@
|
|
|
2
2
|
|
|
3
3
|
English | [中文](README.zh.md)
|
|
4
4
|
|
|
5
|
-
`dsh-edge`
|
|
5
|
+
`dsh-edge` deploys your own persistent DeepSeek Harness to Cloudflare Workers in one command, then makes it available from any browser. The public CLI installs and upgrades it without a source checkout, connected repository, or build pipeline.
|
|
6
|
+
|
|
7
|
+
Under the hood, one deployment maps its authenticated owner to one Durable Object whose SQLite-backed virtual filesystem survives requests. By default, an in-process just-bash backend runs commands against that same filesystem without a Linux container or Dynamic Worker.
|
|
6
8
|
|
|
7
9
|
`dsh-edge` is an independent community project. It is not affiliated with or endorsed by DeepSeek; DeepSeek Harness remains an upstream dependency under its own license.
|
|
8
10
|
|
|
@@ -11,7 +13,7 @@ The checked-in Wrangler configuration exposes two deployment targets from the sa
|
|
|
11
13
|
The runtime keeps upstream ownership clear:
|
|
12
14
|
|
|
13
15
|
- `ReactLoopAgent`, `AgentRegistry`, `LlmRuntime`, `ToolRuntime`, `SystemPrompt`, `SessionStore`, and `SessionPersistence` run through the upstream Cordis composition.
|
|
14
|
-
-
|
|
16
|
+
- The upstream `dsh-llm-deepseek` cordis plugin is installed directly, auto-registering its settings namespace and configurable provider entry. Edge maps the native DSH `bash` tool onto Cloudflare Computer.
|
|
15
17
|
- Durable Object SQLite implements the upstream persistence backend contract. `PersistenceCoordinator` still owns write-behind, revisions, resume preparation, and crash recovery.
|
|
16
18
|
- Model history is projected from canonical events rather than persisted in a second Edge schema.
|
|
17
19
|
|
|
@@ -46,9 +48,9 @@ To call DeepSeek, create an ignored `apps/dsh-edge/.dev.vars` file:
|
|
|
46
48
|
```dotenv
|
|
47
49
|
DSH_EDGE_ACCESS_KEY=replace-with-at-least-32-random-bytes
|
|
48
50
|
DEEPSEEK_API_KEY=replace-with-your-key
|
|
49
|
-
DEEPSEEK_MAX_OUTPUT_TOKENS=
|
|
51
|
+
DEEPSEEK_MAX_OUTPUT_TOKENS=256000
|
|
50
52
|
DEEPSEEK_MODEL=deepseek-v4-flash
|
|
51
|
-
DEEPSEEK_REASONING_EFFORT=
|
|
53
|
+
DEEPSEEK_REASONING_EFFORT=high
|
|
52
54
|
DEEPSEEK_STREAM_IDLE_TIMEOUT_MS=120000
|
|
53
55
|
DSH_EDGE_DEFAULT_COMMAND_TIMEOUT_MS=120000
|
|
54
56
|
DSH_EDGE_MAX_COMMAND_TIMEOUT_MS=120000
|
|
@@ -115,7 +117,7 @@ This reference separates code that runs natively in Workers, code adapted at an
|
|
|
115
117
|
| Bash tool | Node subprocess, sandbox, terminal, and job services | Adapted at the native tool seam | Register an upstream `ToolDefinition`, but execute its body through the configured Computer workspace backend and just-bash. The default direct backend runs inside the owner Durable Object with hardened interpreter limits and no network command; adding a `LOADER` binding selects Computer's isolated Worker Shell backend. Native tool cancellation sends `SIGINT` through the Computer execution handle. Deployment configuration supplies an explicit default timeout and caller-selectable ceiling, while `timedOut` reports the deadline independently from exit and cancellation status. Native binaries, background processes, PTYs, and arbitrary Linux behavior are unavailable. |
|
|
116
118
|
| Workspace filesystem | Local filesystem services and host paths | Adapted | Store `/workspace` in the owner's SQLite-backed Durable Object VFS. |
|
|
117
119
|
| Session persistence | `SessionPersistence` service, `PersistenceCoordinator`, and local JSONL/SQLite backends | Native backend adaptation | Reuse the upstream service and coordinator ownership. Implement storage primitives over Durable Object SQL with the upstream header/event mapping. One Edge-only table retains empty session headers across transparent hibernation and is removed when canonical rows materialize; no Edge turn or message schema exists. Internal coordinator helpers validate the bounded replay loader and abandon a failed unmaterialized creation before disposal. |
|
|
118
|
-
| Settings and credentials | File-backed settings, launch environment, and credential services |
|
|
120
|
+
| Settings and credentials | File-backed settings, launch environment, and credential services | Writable with DO storage | The upstream `dsh-settings` plugin persists user sections in Durable Object KV via `DurableObjectSettingsProvider`. The upstream `dsh-llm-deepseek` cordis plugin is installed directly, auto-registering the `llm-deepseek` settings namespace and configurable provider entry; the Settings → Models page can read and modify provider configuration (base URL, model catalog, API key reference, reasoning effort) at runtime without redeployment. `EdgeCredentialProvider` resolves credentials from DO KV first, then falls back to Worker environment secrets; `set`/`unset` persist through the upstream seam. Deployment defaults (maxTokens 256,000, reasoningEffort high) are aligned with the upstream plugin so unset deployment variables match upstream behavior. |
|
|
119
121
|
| Host boot and plugins | Node command line, Cordis profile loading, package resolution, and HMR | Explicit Edge composition | Keep the local boot profile out of Workerd. Build immutable client bundles ahead of deployment; exclude HMR and host domains that the Edge `ApiProxy` does not expose. |
|
|
120
122
|
| DSH transport | Typed HTTP RPC plus mux and host WebSocket downlinks | Reused with an Edge server implementation | Use the upstream fetch carrier for unary methods and preserve its envelopes, schemas, projections, lazy blank-session behavior, bounded content search, prompt and queue mutations, workspace mutations, queue snapshots, and event frames. Durable Object WebSocket hibernation owns both downlinks; mux reconnects replay pending live inbox state, while REST/SSE routes remain a diagnostic compatibility path. |
|
|
121
123
|
| Workspace registry | Storage-domain global state plus `WorkspaceRecord` rows | Native backend adaptation | Keep the upstream global and record value shapes, including manual session order and archive membership, but map their physical keys and atomic writes to Durable Object storage. Edge constrains the registry to the one native `/workspace` VFS; rename, delete, recreation, and session reordering retain the upstream RPC and Host-frame semantics. |
|
|
@@ -138,7 +140,7 @@ Cloudflare static assets -> upstream Web shell + client plugin graph
|
|
|
138
140
|
-> ReactLoopAgent.followup(queue) or ReactLoopAgent.steer(steer)
|
|
139
141
|
-> pre-step admission gate waits for the sessions.flush durability barrier
|
|
140
142
|
-> session/queue snapshots publish live and replay on mux reconnect
|
|
141
|
-
->
|
|
143
|
+
-> upstream dsh-llm-deepseek plugin resolves configuration from settings + launch environment
|
|
142
144
|
-> upstream attachment resolver reads and verifies authorized backend bytes
|
|
143
145
|
-> upstream LlmRuntime + ReactLoopAgent stream/event pipeline
|
|
144
146
|
-> upstream ToolRuntime native bash or web_search call
|
|
@@ -166,15 +168,15 @@ A focused failure test proves that post-enqueue durability failure blocks model
|
|
|
166
168
|
|
|
167
169
|
## API-key boundary
|
|
168
170
|
|
|
169
|
-
`DEEPSEEK_API_KEY`
|
|
171
|
+
`DEEPSEEK_API_KEY` may be set as a Worker secret at deployment or entered later through the Settings → Models page. The Edge credential provider checks Durable Object KV first, then falls back to the Worker environment variable; resolved values remain request-scoped and are never written to session events or responses. Surrounding whitespace is removed; a blank value is unconfigured.
|
|
170
172
|
|
|
171
173
|
| Variable | Purpose and validation |
|
|
172
174
|
| --- | --- |
|
|
173
175
|
| `DEEPSEEK_BASE_URL` | Chat endpoint. Must be HTTP(S) without URL userinfo. The browser projection omits query and fragment components that may carry gateway credentials. |
|
|
174
176
|
| `DEEPSEEK_SEARCH_BASE_URL` | Anthropic-compatible Messages endpoint for native Web Search. Defaults to `https://api.deepseek.com/anthropic/v1`; must be HTTP(S) without userinfo, query, or fragment. Search does not follow redirects. |
|
|
175
177
|
| `DEEPSEEK_MODEL` | Validated deployment default; defaults to `deepseek-v4-flash`. Each session may choose another upstream catalog entry. |
|
|
176
|
-
| `DEEPSEEK_REASONING_EFFORT` | `off`, `low`, `high`, or `max`; defaults to `
|
|
177
|
-
| `DEEPSEEK_MAX_OUTPUT_TOKENS` | Optional positive safe integer overriding the
|
|
178
|
+
| `DEEPSEEK_REASONING_EFFORT` | `off`, `low`, `high`, or `max`; defaults to `high`. |
|
|
179
|
+
| `DEEPSEEK_MAX_OUTPUT_TOKENS` | Optional positive safe integer overriding the 256,000-token chat default. |
|
|
178
180
|
| `DEEPSEEK_STREAM_IDLE_TIMEOUT_MS` | Optional positive integer up to 2,147,483,647; defaults to 120,000 ms. |
|
|
179
181
|
| `DSH_EDGE_DEFAULT_COMMAND_TIMEOUT_MS` | Default Computer command timeout; defaults to 120,000 ms. |
|
|
180
182
|
| `DSH_EDGE_MAX_COMMAND_TIMEOUT_MS` | Caller-selectable timeout ceiling; defaults to 120,000 ms and cannot be lower than the default. |
|
|
@@ -219,7 +221,7 @@ npx dsh-edge install
|
|
|
219
221
|
|
|
220
222
|
This resolves through npm's `latest` channel. Use `npx dsh-edge@next install` only to opt into a newer prerelease when one is available.
|
|
221
223
|
|
|
222
|
-
Upgrade an existing named Worker with the same runtime choice. The deployment keeps its Durable Object data; because Cloudflare secrets are write-only, the upgrade asks for the owner access key
|
|
224
|
+
Upgrade an existing named Worker with the same runtime choice. The deployment keeps its Durable Object data; because Cloudflare secrets are write-only, the upgrade asks for the owner access key again. The DeepSeek API key prompt is optional — press Enter to skip it and configure the key later through Settings → Models:
|
|
223
225
|
|
|
224
226
|
For a stable deployment, run:
|
|
225
227
|
|
package/README.zh.md
CHANGED
|
@@ -2,7 +2,9 @@
|
|
|
2
2
|
|
|
3
3
|
[English](README.md) | 中文
|
|
4
4
|
|
|
5
|
-
`dsh-edge`
|
|
5
|
+
`dsh-edge` 用一条命令把你自己的持久 DeepSeek Harness 部署到 Cloudflare Workers,之后便能从任意浏览器使用。公共 CLI 无需 checkout 源码、绑定仓库或配置构建流水线,即可完成安装与升级。
|
|
6
|
+
|
|
7
|
+
在底层,每次部署把通过认证的 owner 固定映射到一个 Durable Object,其基于 SQLite 的虚拟文件系统可跨请求持久保存。默认情况下,进程内 just-bash 后端直接在同一文件系统上执行命令,不依赖 Linux 容器或 Dynamic Worker。
|
|
6
8
|
|
|
7
9
|
`dsh-edge` 是独立的社区项目,与 DeepSeek 没有隶属关系,也未获得 DeepSeek 官方背书;DeepSeek Harness 仍是按其自身许可证使用的上游依赖。
|
|
8
10
|
|
|
@@ -11,7 +13,7 @@
|
|
|
11
13
|
运行时保持清晰的上游责任边界:
|
|
12
14
|
|
|
13
15
|
- `ReactLoopAgent`、`AgentRegistry`、`LlmRuntime`、`ToolRuntime`、`SystemPrompt`、`SessionStore` 和 `SessionPersistence` 通过上游 Cordis 组合运行。
|
|
14
|
-
-
|
|
16
|
+
- 上游 `dsh-llm-deepseek` cordis 插件直接安装,自动注册 Settings 命名空间和可配置 Provider 条目。Edge 把原生 DSH `bash` 工具映射到 Cloudflare Computer。
|
|
15
17
|
- Durable Object SQLite 实现上游持久化后端约定;write-behind、revision、恢复准备与崩溃恢复仍由 `PersistenceCoordinator` 负责。
|
|
16
18
|
- 模型历史从 canonical 事件投影,不在 Edge 中建立第二套 schema。
|
|
17
19
|
|
|
@@ -46,9 +48,9 @@ pnpm --dir apps/dsh-edge/standalone install --frozen-lockfile
|
|
|
46
48
|
```dotenv
|
|
47
49
|
DSH_EDGE_ACCESS_KEY=replace-with-at-least-32-random-bytes
|
|
48
50
|
DEEPSEEK_API_KEY=replace-with-your-key
|
|
49
|
-
DEEPSEEK_MAX_OUTPUT_TOKENS=
|
|
51
|
+
DEEPSEEK_MAX_OUTPUT_TOKENS=256000
|
|
50
52
|
DEEPSEEK_MODEL=deepseek-v4-flash
|
|
51
|
-
DEEPSEEK_REASONING_EFFORT=
|
|
53
|
+
DEEPSEEK_REASONING_EFFORT=high
|
|
52
54
|
DEEPSEEK_STREAM_IDLE_TIMEOUT_MS=120000
|
|
53
55
|
DSH_EDGE_DEFAULT_COMMAND_TIMEOUT_MS=120000
|
|
54
56
|
DSH_EDGE_MAX_COMMAND_TIMEOUT_MS=120000
|
|
@@ -115,7 +117,7 @@ curl -b /tmp/dsh-edge-cookie -N -X POST -H 'content-type: application/json' \
|
|
|
115
117
|
| Bash tool | Node subprocess、sandbox、terminal 和 job services | 在原生 tool seam 上适配 | 注册上游 `ToolDefinition`,但通过配置的 Computer workspace backend 和 just-bash 执行其 body。默认 direct backend 在 owner Durable Object 内运行,启用 hardened interpreter limits 且不提供网络命令;添加 `LOADER` binding 后会选择 Computer 的 isolated Worker Shell backend。原生 tool cancellation 会通过 Computer execution handle 发送 `SIGINT`。部署配置提供明确的默认 timeout 与调用方可选值上限,`timedOut` 则独立于 exit 与 cancellation status 报告 deadline。不支持原生二进制、后台进程、PTY 和任意 Linux 行为。 |
|
|
116
118
|
| Workspace filesystem | 本地 filesystem services 和 host paths | 适配 | 在 owner 基于 SQLite 的 Durable Object VFS 中保存 `/workspace`。 |
|
|
117
119
|
| Session persistence | `SessionPersistence` service、`PersistenceCoordinator` 及本地 JSONL/SQLite backends | 原生 backend 适配 | 复用上游 service 及 coordinator 的职责划分,在 Durable Object SQL 上实现存储原语,并使用上游 header/event 映射。一个 Edge 独有表会在透明休眠期间保留 empty session header,并在 canonical rows 物化时删除;Edge 不定义 turn 或 message schema。内部 coordinator helper 负责校验有界 replay loader,并在 disposal 前放弃失败且尚未物化的创建。 |
|
|
118
|
-
| Settings and credentials | 基于文件的 settings、launch environment 和 credential services |
|
|
120
|
+
| Settings and credentials | 基于文件的 settings、launch environment 和 credential services | 可写,使用 DO 存储 | 上游 `dsh-settings` 插件通过 `DurableObjectSettingsProvider` 把 user section 持久化到 Durable Object KV。上游 `dsh-llm-deepseek` cordis 插件直接安装,自动注册 `llm-deepseek` Settings 命名空间和可配置 Provider 条目;Settings → Models 页面可在运行时读取和修改 Provider 配置(base URL、model catalog、API key reference、reasoning effort),无需重新部署。`EdgeCredentialProvider` 先从 DO KV 解析凭证,然后降级到 Worker 环境变量 secret;`set`/`unset` 通过上游接缝持久化。部署默认值(maxTokens 256,000,reasoningEffort high)与上游插件对齐,未设置部署变量时与上游行为一致。 |
|
|
119
121
|
| Host boot and plugins | Node 命令行、Cordis profile loading、package resolution 和 HMR | 显式 Edge composition | 不在 Workerd 中运行本地 boot profile。部署前构建 immutable 客户端包,并排除 HMR 及 Edge `ApiProxy` 未暴露的 host domain。 |
|
|
120
122
|
| DSH transport | Typed HTTP RPC 加 mux/host WebSocket downlink | 复用并提供 Edge 服务端实现 | 对 unary method 使用上游 fetch carrier,并保留其 envelope、schema、projection、lazy blank-session 行为、有界内容搜索、prompt 与 queue mutation、workspace mutation、queue snapshot 和 event frame。两条 downlink 都由 Durable Object WebSocket 休眠机制持有;mux 重连会重放 live inbox 的待处理状态,REST/SSE 路由则保留为诊断兼容路径。 |
|
|
121
123
|
| Workspace registry | Storage-domain global state 加 `WorkspaceRecord` rows | 原生 backend 适配 | 保持上游 global 和 record value shape,包括手动 session 顺序与 archive membership;仅把物理 key 和原子写入映射到 Durable Object storage。Edge 把 registry 限制为一个原生 `/workspace` VFS;rename、delete、recreate 与 session reorder 保持上游 RPC 和 Host-frame 语义。 |
|
|
@@ -138,7 +140,7 @@ Cloudflare static assets -> upstream Web shell + client plugin graph
|
|
|
138
140
|
-> ReactLoopAgent.followup(queue) or ReactLoopAgent.steer(steer)
|
|
139
141
|
-> pre-step admission gate waits for the sessions.flush durability barrier
|
|
140
142
|
-> session/queue snapshots publish live and replay on mux reconnect
|
|
141
|
-
->
|
|
143
|
+
-> upstream dsh-llm-deepseek plugin resolves configuration from settings + launch environment
|
|
142
144
|
-> 上游 attachment resolver 读取并校验已授权的 backend 字节
|
|
143
145
|
-> upstream LlmRuntime + ReactLoopAgent stream/event pipeline
|
|
144
146
|
-> upstream ToolRuntime native bash or web_search call
|
|
@@ -166,15 +168,15 @@ Cloudflare static assets -> upstream Web shell + client plugin graph
|
|
|
166
168
|
|
|
167
169
|
## API key 边界
|
|
168
170
|
|
|
169
|
-
|
|
171
|
+
`DEEPSEEK_API_KEY` 可以在部署时作为 Worker secret 设置,也可以之后通过 Settings → Models 页面输入。Edge credential provider 先查 Durable Object KV,再降级到 Worker 环境变量;解析值保持请求级作用域,绝不写入 session event 或 response。首尾空白会被移除;空白值视为未配置。
|
|
170
172
|
|
|
171
173
|
| 变量 | 用途与校验 |
|
|
172
174
|
| --- | --- |
|
|
173
175
|
| `DEEPSEEK_BASE_URL` | Chat endpoint。必须是不含 URL userinfo 的 HTTP(S) URL。Browser 投影会省略可能携带 gateway credential 的 query 与 fragment。 |
|
|
174
176
|
| `DEEPSEEK_SEARCH_BASE_URL` | Native Web Search 的 Anthropic-compatible Messages endpoint。默认为 `https://api.deepseek.com/anthropic/v1`;必须是不含 userinfo、query 与 fragment 的 HTTP(S) URL。Search 不跟随 redirect。 |
|
|
175
177
|
| `DEEPSEEK_MODEL` | 已校验的部署默认模型;默认 `deepseek-v4-flash`。每个 session 可选择其他上游 catalog 条目。 |
|
|
176
|
-
| `DEEPSEEK_REASONING_EFFORT` | `off`、`low`、`high` 或 `max`;默认 `
|
|
177
|
-
| `DEEPSEEK_MAX_OUTPUT_TOKENS` | 可选正安全整数,用于覆盖默认的
|
|
178
|
+
| `DEEPSEEK_REASONING_EFFORT` | `off`、`low`、`high` 或 `max`;默认 `high`。 |
|
|
179
|
+
| `DEEPSEEK_MAX_OUTPUT_TOKENS` | 可选正安全整数,用于覆盖默认的 256,000-token chat 上限。 |
|
|
178
180
|
| `DEEPSEEK_STREAM_IDLE_TIMEOUT_MS` | 可选正整数,上限 2,147,483,647;默认 120,000 ms。 |
|
|
179
181
|
| `DSH_EDGE_DEFAULT_COMMAND_TIMEOUT_MS` | Computer 命令默认 timeout;默认 120,000 ms。 |
|
|
180
182
|
| `DSH_EDGE_MAX_COMMAND_TIMEOUT_MS` | 调用方可选 timeout 上限;默认 120,000 ms,且不能低于默认 timeout。 |
|
|
@@ -219,7 +221,7 @@ npx dsh-edge install
|
|
|
219
221
|
|
|
220
222
|
该命令通过 npm `latest` 渠道解析。只有在存在更新的预发布版且你想主动试用时,才使用 `npx dsh-edge@next install`。
|
|
221
223
|
|
|
222
|
-
选择相同 runtime 并输入现有 Worker 名称即可升级。部署会保留 Durable Object 数据;由于 Cloudflare secret 只能写入而不能读取,升级会再次要求 owner access key
|
|
224
|
+
选择相同 runtime 并输入现有 Worker 名称即可升级。部署会保留 Durable Object 数据;由于 Cloudflare secret 只能写入而不能读取,升级会再次要求 owner access key。DeepSeek API key 提示为可选——直接按 Enter 跳过,稍后通过 Settings → Models 配置:
|
|
223
225
|
|
|
224
226
|
稳定部署运行:
|
|
225
227
|
|
package/dist/index.html
CHANGED
|
@@ -39,7 +39,7 @@ window.__ModuleLoader__={
|
|
|
39
39
|
return exports.createClientModuleSystem(this,{id:registration.id,exports},options)
|
|
40
40
|
}
|
|
41
41
|
}
|
|
42
|
-
})()</script><script src="/plugins/@deepseek-ai/dsh-client-modules/client.js?rev=7eb526320903"></script><script src="/plugins/@deepseek-ai/dsh-client-runtime/client.js?rev=5a9e129c42ae"></script><script>globalThis["__DSH_BOOT__"] = {"rev":"
|
|
42
|
+
})()</script><script src="/plugins/@deepseek-ai/dsh-client-modules/client.js?rev=7eb526320903"></script><script src="/plugins/@deepseek-ai/dsh-client-runtime/client.js?rev=5a9e129c42ae"></script><script>globalThis["__DSH_BOOT__"] = {"rev":"766297fefead","entries":[{"id":"@deepseek-ai/dsh-typert-registry","url":"/plugins/@deepseek-ai/dsh-typert-registry/client.js?rev=f41d56e0b747","rev":"f41d56e0b747","inject":[],"immediately":true},{"id":"@deepseek-ai/dsh-api-gateway","url":"/plugins/@deepseek-ai/dsh-api-gateway/client.js?rev=965b70361a00","rev":"965b70361a00","inject":["@deepseek-ai/dsh-typert-registry","@deepseek-ai/dsh-client-connection"],"immediately":true},{"id":"@deepseek-ai/dsh-client-modules","url":"/plugins/@deepseek-ai/dsh-client-modules/client.js?rev=7eb526320903","rev":"7eb526320903","inject":[],"immediately":true},{"id":"@deepseek-ai/dsh-client-connection","url":"/plugins/@deepseek-ai/dsh-client-connection/client.js?rev=c54bce6ee644","rev":"c54bce6ee644","inject":[],"immediately":true},{"id":"@deepseek-ai/dsh-api-remotes","url":"/plugins/@deepseek-ai/dsh-api-remotes/client.js?rev=9a16f4532366","rev":"9a16f4532366","inject":["@deepseek-ai/dsh-api-gateway"],"immediately":true},{"id":"@deepseek-ai/dsh-client-runtime","url":"/plugins/@deepseek-ai/dsh-client-runtime/client.js?rev=5a9e129c42ae","rev":"5a9e129c42ae","inject":["@deepseek-ai/dsh-client-connection","@deepseek-ai/dsh-typert-registry","@deepseek-ai/dsh-api-remotes"],"immediately":true},{"id":"@deepseek-ai/dsh-client-ui-theme","url":"/plugins/@deepseek-ai/dsh-client-ui-theme/client.js?rev=e19c47b60a1c","rev":"e19c47b60a1c","inject":["@deepseek-ai/dsh-client-connection","@deepseek-ai/dsh-client-runtime","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-settings","@deepseek-ai/dsh-api-remotes"],"immediately":true},{"id":"@deepseek-ai/dsh-client-locale","url":"/plugins/@deepseek-ai/dsh-client-locale/client.js?rev=2660ca3f6a00","rev":"2660ca3f6a00","inject":["@deepseek-ai/dsh-client-connection","@deepseek-ai/dsh-client-runtime","@deepseek-ai/dsh-client-ui-settings","@deepseek-ai/dsh-api-remotes"],"immediately":true},{"id":"@deepseek-ai/dsh-client-ui-layout","url":"/plugins/@deepseek-ai/dsh-client-ui-layout/client.js?rev=abdb7f55acba","rev":"abdb7f55acba","inject":["@deepseek-ai/dsh-client-runtime","@deepseek-ai/dsh-client-ui-theme"]},{"id":"@deepseek-ai/dsh-client-ui-renderer","url":"/plugins/@deepseek-ai/dsh-client-ui-renderer/client.js?rev=79b59d365f3b","rev":"79b59d365f3b","inject":["@deepseek-ai/dsh-client-runtime"],"immediately":true},{"id":"@deepseek-ai/dsh-client-ui-sidebar","url":"/plugins/@deepseek-ai/dsh-client-ui-sidebar/client.js?rev=d1f4cbcb94e2","rev":"d1f4cbcb94e2","inject":["@deepseek-ai/dsh-client-runtime","@deepseek-ai/dsh-client-ui-layout","@deepseek-ai/dsh-client-locale"]},{"id":"@deepseek-ai/dsh-client-ui-settings","url":"/plugins/@deepseek-ai/dsh-client-ui-settings/client.js?rev=5d1695c62b38","rev":"5d1695c62b38","inject":["@deepseek-ai/dsh-client-connection","@deepseek-ai/dsh-client-runtime","@deepseek-ai/dsh-api-remotes"]},{"id":"@deepseek-ai/dsh-client-ui-settings-general","url":"/plugins/@deepseek-ai/dsh-client-ui-settings-general/client.js?rev=f733efde3f2f","rev":"f733efde3f2f","inject":["@deepseek-ai/dsh-client-runtime","@deepseek-ai/dsh-client-ui-settings","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-connection","@deepseek-ai/dsh-api-remotes","@deepseek-ai/dsh-client-ui-sidebar"]},{"id":"@deepseek-ai/dsh-client-ui-settings-models","url":"/plugins/@deepseek-ai/dsh-client-ui-settings-models/client.js?rev=f12fb342db3b","rev":"f12fb342db3b","inject":["@deepseek-ai/dsh-client-runtime","@deepseek-ai/dsh-client-ui-settings","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-api-remotes"]},{"id":"@deepseek-ai/dsh-client-ui-conversation","url":"/plugins/@deepseek-ai/dsh-client-ui-conversation/client.js?rev=3bbe1845a0fd","rev":"3bbe1845a0fd","inject":["@deepseek-ai/dsh-client-connection","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-runtime","@deepseek-ai/dsh-client-ui-settings","@deepseek-ai/dsh-api-remotes","@deepseek-ai/dsh-client-ui-layout"]},{"id":"@deepseek-ai/dsh-client-ui-brand-official","url":"/plugins/@deepseek-ai/dsh-client-ui-brand-official/client.js?rev=c426d52ce216","rev":"c426d52ce216","inject":["@deepseek-ai/dsh-client-runtime","@deepseek-ai/dsh-client-ui-conversation","@deepseek-ai/dsh-client-ui-sidebar"]},{"id":"@deepseek-ai/dsh-client-ui-attachment","url":"/plugins/@deepseek-ai/dsh-client-ui-attachment/client.js?rev=5349ce7aa495","rev":"5349ce7aa495","inject":["@deepseek-ai/dsh-client-ui-conversation"]},{"id":"@deepseek-ai/dsh-client-ui-tool","url":"/plugins/@deepseek-ai/dsh-client-ui-tool/client.js?rev=48c8d92e8828","rev":"48c8d92e8828","inject":["@deepseek-ai/dsh-client-connection","@deepseek-ai/dsh-client-runtime","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-conversation"]},{"id":"@deepseek-ai/dsh-client-ui-workflow-run","url":"/plugins/@deepseek-ai/dsh-client-ui-workflow-run/client.js?rev=60e130ad4f36","rev":"60e130ad4f36","inject":["@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-runtime","@deepseek-ai/dsh-client-ui-conversation"]},{"id":"@deepseek-ai/dsh-client-ui-deliverables","url":"/plugins/@deepseek-ai/dsh-client-ui-deliverables/client.js?rev=13a78ee19f2e","rev":"13a78ee19f2e","inject":["@deepseek-ai/dsh-client-connection","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-runtime","@deepseek-ai/dsh-client-ui-conversation"]},{"id":"@deepseek-ai/dsh-client-ui-workspace","url":"/plugins/@deepseek-ai/dsh-client-ui-workspace/client.js?rev=c3b628226e01","rev":"c3b628226e01","inject":["@deepseek-ai/dsh-client-connection","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-runtime","@deepseek-ai/dsh-client-ui-conversation","@deepseek-ai/dsh-client-ui-sidebar"]},{"id":"@deepseek-ai/dsh-client-ui-input-trigger","url":"/plugins/@deepseek-ai/dsh-client-ui-input-trigger/client.js?rev=b9564b9138a7","rev":"b9564b9138a7","inject":["@deepseek-ai/dsh-client-runtime","@deepseek-ai/dsh-client-locale"]},{"id":"@deepseek-ai/dsh-client-ui-commands","url":"/plugins/@deepseek-ai/dsh-client-ui-commands/client.js?rev=887c0ca028a4","rev":"887c0ca028a4","inject":["@deepseek-ai/dsh-api-remotes","@deepseek-ai/dsh-client-runtime","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-input-trigger","@deepseek-ai/dsh-client-ui-conversation"]},{"id":"@deepseek-ai/dsh-client-ui-skill","url":"/plugins/@deepseek-ai/dsh-client-ui-skill/client.js?rev=f229a70eecce","rev":"f229a70eecce","inject":["@deepseek-ai/dsh-client-runtime","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-tool","@deepseek-ai/dsh-client-ui-input-trigger","@deepseek-ai/dsh-api-remotes"]},{"id":"@deepseek-ai/dsh-client-ui-subagent","url":"/plugins/@deepseek-ai/dsh-client-ui-subagent/client.js?rev=0bb1ff842ae8","rev":"0bb1ff842ae8","inject":["@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-runtime","@deepseek-ai/dsh-client-ui-conversation","@deepseek-ai/dsh-client-ui-primitives","@deepseek-ai/dsh-client-ui-input-trigger"]},{"id":"@deepseek-ai/dsh-client-ui-jobs","url":"/plugins/@deepseek-ai/dsh-client-ui-jobs/client.js?rev=ed0d04a8c154","rev":"ed0d04a8c154","inject":["@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-runtime","@deepseek-ai/dsh-client-ui-conversation","@deepseek-ai/dsh-client-ui-primitives"]},{"id":"@deepseek-ai/dsh-client-ui-model-selection","url":"/plugins/@deepseek-ai/dsh-client-ui-model-selection/client.js?rev=639da97bfe66","rev":"639da97bfe66","inject":["@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-runtime","@deepseek-ai/dsh-client-ui-commands","@deepseek-ai/dsh-api-remotes"]},{"id":"@deepseek-ai/dsh-client-ui-permission-presets","url":"/plugins/@deepseek-ai/dsh-client-ui-permission-presets/client.js?rev=6cbbb8ca6afc","rev":"6cbbb8ca6afc","inject":["@deepseek-ai/dsh-client-connection","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-runtime","@deepseek-ai/dsh-client-ui-commands","@deepseek-ai/dsh-api-remotes","@deepseek-ai/dsh-client-ui-settings"]},{"id":"@deepseek-ai/dsh-client-ui-agent-preset","url":"/plugins/@deepseek-ai/dsh-client-ui-agent-preset/client.js?rev=96dbaff92d41","rev":"96dbaff92d41","inject":["@deepseek-ai/dsh-client-connection","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-runtime","@deepseek-ai/dsh-client-ui-conversation","@deepseek-ai/dsh-client-ui-settings","@deepseek-ai/dsh-api-remotes"]},{"id":"@deepseek-ai/dsh-client-ui-user-questions","url":"/plugins/@deepseek-ai/dsh-client-ui-user-questions/client.js?rev=350ccf0385ba","rev":"350ccf0385ba","inject":["@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-conversation"]},{"id":"@deepseek-ai/dsh-client-ui-trajectory","url":"/plugins/@deepseek-ai/dsh-client-ui-trajectory/client.js?rev=3345fd0d652c","rev":"3345fd0d652c","inject":["@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-runtime","@deepseek-ai/dsh-client-ui-conversation"]},{"id":"dsh-edge-client-ui","url":"/plugins/dsh-edge-client-ui/client.js?rev=5b4da7d56a88","rev":"5b4da7d56a88","inject":["@deepseek-ai/dsh-client-runtime","@deepseek-ai/dsh-client-ui-settings","@deepseek-ai/dsh-client-locale"]}]}</script>
|
|
43
43
|
<meta charset="utf-8" />
|
|
44
44
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
45
45
|
<link rel="manifest" href="/manifest.webmanifest" />
|