diff --git "a/.autoforge/docs/\345\255\265\345\214\226\345\217\260\346\267\261\345\214\226/\345\216\237\345\236\213\345\233\276.html" "b/.autoforge/docs/\345\255\265\345\214\226\345\217\260\346\267\261\345\214\226/\345\216\237\345\236\213\345\233\276.html" new file mode 100644 index 0000000..8552d4b --- /dev/null +++ "b/.autoforge/docs/\345\255\265\345\214\226\345\217\260\346\267\261\345\214\226/\345\216\237\345\236\213\345\233\276.html" @@ -0,0 +1,530 @@ + + + + + +孵化台深化 · 页面布局原型 + + + + +
AutoForge · Incubator 2.0
+

孵化台深化 · 页面布局原型

+

在既有 BlueprintStudio「对话面 | 草稿产物」双栏骨架上叠加三类新元素:工具活动链(codegraph 检索可见)、追问卡(真交互·断点续跑)、评估报告卡(默认多轮自评);原型设计仍归交付流水线页,孵化台跳转+选中关联核心文档(DESIGN.md / PRD / 技术规格)据此生成更准提示词。全部使用项目 src/index.css 的 Ember token,未引入任何新色。

+ + +
+
01主工作台 · 起草进行中对话面在跑工具循环,草稿产物实时成型;PRD 标签页激活
+
+
+
+
+
支付渠道接入与对账
+
FORGE · 大需求改动
+
+ 起草中 +
+ + +
+
+ +
+
◎ 起草对话spec_writer · claude
+
+
接入微信支付 + 支付宝,要有对账文件下载和差异告警。参考现有 order 模块。
+ +
+
起草 Agent
+
已检索仓库现状:订单与支付分离在 order/billing/。我把渠道抽象、对账任务、差异告警拆进了 PRD 与任务清单,规格里锁定了幂等键约束。
+
+ ◱ codegraph search "payment channel" · 7 命中 + ◱ codegraph impact billing::reconcile · 影响 4 文件 + ▤ read_project_file billing/mod.rs + ◇ read_spec api +
+
+ +
+
◈ 自动评估 · 第 1 轮
82/100 · 达标
+
+
PRD 完整度
88
+
规格可执行
80
+
任务粒度
85
+
代码贴合度
76
+
+
仍需补强:对账差异的重试/告警阈值未量化;建议把「渠道密钥存储」显式绑定到 secrets.rs 信封加密规格。
+
+ +
正在依据评估意见补充对账阈值规格
+
+
+
分析后端编码 Agent 读仓库
+
+ + +
+
+
+ +
+
+ PRD + 规格 · 4 + 任务 · 6 +
+
+
+

支付渠道接入与对账

+

背景与目标

+

现有 billing/ 仅记账,缺渠道抽象与对账。目标:接入微信/支付宝,日终对账并对差异告警。codegraph 佐证

+

功能范围

+
    +
  • 统一渠道抽象 PaymentChannel(下单 / 查询 / 退款)
  • +
  • 对账文件拉取 + 与本地流水 diff
  • +
  • 差异分级告警(金额 / 状态 / 缺单)
  • +
+

非目标

+
  • 不做多币种;不接海外渠道
+

验收标准

+
    +
  • 下单幂等:同一 out_trade_no 重复请求不重复扣款
  • +
  • 对账 T+1 生成差异报告,缺单/金额差 100% 命中告警
  • +
+
+
+
+
+
+
+
工具活动链
每条 assistant 气泡下挂一排 chip,显示 codegraph 检索 / read_file / read_spec 的命中数,让"它凭什么这么写"可见。
+
评估报告卡
落稿即自动评估,四维打分 + 待补强项。低于阈值会自动再修一版(上限 2 轮)。
+
来源标注
PRD 里由代码检索佐证的结论带 codegraph 佐证 标签,可追溯。
+
去原型设计
头栏次级按钮「去原型设计 ↗」跳到交付页设计阶段(见第 03 帧),原型不在孵化台生成。
+
+
+ + +
+
02追问 · 断点续跑Agent 遇歧义调 ask_user 挂起,草稿转「待答」,输入框锁定直到答复
+
+
+
+
支付渠道接入与对账
FORGE · 大需求改动
+ 待答复 +
+ + +
+
+
+
◎ 起草对话已挂起 · 等待你的答复
+
+
接入微信支付 + 支付宝,要有对账和差异告警。
+
+
起草 Agent
+
开始拆解前有一处会显著影响架构,需要你先定一下。
+
◱ codegraph callers billing::ledger · 3 处
+
+ +
+
✦ 需要你的裁定 · 追问 1/1
+
对账差异发现后,系统应自动发起补偿/冲正,还是仅告警等人工处理?这决定要不要引入补偿事务与审批节点。
+
+ 仅告警 + 人工处理 + 自动补偿(需审批) + 按金额阈值分流 +
+
+ + +
+
+
+
+
⚠ Agent 正等待上方追问的答复,答复后将从断点继续起草。
+
+
+
+
+
PRD规格 · 2任务 · 3
+
+
+

草稿部分成型

+

Agent 在补齐结构前暂停以确认对账策略。答复后将据此决定是否新增「补偿事务」规格与「差异审批」任务。

+
?
补偿事务约束 (待裁定后决定是否加入)
依赖上方追问答复
+
+
+
+
+
+
+
终止型工具 ask_user
Agent 调 ask_user 即收口本轮、落 pending_question、状态转 awaiting_answer——不冻结 Rust future。
+
快选 + 自由输入
追问可带 options 做一键快选,也可自由补充;答复走 answer_blueprint_question。
+
断点续跑
答复写入 transcript 后重进同一工具循环,天然幂等,无需保存运行时状态。
+
输入锁定
待答期间主输入框禁用,避免与追问答复通道混淆。
+
+
+ + +
+
03跨页跳转联动孵化台定稿 → 一键跳到交付流水线「设计」阶段并预选该项目;原型生成仍在交付页
+ + +
+
+
+
支付渠道接入与对账
FORGE · 大需求改动
+ 已定稿 · 评估 88 +
+ + +
+
+ PRD / 4 规格 / 6 任务已定稿。点头栏「去原型设计 ↗」→ 携 projectId(+已编码则带 issueId)跳转交付页。 +
+
+ + +
+
goToDelivery(projectId, stage:'design')
+
+
+ + +
+
+ 交付流水线 + 支付网关 · 已选中 +
+ 从孵化台跳入 +
+
+ 03设计提示词 + 07安全审计 + 08部署 + 09归档 +
+
+
+
原型设计提示词
由 DESIGN.md + 项目技术规格生成 design.md 级 10 段结构,可直接投喂设计工具。
+ 目标:OpenDesign ▾ + +
+
+
支付网关 产品界面 · 设计提示词OpenDesign
+ 复制编辑 + 在设计工具打开 ↗ +
+
# 设计提示词 · 为「支付网关」设计对账工作台 + +1. Overview — 温暖深色工业风,唯一强调色 ember 橙;三栏:渠道侧栏 | 差异列表 | 详情。 +2. Colors — --ember #e8772e 主操作;--green 已对平 / --amber 差异待处理 / --red 缺单;表面 --bg→--bg-3 分层。 +3. Typography — Archivo 标题 / Noto Sans SC 正文 / JetBrains Mono 金额与单号(等宽对齐)。 +8. Screens & States — 空态「今日已对平」;加载骨架;差异行展开对比;告警 toast。 + …(省略 4–7 / 9 / 10 段)
+
+
+
+ +
+
解耦
需求分析(孵化台)与原型设计(交付页)分属两件事,各自独立;不互相塞面板。
+
跳转 + 选中
复刻现有 goToAuditStage / blueprintTarget 深链:切页 + setProjectId + setStage('design')。
+
零后端改动
原型仍用交付页 generate_prototype_prompt,联动是纯前端 target prop,不新增 IPC / 迁移列。
+
交付页不动
design 节点、prototype_prompts 表、OpenDesign 启动器全部保留原样,仅加一个 target 预选入参。
+
+
+ + +
+
04关联核心文档 · 按文档生成设计阶段进入后,勾选项目当前核心文档作为生成依据;从孵化台跳入时 PRD 自动关联
+
+
+ 交付流水线 · 设计 + 支付网关 +
+ PRD 来自孵化台草稿 +
+
+
+
关联文档
勾选的文档会作为「必须严格遵循」的上下文喂给生成,越贴合真实需求/规格越准。
+
预算 12.4K / 18K
+
+ +
+
◈ 设计契约
+
+
+
DESIGN.md
熔炉/余烬 Ember 深色设计系统 · 颜色/字体/组件 token 全量
+
~8.0K
+
+
+ +
+
✦ 需求文档(PRD)
+
+
+
支付渠道接入与对账 · PRD来自孵化台
PRD + 4 规格 + 6 任务 · 背景/功能范围/验收标准
+
~2.6K
+
+
+ +
+
▤ 技术规格
+
+
+
architecture 影响界面结构
双审核节点 / IPC 单一入口 / 工作区写入限制 …
+
~1.1K
+
+
+
+
api
IPC 调用规范 / 事件推送 autoforge://event / 输入安全过滤
+
~0.7K
+
+
+
+
testing
IPC 功能测试环境 / 合并前自动测试 …
+
~0.6K
+
+
+ +
+
◇ 工作区文档 · .autoforge/
+
+
+
docs/对账界面调研.md
竞品对账台交互调研(默认不选,按需勾)
+
~1.8K
+
+
+
+
specs/接口定义.md
对账拉单 / 差异回调接口草案
+
~1.2K
+
+
+ +
+
生成设计提示词
将以上 4 份勾选文档(≈12.4K)拼为设计上下文,界面/状态据 PRD 展开。
+ 目标:OpenDesign ▾ + +
+
+
+
+
目录来源
list_prototype_doc_sources 汇总:DESIGN.md + 孵化台 PRD + project_specs 分类 + .autoforge 工作区文件。
+
智能默认
DESIGN.md 必选;跳入草稿的 PRD 自动勾(绿色「来自孵化台」);architecture/api 默认勾,其余按需。
+
token 预算
每条估 token、总量封顶 ~18K;单条 ~5K 截断,避免灌爆 prompt。守卫读 + 注入过滤。
+
更准生成
feature 标题/描述从草稿派生,界面据真实 PRD 而非「XX 产品界面」;doc_refs 空则回落旧行为。
+
+
+ +
+ 说明 — 本原型仅演示布局与信息架构,非最终像素稿;所有颜色/字号/圆角/阴影均引用项目 src/index.css 变量,落地时复用 .panel / .chip / .seg / .btn / proj-select 等既有类,不另起样式体系。图标以字符占位,实现走 <Icon />。 +
+ + + diff --git "a/.autoforge/docs/\345\255\265\345\214\226\345\217\260\346\267\261\345\214\226/\345\216\237\345\236\213\345\233\276.png" "b/.autoforge/docs/\345\255\265\345\214\226\345\217\260\346\267\261\345\214\226/\345\216\237\345\236\213\345\233\276.png" new file mode 100644 index 0000000..802bb15 Binary files /dev/null and "b/.autoforge/docs/\345\255\265\345\214\226\345\217\260\346\267\261\345\214\226/\345\216\237\345\236\213\345\233\276.png" differ diff --git "a/.autoforge/docs/\345\255\265\345\214\226\345\217\260\346\267\261\345\214\226/\350\256\276\350\256\241\346\226\271\346\241\210.md" "b/.autoforge/docs/\345\255\265\345\214\226\345\217\260\346\267\261\345\214\226/\350\256\276\350\256\241\346\226\271\346\241\210.md" new file mode 100644 index 0000000..c32bbfb --- /dev/null +++ "b/.autoforge/docs/\345\255\265\345\214\226\345\217\260\346\267\261\345\214\226/\350\256\276\350\256\241\346\226\271\346\241\210.md" @@ -0,0 +1,230 @@ +# 孵化台深化 · 设计方案 + +> 状态:**设计定稿(待评审)** · 未改任何生产代码 +> 目标:把孵化台(内部命名仍 `blueprint_*`)从「单轮吐 JSON」升级为**带控制通道的 Agent 起草会话**—— +> 工具循环检索代码、中途真追问(断点续跑)、落稿默认多轮自评、上下文沉淀成账本并带进编码工单。 +> 原型设计提示词**保留在交付流水线页**(需求分析与原型设计本就分属两件事,解耦), +> 孵化台与交付页之间只做**页面跳转 + 选中**联动。 +> +> 配套原型:本目录 [`原型图.html`](./原型图.html)(可浏览器打开)与 [`原型图.png`](./原型图.png)(三帧布局)。 + +--- + +## 1. 背景与现状 + +孵化台当前起草/打磨是**单轮全稿再生**(`commands/blueprint.rs`): + +- `start_blueprint_draft` / `refine_blueprint_draft` → 一次 LLM(`spec_writer`)或编码 Agent 调用 → + 强制吐出整份 `{prd_markdown, specs, tasklist}` JSON。 +- 上下文:项目上下文(claude.md/agents.md/目录树)+ 勾选 `ref_files` + 最近 12 条对话,**每轮重灌**。 +- `run_system_role_text` 其实已能按 agent capabilities 装配工具循环,但 prompt 强制「严格只输出 JSON、单轮出全稿」, + 把工具、追问、评估的空间全堵死。 + +**差距** + +| 诉求 | 现状 | 缺口 | +|---|---|---| +| 多轮 + 中途追问 | 只能「你说→它出整稿」 | Agent 不能反问,只能猜 | +| 默认多轮评估 | 无 | 没有 critic / 自评回路 | +| 精巧上下文共享 | 每轮重灌、无沉淀 | 无跨轮/跨稿账本;产物未带进编码工单 | +| codegraph + 其他 tool | 理论可配,但 prompt 堵死 | 未接 codegraph、未开放工具循环 | +| 直接生成原型提示词 | 仅交付页按项目生成 | 未落孵化台、未 grounding 到本稿 PRD | + +--- + +## 2. 已锁定的产品决策(用户拍板) + +| # | 决策点 | 结论 | +|---|---|---| +| ① | 原型设计提示词的归属 | **保留在交付流水线页**(需求分析 ≠ 原型设计,解耦);不移进孵化台、交付页设计节点**不删** | +| ② | 孵化台与交付页的联动 | 仅做**页面跳转 + 选中**:孵化台一键跳到交付页「设计」阶段并预选该项目(沿用现有 `target` 深链模式) | +| ③ | 原型设计提示词生成时机 | 维持交付页现有的**显式按钮**生成(不新增自动/Agent 主动产原型) | +| ④ | 中途追问的交互模型 | **真交互 · 断点续跑**(`ask_user` 挂起→人答→从断点续跑) | + +> 变更记录:初版曾定「移除交付页节点、原型移进孵化台」,评审后回退——原型设计与需求分析解耦更清晰,改为跨页跳转联动。 + +--- + +## 3. 目标架构 + +### 3.1 起草 Agent 工具集 + +一轮建模成一次**带控制通道的 Agent 会话**,复用既有工具循环引擎 +(`agents/llm.rs::run_agent_text_with_tools` 流式版 + `agents/tools/ToolRegistry`): + +``` +起草 Agent(tool-loop 流式,system_kind=spec_writer) +├─ 检索类(只读 grounding) +│ ├─ codegraph_search / explore / callers / impact ← 新接 +│ ├─ read_project_file / list_specs / read_spec ← 已有 +│ └─ web_search ← 已有 +├─ 控制类(新增) +│ ├─ ask_user(question, options?) → 【终止本轮】落 pending question,转 awaiting_answer +│ └─ update_draft(prd, specs, tasklist, summary) → 【终止本轮】提交结构化修订 +└─ 末轮自由文本 = 给用户的对话回复 +``` + +> 决策③:**不提供 `write_prototype_prompt` 工具**——原型设计不归孵化台,只在交付页显式生成(见 §3.5)。 + +### 3.2 追问:真交互 · 断点续跑(关键实现路线) + +不冻结 Rust future,把 `ask_user` 设为**终止型工具**(类比 `final_synthesis`): + +1. 循环跑到 Agent 调 `ask_user` → 立即收口:问题写入 `blueprint_messages(role='question')`, + 草稿置 `status='awaiting_answer'`、`pending_question` 存问题文本(+可选 options),返回前端。 +2. 前端渲染追问卡(自由输入 + 可选项快选)。用户答复 → 新命令 + `answer_blueprint_question(draft_id, answer)` 写 `role='answer'`,清 `pending_question`,**重新进入同一工具循环**。 +3. 因每轮 transcript 都从 `blueprint_messages` 重建,「续跑」= 用累积到含 Q&A 的完整 transcript 再起一次 loop, + **无需跨 IPC 保存运行时状态**,天然幂等。 + +草稿列表因此新增 `awaiting_answer`(待答)派生态与角标。 + +### 3.3 默认多轮评估 + +- 每次 `update_draft` 落稿 → 自动跑 critic(新 `system_kind='spec_grader'`),四维打分 + (PRD 完整度 / 规格可执行性 / 任务粒度 / 代码贴合度)+ 列待补强项,写 `eval_json` + `blueprint_messages(role='eval')`。 +- 低于阈值且还有轮次预算(默认上限 2)→ critique 回喂起草 Agent 自动修一版;到顶或达标则停。 +- 设置项(复用 `system::load_*` 风格):评估开关 / 轮数 / 阈值。 + +### 3.4 上下文账本(跨轮 + 跨阶段) + +每稿持久化一份 ledger(新增 `context_json` 列):pinned 文件、codegraph 命中缓存、 +已答问题决策、工具产出摘要、eval 结论。 + +- **跨轮**:不再每轮重灌全量,超限用 `context_compressor` 压缩旧轮。 +- **跨阶段**:`compose_work_context`(编码开发注入)追加「已答决策 + codegraph 影响面 + 评估通过项」, + 执行 Agent 直接继承孵化期全部 grounding,不重复摸索。 + +### 3.5 原型设计提示词:留在交付页 · 关联核心文档 · 按文档生成 + +原型设计提示词仍归 `pages/Delivery.tsx` 的「设计」阶段(不移进孵化台)。本次**重点**是: +进入设计阶段后,让生成**关联到项目当前的几个核心文档**,据此产出更准确、更贴合真实需求与规格的提示词—— +而非当前那种「只吃 DESIGN.md + project_specs 前 5 条、标题写死『XX 产品界面』」的粗放种子。 + +#### A. 页面跳转 + 选中(深链,携带草稿) + +复刻既有 `goToAuditStage` / `blueprintTarget` 深链模式,并**多带一个 `draftId`**,让设计阶段能自动关联该大需求的 PRD: + +1. `components/BlueprintStudio.tsx` 头栏「去原型设计 ↗」→ `onOpenDelivery(projectId, { stage:'design', draftId, issueId })`。 +2. `App.tsx` 加 `deliveryTarget` + `goToDelivery(projectId, stage, { draftId?, issueId? })`(切页 + sessionStorage)。 +3. `pages/Delivery.tsx` 加 `target?: { projectId; stage?; draftId?; issueId? }`:收到即 `setProjectId` + `setStage('design')` + + 拉取文档目录并**默认勾选该 `draftId` 的 PRD**,用完 `onTargetConsumed`。 + +#### B. 核心文档目录(可关联的「几个核心文档」) + +新命令 `list_prototype_doc_sources(project_id, draft_id?)` 汇总一个项目当前所有可作为设计依据的核心文档, +统一成 `DocSource { kind, ref, title, summary, est_tokens, default_on }`,按四组呈现: + +| 组 | kind | 来源 | 默认 | +|---|---|---|---| +| 设计契约 | `design_md` | 仓库 `DESIGN.md`(`read_repo_design` 现有多路径探测) | ✅ 必选 | +| 需求文档 | `blueprint_prd` | 孵化台草稿的 PRD + 规格 + 任务(`blueprint_drafts`,ref=draft_id) | ✅ 当从孵化台跳入 | +| 技术规格 | `spec:` | `project_specs` 按分类聚合(tech_stack/architecture/coding/api/testing;含 db+file 源,读 `injection≠off`) | architecture / api 默认✅ | +| 工作区文档 | `workspace:` | `.autoforge/docs`、`.autoforge/specs` 下文件(`list_workspace_files`) | 默认❌,按需勾 | + +#### C. 按选中文档生成(`generate_prototype_prompt` 增强) + +`generate_prototype_prompt` 增参 `doc_refs: Vec` + 可选 `draft_id`: + +- 逐条读取选中文档(守卫读取 + `has_obvious_injection` 过滤 + 单条 ~5K / 总量 ~18K 封顶), + 按组打标题拼进 `design_ctx`:`# 设计契约(DESIGN.md)` / `# 需求文档(PRD)` / `# 技术规格·architecture` / `# 工作区文档:`。 +- 带 `draft_id` 时,`feature_title` / `feature_desc` 从草稿标题 + brief 派生(而非 `项目名 + "产品界面"`), + 界面/状态/流程据真实 PRD 展开——这是「更准确」的核心来源。 +- **向后兼容**:`doc_refs` 为空 → 回落现有行为(DESIGN.md + project_specs 前 5),旧调用不受影响。 + +> 效果:孵化台把大需求梳成 PRD → 一键跳到设计阶段,PRD + DESIGN.md + architecture/api 规格已自动勾上, +> 可再手动增减工作区文档 → 生成的提示词直接引用真实需求与技术约束,而非泛化模板。两页职责仍解耦,靠深链 + 文档目录联动。 + +--- + +## 4. 页面布局(原型四帧) + +见 [`原型图.png`](./原型图.png)。孵化台沿用 BlueprintStudio「对话面 46% | 草稿产物 54%」双栏骨架,交付页沿用其阶段骨架,叠加: + +| 帧 | 场景 | 新增元素 | +|---|---|---| +| 01 主工作台·起草进行中 | 工具循环在跑,草稿实时成型 | 工具活动链(codegraph chip)、评估报告卡、来源标注、流式思考条 | +| 02 追问·断点续跑 | Agent 挂起等答复 | 追问卡(快选+自由输入)、输入框锁定条、状态 `待答复` | +| 03 跨页跳转联动 | 定稿后去做原型设计 | 孵化台头栏「去原型设计 ↗」按钮 → 交付页「设计」阶段自动选中该项目 + 携 draftId | +| 04 关联核心文档生成 | 设计阶段按文档生成 | 「关联文档」勾选面板(设计契约/需求 PRD/技术规格/工作区文档 + token 预算),据选中文档生成更准提示词 | + +设计约束:所有颜色/字号/圆角/阴影引用 `src/index.css` 变量;落地复用 +`.panel / .chip / .seg / .btn / .field / proj-select / mention-pop`;图标走 ``; +每屏至多一个 `.btn-primary`(编码开发 / 生成);追问卡用语义色 `--amber`,评估用 `--green`,均非装饰。 + +--- + +## 5. 改动面清单 + +| 层 | 文件 | 改动 | +|---|---|---| +| 迁移 | `migrations/00NN_incubator_deepen.sql` | `blueprint_drafts` 加 `eval_json / pending_question / context_json`(均 `NOT NULL DEFAULT ''`);status 增 `awaiting_answer`(值域约定,不改列)。**无原型相关列** | +| 事件 | `core/event.rs` | 新增 `AppEvent::BlueprintThinking { draft_id, kind, text }`(唯一出口 `event::emit`;复用编码 Agent 进群聊的 LogChunk→事件流式模式) | +| 后端 | `commands/blueprint.rs` | 起草改走工具循环;新工具 `ask_user` / `update_draft`;critic 回路;新命令 `answer_blueprint_question`;`compose_work_context` 追加账本。**无 `generate_blueprint_prototype`** | +| 后端 | `agents/tools/*` | codegraph 纳入起草 Agent 的 `ToolRegistry`(push 预查 + pull 工具);产出过 `has_obvious_injection`(沿用 `reads_local_source` 豁免) | +| 角色 | `agents/roles.rs` | 新 `spec_grader` 内置角色;改造 `spec_writer` prompt(放开工具/追问,去掉「只输出 JSON」) | +| 后端 | `commands/prototype.rs` | 新命令 `list_prototype_doc_sources`;`generate_prototype_prompt` 增参 `doc_refs` + `draft_id`,按选中文档拼 `design_ctx`(守卫读 + 注入过滤 + 分条/总量封顶)、从草稿派生 feature 标题/描述;空 `doc_refs` 回落旧行为 | +| 注册 | `commands/mod.rs` / `lib.rs` / `services/index.ts` | 新命令四步登记(`answer_blueprint_question` / `list_prototype_doc_sources`;`generate_prototype_prompt` 封装加 `doc_refs`/`draft_id`) | +| 前端 | `components/BlueprintStudio.tsx` | 追问卡 + 答复框、工具活动 chip、评估报告卡、流式思考;头栏加「去原型设计 ↗」跳转按钮(携 draftId) | +| 前端 | `App.tsx` | 加 `deliveryTarget` 状态 + `goToDelivery(projectId, stage, {draftId?, issueId?})`,透传给 `DeliveryPage`(复刻 `goToAuditStage`) | +| 前端 | `pages/Delivery.tsx` | 加 `target` 入参预选(`setProjectId`+`setStage('design')`+拉文档目录、默认勾 draft PRD);设计阶段加「关联文档」勾选面板 + token 预算条,生成按选中 `doc_refs` 走 | + +--- + +## 6. 数据模型 / API 契约 + +### 6.1 迁移(示意) + +```sql +-- 00NN_incubator_deepen.sql(不可改已有迁移,仅新增) +ALTER TABLE blueprint_drafts ADD COLUMN eval_json TEXT NOT NULL DEFAULT ''; +ALTER TABLE blueprint_drafts ADD COLUMN pending_question TEXT NOT NULL DEFAULT ''; +ALTER TABLE blueprint_drafts ADD COLUMN context_json TEXT NOT NULL DEFAULT ''; +-- 无原型相关列:原型设计提示词仍归 prototype_prompts 表(交付页),孵化台不落原型数据。 +-- status 值域新增 'awaiting_answer'(自由字符串列,无需 DDL) +-- blueprint_messages.role 值域新增 'question' / 'answer' / 'eval' / 'tool'(自由字符串,无需 DDL) +``` + +### 6.2 新增/变更 IPC 命令 + +| 命令 | 入参 | 出参 | 说明 | +|---|---|---|---| +| `refine_blueprint_draft`(变更) | `draft_id, instruction, backend` | `BlueprintDraftView` | 内部改走工具循环;可能返回 `awaiting_answer` 态(含 pending_question) | +| `answer_blueprint_question`(新) | `draft_id, answer` | `BlueprintDraftView` | 写 answer、清 pending、断点续跑 | +| `list_prototype_doc_sources`(新) | `project_id, draft_id?` | `Vec` | 汇总可关联核心文档目录(设计契约/需求 PRD/技术规格/工作区文档 + summary + est_tokens + default_on) | +| `generate_prototype_prompt`(变更) | `project_id, issue_id?, tool_target?, draft_id?, doc_refs: Vec` | `PrototypePrompt` | 按选中 `doc_refs` 读文档拼 `design_ctx`;带 `draft_id` 时从草稿派生 feature;`doc_refs` 空则回落旧行为(向后兼容) | + +``` +DocSource { kind: "design_md"|"blueprint_prd"|"spec"|"workspace", + ref: String, // draft_id / category / rel_path(design_md 为空) + title: String, summary: String, est_tokens: i64, default_on: bool } +``` + +> 孵化台↔交付页联动是深链(`goToDelivery` + `target` prop,携 draftId)+ 上述两个原型命令; +> `prototype_prompts` 表、OpenDesign 命令/启动器/设置**不动**。 + +事件:`autoforge://event` 频道下 `AppEvent::BlueprintThinking`,前端订阅渲染流式思考/工具活动。 + +--- + +## 7. 铁律自检(对照 CLAUDE.md) + +- 业务逻辑(`agents/`、`tasks/`、`core/`、新增 service fn)**不出现 Tauri 类型**;事件**只走** `event::emit`;命令保持薄包装。 +- codegraph/工具产出视为不可信外部输入,回灌前过 `has_obvious_injection`(`reads_local_source` 豁免沿用)。 +- 内部命名继续留 `blueprint_*`(避免无谓 churn);迁移文件**只增不改**。 +- UI 只引用 `src/index.css` 变量与既有类,不硬编码色值/字号,不用原生 `