Skip to content

01. UI信息架构 ​

翻译说明: 本页是与 英文源规格 一一对应的机器辅助翻译。代码、协议字段和标识符保持原文;如翻译与英文源事实有歧义,以英文版本为准。

语言:英语(根据 ADR 0009)。这描述了已发货的符合 Codex 的 外壳 (D034+)。组件详细信息:08-组件规格; 视觉标记:07-ui-design-system;行为: 09-交互模式。

1. Goal ​

清晰、克制、开发人员优先的工作台:一个窗口,一个活动 目的地、聊天作为主页表面、工具和权限内联。

2. Shell 区域 ​

text
+----------------------------------------------------------------------+
| 平台标题栏:macOS 交通灯/Windows/Linux 操作 |
+------------------+--------------------------------+------------------+
| 侧边栏(275px) | 主窗格(活动目的地) | 工作面板 |
|                  | 聊天主页/文字记录 | (可选, |
|                  | 或扩展页面 | 可调整大小 |
|                  |                                | ≥244 像素,动态上限) |
| 会话 +↕ |                                | 表面 |
| 最近行 ↕ |                                |                  |
| 项目+ |                                | ◫ | 应用.tsx ⌄ × |
| 项目A |                                | > |              |
| 项目B |                                | ◎ | 活跃 |
| 页脚[⚙][@][☾][响铃] | 浮动输入框(聊天) |   | 资源 |
+------------------+--------------------------------+------------------+
  • 临时任务附件:即使没有打开项目,选择已保存的附件也应打开文件预览; 返回后恢复无项目的文件浏览空状态。分支保留被引用的粘贴或导入文件的独立副本, 删除原任务不会破坏分支的附件预览。
  • 侧边栏:主要导航 - 紧凑的无路径对话 会话 包含新会话和排序操作的部分,保留开放项目 具有持久性新项目的以下 Projects 部分下的组 动作,以及受 WorkBuddy 启发的页脚。页脚保持紧凑的设置, 扩展、定时任务(时钟)和通知图标操作;拉取请求 仍从主侧边栏中省略。每个保留的项目都是一个 路径键控 tab/group 可以是 独立倒塌。项目和对话行公开 非破坏性 pin/archive 操作,独立的对话分支 命令和可排序视图。未保留在侧边栏中的项目仍然存在 可通过设置 → 项目存档发现。 可折叠到图标导轨 (Cmd/Ctrl+B)。展开列固定为 275px;历史版本保存的 可调宽度偏好会被忽略。
  • 产品标识:运行时 shell 复制使用 PI-Desktop;主场英雄和 侧边栏重复使用派生的 src/assets/brand/logo-*.png 标记,而输入框提示 行没有领先的品牌图标,会话创建控件使用专用的 消息加号图标。开 Windows/Linux,扩展侧边栏以键盘可访问的主页开始 右侧的品牌和折叠侧边栏控件;激活 品牌返回主窗格进行聊天。 macOS 扩展侧边栏省略了 logo/title 品牌,仅将“折叠”侧栏放在右侧 红绿灯行Codex 仅保留外部导入源或 设计参考术语。
  • 主窗格:一次仅一个目的地;目的地取代 窗格(它们是页面,而不是模式)。
  • 标题栏:平台本机桌面 Chrome (D118)。 macOS 用途 hiddenInset 交通灯和系统应用程序菜单。扩展后的 侧边栏将“折叠”侧边栏保持在同一 46 像素行中,并与 交通灯安全区域外的右侧;没有呈现 logo/title 那里,包括全屏。当工作面板打开时,会话 窗格标题栏在右上角托管其折叠控件。面板标题栏改为可横向滚动的标签条, 后接固定的 + 新建入口;关闭操作归属于各标签,因此 Windows 原生关闭 控件旁不再重复呈现第二个 ×。头部为视口固定的折叠开关预留 44px 的右侧 安全车道(28px 控件、12px 视口内缩与头部自身的 4px 控制间距),同一个间距 把 +、最大化与折叠开关连成一组并保持 + 的独立命中区域。工作面板预览模式会卸载 MainChat, 并在窗口级 46px chrome 行中保留新建任务、侧边栏和本机窗口控件。 The row and spacer declare neither drag nor no-drag and pass pointer events through outside controls. The panel header alone owns dragging in the preview pane. Its border box excludes the shell action lane plus an 8px gap in both sidebar states, including expanded-sidebar New Task, on every platform. The left inset is 8px except collapsed-sidebar windowed macOS (88px), using --ds-window-lead-inset: the shared native cluster's 76px edge plus 12px. The main process uses the same geometry from @pi-desktop/shared. Right native-control exclusion is unchanged; header-height background paint fills the left lane without an opaque overlay covering panel controls. 窗口级控件条始终挂在各面板堆叠上下文之外,覆盖面板打开、预览、还原和设置页切换。 背景跟随相邻标题栏(打开时为停靠栏标题,关闭时为会话表面),深浅色主题均如此。 启动闪屏、搜索和 Toast 保持在控件条之上。预览导航也必须保持在面板之上; macOS 继续使用原生交通灯和既有全屏留白。 Windows/Linux 使用无菜单的无框架 46px 行,并在 左侧和可访问的最小化/最大化或恢复/关闭控件 右(D129)。目的地历史以快捷键为主(Cmd/Ctrl+[ 和 Cmd/Ctrl+]),不渲染专门的 back/forward chrome;插件页激活时,页脚 插件按钮执行一次后退,是它唯一的鼠标入口。主标题栏没有 通知行动;耐用的本地收件箱从侧边栏页脚打开 改为响铃 (D130/D117)。
  • 工作面板:由工件打开的停靠右列(不是覆盖层) 或 Cmd/Ctrl + J。文件、URL 和浏览器预览工件会自动创建资源; 审阅不是工件,它只在用户主动打开时出现。面板可见时,46px 内容标题显示可横向滚动的 标签条和固定 + 入口;+ 菜单只有一个 Tools & panels 分组,包含 Review 与当前范围内所有插件视图。文件路径保持独立,插件视图按视图引用 去重。Cmd/Ctrl + J 揭示了 活动会话的保留面板上下文,无需创建资源选项卡;的 当面板关闭时,创建触发器仍然不可用。任何代理或工具结果都不会 打开、激活或改变面板:成功的工作区 Write/Edit 以转录中的内联 审阅卡呈现其证据。 拖动通过共享三栏预算调整面板宽度:向左拖动直到 MainChat 到达 450px, 此时展开的左栏立即让位;向右拖动把空间还回去。手动重开左栏会优先 占用工作面板宽度,必要时以 460px MainChat 为目标。唯一的面板级控制崩溃 面板; 每个会话保留其自己的运行时打开状态、选项卡集、活动选项卡和 渲染器内存中的浏览器资源。选择另一个会话会交换 可见面板上下文而不删除任一会话的状态;选择一个 没有活动对话的工作区隐藏面板而不是 重新解释相关资源。背景工件仅更新它们的 原始会话保留的面板上下文,并且永远不会打开、激活或 调整可见面板的大小。启动关闭,没有保留会话 上下文,并且只有首选面板宽度在启动时保持不变。 工作面板是固定客户区的固定宽度流入列 (ADR 0033)。打开它会将 MainChat 回流到左侧并且不会扩展操作系统 窗户;折叠释放空间和分隔线,关闭最后一个标签时面板保持打开并显示 New 启动器。 提交更新首选宽度。受限窗口中 MainChat 保持 450px 硬下限,由右栏缩减补齐; 左栏在阈值处让位,右栏关闭时恢复。本机窗口边缘通过回流调整聊天大小,而不是 面板。 Maximized/fullscreen 不受影响;在显示器之间移动或更改 显示工作区通常协调窗口边界。持久基地 边界是用户的窗口大小。背景工件永远不会改变 可见面板(D163,ADR 0033)。外层窗口在每个平台上都保留操作系统原生的 边缘和角落调整大小,最小支持尺寸为 1040×700。原生边界恢复会等待调整 大小或移动流空闲,最后稳定的基础边界经过短暂去抖后保存,因此慢速拖动不会 在手势中途被覆盖。 取代了以前的上下文面板覆盖; workspace/model/status 信息生活 相反,在输入框芯片和设置中。
  • 输入框:与工作空间无关的浮动药丸锚定于对话 目的地 - 在底部保留的输入框上方居中居中的空家庭内容 (D111/D204/D206),位于转录本底部,没有项目/本地/分支 铁路(D095)。 其左侧输入操作模式芯片是唯一的活动会话控制 Agent、Plan 和 Goal。 Plan 显示相同 Agent 的规划状态; Goal 显示结果合同的相同批准边界。两者都保留 权限模式芯片并公开其主机写入的不可变 .pi/plan/*.md 或提交后的 .pi/goal/*.md 工件开启器。对话顶部栏只保留任务标题和 窗口操作;Composer 拥有模型、推理和模式选择。
  • 后端状态胶囊:后端出现时出现在标题栏下方 通过打开日志操作重新启动或严重降级 (D080)。

3. 目的地 ​

  • 空状态:克制的英雄标题(“我可以帮你建造什么?”——项目会话里项目名称 变为点下划线按钮,点击展开可搜索的项目切换菜单,列出侧边栏已打开 项目,并可从语法上的公网远程克隆 Git 仓库(ADR 0247 / D416)或打开本地文件夹),可选的首次运行检查表和底部保留 输入框。任务输入直接在composer中启动;没有开发人员入门 渲染卡片或上下文快速操作行 (D204/D206)。
  • 带文字记录:消息流 + 工具披露行 (D071),上下文 每个成功的工作区后立即显示消息范围的审核卡 Write/Edit 行、停靠的 Composer 和内嵌的会话范围权限卡。 该卡读取消息的持久审阅快照而不是当前的 Git diff,因此在提交后保持可见。它显示文件状态和 addition/deletion 进行计数,扩展确切的消息块,并且 提供受保护的回滚;它不是全局成绩单条目。背景 会话的消息、工具和权限事件永远不会取代或覆盖 可见的对话。

3. 2 侧边栏项目组 ​

  • 部分:紧凑的 Sessions 标题位于 Projects 之前并拥有 无路径对话创建加上现有的 sort/archive-view 菜单。其 工具栏在创建新会话之前进行排序。两个标题都保持沉默 字形操作,还接受标题或空白上的右键单击创建菜单 列出 chrome,以便部分创建保持可发现性 无需额外镀铬。它的列表之前最多显示五个紧凑行(146px) 内部滚动,因此独立作品保持可见而不会移位 项目导航。以下 Projects 标题公开了 文件夹选择器操作;保留的项目组使用剩余的高度和 独立滚动。
  • 身份:每个组都由规范化的完整项目路径作为密钥,从不 通过可能不明确的文件夹基名。
  • 标题:项目名称、当前工作区圆点、披露、新任务操作和 溢出菜单。工作区上下文不等于导航选中:项目标题不绘制持久选中背景, 没有选中会话时也不例外。只有聊天页当前会话显示选中背景。 项目与会话共享整行悬停反馈,项目标题按钮自身保持透明。 目录标题是一个整行的披露目标; collapse/expand 仅影响子级可见性,相邻组形成一个 密集的树而不是分离的卡片。悬停或聚焦项目标题 揭示完整的项目路径。
  • 项目操作:打开文件夹显示项目目录;重命名只修改 renderer 本地显示名称,规范化路径仍是项目身份;pin/unpin 更改演示优先级;archive/restore 隐藏或恢复组;close 删除保留的 选项卡而不删除或归档 project/session 数据。自定义显示名称与侧边栏 偏好一起保存,重启后在侧边栏和项目存档中继续使用。
  • 对话操作:pin/unpin、archive/restore 和删除保留 单独的行动。存档永远不会删除文字记录。打开的文件夹是 项目行动,而不是对话行动。
  • 排序:面向用户的模式为最近更新、创建日期、最旧 首先是姓名。固定的行先于未固定的行。项目组通过拖动标题 或在该标题上按 ArrowUp/ArrowDown 切换到 manual。会话 manual 仍是兼容性值。
  • 对话列表:每组显示最近的十个会话 默认情况下活动排序顺序;剩下的折叠在 再加载 N 个… 后面 单击时展开完整时间分组列表的行。固定行位于前面 未固定的行,并且永远不会被推到折叠后面;展开状态为 没有坚持。
  • 独立会话:无路径会话保留在单独的会话中 节并且永远不会继承最后一个活动项目的工作区。
  • 并发:shell 一次选择一个可见项目,同时 代理运行状态仍然由会话控制。切换项目选项卡不会 取消背景回合。后台事件仅更新其原始事件 会话并且永远不会更改活动会话、页面、项目或键盘 焦点。

3. 3 拉取请求 ​

带计数的分段 Open/Draft/All 过滤器;行带有图标板、数字、 标题、状态徽章、分支元、外部链接和“与代理一起审核” (创建聊天回合)。需要活动工作区和 gh。

3. 4 预定 ​

任务与运行记录两个视图,支持创建、编辑、暂停、启用和确认删除。表单可为每个任务单独选择项目、权限和模型。周期保留下拉选择,并与时分统一为自定义主题菜单。每小时按一小时间隔执行,不显示时间选择;保存、启用、启动或上次自动准入后重新计时。 每天通过下拉框选择上午 09:00、下午 14:00、晚上 19:00、夜间 22:00; 界面不提供时分编辑,AI 可设置具体时间,非预设值显示为自定义时间,其他字段的编辑不得覆盖它。每周通过独立下拉面板多选周一至周日, 右侧显示选中标记,不提供快捷组合。至少选择一天才能保存。支持方向键、Home/End、Enter/Space 选择及 Escape/外部点击关闭,选项具有选中状态语义。 每天、每周按电脑本地时区计算并显示下次执行时间。 侧边栏时钟与全局搜索均可进入。立即运行在后台执行并切换到运行记录;可打开 结果会话查看真实记录或处理授权。显示最近 100 次运行的运行中、完成、失败、中断状态。

应用必须保持运行。每 30 秒检查一次,超过 90 秒的错过时段与重叠运行被跳过; 重启只安排未来时段。旧任务需明确保存周期后才自动执行。新任务保存所选项目、Ask 权限和当前默认 provider/model;这些值只属于当前任务。任务文本标为“指令”,项目、权限和模型选择器嵌在指令框底部,并复用主 Composer 的容器、芯片和锚定菜单样式。两处直接共用权限选择组件和支持搜索、服务商分组、能力标记的模型列表。任务的模型按钮只显示模型名或别名,不拼接服务商名称;选择结果只更新任务草稿,不更改当前对话或应用默认设置。指令输入区域使用独立圆角边框及与底栏不同的底色,不显示原生缩放手柄,长文本在输入区内滚动。缺少模型字段的旧任务继续跟随应用默认值,已保存但不可用的模型保留显示且不会被静默替换。选择 Auto 时明确提示受限操作可能无需询问。没有显式选择时,首次设置仍保存当前项目, 前台项目切换不会改变绑定。 这也包括手动任务与未保存项目的任务:立即运行、重命名与周期变更都保留该绑定,重启后同样如此。 只有没有已存绑定的旧任务,才会在首次显式配置时捕获当前项目。 缺少已存权限字段的旧自动任务仍使用 Ask,不自动抢占当前页面。 新任务默认为 Agent。允许保留已迁移的 Plan 或 Goal 任务 已存储,但在提供商、工件之前明确拒绝无人值守的运行, 或使用 PLAN_REQUIRES_INTERACTIVE_SESSION 排队工作;它无法显示或 自动批准合同。 用户必须在启用无人值守之前显式将其切换到 Agent 执行。

Agent tools can change a Manual task to Hourly by supplying only its id and cadence: "hourly"; no calendar time is required. Preserve existing schedule fields and paused state. Daily and Weekly still require a valid saved or supplied schedule. Renaming an Hourly task does not restart its interval.

3. 5 扩展 ​

扩展目标是专注于插件的页面,使用紧凑标头并且只保留两个选项卡: 已安装和市场。已安装页按需要注意/可用更新/活动/关闭分组,每组标签 下以柔和色块行堆叠显示插件(D296);市场页继续使用浏览和安装卡片网格。 整页不画分割线:标头、工具栏、行、来源设置、卡片以及详情抽屉的各节都靠色调 与间距区分,细线只保留给浮层(菜单、抽屉、对话框)。市场来源设置只显示来源选择器, 不再显示重复的提供商说明或当前来源状态行。MCP、技能和子代理不再是扩展页的选项卡或区块。

3. 6 设置(全页接管) ​

3. 6 设置(全页接管) ​

设置替换整个外壳(D063):返回应用程序、搜索和带有简洁平行标签的分组设置导航栏。智能体 分组包含独立的技能、MCP 和子代理页面,并与说明、模型配置并列;选择它们 会切换页面目的地,而不是在一个能力面板内切换选项卡。 外观位于常规;全局人工智能行为(权限和上下文 管理)存在于全局人工智能内部;键盘快捷键和 global/project 指令有其自己的目的地;供应商管理位于内部 模型配置。导入扫描支持本地代理存储和呈现 可折叠组中的候选人。项目路径是备用分组 与默认源分组一起,每次扫描或分组更改都会开始 所有团体都崩溃了。项目档案拥有持久的 D086 项目索引 (搜索、添加、展开、固定、archive/restore、关闭和重新打开)并且始终包括 存档记录。打开或切换项目会保留侧边栏选项卡,选择 该项目作为活动工作区,然后返回聊天。其他保留的选项卡 保持开放。扩展管理仍然完全独立于应用程序外壳扩展目标(见 §3.5)。设置 > 智能体 遵循以下共享能力契约:

  • 技能和 MCP 使用单列堆叠的全局/项目卡片区块。每个区块有安静的标题行:作用域 标题与说明、解析后的 .agents 路径、本地化计数和操作;项目区块显示最近项目 选择器。项目项优先于全局项。
  • 每个区块的技能只有一个原生“导入”操作,只接受一个文件,并物理复制到选中的 .agents/skills 目录。
  • 每个区块的 MCP 只有一个“新增”操作;新增和编辑复用 McpEditorSheet 二级模态框, 包含 stdio/HTTP 分支、校验、同级别重名拦截、编辑时锁定 ID、作用范围和测试 连接反馈。
  • 子代理使用 ~/.agents/subagents 下的单个全局宽区块,没有项目选择器、项目区块 或项目级开关。新建或编辑子智能体时,固定模型从已配置的提供商模型中选择,或沿用 会话模型,不需要手打 provider/model 标识。
  • 三个列表随页面自然流动,在面板内显示安静的居中空态;关闭行调暗图标与文案但 保持开关清晰,加载渲染同构骨架行,启用状态写入应用本地而不是能力文件。

4. 叠加 ​

叠加触发注释
命令面板Cmd/Ctrl+K(也根据 D014 的 Cmd/Ctrl+Shift+P)内置+插件命令
模型菜单Composer 右侧模型 × 推理芯片配置的 provider/model 选择 + 设置条目 (D091)
个人资料菜单侧边栏页脚设置/日志/主题循环 (D041)
通知收件箱侧边栏页脚响铃All/Unread 视图、仅任务 failure 行(顺利完成的不显示,D295)、标记为全部读取和清除操作 (D130/D117)
Toast事件(插件 toast、后端恢复、复制)顶部中心;默认 4 秒,错误 8 秒
项目切换菜单空首页带下划线的项目名侧边栏已打开项目 + 搜索 + 克隆 Git 项目 + 打开项目

5. 导航模型 ​

  • page 状态:chat | pulls | scheduled | plugins | settings; chat 是 对话表面路线,而不是操作模式。项目 archive 是 projects 设置选项卡而不是独立页面。
  • 目的地历史是线性的; Cmd/Ctrl+[ 和 Cmd/Ctrl+] 遍历它, 没有持久的 back/forward chrome。插件页激活时,页脚插件按钮复用 一次后退(见 §2 Shell 区域),不新增独立的前进/后退控件。
  • 当项目选项卡的路径与路径不同时,选择项目选项卡会重用 project.set 选择主机工作区并保留其他选项卡。
  • 选择项目范围的线程会在切换到之前激活其项目 chat。选择临时线程会清除可见的活动工作区 在加载之前。
  • 新任务打开一个未持久化的草稿:在第一条消息创建当前项目或临时 范围中的会话之前,不会产生会话或侧边栏历史记录行(D220;修订 D088/D093 的空草稿堆叠规则)。

6. 键盘图(IA级) ​

按键行动
Cmd/Ctrl+K、Cmd/Ctrl+Shift+P命令面板
Cmd/Ctrl+B切换侧边栏
Cmd/Ctrl+[之前的目的地
Cmd/Ctrl+]下一个目的地
Cmd/Ctrl+N新任务
Cmd/Ctrl+O开放项目
Cmd/Ctrl+,设置
Cmd/Ctrl+。中止当前运行
Enter / Shift+Enter / Cmd/Ctrl+Enter发送/换行(回车发送开启时 Enter 发送;关闭后 Cmd/Ctrl+Enter 发送)
ESC关闭 overlay/menu

7. 依赖于状态的 chrome ​

  • 未配置提供商 → 首次运行前阻止设置指导 (MODEL_NOT_CONFIGURED)。
  • 无工作区 → 无项目下划线的主页英雄;拉取请求显示 工作区所需的空状态。输入框从不渲染工作区轨道。
  • 后台项目会话 → 原始项目行保留其 running/error 指标。选定的壳状态可以独立移动,同时 会话工具根仍然与其持久项目绑定;它的文物是 保留在该会话的工作面板上下文中,无需打开或激活 当前所选项目上的选项卡。消息、工具事件、权限 请求和小组资源仍限于该会议。明确地 打开对话会恢复其保留的面板上下文并显示任何内容 待批准的许可卡及其原始截止日期。
  • Completed/failed 转不可见→ host-core 附加一个持久的 收件箱行。结果显示在可见的、集中的当前聊天和每个 aborted 转不追加。后台会话和任何回合结束时 窗口未聚焦仍在追加。侧边栏页脚铃铛只列出 task.failed 行,徽章也只 统计未读的失败;顺利完成的记录仍持久保存,用于侧边栏结果徽标和原生通知, 但永不出现在收件箱里(D295)。选择一行标记其已读取并激活其绑定 project/session。 仅当 应用程序窗口未获得焦点,单击它会在激活之前使窗口获得焦点 同一次会议(D117)。接收持久通知或本机通知 事件永远不会自行导航;只有显式激活才可以。
  • 后端降级→状态胶囊(重新启动)或带有打开的致命横幅 日志(D080);输入框提交的内容在关闭时被拒绝并出现可读错误。
    • Plan/Goal 检查点 → 原始会话仅显示结构化标题 以及其不可变的 .pi/plan/*.md 工件的开场白。渲染器保留最新的 每个会话的 proposal/execution 快照仅适用于当前渲染器 生命周期,由现场主持人活动更新;只有一个活动的 pending 行构成 审批门。通过 plans.pending 重新加载,同时保留相同的主机 alive 恢复了一个仍然悬而未决的行及其原始截止日期。被拒绝, 过期、approved/completed 和中断的终端卡不属于 再水化;终端卡可能保持可见且不可操作,直到 渲染器重新加载。拒绝、过期或中断清除了批准之门, 使会话保持合同状态且可编辑,并且需要稍后转向 创建一个新的工件。在等待期间,草案仍然可见,但 只读且仅启用“批准”或“拒绝”操作。 Host/app 重启 在 RPC 之前中断之前的工作,没有重播或过时的操作;待定 未批准的工作仍保留 Plan,而已批准的工作则中断执行 仍然是 Agent。 UI 不需要显示中断的终端 重启后的快照。

8. 国际化 ​

英语是源语言环境。已发布的翻译(zh-CN、zh-TW、土耳其语、德语、西班牙语和法语)覆盖外壳界面;标签由 US-UI e2e 场景断言。复制规则位于 02-i18n-english-first。

本地优先 · 模型可替换 · 插件可扩展。 AIUO.NET