DeepSeek App
August 16, 2026 · View on GitHub
Every DeepSeek Harness Web client package is mapped to a desktop surface. Do not add Grok-only features (official xAI account, Imagine, Remote IM).
wired = surface + RPC exist. Not the same as official Web parity.
See HANDOFF.md §7 for gaps.
| DSH package | Desktop surface | Status |
|---|---|---|
ui-layout | Three-column workbench + resize | wired |
ui-sidebar | Workspace / session nav, archive, search, 项目折叠(记忆)+ 折叠全部, 新建会话为草稿页(同工作区仅一个待创建;发送时复用 blank), 项目记忆回填输入框, 拖文件夹进侧栏添加项目, 多选(组全选/Shift 范围/批量归档;删除置灰=引擎无 RPC), 项目行悬停新建/菜单, 置顶/未读(本地语义), 右键菜单(选择/置顶/重命名/分叉/复制会话 ID/归档/导出/诊断包) | wired (2026-08-14) |
ui-workspace | Add / rename / delete / reorder workspace | wired |
ui-conversation | Chat, composer, empty/hero, stats, queue;新建/空白会话:输入框垂直居中 + Web 同款鱼 logo /「探索未至之境」/ 预览版徽章;思考走 Grok chrome(流式展开,完成后收成「思考了 Xs」);思考+工具在本轮结束后合并为可折叠「工作了 Xs」组;最后一条用户气泡可编辑并重发(session.fork({ atSeq }) 切到该轮之前再 session.prompt;首条用户则新建会话);对话吸底 + 流式跟随(useStickToBottom:短会话贴底、流式长高跟底、上滚脱锁、发送/切会话强制回底、「回到最新」按钮);右侧消息节点跳转条(用户/助手各一格,悬停预览,上/下步进,滚动高亮当前);执行中合并 token 帧 + 侧栏/输入框不跟流式重绘(避免 Win11 整窗卡住点不了) | wired (2026-08-16) |
ui-tool | Grok 时间线工具行(分组、$ 命令、可折叠输出);与思考合并进同一工作组 | wired (2026-08-14) |
ui-plan | 顶栏 PlanStatusBar(进度/当前步/可展开步骤列表)+ composer 计划 chip + /plan;对话内 todo 用 Grok 计划卡 | wired (2026-08-14) |
ui-goal | 顶栏 goal strip(关闭目标);不再把 Goal dock 放在输入框旁 | wired (2026-08-14) |
ui-jobs | Session header job list | wired |
ui-commands | Slash / command palette + execute | wired |
ui-skill | Slash skill list (invoke via session.prompt);草稿页 / 未选项目时用通用工作区 blank session 拉 skill.list | wired (2026-08-14) |
ui-input-trigger | Composer + / / 面板(命令+技能+kind 过滤+搜索+Grok 式命令图标;方向键滚动跟随)与 @ 工作区文件面板;skill / @ 文件在输入框渲染为整段芯片(Backspace 整颗删除),发送后用户气泡同样解析为标签,可与正文穿插 | wired (2026-08-14) |
ui-model-selection | Session model + effort picker(Grok 两段式 cmm:根层「模型 / 思考强度」行,子层分组搜索或 adapter efforts);未选项目时用 llm.models + 通用工作区 cwd,发送时 session.selectModel;模型与思考强度随会话保留,目录刷新不会打回默认 / DeepSeek | wired (2026-08-15) |
ui-permission-presets | Composer 底栏可选权限审核(引擎 permissions 投影:工作区写入=越权需批准;完全访问=不再弹审批;Full access 危险确认;草稿页记住选择,建会话后 /permission) | wired |
ui-user-questions | Ask-user modal (/api/respond) | wired |
ui-agent-preset | Preset list / select / copy / remove / open | wired |
ui-attachment | 拖文件/文件夹到聊天区附加(侧栏=加项目、主区=附件条;拦截 Electron 弹窗);+ 选文件;图片粘贴/预览;文件走 @path 发给 Agent(空格路径加引号);发送后用户气泡上方用 Grok 附件卡片展示,编辑器 @ 引用标签仍在气泡内穿插。DeepSeek 官方接口不收像素,只发路径 | wired (2026-08-15) |
ui-subagent | Child list, history, prompt, interrupt | wired |
ui-trajectory | Details 轨迹:与 web 对齐的事件账本(用户/助手/思考/工具/计划/压缩;工具行展示参数 + 结果预览,点击展开全文),样式沿用 plane-timeline 卡片;会话运行后顶栏环境按钮左侧出现轨迹 icon,点击打开侧栏轨迹标签 | wired (2026-08-14) |
ui-deliverables | Turn-tail produced files | wired |
ui-workflow-run | Nested workflow run disclosure | wired |
ui-message-feedback | Assistant feedback | wired |
ui-theme | Dark / light (data-theme);设置外观页:主题分段 + 按时切换 + 配色皮肤 + 背景图 | wired |
ui-settings | 全页设置壳(grok SettingsPage 布局:左导航 rail + 搜索 + personal/system 分组 + 内容列;替代原弹窗) | wired (2026-08-14) |
ui-settings-general | Locale, theme, busy-enter, open config | wired |
ui-settings-models | DeepSeek + catalog + custom providers | wired |
ui-settings-plugins | Host-plane plugin cards | wired |
ui-settings-plugin-inventory | Loader inventory tab | wired |
ui-settings-archived | 已归档会话列表(只读;引擎无 unarchive RPC,提供导出) | wired (2026-08-14) |
Desktop-only: settings-ia | Grok 设置 IA:catalog 搜索 + 页内 tab;服务商/插件/预设/Cordis/引擎连接分别落在账号/扩展/运行时,不再作为一级导航 | wired |
Desktop-only: settings-runtime | 运行时页:引擎状态 / 端口 / 重启(端口不再出现在顶栏) | wired |
Desktop-only: settings-network | 运行时 → 网络:系统/手动/直连代理 + 生效代理展示 + Grok/DeepSeek 端点探测;注入引擎 HTTP_PROXY + NODE_USE_ENV_PROXY | wired |
ui-directory-picker-* | Native + browse workspace picker | wired |
Desktop-only: open-location | Grok 式「打开位置」:访达 / 系统默认 / 本机已装编辑器(VS Code、Zed、Cursor…)+ 图标;面板按内容撑开,不预设宽高 | wired |
Desktop-only: general-workspace | 未选项目时的公共 cwd:{userData}/workspaces/general(对齐 Grok workspaces/general);不出现在侧栏项目里,会话进「其他会话」 | wired |
Desktop-only: env-info | 顶栏环境面板:下拉显示变更 / 本地 / 分支 / 推送 / PR;「本地」打开文件工作台;变更跳转等 review tab(resources-git)落地;会话运行后左侧出现轨迹 icon,打开侧栏轨迹标签 | wired |
locale | zh / zh-TW / en;默认跟随系统(system),设置可锁定;首次运行按 OS 语言 | wired |
| Compaction | Collapsed checkpoint row | wired |
| Session fork / rename / export | Session menu | wired |
Desktop-only: user-edit-resend | Grok 式用户气泡编辑:铅笔按钮 + 行内表单(取消 / 保存并重发)。DSH 无 rewind,重发走 fork@上一轮用户 seq 或 mint 新会话,再 prompt | wired |
| Session queue edit/remove/steer | Queue dock | wired |
| Session search | Sidebar search | wired |
| Onboarding | Welcome + DeepSeek key | wired |
Desktop-only: resources | Details 资源 tab:工作区文件树 + 预览/编辑 + 多文件 tab + 右键(复制路径/显示/打开/引用到会话),底层 window.desktop.fs.*(主进程围栏 + 权限门控) | wired (P-R1) |
Desktop-only: resources-git | 变更 tab:git status / diff / apply / restore(grok ReviewTab 逻辑,主进程 git) | planned (P-R3) |
Desktop-only: resources-terminal | 终端 tab:xterm + node-pty(grok TerminalTab,window.desktop.terminal.* → utility 进程 ctx.subprocess.spawnTerminal) | wired (P-T1) |
Desktop-only: side-workbench | Grok 右侧资源面板完整复刻:共享标签条(SideTabBar:+ 面板选择器 / 展开 / 关闭侧栏 / 右键关闭菜单 / 中键关闭 / 溢出 fade)+ 空态 SidePicker;可打开类型 = 文件 / 浏览器 / 终端 / 技能 / 轨迹(lib/sideWorkbench.ts 纯模型,轨迹为 DeepSeek App 新增 picker kind);浏览器/终端跨标签保活(persist-host);文件脏标记 + 批量关闭确认;侧栏常挂载(标签与文件缓冲在收起后保留) | wired (G4) |
Desktop-only: skins | 皮肤系统:6 皮肤(rose/gothic/mist/ocean/ember)× 暗/亮,data-skin token 重映射(grok themeSkin + skins.css 照搬) | wired (P-S1) |
Desktop-only: wallpaper | 壁纸系统:图/gif/video 上传 → 压缩 → IndexedDB 持久化 + 裁剪(聚焦 pan/zoom)+ 视频裁剪(in/out)+ scrim 滑杆(grok Wallpaper* 照搬) | wired (P-S2) |
Desktop-only: shortcuts | 快捷键系统 + 可视化重映射 UI(grok shortcuts + shortcutRemap + ShortcutsSettingsPanel) | wired (P-S3) |
Desktop-only: notify-prefs | 通知免打扰时段 + 音效(grok notifyQuietHours/notifySound/desktopNotify) | wired (P-S3) |
Desktop-only: zen-mode | 禅模式(隐藏 chrome 专注对话) | wired (P-S3) |
Desktop-only: chat-find | 对话内搜索定位 ⌘F(grok ChatFindBar) | wired (P-S3) |
Desktop-only: message-node-rail | 会话右侧快捷跳转指示条(grok MessageNodeRail):用户/助手节点 ticks、悬停预览、prev/next、滚动同步高亮 | wired (2026-08-14) |
Desktop-only: providers-gallery | 服务商管理:预设画廊 + 自定义服务商表单(grok ProvidersPanel 搬运),DSH 侧 schema 驱动(settings.describe)+ credentials + llm.discoverModels;左侧只列已保存服务商,未配置进预设画廊;账户/插件双栏各自滚动 | wired (P-S5) |
Desktop-only: grok-oauth | 模型 → 服务商 → Grok:Grok App 同款账号/额度布局;official-aux MCP(web_search / x_ / vision / Imagine)可注入给其它模型* | wired |
Desktop-only: modlens-extras | 模型 → 扩展:托管 ModLens 看图配置(引擎 / 复用本机登录),标明功能来自该插件 | retired (replaced by media-route) |
Desktop-only: media-route | 模型 → 扩展:应用内置图/视频识别分流(Grok 官方 / 已配服务商 / OpenAI 兼容),不依赖再装插件;同一附件只识一次,识图期间走工具行等待态 | wired |
Desktop-only: plugins-console | 插件控制台:host 行卡片 + 显式 ns 映射的第一方配置卡(shell / agent-loop / web-search:覆盖徽章 / 重置 / 暂存 / 密钥空不写)+ 未暴露 ns 隐藏表单;启停写 $DSH_HOME/cordis.patch.yml(danger-full-access + confirm) | wired (P-P1, P0/P1 2026-08-14) |
Desktop-only: plugin-install | 设置 → 插件:粘贴官方 dsh plugin --profile web add <spec>(或裸包名)写入 $DSH_HOME/profiles/web,pnpm + bundles 对账后重启引擎;不写应用包、不影响在线更新。官方 Web UI 槽位(侧栏/第四栏/抽屉/皮肤)明确不生效 | wired |
Desktop-only: preset-studio | 预设工作室:组合查看器 + 可视化 cordis.yml 编辑器 + 信任徽章 + 每会话预设 chip(agentPreset. + dump-config)* | wired (P-P2) |
Desktop-only: cordis-console | Cordis 控制台:动态插件全生命周期(Run 卡 + 版本指针 + run/update/rollback/stop/undefine + 审批复用 + 客户端代码查看),读 dynamicCordisRunner/inventory,与 Agent 工具同 registry | wired (P-P3) |
Desktop-only: session-plane | 会话插件视图 + 插件活动流:当前组合(host ∩ 预设 ∩ 动态)三色视图,插件事件并入轨迹 | wired (P-P4) |
Desktop-only: diagnostics-bundle | 统一诊断 zip:设置运行时 / 会话菜单 / 错误门;非 session.export。启动不再弹「上次异常退出」 | wired |
Desktop-only: token-usage | 设置 → 用量:本机 token 热力图(Grok 活动热力图视觉)+ 近期会话日志;扫 $DSH_HOME/sessions/**/session.jsonl.zstd 的 assistant/message.usage,不编造数字 | wired |
Desktop-only: app-auto-update | 设置 → 关于:应用内更新(打包版 electron-updater;本地 / Linux 非 AppImage 走 GitHub 下载)。不编造版本,安装前不关引擎 | wired |
Desktop-only: automations | 已安排:侧栏入口 + 任务卡 / 收件箱 + 创建抽屉(skill 芯片流水线)。主进程 30s tick,到点 session.create + session.prompt;关窗可留托盘,完全退出暂停。不假装有独立守护进程 | wired |
Wire
- Unary:
POST /api/<method>{ type, rpcId, method, payload } - Respond:
POST /api/respond - Remote (Typert):
POST /api/<ns>/<method>payload{ args } - Events: WebSocket
/api/events.mux+/api/events.host - Export:
GET /api/session.export
Main process owns every DSH HTTP call (trust fence is loopback).