应用 · 功能域主窗口
%DB9 · 窗口详情后置设计原顶部「应用」入口移至此处。上下文栏列出已固定应用与系统入口;主区承载应用机架(卡片网格 → 点开后为内嵌 WebContentsView 活视图)。
placeholder该窗口的详情将在下一步设计
本轮只定主窗口骨架活动栏图标可点击、上下文栏与主区随之切换;每个功能点开的具体窗口稍后逐一设计。
to be designed原顶部「应用」入口移至此处。上下文栏列出已固定应用与系统入口;主区承载应用机架(卡片网格 → 点开后为内嵌 WebContentsView 活视图)。
placeholder活动栏图标可点击、上下文栏与主区随之切换;每个功能点开的具体窗口稍后逐一设计。
to be designed正在启动 AutoAgent Studio… 准备就绪后将自动打开工作区。
放行条件:四项全部 OK 才提交主界面 —— 对应 navigateMain(applicationUrl) 仅在 backend.host !== undefined 时执行。任一项未通过即停留在本页,不进入主界面。
如果应用文件缺失或损坏,请关闭应用并重新安装。任务数据存储在独立位置。
配置 DeepSeek 官方模型,即可开始使用。
该槽位仅在会话为空态(无当前会话,或当前会话为空白)时激活,且一旦有任一 provider 可用即自动结束。同槽位另有 welcome-notice(order -100,"内测声明",确认后持久化)。逐字文案取自 locales.ts,属门禁断言范围,不可删改。
该页代码确实存在(packages/client/web/src/boot-page.ts),但正常启动下不可能被看到,因此不投入设计。原因是一条可验证的链路:
| 环节 | 事实 | 结果 |
|---|---|---|
| 资源通道 | main.ts:283-296 — dsh-app://app/* 转交 Host 进程内 fetch() | 无网络栈、无磁盘往返,bundle 由内存直出 |
| bundle 到达时机 | webserver 以 script-src 行把 __DSH_BOOT__ 注入 index.html(parser 阻塞式) | main.ts 执行前插件 factory 已注册 |
| 激活耗时 | boot.ts:76-87 — 并行建 entry + loader.await(),模块体惰性就地执行 | 毫秒级,与插件数量基本无关 |
| DOM 交接 | ui-renderer/src/client/index.ts:58-82 — hydrateRoot + useLayoutEffect 首帧换应用 | 整段窗口常小于一帧(16.7 ms),浏览器不产生绘制 |
| 结论 | 它实质是慢路径 / 故障路径界面(bundle 偏大、插件导入或激活失败) | 不单独设计;其失败态由主界面与启动页的既有错误语义覆盖 |
启动页拿到的 IPC 只有 starting | ready | error(backend-controller.ts:6),子进程侧 IPC 只有 ready | fatal(host-protocol.ts:48-55)。因此诚实的自检项恰好是四项,每项都由真实事件驱动,不存在装饰性进度。括注为需新增的部分。
| # | 自检项 | 驱动信号(真实来源) | 通过判据 / 改动量 |
|---|---|---|---|
| 01 | 配置准备 · 应用 release | backend-controller.ts:65 await prepare() (main.ts:262 传入 applyRelease / assertProfileRuntime) |
prepare 正常 resolve。零改动:在 await 前后发一次阶段。 |
| 02 | 内置 Node · dsh 子进程 | host-process.ts:109 spawn(node, [entry,…]) | 子进程已建立且字节管道可用。需把 spawn 结果回调出 DesktopHostProcess。 |
| 03 | 组合插件图 | host-process.ts:105-162 readyPromise (子进程"完整组合已激活"后才 resolve) |
收到 ready 事件即通过。粒度边界:子进程只发 ready/fatal,看不到逐插件进度;要逐插件点亮须先扩展 host-protocol 事件,本稿不假设。 |
| 04 | 打开工作区 | main.ts:267 navigateMain(applicationUrl) | 仅当 backend.host !== undefined。放行门:前三项全 OK 才走到这里,否则停留本页。 |
落地需要的最小改动面:DesktopBackendState 的 starting 分支增加 stage 字段;三处发点(prepare 前后、spawn 后、ready);startup.js 按 stage 点亮;回归 apps/desktop/tests/startup-renderer.spec.ts 与 backend 相关用例。
任一项 FAULT 即停留在启动页并给处理方法,按影响面从轻到重排列。三项动作已存在于 main.ts:232-247 recoverApplication,文案键亦已存在,无需新增。
| 级别 | 动作(真实 IPC) | 适用与代价 |
|---|---|---|
| L1 | restart · 重试启动 | 偶发占用、子进程异常退出。代价最低,先试它。 |
| L2 | plugins-disable-all · 禁用全部第三方插件并重试 | 用于定位是哪个插件拖垮启动。已装插件与配置保留,可恢复。 |
| L3 | reset-configuration · 重置 Desktop 并重试 | 删除桌面端 profile 与第三方插件、不保留备份。共享任务与设置保留。本稿必须在按钮上写明"不保留备份"。 |
| — | 重装指导(静态文案) | 应用文件缺失或损坏时给出;不可自动执行。 |
| 维度 | 事实与设计落点 |
|---|---|
| 槽位 | settings.onboarding,注册 id deepseek-official、order 0;同槽另有 welcome-notice(order -100) |
| 调度 | SettingsRoot.tsx:139-144 — 仅会话为空态时激活,逐个未完成步骤渲染 |
| 触发 | onboardingReadiness 返回 credential-missing(无任何可用 provider 且官方凭据可写);变为 provider-ready 立即自行结束 |
| 结构 | 复用 Models 页的 ProviderEditor:credentialOnly + credentialRequired + autoFocusCredential + hideTitle,只暴露一个密钥字段 |
| 文案键 | onboardingTitle / onboardingDescription / onboardingLater / onboardingSave / onboardingSaving / keyRequired(不可删改) |
| 样式落点 | 模态外壳 OnboardingModal.module.css + 弹窗 DeepSeekOnboardingDialog.module.css;仅需覆盖遮罩浓度、卡片边框层级、密钥输入聚焦环与等宽字段标签,不动 ProviderEditor 逻辑 |
| 主界面同屏 | 与空态主页同时可见,故遮罩下保留主页轮廓(本稿以网格 + 幽灵 hero 示意),确保用户仍知道自己没离开主页 |
令牌映射同主界面规格表(琥珀主色、RUN 绿、数据青、网格底纹),此处省略。动画约束:仅 transform / opacity / background-position / stroke-dashoffset,整体包 prefers-reduced-motion 降级。
Cmd/Ctrl+Enter 使用另一行为v22.22.2(managed)3.13.12(managed)2.47.0(PortableGit)