@openprd/cli 0.1.18 → 0.1.19

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.
@@ -1,48 +1,54 @@
1
- # Vibe Coding 自动化三连:dev-check 自动重构、图标自动匹配、拼图证据入流
1
+ # 画布协同闭环:标注改图、双向结构化工具、尺寸契约与唤起机制
2
2
  > 语言规则:用户可见说明、PRD、spec 和 tasks 跟随用户当前主语言;无法判断时才使用简体中文兜底。PRD、OpenPrd、OpenSpec、API、SDK、CLI、TypeScript、JSON、HTTP、WebSocket、字段 key、命令名、品牌名、产品名和协议名等必要专有名词保留原文。
3
- - 版本: v0012
4
- - 负责人: Codex
3
+ - 版本: v0014
4
+ - 负责人: OpenPrd
5
5
  - 产品场景: 以 Agent 为主要使用场景
6
6
  - 场景模板: 以 Agent 为主要使用场景
7
7
  - 状态: synthesized
8
- - 生成时间: 2026-07-03 18:28:06
8
+ - 生成时间: 2026-07-06 22:49:20
9
9
  ## 元信息
10
10
 
11
- - 标题: Vibe Coding 自动化三连:dev-check 自动重构、图标自动匹配、拼图证据入流
12
- - 负责人: Codex
13
- - 状态: clarifying
14
- - 版本: v0012
11
+ - 标题: 画布协同闭环:标注改图、双向结构化工具、尺寸契约与唤起机制
12
+ - 负责人: OpenPrd
13
+ - 状态: synthesized
14
+ - 版本: v0014
15
15
  - 产品场景: 以 Agent 为主要使用场景
16
- - 日期: 2026-07-03
16
+ - 日期: 2026-07-06
17
17
 
18
18
  ## 问题
19
19
 
20
- - 问题陈述: OpenPrd 三项 Vibe Coding 自动化能力不足:1) dev-check 超行提醒停留在后续建议表格,用户不知如何处理,价值鸡肋;2) 开发新功能时图标最佳实践路由几乎从不自动触发(415 个图标相关会话仅 1 次真实接入图标库);3) 拼图/网格对齐证据板真实触发率低,证据图不在对话流中可视化,AI 自我审查作用未发挥。
21
- - 为什么是现在: 用户明确反馈不少人用了 OpenPrd 觉得疑惑它到底是干嘛的,希望有一套软件工程视角的标准流程引导;画布做了一半,需要继续对标白板工具补齐人机协同能力。
20
+ - 问题陈述: OpenPrd 画布目前只有单向的“发送给 Codex”整体交接:Agent 不能结构化读取用户在画布上的选区与标注,不能把生成图片精准放回画布锚点旁,标注修改意图靠用户口述或手动截图传递,协同链路断在“人标注完之后”这一步。
21
+ - 为什么是现在: 对标 Cowart 已验证“标注改图闭环 + 画布双向结构化工具 + 生图尺寸契约 + 具名 skill 唤起”四件能力能显著降低人机视觉协同成本;OpenPrd 0.1.18 刚落地生图路由,正好把尺寸契约与路由串起来。
22
22
  - 证据:
23
- - moticlaw docs/basic 平均行长 440-477 字符、37 行超 500 字符;.openprd 总 5.8GB,quality/reports 5118 份;artifacts/active 280 个版本目录、archive 0;对照组 ClipReady/gifeasy 年轻项目文档健康。
23
+ - Cowart get_cowart_selection / insert_cowart_image / annotation-edit 元数据闭环已被 DeepWiki 调研确认
24
+ - OpenPrd 画布现状只有 placeholderId 回填和整体 handoff,无结构化选区读取
25
+ - 用户已确认按对标建议落地四项能力
24
26
 
25
27
  ## 用户与相关方
26
28
 
27
29
  - 主要用户:
28
- - Vibe Coding 方式做产品的产品经理
30
+ - 使用 OpenPrd 画布做视觉协同的开发者与产品设计协作者
29
31
  - 次要用户:
30
32
  - 待补充
31
33
  - 相关方:
32
34
  - OpenPrd 维护者
33
- - 在脏仓库或长程任务中依赖 loop 的项目协作者
35
+ - Codex/Cursor 上的 Vibe Coding 用户
34
36
 
35
37
  ## 目标与成功标准
36
38
 
37
39
  - 目标:
38
- - 产品经理任何时刻都能一眼看到自己处在 7 步标准流程的哪一步和下一步动作
39
- - 画布接入评审方向导入与流程位置提示,让 PM 在白板上完成方向标注并把结论发回 Agent
40
+ - 用户在画布上标注后,一句话就能让 Agent 读懂标注并生成修订图放回原图旁
41
+ - Agent 能结构化读取画布选区并把图片锚定回填
42
+ - 生图请求自动携带占位卡尺寸契约
43
+ - 用户能用自然语言稳定唤起画布协同
40
44
  - 成功指标:
41
- - openprd guide 在需求前/评审中/实现中/收口后各阶段输出正确的当前步骤与下一步
42
- - review.html 顶部展示流程位置条
43
- - 画布可一键导入当前评审的 designDirections 方向图卡片
45
+ - 标注改图闭环端到端可走通并有测试覆盖
46
+ - selection/insert-image API 有集成测试
47
+ - 尺寸契约出现在生图指引与占位卡 handoff 记录中
44
48
  - 验收目标:
45
- - openprd 自身仓库通过单元测试与 standards/quality/run verify;用 Codex CLI 在本地跑一个桌面任务实测新流程效果并留下证据。
49
+ - canvas 服务新增 GET /api/selection POST /api/insert-image 且测试通过
50
+ - 标注导出带 annotationEdit 元数据并能被 hook 指引消费
51
+ - hook 对画布协同意图注入引导语
46
52
 
47
53
  ## 验证与创业闭环
48
54
 
@@ -61,7 +67,7 @@
61
67
  - 待补充
62
68
  - 承诺信号:
63
69
  - 待补充
64
- - 首个低成本验证: synthesize 生成 PRD 与 review.html 后走 change/tasks,再按任务实现并用 Codex CLI 本地桌面任务实测。
70
+ - 首个低成本验证: 生成 change 与任务拆解后按序实现
65
71
  - 先活下来方案:
66
72
  - 待补充
67
73
  - 付费验证信号:
@@ -85,25 +91,32 @@
85
91
  ## 范围与非目标
86
92
 
87
93
  - 范围内:
88
- - dev-check 自动重构模式:默认开启,命中 attention/warning 时指示 Agent 本轮直接执行高内聚低耦合拆分(不丢功能),输出改为本次额外处理结果,并支持 --auto-refactor on/off 开关与收口确认话术
89
- - 图标最佳实践自动触发:asset-spec 增加功能图标行,design-starter/skills/catalog/hook 把新功能自动配图标写为默认行为
90
- - 拼图证据板强化:visual-compare 输出对话流嵌入 markdown,dev-check 对 UI 文件补视觉证据提醒,skills/catalog 把网格对齐证据板写为界面布局场景默认动作
94
+ - canvas-workspace.js 新增选区状态持久化与查询 API
95
+ - canvas-workspace.js 新增锚定插图 API(anchorShapeId/placement/replaceHolder)
96
+ - canvas-app.html.js 标注修改请求导出(带元数据)与选区上报
97
+ - 生图占位卡尺寸契约写入 handoff 与生图指引
98
+ - codex-hook-runner-template.mjs 画布协同意图识别与引导注入
99
+ - agent-canonical-content.js 画布协同指引
100
+ - docs/basic 与 README 同步
91
101
  - 范围外:
92
- - 画布实时多人协作
93
- - 重写画布为独立前端工程
94
- - 改动 Codex 线程桥接协议
102
+ - 不迁移 tldraw、不做 Codex widget 内嵌
103
+ - 不新建独立 MCP stdio server,复用画布本地 HTTP 服务
104
+ - 不改变现有发送给 Codex 的 app-server 桥接协议
95
105
 
96
106
  ## 场景与流程
97
107
 
98
108
  - 主流程:
99
- - PM 打开终端或让 Agent 运行 openprd guide,看到 7 步流程和当前位置,按提示进入下一步
100
- - PM 打开 review.html,顶部流程条显示当前在评审确认步;确认后进入方向选择
101
- - PM 打开画布点导入评审方向,3 个方向图变成卡片,圈选标注后用发送给 Codex 把结论发回
109
+ - 用户在画布圈选原图并批注,点“标注修改请求”,Agent 读标注生成修订图并放回原图右侧
110
+ - Agent GET /api/selection 读取选中图形结构化数据
111
+ - Agent POST /api/insert-image 把生成图锚定到指定图形旁
112
+ - 用户说“打开画布一起改图”即唤起画布协同
102
113
  - 边界情况:
103
- - 工作区还没有任何需求版本时 guide 显示第 1 步并给出起步动作
104
- - 当前评审没有 designDirections 时画布导入按钮提示暂无可导入方向
114
+ - 无选区时 selection API 返回空且 Agent 收到明确提示
115
+ - 锚点图形不存在时 insert-image 报错不写脏数据
116
+ - 占位卡无宽高时尺寸契约退化为默认比例
105
117
  - 失败模式:
106
- - 方向图片文件缺失时导入跳过该方向并提示,不中断其他方向导入
118
+ - 画布服务未启动时 API 调用失败要提示先运行 openprd canvas
119
+ - 回填图片文件缺失时保持画布 scene 不变
107
120
 
108
121
  ## 可视化图表
109
122
 
@@ -111,30 +124,30 @@
111
124
 
112
125
  ```mermaid
113
126
  flowchart LR
114
- entry["入口触发<br/>PM 打开终端或让 Agent 运行 openprd guide,看到 7 步流程和当前位置,按提示进入下一步"]
115
- experience["产品内步骤<br/>PM 打开 review.html,顶部流程条显示当前在评审确认步;确认后进入方向选择"]
116
- decision{"决策点<br/>工作区还没有任何需求版本时 guide 显示第 1 步并给出起步动作"}
117
- success(["成功结果<br/>openprd guide 在需求前/评审中/实现中/收口后各阶段输出正确的当前步骤与下一步"])
118
- failure[["失败与恢复<br/>方向图片文件缺失时导入跳过该方向并提示,不中断其他方向导入"]]
119
- entry -->|"PM 打开终端或让 Agent 运行 openprd guide,看到 7 步流程…"| experience
120
- experience -->|"PM 打开 review.html,顶部流程条显示当前在评审确认步;确认后进入方向…"| decision
121
- decision -->|"产品经理任何时刻都能一眼看到自己处在 7 步标准流程的哪一步和下一步动作"| success
122
- decision -.->|"方向图片文件缺失时导入跳过该方向并提示,不中断其他方向导入"| failure
127
+ entry["入口触发<br/>用户在画布圈选原图并批注,点“标注修改请求”,Agent 读标注生成修订图并放回原图右侧"]
128
+ experience["产品内步骤<br/>Agent GET /api/selection 读取选中图形结构化数据"]
129
+ decision{"决策点<br/>无选区时 selection API 返回空且 Agent 收到明确提示"}
130
+ success(["成功结果<br/>标注改图闭环端到端可走通并有测试覆盖"])
131
+ failure[["失败与恢复<br/>画布服务未启动时 API 调用失败要提示先运行 openprd canvas"]]
132
+ entry -->|"用户在画布圈选原图并批注,点“标注修改请求”,Agent 读标注生成修订图并放回原…"| experience
133
+ experience -->|"Agent GET /api/selection 读取选中图形结构化数据"| decision
134
+ decision -->|"用户在画布上标注后,一句话就能让 Agent 读懂标注并生成修订图放回原图旁"| success
135
+ decision -.->|"画布服务未启动时 API 调用失败要提示先运行 openprd canvas"| failure
123
136
  ```
124
137
 
125
138
  ### 架构
126
139
 
127
140
  ```mermaid
128
141
  flowchart LR
129
- users["主要用户<br/>用 Vibe Coding 方式做产品的产品经理"]
142
+ users["主要用户<br/>使用 OpenPrd 画布做视觉协同的开发者与产品设计协作者"]
130
143
  subgraph solution["方案边界"]
131
- experience["Agent 使用场景层<br/>PM 打开终端或让 Agent 运行 openprd guide,看到 7 步流程和当前位置,按提示进入下一步 · PM 打开…"]
132
- core["核心产品逻辑<br/>OpenPrd 三项 Vibe Coding 自动化能力不足:1) dev-check 超行提醒停留在后续建议表格,用户不知如…"]
133
- integrations["依赖与集成<br/>Codex 原生 imagegen(生成 3 方向交互稿图片);现有 review artifact 渲染与 hash 校验管…"]
134
- governance[["约束与可靠性<br/>提交与状态写回不能泄露用户本地无关改动或敏感信息。"]]
135
- delivery["验证与交接<br/>openprd guide 在需求前/评审中/实现中/收口后各阶段输出正确的当前步骤与下一步 · review.html 顶部…"]
144
+ experience["Agent 使用场景层<br/>用户在画布圈选原图并批注,点“标注修改请求”,Agent 读标注生成修订图并放回原图右侧 · Agent GET /api…"]
145
+ core["核心产品逻辑<br/>OpenPrd 画布目前只有单向的“发送给 Codex”整体交接:Agent 不能结构化读取用户在画布上的选区与标注,不能把生…"]
146
+ integrations["依赖与集成<br/>依赖 openprd canvas 本地服务 · 依赖 0.1.18 生图路由协议"]
147
+ governance[["约束与可靠性<br/>不写入敏感信息 · 画布数据留在本地项目目录"]]
148
+ delivery["验证与交接<br/>标注改图闭环端到端可走通并有测试覆盖 · selection/insert-image API 有集成测试 · 尺寸契约出现在…"]
136
149
  end
137
- users -->|"PM 打开终端或让 Agent 运行 openprd guide,看到 7 步…"| experience
150
+ users -->|"用户在画布圈选原图并批注,点“标注修改请求”,Agent 读标注生成修订图并放…"| experience
138
151
  experience -->|"产品动作与编排"| core
139
152
  core -->|"依赖与外部服务"| integrations
140
153
  core -.->|"策略、可靠性与合规"| governance
@@ -146,58 +159,67 @@ flowchart LR
146
159
  ## 需求
147
160
 
148
161
  - 功能需求:
149
- - guide 命令基于工作区状态推断 7 步流程位置
150
- - review.html 渲染 stepper
151
- - canvas /api/review-directions 返回方向元数据与图片
152
- - canvas 前端导入方向卡片组
162
+ - 选区状态随画布保存并可查询
163
+ - 插图 API 支持 left/right/below 摆放与 holder 替换
164
+ - 标注导出携带 annotationEdit 与源图形 ID 元数据
165
+ - 生图占位卡 handoff 记录携带宽高与比例契约
166
+ - hook 识别画布协同意图并注入闭环指引
153
167
  - 非功能需求:
154
- - 不新增外部依赖
155
- - guide 与画布 API 只读工作区状态,不写状态
156
- - 全部文案用 PM 能看懂的普通语言
168
+ - 界面文案面向普通用户
169
+ - API 只监听本地回环地址
170
+ - 新增代码有集成测试覆盖
157
171
  - 业务规则:
158
- - designDirections 仅在需求被判定涉及界面场景时要求;方向选定必须以 user-confirmed 来源写回;落选方向归档不删除。
172
+ - 只做已确认四项能力,不扩 UI 引擎替换
173
+ - 生图仍走 0.1.18 生图路由,不擅用付费 API
159
174
 
160
175
  ## 业务护栏
161
176
 
162
177
  - 成本来源:
163
- - imagegen 每方向一次调用,共 3 次;报告清理为本地文件操作无外部成本。
178
+ - 主要成本是生图调用次数与画布服务本地资源
164
179
  - 额度与限制:
165
- - docs-compact 单次只处理 docs/basic 下的标准文档;retention 默认保留最近 30 份报告可配置。
180
+ - 首版按单画布会话协同,不开放批量自动改图
166
181
  - 滥用防护:
167
- - docs-compact 重写稿默认写到 sibling draft 待确认,不直接覆盖原文档;retention 不触碰 evidence 目录中被 latest 报告引用的文件。
182
+ - insert-image 校验锚点与文件存在性,避免脏写
183
+ - API 仅本地回环访问
168
184
  - 监控信号:
169
- - standards verify 输出 docsQuality 结果;doctor 输出 .openprd 体积与报告数量提示。
185
+ - ops.json handoff 记录数、回填成功率、API 错误率
170
186
  - 报警阈值:
171
- - 单行超 300 字符 warning;prd.md 落后最新版本超过 20 个版本 warning;quality/reports 超过 200 份提示清理。
187
+ - 回填连续失败时提示用户检查画布服务状态
172
188
  - 止损动作:
173
- - 任一清理动作失败即中止并保留原状;归档失败回退为仅提示不移动。
189
+ - 异常时停止自动回填,保留原画布快照并回退到手动流程
174
190
 
175
191
  ## 约束、依赖与风险
176
192
 
177
193
  - 技术约束:
178
- - 改动集中在 src/standards.js、src/quality.js、src/openspec/change-lifecycle.js、src/review-presentation.js、src/html-artifacts.js,新增 src/docs-compact.js;skills 生成源同步 openprd-shared / openprd-frontend-design / command-catalog。
194
+ - 沿用 Excalidraw embed 与现有 canvas-sessions 文件存储
195
+ - Node 内置测试框架
196
+ - 不新增外部依赖
179
197
  - 合规要求:
180
- - 提交与状态写回不能泄露用户本地无关改动或敏感信息。
198
+ - 不写入敏感信息
199
+ - 画布数据留在本地项目目录
181
200
  - 依赖:
182
- - Codex 原生 imagegen(生成 3 方向交互稿图片);现有 review artifact 渲染与 hash 校验管线。
201
+ - 依赖 openprd canvas 本地服务
202
+ - 依赖 0.1.18 生图路由协议
183
203
  - 假设:
184
- - imagegen 由 Codex 原生 Image 2 提供,OpenPrd 只消费图片路径;review.html 静态打开,选择结果通过现有 canvas/browser handoff 或 review --mark 通道回传;巨行阈值默认 300 字符可配置。
204
+ - 用户接受标注截图作为修改指令载体
205
+ - Excalidraw selection 数据足以表达锚定需求
185
206
  - 风险:
186
- - 流程步骤定义与既有 lane/gate 概念不完全一一对应,guide 只做展示层推断,不改门禁行为
207
+ - Excalidraw tldraw 数据模型差异导致锚定语义需要适配
208
+ - 标注文字识别依赖 Agent 视觉能力
187
209
  - 开放问题:
188
- - 画布方向卡片是否需要内置投票/评分组件,留到下一轮看使用反馈
210
+ - 后续是否把画布协同扩展为独立 MCP server 另行评估
189
211
 
190
212
  ## 类型专项模块
191
213
 
192
214
  - 类型: Agent 使用场景专项
193
- - humanAgentContract: 用户决定是否进入 loop、是否要求 commit、是否接受 override;Agent 负责在安全前提下创建隔离执行环境,并维护状态与证据闭环。
194
- - autonomyBoundary: Agent 可以在 loop 运行前准备 worktree、检查脏状态并收集 touched files,但不能在用户未授权 commit 的情况下自动提交,也不能在高风险脏仓库里静默绕过门禁。
195
- - toolBoundary: 优先使用本地 Git OpenPrd loop 状态完成这次能力,不引入新的远端托管或发布前置依赖。
196
- - stateModel: change 进入 loop 后,先绑定隔离执行环境,再逐任务 run / verify / finish / commit,并把 worktree、branch、commit 与测试报告写回同一条状态链。
197
- - evalPlan: 通过 loop 单测、worktree / dirty repo 场景测试、状态持久化测试,以及一次真实隔离 worktree 的串行回归验证这次改动。
215
+ - humanAgentContract: 标注意图由人给出,修订图生成与回填由 Agent 自动完成;替换原图等破坏性动作仍需人确认。
216
+ - autonomyBoundary: Agent 可自动读选区、生成并旁位回填;不得覆盖或删除用户原图与标注。
217
+ - toolBoundary: 使用画布本地 HTTP API、生图路由选定的内置生图工具与 OpenPrd CLI。
218
+ - stateModel: 画布 scene/selection/ops 文件保存在 .openprd/harness/canvas-sessions/<session-key>/。
219
+ - evalPlan: 集成测试覆盖 selection/insert-image/标注导出元数据/hook 引导注入,最终跑 dev-check 与发布前四项验证。
198
220
 
199
221
  ## 交接
200
222
 
201
- - 负责人: Codex
202
- - 下一步: synthesize 生成 PRD 与 review.html 后走 change/tasks,再按任务实现并用 Codex CLI 本地桌面任务实测。
203
- - 目标系统: openprd CLI 自身仓库(harness-engineer/openprd)。
223
+ - 负责人: OpenPrd
224
+ - 下一步: 生成 change 与任务拆解后按序实现
225
+ - 目标系统: OpenPrd CLI 画布子系统
package/README.md CHANGED
@@ -469,6 +469,26 @@ OpenPrd 生成的 change 会包含标准化维护任务,change 校验也会检
469
469
  付费生图 API(例如 OpenAI / Stability key)。路由协议由 install manifest 和
470
470
  `.openprd/harness/runtime-environment.json` 的 `imageGenerationRouting` 字段承载。
471
471
 
472
+ ## 画布协同:标注改图闭环
473
+
474
+ `openprd canvas .` 打开与当前对话绑定的本地 Excalidraw 画布后,AI 生成的图会
475
+ 直接落到画布上,你可以在图上直接画圈、写字做标注,然后点击“发送给 Codex”,
476
+ 剩下的交给 Agent:
477
+
478
+ 1. **标注即指令**:画布检测到选区里同时有原图和你的手绘标注时,会把这次交接
479
+ 标记为标注改图请求,把标注截图和结构化元数据(原图 ID、标注 ID)一起交给
480
+ Agent,Agent 把标注当作修改指令生成新图。
481
+ 2. **旁位回填,不覆盖原图**:Agent 通过 `POST /api/insert-image` 用原图作 anchor
482
+ 把新图放到旁边(右/左/上/下可选),你可以左右对比原图和新版,再继续在新图
483
+ 上标注,形成多轮迭代闭环。
484
+ 3. **结构化读画布**:Agent 通过 `GET /api/selection` 读到你正在圈选哪些元素的
485
+ ID、坐标、尺寸和文本,不再只靠截图猜。
486
+ 4. **尺寸契约**:AI 生图占位卡的宽高和比例会作为 `sizeContract` 写进生图提示,
487
+ 生成的图片按占位卡比例出图,回填不变形。
488
+
489
+ 唤起方式:在对话里自然地说“打开画布一起看”“我在画布上标注了,按标注改图”
490
+ 这类话,hook 会自动注入画布协同指引;也可以直接运行 `openprd canvas . --daemon --open`。
491
+
472
492
  ## 效果图与截图拼图对比,自动优化
473
493
 
474
494
  当界面任务已经有效果图、设计稿、用户给图或 Agent 自己生成的 mock 时,Agent
package/README_EN.md CHANGED
@@ -537,6 +537,31 @@ Cost guardrail: OpenPrd never silently calls the user’s own paid image APIs
537
537
  The routing contract ships in the install manifest and
538
538
  `.openprd/harness/runtime-environment.json` under `imageGenerationRouting`.
539
539
 
540
+ ## Canvas collaboration: the annotation-to-revision loop
541
+
542
+ `openprd canvas .` opens a local Excalidraw canvas bound to the current
543
+ conversation. AI-generated images land on the canvas, you draw circles and
544
+ notes directly on top of them, click “Send to Codex”, and the agent takes over:
545
+
546
+ 1. **Annotations become edit instructions**: when a selection contains both an
547
+ image and hand-drawn annotations, the handoff is tagged as an
548
+ annotation-edit request with structured metadata (source image IDs,
549
+ annotation IDs), and the agent treats the marks as revision instructions.
550
+ 2. **Side-by-side insertion, never overwriting**: the agent calls
551
+ `POST /api/insert-image` with the original image as the anchor to place the
552
+ revised image beside it (right/left/above/below), so you can compare both
553
+ versions and annotate the new one for another round.
554
+ 3. **Structured canvas reads**: `GET /api/selection` gives the agent the IDs,
555
+ coordinates, sizes, and text of whatever you selected — no more guessing
556
+ from screenshots.
557
+ 4. **Size contract**: placeholder card width/height/aspect ratio travel as a
558
+ `sizeContract` inside the generation prompt, so images come back at the
559
+ right ratio without distortion.
560
+
561
+ To invoke it, just say things like “open the canvas” or “I annotated the image
562
+ on the canvas, revise it accordingly” — the hook injects the collaboration
563
+ guidance automatically. You can also run `openprd canvas . --daemon --open`.
564
+
540
565
  ## Auto-optimized reference-to-screenshot comparison
541
566
 
542
567
  When UI work already has a reference effect image, design image, user-provided
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openprd/cli",
3
- "version": "0.1.18",
3
+ "version": "0.1.19",
4
4
  "description": "AI-native PRD workspace and lifecycle CLI",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -751,6 +751,8 @@ export function renderCommandCatalog() {
751
751
  '- `openprd canvas . --thread <id> --thread-title <name> --daemon --open --open-target codex-browser`:持久开启对话协同画布,本地页面按当前 thread/session ID 保存到 `.openprd/harness/canvas-sessions/<session-key>/`,title/name 只用于右侧“当前对话”展示和 daemon 透传,避免多个 Codex / Claude / Cursor 窗口串用同一块画布。若 `runtime-environment.json` 已有当前 hook/session 证据,可省略 `--thread`,若证据里有 `threadTitle/conversationTitle/sessionTitle` 会自动显示;证据不足时必须显式传 `--thread` 或 `--session`,知道标题时同步传 `--thread-title` 或 `--session-title`。`--open-target codex-browser` 表示不要调用系统 `open`,由 Codex Agent 使用右侧 Browser 工具打开返回地址;已验证的 Agent 侧最小路径是 Browser plugin + `node_repl`:`setupBrowserRuntime -> agent.browsers.get("iab") -> visibility.set(true) -> browser.tabs.new() -> tab.goto(url)`。缺少 Codex Browser 证据时 `auto` 会回退系统浏览器。用户点击“发送给 Codex”会在 `ops.json` 里保存 `handoff` 记录,并默认通过本机 Codex app-server `thread/resume -> turn/start` 自动投递到绑定 thread,同时在 `relays/` 留 payload/status/log;只有自动投递被关闭、明确失败或长时间未启动时,才追加 `agent-foreground-relay` 待发送项,由当前 Agent 用 `openprd canvas . --bridge-outbox --claim next` 领取后调用线程工具发送,并用 `--bridge-sent` 或 `--bridge-failed` 回写状态。浏览器网页不能直接调用 Codex Agent 工具;OpenPrd 不提供自己的生图 API,AI 生图仍由 Codex 原生 Image 2/imagegen 完成。不带 `--daemon` 是前台调试模式,会随当前命令结束而停止;停止后台服务使用 `openprd canvas . --thread <id> --stop`。',
752
752
  '- Codex 画布协同模式:用户可在画布拖动空白卡片,Agent 可把 Image 2 生成图或本地图片通过本地 canvas service 推入画布并替换选中卡片;用户圈选、标注或选择元素后,可导出图片到该 session 的 `exports/`,并由默认 app-server relay 把文本和本地图片路径提交到绑定线程;Agent 前台接力队列只作为自动投递不可用时的兜底。OpenPrd 不提供自己的生图 API,AI 生图仍由 Codex 原生 `imagegen` / Image 2 完成。',
753
753
  '- 画布评审协同:画布右栏顶部“评审协同”区显示当前 7 步流程位置(读取 `/api/guide`),“导入评审方向”按钮会把当前 review 的 designDirections 交互方向连图带说明摆上画布(读取 `/api/review-directions`,已选定方向会标出);用户可直接在方向图上圈选、批注,再用“发送给 Codex”把反馈回传当前对话。引导用户对交互稿做视觉级反馈时优先走这条路径。',
754
+ '- 画布结构化协同接口:Agent 不要只靠截图猜画布状态。要知道用户正在圈哪些元素时用 `GET /api/selection` 读取选中元素的 ID、类型、坐标、尺寸、文本和整体 bounds;要把新图放到指定元素旁边时用 `POST /api/insert-image` 带 `anchorElementId` + `placement`(right/left/below/above),不要覆盖原图;回填 AI 生图占位卡仍用 `POST /api/images` 带 `placeholderId`。',
755
+ '- 画布标注改图闭环:handoff 的 `selection` 为 `annotation-edit` 或带 `sourceImageElementIds` / `annotationElementIds` 时,说明用户在原图上画了标注要求改图。把截图里的标注当修改指令,生成修改后的新图,再用 `POST /api/insert-image` 以原图为 anchor 放到旁边,方便用户对比原图与新版并继续下一轮标注迭代。handoff 或占位卡带 `sizeContract`(width/height/aspectRatio)时,生成图片必须按该宽高比出图,避免回填变形。',
754
756
  '- `openprd change . --generate --change <id>`:把 PRD 转成 change。',
755
757
  '- `openprd change . --validate --change <id>`:校验 change 结构。',
756
758
  '- `openprd tasks . --change <id>`:查看当前 dependency-ready 任务。',