# Issue2PR 工作台视觉方案 ## 状态 - 方案状态:已通过产品负责人交互确认,作为下一轮 `client.js` 视觉落地的设计依据。 - 交互 Demo:[../design-demo.html](design-demo.html) - 设计方法:`design-taste-frontend` - 适用范围:项目 / 运行 / 产物 / 配置 / 说明五个工作台页面,以及插件品牌标识。 - 不适用范围:业务 API、流水线状态机、产物落盘规则、复核语义。落地时不得为视觉重构改变这些行为。 ## 设计判断 Reading this as:面向研发与运维的 Issue-to-PR 证据链工作台,采用克制、优雅、可扫读的工程系统界面;优先级是状态识别、证据入口和操作确定性,而不是营销式视觉表现。 - `DESIGN_VARIANCE: 4`:结构稳定,避免装饰性变化。 - `MOTION_INTENSITY: 2`:仅保留状态、悬停、页面切换的短过渡。 - `VISUAL_DENSITY: 6`:信息紧凑,但每个区块保留清晰边界和呼吸感。 ## 设计语言 ### 视觉基调 - 底色使用暖灰瓷面(`#ecebe6` / `#f5f5f2`),深色主题使用近黑墨绿灰。 - 卡片使用半透明白面板与 1px 发丝线,不用重阴影和大圆角。 - 全局圆角控制在 3px,胶囊标签使用小圆角矩形,避免气泡化。 - 主色只保留一个绿色 `#177b62`,用于当前态、主动作和关键证据;状态色仅用于状态。 - 中文界面使用系统 UI 字体,编号、路径、耗时、Trace 使用等宽字体。 - 页面标题靠左,说明文字紧随标题,先给判断,再给数据。 ### 品牌与图标 - Header 左侧使用 Issue2PR 专属 SVG 标识,尺寸固定 `24x24`。 - 标识与 `Issue2PR` 文字垂直居中,间距 `10px`,不额外加容器底色。 - 标识沿用侧栏入口的三节点分支骨架,以两条短线表达 Issue 文档,取消封闭文件轮廓。 - 主体描边继承中性色,PR 目标节点使用主题绿色,确保浅色与深色主题都清晰。 - Demo 与插件 favicon 使用同一标识,避免品牌入口不一致。 ## 设计令牌 ```css :root { --shell: #ecebe6; --porcelain: #f5f5f2; --porcelain-strong: #ffffff; --panel: rgba(255, 255, 255, 0.84); --panel-strong: #ffffff; --ink: #20211f; --ink-soft: #474a45; --muted: #767a73; --hairline: #deddd6; --hairline-soft: #e9e8e1; --neutral-soft: #eeeeea; --accent: #177b62; --accent-soft: #e5f0eb; --good: #27703d; --warn: #90620b; --error: #a43c34; --shadow: 0 12px 38px rgba(32, 33, 31, 0.08); } html[data-theme="dark"] { --shell: #101110; --porcelain: #151614; --porcelain-strong: #1b1d1a; --panel: rgba(27, 29, 26, 0.88); --panel-strong: #1b1d1a; --ink: #eceae4; --ink-soft: #c8cbc3; --muted: #8f948a; --hairline: #343731; --hairline-soft: #2a2c28; --neutral-soft: #232521; --accent: #67b79d; --accent-soft: rgba(103, 183, 157, 0.14); --good: #85c99a; --warn: #d9ab62; --error: #e59b91; --shadow: 0 14px 44px rgba(0, 0, 0, 0.3); } ``` 落地到 `client.js` 时,应保留 `.i2p` 命名空间,并把令牌集中定义在组件根节点;深色主题继续跟随宿主主题,只显式覆盖宿主对比不足的说明文字。 ## 页面方案 ### 1. 项目总览 - 页面标题从「项目台账」统一为「项目总览」。 - 第一屏给仓库健康、契约状态、待处理事件,不先展示长列表。 - 信息顺序:页头与操作 → 项目目录 → 项目契约 → 最近事件。 - 项目行保留仓库、健康、契约、最近运行四个可扫读字段;搜索与新建入口固定在目录头部。 ### 2. 执行路线 - 运行页不再用长表展示 11 个阶段,改为整宽可扫读路线。 - 桌面约 `1200px` 宽下使用 6 列,11 个阶段自然分为 2 行;`880px` 下降为 3 列。 - 阶段卡片包含编号、名称、一句职责;已完成、当前、待执行、复核门、失败必须一眼可辨。 - 鼠标设备悬停阶段卡片时上移 `2px` 并增加轻阴影;选中态必须保留绿色边框。 - `prefers-reduced-motion` 下禁用阶段卡片位移,触摸设备不启用 hover 动效。 - 「当前阶段」与「运行证据」依次放在路线下方,不再挤在右侧窄栏。 - 主操作固定在页头:查看日志、继续执行、停止、回滚;证据入口从当前阶段直接链到产物。 ### 3. 产物工作台 - 左侧目录固定 `310px`,右侧为选中产物详情,窄屏自动单列。 - 目录必须是真实树状层级:`run_4821 / 06-implementation / patch-001.diff`。 - 目录节点可点击展开 / 收起;箭头随状态旋转,并使用 `aria-expanded`、`aria-controls`。 - 根目录收起时隐藏全部子级;嵌套目录可独立收起,不影响父级其它文件。 - 目录树外层不显示边线、阴影或悬浮位移;可点击的目录与文件行保留背景反馈。 - 文件行显示图标、名称、大小或状态;当前选中文件使用浅绿当前态。 - 右侧详情先给产物元信息,再给只读内容;大文件沿用现有 200KB 在线预览边界。 ### 4. 阶段配置 - 左侧为阶段索引,右侧为当前阶段配置,避免一次性展开全部复杂表单。 - 阶段索引保留编号、名称和复核门标识;P5 / P6 / P9 / P11 必须独立可识别。 - 右侧按「模型与提示词 / 执行参数 / 委托配置」分组,说明文字解释影响面。 - 修改配置只影响后续执行,视觉上不暗示立即修改历史 Run。 ### 5. 工作流说明 - 面向新用户,按「理解与规划 → 实施与交付 → 边界规则 → 失败路径」组织。 - 每节先给一句话结论,再列关键规则;避免把 README 原文整段搬进界面。 - 失败路径必须说明 P10 只分类与建议,不自动 replan。 ## 组件规则 - 主动作:实心绿、白字、3px 圆角;同一区域最多一个。 - 次动作:透明底、发丝线、深色字;悬停只提升底色。 - 面板:半透明底、1px 发丝线、3px 圆角、轻阴影;标题与计数同行。 - 状态胶囊:浅底 + 深状态字;禁用彩色边框和大面积色块。 - 数据字段:`ID`、阶段号、路径、耗时、Trace 使用等宽字体和表格数字。 - 树节点:目录箭头独立可点击,文件图标保持方形,层级缩进与左侧竖线表达父子关系。 - 焦点:所有可交互元素保留 `focus-visible` 外框,颜色使用主色。 - 动效:页面进入 `180ms`,状态与悬停 `120ms - 180ms`;不得使用循环动画。 ## 落地顺序 1. 在 `client.js` 建立设计令牌、主题映射、App Header、官方 `I2P` 标识与五页导航。 2. 替换项目 / 配置 / 说明页的页面骨架和基础组件,保持既有数据绑定不变。 3. 重排运行页为整宽阶段路线,并接入真实阶段状态与证据入口。 4. 重排产物页为树状目录与详情双栏,实现目录展开 / 收起状态。 5. 清理旧视觉中与本方案冲突的组件样式,避免新旧两套卡片、按钮、状态胶囊并存。 6. 做明暗主题、窄屏、键盘焦点、Console 与既有 UI 状态测试回归。 ## 验收清单 - 五个页面标题、信息顺序、空态与操作入口与 Demo 一致。 - `1257x1320`:运行页 11 阶段为 2 行,无横向溢出。 - `880x1000`:运行页阶段路线自然换行,无横向溢出。 - 产物树根目录与嵌套目录均可展开 / 收起,文件计数与实际层级一致。 - 明暗主题下正文与说明文字对比度可读,Logo 随主题色正确。 - Console 为 `0 errors / 0 warnings`;页面切换与目录展开不产生运行时错误。 - 既有 `npm test` 全部通过;不得改变 API、状态机、产物路径和复核语义。