dsh-edge 0.22.0 → 0.23.0-alpha.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.i18n.yaml 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: ea0b4b085043962b408bf72e88fe0177473a19ee
6
- README.zh.md: c42605e24b96b89fdd9c304c6591d66de9063b0e
5
+ README.md: f888e62dc861742f9d6ec768f9991bc48d407d9a
6
+ README.zh.md: c2d8c137c32688efdde7a3f6327f40929daa4a6e
package/README.md CHANGED
@@ -145,17 +145,17 @@ This reference separates code that runs natively in Workers, code adapted at an
145
145
  | Bash tool | Node subprocess, sandbox, terminal, and job services | Adapted at the native tool seam | Register an upstream `ToolDefinition`, but execute its body through the configured Computer workspace backend and just-bash. The default direct backend runs inside the owner Durable Object with hardened interpreter limits and no network command; adding a `LOADER` binding selects Computer's isolated Worker Shell backend. Native tool cancellation sends `SIGINT` through the Computer execution handle. Deployment configuration supplies an explicit default timeout and caller-selectable ceiling, while `timedOut` reports the deadline independently from exit and cancellation status. Native binaries, background processes, PTYs, and arbitrary Linux behavior are unavailable. |
146
146
  | Workspace filesystem | Local filesystem services and host paths | Adapted | Store `/workspace` in the owner's SQLite-backed Durable Object VFS. |
147
147
  | Session persistence | `SessionPersistence` service, `PersistenceCoordinator`, and local JSONL/SQLite backends | Native backend adaptation | Reuse the upstream service and coordinator ownership. Implement storage primitives over Durable Object SQL with the upstream header/event mapping. One Edge-only table retains empty session headers across transparent hibernation and is removed when canonical rows materialize; no Edge turn or message schema exists. Internal coordinator helpers validate the bounded replay loader and abandon a failed unmaterialized creation before disposal. |
148
- | Settings and credentials | File-backed settings, launch environment, and credential services | Writable with DO storage | The upstream `dsh-settings` plugin persists user sections in Durable Object KV via `DurableObjectSettingsProvider`. The upstream `dsh-llm-deepseek` cordis plugin is installed directly, auto-registering the `llm-deepseek` settings namespace and configurable provider entry; the Settings → Models page can read and modify provider configuration (base URL, model catalog, API key reference, reasoning effort) at runtime without redeployment. `EdgeCredentialProvider` resolves credentials from DO KV first, then falls back to Worker environment secrets; `set`/`unset` persist through the upstream seam. Deployment defaults (maxTokens 256,000, reasoningEffort high) are aligned with the upstream plugin so unset deployment variables match upstream behavior. Settings → Built-in plugins also has a Settings tab with upstream's agent-loop and web-search cards: the Edge registers their `agent-loop` (parallel tool calls) and `web-search-deepseek` (searches per request, endpoint, and the DeepSeek key the search uses) namespaces, applies a saved value to the running plugin, and refuses an endpoint that `DEEPSEEK_SEARCH_BASE_URL` would refuse. Upstream's plugin manager page, which hosts these cards upstream, is not shipped, because it installs and removes plugins through a runtime Loader the Edge does not have. |
148
+ | Settings and credentials | File-backed settings, launch environment, and credential services | Writable with DO storage | The upstream `dsh-settings` plugin persists user sections in Durable Object KV via `DurableObjectSettingsProvider`. The upstream `dsh-llm-deepseek` cordis plugin is installed directly, auto-registering the `llm-deepseek` settings namespace and configurable provider entry; the Settings → Models page can read and modify provider configuration (base URL, model catalog, API key reference, reasoning effort) at runtime without redeployment. `EdgeCredentialProvider` resolves credentials from DO KV first, then falls back to Worker environment secrets; `set`/`unset` persist through the upstream seam. Deployment defaults (maxTokens 256,000, reasoningEffort high) are aligned with the upstream plugin so unset deployment variables match upstream behavior. Settings → Built-in plugins also has a Settings tab with upstream's agent-loop and web-search cards: the Edge registers their `agent-loop` (parallel tool calls) and `web-search-deepseek` (searches per request, endpoint, and the DeepSeek key the search uses) namespaces, applies a saved value to the running plugin, and refuses an endpoint that `DEEPSEEK_SEARCH_BASE_URL` would refuse. Upstream's Subagent card edits the subagent runtime's `subagent` namespace: maximum recursion depth (default 1) and the parallelism limit for resident subagents (default 8); its model-selection section appears once the Edge serves `subagent-model-selection`. Upstream's plugin manager page, which hosts these cards upstream, is not shipped, because it installs and removes plugins through a runtime Loader the Edge does not have. |
149
149
  | Host boot and plugins | Node command line, Cordis profile loading, package resolution, and HMR | Explicit Edge composition | Keep the local boot profile out of Workerd. Build immutable client bundles ahead of deployment; exclude HMR and host domains that the Edge `ApiProxy` does not expose. The upstream `dsh-host-plugin-inventory` Remote serves Settings → Plugins; `EdgeLoader` projects `host:` entries from the live plugin registry with their fiber phase and `web:` entries from `expected-boot-graph.json`. |
150
150
  | DSH transport | Typed HTTP RPC plus mux and host WebSocket downlinks | Reused with an Edge server implementation | Use the upstream fetch carrier for unary methods and preserve its envelopes, schemas, projections, lazy blank-session behavior, bounded content search, prompt and queue mutations, workspace mutations, queue snapshots, and event frames. Durable Object WebSocket hibernation owns both downlinks; mux reconnects replay pending live inbox state, while REST/SSE routes remain a diagnostic compatibility path. |
151
151
  | Workspace registry | Storage-domain global state plus `WorkspaceRecord` rows | Native backend adaptation | Keep the upstream global and record value shapes, including manual session order and archive membership, but map their physical keys and atomic writes to Durable Object storage. Edge constrains the registry to the one native `/workspace` VFS; rename, delete, recreation, and session reordering retain the upstream RPC and Host-frame semantics. |
152
152
  | Directory picker | `ctx.directoryPicker` seam with the `-native` OS chooser or the `-browse` filesystem backend, chosen at boot by `dsh-host-directory-picker-auto`, plus the Web browse dialog | Reused with an Edge browse backend | Install the upstream seam and pin the upstream `dsh-client-ui-directory-picker-browse` dialog in the Web roster; Edge answers the `browse` capability from the `/workspace` Computer VFS one level per call, rooted at `/workspace` with the upstream hidden, bound, and failure vocabulary, so the upstream `DirectoryPickerController` serves `directoryPicker/list` and `createDirectory` and refuses the native `pick`. |
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
- | Other tools | Web Search, filesystem editor tools, MCP, skills, workflows, jobs, and subagents | Search, file, glob/grep, goal, todo, 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) is offered by the same runtime, but only to sessions started in the upstream `ptc` agent preset (PTC mode), which isolated deployments offer under its upstream id so the Web client shows its built-in bilingual name. That preset presents every tool through the generated SDK and, as upstream does, does not offer `workflow`, because `run_code` is its only orchestration surface. The default upstream `standard` preset (Standard mode; sessions recorded under the earlier `dsh-edge` id read as `standard`) presents tools natively and keeps `workflow`. As upstream, Settings → Agent presets writes the `agent-presets` settings namespace to choose which offered preset new sessions start on. In PTC mode, 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. `glob` and `grep` keep upstream `dsh-tool-fs-search`'s names, schemas, result text, search cards, and spill of results over 100 paths or 250 matches, but Workers cannot spawn its ripgrep binary, so Edge runs them over the VFS: both skip VCS metadata, `grep` also skips hidden files, binary files, and files over 4 MiB, and neither applies `.gitignore`. `grep` patterns use RE2 syntax (no lookaround or backreferences) through re2js, which matches in linear time, so a pathological pattern cannot stall the Durable Object. A search walks at most 20,000 entries, and `grep` collects at most 20,000 matching lines or 20 MB of their text; past a cap it fails and asks for a narrower path or pattern. Glob syntax that ripgrep 15 rejects (an unclosed `[` or `{`, a reversed range such as `[z-a]`, a dangling `\`) fails as an invalid pattern; nested alternates such as `a{b,{c,d}}` work. A search checks for cancellation before and after each directory listing, so the 30-second tool timeout stops a long walk. As upstream, the file observation policy (`dsh-fs-observation-policy`) guards them: `write` may not overwrite a file the session has not read, `edit` requires a prior read, and a file changed since it was read (by `bash` or the Linux container, for example) fails as stale until it is read again; a restarted session starts with no reads recorded. Goal tools (`ToolGoal`) composed directly with `GoalService` as upstream cordis plugins. The upstream `todo_write` tool (`dsh-tool-todo`) keeps the session's task list, with several tasks allowed in progress as in upstream's composition; its `todos` projection drives the Web client's todo dock. The upstream `present` tool (`dsh-tool-present`) declares workspace files as a turn's deliverables, which the Web client shows as file cards with a sidebar preview; the Edge has no desktop, so it answers the cards' Host check (`/api/present.host`) as unavailable and they offer no native opening. As upstream, `dsh-agent-instructions` loads `AGENTS.md` and `CLAUDE.md` (and their `.local.md` overlays) from the project root (the nearest ancestor directory containing `.git`, or else the session's working directory) down to the working directory, through the workspace VFS, into a 64 KiB baseline message before the first request; a `read`, `write`, or `edit` that reaches a deeper directory adds its instructions to the next request. Workers have no home directory, so the user-global file is `/.dsh/AGENTS.md`. 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. |
155
+ | Other tools | Web Search, filesystem editor tools, MCP, skills, workflows, jobs, and subagents | Search, file, glob/grep, goal, todo, 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) is offered by the same runtime, but only to sessions started in the upstream `ptc` agent preset (PTC mode), which isolated deployments offer under its upstream id so the Web client shows its built-in bilingual name. That preset presents every tool through the generated SDK and, as upstream does, does not offer `workflow`, because `run_code` is its only orchestration surface. The default upstream `standard` preset (Standard mode; sessions recorded under the earlier `dsh-edge` id read as `standard`) presents tools natively and keeps `workflow`. As upstream, Settings → Agent presets writes the `agent-presets` settings namespace to choose which offered preset new sessions start on. In PTC mode, 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. `glob` and `grep` keep upstream `dsh-tool-fs-search`'s names, schemas, result text, search cards, and spill of results over 100 paths or 250 matches, but Workers cannot spawn its ripgrep binary, so Edge runs them over the VFS: both skip VCS metadata, `grep` also skips hidden files, binary files, and files over 4 MiB, and neither applies `.gitignore`. `grep` patterns use RE2 syntax (no lookaround or backreferences) through re2js, which matches in linear time, so a pathological pattern cannot stall the Durable Object. A search walks at most 20,000 entries, and `grep` collects at most 20,000 matching lines or 20 MB of their text; past a cap it fails and asks for a narrower path or pattern. Glob syntax that ripgrep 15 rejects (an unclosed `[` or `{`, a reversed range such as `[z-a]`, a dangling `\`) fails as an invalid pattern; nested alternates such as `a{b,{c,d}}` work. A search checks for cancellation before and after each directory listing, so the 30-second tool timeout stops a long walk. As upstream, the file observation policy (`dsh-fs-observation-policy`) guards them: `write` may not overwrite a file the session has not read, `edit` requires a prior read, and a file changed since it was read (by `bash` or the Linux container, for example) fails as stale until it is read again; a restarted session starts with no reads recorded. Goal tools (`ToolGoal`) composed directly with `GoalService` as upstream cordis plugins. The upstream `todo_write` tool (`dsh-tool-todo`) keeps the session's task list, with several tasks allowed in progress as in upstream's composition; its `todos` projection drives the Web client's todo dock. The upstream `present` tool (`dsh-tool-present`) declares workspace files as a turn's deliverables, which the Web client shows as file cards with a sidebar preview; the Edge has no desktop, so it answers the cards' Host check (`/api/present.host`) as unavailable and they offer no native opening. As upstream, `dsh-agent-instructions` loads `AGENTS.md` and `CLAUDE.md` (and their `.local.md` overlays) from the project root (the nearest ancestor directory containing `.git`, or else the session's working directory) down to the working directory, through the workspace VFS, into a 64 KiB baseline message before the first request; a `read`, `write`, or `edit` that reaches a deeper directory adds its instructions to the next request. Workers have no home directory, so the user-global file is `/.dsh/AGENTS.md`. Skill tool via `SkillRegistry`. As upstream `dsh-skill-filesystem`, skills are `<name>/SKILL.md` or `<name>.md` files with `name` and `description` frontmatter under the project's `.dsh/skills` and `.agents/skills` and the user roots `/.dsh/skills` and `/.agents/skills` (Workers have no home directory), read through the workspace VFS, up to 100 entries per root and 64 KiB per skill file; an added or edited skill applies from the next turn, and the `/` menu of a session opened after the change lists it; as upstream, the Web client keeps an open session's `/` list until the page reloads. Skills stored through the owner API `GET/PUT/DELETE /api/skills` (`EdgeSkillProvider`, DO KV) rank below them. 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
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. The upstream `/goal` command (`dsh-command-goal`) shows, sets, edits, pauses, resumes, or clears the session's goal. Every goal round runs inside an Edge turn, with its workspace, deadline, and live events: a turn stays open while upstream's round driver queues the next round, and a call that arms a goal outside a turn (`/goal`, GoalBar Resume) runs inside a new one. |
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. |
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. Upstream image offload (`dsh-compaction-image-offload`) keeps a turn going when its images exceed the route's budget (600 images per request by default): it marks the oldest occurrences offloaded with an `image/offload` session event and the request is retried. |
159
159
  | Session projection | Real-time derived state push to connected clients | Reused with Edge bridge | Upstream `onChanged` callback pushes title, model, goal, and session-stats projection frames to connected WebSocket clients. Upstream `dsh-session-stats` (whole-session turn and step counts and model, tool, and first-token times) feeds the Web chat view. `SessionProjectionCache` caches projections in DO KV for cold-session recovery. |
160
160
  | User questions | `UserQuestionService` answerer waterfall, the `ask_user_question` tool, `dsh-api-remotes` forwarded-event selection, and the Web question composer | Reused with an Edge connection seam | Install upstream `UserQuestionService`, `dsh-tool-ask-user`, and the `dsh-api-remotes` Host entry directly, so a model call to `ask_user_question` forwards its Agent-scoped question through the gateway-owned `$events` stream to the browser composer and the answer returns through `/api/$events/result` as the tool result. The gateway keeps a pending question across a dropped socket and redelivers it on reconnect. Edge adds only a `ctx.connection` seam that captures the gateway's RPC interceptor for the Durable Object, because Workers have no upstream web server. |
161
161
  | Plan mode | `PlanModeController` with the logged `plan` projection, the `plan:policy` prompt section, the `/plan` command, the `exit_plan_mode` tool, and the Web plan control | Reused | Install upstream `dsh-plan-mode` directly with a deployment-owned `section`. `/plan`, `/plan <message>`, and `/plan off` run through the upstream command runtime; the plan projection reaches the browser like every other projection; and `exit_plan_mode` presents the finished plan for review through the same user-questions path as `ask_user_question`, so approval leaves plan mode from the next accepted step. The Web `dsh-client-ui-plan` control joins the assembly. Plan mode is guidance, not enforcement: every tool stays callable. |
package/README.zh.md CHANGED
@@ -145,17 +145,17 @@ curl -b /tmp/dsh-edge-cookie -N -X POST -H 'content-type: application/json' \
145
145
  | Bash tool | Node subprocess、sandbox、terminal 和 job services | 在原生 tool seam 上适配 | 注册上游 `ToolDefinition`,但通过配置的 Computer workspace backend 和 just-bash 执行其 body。默认 direct backend 在 owner Durable Object 内运行,启用 hardened interpreter limits 且不提供网络命令;添加 `LOADER` binding 后会选择 Computer 的 isolated Worker Shell backend。原生 tool cancellation 会通过 Computer execution handle 发送 `SIGINT`。部署配置提供明确的默认 timeout 与调用方可选值上限,`timedOut` 则独立于 exit 与 cancellation status 报告 deadline。不支持原生二进制、后台进程、PTY 和任意 Linux 行为。 |
146
146
  | Workspace filesystem | 本地 filesystem services 和 host paths | 适配 | 在 owner 基于 SQLite 的 Durable Object VFS 中保存 `/workspace`。 |
147
147
  | Session persistence | `SessionPersistence` service、`PersistenceCoordinator` 及本地 JSONL/SQLite backends | 原生 backend 适配 | 复用上游 service 及 coordinator 的职责划分,在 Durable Object SQL 上实现存储原语,并使用上游 header/event 映射。一个 Edge 独有表会在透明休眠期间保留 empty session header,并在 canonical rows 物化时删除;Edge 不定义 turn 或 message schema。内部 coordinator helper 负责校验有界 replay loader,并在 disposal 前放弃失败且尚未物化的创建。 |
148
- | Settings and credentials | 基于文件的 settings、launch environment 和 credential services | 可写,使用 DO 存储 | 上游 `dsh-settings` 插件通过 `DurableObjectSettingsProvider` 把 user section 持久化到 Durable Object KV。上游 `dsh-llm-deepseek` cordis 插件直接安装,自动注册 `llm-deepseek` Settings 命名空间和可配置 Provider 条目;Settings → Models 页面可在运行时读取和修改 Provider 配置(base URL、model catalog、API key reference、reasoning effort),无需重新部署。`EdgeCredentialProvider` 先从 DO KV 解析凭证,然后降级到 Worker 环境变量 secret;`set`/`unset` 通过上游接缝持久化。部署默认值(maxTokens 256,000,reasoningEffort high)与上游插件对齐,未设置部署变量时与上游行为一致。 Settings → 内置插件还有一个“设置”标签页,提供上游的 Agent 循环和网页搜索两张卡片:Edge 注册它们的 `agent-loop`(并行工具调用数)和 `web-search-deepseek`(每次请求的搜索次数、接口地址,以及搜索使用的 DeepSeek Key)命名空间,把保存的值应用到正在运行的插件,并拒绝 `DEEPSEEK_SEARCH_BASE_URL` 同样会拒绝的接口地址。上游承载这些卡片的插件管理器页面没有提供,因为它通过 Edge 没有的运行时 Loader 安装和卸载插件。 |
148
+ | Settings and credentials | 基于文件的 settings、launch environment 和 credential services | 可写,使用 DO 存储 | 上游 `dsh-settings` 插件通过 `DurableObjectSettingsProvider` 把 user section 持久化到 Durable Object KV。上游 `dsh-llm-deepseek` cordis 插件直接安装,自动注册 `llm-deepseek` Settings 命名空间和可配置 Provider 条目;Settings → Models 页面可在运行时读取和修改 Provider 配置(base URL、model catalog、API key reference、reasoning effort),无需重新部署。`EdgeCredentialProvider` 先从 DO KV 解析凭证,然后降级到 Worker 环境变量 secret;`set`/`unset` 通过上游接缝持久化。部署默认值(maxTokens 256,000,reasoningEffort high)与上游插件对齐,未设置部署变量时与上游行为一致。 Settings → 内置插件还有一个“设置”标签页,提供上游的 Agent 循环和网页搜索两张卡片:Edge 注册它们的 `agent-loop`(并行工具调用数)和 `web-search-deepseek`(每次请求的搜索次数、接口地址,以及搜索使用的 DeepSeek Key)命名空间,把保存的值应用到正在运行的插件,并拒绝 `DEEPSEEK_SEARCH_BASE_URL` 同样会拒绝的接口地址。上游的子 agent 卡片编辑子 agent 运行时的 `subagent` 命名空间:最大递归深度(默认 1)和常驻子 agent 的并行上限(默认 8);等 Edge 提供 `subagent-model-selection` 后,卡片会出现选模型部分。上游承载这些卡片的插件管理器页面没有提供,因为它通过 Edge 没有的运行时 Loader 安装和卸载插件。 |
149
149
  | Host boot and plugins | Node 命令行、Cordis profile loading、package resolution 和 HMR | 显式 Edge composition | 不在 Workerd 中运行本地 boot profile。部署前构建 immutable 客户端包,并排除 HMR 及 Edge `ApiProxy` 未暴露的 host domain。上游 `dsh-host-plugin-inventory` Remote 为 Settings → Plugins 提供数据;`EdgeLoader` 从实时插件 registry 投影带 fiber phase 的 `host:` 条目,并从 `expected-boot-graph.json` 投影 `web:` 条目。 |
150
150
  | DSH transport | Typed HTTP RPC 加 mux/host WebSocket downlink | 复用并提供 Edge 服务端实现 | 对 unary method 使用上游 fetch carrier,并保留其 envelope、schema、projection、lazy blank-session 行为、有界内容搜索、prompt 与 queue mutation、workspace mutation、queue snapshot 和 event frame。两条 downlink 都由 Durable Object WebSocket 休眠机制持有;mux 重连会重放 live inbox 的待处理状态,REST/SSE 路由则保留为诊断兼容路径。 |
151
151
  | Workspace registry | Storage-domain global state 加 `WorkspaceRecord` rows | 原生 backend 适配 | 保持上游 global 和 record value shape,包括手动 session 顺序与 archive membership;仅把物理 key 和原子写入映射到 Durable Object storage。Edge 把 registry 限制为一个原生 `/workspace` VFS;rename、delete、recreate 与 session reorder 保持上游 RPC 和 Host-frame 语义。 |
152
152
  | Directory picker | `ctx.directoryPicker` seam,由 `dsh-host-directory-picker-auto` 在启动时选择 `-native` OS 选择器或 `-browse` 文件系统 backend,加 Web browse 对话框 | 复用并提供 Edge browse backend | 安装上游 seam,并把上游 `dsh-client-ui-directory-picker-browse` 对话框固定进 Web roster;Edge 从 `/workspace` Computer VFS 按每次一层回答 `browse` capability,以 `/workspace` 为根并沿用上游的 hidden、bound 与失败词汇,因此上游 `DirectoryPickerController` 提供 `directoryPicker/list` 与 `createDirectory`,并拒绝原生 `pick`。 |
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
- | Other tools | Web Search、filesystem editor tools、MCP、skills、workflows、jobs 和 subagents | Search、文件、glob/grep、goal、todo、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 模式)由同一运行时提供,但只提供给以上游 `ptc` agent 预设(PTC 模式)开始的会话。isolated 部署沿用上游 id 提供该预设,因此 Web 客户端显示其内置的双语名称。该预设通过生成的 SDK 呈现全部工具,并与上游一样不提供 `workflow`,因为 `run_code` 是它唯一的编排方式。默认使用上游的 `standard` 预设(标准模式;以早先 `dsh-edge` id 记录的会话按 `standard` 读取),以原生方式呈现工具,并保留 `workflow`。与上游一致,Settings → Agent presets 写入 `agent-presets` 设置命名空间,从可用预设中选择新会话的起始预设。在 PTC 模式下,每个程序先用 sucrase 去除类型,再在独立 Dynamic Worker 中运行,受 30 秒 `cpuMs` 上限约束且无出站网络;其中的 `tools.*` 调用经 RPC 桥回到 Durable Object,由其限制为每次运行最多 200 次(每次都是一次写入 session 事件的嵌套工具派发)、参数最多 256 KiB、单次结果最多 2 MiB,嵌套调用仍走审批。文件工具(read/write/edit/read_image)通过 `EdgeFileSystem` 适配 Computer VFS。`glob` 和 `grep` 保持上游 `dsh-tool-fs-search` 的工具名、参数结构、结果文本、搜索卡片,以及超过 100 条路径或 250 条匹配时把完整结果另存为文件;但 Workers 无法启动它所需的 ripgrep 程序,所以 Edge 在 VFS 上运行它们:两者都跳过版本控制元数据目录,`grep` 还跳过隐藏文件、二进制文件和超过 4 MiB 的文件,两者都不应用 `.gitignore`。`grep` 的正则使用 RE2 语法(不支持环视和反向引用),由 re2js 以线性时间匹配,所以病态正则不会卡住 Durable Object。一次搜索最多遍历 20,000 个条目,`grep` 最多收集 20,000 行匹配或 20 MB 文本;超出上限时会失败,并提示缩小路径或模式。ripgrep 15 会拒绝的 glob 语法(未闭合的 `[` 或 `{`、`[z-a]` 这样的反向范围、末尾悬空的 `\`)会作为无效模式报错;`a{b,{c,d}}` 这样的嵌套分组可以使用。搜索在每次列出目录前后检查是否已取消,所以 30 秒的工具超时能中止耗时的遍历。与上游一致,文件观察策略(`dsh-fs-observation-policy`)为它们把关:`write` 不能覆盖本会话尚未读过的文件,`edit` 必须先读过目标文件,读取之后被改动过的文件(例如被 `bash` 或 Linux 容器改动)在重新读取之前会作为过期而失败;会话重启后不保留读取记录。Goal 工具(`ToolGoal`)作为上游 cordis 插件直接与 `GoalService` 组合。上游 `todo_write` 工具(`dsh-tool-todo`)维护会话的任务列表,与上游的组合一样允许多个任务同时进行;它的 `todos` projection 驱动 Web 客户端的待办面板。上游 `present` 工具(`dsh-tool-present`)把工作区文件声明为本 turn 的交付物,Web 客户端将其显示为可在侧边栏预览的文件卡片;Edge 没有桌面,所以对卡片的 Host 检查(`/api/present.host`)回答不可用,卡片不提供用本机应用打开。与上游一样,`dsh-agent-instructions` 在第一次请求前,通过工作区 VFS 从项目根目录(最近一个包含 `.git` 的上级目录,没有则为会话工作目录)到工作目录逐级加载 `AGENTS.md` 和 `CLAUDE.md`(以及它们的 `.local.md` 覆盖文件),合成一条不超过 64 KiB 的基线消息;`read`、`write` 或 `edit` 进入更深的目录时,下一次请求会加入该目录的说明。Workers 没有用户主目录,所以用户全局文件是 `/.dsh/AGENTS.md`。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 行为。 |
155
+ | Other tools | Web Search、filesystem editor tools、MCP、skills、workflows、jobs 和 subagents | Search、文件、glob/grep、goal、todo、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 模式)由同一运行时提供,但只提供给以上游 `ptc` agent 预设(PTC 模式)开始的会话。isolated 部署沿用上游 id 提供该预设,因此 Web 客户端显示其内置的双语名称。该预设通过生成的 SDK 呈现全部工具,并与上游一样不提供 `workflow`,因为 `run_code` 是它唯一的编排方式。默认使用上游的 `standard` 预设(标准模式;以早先 `dsh-edge` id 记录的会话按 `standard` 读取),以原生方式呈现工具,并保留 `workflow`。与上游一致,Settings → Agent presets 写入 `agent-presets` 设置命名空间,从可用预设中选择新会话的起始预设。在 PTC 模式下,每个程序先用 sucrase 去除类型,再在独立 Dynamic Worker 中运行,受 30 秒 `cpuMs` 上限约束且无出站网络;其中的 `tools.*` 调用经 RPC 桥回到 Durable Object,由其限制为每次运行最多 200 次(每次都是一次写入 session 事件的嵌套工具派发)、参数最多 256 KiB、单次结果最多 2 MiB,嵌套调用仍走审批。文件工具(read/write/edit/read_image)通过 `EdgeFileSystem` 适配 Computer VFS。`glob` 和 `grep` 保持上游 `dsh-tool-fs-search` 的工具名、参数结构、结果文本、搜索卡片,以及超过 100 条路径或 250 条匹配时把完整结果另存为文件;但 Workers 无法启动它所需的 ripgrep 程序,所以 Edge 在 VFS 上运行它们:两者都跳过版本控制元数据目录,`grep` 还跳过隐藏文件、二进制文件和超过 4 MiB 的文件,两者都不应用 `.gitignore`。`grep` 的正则使用 RE2 语法(不支持环视和反向引用),由 re2js 以线性时间匹配,所以病态正则不会卡住 Durable Object。一次搜索最多遍历 20,000 个条目,`grep` 最多收集 20,000 行匹配或 20 MB 文本;超出上限时会失败,并提示缩小路径或模式。ripgrep 15 会拒绝的 glob 语法(未闭合的 `[` 或 `{`、`[z-a]` 这样的反向范围、末尾悬空的 `\`)会作为无效模式报错;`a{b,{c,d}}` 这样的嵌套分组可以使用。搜索在每次列出目录前后检查是否已取消,所以 30 秒的工具超时能中止耗时的遍历。与上游一致,文件观察策略(`dsh-fs-observation-policy`)为它们把关:`write` 不能覆盖本会话尚未读过的文件,`edit` 必须先读过目标文件,读取之后被改动过的文件(例如被 `bash` 或 Linux 容器改动)在重新读取之前会作为过期而失败;会话重启后不保留读取记录。Goal 工具(`ToolGoal`)作为上游 cordis 插件直接与 `GoalService` 组合。上游 `todo_write` 工具(`dsh-tool-todo`)维护会话的任务列表,与上游的组合一样允许多个任务同时进行;它的 `todos` projection 驱动 Web 客户端的待办面板。上游 `present` 工具(`dsh-tool-present`)把工作区文件声明为本 turn 的交付物,Web 客户端将其显示为可在侧边栏预览的文件卡片;Edge 没有桌面,所以对卡片的 Host 检查(`/api/present.host`)回答不可用,卡片不提供用本机应用打开。与上游一样,`dsh-agent-instructions` 在第一次请求前,通过工作区 VFS 从项目根目录(最近一个包含 `.git` 的上级目录,没有则为会话工作目录)到工作目录逐级加载 `AGENTS.md` 和 `CLAUDE.md`(以及它们的 `.local.md` 覆盖文件),合成一条不超过 64 KiB 的基线消息;`read`、`write` 或 `edit` 进入更深的目录时,下一次请求会加入该目录的说明。Workers 没有用户主目录,所以用户全局文件是 `/.dsh/AGENTS.md`。Skill 工具通过 `SkillRegistry` 提供。与上游 `dsh-skill-filesystem` 一致,skill 是带 `name` 和 `description` frontmatter 的 `<name>/SKILL.md` 或 `<name>.md` 文件,位于项目的 `.dsh/skills`、`.agents/skills`,以及用户目录 `/.dsh/skills`、`/.agents/skills`(Workers 没有用户主目录),通过工作区 VFS 读取,每个目录最多读取 100 个条目,每个 skill 文件不超过 64 KiB;新增或修改的 skill 从下一个 turn 起生效,变更后打开的会话的 `/` 菜单也会列出它;与上游一致,Web 客户端在页面刷新前保留已打开会话的 `/` 列表。通过 owner 接口 `GET/PUT/DELETE /api/skills` 存储的 skill(`EdgeSkillProvider`,DO KV)优先级低于它们。MCP client(`dsh-mcp-client`)已安装;仅支持 Streamable HTTP transport(Workers 上不可用 stdio)。在 Settings → DSH Edge → MCP Servers 中配置服务器;工具名格式为 `mcp__<serverName>__<tool>`。逐个针对 Worker-compatible capabilities 增加其余工具,不宣称不可用的 host 行为。 |
156
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 状态。上游的 `/goal` 命令(`dsh-command-goal`)可以查看、设定、编辑、暂停、恢复或清除会话的目标。每一轮目标都在 Edge 的 turn 内运行,带有工作区、时限和实时事件:上游的轮次驱动排入下一轮期间,turn 保持打开;在 turn 之外启用目标的调用(`/goal`、GoalBar 的恢复)在一个新的 turn 内运行。 |
158
- | Context compaction | Token 计量、自动压缩和 session 标题生成 | 复用 | 直接安装上游 cordis 插件。上下文压缩、token 计量、工具结果修剪和自动 session 标题生成原样运行。 |
158
+ | Context compaction | Token 计量、自动压缩和 session 标题生成 | 复用 | 直接安装上游 cordis 插件。上下文压缩、token 计量、工具结果修剪和自动 session 标题生成原样运行。上游的图片卸载(`dsh-compaction-image-offload`)在请求中的图片超出路由预算(默认每个请求 600 张)时让 turn 继续:它用一条 `image/offload` 会话事件把最早的图片标记为已卸载,然后重试请求。 |
159
159
  | Session projection | 向已连接客户端实时推送派生状态 | 复用并添加 Edge bridge | 上游 `onChanged` 回调向已连接 WebSocket 客户端推送 title、model、goal 和会话统计 projection frame。上游 `dsh-session-stats`(整个会话的 turn 数和 step 数,以及模型、工具和首 token 耗时)为 Web 聊天视图提供数据。`SessionProjectionCache` 在 DO KV 中缓存 projection,用于冷 session 恢复。 |
160
160
  | User questions | `UserQuestionService` answerer waterfall、`ask_user_question` 工具、`dsh-api-remotes` forwarded-event selection 与 Web question composer | 复用并添加 Edge connection seam | 直接安装上游 `UserQuestionService`、`dsh-tool-ask-user` 和 `dsh-api-remotes` Host entry,让模型调用 `ask_user_question` 时,其 Agent-scoped question 经 gateway 拥有的 `$events` stream 转发到浏览器 composer,答案经 `/api/$events/result` 作为 tool result 返回。gateway 会在 socket 断开时保留 pending question,并在重连后重新投递。Edge 只增加一个 `ctx.connection` seam,为 Durable Object 捕获 gateway 的 RPC interceptor,因为 Workers 没有上游 web server。 |
161
161
  | Plan mode | `PlanModeController` 及其记录在日志中的 `plan` projection、`plan:policy` prompt section、`/plan` 命令、`exit_plan_mode` 工具与 Web plan control | 复用 | 直接安装上游 `dsh-plan-mode`,并提供部署自有的 `section`。`/plan`、`/plan <message>` 和 `/plan off` 经上游 command runtime 执行;plan projection 像其他 projection 一样到达浏览器;`exit_plan_mode` 通过与 `ask_user_question` 相同的 user-questions 路径把完成的计划交给用户审阅,批准后从下一个被接受的 step 起离开 plan mode。Web 端 `dsh-client-ui-plan` control 加入装配。Plan mode 只是引导而非强制:所有工具仍可调用。 |
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=b23455a17f0d"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-api-gateway/client.js?rev=f96cbbc29dcb"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-open-in-app/client.js?rev=565b82de7963"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-api-session-controller/client.js?rev=1b22bf8a6d4a"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-api-job-controller/client.js?rev=7dcb6969b2d8"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-api-workspace-files/client.js?rev=3de1a9338e24"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-api-workspace-controller/client.js?rev=0f8db6e81d89"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-connection/client.js?rev=de2e0d637eaf"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-file-upload/client.js?rev=81e52051ff8c"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-api-remotes/client.js?rev=041d4fc1500a"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-theme/client.js?rev=52d407f01307"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-locale/client.js?rev=7eb7011a1537"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-shortcuts/client.js?rev=508cb7b3981c"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-shortcuts/client.js?rev=3c6a75f5d8c1"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-layout/client.js?rev=844a187dafea"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-renderer/client.js?rev=3964c918ca1e"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-session/client.js?rev=0ccd321cff2d"><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=3fc0cb56ec49"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-sidebar-right/client.js?rev=e29f827bcab0"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-sidebar-documentpreview/client.js?rev=f2a0c7113fd4"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-sidebar-browser/client.js?rev=5bd8be8c5cb8"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-sidebar-files/client.js?rev=6aaeb13f1f8e"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-settings/client.js?rev=e297e4b42507"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-settings-general/client.js?rev=13f72e0041e0"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-settings-models/client.js?rev=9783aac771dc"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-settings-plugin-inventory/client.js?rev=8cc61a9b07a4"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-conversation/client.js?rev=90a7b1691809"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-approval/client.js?rev=fbab223d424c"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-chat/client.js?rev=4dae09da32ab"><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=05785cc669d7"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-tool/client.js?rev=5b4ed3efee66"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-deliverables/client.js?rev=5d61823ea6cf"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-workspace/client.js?rev=04f6394593ee"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-workflow-run/client.js?rev=39006d898d28"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-input-trigger/client.js?rev=cf682bb89614"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-commands/client.js?rev=cab86e1f1d7d"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-skill/client.js?rev=72b73382a0fa"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-subagent/client.js?rev=237e6a66b8a3"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-reference/client.js?rev=d7d9407809cb"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-jobs/client.js?rev=0cb242bf4006"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-goal/client.js?rev=ad6ee1946bb5"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-message-feedback/client.js?rev=80918bdb27c0"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-model-selection/client.js?rev=f72603327b21"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-agent-preset/client.js?rev=da176ca824b8"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-settings-plugins/client.js?rev=6b95d5889f0f"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-settings-agent-loop/client.js?rev=4f5c8834f9ce"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-settings-web-search/client.js?rev=b115be090a5c"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-plan/client.js?rev=669d6dfdbb3e"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-user-questions/client.js?rev=fe812105feed"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-trajectory/client.js?rev=80059e654a2e"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-directory-picker-browse/client.js?rev=8a4bd72bfd65"><link rel="preload" as="script" href="/plugins/dsh-edge-client-ui/client.js?rev=e4a196ed2df5"><script src="/plugins/@deepseek-ai/dsh-client-modules/client.js?rev=b24ab13fe1a1"></script><script>globalThis["__DSH_BOOT__"] = {"rev":"ddce5181e604","entries":[{"id":"@deepseek-ai/dsh-typert-registry","url":"/plugins/@deepseek-ai/dsh-typert-registry/client.js?rev=b23455a17f0d","rev":"b23455a17f0d","inject":[],"immediately":true},{"id":"@deepseek-ai/dsh-api-gateway","url":"/plugins/@deepseek-ai/dsh-api-gateway/client.js?rev=f96cbbc29dcb","rev":"f96cbbc29dcb","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=565b82de7963","rev":"565b82de7963","inject":["@deepseek-ai/dsh-api-gateway","@deepseek-ai/dsh-api-remotes","@deepseek-ai/dsh-api-session-controller","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-shortcuts","@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-documentpreview"]},{"id":"@deepseek-ai/dsh-api-session-controller","url":"/plugins/@deepseek-ai/dsh-api-session-controller/client.js?rev=1b22bf8a6d4a","rev":"1b22bf8a6d4a","inject":["@deepseek-ai/dsh-api-gateway","@deepseek-ai/dsh-client-file-upload"],"external":["@deepseek-ai/dsh-api-gateway/client"]},{"id":"@deepseek-ai/dsh-api-job-controller","url":"/plugins/@deepseek-ai/dsh-api-job-controller/client.js?rev=7dcb6969b2d8","rev":"7dcb6969b2d8","inject":["@deepseek-ai/dsh-api-gateway","@deepseek-ai/dsh-client-connection"],"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=3de1a9338e24","rev":"3de1a9338e24","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=0f8db6e81d89","rev":"0f8db6e81d89","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=b24ab13fe1a1","rev":"b24ab13fe1a1","inject":[],"immediately":true},{"id":"@deepseek-ai/dsh-client-connection","url":"/plugins/@deepseek-ai/dsh-client-connection/client.js?rev=de2e0d637eaf","rev":"de2e0d637eaf","inject":[],"immediately":true},{"id":"@deepseek-ai/dsh-client-file-upload","url":"/plugins/@deepseek-ai/dsh-client-file-upload/client.js?rev=81e52051ff8c","rev":"81e52051ff8c","inject":["@deepseek-ai/dsh-api-remotes"],"immediately":true},{"id":"@deepseek-ai/dsh-api-remotes","url":"/plugins/@deepseek-ai/dsh-api-remotes/client.js?rev=041d4fc1500a","rev":"041d4fc1500a","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=52d407f01307","rev":"52d407f01307","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=7eb7011a1537","rev":"7eb7011a1537","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-shortcuts","url":"/plugins/@deepseek-ai/dsh-client-shortcuts/client.js?rev=508cb7b3981c","rev":"508cb7b3981c","inject":["@deepseek-ai/dsh-client-locale"]},{"id":"@deepseek-ai/dsh-client-ui-shortcuts","url":"/plugins/@deepseek-ai/dsh-client-ui-shortcuts/client.js?rev=3c6a75f5d8c1","rev":"3c6a75f5d8c1","inject":["@deepseek-ai/dsh-client-shortcuts","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-layout","@deepseek-ai/dsh-client-ui-settings"]},{"id":"@deepseek-ai/dsh-client-ui-layout","url":"/plugins/@deepseek-ai/dsh-client-ui-layout/client.js?rev=844a187dafea","rev":"844a187dafea","inject":["@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-renderer","@deepseek-ai/dsh-client-ui-session","@deepseek-ai/dsh-client-ui-theme","@deepseek-ai/dsh-client-shortcuts"]},{"id":"@deepseek-ai/dsh-client-ui-renderer","url":"/plugins/@deepseek-ai/dsh-client-ui-renderer/client.js?rev=3964c918ca1e","rev":"3964c918ca1e","immediately":true},{"id":"@deepseek-ai/dsh-client-ui-session","url":"/plugins/@deepseek-ai/dsh-client-ui-session/client.js?rev=0ccd321cff2d","rev":"0ccd321cff2d","inject":["@deepseek-ai/dsh-api-remotes","@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=3fc0cb56ec49","rev":"3fc0cb56ec49","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","@deepseek-ai/dsh-client-shortcuts"]},{"id":"@deepseek-ai/dsh-client-ui-sidebar-right","url":"/plugins/@deepseek-ai/dsh-client-ui-sidebar-right/client.js?rev=e29f827bcab0","rev":"e29f827bcab0","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","@deepseek-ai/dsh-client-shortcuts"]},{"id":"@deepseek-ai/dsh-client-ui-sidebar-documentpreview","url":"/plugins/@deepseek-ai/dsh-client-ui-sidebar-documentpreview/client.js?rev=f2a0c7113fd4","rev":"f2a0c7113fd4","inject":["@deepseek-ai/dsh-api-gateway","@deepseek-ai/dsh-api-workspace-files","@deepseek-ai/dsh-client-resources","@deepseek-ai/dsh-client-ui-sidebar-right","@deepseek-ai/dsh-client-ui-session","@deepseek-ai/dsh-api-remotes","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-settings"]},{"id":"@deepseek-ai/dsh-client-ui-sidebar-browser","url":"/plugins/@deepseek-ai/dsh-client-ui-sidebar-browser/client.js?rev=5bd8be8c5cb8","rev":"5bd8be8c5cb8","inject":["@deepseek-ai/dsh-api-workspace-controller","@deepseek-ai/dsh-client-ui-sidebar-right","@deepseek-ai/dsh-client-ui-session"]},{"id":"@deepseek-ai/dsh-client-ui-sidebar-files","url":"/plugins/@deepseek-ai/dsh-client-ui-sidebar-files/client.js?rev=6aaeb13f1f8e","rev":"6aaeb13f1f8e","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","@deepseek-ai/dsh-client-shortcuts"]},{"id":"@deepseek-ai/dsh-client-ui-settings","url":"/plugins/@deepseek-ai/dsh-client-ui-settings/client.js?rev=e297e4b42507","rev":"e297e4b42507","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=13f72e0041e0","rev":"13f72e0041e0","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","@deepseek-ai/dsh-client-shortcuts"]},{"id":"@deepseek-ai/dsh-client-ui-settings-models","url":"/plugins/@deepseek-ai/dsh-client-ui-settings-models/client.js?rev=9783aac771dc","rev":"9783aac771dc","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=8cc61a9b07a4","rev":"8cc61a9b07a4","inject":["@deepseek-ai/dsh-api-remotes","@deepseek-ai/dsh-client-ui-settings","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-agent-preset","@deepseek-ai/dsh-client-modules"]},{"id":"@deepseek-ai/dsh-client-ui-conversation","url":"/plugins/@deepseek-ai/dsh-client-ui-conversation/client.js?rev=90a7b1691809","rev":"90a7b1691809","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=fbab223d424c","rev":"fbab223d424c","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=4dae09da32ab","rev":"4dae09da32ab","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-input-trigger","@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-sidebar-right","@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=05785cc669d7","rev":"05785cc669d7","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=5b4ed3efee66","rev":"5b4ed3efee66","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-deliverables","url":"/plugins/@deepseek-ai/dsh-client-ui-deliverables/client.js?rev=5d61823ea6cf","rev":"5d61823ea6cf","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-sidebar-right","@deepseek-ai/dsh-client-ui-tool","@deepseek-ai/dsh-client-ui-settings"]},{"id":"@deepseek-ai/dsh-client-ui-workspace","url":"/plugins/@deepseek-ai/dsh-client-ui-workspace/client.js?rev=04f6394593ee","rev":"04f6394593ee","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-shortcuts","@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-workflow-run","url":"/plugins/@deepseek-ai/dsh-client-ui-workflow-run/client.js?rev=39006d898d28","rev":"39006d898d28","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","@deepseek-ai/dsh-client-ui-workspace"]},{"id":"@deepseek-ai/dsh-client-ui-input-trigger","url":"/plugins/@deepseek-ai/dsh-client-ui-input-trigger/client.js?rev=cf682bb89614","rev":"cf682bb89614","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=cab86e1f1d7d","rev":"cab86e1f1d7d","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=72b73382a0fa","rev":"72b73382a0fa","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","@deepseek-ai/dsh-client-ui-sidebar-right"]},{"id":"@deepseek-ai/dsh-client-ui-subagent","url":"/plugins/@deepseek-ai/dsh-client-ui-subagent/client.js?rev=237e6a66b8a3","rev":"237e6a66b8a3","inject":["@deepseek-ai/dsh-api-session-controller","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-resources","@deepseek-ai/dsh-client-ui-chat","@deepseek-ai/dsh-client-ui-conversation","@deepseek-ai/dsh-client-ui-primitives","@deepseek-ai/dsh-client-ui-sidebar-right","@deepseek-ai/dsh-client-ui-input-trigger","@deepseek-ai/dsh-client-ui-workspace"]},{"id":"@deepseek-ai/dsh-client-ui-reference","url":"/plugins/@deepseek-ai/dsh-client-ui-reference/client.js?rev=d7d9407809cb","rev":"d7d9407809cb","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","@deepseek-ai/dsh-client-ui-sidebar-right"]},{"id":"@deepseek-ai/dsh-client-ui-jobs","url":"/plugins/@deepseek-ai/dsh-client-ui-jobs/client.js?rev=0cb242bf4006","rev":"0cb242bf4006","inject":["@deepseek-ai/dsh-api-job-controller","@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=ad6ee1946bb5","rev":"ad6ee1946bb5","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=80918bdb27c0","rev":"80918bdb27c0","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=f72603327b21","rev":"f72603327b21","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-agent-preset","url":"/plugins/@deepseek-ai/dsh-client-ui-agent-preset/client.js?rev=da176ca824b8","rev":"da176ca824b8","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=6b95d5889f0f","rev":"6b95d5889f0f","inject":["@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-settings"]},{"id":"@deepseek-ai/dsh-client-ui-settings-agent-loop","url":"/plugins/@deepseek-ai/dsh-client-ui-settings-agent-loop/client.js?rev=4f5c8834f9ce","rev":"4f5c8834f9ce","inject":["@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-settings","dsh-edge-client-ui"]},{"id":"@deepseek-ai/dsh-client-ui-settings-web-search","url":"/plugins/@deepseek-ai/dsh-client-ui-settings-web-search/client.js?rev=b115be090a5c","rev":"b115be090a5c","inject":["@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-settings","dsh-edge-client-ui","@deepseek-ai/dsh-api-remotes"]},{"id":"@deepseek-ai/dsh-client-ui-plan","url":"/plugins/@deepseek-ai/dsh-client-ui-plan/client.js?rev=669d6dfdbb3e","rev":"669d6dfdbb3e","inject":["@deepseek-ai/dsh-api-remotes","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-conversation","@deepseek-ai/dsh-client-ui-sidebar-right","@deepseek-ai/dsh-client-ui-chat","@deepseek-ai/dsh-client-ui-user-questions","@deepseek-ai/dsh-client-resources","@deepseek-ai/dsh-api-session-controller"]},{"id":"@deepseek-ai/dsh-client-ui-user-questions","url":"/plugins/@deepseek-ai/dsh-client-ui-user-questions/client.js?rev=fe812105feed","rev":"fe812105feed","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","@deepseek-ai/dsh-client-ui-chat"]},{"id":"@deepseek-ai/dsh-client-ui-trajectory","url":"/plugins/@deepseek-ai/dsh-client-ui-trajectory/client.js?rev=80059e654a2e","rev":"80059e654a2e","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=8a4bd72bfd65","rev":"8a4bd72bfd65","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=e4a196ed2df5","rev":"e4a196ed2df5","inject":["@deepseek-ai/dsh-api-workspace-controller","@deepseek-ai/dsh-client-ui-settings","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-settings-plugins"]}],"batches":[{"phase":"bootstrap","url":"/plugins/@deepseek-ai/dsh-client-modules/client.js?rev=b24ab13fe1a1","rev":"b24ab13fe1a1","entries":["@deepseek-ai/dsh-client-modules"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-typert-registry/client.js?rev=b23455a17f0d","rev":"b23455a17f0d","entries":["@deepseek-ai/dsh-typert-registry"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-api-gateway/client.js?rev=f96cbbc29dcb","rev":"f96cbbc29dcb","entries":["@deepseek-ai/dsh-api-gateway"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-open-in-app/client.js?rev=565b82de7963","rev":"565b82de7963","entries":["@deepseek-ai/dsh-client-ui-open-in-app"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-api-session-controller/client.js?rev=1b22bf8a6d4a","rev":"1b22bf8a6d4a","entries":["@deepseek-ai/dsh-api-session-controller"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-api-job-controller/client.js?rev=7dcb6969b2d8","rev":"7dcb6969b2d8","entries":["@deepseek-ai/dsh-api-job-controller"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-api-workspace-files/client.js?rev=3de1a9338e24","rev":"3de1a9338e24","entries":["@deepseek-ai/dsh-api-workspace-files"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-api-workspace-controller/client.js?rev=0f8db6e81d89","rev":"0f8db6e81d89","entries":["@deepseek-ai/dsh-api-workspace-controller"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-connection/client.js?rev=de2e0d637eaf","rev":"de2e0d637eaf","entries":["@deepseek-ai/dsh-client-connection"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-file-upload/client.js?rev=81e52051ff8c","rev":"81e52051ff8c","entries":["@deepseek-ai/dsh-client-file-upload"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-api-remotes/client.js?rev=041d4fc1500a","rev":"041d4fc1500a","entries":["@deepseek-ai/dsh-api-remotes"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-theme/client.js?rev=52d407f01307","rev":"52d407f01307","entries":["@deepseek-ai/dsh-client-ui-theme"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-locale/client.js?rev=7eb7011a1537","rev":"7eb7011a1537","entries":["@deepseek-ai/dsh-client-locale"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-shortcuts/client.js?rev=508cb7b3981c","rev":"508cb7b3981c","entries":["@deepseek-ai/dsh-client-shortcuts"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-shortcuts/client.js?rev=3c6a75f5d8c1","rev":"3c6a75f5d8c1","entries":["@deepseek-ai/dsh-client-ui-shortcuts"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-layout/client.js?rev=844a187dafea","rev":"844a187dafea","entries":["@deepseek-ai/dsh-client-ui-layout"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-renderer/client.js?rev=3964c918ca1e","rev":"3964c918ca1e","entries":["@deepseek-ai/dsh-client-ui-renderer"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-session/client.js?rev=0ccd321cff2d","rev":"0ccd321cff2d","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=3fc0cb56ec49","rev":"3fc0cb56ec49","entries":["@deepseek-ai/dsh-client-ui-sidebar"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-sidebar-right/client.js?rev=e29f827bcab0","rev":"e29f827bcab0","entries":["@deepseek-ai/dsh-client-ui-sidebar-right"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-sidebar-documentpreview/client.js?rev=f2a0c7113fd4","rev":"f2a0c7113fd4","entries":["@deepseek-ai/dsh-client-ui-sidebar-documentpreview"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-sidebar-browser/client.js?rev=5bd8be8c5cb8","rev":"5bd8be8c5cb8","entries":["@deepseek-ai/dsh-client-ui-sidebar-browser"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-sidebar-files/client.js?rev=6aaeb13f1f8e","rev":"6aaeb13f1f8e","entries":["@deepseek-ai/dsh-client-ui-sidebar-files"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-settings/client.js?rev=e297e4b42507","rev":"e297e4b42507","entries":["@deepseek-ai/dsh-client-ui-settings"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-settings-general/client.js?rev=13f72e0041e0","rev":"13f72e0041e0","entries":["@deepseek-ai/dsh-client-ui-settings-general"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-settings-models/client.js?rev=9783aac771dc","rev":"9783aac771dc","entries":["@deepseek-ai/dsh-client-ui-settings-models"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-settings-plugin-inventory/client.js?rev=8cc61a9b07a4","rev":"8cc61a9b07a4","entries":["@deepseek-ai/dsh-client-ui-settings-plugin-inventory"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-conversation/client.js?rev=90a7b1691809","rev":"90a7b1691809","entries":["@deepseek-ai/dsh-client-ui-conversation"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-approval/client.js?rev=fbab223d424c","rev":"fbab223d424c","entries":["@deepseek-ai/dsh-client-ui-approval"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-chat/client.js?rev=4dae09da32ab","rev":"4dae09da32ab","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=05785cc669d7","rev":"05785cc669d7","entries":["@deepseek-ai/dsh-client-ui-attachment"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-tool/client.js?rev=5b4ed3efee66","rev":"5b4ed3efee66","entries":["@deepseek-ai/dsh-client-ui-tool"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-deliverables/client.js?rev=5d61823ea6cf","rev":"5d61823ea6cf","entries":["@deepseek-ai/dsh-client-ui-deliverables"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-workspace/client.js?rev=04f6394593ee","rev":"04f6394593ee","entries":["@deepseek-ai/dsh-client-ui-workspace"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-workflow-run/client.js?rev=39006d898d28","rev":"39006d898d28","entries":["@deepseek-ai/dsh-client-ui-workflow-run"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-input-trigger/client.js?rev=cf682bb89614","rev":"cf682bb89614","entries":["@deepseek-ai/dsh-client-ui-input-trigger"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-commands/client.js?rev=cab86e1f1d7d","rev":"cab86e1f1d7d","entries":["@deepseek-ai/dsh-client-ui-commands"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-skill/client.js?rev=72b73382a0fa","rev":"72b73382a0fa","entries":["@deepseek-ai/dsh-client-ui-skill"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-subagent/client.js?rev=237e6a66b8a3","rev":"237e6a66b8a3","entries":["@deepseek-ai/dsh-client-ui-subagent"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-reference/client.js?rev=d7d9407809cb","rev":"d7d9407809cb","entries":["@deepseek-ai/dsh-client-ui-reference"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-jobs/client.js?rev=0cb242bf4006","rev":"0cb242bf4006","entries":["@deepseek-ai/dsh-client-ui-jobs"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-goal/client.js?rev=ad6ee1946bb5","rev":"ad6ee1946bb5","entries":["@deepseek-ai/dsh-client-ui-goal"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-message-feedback/client.js?rev=80918bdb27c0","rev":"80918bdb27c0","entries":["@deepseek-ai/dsh-client-ui-message-feedback"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-model-selection/client.js?rev=f72603327b21","rev":"f72603327b21","entries":["@deepseek-ai/dsh-client-ui-model-selection"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-agent-preset/client.js?rev=da176ca824b8","rev":"da176ca824b8","entries":["@deepseek-ai/dsh-client-ui-agent-preset"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-settings-plugins/client.js?rev=6b95d5889f0f","rev":"6b95d5889f0f","entries":["@deepseek-ai/dsh-client-ui-settings-plugins"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-settings-agent-loop/client.js?rev=4f5c8834f9ce","rev":"4f5c8834f9ce","entries":["@deepseek-ai/dsh-client-ui-settings-agent-loop"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-settings-web-search/client.js?rev=b115be090a5c","rev":"b115be090a5c","entries":["@deepseek-ai/dsh-client-ui-settings-web-search"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-plan/client.js?rev=669d6dfdbb3e","rev":"669d6dfdbb3e","entries":["@deepseek-ai/dsh-client-ui-plan"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-user-questions/client.js?rev=fe812105feed","rev":"fe812105feed","entries":["@deepseek-ai/dsh-client-ui-user-questions"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-trajectory/client.js?rev=80059e654a2e","rev":"80059e654a2e","entries":["@deepseek-ai/dsh-client-ui-trajectory"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-directory-picker-browse/client.js?rev=8a4bd72bfd65","rev":"8a4bd72bfd65","entries":["@deepseek-ai/dsh-client-ui-directory-picker-browse"]},{"phase":"application","url":"/plugins/dsh-edge-client-ui/client.js?rev=e4a196ed2df5","rev":"e4a196ed2df5","entries":["dsh-edge-client-ui"]}]}</script>
44
+ })()</script><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-typert-registry/client.js?rev=b23455a17f0d"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-api-gateway/client.js?rev=f96cbbc29dcb"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-open-in-app/client.js?rev=565b82de7963"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-api-session-controller/client.js?rev=1b22bf8a6d4a"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-api-job-controller/client.js?rev=7dcb6969b2d8"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-api-workspace-files/client.js?rev=3de1a9338e24"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-api-workspace-controller/client.js?rev=0f8db6e81d89"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-connection/client.js?rev=de2e0d637eaf"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-file-upload/client.js?rev=81e52051ff8c"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-api-remotes/client.js?rev=041d4fc1500a"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-theme/client.js?rev=52d407f01307"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-locale/client.js?rev=7eb7011a1537"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-shortcuts/client.js?rev=508cb7b3981c"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-shortcuts/client.js?rev=3c6a75f5d8c1"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-layout/client.js?rev=844a187dafea"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-renderer/client.js?rev=3964c918ca1e"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-session/client.js?rev=0ccd321cff2d"><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=3fc0cb56ec49"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-sidebar-right/client.js?rev=e29f827bcab0"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-sidebar-documentpreview/client.js?rev=f2a0c7113fd4"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-sidebar-browser/client.js?rev=5bd8be8c5cb8"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-sidebar-files/client.js?rev=6aaeb13f1f8e"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-settings/client.js?rev=e297e4b42507"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-settings-general/client.js?rev=13f72e0041e0"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-settings-models/client.js?rev=9783aac771dc"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-settings-plugin-inventory/client.js?rev=8cc61a9b07a4"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-conversation/client.js?rev=90a7b1691809"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-approval/client.js?rev=fbab223d424c"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-chat/client.js?rev=4dae09da32ab"><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=05785cc669d7"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-tool/client.js?rev=5b4ed3efee66"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-deliverables/client.js?rev=5d61823ea6cf"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-workspace/client.js?rev=04f6394593ee"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-workflow-run/client.js?rev=39006d898d28"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-input-trigger/client.js?rev=cf682bb89614"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-commands/client.js?rev=cab86e1f1d7d"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-skill/client.js?rev=72b73382a0fa"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-subagent/client.js?rev=237e6a66b8a3"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-reference/client.js?rev=d7d9407809cb"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-jobs/client.js?rev=0cb242bf4006"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-goal/client.js?rev=ad6ee1946bb5"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-message-feedback/client.js?rev=80918bdb27c0"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-model-selection/client.js?rev=f72603327b21"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-agent-preset/client.js?rev=da176ca824b8"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-settings-plugins/client.js?rev=6b95d5889f0f"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-settings-agent-loop/client.js?rev=4f5c8834f9ce"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-settings-subagent/client.js?rev=28448d268d34"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-settings-web-search/client.js?rev=b115be090a5c"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-plan/client.js?rev=669d6dfdbb3e"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-user-questions/client.js?rev=fe812105feed"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-trajectory/client.js?rev=80059e654a2e"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-directory-picker-browse/client.js?rev=8a4bd72bfd65"><link rel="preload" as="script" href="/plugins/dsh-edge-client-ui/client.js?rev=e4a196ed2df5"><script src="/plugins/@deepseek-ai/dsh-client-modules/client.js?rev=b24ab13fe1a1"></script><script>globalThis["__DSH_BOOT__"] = {"rev":"42cc20fcb496","entries":[{"id":"@deepseek-ai/dsh-typert-registry","url":"/plugins/@deepseek-ai/dsh-typert-registry/client.js?rev=b23455a17f0d","rev":"b23455a17f0d","inject":[],"immediately":true},{"id":"@deepseek-ai/dsh-api-gateway","url":"/plugins/@deepseek-ai/dsh-api-gateway/client.js?rev=f96cbbc29dcb","rev":"f96cbbc29dcb","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=565b82de7963","rev":"565b82de7963","inject":["@deepseek-ai/dsh-api-gateway","@deepseek-ai/dsh-api-remotes","@deepseek-ai/dsh-api-session-controller","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-shortcuts","@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-documentpreview"]},{"id":"@deepseek-ai/dsh-api-session-controller","url":"/plugins/@deepseek-ai/dsh-api-session-controller/client.js?rev=1b22bf8a6d4a","rev":"1b22bf8a6d4a","inject":["@deepseek-ai/dsh-api-gateway","@deepseek-ai/dsh-client-file-upload"],"external":["@deepseek-ai/dsh-api-gateway/client"]},{"id":"@deepseek-ai/dsh-api-job-controller","url":"/plugins/@deepseek-ai/dsh-api-job-controller/client.js?rev=7dcb6969b2d8","rev":"7dcb6969b2d8","inject":["@deepseek-ai/dsh-api-gateway","@deepseek-ai/dsh-client-connection"],"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=3de1a9338e24","rev":"3de1a9338e24","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=0f8db6e81d89","rev":"0f8db6e81d89","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=b24ab13fe1a1","rev":"b24ab13fe1a1","inject":[],"immediately":true},{"id":"@deepseek-ai/dsh-client-connection","url":"/plugins/@deepseek-ai/dsh-client-connection/client.js?rev=de2e0d637eaf","rev":"de2e0d637eaf","inject":[],"immediately":true},{"id":"@deepseek-ai/dsh-client-file-upload","url":"/plugins/@deepseek-ai/dsh-client-file-upload/client.js?rev=81e52051ff8c","rev":"81e52051ff8c","inject":["@deepseek-ai/dsh-api-remotes"],"immediately":true},{"id":"@deepseek-ai/dsh-api-remotes","url":"/plugins/@deepseek-ai/dsh-api-remotes/client.js?rev=041d4fc1500a","rev":"041d4fc1500a","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=52d407f01307","rev":"52d407f01307","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=7eb7011a1537","rev":"7eb7011a1537","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-shortcuts","url":"/plugins/@deepseek-ai/dsh-client-shortcuts/client.js?rev=508cb7b3981c","rev":"508cb7b3981c","inject":["@deepseek-ai/dsh-client-locale"]},{"id":"@deepseek-ai/dsh-client-ui-shortcuts","url":"/plugins/@deepseek-ai/dsh-client-ui-shortcuts/client.js?rev=3c6a75f5d8c1","rev":"3c6a75f5d8c1","inject":["@deepseek-ai/dsh-client-shortcuts","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-layout","@deepseek-ai/dsh-client-ui-settings"]},{"id":"@deepseek-ai/dsh-client-ui-layout","url":"/plugins/@deepseek-ai/dsh-client-ui-layout/client.js?rev=844a187dafea","rev":"844a187dafea","inject":["@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-renderer","@deepseek-ai/dsh-client-ui-session","@deepseek-ai/dsh-client-ui-theme","@deepseek-ai/dsh-client-shortcuts"]},{"id":"@deepseek-ai/dsh-client-ui-renderer","url":"/plugins/@deepseek-ai/dsh-client-ui-renderer/client.js?rev=3964c918ca1e","rev":"3964c918ca1e","immediately":true},{"id":"@deepseek-ai/dsh-client-ui-session","url":"/plugins/@deepseek-ai/dsh-client-ui-session/client.js?rev=0ccd321cff2d","rev":"0ccd321cff2d","inject":["@deepseek-ai/dsh-api-remotes","@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=3fc0cb56ec49","rev":"3fc0cb56ec49","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","@deepseek-ai/dsh-client-shortcuts"]},{"id":"@deepseek-ai/dsh-client-ui-sidebar-right","url":"/plugins/@deepseek-ai/dsh-client-ui-sidebar-right/client.js?rev=e29f827bcab0","rev":"e29f827bcab0","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","@deepseek-ai/dsh-client-shortcuts"]},{"id":"@deepseek-ai/dsh-client-ui-sidebar-documentpreview","url":"/plugins/@deepseek-ai/dsh-client-ui-sidebar-documentpreview/client.js?rev=f2a0c7113fd4","rev":"f2a0c7113fd4","inject":["@deepseek-ai/dsh-api-gateway","@deepseek-ai/dsh-api-workspace-files","@deepseek-ai/dsh-client-resources","@deepseek-ai/dsh-client-ui-sidebar-right","@deepseek-ai/dsh-client-ui-session","@deepseek-ai/dsh-api-remotes","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-settings"]},{"id":"@deepseek-ai/dsh-client-ui-sidebar-browser","url":"/plugins/@deepseek-ai/dsh-client-ui-sidebar-browser/client.js?rev=5bd8be8c5cb8","rev":"5bd8be8c5cb8","inject":["@deepseek-ai/dsh-api-workspace-controller","@deepseek-ai/dsh-client-ui-sidebar-right","@deepseek-ai/dsh-client-ui-session"]},{"id":"@deepseek-ai/dsh-client-ui-sidebar-files","url":"/plugins/@deepseek-ai/dsh-client-ui-sidebar-files/client.js?rev=6aaeb13f1f8e","rev":"6aaeb13f1f8e","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","@deepseek-ai/dsh-client-shortcuts"]},{"id":"@deepseek-ai/dsh-client-ui-settings","url":"/plugins/@deepseek-ai/dsh-client-ui-settings/client.js?rev=e297e4b42507","rev":"e297e4b42507","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=13f72e0041e0","rev":"13f72e0041e0","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","@deepseek-ai/dsh-client-shortcuts"]},{"id":"@deepseek-ai/dsh-client-ui-settings-models","url":"/plugins/@deepseek-ai/dsh-client-ui-settings-models/client.js?rev=9783aac771dc","rev":"9783aac771dc","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=8cc61a9b07a4","rev":"8cc61a9b07a4","inject":["@deepseek-ai/dsh-api-remotes","@deepseek-ai/dsh-client-ui-settings","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-agent-preset","@deepseek-ai/dsh-client-modules"]},{"id":"@deepseek-ai/dsh-client-ui-conversation","url":"/plugins/@deepseek-ai/dsh-client-ui-conversation/client.js?rev=90a7b1691809","rev":"90a7b1691809","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=fbab223d424c","rev":"fbab223d424c","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=4dae09da32ab","rev":"4dae09da32ab","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-input-trigger","@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-sidebar-right","@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=05785cc669d7","rev":"05785cc669d7","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=5b4ed3efee66","rev":"5b4ed3efee66","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-deliverables","url":"/plugins/@deepseek-ai/dsh-client-ui-deliverables/client.js?rev=5d61823ea6cf","rev":"5d61823ea6cf","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-sidebar-right","@deepseek-ai/dsh-client-ui-tool","@deepseek-ai/dsh-client-ui-settings"]},{"id":"@deepseek-ai/dsh-client-ui-workspace","url":"/plugins/@deepseek-ai/dsh-client-ui-workspace/client.js?rev=04f6394593ee","rev":"04f6394593ee","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-shortcuts","@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-workflow-run","url":"/plugins/@deepseek-ai/dsh-client-ui-workflow-run/client.js?rev=39006d898d28","rev":"39006d898d28","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","@deepseek-ai/dsh-client-ui-workspace"]},{"id":"@deepseek-ai/dsh-client-ui-input-trigger","url":"/plugins/@deepseek-ai/dsh-client-ui-input-trigger/client.js?rev=cf682bb89614","rev":"cf682bb89614","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=cab86e1f1d7d","rev":"cab86e1f1d7d","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=72b73382a0fa","rev":"72b73382a0fa","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","@deepseek-ai/dsh-client-ui-sidebar-right"]},{"id":"@deepseek-ai/dsh-client-ui-subagent","url":"/plugins/@deepseek-ai/dsh-client-ui-subagent/client.js?rev=237e6a66b8a3","rev":"237e6a66b8a3","inject":["@deepseek-ai/dsh-api-session-controller","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-resources","@deepseek-ai/dsh-client-ui-chat","@deepseek-ai/dsh-client-ui-conversation","@deepseek-ai/dsh-client-ui-primitives","@deepseek-ai/dsh-client-ui-sidebar-right","@deepseek-ai/dsh-client-ui-input-trigger","@deepseek-ai/dsh-client-ui-workspace"]},{"id":"@deepseek-ai/dsh-client-ui-reference","url":"/plugins/@deepseek-ai/dsh-client-ui-reference/client.js?rev=d7d9407809cb","rev":"d7d9407809cb","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","@deepseek-ai/dsh-client-ui-sidebar-right"]},{"id":"@deepseek-ai/dsh-client-ui-jobs","url":"/plugins/@deepseek-ai/dsh-client-ui-jobs/client.js?rev=0cb242bf4006","rev":"0cb242bf4006","inject":["@deepseek-ai/dsh-api-job-controller","@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=ad6ee1946bb5","rev":"ad6ee1946bb5","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=80918bdb27c0","rev":"80918bdb27c0","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=f72603327b21","rev":"f72603327b21","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-agent-preset","url":"/plugins/@deepseek-ai/dsh-client-ui-agent-preset/client.js?rev=da176ca824b8","rev":"da176ca824b8","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=6b95d5889f0f","rev":"6b95d5889f0f","inject":["@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-settings"]},{"id":"@deepseek-ai/dsh-client-ui-settings-agent-loop","url":"/plugins/@deepseek-ai/dsh-client-ui-settings-agent-loop/client.js?rev=4f5c8834f9ce","rev":"4f5c8834f9ce","inject":["@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-settings","dsh-edge-client-ui"]},{"id":"@deepseek-ai/dsh-client-ui-settings-subagent","url":"/plugins/@deepseek-ai/dsh-client-ui-settings-subagent/client.js?rev=28448d268d34","rev":"28448d268d34","inject":["@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-settings","dsh-edge-client-ui","@deepseek-ai/dsh-api-remotes"]},{"id":"@deepseek-ai/dsh-client-ui-settings-web-search","url":"/plugins/@deepseek-ai/dsh-client-ui-settings-web-search/client.js?rev=b115be090a5c","rev":"b115be090a5c","inject":["@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-settings","dsh-edge-client-ui","@deepseek-ai/dsh-api-remotes"]},{"id":"@deepseek-ai/dsh-client-ui-plan","url":"/plugins/@deepseek-ai/dsh-client-ui-plan/client.js?rev=669d6dfdbb3e","rev":"669d6dfdbb3e","inject":["@deepseek-ai/dsh-api-remotes","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-conversation","@deepseek-ai/dsh-client-ui-sidebar-right","@deepseek-ai/dsh-client-ui-chat","@deepseek-ai/dsh-client-ui-user-questions","@deepseek-ai/dsh-client-resources","@deepseek-ai/dsh-api-session-controller"]},{"id":"@deepseek-ai/dsh-client-ui-user-questions","url":"/plugins/@deepseek-ai/dsh-client-ui-user-questions/client.js?rev=fe812105feed","rev":"fe812105feed","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","@deepseek-ai/dsh-client-ui-chat"]},{"id":"@deepseek-ai/dsh-client-ui-trajectory","url":"/plugins/@deepseek-ai/dsh-client-ui-trajectory/client.js?rev=80059e654a2e","rev":"80059e654a2e","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=8a4bd72bfd65","rev":"8a4bd72bfd65","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=e4a196ed2df5","rev":"e4a196ed2df5","inject":["@deepseek-ai/dsh-api-workspace-controller","@deepseek-ai/dsh-client-ui-settings","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-settings-plugins"]}],"batches":[{"phase":"bootstrap","url":"/plugins/@deepseek-ai/dsh-client-modules/client.js?rev=b24ab13fe1a1","rev":"b24ab13fe1a1","entries":["@deepseek-ai/dsh-client-modules"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-typert-registry/client.js?rev=b23455a17f0d","rev":"b23455a17f0d","entries":["@deepseek-ai/dsh-typert-registry"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-api-gateway/client.js?rev=f96cbbc29dcb","rev":"f96cbbc29dcb","entries":["@deepseek-ai/dsh-api-gateway"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-open-in-app/client.js?rev=565b82de7963","rev":"565b82de7963","entries":["@deepseek-ai/dsh-client-ui-open-in-app"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-api-session-controller/client.js?rev=1b22bf8a6d4a","rev":"1b22bf8a6d4a","entries":["@deepseek-ai/dsh-api-session-controller"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-api-job-controller/client.js?rev=7dcb6969b2d8","rev":"7dcb6969b2d8","entries":["@deepseek-ai/dsh-api-job-controller"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-api-workspace-files/client.js?rev=3de1a9338e24","rev":"3de1a9338e24","entries":["@deepseek-ai/dsh-api-workspace-files"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-api-workspace-controller/client.js?rev=0f8db6e81d89","rev":"0f8db6e81d89","entries":["@deepseek-ai/dsh-api-workspace-controller"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-connection/client.js?rev=de2e0d637eaf","rev":"de2e0d637eaf","entries":["@deepseek-ai/dsh-client-connection"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-file-upload/client.js?rev=81e52051ff8c","rev":"81e52051ff8c","entries":["@deepseek-ai/dsh-client-file-upload"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-api-remotes/client.js?rev=041d4fc1500a","rev":"041d4fc1500a","entries":["@deepseek-ai/dsh-api-remotes"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-theme/client.js?rev=52d407f01307","rev":"52d407f01307","entries":["@deepseek-ai/dsh-client-ui-theme"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-locale/client.js?rev=7eb7011a1537","rev":"7eb7011a1537","entries":["@deepseek-ai/dsh-client-locale"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-shortcuts/client.js?rev=508cb7b3981c","rev":"508cb7b3981c","entries":["@deepseek-ai/dsh-client-shortcuts"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-shortcuts/client.js?rev=3c6a75f5d8c1","rev":"3c6a75f5d8c1","entries":["@deepseek-ai/dsh-client-ui-shortcuts"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-layout/client.js?rev=844a187dafea","rev":"844a187dafea","entries":["@deepseek-ai/dsh-client-ui-layout"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-renderer/client.js?rev=3964c918ca1e","rev":"3964c918ca1e","entries":["@deepseek-ai/dsh-client-ui-renderer"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-session/client.js?rev=0ccd321cff2d","rev":"0ccd321cff2d","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=3fc0cb56ec49","rev":"3fc0cb56ec49","entries":["@deepseek-ai/dsh-client-ui-sidebar"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-sidebar-right/client.js?rev=e29f827bcab0","rev":"e29f827bcab0","entries":["@deepseek-ai/dsh-client-ui-sidebar-right"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-sidebar-documentpreview/client.js?rev=f2a0c7113fd4","rev":"f2a0c7113fd4","entries":["@deepseek-ai/dsh-client-ui-sidebar-documentpreview"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-sidebar-browser/client.js?rev=5bd8be8c5cb8","rev":"5bd8be8c5cb8","entries":["@deepseek-ai/dsh-client-ui-sidebar-browser"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-sidebar-files/client.js?rev=6aaeb13f1f8e","rev":"6aaeb13f1f8e","entries":["@deepseek-ai/dsh-client-ui-sidebar-files"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-settings/client.js?rev=e297e4b42507","rev":"e297e4b42507","entries":["@deepseek-ai/dsh-client-ui-settings"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-settings-general/client.js?rev=13f72e0041e0","rev":"13f72e0041e0","entries":["@deepseek-ai/dsh-client-ui-settings-general"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-settings-models/client.js?rev=9783aac771dc","rev":"9783aac771dc","entries":["@deepseek-ai/dsh-client-ui-settings-models"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-settings-plugin-inventory/client.js?rev=8cc61a9b07a4","rev":"8cc61a9b07a4","entries":["@deepseek-ai/dsh-client-ui-settings-plugin-inventory"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-conversation/client.js?rev=90a7b1691809","rev":"90a7b1691809","entries":["@deepseek-ai/dsh-client-ui-conversation"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-approval/client.js?rev=fbab223d424c","rev":"fbab223d424c","entries":["@deepseek-ai/dsh-client-ui-approval"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-chat/client.js?rev=4dae09da32ab","rev":"4dae09da32ab","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=05785cc669d7","rev":"05785cc669d7","entries":["@deepseek-ai/dsh-client-ui-attachment"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-tool/client.js?rev=5b4ed3efee66","rev":"5b4ed3efee66","entries":["@deepseek-ai/dsh-client-ui-tool"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-deliverables/client.js?rev=5d61823ea6cf","rev":"5d61823ea6cf","entries":["@deepseek-ai/dsh-client-ui-deliverables"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-workspace/client.js?rev=04f6394593ee","rev":"04f6394593ee","entries":["@deepseek-ai/dsh-client-ui-workspace"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-workflow-run/client.js?rev=39006d898d28","rev":"39006d898d28","entries":["@deepseek-ai/dsh-client-ui-workflow-run"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-input-trigger/client.js?rev=cf682bb89614","rev":"cf682bb89614","entries":["@deepseek-ai/dsh-client-ui-input-trigger"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-commands/client.js?rev=cab86e1f1d7d","rev":"cab86e1f1d7d","entries":["@deepseek-ai/dsh-client-ui-commands"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-skill/client.js?rev=72b73382a0fa","rev":"72b73382a0fa","entries":["@deepseek-ai/dsh-client-ui-skill"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-subagent/client.js?rev=237e6a66b8a3","rev":"237e6a66b8a3","entries":["@deepseek-ai/dsh-client-ui-subagent"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-reference/client.js?rev=d7d9407809cb","rev":"d7d9407809cb","entries":["@deepseek-ai/dsh-client-ui-reference"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-jobs/client.js?rev=0cb242bf4006","rev":"0cb242bf4006","entries":["@deepseek-ai/dsh-client-ui-jobs"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-goal/client.js?rev=ad6ee1946bb5","rev":"ad6ee1946bb5","entries":["@deepseek-ai/dsh-client-ui-goal"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-message-feedback/client.js?rev=80918bdb27c0","rev":"80918bdb27c0","entries":["@deepseek-ai/dsh-client-ui-message-feedback"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-model-selection/client.js?rev=f72603327b21","rev":"f72603327b21","entries":["@deepseek-ai/dsh-client-ui-model-selection"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-agent-preset/client.js?rev=da176ca824b8","rev":"da176ca824b8","entries":["@deepseek-ai/dsh-client-ui-agent-preset"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-settings-plugins/client.js?rev=6b95d5889f0f","rev":"6b95d5889f0f","entries":["@deepseek-ai/dsh-client-ui-settings-plugins"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-settings-agent-loop/client.js?rev=4f5c8834f9ce","rev":"4f5c8834f9ce","entries":["@deepseek-ai/dsh-client-ui-settings-agent-loop"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-settings-subagent/client.js?rev=28448d268d34","rev":"28448d268d34","entries":["@deepseek-ai/dsh-client-ui-settings-subagent"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-settings-web-search/client.js?rev=b115be090a5c","rev":"b115be090a5c","entries":["@deepseek-ai/dsh-client-ui-settings-web-search"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-plan/client.js?rev=669d6dfdbb3e","rev":"669d6dfdbb3e","entries":["@deepseek-ai/dsh-client-ui-plan"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-user-questions/client.js?rev=fe812105feed","rev":"fe812105feed","entries":["@deepseek-ai/dsh-client-ui-user-questions"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-trajectory/client.js?rev=80059e654a2e","rev":"80059e654a2e","entries":["@deepseek-ai/dsh-client-ui-trajectory"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-directory-picker-browse/client.js?rev=8a4bd72bfd65","rev":"8a4bd72bfd65","entries":["@deepseek-ai/dsh-client-ui-directory-picker-browse"]},{"phase":"application","url":"/plugins/dsh-edge-client-ui/client.js?rev=e4a196ed2df5","rev":"e4a196ed2df5","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" />