dsh-edge 0.17.0 → 0.18.0-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.i18n.yaml +2 -2
- package/README.md +29 -22
- package/README.zh.md +29 -22
- package/THIRD_PARTY_NOTICES.md +37 -37
- package/dist/index.html +1 -1
- package/dist/plugins/dsh-edge-client-ui/client.js +408 -78
- package/package.json +4 -2
- package/scripts/activation.d.mts +6 -2
- package/scripts/activation.mjs +7 -2
- package/scripts/cli.d.mts +3 -0
- package/scripts/cli.mjs +156 -160
- package/scripts/dev.mjs +4 -4
- package/scripts/install.d.mts +31 -24
- package/scripts/install.mjs +179 -196
- package/scripts/runtime-providers.d.mts +12 -5
- package/scripts/runtime-providers.mjs +54 -9
- package/scripts/smoke-installed.mjs +14 -1
- package/scripts/verify-packed.mjs +1 -1
- package/scripts/wrangler-config-core.mjs +82 -7
- package/scripts/wrangler-config.d.mts +22 -5
- package/scripts/wrangler-config.mjs +4 -1
- package/worker/direct/index.js +1041 -902
- package/worker/isolated/index.js +936 -790
- package/wrangler.jsonc +29 -0
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: e046e77635f642aa9be7b40c205295bd78e799bc
|
|
6
|
+
README.zh.md: 23286dce38430d2ab6449d4daa2219ed5cc32b3c
|
package/README.md
CHANGED
|
@@ -26,7 +26,7 @@ The browser also remains upstream-owned:
|
|
|
26
26
|
- A build-time assembler derives the Web roster from upstream configs, injects the standard `window.__DSH_BOOT__` graph, and emits Cloudflare static assets.
|
|
27
27
|
- The Durable Object implements supported upstream `ApiProxy` methods through the standard HTTP carrier and supplies both downlinks as hibernatable WebSockets.
|
|
28
28
|
- The image composer, gallery, lightbox, attachment wire contract, and DeepSeek serializer are reused unchanged.
|
|
29
|
-
- The storage seam
|
|
29
|
+
- The storage seam stores new deployments' images in bounded Durable Object storage and keeps private R2 for deployments already pinned to it.
|
|
30
30
|
- Client plugins whose host domains are unavailable are excluded instead of forked. Session-log export and optional local-host plugins remain unavailable.
|
|
31
31
|
- Settings → Plugins lists the running composition through the upstream `dsh-host-plugin-inventory` Remote. The Edge-owned `EdgeLoader` answers its `loader` inject from the live host plugin registry and the reviewed Web boot graph, because there is no cordis Loader on Workers.
|
|
32
32
|
- A small Edge-owned login shell protects the upstream UI and protocol without changing either one.
|
|
@@ -153,7 +153,7 @@ This reference separates code that runs natively in Workers, code adapted at an
|
|
|
153
153
|
| Conversation file links | `session/openWorkspacePath` hands a clicked path to the Host desktop opener through `dsh-native-command`; `session/canOpenWorkspacePath` gates the affordance | Adapted at the upstream `SessionControllerInternals` seam plus a Web download fallback | Compose `SessionController` with Edge internals so the native probe answers false and an open attempt fails with a readable reason instead of a `child_process` error. The V3 Web client opens file links in its right-sidebar preview. Edge composes the upstream `workspaceFiles` controller over request-scoped VFS reads, including bounded text/byte windows and metadata subscriptions. The legacy `ctx.remote.session.openWorkspacePath` fallback and owner-authenticated `GET /api/workspace/file` download remain available. |
|
|
154
154
|
| Existing Web UI | Runtime-loaded shell and `dsh.client` plugin graph | Reused with generic composition fallbacks | Assemble the upstream shell and supported upstream client bundles as Worker assets. Shared slot-occupancy rules hide actions whose provider is absent; Cloudflare serves ordinary assets directly, while `/`, `/login`, and `/api/*` enter the Worker for owner access control. The assembled asset policy prevents every direct or SPA-fallback shell alias from being framed. |
|
|
155
155
|
| Other tools | Web Search, filesystem editor tools, MCP, skills, workflows, jobs, and subagents | Search, file, goal, skill, and MCP tools ported; workflow and run_code ported for the isolated build | Reuse upstream DeepSeek Web Search with its 30-second tool-call timeout. The upstream `workflow` tool is offered only by the Dynamic Worker runtime (the isolated, Paid-plan build); the Direct build does not register it. Each run loads its script into its own Dynamic Worker with no outbound network and a 30-second Worker Loader `cpuMs` limit (enforced by the Cloudflare runtime, not by local development), because workerd forbids in-process `eval`/`new Function`/`node:vm`; `agent()`, `phase()`, and `log()` cross an RPC bridge to the Durable Object, which enforces the caps: at most 4 children run at once (below the Workers six-connection limit) and one run starts at most 100 children to bound child-session row writes. The upstream `run_code` tool (`dsh-tools` PTC mode, enabled as `both` alongside the native tools) is offered by the same runtime: each program is type-stripped with sucrase and runs in its own Dynamic Worker with a 30-second `cpuMs` limit and no outbound network; its `tools.*` calls cross an RPC bridge where the Durable Object caps them at 200 per run (each is a nested tool dispatch with its own session events), 256 KiB of arguments, and 2 MiB per result, and nested calls stay approval-gated. File tools (read/write/edit/read_image) adapted via `EdgeFileSystem` backed by Computer VFS. Goal tools (`ToolGoal`) composed directly with `GoalService` as upstream cordis plugins. Skill tool via `SkillRegistry` + `EdgeSkillProvider` (DO KV-backed); owner CRUD at `GET/PUT/DELETE /api/skills`. MCP client (`dsh-mcp-client`) installed; Streamable HTTP transport only (stdio unavailable on Workers). Configure servers in Settings → DSH Edge → MCP Servers; tools appear as `mcp__<serverName>__<tool>`. Add the remaining tools individually against Worker-compatible capabilities; do not advertise unavailable host behavior. |
|
|
156
|
-
| Attachments | Local attachment storage, upstream image references, composer, gallery, lightbox, and provider conversion | Adapted at the native storage seam | Reuse upstream `AttachmentStore`, admission, protocol, authorization, UI, and DeepSeek conversion unchanged. Store immutable PNG/JPEG bytes under their SHA-256 identities in
|
|
156
|
+
| Attachments | Local attachment storage, upstream image references, composer, gallery, lightbox, and provider conversion | Adapted at the native storage seam | Reuse upstream `AttachmentStore`, admission, protocol, authorization, UI, and DeepSeek conversion unchanged. Store immutable PNG/JPEG bytes under their SHA-256 identities in a 64 MiB, 512 KiB-chunked DO backend for new and pre-attachment deployments, or in private R2 for deployments already pinned to it; session events retain only upstream refs. The first backend is pinned per owner instance so claiming or upgrading cannot strand existing references. |
|
|
157
157
|
| Goal tracking | `GoalService` with create/edit/pause/resume/complete/clear mutations and GoalBar UI | Reused | Install upstream `GoalService` and `ToolGoal` as cordis plugins (direct composition). Browser GoalBar mutations route through `TypertGatewayService` at `/api/goals/<method>`. `SessionProjectionCache` persists goal state across DO restart. |
|
|
158
158
|
| Context compaction | Token metering, automatic compaction, and session title generation | Reused | Install upstream cordis plugins directly. Context compaction, token metering, tool-result pruning, and automatic session title generation run unchanged. |
|
|
159
159
|
| Session projection | Real-time derived state push to connected clients | Reused with Edge bridge | Upstream `onChanged` callback pushes title, model, and goal projection frames to connected WebSocket clients. `SessionProjectionCache` caches projections in DO KV for cold-session recovery. |
|
|
@@ -241,6 +241,7 @@ This deliberately is not an account system or multi-tenant boundary.
|
|
|
241
241
|
| --- | --- | --- | --- |
|
|
242
242
|
| Direct (default top level) | Workers Free; no Loader binding | Hardened just-bash in the agent/VFS Durable Object, with explicit timeouts, bounded output/environment, and no network command | `just-bash-direct` |
|
|
243
243
|
| `env.isolated` | Workers Paid with `LOADER` | Computer Worker Shell in a separate Dynamic Worker | `just-bash-isolated` |
|
|
244
|
+
| `env.container` | Workers Paid with `LOADER` and a `basic` Container | The isolated Worker Shell for most commands; commands that need Linux are routed to a Debian container through computerd (see `src/bash-routing.ts`); the isolated Worker artifact | `linux-container` |
|
|
244
245
|
|
|
245
246
|
Direct mode is lighter isolation than a separate Worker; do not expose the single-owner deployment to untrusted users. Workers Paid is a Workers subscription starting at $5 per month, not the Cloudflare Pro website plan. Worker names have independent Durable Object storage and secrets, so use different names when both modes should remain live.
|
|
246
247
|
|
|
@@ -250,6 +251,7 @@ Direct mode is lighter isolation than a separate Worker; do not expose the singl
|
|
|
250
251
|
- Direct replaces only Computer's unreachable Dynamic Worker shell-core module; its Workspace adapter and command exports remain upstream.
|
|
251
252
|
- Isolated preserves that shell core and replaces the unreachable Direct backend with a fail-closed module. Each artifact therefore carries only its selected command runtime.
|
|
252
253
|
- The installer generates a private mode-specific config, points it at the selected artifact, and uploads with `no_bundle`. The user's machine does not rebuild dsh-edge or resolve Harness packages into a new Worker.
|
|
254
|
+
- Container mode deploys the isolated artifact with `docker.io/pawaca/dsh-edge-computer:<version>`, which the release workflow builds from `container/Dockerfile` and pushes once per version before npm publication. Installing it needs no local Docker; `pnpm dev:container` and `pnpm test:container` build the Dockerfile locally and do.
|
|
253
255
|
- CI starts the Direct artifact from an installed tarball and rejects gzip output above 900 KiB, preserving headroom below the 1 MiB anonymous temporary-account limit.
|
|
254
256
|
|
|
255
257
|
### Install and upgrade
|
|
@@ -262,9 +264,7 @@ npx dsh-edge install
|
|
|
262
264
|
|
|
263
265
|
This resolves through npm's `latest` channel. Use `npx dsh-edge@next install` only to opt into a newer prerelease when one is available.
|
|
264
266
|
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
For a stable deployment, run:
|
|
267
|
+
Pressing Enter at every prompt installs a working instance and opens it in the browser. Running the same command again with the same Worker name updates that instance in place. `upgrade` does the same but refuses a name that does not exist yet:
|
|
268
268
|
|
|
269
269
|
```sh
|
|
270
270
|
npx dsh-edge upgrade
|
|
@@ -272,28 +272,35 @@ npx dsh-edge upgrade
|
|
|
272
272
|
|
|
273
273
|
If the installed version contains `-alpha` or `-rc`, promote it to the stable channel once with `npx dsh-edge@latest upgrade`. The Edge settings page derives its command from the installed version; without that explicit `@latest` command, an existing prerelease remains on `next`.
|
|
274
274
|
|
|
275
|
-
###
|
|
275
|
+
### What the installer asks
|
|
276
|
+
|
|
277
|
+
The installer asks in this order: account, Worker name, then what to change. Every question comes before one confirmation; after it the installer only deploys and hands over.
|
|
278
|
+
|
|
279
|
+
- **Account.** A signed-in Cloudflare account comes first, so Enter keeps a permanent instance. Without a login the temporary account comes first; it needs no login, runs only the free capabilities, and must be claimed within 60 minutes. You can also sign in or create an account.
|
|
280
|
+
- **Worker name.** The installer checks whether the name already exists in that account. `--name` alone selects the Worker, whatever capabilities deployed it.
|
|
281
|
+
- **An existing name is an update.** The installer reads what the Worker can do from its bindings and offers **Update it** (the default), **Update and change what it can do**, **Use another name**, or **Cancel**. "Update it" is the confirmation: it deploys the new release with the same capabilities and keeps conversations, files, the owner access key, and the DeepSeek key. It never renames the Worker for you or asks for secrets again.
|
|
282
|
+
- **A new name asks what the agent should do.** The choices are cumulative, and the price comes second:
|
|
283
|
+
- `Research and write` (the direct mode, the default): search the web, read pages, draft docs, and connect your tools through MCP. It runs on Workers Free.
|
|
284
|
+
- `+ Analyze data and split big jobs` (the isolated mode): adds `run_code` for scripts over your data and `workflow` for parallel subagents. It requires Workers Paid (from $5/month).
|
|
285
|
+
- `+ Work on code projects` (the container mode): adds a Linux container for git, npm, and python. Commands start in the isolated shell; routing sends a command to the container only when a program it starts is outside the lightweight shell's verified set, the command cannot be parsed confidently, or the agent sets `linux: true`. At most two container commands run at once. It requires Workers Paid plus container time while it runs.
|
|
286
|
+
- **Changing capabilities.** The capability list marks the current choice. Choosing less asks a second confirmation that names what is removed and defaults to No. Leaving the container mode keeps the Worker's Container application as the rollback target and prints the command that removes it; run it after you sign in and the new version works, to stop Container billing.
|
|
287
|
+
- **One confirmation.** The summary lists what the instance can do, its cost, the account, the Worker, image storage, and the defaults below. For a temporary account, confirming also accepts Cloudflare's Terms of Service and Privacy Policy.
|
|
288
|
+
|
|
289
|
+
### Defaults
|
|
276
290
|
|
|
277
|
-
-
|
|
278
|
-
-
|
|
279
|
-
-
|
|
280
|
-
-
|
|
281
|
-
- R2 Standard has an included monthly free tier, but the account must enable its separate usage-based subscription. The installer checks R2 before collecting Worker secrets.
|
|
282
|
-
- Cloudflare error `10042` offers account-specific activation, retry, and cancellation. Only an unmarked pre-attachment Worker may safely switch to DO storage; a new or R2-pinned deployment cannot switch and strand references.
|
|
283
|
-
- Temporary accounts use the same image UI with a 64 MiB DO backend. Claiming preserves that backend and history; automatic R2 migration is not implemented.
|
|
284
|
-
- Every new deployment records its attachment-storage marker. Upgrades inspect every active version and preserve the marked or bound backend.
|
|
285
|
-
- A pre-image Worker has no marker, binding, or image references, so its first 0.3 upgrade asks once between 64 MiB DO storage and private R2, then pins the choice. Mixed active rollouts are refused rather than guessed.
|
|
291
|
+
- **Images** are stored in the instance's Durable Object (64 MiB), so a new install needs no R2 setup. Every deployment records its attachment-storage marker, and updates keep the marked or bound backend. A Worker already on private R2 stays there; if R2 is no longer enabled (Cloudflare error `10042`), the installer offers the account's activation link, a retry, or cancellation, never a switch that would strand image references. A pre-image Worker has no references to strand and moves to the Durable Object default. Mixed active rollouts are refused rather than guessed.
|
|
292
|
+
- **The owner access key** is generated for a new instance and shown when installation finishes. To choose your own, set `DSH_EDGE_ACCESS_KEY` (32–512 UTF-8 bytes) in the installer's environment; it stays out of shell history and the process list. An update keeps the existing key.
|
|
293
|
+
- **The DeepSeek API key** is added after installation in Settings → Models. The installer never asks for it.
|
|
294
|
+
- **Image optimization** (the Cloudflare Images binding) is on for accounts you own and off for temporary accounts.
|
|
286
295
|
|
|
287
296
|
### Credential handoff and activation
|
|
288
297
|
|
|
289
|
-
-
|
|
290
|
-
-
|
|
291
|
-
-
|
|
292
|
-
- The secret file is removed after the command. Wrangler's structured output supplies the deployed URL. Add `--verbose` to inspect full deployment diagnostics.
|
|
293
|
-
- After upload, the installer observes public `/api/health` for up to 45 seconds without credentials or redirects. Only the exact package version and selected runtime produce a ready card; propagation, challenge, placeholder, transport, and older-release responses remain pending.
|
|
298
|
+
- A new instance's owner key travels through a mode-`0600` temporary secrets file, which is removed after the command. An update passes no secrets file, so Cloudflare keeps the Worker's existing secrets. Wrangler receives only an allowlisted runtime environment and the selected Cloudflare authentication; unrelated ambient secrets and Node injection options do not reach the child.
|
|
299
|
+
- Wrangler's structured output supplies the deployed URL. Add `--verbose` to inspect full deployment diagnostics.
|
|
300
|
+
- After upload, the installer observes public `/api/health` for up to 45 seconds without credentials or redirects. Only the exact package version and capabilities count; propagation, challenge, placeholder, transport, and older-release responses remain pending. A new instance then signs in with its new key and checks `/api/ready`. An update does not know the kept key, so it reports the verified release as live and asks you to sign in.
|
|
294
301
|
- Observation expiry exits successfully and asks the owner to refresh shortly. It never calls DeepSeek or touches Durable Object state.
|
|
295
|
-
- The final card prints the URL,
|
|
296
|
-
- A rejected upload is reported as not installed. If Wrangler created a temporary account, its claim URL is still shown without presenting the unused owner key as active.
|
|
302
|
+
- The final card prints the URL, the new owner key (or "unchanged" after an update), and next steps, then offers to open the URL in your browser (default Yes, interactive terminals only). Temporary accounts also receive a bearer claim URL that must be claimed within 60 minutes.
|
|
303
|
+
- A rejected upload is reported as not installed. If Wrangler created a temporary account, its claim URL is still shown without presenting the unused owner key as active. A paid capability rejected by Cloudflare suggests enabling Workers Paid or choosing `Research and write`.
|
|
297
304
|
- If upload succeeds but handoff fails, a recovery card prints the active owner key and all known URLs before the command exits unsuccessfully.
|
|
298
305
|
- Installation uploads directly through Wrangler; it does not create or bind a GitHub repository, Cloudflare Builds project, or source-build pipeline.
|
|
299
306
|
|
package/README.zh.md
CHANGED
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
- 构建期 assembler 从上游配置推导 Web roster,注入标准 `window.__DSH_BOOT__` graph,并输出 Cloudflare 静态资源。
|
|
27
27
|
- Durable Object 通过标准 HTTP carrier 实现受支持的上游 `ApiProxy` 方法,并以支持休眠的 WebSocket 提供两条 downlink。
|
|
28
28
|
- Image composer、gallery、lightbox、attachment wire contract 与 DeepSeek serializer 全部原样复用。
|
|
29
|
-
- Storage seam
|
|
29
|
+
- Storage seam 把新部署的图片存入有界 Durable Object storage,已固定使用私有 R2 的部署则继续使用 R2。
|
|
30
30
|
- 缺少对应 host domain 的客户端插件会被排除,而不会 fork UI 代码。Session log export 与可选的本地 host 插件目前仍不可用。
|
|
31
31
|
- Settings → Plugins 通过上游 `dsh-host-plugin-inventory` Remote 列出当前运行的 composition。Workers 上没有 cordis Loader,因此 Edge 自有的 `EdgeLoader` 用实时的 host 插件 registry 和经过评审的 Web boot graph 来回答它注入的 `loader`。
|
|
32
32
|
- 一个小型 Edge 登录外壳在不修改上游 UI 和协议的前提下保护它们。
|
|
@@ -153,7 +153,7 @@ curl -b /tmp/dsh-edge-cookie -N -X POST -H 'content-type: application/json' \
|
|
|
153
153
|
| 对话文件链接 | `session/openWorkspacePath` 经 `dsh-native-command` 把点击的路径交给宿主桌面打开器;`session/canOpenWorkspacePath` 决定是否展示该入口 | 在上游 `SessionControllerInternals` seam 适配,加 Web 端下载回退 | 用 Edge internals 组合 `SessionController`,让原生探测返回 false、打开尝试以可读原因失败而不是 `child_process` 错误。V3 Web 客户端在右侧栏预览文件链接。Edge 将上游 `workspaceFiles` 控制器接入请求作用域内的 VFS 读取,支持有界文本/字节分页和元数据订阅。旧版 `ctx.remote.session.openWorkspacePath` 回退以及经 owner 鉴权的 `GET /api/workspace/file` 下载仍然可用。 |
|
|
154
154
|
| Existing Web UI | 运行时加载的 shell 和 `dsh.client` 插件 graph | 复用并采用通用 composition fallback | 把上游 shell 和受支持的上游客户端包组装成 Worker 静态资源;共享的 slot occupancy 规则会隐藏缺少 provider 的 action。Cloudflare 直接提供普通资源,`/`、`/login` 与 `/api/*` 则进入 Worker 执行 owner access control。组装后的 asset policy 会阻止所有直接或 SPA-fallback shell alias 被嵌入 frame。 |
|
|
155
155
|
| Other tools | Web Search、filesystem editor tools、MCP、skills、workflows、jobs 和 subagents | Search、文件、goal、skill 和 MCP 工具已移植;workflow 与 run_code 已在 isolated 构建中移植 | 复用上游 DeepSeek Web Search 及其 30 秒 tool-call timeout。上游 `workflow` 工具仅由 Dynamic Worker 运行时提供(isolated、Paid 计划构建);Direct 构建不注册该工具。由于 workerd 禁止在进程内使用 `eval`/`new Function`/`node:vm`,每次运行都会把脚本加载到独立的 Dynamic Worker 中执行,该 Worker 无出站网络,并受 30 秒 Worker Loader `cpuMs` 上限约束(由 Cloudflare 运行时强制执行,本地开发环境不执行);`agent()`、`phase()`、`log()` 经 RPC 桥回到 Durable Object,由其执行各项上限:同时最多运行 4 个子 agent(低于 Workers 六连接上限),单次运行最多启动 100 个子 agent,以限制子会话的行写入。上游 `run_code` 工具(`dsh-tools` PTC 模式,以 `both` 与原生工具并存)由同一运行时提供:每个程序先用 sucrase 去除类型,再在独立 Dynamic Worker 中运行,受 30 秒 `cpuMs` 上限约束且无出站网络;其中的 `tools.*` 调用经 RPC 桥回到 Durable Object,由其限制为每次运行最多 200 次(每次都是一次写入 session 事件的嵌套工具派发)、参数最多 256 KiB、单次结果最多 2 MiB,嵌套调用仍走审批。文件工具(read/write/edit/read_image)通过 `EdgeFileSystem` 适配 Computer VFS。Goal 工具(`ToolGoal`)作为上游 cordis 插件直接与 `GoalService` 组合。Skill 工具通过 `SkillRegistry` + `EdgeSkillProvider`(DO KV 存储);owner CRUD 接口 `GET/PUT/DELETE /api/skills`。MCP client(`dsh-mcp-client`)已安装;仅支持 Streamable HTTP transport(Workers 上不可用 stdio)。在 Settings → DSH Edge → MCP Servers 中配置服务器;工具名格式为 `mcp__<serverName>__<tool>`。逐个针对 Worker-compatible capabilities 增加其余工具,不宣称不可用的 host 行为。 |
|
|
156
|
-
| Attachments | 本地 attachment storage、上游 image reference、composer、gallery、lightbox 与 provider conversion | 在原生 storage seam 上适配 | 原样复用上游 `AttachmentStore`、admission、协议、授权、UI 与 DeepSeek conversion。PNG/JPEG 不可变字节按 SHA-256 identity
|
|
156
|
+
| Attachments | 本地 attachment storage、上游 image reference、composer、gallery、lightbox 与 provider conversion | 在原生 storage seam 上适配 | 原样复用上游 `AttachmentStore`、admission、协议、授权、UI 与 DeepSeek conversion。PNG/JPEG 不可变字节按 SHA-256 identity 存入新部署与 pre-attachment 部署使用的 64 MiB、按 512 KiB 分块的 DO backend,或存入已固定使用私有 R2 的部署的 R2;session event 只保留上游 ref。每个 owner instance 首次选择的 backend 会被固定,认领或升级不会让既有引用失联。 |
|
|
157
157
|
| Goal tracking | `GoalService` 提供 create/edit/pause/resume/complete/clear mutation 与 GoalBar UI | 复用 | 作为 cordis 插件安装上游 `GoalService` 和 `ToolGoal`(直接组合)。浏览器 GoalBar mutation 通过 `TypertGatewayService` 路由到 `/api/goals/<method>`。`SessionProjectionCache` 在 DO 重启后持久化 goal 状态。 |
|
|
158
158
|
| Context compaction | Token 计量、自动压缩和 session 标题生成 | 复用 | 直接安装上游 cordis 插件。上下文压缩、token 计量、工具结果修剪和自动 session 标题生成原样运行。 |
|
|
159
159
|
| Session projection | 向已连接客户端实时推送派生状态 | 复用并添加 Edge bridge | 上游 `onChanged` 回调向已连接 WebSocket 客户端推送 title、model 和 goal projection frame。`SessionProjectionCache` 在 DO KV 中缓存 projection,用于冷 session 恢复。 |
|
|
@@ -241,6 +241,7 @@ Cloudflare static assets -> upstream Web shell + client plugin graph
|
|
|
241
241
|
| --- | --- | --- | --- |
|
|
242
242
|
| Direct(默认顶层) | Workers Free;无 Loader binding | 在 agent/VFS Durable Object 中运行加固 just-bash,带明确 timeout、有界输出/环境,并禁止网络命令 | `just-bash-direct` |
|
|
243
243
|
| `env.isolated` | Workers Paid 与 `LOADER` | 在独立 Dynamic Worker 中运行 Computer Worker Shell | `just-bash-isolated` |
|
|
244
|
+
| `env.container` | Workers Paid、`LOADER` 与一个 `basic` Container | 多数命令在 isolated Worker Shell 中运行;需要 Linux 的命令经分流通过 computerd 进入 Debian 容器(见 `src/bash-routing.ts`);使用 isolated Worker 产物 | `linux-container` |
|
|
244
245
|
|
|
245
246
|
Direct 模式比独立 Worker 的隔离更轻;不要把 single-owner 部署暴露给不受信任的用户。Workers Paid 是每月 5 美元起的 Workers 订阅,并非 Cloudflare Pro 网站套餐。Worker 名称拥有独立的 Durable Object storage 与 secret;两种模式同时在线时请使用不同名称。
|
|
246
247
|
|
|
@@ -250,6 +251,7 @@ Direct 模式比独立 Worker 的隔离更轻;不要把 single-owner 部署暴
|
|
|
250
251
|
- Direct 只替换 Computer 中不可达的 Dynamic Worker shell-core module;Workspace adapter 与 command export 仍使用上游实现。
|
|
251
252
|
- Isolated 保留该 shell core,并把不可达的 Direct backend 替换成 fail-closed module。因此每个 artifact 只携带所选 command runtime。
|
|
252
253
|
- 安装器生成私有 mode-specific config,指向所选 artifact,并通过 `no_bundle` 上传。用户机器不会重新构建 dsh-edge,也不会把 Harness package 解析进新 Worker。
|
|
254
|
+
- Container 模式部署 isolated 产物,并使用 `docker.io/pawaca/dsh-edge-computer:<version>` 镜像。该镜像由发版流程从 `container/Dockerfile` 构建,每个版本在 npm 发布前推送一次。安装时不需要本地 Docker;`pnpm dev:container` 和 `pnpm test:container` 会在本地构建 Dockerfile,因此需要。
|
|
253
255
|
- CI 从已安装 tarball 启动 Direct artifact,并拒绝 gzip 后超过 900 KiB 的产物,为 Cloudflare 匿名临时账户的 1 MiB 上限保留余量。
|
|
254
256
|
|
|
255
257
|
### 安装与升级
|
|
@@ -262,9 +264,7 @@ npx dsh-edge install
|
|
|
262
264
|
|
|
263
265
|
该命令通过 npm `latest` 渠道解析。只有在存在更新的预发布版且你想主动试用时,才使用 `npx dsh-edge@next install`。
|
|
264
266
|
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
稳定部署运行:
|
|
267
|
+
每个 prompt 都直接按 Enter,就能装好一个可用实例并在浏览器中打开。用相同 Worker 名称再次运行同一条命令,会原地更新该实例。`upgrade` 行为相同,只是名称尚不存在时会拒绝:
|
|
268
268
|
|
|
269
269
|
```sh
|
|
270
270
|
npx dsh-edge upgrade
|
|
@@ -272,28 +272,35 @@ npx dsh-edge upgrade
|
|
|
272
272
|
|
|
273
273
|
如果当前安装版本包含 `-alpha` 或 `-rc`,请执行一次 `npx dsh-edge@latest upgrade` 切换到稳定渠道。Edge 设置页会根据已安装版本推导命令;如果不明确使用这条 `@latest` 命令,现有预发布部署会继续跟随 `next`。
|
|
274
274
|
|
|
275
|
-
###
|
|
275
|
+
### 安装器会问什么
|
|
276
|
+
|
|
277
|
+
安装器按以下顺序提问:账户、Worker 名称、要改什么。所有问题都在唯一一次确认之前问完;确认之后只剩部署和交接。
|
|
278
|
+
|
|
279
|
+
- **账户。** 已登录的 Cloudflare 账户排在最前,按 Enter 即得到永久实例。未登录时临时账户排在最前:无需登录,只运行免费能力,必须在 60 分钟内认领。也可以登录或注册账户。
|
|
280
|
+
- **Worker 名称。** 安装器检查该名称在账户中是否已存在。只用 `--name` 就能选中 Worker,与部署它时的能力无关。
|
|
281
|
+
- **已存在的名称就是更新。** 安装器从 Worker 的 binding 读出它当前能做什么,提供 **Update it**(默认)、**Update and change what it can do**、**Use another name** 和 **Cancel**。选 "Update it" 即是确认:以相同能力部署新版本,并保留对话、文件、owner access key 与 DeepSeek key。安装器不会替你改名,也不会再次询问 secret。
|
|
282
|
+
- **新名称会询问 agent 要做什么。** 选项逐级包含,价格放在第二位:
|
|
283
|
+
- `Research and write`(direct 模式,默认):联网搜索、读网页、写文档,并通过 MCP 连接你的工具。可在 Workers Free 上运行。
|
|
284
|
+
- `+ Analyze data and split big jobs`(isolated 模式):增加 `run_code`,用脚本处理你的数据;增加 `workflow`,把任务交给并行子 agent。需要 Workers Paid(每月 5 美元起)。
|
|
285
|
+
- `+ Work on code projects`(container 模式):增加用于 git、npm、python 的 Linux 容器。命令先在隔离 shell 中执行;只有当命令启动的程序不在轻量 shell 已验证的清单内、命令无法被可靠解析,或 agent 设置了 `linux: true` 时,才分流到容器。容器内最多同时运行两条命令。需要 Workers Paid,外加容器运行时长。
|
|
286
|
+
- **调整能力。** 能力列表会标出当前选择。选择更少的能力时会二次确认,列出将被移除的内容,默认 No。离开 container 模式后,安装器会保留该 Worker 的 Container application 作为回退目标,并打印删除它的命令;登录确认新版本正常后运行该命令,即可停止 Container 计费。
|
|
287
|
+
- **唯一一次确认。** 摘要列出实例能做什么、费用、账户、Worker、图片存储以及下面的默认值。使用临时账户时,确认即同时接受 Cloudflare 服务条款与隐私政策。
|
|
288
|
+
|
|
289
|
+
### 默认值
|
|
276
290
|
|
|
277
|
-
-
|
|
278
|
-
-
|
|
279
|
-
-
|
|
280
|
-
-
|
|
281
|
-
- R2 Standard 提供月度免费额度,但账户必须先启用其独立的按量 subscription。安装器会在收集 Worker secret 前检查 R2。
|
|
282
|
-
- Cloudflare 错误 `10042` 会提供账户专属的启用、重试与取消选项。只有无 marker 的 pre-attachment Worker 可安全切换到 DO storage;新部署或已固定 R2 的部署不能切换并导致引用失联。
|
|
283
|
-
- 临时账户使用相同图片 UI 和 64 MiB DO backend。认领会保留 backend 与历史;自动迁移到 R2 尚未实现。
|
|
284
|
-
- 每个新部署都会记录 attachment-storage marker。升级时会检查每个 active version,并保留 marker 或 binding 指定的 backend。
|
|
285
|
-
- 图片功能之前的 Worker 没有 marker、binding 或图片引用,因此首次升级到 0.3 时会在 64 MiB DO storage 与私有 R2 之间选择一次,随后固定。Active rollout 混用 backend 时会拒绝猜测。
|
|
291
|
+
- **图片** 存入实例的 Durable Object(64 MiB),因此新安装无需配置 R2。每个部署都会记录 attachment-storage marker,更新时保留 marker 或 binding 指定的 backend。已使用私有 R2 的 Worker 会继续使用 R2;如果 R2 不再启用(Cloudflare 错误 `10042`),安装器提供账户专属的启用链接、重试或取消,绝不切换到会让图片引用失联的 backend。图片功能之前的 Worker 没有可失联的引用,会改用 Durable Object 默认值。Active rollout 混用 backend 时会拒绝猜测。
|
|
292
|
+
- **Owner access key** 在新实例上自动生成,并在安装完成时显示。如需自定义,请在安装器环境中设置 `DSH_EDGE_ACCESS_KEY`(32–512 个 UTF-8 字节);它不会进入 shell 历史或进程列表。更新会保留现有 key。
|
|
293
|
+
- **DeepSeek API key** 在安装完成后于 Settings → Models 中添加。安装器不会询问它。
|
|
294
|
+
- **图片优化**(Cloudflare Images binding)对你自己的账户开启,对临时账户关闭。
|
|
286
295
|
|
|
287
296
|
### Credential 交接与激活
|
|
288
297
|
|
|
289
|
-
-
|
|
290
|
-
-
|
|
291
|
-
-
|
|
292
|
-
- 命令后会删除 secret 文件。部署 URL 来自 Wrangler 的结构化输出。添加 `--verbose` 可查看完整部署诊断。
|
|
293
|
-
- 上传后,安装器会在不携带 credential、不跟随重定向的前提下,最多观察公开 `/api/health` 45 秒。只有精确 package 版本与所选 runtime 会产生 ready 卡片;propagation、challenge、占位页、传输错误与旧 release response 均保持 pending。
|
|
298
|
+
- 新实例的 owner key 通过权限模式为 `0600` 的临时 secret 文件传递,命令结束后删除该文件。更新不传 secret 文件,Cloudflare 会保留 Worker 现有的 secret。Wrangler 只收到 allowlist 内的 runtime 环境与当前选中的 Cloudflare authentication;其他 ambient secret 与 Node 注入选项不会进入子进程。
|
|
299
|
+
- 部署 URL 来自 Wrangler 的结构化输出。添加 `--verbose` 可查看完整部署诊断。
|
|
300
|
+
- 上传后,安装器会在不携带 credential、不跟随重定向的前提下,最多观察公开 `/api/health` 45 秒。只有精确 package 版本与能力才算数;propagation、challenge、占位页、传输错误与旧 release response 均保持 pending。随后新实例会用新 key 登录并检查 `/api/ready`。更新不知道被保留的 key,因此会把已验证的版本报告为 live,并请你登录确认。
|
|
294
301
|
- 观察到期仍以成功退出,并请 owner 稍后刷新。该观察不调用 DeepSeek,也不触碰 Durable Object 状态。
|
|
295
|
-
- 最终卡片输出 URL
|
|
296
|
-
- 上传被拒绝时会明确报告未安装。Wrangler 如果已创建临时账户,仍显示其 claim URL,但不把未使用的 owner key 显示为 active
|
|
302
|
+
- 最终卡片输出 URL、新的 owner key(更新后显示 "unchanged")与下一步,然后询问是否在浏览器中打开该 URL(默认 Yes,仅限交互式终端)。临时账户还会收到必须在 60 分钟内认领的 bearer claim URL。
|
|
303
|
+
- 上传被拒绝时会明确报告未安装。Wrangler 如果已创建临时账户,仍显示其 claim URL,但不把未使用的 owner key 显示为 active。付费能力被 Cloudflare 拒绝时,会建议启用 Workers Paid 或改选 `Research and write`。
|
|
297
304
|
- 上传成功但交接失败时,恢复卡片会在命令按失败退出前输出已生效 owner key 与所有已知 URL。
|
|
298
305
|
- 安装直接通过 Wrangler 上传;不会创建或绑定 GitHub 仓库、Cloudflare Builds 项目或源码构建流水线。
|
|
299
306
|
|
package/THIRD_PARTY_NOTICES.md
CHANGED
|
@@ -70,7 +70,7 @@ The following 596 package versions form the conservative, platform-neutral produ
|
|
|
70
70
|
| `@babel/runtime@7.29.7` | `MIT` |
|
|
71
71
|
| `@borewit/text-codec@0.2.2` | `MIT` |
|
|
72
72
|
| `@cfworker/json-schema@4.1.1` | `MIT` |
|
|
73
|
-
| `@cloudflare/computer@0.
|
|
73
|
+
| `@cloudflare/computer@0.3.1` | `MIT` |
|
|
74
74
|
| `@cloudflare/kv-asset-handler@0.5.0` | `MIT OR Apache-2.0` |
|
|
75
75
|
| `@cloudflare/unenv-preset@2.16.1` | `MIT OR Apache-2.0` |
|
|
76
76
|
| `@cspotcode/source-map-support@0.8.1` | `MIT` |
|
|
@@ -379,7 +379,7 @@ The following 596 package versions form the conservative, platform-neutral produ
|
|
|
379
379
|
| `bytes@3.1.2` | `MIT` |
|
|
380
380
|
| `call-bind-apply-helpers@1.0.2` | `MIT` |
|
|
381
381
|
| `call-bound@1.0.4` | `MIT` |
|
|
382
|
-
| `capnweb@0.
|
|
382
|
+
| `capnweb@0.10.0` | `MIT` |
|
|
383
383
|
| `chokidar@4.0.3` | `MIT` |
|
|
384
384
|
| `chokidar@5.0.0` | `MIT` |
|
|
385
385
|
| `chownr@1.1.4` | `ISC` |
|
|
@@ -911,7 +911,7 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
|
911
911
|
|
|
912
912
|
Applies to:
|
|
913
913
|
|
|
914
|
-
- `capnweb@0.
|
|
914
|
+
- `capnweb@0.10.0` (`LICENSE.txt`)
|
|
915
915
|
|
|
916
916
|
```text
|
|
917
917
|
MIT License
|
|
@@ -6023,40 +6023,6 @@ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
|
|
6023
6023
|
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
6024
6024
|
```
|
|
6025
6025
|
|
|
6026
|
-
### License/notice 8533b3e58b15
|
|
6027
|
-
|
|
6028
|
-
Applies to:
|
|
6029
|
-
|
|
6030
|
-
- `@cloudflare/computer@0.2.1` (`package metadata fallback`)
|
|
6031
|
-
|
|
6032
|
-
```text
|
|
6033
|
-
The published @cloudflare/computer@0.2.1 package declared MIT but did not include a license or notice file. Attribution from its package metadata: contributors to @cloudflare/computer. Repository: git+https://github.com/cloudflare/computer.git.
|
|
6034
|
-
|
|
6035
|
-
The MIT branch is reproduced for this distribution:
|
|
6036
|
-
|
|
6037
|
-
MIT License
|
|
6038
|
-
|
|
6039
|
-
Published package author: contributors to @cloudflare/computer
|
|
6040
|
-
|
|
6041
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6042
|
-
of this software and associated documentation files (the "Software"), to deal
|
|
6043
|
-
in the Software without restriction, including without limitation the rights
|
|
6044
|
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
6045
|
-
copies of the Software, and to permit persons to whom the Software is
|
|
6046
|
-
furnished to do so, subject to the following conditions:
|
|
6047
|
-
|
|
6048
|
-
The above copyright notice and this permission notice shall be included in all
|
|
6049
|
-
copies or substantial portions of the Software.
|
|
6050
|
-
|
|
6051
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
6052
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
6053
|
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
6054
|
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
6055
|
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
6056
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
6057
|
-
SOFTWARE.
|
|
6058
|
-
```
|
|
6059
|
-
|
|
6060
6026
|
### License/notice 8694aa57bec3
|
|
6061
6027
|
|
|
6062
6028
|
Applies to:
|
|
@@ -6740,6 +6706,40 @@ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
|
6740
6706
|
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
6741
6707
|
```
|
|
6742
6708
|
|
|
6709
|
+
### License/notice 8f56920dec6e
|
|
6710
|
+
|
|
6711
|
+
Applies to:
|
|
6712
|
+
|
|
6713
|
+
- `@cloudflare/computer@0.3.1` (`package metadata fallback`)
|
|
6714
|
+
|
|
6715
|
+
```text
|
|
6716
|
+
The published @cloudflare/computer@0.3.1 package declared MIT but did not include a license or notice file. Attribution from its package metadata: contributors to @cloudflare/computer. Repository: git+https://github.com/cloudflare/computer.git.
|
|
6717
|
+
|
|
6718
|
+
The MIT branch is reproduced for this distribution:
|
|
6719
|
+
|
|
6720
|
+
MIT License
|
|
6721
|
+
|
|
6722
|
+
Published package author: contributors to @cloudflare/computer
|
|
6723
|
+
|
|
6724
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6725
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
6726
|
+
in the Software without restriction, including without limitation the rights
|
|
6727
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
6728
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
6729
|
+
furnished to do so, subject to the following conditions:
|
|
6730
|
+
|
|
6731
|
+
The above copyright notice and this permission notice shall be included in all
|
|
6732
|
+
copies or substantial portions of the Software.
|
|
6733
|
+
|
|
6734
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
6735
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
6736
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
6737
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
6738
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
6739
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
6740
|
+
SOFTWARE.
|
|
6741
|
+
```
|
|
6742
|
+
|
|
6743
6743
|
### License/notice 9116bd624634
|
|
6744
6744
|
|
|
6745
6745
|
Applies to:
|
package/dist/index.html
CHANGED
|
@@ -41,7 +41,7 @@ window.__ModuleLoader__={
|
|
|
41
41
|
return exports.createClientModuleSystem(this,{id:registration.id,exports},options)
|
|
42
42
|
}
|
|
43
43
|
}
|
|
44
|
-
})()</script><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-typert-registry/client.js?rev=a379158cfb94"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-api-gateway/client.js?rev=1aab944126ed"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-open-in-app/client.js?rev=e98f27e7eb95"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-api-session-controller/client.js?rev=aa5e07e1e8b7"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-api-workspace-files/client.js?rev=fc0912ede46e"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-api-workspace-controller/client.js?rev=19c9dbd06ba0"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-connection/client.js?rev=a6ad0952e8e3"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-file-upload/client.js?rev=922cf5109364"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-api-remotes/client.js?rev=4e5d116f07ee"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-theme/client.js?rev=857b0cdb8ea3"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-locale/client.js?rev=375ec21a35c9"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-layout/client.js?rev=e5c5b4623dcd"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-renderer/client.js?rev=735cca984913"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-session/client.js?rev=fbb203e48601"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-resources/client.js?rev=c286431659da"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-sidebar/client.js?rev=8774ab290a3d"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-sidebar-right/client.js?rev=dadf9eb9f03d"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-sidebar-documentpreview/client.js?rev=eba67abc732c"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-sidebar-files/client.js?rev=7f6eaed9594b"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-settings/client.js?rev=d6c4b822ae4e"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-settings-general/client.js?rev=df95abd2ae9e"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-settings-models/client.js?rev=c1b875ebae61"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-settings-plugin-inventory/client.js?rev=60641d1dc06f"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-conversation/client.js?rev=77029e15304e"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-approval/client.js?rev=17786fa261f5"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-chat/client.js?rev=3a4eb5d0636f"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-brand-official/client.js?rev=8fb2a6f9caf8"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-attachment/client.js?rev=fa3316dc1dd2"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-tool/client.js?rev=fe4e701c1525"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-workflow-run/client.js?rev=5e2074797029"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-deliverables/client.js?rev=07f4a89d81d4"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-workspace/client.js?rev=0f3e6f8cc861"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-input-trigger/client.js?rev=f155a5573bd4"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-commands/client.js?rev=389a1d4048c1"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-skill/client.js?rev=cecfba40f5ed"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-subagent/client.js?rev=fe11d0f231df"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-reference/client.js?rev=6fbd03108411"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-schedule/client.js?rev=a9318fb778e0"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-jobs/client.js?rev=5654b19b06a3"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-goal/client.js?rev=169a4c2b50b0"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-message-feedback/client.js?rev=c2b758352649"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-model-selection/client.js?rev=cf06eedfc458"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-permission-presets/client.js?rev=c24e5a1f666b"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-agent-preset/client.js?rev=2693519081e0"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-settings-plugins/client.js?rev=b5e809f75723"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-plan/client.js?rev=6406b5e5f238"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-user-questions/client.js?rev=46d9b6401a1f"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-trajectory/client.js?rev=51be799a1536"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-directory-picker-browse/client.js?rev=3f9d3963bc94"><link rel="preload" as="script" href="/plugins/dsh-edge-client-ui/client.js?rev=0b5899a5d596"><script src="/plugins/@deepseek-ai/dsh-client-modules/client.js?rev=e3bfba69eef8"></script><script>globalThis["__DSH_BOOT__"] = {"rev":"14420f2db327","entries":[{"id":"@deepseek-ai/dsh-typert-registry","url":"/plugins/@deepseek-ai/dsh-typert-registry/client.js?rev=a379158cfb94","rev":"a379158cfb94","inject":[],"immediately":true},{"id":"@deepseek-ai/dsh-api-gateway","url":"/plugins/@deepseek-ai/dsh-api-gateway/client.js?rev=1aab944126ed","rev":"1aab944126ed","inject":["@deepseek-ai/dsh-typert-registry","@deepseek-ai/dsh-client-connection"],"immediately":true},{"id":"@deepseek-ai/dsh-client-ui-open-in-app","url":"/plugins/@deepseek-ai/dsh-client-ui-open-in-app/client.js?rev=e98f27e7eb95","rev":"e98f27e7eb95","inject":["@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-conversation","@deepseek-ai/dsh-client-ui-renderer","@deepseek-ai/dsh-client-ui-session"]},{"id":"@deepseek-ai/dsh-api-session-controller","url":"/plugins/@deepseek-ai/dsh-api-session-controller/client.js?rev=aa5e07e1e8b7","rev":"aa5e07e1e8b7","inject":["@deepseek-ai/dsh-api-gateway"],"external":["@deepseek-ai/dsh-api-gateway/client"]},{"id":"@deepseek-ai/dsh-api-workspace-files","url":"/plugins/@deepseek-ai/dsh-api-workspace-files/client.js?rev=fc0912ede46e","rev":"fc0912ede46e","inject":["@deepseek-ai/dsh-api-gateway","@deepseek-ai/dsh-client-resources"]},{"id":"@deepseek-ai/dsh-api-workspace-controller","url":"/plugins/@deepseek-ai/dsh-api-workspace-controller/client.js?rev=19c9dbd06ba0","rev":"19c9dbd06ba0","inject":["@deepseek-ai/dsh-api-gateway","@deepseek-ai/dsh-client-connection"],"external":["@deepseek-ai/dsh-api-gateway/client"]},{"id":"@deepseek-ai/dsh-client-modules","url":"/plugins/@deepseek-ai/dsh-client-modules/client.js?rev=e3bfba69eef8","rev":"e3bfba69eef8","inject":[],"immediately":true},{"id":"@deepseek-ai/dsh-client-connection","url":"/plugins/@deepseek-ai/dsh-client-connection/client.js?rev=a6ad0952e8e3","rev":"a6ad0952e8e3","inject":[],"immediately":true},{"id":"@deepseek-ai/dsh-client-file-upload","url":"/plugins/@deepseek-ai/dsh-client-file-upload/client.js?rev=922cf5109364","rev":"922cf5109364","inject":["@deepseek-ai/dsh-api-remotes"],"immediately":true},{"id":"@deepseek-ai/dsh-api-remotes","url":"/plugins/@deepseek-ai/dsh-api-remotes/client.js?rev=4e5d116f07ee","rev":"4e5d116f07ee","inject":["@deepseek-ai/dsh-api-gateway"],"immediately":true},{"id":"@deepseek-ai/dsh-client-ui-theme","url":"/plugins/@deepseek-ai/dsh-client-ui-theme/client.js?rev=857b0cdb8ea3","rev":"857b0cdb8ea3","inject":["@deepseek-ai/dsh-client-connection","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-renderer","@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=375ec21a35c9","rev":"375ec21a35c9","inject":["@deepseek-ai/dsh-client-connection","@deepseek-ai/dsh-client-ui-renderer","@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=e5c5b4623dcd","rev":"e5c5b4623dcd","inject":["@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-renderer","@deepseek-ai/dsh-client-ui-session","@deepseek-ai/dsh-client-ui-theme"]},{"id":"@deepseek-ai/dsh-client-ui-renderer","url":"/plugins/@deepseek-ai/dsh-client-ui-renderer/client.js?rev=735cca984913","rev":"735cca984913","immediately":true},{"id":"@deepseek-ai/dsh-client-ui-session","url":"/plugins/@deepseek-ai/dsh-client-ui-session/client.js?rev=fbb203e48601","rev":"fbb203e48601","inject":["@deepseek-ai/dsh-api-session-controller","@deepseek-ai/dsh-client-ui-renderer"]},{"id":"@deepseek-ai/dsh-client-resources","url":"/plugins/@deepseek-ai/dsh-client-resources/client.js?rev=c286431659da","rev":"c286431659da","inject":["@deepseek-ai/dsh-client-ui-renderer"]},{"id":"@deepseek-ai/dsh-client-ui-sidebar","url":"/plugins/@deepseek-ai/dsh-client-ui-sidebar/client.js?rev=8774ab290a3d","rev":"8774ab290a3d","inject":["@deepseek-ai/dsh-api-workspace-controller","@deepseek-ai/dsh-client-ui-renderer","@deepseek-ai/dsh-client-ui-layout","@deepseek-ai/dsh-client-ui-session","@deepseek-ai/dsh-client-ui-workspace","@deepseek-ai/dsh-client-locale"]},{"id":"@deepseek-ai/dsh-client-ui-sidebar-right","url":"/plugins/@deepseek-ai/dsh-client-ui-sidebar-right/client.js?rev=dadf9eb9f03d","rev":"dadf9eb9f03d","inject":["@deepseek-ai/dsh-api-session-controller","@deepseek-ai/dsh-client-resources","@deepseek-ai/dsh-client-ui-conversation","@deepseek-ai/dsh-client-ui-layout","@deepseek-ai/dsh-client-ui-session"]},{"id":"@deepseek-ai/dsh-client-ui-sidebar-documentpreview","url":"/plugins/@deepseek-ai/dsh-client-ui-sidebar-documentpreview/client.js?rev=eba67abc732c","rev":"eba67abc732c","inject":["@deepseek-ai/dsh-api-gateway","@deepseek-ai/dsh-api-workspace-files","@deepseek-ai/dsh-client-ui-sidebar-right","@deepseek-ai/dsh-client-ui-session","@deepseek-ai/dsh-api-remotes"]},{"id":"@deepseek-ai/dsh-client-ui-sidebar-files","url":"/plugins/@deepseek-ai/dsh-client-ui-sidebar-files/client.js?rev=7f6eaed9594b","rev":"7f6eaed9594b","inject":["@deepseek-ai/dsh-api-workspace-files","@deepseek-ai/dsh-client-ui-sidebar-right","@deepseek-ai/dsh-client-ui-session","@deepseek-ai/dsh-api-remotes"]},{"id":"@deepseek-ai/dsh-client-ui-settings","url":"/plugins/@deepseek-ai/dsh-client-ui-settings/client.js?rev=d6c4b822ae4e","rev":"d6c4b822ae4e","inject":["@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=df95abd2ae9e","rev":"df95abd2ae9e","inject":["@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=c1b875ebae61","rev":"c1b875ebae61","inject":["@deepseek-ai/dsh-client-ui-settings","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-api-remotes"]},{"id":"@deepseek-ai/dsh-client-ui-settings-plugin-inventory","url":"/plugins/@deepseek-ai/dsh-client-ui-settings-plugin-inventory/client.js?rev=60641d1dc06f","rev":"60641d1dc06f","inject":["@deepseek-ai/dsh-api-remotes","@deepseek-ai/dsh-client-ui-settings","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-agent-preset"]},{"id":"@deepseek-ai/dsh-client-ui-conversation","url":"/plugins/@deepseek-ai/dsh-client-ui-conversation/client.js?rev=77029e15304e","rev":"77029e15304e","inject":["@deepseek-ai/dsh-api-session-controller","@deepseek-ai/dsh-client-file-upload","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-layout","@deepseek-ai/dsh-client-ui-renderer","@deepseek-ai/dsh-client-ui-session","@deepseek-ai/dsh-client-ui-settings","@deepseek-ai/dsh-client-ui-workspace"]},{"id":"@deepseek-ai/dsh-client-ui-approval","url":"/plugins/@deepseek-ai/dsh-client-ui-approval/client.js?rev=17786fa261f5","rev":"17786fa261f5","inject":["@deepseek-ai/dsh-api-remotes","@deepseek-ai/dsh-api-session-controller","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-conversation","@deepseek-ai/dsh-client-ui-renderer","@deepseek-ai/dsh-client-ui-session"]},{"id":"@deepseek-ai/dsh-client-ui-chat","url":"/plugins/@deepseek-ai/dsh-client-ui-chat/client.js?rev=3a4eb5d0636f","rev":"3a4eb5d0636f","inject":["@deepseek-ai/dsh-api-session-controller","@deepseek-ai/dsh-api-workspace-controller","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-conversation","@deepseek-ai/dsh-client-ui-layout","@deepseek-ai/dsh-client-ui-renderer","@deepseek-ai/dsh-client-ui-session","@deepseek-ai/dsh-client-ui-sidebar-right","@deepseek-ai/dsh-client-ui-settings","@deepseek-ai/dsh-client-ui-workspace"]},{"id":"@deepseek-ai/dsh-client-ui-brand-official","url":"/plugins/@deepseek-ai/dsh-client-ui-brand-official/client.js?rev=8fb2a6f9caf8","rev":"8fb2a6f9caf8","inject":["@deepseek-ai/dsh-client-ui-renderer","@deepseek-ai/dsh-client-ui-sidebar"]},{"id":"@deepseek-ai/dsh-client-ui-attachment","url":"/plugins/@deepseek-ai/dsh-client-ui-attachment/client.js?rev=fa3316dc1dd2","rev":"fa3316dc1dd2","inject":["@deepseek-ai/dsh-client-ui-chat","@deepseek-ai/dsh-client-ui-conversation","@deepseek-ai/dsh-client-ui-renderer","@deepseek-ai/dsh-client-ui-trajectory","@deepseek-ai/dsh-client-ui-tool"]},{"id":"@deepseek-ai/dsh-client-ui-tool","url":"/plugins/@deepseek-ai/dsh-client-ui-tool/client.js?rev=fe4e701c1525","rev":"fe4e701c1525","inject":["@deepseek-ai/dsh-api-workspace-controller","@deepseek-ai/dsh-client-connection","@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=5e2074797029","rev":"5e2074797029","inject":["@deepseek-ai/dsh-api-session-controller","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-chat","@deepseek-ai/dsh-client-ui-conversation","@deepseek-ai/dsh-client-ui-renderer","@deepseek-ai/dsh-client-ui-session"]},{"id":"@deepseek-ai/dsh-client-ui-deliverables","url":"/plugins/@deepseek-ai/dsh-client-ui-deliverables/client.js?rev=07f4a89d81d4","rev":"07f4a89d81d4","inject":["@deepseek-ai/dsh-api-remotes","@deepseek-ai/dsh-client-connection","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-chat","@deepseek-ai/dsh-client-ui-conversation","@deepseek-ai/dsh-client-ui-renderer","@deepseek-ai/dsh-client-ui-tool"]},{"id":"@deepseek-ai/dsh-client-ui-workspace","url":"/plugins/@deepseek-ai/dsh-client-ui-workspace/client.js?rev=0f3e6f8cc861","rev":"0f3e6f8cc861","inject":["@deepseek-ai/dsh-api-remotes","@deepseek-ai/dsh-api-session-controller","@deepseek-ai/dsh-api-workspace-controller","@deepseek-ai/dsh-client-connection","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-conversation","@deepseek-ai/dsh-client-ui-layout","@deepseek-ai/dsh-client-ui-renderer","@deepseek-ai/dsh-client-ui-session","@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=f155a5573bd4","rev":"f155a5573bd4","inject":["@deepseek-ai/dsh-api-session-controller","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-conversation","@deepseek-ai/dsh-client-ui-renderer"]},{"id":"@deepseek-ai/dsh-client-ui-commands","url":"/plugins/@deepseek-ai/dsh-client-ui-commands/client.js?rev=389a1d4048c1","rev":"389a1d4048c1","inject":["@deepseek-ai/dsh-api-remotes","@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=cecfba40f5ed","rev":"cecfba40f5ed","inject":["@deepseek-ai/dsh-api-session-controller","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-renderer","@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=fe11d0f231df","rev":"fe11d0f231df","inject":["@deepseek-ai/dsh-api-session-controller","@deepseek-ai/dsh-client-locale","@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-reference","url":"/plugins/@deepseek-ai/dsh-client-ui-reference/client.js?rev=6fbd03108411","rev":"6fbd03108411","inject":["@deepseek-ai/dsh-api-remotes","@deepseek-ai/dsh-api-session-controller","@deepseek-ai/dsh-client-connection","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-input-trigger"]},{"id":"@deepseek-ai/dsh-client-ui-schedule","url":"/plugins/@deepseek-ai/dsh-client-ui-schedule/client.js?rev=a9318fb778e0","rev":"a9318fb778e0","inject":["@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-conversation","@deepseek-ai/dsh-client-ui-primitives"]},{"id":"@deepseek-ai/dsh-client-ui-jobs","url":"/plugins/@deepseek-ai/dsh-client-ui-jobs/client.js?rev=5654b19b06a3","rev":"5654b19b06a3","inject":["@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-conversation","@deepseek-ai/dsh-client-ui-primitives"]},{"id":"@deepseek-ai/dsh-client-ui-goal","url":"/plugins/@deepseek-ai/dsh-client-ui-goal/client.js?rev=169a4c2b50b0","rev":"169a4c2b50b0","inject":["@deepseek-ai/dsh-api-remotes","@deepseek-ai/dsh-api-session-controller","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-chat","@deepseek-ai/dsh-client-ui-conversation","@deepseek-ai/dsh-client-ui-renderer","@deepseek-ai/dsh-client-ui-session"]},{"id":"@deepseek-ai/dsh-client-ui-message-feedback","url":"/plugins/@deepseek-ai/dsh-client-ui-message-feedback/client.js?rev=c2b758352649","rev":"c2b758352649","inject":["@deepseek-ai/dsh-api-remotes","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-conversation","@deepseek-ai/dsh-client-ui-renderer","@deepseek-ai/dsh-client-ui-commands"]},{"id":"@deepseek-ai/dsh-client-ui-model-selection","url":"/plugins/@deepseek-ai/dsh-client-ui-model-selection/client.js?rev=cf06eedfc458","rev":"cf06eedfc458","inject":["@deepseek-ai/dsh-api-session-controller","@deepseek-ai/dsh-client-locale","@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=c24e5a1f666b","rev":"c24e5a1f666b","inject":["@deepseek-ai/dsh-api-session-controller","@deepseek-ai/dsh-client-locale","@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=2693519081e0","rev":"2693519081e0","inject":["@deepseek-ai/dsh-api-session-controller","@deepseek-ai/dsh-client-connection","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-conversation","@deepseek-ai/dsh-client-ui-session","@deepseek-ai/dsh-client-ui-settings","@deepseek-ai/dsh-client-ui-workspace","@deepseek-ai/dsh-api-remotes"]},{"id":"@deepseek-ai/dsh-client-ui-settings-plugins","url":"/plugins/@deepseek-ai/dsh-client-ui-settings-plugins/client.js?rev=b5e809f75723","rev":"b5e809f75723","inject":["@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-settings","@deepseek-ai/dsh-api-remotes"]},{"id":"@deepseek-ai/dsh-client-ui-plan","url":"/plugins/@deepseek-ai/dsh-client-ui-plan/client.js?rev=6406b5e5f238","rev":"6406b5e5f238","inject":["@deepseek-ai/dsh-api-remotes","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-conversation"]},{"id":"@deepseek-ai/dsh-client-ui-user-questions","url":"/plugins/@deepseek-ai/dsh-client-ui-user-questions/client.js?rev=46d9b6401a1f","rev":"46d9b6401a1f","inject":["@deepseek-ai/dsh-api-remotes","@deepseek-ai/dsh-api-session-controller","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-conversation","@deepseek-ai/dsh-client-ui-renderer","@deepseek-ai/dsh-client-ui-session"]},{"id":"@deepseek-ai/dsh-client-ui-trajectory","url":"/plugins/@deepseek-ai/dsh-client-ui-trajectory/client.js?rev=51be799a1536","rev":"51be799a1536","inject":["@deepseek-ai/dsh-api-session-controller","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-conversation","@deepseek-ai/dsh-client-ui-renderer","@deepseek-ai/dsh-client-ui-session"]},{"id":"@deepseek-ai/dsh-client-ui-directory-picker-browse","url":"/plugins/@deepseek-ai/dsh-client-ui-directory-picker-browse/client.js?rev=3f9d3963bc94","rev":"3f9d3963bc94","inject":["@deepseek-ai/dsh-api-remotes","@deepseek-ai/dsh-client-ui-renderer","@deepseek-ai/dsh-client-ui-workspace","@deepseek-ai/dsh-client-locale"]},{"id":"dsh-edge-client-ui","url":"/plugins/dsh-edge-client-ui/client.js?rev=0b5899a5d596","rev":"0b5899a5d596","inject":["@deepseek-ai/dsh-api-workspace-controller","@deepseek-ai/dsh-client-ui-settings","@deepseek-ai/dsh-client-locale"]}],"batches":[{"phase":"bootstrap","url":"/plugins/@deepseek-ai/dsh-client-modules/client.js?rev=e3bfba69eef8","rev":"e3bfba69eef8","entries":["@deepseek-ai/dsh-client-modules"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-typert-registry/client.js?rev=a379158cfb94","rev":"a379158cfb94","entries":["@deepseek-ai/dsh-typert-registry"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-api-gateway/client.js?rev=1aab944126ed","rev":"1aab944126ed","entries":["@deepseek-ai/dsh-api-gateway"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-open-in-app/client.js?rev=e98f27e7eb95","rev":"e98f27e7eb95","entries":["@deepseek-ai/dsh-client-ui-open-in-app"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-api-session-controller/client.js?rev=aa5e07e1e8b7","rev":"aa5e07e1e8b7","entries":["@deepseek-ai/dsh-api-session-controller"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-api-workspace-files/client.js?rev=fc0912ede46e","rev":"fc0912ede46e","entries":["@deepseek-ai/dsh-api-workspace-files"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-api-workspace-controller/client.js?rev=19c9dbd06ba0","rev":"19c9dbd06ba0","entries":["@deepseek-ai/dsh-api-workspace-controller"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-connection/client.js?rev=a6ad0952e8e3","rev":"a6ad0952e8e3","entries":["@deepseek-ai/dsh-client-connection"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-file-upload/client.js?rev=922cf5109364","rev":"922cf5109364","entries":["@deepseek-ai/dsh-client-file-upload"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-api-remotes/client.js?rev=4e5d116f07ee","rev":"4e5d116f07ee","entries":["@deepseek-ai/dsh-api-remotes"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-theme/client.js?rev=857b0cdb8ea3","rev":"857b0cdb8ea3","entries":["@deepseek-ai/dsh-client-ui-theme"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-locale/client.js?rev=375ec21a35c9","rev":"375ec21a35c9","entries":["@deepseek-ai/dsh-client-locale"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-layout/client.js?rev=e5c5b4623dcd","rev":"e5c5b4623dcd","entries":["@deepseek-ai/dsh-client-ui-layout"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-renderer/client.js?rev=735cca984913","rev":"735cca984913","entries":["@deepseek-ai/dsh-client-ui-renderer"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-session/client.js?rev=fbb203e48601","rev":"fbb203e48601","entries":["@deepseek-ai/dsh-client-ui-session"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-resources/client.js?rev=c286431659da","rev":"c286431659da","entries":["@deepseek-ai/dsh-client-resources"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-sidebar/client.js?rev=8774ab290a3d","rev":"8774ab290a3d","entries":["@deepseek-ai/dsh-client-ui-sidebar"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-sidebar-right/client.js?rev=dadf9eb9f03d","rev":"dadf9eb9f03d","entries":["@deepseek-ai/dsh-client-ui-sidebar-right"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-sidebar-documentpreview/client.js?rev=eba67abc732c","rev":"eba67abc732c","entries":["@deepseek-ai/dsh-client-ui-sidebar-documentpreview"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-sidebar-files/client.js?rev=7f6eaed9594b","rev":"7f6eaed9594b","entries":["@deepseek-ai/dsh-client-ui-sidebar-files"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-settings/client.js?rev=d6c4b822ae4e","rev":"d6c4b822ae4e","entries":["@deepseek-ai/dsh-client-ui-settings"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-settings-general/client.js?rev=df95abd2ae9e","rev":"df95abd2ae9e","entries":["@deepseek-ai/dsh-client-ui-settings-general"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-settings-models/client.js?rev=c1b875ebae61","rev":"c1b875ebae61","entries":["@deepseek-ai/dsh-client-ui-settings-models"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-settings-plugin-inventory/client.js?rev=60641d1dc06f","rev":"60641d1dc06f","entries":["@deepseek-ai/dsh-client-ui-settings-plugin-inventory"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-conversation/client.js?rev=77029e15304e","rev":"77029e15304e","entries":["@deepseek-ai/dsh-client-ui-conversation"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-approval/client.js?rev=17786fa261f5","rev":"17786fa261f5","entries":["@deepseek-ai/dsh-client-ui-approval"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-chat/client.js?rev=3a4eb5d0636f","rev":"3a4eb5d0636f","entries":["@deepseek-ai/dsh-client-ui-chat"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-brand-official/client.js?rev=8fb2a6f9caf8","rev":"8fb2a6f9caf8","entries":["@deepseek-ai/dsh-client-ui-brand-official"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-attachment/client.js?rev=fa3316dc1dd2","rev":"fa3316dc1dd2","entries":["@deepseek-ai/dsh-client-ui-attachment"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-tool/client.js?rev=fe4e701c1525","rev":"fe4e701c1525","entries":["@deepseek-ai/dsh-client-ui-tool"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-workflow-run/client.js?rev=5e2074797029","rev":"5e2074797029","entries":["@deepseek-ai/dsh-client-ui-workflow-run"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-deliverables/client.js?rev=07f4a89d81d4","rev":"07f4a89d81d4","entries":["@deepseek-ai/dsh-client-ui-deliverables"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-workspace/client.js?rev=0f3e6f8cc861","rev":"0f3e6f8cc861","entries":["@deepseek-ai/dsh-client-ui-workspace"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-input-trigger/client.js?rev=f155a5573bd4","rev":"f155a5573bd4","entries":["@deepseek-ai/dsh-client-ui-input-trigger"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-commands/client.js?rev=389a1d4048c1","rev":"389a1d4048c1","entries":["@deepseek-ai/dsh-client-ui-commands"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-skill/client.js?rev=cecfba40f5ed","rev":"cecfba40f5ed","entries":["@deepseek-ai/dsh-client-ui-skill"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-subagent/client.js?rev=fe11d0f231df","rev":"fe11d0f231df","entries":["@deepseek-ai/dsh-client-ui-subagent"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-reference/client.js?rev=6fbd03108411","rev":"6fbd03108411","entries":["@deepseek-ai/dsh-client-ui-reference"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-schedule/client.js?rev=a9318fb778e0","rev":"a9318fb778e0","entries":["@deepseek-ai/dsh-client-ui-schedule"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-jobs/client.js?rev=5654b19b06a3","rev":"5654b19b06a3","entries":["@deepseek-ai/dsh-client-ui-jobs"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-goal/client.js?rev=169a4c2b50b0","rev":"169a4c2b50b0","entries":["@deepseek-ai/dsh-client-ui-goal"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-message-feedback/client.js?rev=c2b758352649","rev":"c2b758352649","entries":["@deepseek-ai/dsh-client-ui-message-feedback"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-model-selection/client.js?rev=cf06eedfc458","rev":"cf06eedfc458","entries":["@deepseek-ai/dsh-client-ui-model-selection"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-permission-presets/client.js?rev=c24e5a1f666b","rev":"c24e5a1f666b","entries":["@deepseek-ai/dsh-client-ui-permission-presets"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-agent-preset/client.js?rev=2693519081e0","rev":"2693519081e0","entries":["@deepseek-ai/dsh-client-ui-agent-preset"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-settings-plugins/client.js?rev=b5e809f75723","rev":"b5e809f75723","entries":["@deepseek-ai/dsh-client-ui-settings-plugins"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-plan/client.js?rev=6406b5e5f238","rev":"6406b5e5f238","entries":["@deepseek-ai/dsh-client-ui-plan"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-user-questions/client.js?rev=46d9b6401a1f","rev":"46d9b6401a1f","entries":["@deepseek-ai/dsh-client-ui-user-questions"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-trajectory/client.js?rev=51be799a1536","rev":"51be799a1536","entries":["@deepseek-ai/dsh-client-ui-trajectory"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-directory-picker-browse/client.js?rev=3f9d3963bc94","rev":"3f9d3963bc94","entries":["@deepseek-ai/dsh-client-ui-directory-picker-browse"]},{"phase":"application","url":"/plugins/dsh-edge-client-ui/client.js?rev=0b5899a5d596","rev":"0b5899a5d596","entries":["dsh-edge-client-ui"]}]}</script>
|
|
44
|
+
})()</script><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-typert-registry/client.js?rev=a379158cfb94"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-api-gateway/client.js?rev=1aab944126ed"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-open-in-app/client.js?rev=e98f27e7eb95"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-api-session-controller/client.js?rev=aa5e07e1e8b7"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-api-workspace-files/client.js?rev=fc0912ede46e"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-api-workspace-controller/client.js?rev=19c9dbd06ba0"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-connection/client.js?rev=a6ad0952e8e3"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-file-upload/client.js?rev=922cf5109364"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-api-remotes/client.js?rev=4e5d116f07ee"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-theme/client.js?rev=857b0cdb8ea3"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-locale/client.js?rev=375ec21a35c9"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-layout/client.js?rev=e5c5b4623dcd"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-renderer/client.js?rev=735cca984913"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-session/client.js?rev=fbb203e48601"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-resources/client.js?rev=c286431659da"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-sidebar/client.js?rev=8774ab290a3d"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-sidebar-right/client.js?rev=dadf9eb9f03d"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-sidebar-documentpreview/client.js?rev=eba67abc732c"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-sidebar-files/client.js?rev=7f6eaed9594b"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-settings/client.js?rev=d6c4b822ae4e"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-settings-general/client.js?rev=df95abd2ae9e"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-settings-models/client.js?rev=c1b875ebae61"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-settings-plugin-inventory/client.js?rev=60641d1dc06f"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-conversation/client.js?rev=77029e15304e"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-approval/client.js?rev=17786fa261f5"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-chat/client.js?rev=3a4eb5d0636f"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-brand-official/client.js?rev=8fb2a6f9caf8"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-attachment/client.js?rev=fa3316dc1dd2"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-tool/client.js?rev=fe4e701c1525"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-workflow-run/client.js?rev=5e2074797029"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-deliverables/client.js?rev=07f4a89d81d4"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-workspace/client.js?rev=0f3e6f8cc861"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-input-trigger/client.js?rev=f155a5573bd4"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-commands/client.js?rev=389a1d4048c1"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-skill/client.js?rev=cecfba40f5ed"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-subagent/client.js?rev=fe11d0f231df"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-reference/client.js?rev=6fbd03108411"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-schedule/client.js?rev=a9318fb778e0"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-jobs/client.js?rev=5654b19b06a3"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-goal/client.js?rev=169a4c2b50b0"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-message-feedback/client.js?rev=c2b758352649"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-model-selection/client.js?rev=cf06eedfc458"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-permission-presets/client.js?rev=c24e5a1f666b"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-agent-preset/client.js?rev=2693519081e0"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-settings-plugins/client.js?rev=b5e809f75723"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-plan/client.js?rev=6406b5e5f238"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-user-questions/client.js?rev=46d9b6401a1f"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-trajectory/client.js?rev=51be799a1536"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-directory-picker-browse/client.js?rev=3f9d3963bc94"><link rel="preload" as="script" href="/plugins/dsh-edge-client-ui/client.js?rev=dc7cd0d7e95c"><script src="/plugins/@deepseek-ai/dsh-client-modules/client.js?rev=e3bfba69eef8"></script><script>globalThis["__DSH_BOOT__"] = {"rev":"295b8db630c7","entries":[{"id":"@deepseek-ai/dsh-typert-registry","url":"/plugins/@deepseek-ai/dsh-typert-registry/client.js?rev=a379158cfb94","rev":"a379158cfb94","inject":[],"immediately":true},{"id":"@deepseek-ai/dsh-api-gateway","url":"/plugins/@deepseek-ai/dsh-api-gateway/client.js?rev=1aab944126ed","rev":"1aab944126ed","inject":["@deepseek-ai/dsh-typert-registry","@deepseek-ai/dsh-client-connection"],"immediately":true},{"id":"@deepseek-ai/dsh-client-ui-open-in-app","url":"/plugins/@deepseek-ai/dsh-client-ui-open-in-app/client.js?rev=e98f27e7eb95","rev":"e98f27e7eb95","inject":["@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-conversation","@deepseek-ai/dsh-client-ui-renderer","@deepseek-ai/dsh-client-ui-session"]},{"id":"@deepseek-ai/dsh-api-session-controller","url":"/plugins/@deepseek-ai/dsh-api-session-controller/client.js?rev=aa5e07e1e8b7","rev":"aa5e07e1e8b7","inject":["@deepseek-ai/dsh-api-gateway"],"external":["@deepseek-ai/dsh-api-gateway/client"]},{"id":"@deepseek-ai/dsh-api-workspace-files","url":"/plugins/@deepseek-ai/dsh-api-workspace-files/client.js?rev=fc0912ede46e","rev":"fc0912ede46e","inject":["@deepseek-ai/dsh-api-gateway","@deepseek-ai/dsh-client-resources"]},{"id":"@deepseek-ai/dsh-api-workspace-controller","url":"/plugins/@deepseek-ai/dsh-api-workspace-controller/client.js?rev=19c9dbd06ba0","rev":"19c9dbd06ba0","inject":["@deepseek-ai/dsh-api-gateway","@deepseek-ai/dsh-client-connection"],"external":["@deepseek-ai/dsh-api-gateway/client"]},{"id":"@deepseek-ai/dsh-client-modules","url":"/plugins/@deepseek-ai/dsh-client-modules/client.js?rev=e3bfba69eef8","rev":"e3bfba69eef8","inject":[],"immediately":true},{"id":"@deepseek-ai/dsh-client-connection","url":"/plugins/@deepseek-ai/dsh-client-connection/client.js?rev=a6ad0952e8e3","rev":"a6ad0952e8e3","inject":[],"immediately":true},{"id":"@deepseek-ai/dsh-client-file-upload","url":"/plugins/@deepseek-ai/dsh-client-file-upload/client.js?rev=922cf5109364","rev":"922cf5109364","inject":["@deepseek-ai/dsh-api-remotes"],"immediately":true},{"id":"@deepseek-ai/dsh-api-remotes","url":"/plugins/@deepseek-ai/dsh-api-remotes/client.js?rev=4e5d116f07ee","rev":"4e5d116f07ee","inject":["@deepseek-ai/dsh-api-gateway"],"immediately":true},{"id":"@deepseek-ai/dsh-client-ui-theme","url":"/plugins/@deepseek-ai/dsh-client-ui-theme/client.js?rev=857b0cdb8ea3","rev":"857b0cdb8ea3","inject":["@deepseek-ai/dsh-client-connection","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-renderer","@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=375ec21a35c9","rev":"375ec21a35c9","inject":["@deepseek-ai/dsh-client-connection","@deepseek-ai/dsh-client-ui-renderer","@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=e5c5b4623dcd","rev":"e5c5b4623dcd","inject":["@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-renderer","@deepseek-ai/dsh-client-ui-session","@deepseek-ai/dsh-client-ui-theme"]},{"id":"@deepseek-ai/dsh-client-ui-renderer","url":"/plugins/@deepseek-ai/dsh-client-ui-renderer/client.js?rev=735cca984913","rev":"735cca984913","immediately":true},{"id":"@deepseek-ai/dsh-client-ui-session","url":"/plugins/@deepseek-ai/dsh-client-ui-session/client.js?rev=fbb203e48601","rev":"fbb203e48601","inject":["@deepseek-ai/dsh-api-session-controller","@deepseek-ai/dsh-client-ui-renderer"]},{"id":"@deepseek-ai/dsh-client-resources","url":"/plugins/@deepseek-ai/dsh-client-resources/client.js?rev=c286431659da","rev":"c286431659da","inject":["@deepseek-ai/dsh-client-ui-renderer"]},{"id":"@deepseek-ai/dsh-client-ui-sidebar","url":"/plugins/@deepseek-ai/dsh-client-ui-sidebar/client.js?rev=8774ab290a3d","rev":"8774ab290a3d","inject":["@deepseek-ai/dsh-api-workspace-controller","@deepseek-ai/dsh-client-ui-renderer","@deepseek-ai/dsh-client-ui-layout","@deepseek-ai/dsh-client-ui-session","@deepseek-ai/dsh-client-ui-workspace","@deepseek-ai/dsh-client-locale"]},{"id":"@deepseek-ai/dsh-client-ui-sidebar-right","url":"/plugins/@deepseek-ai/dsh-client-ui-sidebar-right/client.js?rev=dadf9eb9f03d","rev":"dadf9eb9f03d","inject":["@deepseek-ai/dsh-api-session-controller","@deepseek-ai/dsh-client-resources","@deepseek-ai/dsh-client-ui-conversation","@deepseek-ai/dsh-client-ui-layout","@deepseek-ai/dsh-client-ui-session"]},{"id":"@deepseek-ai/dsh-client-ui-sidebar-documentpreview","url":"/plugins/@deepseek-ai/dsh-client-ui-sidebar-documentpreview/client.js?rev=eba67abc732c","rev":"eba67abc732c","inject":["@deepseek-ai/dsh-api-gateway","@deepseek-ai/dsh-api-workspace-files","@deepseek-ai/dsh-client-ui-sidebar-right","@deepseek-ai/dsh-client-ui-session","@deepseek-ai/dsh-api-remotes"]},{"id":"@deepseek-ai/dsh-client-ui-sidebar-files","url":"/plugins/@deepseek-ai/dsh-client-ui-sidebar-files/client.js?rev=7f6eaed9594b","rev":"7f6eaed9594b","inject":["@deepseek-ai/dsh-api-workspace-files","@deepseek-ai/dsh-client-ui-sidebar-right","@deepseek-ai/dsh-client-ui-session","@deepseek-ai/dsh-api-remotes"]},{"id":"@deepseek-ai/dsh-client-ui-settings","url":"/plugins/@deepseek-ai/dsh-client-ui-settings/client.js?rev=d6c4b822ae4e","rev":"d6c4b822ae4e","inject":["@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=df95abd2ae9e","rev":"df95abd2ae9e","inject":["@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=c1b875ebae61","rev":"c1b875ebae61","inject":["@deepseek-ai/dsh-client-ui-settings","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-api-remotes"]},{"id":"@deepseek-ai/dsh-client-ui-settings-plugin-inventory","url":"/plugins/@deepseek-ai/dsh-client-ui-settings-plugin-inventory/client.js?rev=60641d1dc06f","rev":"60641d1dc06f","inject":["@deepseek-ai/dsh-api-remotes","@deepseek-ai/dsh-client-ui-settings","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-agent-preset"]},{"id":"@deepseek-ai/dsh-client-ui-conversation","url":"/plugins/@deepseek-ai/dsh-client-ui-conversation/client.js?rev=77029e15304e","rev":"77029e15304e","inject":["@deepseek-ai/dsh-api-session-controller","@deepseek-ai/dsh-client-file-upload","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-layout","@deepseek-ai/dsh-client-ui-renderer","@deepseek-ai/dsh-client-ui-session","@deepseek-ai/dsh-client-ui-settings","@deepseek-ai/dsh-client-ui-workspace"]},{"id":"@deepseek-ai/dsh-client-ui-approval","url":"/plugins/@deepseek-ai/dsh-client-ui-approval/client.js?rev=17786fa261f5","rev":"17786fa261f5","inject":["@deepseek-ai/dsh-api-remotes","@deepseek-ai/dsh-api-session-controller","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-conversation","@deepseek-ai/dsh-client-ui-renderer","@deepseek-ai/dsh-client-ui-session"]},{"id":"@deepseek-ai/dsh-client-ui-chat","url":"/plugins/@deepseek-ai/dsh-client-ui-chat/client.js?rev=3a4eb5d0636f","rev":"3a4eb5d0636f","inject":["@deepseek-ai/dsh-api-session-controller","@deepseek-ai/dsh-api-workspace-controller","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-conversation","@deepseek-ai/dsh-client-ui-layout","@deepseek-ai/dsh-client-ui-renderer","@deepseek-ai/dsh-client-ui-session","@deepseek-ai/dsh-client-ui-sidebar-right","@deepseek-ai/dsh-client-ui-settings","@deepseek-ai/dsh-client-ui-workspace"]},{"id":"@deepseek-ai/dsh-client-ui-brand-official","url":"/plugins/@deepseek-ai/dsh-client-ui-brand-official/client.js?rev=8fb2a6f9caf8","rev":"8fb2a6f9caf8","inject":["@deepseek-ai/dsh-client-ui-renderer","@deepseek-ai/dsh-client-ui-sidebar"]},{"id":"@deepseek-ai/dsh-client-ui-attachment","url":"/plugins/@deepseek-ai/dsh-client-ui-attachment/client.js?rev=fa3316dc1dd2","rev":"fa3316dc1dd2","inject":["@deepseek-ai/dsh-client-ui-chat","@deepseek-ai/dsh-client-ui-conversation","@deepseek-ai/dsh-client-ui-renderer","@deepseek-ai/dsh-client-ui-trajectory","@deepseek-ai/dsh-client-ui-tool"]},{"id":"@deepseek-ai/dsh-client-ui-tool","url":"/plugins/@deepseek-ai/dsh-client-ui-tool/client.js?rev=fe4e701c1525","rev":"fe4e701c1525","inject":["@deepseek-ai/dsh-api-workspace-controller","@deepseek-ai/dsh-client-connection","@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=5e2074797029","rev":"5e2074797029","inject":["@deepseek-ai/dsh-api-session-controller","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-chat","@deepseek-ai/dsh-client-ui-conversation","@deepseek-ai/dsh-client-ui-renderer","@deepseek-ai/dsh-client-ui-session"]},{"id":"@deepseek-ai/dsh-client-ui-deliverables","url":"/plugins/@deepseek-ai/dsh-client-ui-deliverables/client.js?rev=07f4a89d81d4","rev":"07f4a89d81d4","inject":["@deepseek-ai/dsh-api-remotes","@deepseek-ai/dsh-client-connection","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-chat","@deepseek-ai/dsh-client-ui-conversation","@deepseek-ai/dsh-client-ui-renderer","@deepseek-ai/dsh-client-ui-tool"]},{"id":"@deepseek-ai/dsh-client-ui-workspace","url":"/plugins/@deepseek-ai/dsh-client-ui-workspace/client.js?rev=0f3e6f8cc861","rev":"0f3e6f8cc861","inject":["@deepseek-ai/dsh-api-remotes","@deepseek-ai/dsh-api-session-controller","@deepseek-ai/dsh-api-workspace-controller","@deepseek-ai/dsh-client-connection","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-conversation","@deepseek-ai/dsh-client-ui-layout","@deepseek-ai/dsh-client-ui-renderer","@deepseek-ai/dsh-client-ui-session","@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=f155a5573bd4","rev":"f155a5573bd4","inject":["@deepseek-ai/dsh-api-session-controller","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-conversation","@deepseek-ai/dsh-client-ui-renderer"]},{"id":"@deepseek-ai/dsh-client-ui-commands","url":"/plugins/@deepseek-ai/dsh-client-ui-commands/client.js?rev=389a1d4048c1","rev":"389a1d4048c1","inject":["@deepseek-ai/dsh-api-remotes","@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=cecfba40f5ed","rev":"cecfba40f5ed","inject":["@deepseek-ai/dsh-api-session-controller","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-renderer","@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=fe11d0f231df","rev":"fe11d0f231df","inject":["@deepseek-ai/dsh-api-session-controller","@deepseek-ai/dsh-client-locale","@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-reference","url":"/plugins/@deepseek-ai/dsh-client-ui-reference/client.js?rev=6fbd03108411","rev":"6fbd03108411","inject":["@deepseek-ai/dsh-api-remotes","@deepseek-ai/dsh-api-session-controller","@deepseek-ai/dsh-client-connection","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-input-trigger"]},{"id":"@deepseek-ai/dsh-client-ui-schedule","url":"/plugins/@deepseek-ai/dsh-client-ui-schedule/client.js?rev=a9318fb778e0","rev":"a9318fb778e0","inject":["@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-conversation","@deepseek-ai/dsh-client-ui-primitives"]},{"id":"@deepseek-ai/dsh-client-ui-jobs","url":"/plugins/@deepseek-ai/dsh-client-ui-jobs/client.js?rev=5654b19b06a3","rev":"5654b19b06a3","inject":["@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-conversation","@deepseek-ai/dsh-client-ui-primitives"]},{"id":"@deepseek-ai/dsh-client-ui-goal","url":"/plugins/@deepseek-ai/dsh-client-ui-goal/client.js?rev=169a4c2b50b0","rev":"169a4c2b50b0","inject":["@deepseek-ai/dsh-api-remotes","@deepseek-ai/dsh-api-session-controller","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-chat","@deepseek-ai/dsh-client-ui-conversation","@deepseek-ai/dsh-client-ui-renderer","@deepseek-ai/dsh-client-ui-session"]},{"id":"@deepseek-ai/dsh-client-ui-message-feedback","url":"/plugins/@deepseek-ai/dsh-client-ui-message-feedback/client.js?rev=c2b758352649","rev":"c2b758352649","inject":["@deepseek-ai/dsh-api-remotes","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-conversation","@deepseek-ai/dsh-client-ui-renderer","@deepseek-ai/dsh-client-ui-commands"]},{"id":"@deepseek-ai/dsh-client-ui-model-selection","url":"/plugins/@deepseek-ai/dsh-client-ui-model-selection/client.js?rev=cf06eedfc458","rev":"cf06eedfc458","inject":["@deepseek-ai/dsh-api-session-controller","@deepseek-ai/dsh-client-locale","@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=c24e5a1f666b","rev":"c24e5a1f666b","inject":["@deepseek-ai/dsh-api-session-controller","@deepseek-ai/dsh-client-locale","@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=2693519081e0","rev":"2693519081e0","inject":["@deepseek-ai/dsh-api-session-controller","@deepseek-ai/dsh-client-connection","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-conversation","@deepseek-ai/dsh-client-ui-session","@deepseek-ai/dsh-client-ui-settings","@deepseek-ai/dsh-client-ui-workspace","@deepseek-ai/dsh-api-remotes"]},{"id":"@deepseek-ai/dsh-client-ui-settings-plugins","url":"/plugins/@deepseek-ai/dsh-client-ui-settings-plugins/client.js?rev=b5e809f75723","rev":"b5e809f75723","inject":["@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-settings","@deepseek-ai/dsh-api-remotes"]},{"id":"@deepseek-ai/dsh-client-ui-plan","url":"/plugins/@deepseek-ai/dsh-client-ui-plan/client.js?rev=6406b5e5f238","rev":"6406b5e5f238","inject":["@deepseek-ai/dsh-api-remotes","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-conversation"]},{"id":"@deepseek-ai/dsh-client-ui-user-questions","url":"/plugins/@deepseek-ai/dsh-client-ui-user-questions/client.js?rev=46d9b6401a1f","rev":"46d9b6401a1f","inject":["@deepseek-ai/dsh-api-remotes","@deepseek-ai/dsh-api-session-controller","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-conversation","@deepseek-ai/dsh-client-ui-renderer","@deepseek-ai/dsh-client-ui-session"]},{"id":"@deepseek-ai/dsh-client-ui-trajectory","url":"/plugins/@deepseek-ai/dsh-client-ui-trajectory/client.js?rev=51be799a1536","rev":"51be799a1536","inject":["@deepseek-ai/dsh-api-session-controller","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-conversation","@deepseek-ai/dsh-client-ui-renderer","@deepseek-ai/dsh-client-ui-session"]},{"id":"@deepseek-ai/dsh-client-ui-directory-picker-browse","url":"/plugins/@deepseek-ai/dsh-client-ui-directory-picker-browse/client.js?rev=3f9d3963bc94","rev":"3f9d3963bc94","inject":["@deepseek-ai/dsh-api-remotes","@deepseek-ai/dsh-client-ui-renderer","@deepseek-ai/dsh-client-ui-workspace","@deepseek-ai/dsh-client-locale"]},{"id":"dsh-edge-client-ui","url":"/plugins/dsh-edge-client-ui/client.js?rev=dc7cd0d7e95c","rev":"dc7cd0d7e95c","inject":["@deepseek-ai/dsh-api-workspace-controller","@deepseek-ai/dsh-client-ui-settings","@deepseek-ai/dsh-client-locale"]}],"batches":[{"phase":"bootstrap","url":"/plugins/@deepseek-ai/dsh-client-modules/client.js?rev=e3bfba69eef8","rev":"e3bfba69eef8","entries":["@deepseek-ai/dsh-client-modules"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-typert-registry/client.js?rev=a379158cfb94","rev":"a379158cfb94","entries":["@deepseek-ai/dsh-typert-registry"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-api-gateway/client.js?rev=1aab944126ed","rev":"1aab944126ed","entries":["@deepseek-ai/dsh-api-gateway"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-open-in-app/client.js?rev=e98f27e7eb95","rev":"e98f27e7eb95","entries":["@deepseek-ai/dsh-client-ui-open-in-app"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-api-session-controller/client.js?rev=aa5e07e1e8b7","rev":"aa5e07e1e8b7","entries":["@deepseek-ai/dsh-api-session-controller"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-api-workspace-files/client.js?rev=fc0912ede46e","rev":"fc0912ede46e","entries":["@deepseek-ai/dsh-api-workspace-files"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-api-workspace-controller/client.js?rev=19c9dbd06ba0","rev":"19c9dbd06ba0","entries":["@deepseek-ai/dsh-api-workspace-controller"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-connection/client.js?rev=a6ad0952e8e3","rev":"a6ad0952e8e3","entries":["@deepseek-ai/dsh-client-connection"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-file-upload/client.js?rev=922cf5109364","rev":"922cf5109364","entries":["@deepseek-ai/dsh-client-file-upload"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-api-remotes/client.js?rev=4e5d116f07ee","rev":"4e5d116f07ee","entries":["@deepseek-ai/dsh-api-remotes"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-theme/client.js?rev=857b0cdb8ea3","rev":"857b0cdb8ea3","entries":["@deepseek-ai/dsh-client-ui-theme"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-locale/client.js?rev=375ec21a35c9","rev":"375ec21a35c9","entries":["@deepseek-ai/dsh-client-locale"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-layout/client.js?rev=e5c5b4623dcd","rev":"e5c5b4623dcd","entries":["@deepseek-ai/dsh-client-ui-layout"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-renderer/client.js?rev=735cca984913","rev":"735cca984913","entries":["@deepseek-ai/dsh-client-ui-renderer"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-session/client.js?rev=fbb203e48601","rev":"fbb203e48601","entries":["@deepseek-ai/dsh-client-ui-session"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-resources/client.js?rev=c286431659da","rev":"c286431659da","entries":["@deepseek-ai/dsh-client-resources"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-sidebar/client.js?rev=8774ab290a3d","rev":"8774ab290a3d","entries":["@deepseek-ai/dsh-client-ui-sidebar"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-sidebar-right/client.js?rev=dadf9eb9f03d","rev":"dadf9eb9f03d","entries":["@deepseek-ai/dsh-client-ui-sidebar-right"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-sidebar-documentpreview/client.js?rev=eba67abc732c","rev":"eba67abc732c","entries":["@deepseek-ai/dsh-client-ui-sidebar-documentpreview"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-sidebar-files/client.js?rev=7f6eaed9594b","rev":"7f6eaed9594b","entries":["@deepseek-ai/dsh-client-ui-sidebar-files"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-settings/client.js?rev=d6c4b822ae4e","rev":"d6c4b822ae4e","entries":["@deepseek-ai/dsh-client-ui-settings"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-settings-general/client.js?rev=df95abd2ae9e","rev":"df95abd2ae9e","entries":["@deepseek-ai/dsh-client-ui-settings-general"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-settings-models/client.js?rev=c1b875ebae61","rev":"c1b875ebae61","entries":["@deepseek-ai/dsh-client-ui-settings-models"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-settings-plugin-inventory/client.js?rev=60641d1dc06f","rev":"60641d1dc06f","entries":["@deepseek-ai/dsh-client-ui-settings-plugin-inventory"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-conversation/client.js?rev=77029e15304e","rev":"77029e15304e","entries":["@deepseek-ai/dsh-client-ui-conversation"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-approval/client.js?rev=17786fa261f5","rev":"17786fa261f5","entries":["@deepseek-ai/dsh-client-ui-approval"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-chat/client.js?rev=3a4eb5d0636f","rev":"3a4eb5d0636f","entries":["@deepseek-ai/dsh-client-ui-chat"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-brand-official/client.js?rev=8fb2a6f9caf8","rev":"8fb2a6f9caf8","entries":["@deepseek-ai/dsh-client-ui-brand-official"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-attachment/client.js?rev=fa3316dc1dd2","rev":"fa3316dc1dd2","entries":["@deepseek-ai/dsh-client-ui-attachment"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-tool/client.js?rev=fe4e701c1525","rev":"fe4e701c1525","entries":["@deepseek-ai/dsh-client-ui-tool"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-workflow-run/client.js?rev=5e2074797029","rev":"5e2074797029","entries":["@deepseek-ai/dsh-client-ui-workflow-run"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-deliverables/client.js?rev=07f4a89d81d4","rev":"07f4a89d81d4","entries":["@deepseek-ai/dsh-client-ui-deliverables"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-workspace/client.js?rev=0f3e6f8cc861","rev":"0f3e6f8cc861","entries":["@deepseek-ai/dsh-client-ui-workspace"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-input-trigger/client.js?rev=f155a5573bd4","rev":"f155a5573bd4","entries":["@deepseek-ai/dsh-client-ui-input-trigger"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-commands/client.js?rev=389a1d4048c1","rev":"389a1d4048c1","entries":["@deepseek-ai/dsh-client-ui-commands"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-skill/client.js?rev=cecfba40f5ed","rev":"cecfba40f5ed","entries":["@deepseek-ai/dsh-client-ui-skill"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-subagent/client.js?rev=fe11d0f231df","rev":"fe11d0f231df","entries":["@deepseek-ai/dsh-client-ui-subagent"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-reference/client.js?rev=6fbd03108411","rev":"6fbd03108411","entries":["@deepseek-ai/dsh-client-ui-reference"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-schedule/client.js?rev=a9318fb778e0","rev":"a9318fb778e0","entries":["@deepseek-ai/dsh-client-ui-schedule"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-jobs/client.js?rev=5654b19b06a3","rev":"5654b19b06a3","entries":["@deepseek-ai/dsh-client-ui-jobs"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-goal/client.js?rev=169a4c2b50b0","rev":"169a4c2b50b0","entries":["@deepseek-ai/dsh-client-ui-goal"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-message-feedback/client.js?rev=c2b758352649","rev":"c2b758352649","entries":["@deepseek-ai/dsh-client-ui-message-feedback"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-model-selection/client.js?rev=cf06eedfc458","rev":"cf06eedfc458","entries":["@deepseek-ai/dsh-client-ui-model-selection"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-permission-presets/client.js?rev=c24e5a1f666b","rev":"c24e5a1f666b","entries":["@deepseek-ai/dsh-client-ui-permission-presets"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-agent-preset/client.js?rev=2693519081e0","rev":"2693519081e0","entries":["@deepseek-ai/dsh-client-ui-agent-preset"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-settings-plugins/client.js?rev=b5e809f75723","rev":"b5e809f75723","entries":["@deepseek-ai/dsh-client-ui-settings-plugins"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-plan/client.js?rev=6406b5e5f238","rev":"6406b5e5f238","entries":["@deepseek-ai/dsh-client-ui-plan"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-user-questions/client.js?rev=46d9b6401a1f","rev":"46d9b6401a1f","entries":["@deepseek-ai/dsh-client-ui-user-questions"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-trajectory/client.js?rev=51be799a1536","rev":"51be799a1536","entries":["@deepseek-ai/dsh-client-ui-trajectory"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-directory-picker-browse/client.js?rev=3f9d3963bc94","rev":"3f9d3963bc94","entries":["@deepseek-ai/dsh-client-ui-directory-picker-browse"]},{"phase":"application","url":"/plugins/dsh-edge-client-ui/client.js?rev=dc7cd0d7e95c","rev":"dc7cd0d7e95c","entries":["dsh-edge-client-ui"]}]}</script>
|
|
45
45
|
<meta charset="utf-8" />
|
|
46
46
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
47
47
|
<link rel="manifest" href="./manifest.webmanifest" />
|