// docs / generate-project-trace
Generate Project:Skill 与 Prompt 拼装 Trace
runGenerateProject 流水线里组件 skill 如何选出、各 Agent 的 system/user 如何拼接,以及日志里能看到什么。 对照代码:runGenerateProject.ts、steps/pageImplementAgent.ts、shared/agentRuleBundles.ts、shared/files.ts。
docs/architecture-section-prompts.md。steps/、prompts/ 等目录均相对于 ai/flows/generate_project/,除非写为 ai/prompts/…。1. 总览:与提示词相关的阶段
| 阶段 | System 主要来源 | User 主要来源 |
|---|---|---|
| analyze_project_requirement | steps/analyzeProjectRequirement.md + outputJson | 用户 prompt / 蓝图输入 |
| plan_project | steps/planProject.agent.md + outputJson | 规范化蓝图 JSON |
| generate_project_design_system | frontend + steps/generateProjectDesignSystem.md | 蓝图 + 可选 styleGuide |
| apply_project_design_tokens | frontend + steps/applyProjectDesignTokens.md | globals + 设计系统 |
| preselect_skills(内联 selector) | 短 system | 各 section 的 skill metadata(无正文) |
| generate_section | 见 §3 | 见 §4 |
| architect_agent | frontend + steps/architectAgent.md + 工具循环 | 蓝图 + design-system + 现有文件 |
| page_implement_agent / compose_page | frontend + steps/pageImplementAgent.md / steps/composePage.md | 已生成文件 + chrome 契约(layout.tsx) |
| repair_build | frontend + steps/repairBuild.md + outputJson | 构建日志 + 相关文件 |
2. Skill:预选与正文加载
- 预选
preselectSkillsForSections:按section.type用discoverSkillsBySectionType收集候选;一次 LLM 返回selections[fileName] = skillId | null; 非法或缺失时用fallback: true候选。 - 传入
stepGenerateSection({ preselectedSkillId }):已传则不再调用stepSelectComponentSkills。 - 正文
loadSkillPrompt(id)→prompts/skills/{id}.md;null则 skill 块为空。
3. page_implement_agent:System 拼接(与代码一致)
steps/pageImplementAgent.ts: composePromptBlocks(["frontend", pageImplementAgent 步, …rules]), 其中 …rules = resolvePageImplementAgentRuleIds().map(loadGuardrail),id 列表见 shared/agentRuleBundles.ts。各 id 映射到 prompts/rules/<id>.md(如 section.default.md)。可选追加环境变量 PAGE_IMPLEMENT_AGENT_EXTRA_RULES(逗号分隔 id)。
Design system 在用户消息正文;预选 Hero skill 在用户消息末尾块;不在此 system 列表中。
Architect Agent 的规则栈:resolveArchitectAgentRuleIds()(默认含 section.navigation、outputTsx、framerMotionVariants)。
4. generate_section:User 消息块
buildUserMessage:Design System → globals.css → Project Context → Roles / Task Loops / Capabilities → Known Routes → Page Context → Section to Generate(含完整 designPlan,列出 guardrailIds 与 capabilityAssistIds)。
5. capabilityAssistIds → 文件
getCapabilityAssistPath:
prompts/capabilities/{id}.md存在则用之effect.motion.*→prompts/motions/motion.*.md(去掉effect.前缀)pattern.*→prompts/layouts/{去 pattern. 前缀}.md- 否则回退
capabilities/{id}.md(通常需hasCapabilityAssist过滤)
6. 日志:.open-ox/logs/generate_project/
每步目录下 output.json(section 步)含 skillId、section.designPlan 等; 完整 systemPrompt / userMessage 在内存 StepTrace.llmCall,默认不落盘到该 JSON。
7. 新提示放哪(速查)
下表中的 prompts/ 均指 ai/flows/generate_project/prompts/。
| 目的 | 位置 |
|---|---|
| 全局写代码约定 | ai/prompts/systems/frontend.md |
| 红线 / section 共用规则 | prompts/rules/*.md(清单见 agentRuleBundles.ts;含 section.default、project.*) |
| 组件气质 skill | prompts/skills/*.md + frontmatter |
| 版式 pattern | prompts/layouts/*.md 或 prompts/capabilities/pattern.*.md |
| 动效 | prompts/motions/motion.*.md + effect.motion.* id |
| 红线 guardrail | prompts/rules/*.md(允许 ID 由规则文件扫描,见仓库 docs/architecture-section-prompts.md) |
| 某一步任务 | prompts/steps/{name}.md |
| JSON/TSX 输出格式 | prompts/rules/outputJson.md、outputTsx.md |