/**
 * intent_expander — Handlebars prompt templates and template selection.
 *
 * All 10 execution-shape templates live here. The main `expand()` function
 * calls `chooseTemplate()` to pick the right one based on route decision.
 */
import Handlebars from "handlebars";
// 1. code_execution_prompt: 允许修改业务源码，需要 scope 和验证
export const CODE_EXECUTION_TEMPLATE = Handlebars.compile(`## 任务
{{intent}}

## 项目上下文
- 技术栈: {{tech_stack}}
- 产品类型: {{product_profile}}
- 涉及仓库: {{affected_repos}}

{{#if artifact_schema}}
## 产物结构约束
{{artifact_schema}}
{{/if}}
{{#if process_rules}}
## 执行规则
{{process_rules}}
{{/if}}

{{#if matched_knowledge}}
## 适用知识
{{#each matched_knowledge}}
### {{this.name}}
{{this.content}}

{{/each}}
{{/if}}

{{#if relevant_files}}
## 相关文件
{{#each relevant_files}}
- {{this.path}} ({{this.reason}})
{{/each}}
{{/if}}

{{#if is_legacy_code}}
## 遗留代码注意事项
以下文件存在与标准模式不一致的惯例，修改时请遵循现有风格:
{{#each legacy_conventions}}
- {{this}}
{{/each}}
{{/if}}

## 约束
- 只允许修改以下路径: {{scope.allowed_paths}}
{{#unless scope.new_files_allowed}}
- 不允许新建文件
{{/unless}}
{{#if scope.new_file_patterns}}
- 新建文件必须匹配: {{scope.new_file_patterns}}
{{/if}}

## 验收标准
### 自动验证（系统检查）
{{#each acceptance.automated}}
- [{{this.id}}] {{this.description}}
{{/each}}
{{#if acceptance.manual}}
### 人工验证（需你确认）
{{#each acceptance.manual}}
- [{{this.id}}] {{this.description}}
{{/each}}
{{/if}}

{{#if degraded}}
**注意**: 当前无领域知识匹配，请保守操作，只修改必要文件。
{{/if}}
`);
// 2. single_artifact_prompt: 默认不允许修改业务源码，必须有 output_artifact.path
export const SINGLE_ARTIFACT_TEMPLATE = Handlebars.compile(`## 任务
{{intent}}

## 产物要求
- 产物类型: {{output_artifact.kind}}
- 输出路径: {{output_artifact.path}}
{{#if output_artifact.template}}
- 参考模板: {{output_artifact.template}}
{{/if}}

## 项目上下文
- 技术栈: {{tech_stack}}
- 产品类型: {{product_profile}}

{{#if artifact_schema}}
## 产物结构约束
{{artifact_schema}}
{{/if}}
{{#if process_rules}}
## 执行规则
{{process_rules}}
{{/if}}

{{#if matched_knowledge}}
## 适用知识
{{#each matched_knowledge}}
### {{this.name}}
{{this.content}}

{{/each}}
{{/if}}

## 约束
- 默认不允许修改业务源码
- 只允许写入指定产物路径
- 产物必须结构完整、证据充分、可交接

## 验收标准
{{#if acceptance.automated}}
### 自动验证
{{#each acceptance.automated}}
- [{{this.id}}] {{this.description}}
{{/each}}
{{/if}}
### 人工验证
- 产物完整性: 章节齐全，无空白占位
- 证据充分: 关键结论有引用或出处
- 可交接性: 下游可基于此产物继续工作

{{#if degraded}}
**注意**: 当前无专用模板，请按同类通用产物结构输出。
{{/if}}
`);
// 3. source_extraction_prompt: 只读输入材料，不允许修改项目源码
export const SOURCE_EXTRACTION_TEMPLATE = Handlebars.compile(`## 任务
{{intent}}

## 输入材料
{{#each input_materials}}
- 类型: {{this.kind}}{{#if this.path}}，路径: {{this.path}}{{/if}}{{#if this.ingestion_status}}，状态: {{this.ingestion_status}}{{/if}}（只读）
{{/each}}

{{#if input_material_contract_notes}}
## 输入材料契约检查
{{#each input_material_contract_notes}}
- {{this}}
{{/each}}
{{/if}}

## 产物要求
- 产物类型: {{output_artifact.kind}}
- 输出路径: {{output_artifact.path}}
{{#if output_artifact.template}}
- 参考模板: {{output_artifact.template}}
{{/if}}
{{#if pipeline_hint}}
- 流程提示: {{pipeline_hint}}
{{/if}}

{{#if artifact_schema}}
## 产物结构约束
{{artifact_schema}}
{{/if}}
{{#if process_rules}}
## 执行规则
{{process_rules}}
{{/if}}

{{#if matched_knowledge}}
## 适用知识
{{#each matched_knowledge}}
### {{this.name}}
{{this.content}}

{{/each}}
{{/if}}

## 约束
- 输入材料只读，不得修改
- 不允许修改项目业务源码 (src/)
- 可将 zip 解压到临时目录读取
- 源码中无法确认的信息必须标记 [Manual Confirm]
- 必须标注证据来源（哪个文件/哪段代码）
- 禁止使用 Figma MCP、浏览器运行态、figma.site、截图或纯 Design 文件补充信息

## 验收标准
### 产物完整性
- 产物结构完整、章节齐全
- 每条信息有源码出处
- 缺失信息标记 [Manual Confirm]

{{#if degraded}}
**注意**: 当前无专用模板，请按通用提取产物结构输出。
{{/if}}
`);
// 4. read_only_analysis_prompt: 只读分析，默认不写文件
export const READ_ONLY_ANALYSIS_TEMPLATE = Handlebars.compile(`## 任务
{{intent}}

## 项目上下文
- 技术栈: {{tech_stack}}
- 产品类型: {{product_profile}}

{{#if artifact_schema}}
## 产物结构约束
{{artifact_schema}}
{{/if}}
{{#if process_rules}}
## 执行规则
{{process_rules}}
{{/if}}

{{#if matched_knowledge}}
## 适用知识
{{#each matched_knowledge}}
### {{this.name}}
{{this.content}}

{{/each}}
{{/if}}

## 约束
- 默认不允许修改业务源码
- 只读分析当前项目或指定材料
- 输出结论、证据、风险和建议
- 默认不写文件，除非明确指定输出路径

{{#if output_artifact}}
## 输出要求
- 输出路径: {{output_artifact.path}}
{{/if}}

## 分析要求
- 给出明确结论
- 列出支撑证据
- 标注风险和假设
- 给出建议（如有）
`);
// 5. acceptance_prompt: 验收/就绪检查，不修改源码
export const ACCEPTANCE_TEMPLATE = Handlebars.compile(`## 任务
{{intent}}

## 工作流: 验收/就绪检查
- 这是只读检查路径，不修改业务源码，不生成脚手架，不创建实现文件
- 目标是判断列出的事项是否就绪、通过、满足条件或仍需处理
- 只输出检查结论、证据、阻塞项和下一步建议

## 项目上下文
- 技术栈: {{tech_stack}}
- 产品类型: {{product_profile}}

{{#if artifact_schema}}
## 产物结构约束
{{artifact_schema}}
{{/if}}
{{#if process_rules}}
## 执行规则
{{process_rules}}
{{/if}}

{{#if matched_knowledge}}
## 适用知识
{{#each matched_knowledge}}
### {{this.name}}
{{this.content}}

{{/each}}
{{/if}}

## 检查要求
- 对每一项给出: passed / blocked / unknown
- blocked 必须说明阻塞原因和可执行恢复动作
- unknown 必须说明缺少哪些证据
- 不要求技术决策契约、架构决策研讨、OOD/SOLID 摘要或代码可观测性工作包

{{#if acceptance.automated}}
## 验收项
{{#each acceptance.automated}}
- [{{this.id}}] {{this.description}}
{{/each}}
{{/if}}
`);
// 6. verification_only_prompt: 验证命令生成，不修改源码
export const VERIFICATION_ONLY_TEMPLATE = Handlebars.compile(`## 任务
{{intent}}

## 验证目标
{{#if relevant_files}}
### 相关文件
{{#each relevant_files}}
- {{this.path}} ({{this.reason}})
{{/each}}
{{/if}}

{{#if artifact_schema}}
## 产物结构约束
{{artifact_schema}}
{{/if}}
{{#if process_rules}}
## 执行规则
{{process_rules}}
{{/if}}

## 约束
- 默认不允许修改业务源码
- 只生成验证命令和检查逻辑
- 输出验证结果（通过/失败/需人工确认）

## 验证要求
- 列出具体验证命令
- 标注预期结果
- 标注不确定项
`);
// 6. direct_answer_prompt: 直接回答，不进入代码执行
export const DIRECT_ANSWER_TEMPLATE = Handlebars.compile(`## 任务
{{intent}}

{{#if artifact_schema}}
## 产物结构约束
{{artifact_schema}}
{{/if}}
{{#if process_rules}}
## 执行规则
{{process_rules}}
{{/if}}

## 要求
- 直接回答用户问题
- 不修改任何项目文件
- 给出明确结论和依据
`);
// ── 工作流专属模板 ──
// 7. architecture_design_prompt: 架构设计工作流
export const ARCHITECTURE_DESIGN_TEMPLATE = Handlebars.compile(`## 任务
{{intent}}

## 工作流: 架构设计 (architecture_design)

### 架构决策研讨前置门
- 正式架构设计前必须先完成六类架构决策研讨: 业务流程、数据架构、安全架构、后端架构、前端架构、基础设施
- 每个必要决策域必须包含事实/约束、2 至 3 个方案、推荐理由、风险和用户确认引用
- 任一必要域未确认时，只能输出待讨论清单或草案结构，不得输出可执行的正式架构设计文档
- 六域闭合后必须生成或引用 \`docs/architecture/00-架构决策记录.md\`

### 输入材料约束
- 必须消费所有输入端的原型说明、需求文档、业务流程和已有技术约束
- 多端输入时必须覆盖每个端的设计要求
- 未覆盖的输入材料不得声称架构设计已完成

### 架构边界
- 必须明确前后端边界、模块划分、API 契约、数据流和部署拓扑
- 必须包含 Mermaid 序列图（关键业务流程、登录鉴权、权限校验、跨端协作、异步任务）
- Mermaid 必须语法可渲染，不得使用伪代码

### 技术栈策略
- 后端默认优先 Java，除非用户项目已有明确技术栈或用户确认 override
- 前端默认优先最新稳定 Vue 生态 + TypeScript，除非用户项目已有明确技术栈或用户确认 override
- 前端技术栈必须说明语言、构建工具、路由、状态管理、接口类型、测试和代码规范
- 不同前端端默认不同项目仓库或独立应用边界；合并仓库必须用户确认

### 不确定项处理
- 不确定项必须给推荐、理由、备选、风险和需要用户确认的问题
- 架构级不确定项必须先接头脑风暴/多方案探索，再接决策主权和用户确认

### 输出目录
- 输出目录名必须由用户确认，不得静默使用任务名或目录名

### 设计产物包
- 架构决策闭合后，完整设计以 \`00-架构决策记录.md\`、\`01-架构设计文档.md\`、\`02-数据库设计文档.md\`、\`03-API接口规格文档.md\`、\`99-设计一致性验收报告.md\` 组成
- API 字段和路径的机器权威为 \`docs/api/openapi.yaml\`；数据库物理结构的机器权威为真实 SQL/migration
- 每个 API endpoint 必须具备请求和响应字段级说明；仅 JSON 示例不构成规格
- 既有设计文档必须先复验和确认升级，禁止静默覆盖或直接作为新实现依据

{{#if output_artifact}}
## 产物要求
- 产物类型: {{output_artifact.kind}}
- 输出路径: {{output_artifact.path}}
{{/if}}

{{#if artifact_schema}}
## 产物结构约束
{{artifact_schema}}
{{/if}}
{{#if process_rules}}
## 执行规则
{{process_rules}}
{{/if}}

{{#if matched_knowledge}}
## 适用知识
{{#each matched_knowledge}}
### {{this.name}}
{{this.content}}

{{/each}}
{{/if}}

## 验收标准
- 架构设计文档章节齐全，无空白占位
- Mermaid 序列图语法正确、可渲染
- 技术栈选择有依据（默认策略或 override evidence）
- 不确定项全部列出并有推荐方案
- 输出目录已请求用户确认
- 六域决策均有用户确认引用，设计产物包可被真实复验
- API/OpenAPI/SQL/Markdown 之间不存在关键冲突
`);
// 8. gap_analysis_prompt: 现有系统差距分析工作流
export const GAP_ANALYSIS_TEMPLATE = Handlebars.compile(`## 任务
{{intent}}

## 工作流: 现有系统差距分析 (existing_system_gap_analysis)

### 只读分析约束
- 本工作流为只读分析，不得直接修改项目源码
- 必须读取真实代码和相关文档，不能只读需求文档
- 分析结论必须区分 fact / inference / assumption / unknown，并带 confidence 和 evidence_refs

### 现有系统证据要求
- 必须先判断项目类型: existing_system / empty_project / new_system / unknown
- existing_system 必须完成现有系统分析（L1 项目指纹、L2 相关域、L3 影响面）
- 现有项目技术栈、目录结构、命名风格等优先于 SoloForge 默认策略

### 差距清单
- 必须围绕新需求 vs 现有能力，列出现有能力、缺失能力、复用模块
- 必须包含: required_changes / optional_changes / out_of_scope
- 必须列出: 兼容风险、数据风险、权限风险、接口风险、前后端影响

### 影响面与主链路
- 必须生成 MainlineIntegrationPlan: entry_points / route_bindings / api_bindings / service_calls / data_bindings
- 实现后必须反查新增文件是否被真实消费
- VerificationPlan 必须从 RequirementGapAnalysis 生成

### 禁止直接修改
- 差距分析完成后不得直接进入编码
- 必须生成分析报告，等待后续编码工作流消费

{{#if artifact_schema}}
## 产物结构约束
{{artifact_schema}}
{{/if}}
{{#if process_rules}}
## 执行规则
{{process_rules}}
{{/if}}

{{#if matched_knowledge}}
## 适用知识
{{#each matched_knowledge}}
### {{this.name}}
{{this.content}}

{{/each}}
{{/if}}

## 验收标准
- 项目类型判断正确
- 现有系统分析基于真实代码，每条结论有 evidence_refs
- 差距清单完整（现有能力 + 缺失能力 + 风险）
- MainlineIntegrationPlan 列出所有绑定点
- 不存在 AI 把 inference/assumption 写成 fact 的情况
`);
// 9. test_first_coding_prompt: 测试优先编码工作流
export const TEST_FIRST_CODING_TEMPLATE = Handlebars.compile(`## 任务
{{intent}}

## 工作流: 测试优先编码 (test_first_coding)

### 测试先行约束
- 编码不是第一步，必须先通过 CodingReadinessGate
- 必须生成 TestFirstPlan 或合法 not_applicable_with_reason
- 有测试框架且行为可断言时，必须先写失败测试或回归测试
- 不能自动测试时，必须先写 verification_case_first 或 manual_acceptance_first

### 上游约束消费
- 必须消费上游约束: ExistingSystemAnalysis / RequirementGapAnalysis / ArchitectureDesignContract
- 未消费上游约束不得开始实现
- ArchitectureDesignContract 中未确认的不确定项不得编码

### 最小实现
- readiness_status=blocked/manual_required 时不得写实现代码
- 实现必须最小化，不得超出需求范围
- 新增代码必须被真实主链路消费，未被消费不得 completed

### 验证结果
- 实现后必须执行 VerificationPlan
- 测试失败不得删除测试、降低断言、skip 后声称通过
- 必须产出 VerificationEvidence

{{#if artifact_schema}}
## 产物结构约束
{{artifact_schema}}
{{/if}}
{{#if process_rules}}
## 执行规则
{{process_rules}}
{{/if}}

{{#if matched_knowledge}}
## 适用知识
{{#each matched_knowledge}}
### {{this.name}}
{{this.content}}

{{/each}}
{{/if}}

## 项目上下文
- 技术栈: {{tech_stack}}
- 产品类型: {{product_profile}}

## 约束
- 只允许修改以下路径: {{scope.allowed_paths}}
{{#unless scope.new_files_allowed}}
- 不允许新建文件
{{/unless}}

## 验收标准
- CodingReadinessGate 已通过
- TestFirstPlan 已生成并有测试用例
- 上游约束（差距分析、架构设计）已消费
- 实现后 VerificationPlan 已执行
- 新增代码被真实主链路消费
`);
// 10. local_acceptance_prompt: 本地浏览器验收工作流
export const LOCAL_ACCEPTANCE_TEMPLATE = Handlebars.compile(`## 任务
{{intent}}

## 工作流: 本地浏览器验收 (local_browser_acceptance)

### 本地服务约束
- 必须识别项目运行方式: docker_compose > dockerfile > dev_server > manual_required
- 服务启动后必须健康检查，不得服务未 ready 就跑浏览器验收
- 健康检查必须验证: container healthy / backend health endpoint / frontend reachable

### 浏览器/HTTP 验收
- 验收用例必须覆盖: 任务相关页面、路由、核心交互、API 联动、错误态、loading 态
- 必须产出截图或 trace 引用作为证据
- 空验收用例或无 URL 不得通过

### 截图/trace/URL 证据
- 必须记录每个验收步骤的 target_url
- 必须记录 assertion_results（通过/失败）
- 必须记录 console_errors 和 network_failures（如有）
- 证据必须关联到 latest run（build hash 或 timestamp）

### 修复重跑
- 浏览器验收失败必须在授权范围内自动修复
- 修复后必须重新 build/redeploy/retest，不得用旧构建结果
- retry budget 耗尽、scope 不足、外部服务不可用时必须 manual_required

{{#if artifact_schema}}
## 产物结构约束
{{artifact_schema}}
{{/if}}
{{#if process_rules}}
## 执行规则
{{process_rules}}
{{/if}}

### 最终交付
- 必须给用户 frontend/backend/docs/swagger 本地可访问 URL
- 必须给启动/停止命令和人工查验说明
- 未给最终本地 URL 不得 delivered

## 验收标准
- 服务已启动并健康检查通过
- 浏览器/HTTP 验收全部通过（或有明确 failure 证据）
- 最终 URL 已提供给用户
- build hash/timestamp 已记录
- 失败用例已触发修复循环或 manual_required
`);
/** 保留旧模板名为 CODE_EXECUTION_TEMPLATE 的别名（兼容旧测试） */
export const PROMPT_TEMPLATE = CODE_EXECUTION_TEMPLATE;
/**
 * 根据执行形态选择 prompt 模板。
 * 模板使用独立工作流专属模板，包含对应约束注入。
 */
export function chooseTemplate(templateName) {
    switch (templateName) {
        case "single_artifact_prompt": return SINGLE_ARTIFACT_TEMPLATE;
        case "source_extraction_prompt": return SOURCE_EXTRACTION_TEMPLATE;
        case "read_only_analysis_prompt": return READ_ONLY_ANALYSIS_TEMPLATE;
        case "acceptance_prompt": return ACCEPTANCE_TEMPLATE;
        case "verification_only_prompt": return VERIFICATION_ONLY_TEMPLATE;
        case "direct_answer_prompt": return DIRECT_ANSWER_TEMPLATE;
        case "architecture_design_prompt": return ARCHITECTURE_DESIGN_TEMPLATE;
        case "gap_analysis_prompt": return GAP_ANALYSIS_TEMPLATE;
        case "test_first_coding_prompt": return TEST_FIRST_CODING_TEMPLATE;
        case "local_acceptance_prompt": return LOCAL_ACCEPTANCE_TEMPLATE;
        case "code_execution_prompt":
        default: return CODE_EXECUTION_TEMPLATE;
    }
}
//# sourceMappingURL=templates.js.map