speccore 6.81.0 → 6.83.0
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.
- package/dist/commands/analyze.d.ts.map +1 -1
- package/dist/commands/analyze.js +293 -82
- package/dist/commands/analyze.js.map +1 -1
- package/dist/core/agents/index.d.ts +8 -0
- package/dist/core/agents/index.d.ts.map +1 -0
- package/dist/core/agents/index.js +15 -0
- package/dist/core/agents/index.js.map +1 -0
- package/dist/core/agents/product-analyst.d.ts +17 -0
- package/dist/core/agents/product-analyst.d.ts.map +1 -0
- package/dist/core/agents/product-analyst.js +188 -0
- package/dist/core/agents/product-analyst.js.map +1 -0
- package/dist/core/requirement-clarifier.d.ts +2 -1
- package/dist/core/requirement-clarifier.d.ts.map +1 -1
- package/dist/core/requirement-clarifier.js +78 -1
- package/dist/core/requirement-clarifier.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analyze.d.ts","sourceRoot":"","sources":["../../src/commands/analyze.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"analyze.d.ts","sourceRoot":"","sources":["../../src/commands/analyze.ts"],"names":[],"mappings":"AAuDA,MAAM,WAAW,cAAc;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,QAAQ,GAAG,WAAW,GAAG,MAAM,CAAC;IACxC,KAAK,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAC;IACpC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,YAAY,CAAC,EAAE,OAAO,CAAC;IAEvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,wBAAsB,cAAc,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CA8lC3E"}
|
package/dist/commands/analyze.js
CHANGED
|
@@ -65,6 +65,8 @@ const change_detection_1 = require("../core/change-detection");
|
|
|
65
65
|
const streaming_analyzer_1 = require("../core/streaming-analyzer");
|
|
66
66
|
// v6.80.0+: 需求澄清模块
|
|
67
67
|
const requirement_clarifier_1 = require("../core/requirement-clarifier");
|
|
68
|
+
// v6.83.0+: 专业 AI 角色定义
|
|
69
|
+
const agents_1 = require("../core/agents");
|
|
68
70
|
async function analyzeCommand(options) {
|
|
69
71
|
// ── --full / --phase 模式: 委托给 synthesizeCommand(原 synthesize 命令) ──
|
|
70
72
|
if (options.full || options.phase) {
|
|
@@ -1609,18 +1611,35 @@ async function buildMultiDocPrompt(command, ctx, options) {
|
|
|
1609
1611
|
// v6.71.2+: 双层扫描 + 功能模块驱动(替代原来的按端顺序分析)
|
|
1610
1612
|
prompt += `4. 从 CONSTITUTION.md 的「源码路径」列读取所有工程目录\n`;
|
|
1611
1613
|
prompt += `\n## 📊 Layer 1: 快速扫描所有端(并行,只提取索引)\n\n`;
|
|
1612
|
-
prompt +=
|
|
1613
|
-
prompt +=
|
|
1614
|
-
prompt +=
|
|
1615
|
-
prompt +=
|
|
1616
|
-
prompt +=
|
|
1617
|
-
prompt +=
|
|
1618
|
-
prompt +=
|
|
1619
|
-
prompt +=
|
|
1620
|
-
prompt +=
|
|
1621
|
-
prompt +=
|
|
1622
|
-
prompt +=
|
|
1623
|
-
prompt +=
|
|
1614
|
+
prompt += `对每个端,读取关键索引文件和配置,提取全面索引(不深入代码逻辑):\n\n`;
|
|
1615
|
+
prompt += `**后端端扫描维度(10项)**:\n`;
|
|
1616
|
+
prompt += `| 扫描项 | 读取位置 | 提取内容 |\n`;
|
|
1617
|
+
prompt += `| :--- | :--- | :--- |\n`;
|
|
1618
|
+
prompt += `| 接口层 | Controller/Handler/Resource 目录 | 接口类名、接口路径(从注解/装饰器推断)、鉴权注解 |\n`;
|
|
1619
|
+
prompt += `| 数据层 | Entity/Model/Schema/Domain 目录 | 实体名称、表名、敏感字段标记 |\n`;
|
|
1620
|
+
prompt += `| 业务层 | Service/UseCase/Application 目录 | 服务类名、核心方法名 |\n`;
|
|
1621
|
+
prompt += `| 中间件 | Middleware/Interceptor/Filter/Gateway 目录 | 中间件名、作用范围 |\n`;
|
|
1622
|
+
prompt += `| 消息队列 | 搜索消息相关代码(Kafka/RabbitMQ/NSQ/SQS/Redis PubSub) | 队列名、消费者/生产者类名 |\n`;
|
|
1623
|
+
prompt += `| 定时任务 | 搜索定时任务(@Scheduled/cron/agenda/node-cron) | 任务名、触发频率、执行类 |\n`;
|
|
1624
|
+
prompt += `| 配置管理 | 配置文件(application*.yml/.env/config/) | 环境变量名、Feature Flag、配置中心引用 |\n`;
|
|
1625
|
+
prompt += `| 外部集成 | 搜索第三方调用(HTTP client/SDK/微信支付/短信/邮件/OSS) | 集成目标、调用位置 |\n`;
|
|
1626
|
+
prompt += `| 日志监控 | 搜索日志/监控/埋点代码(logger/metrics/tracing) | 日志级别策略、埋点事件名 |\n`;
|
|
1627
|
+
prompt += `| 错误处理 | 搜索全局异常处理器(ExceptionHandler/ErrorBoundary) | 异常处理类名、错误码范围 |\n`;
|
|
1628
|
+
prompt += `| 依赖项 | pom.xml/package.json/go.mod/requirements.txt | 依赖项列表(识别公共服务候选、过期版本、已知 CVE) |\n\n`;
|
|
1629
|
+
prompt += `**前端端扫描维度(10项)**:\n`;
|
|
1630
|
+
prompt += `| 扫描项 | 读取位置 | 提取内容 |\n`;
|
|
1631
|
+
prompt += `| :--- | :--- | :--- |\n`;
|
|
1632
|
+
prompt += `| 路由 | router/routes 配置文件 | 页面路径、页面名称、组件名、懒加载标记 |\n`;
|
|
1633
|
+
prompt += `| 页面 | pages/views/screens 目录 | 页面名称、主要功能(从文件名推断) |\n`;
|
|
1634
|
+
prompt += `| API 调用 | 搜索 API 调用模式(axios/fetch/$.ajax/uni.request) | 调用的接口路径列表、调用位置 |\n`;
|
|
1635
|
+
prompt += `| 状态管理 | store/pinia/vuex/redux 目录 | 全局状态名称、actions 名称、持久化策略 |\n`;
|
|
1636
|
+
prompt += `| 组件库 | components/ui 目录、设计系统配置 | 组件名、复用度、设计 token |\n`;
|
|
1637
|
+
prompt += `| 拦截器 | 请求/响应拦截器配置 | 拦截器逻辑(鉴权头注入、错误统一处理) |\n`;
|
|
1638
|
+
prompt += `| 外部 SDK | 搜索第三方 SDK 引入(埋点/推送/地图/支付/分享) | SDK 名称、初始化位置、使用范围 |\n`;
|
|
1639
|
+
prompt += `| 国际化 | i18n/locales/lang 目录 | 支持语言、命名空间、 key 数量级 |\n`;
|
|
1640
|
+
prompt += `| 错误处理 | 错误边界/全局错误处理器 | 错误捕获范围、降级策略、上报机制 |\n`;
|
|
1641
|
+
prompt += `| 性能 | 搜索性能相关代码(懒加载/虚拟滚动/缓存/预加载) | 优化手段、适用场景 |\n\n`;
|
|
1642
|
+
prompt += `**输出**:每个端一个 \`_INDEX.md\`,按上述维度组织,只含名称和路径列表,不含详细逻辑\n`;
|
|
1624
1643
|
prompt += `**存放**:\`.speccore/GLOBAL/platforms/{端名}/_INDEX.md\`\n\n`;
|
|
1625
1644
|
prompt += `## 🔗 Layer 2: 跨端关联分析(基于 Layer 1 的索引)\n\n`;
|
|
1626
1645
|
prompt += `1. **匹配前后端接口**:\n`;
|
|
@@ -1632,14 +1651,31 @@ async function buildMultiDocPrompt(command, ctx, options) {
|
|
|
1632
1651
|
prompt += ` - 被 2+ 个前端端调用的后端服务 → 公共服务候选\n`;
|
|
1633
1652
|
prompt += ` - 被 2+ 个后端端调用的后端服务 → 公共服务候选\n`;
|
|
1634
1653
|
prompt += ` - 依赖项中独立部署的服务(如 notification-service、file-service)→ 公共服务候选\n\n`;
|
|
1635
|
-
prompt += `3.
|
|
1654
|
+
prompt += `3. **消息流关联**(跨端事件/消息链路):\n`;
|
|
1655
|
+
prompt += ` - 后端生产者 ↔ 队列名 ↔ 后端消费者 ↔ 前端推送(WebSocket/SSE/轮询)\n`;
|
|
1656
|
+
prompt += ` - 识别「异步事件触发 → 多端状态同步」链路\n`;
|
|
1657
|
+
prompt += ` - 标注:无消费者的消息、无生产者的消息( orphaned topic )\n\n`;
|
|
1658
|
+
prompt += `4. **定时任务影响分析**:\n`;
|
|
1659
|
+
prompt += ` - 哪些定时任务修改了被前端展示的数据(数据新鲜度风险)\n`;
|
|
1660
|
+
prompt += ` - 哪些定时任务触发了前端需要感知的通知/推送\n`;
|
|
1661
|
+
prompt += ` - 批处理任务 vs 实时接口的数据竞争风险\n\n`;
|
|
1662
|
+
prompt += `5. **外部集成一致性检查**:\n`;
|
|
1663
|
+
prompt += ` - 多个端是否独立调用了同一第三方 API(重复集成 = 维护风险)\n`;
|
|
1664
|
+
prompt += ` - 前端 SDK 与后端 SDK 版本是否一致(如支付 SDK)\n`;
|
|
1665
|
+
prompt += ` - 第三方回调/Webhook 的接收端分布\n\n`;
|
|
1666
|
+
prompt += `6. **配置一致性检查**:\n`;
|
|
1667
|
+
prompt += ` - 各端的超时配置、重试策略、限流阈值是否一致\n`;
|
|
1668
|
+
prompt += ` - 跨端共享的 Feature Flag 定义是否一致\n`;
|
|
1669
|
+
prompt += ` - 环境变量命名是否规范(如 API_BASE_URL 在各端是否指向同一值)\n\n`;
|
|
1670
|
+
prompt += `7. **归纳功能模块**(从索引聚类,不是从代码反推):\n`;
|
|
1636
1671
|
prompt += ` - **从页面聚类**:哪些页面经常一起出现(如 RoomList + RoomDetail + RoomEdit)\n`;
|
|
1637
1672
|
prompt += ` - **从接口聚类**:哪些接口共享同一实体前缀(如 /api/rooms/*)\n`;
|
|
1638
|
-
prompt += ` -
|
|
1639
|
-
prompt += ` -
|
|
1673
|
+
prompt += ` - **从消息聚类**:哪些消息队列共享同一业务领域\n`;
|
|
1674
|
+
prompt += ` - **交叉验证**:页面聚类 vs 接口聚类 vs 消息聚类 → 确定功能模块边界\n`;
|
|
1675
|
+
prompt += ` - 每个功能模块标注:涉及端、核心页面、核心接口、实体名称、消息队列\n\n`;
|
|
1640
1676
|
prompt += `**输出**:\n`;
|
|
1641
|
-
prompt += `- \`_ASSOCIATION.md\`:前后端关联矩阵 +
|
|
1642
|
-
prompt += `- \`_MODULES.md
|
|
1677
|
+
prompt += `- \`_ASSOCIATION.md\`:前后端关联矩阵 + 接口缺口/未使用接口清单 + 消息流链路 + 定时任务影响 + 外部集成分布 + 配置一致性风险\n`;
|
|
1678
|
+
prompt += `- \`_MODULES.md\`:功能模块候选清单(从源码聚类,含消息/定时任务维度,供 Layer 3 验证)\n`;
|
|
1643
1679
|
prompt += `**存放**:\`.speccore/GLOBAL/platforms/_shared/\`\n\n`;
|
|
1644
1680
|
prompt += `## 🔍 Layer 3: 按功能模块深入分析(不是按端)\n\n`;
|
|
1645
1681
|
prompt += `基于 Layer 2 的 \`_MODULES.md\`,逐个功能模块深入分析。\n`;
|
|
@@ -1652,15 +1688,18 @@ async function buildMultiDocPrompt(command, ctx, options) {
|
|
|
1652
1688
|
prompt += `- 关联验证:前端提交的数据字段 vs 后端接收的 DTO 字段是否一致\n`;
|
|
1653
1689
|
prompt += `- 关联验证:前端展示的状态 vs 后端实体的状态枚举是否一致\n\n`;
|
|
1654
1690
|
prompt += `**每个功能模块输出**:\n`;
|
|
1655
|
-
prompt += `- 后端端:该功能模块相关的 API
|
|
1656
|
-
prompt += `-
|
|
1657
|
-
prompt += `-
|
|
1691
|
+
prompt += `- 后端端:该功能模块相关的 API 详细设计、数据模型、业务规则、安全策略\n`;
|
|
1692
|
+
prompt += `- 前端端:该功能模块相关的页面详细设计、交互流程、字段映射、错误处理\n`;
|
|
1693
|
+
prompt += `- 跨端:该功能模块的交互时序图(含异步消息链路,供 Layer 4 汇总到 INTERACTION_MAP.md)\n`;
|
|
1694
|
+
prompt += `- 跨端:该功能模块涉及的外部集成清单(第三方 API、消息队列、定时任务)\n\n`;
|
|
1658
1695
|
prompt += `## 🌍 Layer 4: 全局汇总(所有功能模块分析完成后)\n\n`;
|
|
1659
1696
|
prompt += `1. **一致性校验**:\n`;
|
|
1660
|
-
prompt += ` - 前端字段 vs
|
|
1697
|
+
prompt += ` - 前端字段 vs 后端字段是否一致(名称、类型、必填性、校验规则)\n`;
|
|
1661
1698
|
prompt += ` - 前端状态 vs 后端状态枚举是否一致\n`;
|
|
1662
1699
|
prompt += ` - 接口缺口清单(前端调了但后端没有的接口)\n`;
|
|
1663
1700
|
prompt += ` - 未使用接口清单(后端有但前端没调的接口)\n`;
|
|
1701
|
+
prompt += ` - 消息孤儿清单(无消费者/无生产者的队列)\n`;
|
|
1702
|
+
prompt += ` - 配置不一致清单(超时/重试/限流各端差异)\n`;
|
|
1664
1703
|
prompt += ` → 输出 \`CONSISTENCY_CHECK.md\`\n\n`;
|
|
1665
1704
|
prompt += `2. **生成全局文档**(按视角分离存放,v6.81.0+):\n`;
|
|
1666
1705
|
prompt += ` **产品视角 → 存放到 .speccore/GLOBAL/requirements/:**\n`;
|
|
@@ -1670,14 +1709,40 @@ async function buildMultiDocPrompt(command, ctx, options) {
|
|
|
1670
1709
|
prompt += ` - 每个前端端需求目录下可放 images/(截图/流程图)和 prototypes/(原型文件)\n`;
|
|
1671
1710
|
prompt += ` **技术视角 → 存放到 .speccore/GLOBAL/ 根目录:**\n`;
|
|
1672
1711
|
prompt += ` - \`FUNCTION_MAP.md\`:功能单元 × 端映射表\n`;
|
|
1673
|
-
prompt += ` - \`INTERACTION_MAP.md
|
|
1674
|
-
prompt += ` - \`API_CONTRACT.yaml\`:全局接口契约(汇总所有后端 API_INVENTORY
|
|
1675
|
-
prompt += ` - \`ARCHITECTURE.md
|
|
1712
|
+
prompt += ` - \`INTERACTION_MAP.md\`:跨端交互时序图(含同步 API + 异步消息,从 Layer 3 汇总)\n`;
|
|
1713
|
+
prompt += ` - \`API_CONTRACT.yaml\`:全局接口契约(汇总所有后端 API_INVENTORY,含 rate limit、幂等性、版本策略)\n`;
|
|
1714
|
+
prompt += ` - \`ARCHITECTURE.md\`:全局架构文档(服务拓扑、数据流、部署关系、容错设计、降级策略、扩容方案)\n`;
|
|
1715
|
+
prompt += ` - \`SECURITY_AUDIT.md\`:全局安全审计(鉴权策略矩阵、敏感数据流、攻击面分析、CVE 清单、合规检查)\n`;
|
|
1716
|
+
prompt += ` - \`PERFORMANCE_BASELINE.md\`:性能基线(慢查询清单、缓存策略矩阵、并发承载评估、关键路径耗时)\n`;
|
|
1717
|
+
prompt += ` - \`DATA_FLOW.md\`:数据流与隐私分析(PII 识别与追踪、数据生命周期、存储/传输/归档策略、GDPR 合规检查)\n`;
|
|
1718
|
+
prompt += ` - \`EXTERNAL_INTEGRATIONS.md\`:外部集成审计(第三方服务清单、SDK 版本与风险、Webhook 接收分布、重复集成识别)\n`;
|
|
1719
|
+
prompt += ` - \`DEPLOYMENT.md\`:部署运维分析(容器化状态、CI/CD 流水线、健康检查端点、环境配置差异、日志聚合方案)\n`;
|
|
1720
|
+
prompt += ` - \`OBSERVABILITY.md\`:可观测性分析(日志链路追踪、错误码体系、监控埋点清单、告警策略、SLA 定义)\n\n`;
|
|
1676
1721
|
prompt += `3. **生成各端详细文档**(技术视角,从 Layer 3 汇总):\n`;
|
|
1677
1722
|
prompt += ` > 存放: .speccore/GLOBAL/platforms/{端名}/\n`;
|
|
1678
|
-
prompt += `
|
|
1679
|
-
prompt += ` -
|
|
1680
|
-
prompt += ` -
|
|
1723
|
+
prompt += ` **后端端(9项)**:\n`;
|
|
1724
|
+
prompt += ` - \`API_INVENTORY.md\`:完整接口清单(路径/方法/参数/响应/鉴权/rate limit/幂等性/版本/废弃标记)\n`;
|
|
1725
|
+
prompt += ` - \`DATA_MODEL.md\`:表结构+字段+关系+索引+数据量预估+归档策略+分库分表建议\n`;
|
|
1726
|
+
prompt += ` - \`BUSINESS_RULES.md\`:校验规则+业务约束+状态机+规则冲突检测+边界案例\n`;
|
|
1727
|
+
prompt += ` - \`SECURITY.md\`:端级安全分析(接口鉴权矩阵、输入校验策略、SQL 注入/XSS/CSRF 防护、敏感数据处理)\n`;
|
|
1728
|
+
prompt += ` - \`PERFORMANCE.md\`:端级性能分析(数据库索引评估、缓存命中率、N+1 查询识别、慢查询 TOP10、连接池配置)\n`;
|
|
1729
|
+
prompt += ` - \`INTEGRATION.md\`:外部集成清单(第三方 API 调用位置、SDK 配置、Webhook 处理、消息队列角色)\n`;
|
|
1730
|
+
prompt += ` - \`SCHEDULED_TASKS.md\`:定时任务/批处理清单(任务名、触发频率、执行逻辑、数据影响范围、失败处理)\n`;
|
|
1731
|
+
prompt += ` - \`CONFIG.md\`:配置管理分析(环境变量清单、Feature Flag、配置中心引用、各环境差异、敏感配置审计)\n`;
|
|
1732
|
+
prompt += ` - \`TECH_STACK.md\`:语言、框架、构建工具、运行时版本、依赖项清单(含过期/风险标记)\n`;
|
|
1733
|
+
prompt += ` **前端端(9项)**:\n`;
|
|
1734
|
+
prompt += ` - \`_INDEX.md\`:目录索引(页面/组件/接口列表,含路由守卫信息)\n`;
|
|
1735
|
+
prompt += ` - \`UI_FLOW.md\`:页面流转图、用户操作流程、权限控制点、异常分支\n`;
|
|
1736
|
+
prompt += ` - \`API_CALL_MAP.md\`:页面 → 接口 → 后端服务 映射表(含错误处理映射、重试策略)\n`;
|
|
1737
|
+
prompt += ` - \`STATE_MANAGEMENT.md\`:全局状态流分析(store 结构、actions 依赖、持久化策略、跨组件通信)\n`;
|
|
1738
|
+
prompt += ` - \`COMPONENT_LIBRARY.md\`:组件库/设计系统分析(组件清单、复用度、设计 token、主题策略)\n`;
|
|
1739
|
+
prompt += ` - \`ERROR_HANDLING.md\`:错误处理与降级策略(错误边界、全局错误处理、用户提示策略、错误上报)\n`;
|
|
1740
|
+
prompt += ` - \`PERFORMANCE.md\`:端级性能分析(包大小、代码分割、渲染性能、资源加载、缓存策略、Core Web Vitals)\n`;
|
|
1741
|
+
prompt += ` - \`INTEGRATION.md\`:外部集成清单(第三方 SDK、埋点、推送、地图、支付、分享、版本兼容性)\n`;
|
|
1742
|
+
prompt += ` - \`TECH_STACK.md\`:框架版本、构建配置、UI 库、工具链、浏览器兼容性\n`;
|
|
1743
|
+
prompt += ` **通用(2项)**:\n`;
|
|
1744
|
+
prompt += ` - \`DEPENDENCY_GRAPH.md\`:模块依赖拓扑(含循环依赖检测、依赖深度分析)\n`;
|
|
1745
|
+
prompt += ` - \`CODE_INDEX.md\`:目录结构+关键文件+模块职责+代码统计(行数/文件数/复杂度)\n\n`;
|
|
1681
1746
|
prompt += `4. **知识沉淀(PATTERNS 目录)**: 从各端源码识别可复用模式,写入 .speccore/PATTERNS/。这是跨迭代、跨工程复用的核心资产。\n`;
|
|
1682
1747
|
prompt += `\n`;
|
|
1683
1748
|
prompt += ` **目录结构(分类 × 端 双层组织)**:\n`;
|
|
@@ -1749,38 +1814,67 @@ async function buildMultiDocPrompt(command, ctx, options) {
|
|
|
1749
1814
|
prompt += `> 存放: .speccore/GLOBAL/platforms/\n\n`;
|
|
1750
1815
|
prompt += `| 文档 | 层级 | 存放位置 | 内容 |\n`;
|
|
1751
1816
|
prompt += `| :--- | :--- | :--- | :--- |\n`;
|
|
1752
|
-
prompt += `| _INDEX.md | Layer 1 | platforms/{端}/ |
|
|
1753
|
-
prompt += `| _ASSOCIATION.md | Layer 2 | platforms/_shared/ | 前后端关联矩阵 +
|
|
1754
|
-
prompt += `| _MODULES.md | Layer 2 | platforms/_shared/ |
|
|
1817
|
+
prompt += `| _INDEX.md | Layer 1 | platforms/{端}/ | 各端全面索引(10维度扫描:接口/数据/业务/中间件/消息/定时/配置/外部/日志/错误) |\n`;
|
|
1818
|
+
prompt += `| _ASSOCIATION.md | Layer 2 | platforms/_shared/ | 前后端关联矩阵 + 接口缺口 + 消息流链路 + 定时任务影响 + 外部集成分布 + 配置一致性风险 |\n`;
|
|
1819
|
+
prompt += `| _MODULES.md | Layer 2 | platforms/_shared/ | 功能模块候选清单(含页面/接口/消息三维聚类) |\n`;
|
|
1755
1820
|
prompt += `\n### 需求文档(产品视角,v6.81.0+)\n`;
|
|
1756
1821
|
prompt += `> 存放: .speccore/GLOBAL/requirements/(含 images/ prototypes/ 子目录)\n\n`;
|
|
1757
1822
|
prompt += `| 文档 | 视角 | 内容 |\n`;
|
|
1758
1823
|
prompt += `| :--- | :--- | :--- |\n`;
|
|
1759
1824
|
prompt += `| requirements/REQUIREMENT.md | 全局产品视角 | 全局功能清单(按业务场景组织,从功能模块汇总) |\n`;
|
|
1760
1825
|
prompt += `| requirements/{前端端}/REQUIREMENT.md | 前端产品视角 | 各前端端的需求(页面+交互+用户旅程+原型占位) |\n`;
|
|
1761
|
-
prompt += `\n### 全局技术性文档(Layer 4
|
|
1826
|
+
prompt += `\n### 全局技术性文档(Layer 4 汇总生成,v6.82.0+)\n`;
|
|
1762
1827
|
prompt += `> 存放: .speccore/GLOBAL/ 根目录\n\n`;
|
|
1763
1828
|
prompt += `| 文档 | 视角 | 内容 |\n`;
|
|
1764
1829
|
prompt += `| :--- | :--- | :--- |\n`;
|
|
1765
1830
|
prompt += `| FUNCTION_MAP.md | 架构视角 | 功能单元 × 端映射表 |\n`;
|
|
1766
|
-
prompt += `| INTERACTION_MAP.md | 架构视角 |
|
|
1767
|
-
prompt += `| API_CONTRACT.yaml | 技术视角 |
|
|
1768
|
-
prompt += `| ARCHITECTURE.md | 技术视角 |
|
|
1769
|
-
prompt += `|
|
|
1770
|
-
prompt +=
|
|
1831
|
+
prompt += `| INTERACTION_MAP.md | 架构视角 | 跨端交互时序图(同步 API + 异步消息) |\n`;
|
|
1832
|
+
prompt += `| API_CONTRACT.yaml | 技术视角 | 全局接口契约(含 rate limit、幂等性、版本策略、废弃标记) |\n`;
|
|
1833
|
+
prompt += `| ARCHITECTURE.md | 技术视角 | 全局架构(服务拓扑、数据流、部署关系、容错、降级、扩容) |\n`;
|
|
1834
|
+
prompt += `| SECURITY_AUDIT.md | 安全视角 | 鉴权矩阵、敏感数据流、攻击面、CVE 清单、合规检查 |\n`;
|
|
1835
|
+
prompt += `| PERFORMANCE_BASELINE.md | 性能视角 | 慢查询清单、缓存策略矩阵、并发承载、关键路径耗时 |\n`;
|
|
1836
|
+
prompt += `| DATA_FLOW.md | 数据视角 | PII 识别追踪、数据生命周期、存储/传输/归档、GDPR 合规 |\n`;
|
|
1837
|
+
prompt += `| EXTERNAL_INTEGRATIONS.md | 集成视角 | 第三方服务清单、SDK 风险、Webhook 分布、重复集成识别 |\n`;
|
|
1838
|
+
prompt += `| DEPLOYMENT.md | 运维视角 | 容器化、CI/CD、健康检查、环境差异、日志聚合 |\n`;
|
|
1839
|
+
prompt += `| OBSERVABILITY.md | 可观测视角 | 日志链路、错误码体系、监控埋点、告警策略、SLA |\n`;
|
|
1840
|
+
prompt += `| CONSISTENCY_CHECK.md | 质量视角 | 一致性校验报告(字段/状态/接口/消息/配置) |\n`;
|
|
1841
|
+
prompt += `\n### 后端端技术性文档(9项,Layer 3/4 汇总)\n`;
|
|
1842
|
+
prompt += `> 存放: .speccore/GLOBAL/platforms/{后端端名}/\n\n`;
|
|
1843
|
+
prompt += `| 文档 | 内容 |\n`;
|
|
1844
|
+
prompt += `| :--- | :--- |\n`;
|
|
1845
|
+
prompt += `| API_INVENTORY.md | 接口清单(路径/方法/参数/响应/鉴权/rate limit/幂等性/版本/废弃) |\n`;
|
|
1846
|
+
prompt += `| DATA_MODEL.md | 表结构+字段+关系+索引+数据量预估+归档策略+分库分表建议 |\n`;
|
|
1847
|
+
prompt += `| BUSINESS_RULES.md | 校验规则+业务约束+状态机+规则冲突检测+边界案例 |\n`;
|
|
1848
|
+
prompt += `| SECURITY.md | 接口鉴权矩阵、输入校验、SQL注入/XSS/CSRF防护、敏感数据处理 |\n`;
|
|
1849
|
+
prompt += `| PERFORMANCE.md | 索引评估、缓存命中率、N+1查询、慢查询TOP10、连接池配置 |\n`;
|
|
1850
|
+
prompt += `| INTEGRATION.md | 第三方API调用、SDK配置、Webhook处理、消息队列角色 |\n`;
|
|
1851
|
+
prompt += `| SCHEDULED_TASKS.md | 定时任务清单(频率、逻辑、数据影响、失败处理) |\n`;
|
|
1852
|
+
prompt += `| CONFIG.md | 环境变量、Feature Flag、配置中心、环境差异、敏感配置审计 |\n`;
|
|
1853
|
+
prompt += `| TECH_STACK.md | 语言、框架、运行时版本、依赖项(含过期/风险标记) |\n`;
|
|
1854
|
+
prompt += `\n### 前端端技术性文档(9项,Layer 3/4 汇总)\n`;
|
|
1855
|
+
prompt += `> 存放: .speccore/GLOBAL/platforms/{前端端名}/\n\n`;
|
|
1856
|
+
prompt += `| 文档 | 内容 |\n`;
|
|
1857
|
+
prompt += `| :--- | :--- |\n`;
|
|
1858
|
+
prompt += `| _INDEX.md | 目录索引(页面/组件/接口列表,含路由守卫) |\n`;
|
|
1859
|
+
prompt += `| UI_FLOW.md | 页面流转图、操作流程、权限控制点、异常分支 |\n`;
|
|
1860
|
+
prompt += `| API_CALL_MAP.md | 页面→接口→后端映射(含错误处理、重试策略) |\n`;
|
|
1861
|
+
prompt += `| STATE_MANAGEMENT.md | store结构、actions依赖、持久化、跨组件通信 |\n`;
|
|
1862
|
+
prompt += `| COMPONENT_LIBRARY.md | 组件清单、复用度、设计token、主题策略 |\n`;
|
|
1863
|
+
prompt += `| ERROR_HANDLING.md | 错误边界、全局处理、用户提示、错误上报 |\n`;
|
|
1864
|
+
prompt += `| PERFORMANCE.md | 包大小、代码分割、渲染性能、资源加载、Core Web Vitals |\n`;
|
|
1865
|
+
prompt += `| INTEGRATION.md | 第三方SDK、埋点、推送、地图、支付、分享、版本兼容 |\n`;
|
|
1866
|
+
prompt += `| TECH_STACK.md | 框架版本、构建配置、UI库、工具链、浏览器兼容性 |\n`;
|
|
1867
|
+
prompt += `\n### 通用技术性文档(2项)\n`;
|
|
1771
1868
|
prompt += `> 存放: .speccore/GLOBAL/platforms/{端名}/\n\n`;
|
|
1772
|
-
prompt += `| 文档 |
|
|
1773
|
-
prompt += `| :--- | :---
|
|
1774
|
-
prompt += `|
|
|
1775
|
-
prompt += `|
|
|
1776
|
-
prompt +=
|
|
1777
|
-
prompt +=
|
|
1778
|
-
prompt += `|
|
|
1779
|
-
prompt += `|
|
|
1780
|
-
prompt += `|
|
|
1781
|
-
prompt += `| DEPENDENCY_GRAPH.md | 通用 | 模块依赖拓扑 |\n`;
|
|
1782
|
-
prompt += `| CODE_INDEX.md | 通用 | 目录结构+关键文件+模块职责 |\n`;
|
|
1783
|
-
prompt += `| PATTERNS/*.md | 通用 | 可复用设计模式 |\n`;
|
|
1869
|
+
prompt += `| 文档 | 内容 |\n`;
|
|
1870
|
+
prompt += `| :--- | :--- |\n`;
|
|
1871
|
+
prompt += `| DEPENDENCY_GRAPH.md | 模块依赖拓扑(含循环依赖检测、依赖深度分析) |\n`;
|
|
1872
|
+
prompt += `| CODE_INDEX.md | 目录结构+关键文件+模块职责+代码统计(行数/文件数/复杂度) |\n`;
|
|
1873
|
+
prompt += `\n### 知识沉淀\n`;
|
|
1874
|
+
prompt += `> 存放: .speccore/PATTERNS/\n\n`;
|
|
1875
|
+
prompt += `| 文档 | 内容 |\n`;
|
|
1876
|
+
prompt += `| :--- | :--- |\n`;
|
|
1877
|
+
prompt += `| PATTERNS/*.md | 可复用设计模式(分类 × 端 双层组织) |\n`;
|
|
1784
1878
|
}
|
|
1785
1879
|
else {
|
|
1786
1880
|
prompt += `- requirements/REQUIREMENT.md — 合并各迭代需求,生成跨项目需求索引\n`;
|
|
@@ -2904,17 +2998,32 @@ async function buildClarifyPhasePrompt(iteration) {
|
|
|
2904
2998
|
if (qualityReports.length > 0) {
|
|
2905
2999
|
await (0, requirement_clarifier_1.writeClarifyReport)(iterDir, qualityReports);
|
|
2906
3000
|
}
|
|
2907
|
-
// 构建 Clarify Prompt
|
|
2908
|
-
let prompt = `\n# 任务: 需求专业化(Phase 0:
|
|
2909
|
-
|
|
2910
|
-
prompt +=
|
|
2911
|
-
prompt +=
|
|
3001
|
+
// v6.83.0+: 构建 Clarify Prompt — 支持专业角色分析 + 改写对比 + 迭代循环
|
|
3002
|
+
let prompt = `\n# 任务: 需求专业化(Phase 0: 需求澄清,v6.83.0+)\n\n`;
|
|
3003
|
+
// 注入双重角色定义
|
|
3004
|
+
prompt += agents_1.PRODUCT_ANALYST_ROLE;
|
|
3005
|
+
prompt += '\n\n';
|
|
3006
|
+
prompt += agents_1.INTERACTION_DESIGNER_ROLE;
|
|
3007
|
+
prompt += '\n\n';
|
|
3008
|
+
prompt += `## 质量评价摘要(7维度)\n\n`;
|
|
2912
3009
|
for (const r of qualityReports) {
|
|
2913
3010
|
const name = r.filePath.split('/').pop() || '-';
|
|
2914
|
-
prompt +=
|
|
3011
|
+
prompt += `### ${name} — 综合评分 ${r.overallScore}/100 (${r.level.toUpperCase()})\n\n`;
|
|
3012
|
+
prompt += `| 维度 | 评分 | 问题数 | 状态 |\n`;
|
|
3013
|
+
prompt += `| :--- | :--- | :--- | :--- |\n`;
|
|
3014
|
+
for (const dim of r.dimensions) {
|
|
3015
|
+
const badge = dim.score >= 80 ? '🟢' : dim.score >= 50 ? '🟡' : '🔴';
|
|
3016
|
+
prompt += `| ${badge} ${dim.name} | ${dim.score}/100 | ${dim.issues.length} | ${dim.issues.length === 0 ? '✅' : '⚠️ 需改进'} |\n`;
|
|
3017
|
+
}
|
|
3018
|
+
prompt += '\n';
|
|
3019
|
+
// 详细问题(只列出问题项)
|
|
2915
3020
|
for (const dim of r.dimensions) {
|
|
2916
3021
|
if (dim.issues.length > 0) {
|
|
2917
|
-
prompt +=
|
|
3022
|
+
prompt += `**${dim.name}** 需改进:\n`;
|
|
3023
|
+
for (let i = 0; i < dim.issues.length; i++) {
|
|
3024
|
+
prompt += `- ${dim.issues[i]} → ${dim.suggestions[i] || '请优化'}\n`;
|
|
3025
|
+
}
|
|
3026
|
+
prompt += '\n';
|
|
2918
3027
|
}
|
|
2919
3028
|
}
|
|
2920
3029
|
}
|
|
@@ -2925,35 +3034,108 @@ async function buildClarifyPhasePrompt(iteration) {
|
|
|
2925
3034
|
prompt += `3. \`010-requirements/converted/*.md\` — 已转换文档\n`;
|
|
2926
3035
|
prompt += `4. \`010-requirements/features/*/README.md\` — 功能级补充\n`;
|
|
2927
3036
|
prompt += `5. \`010-requirements/prototypes/\` — 原型文件\n\n`;
|
|
2928
|
-
prompt +=
|
|
3037
|
+
prompt += `---\n\n`;
|
|
3038
|
+
prompt += `# 📋 五步迭代澄清流程\n\n`;
|
|
3039
|
+
prompt += `> 本阶段要求你先以专业角色深度分析,再生成改写版,与用户反复迭代确认,最终写入。\n\n`;
|
|
3040
|
+
prompt += `## Step 1: 深度专业分析\n\n`;
|
|
3041
|
+
prompt += `对每份需求文档,分别以 **产品分析师** 和 **交互设计师** 两个角色进行深度审查:\n\n`;
|
|
3042
|
+
prompt += `**产品分析师审查清单**:\n`;
|
|
3043
|
+
prompt += `- [ ] 每条业务流程是否有明确的起点、步骤、分支、终点\n`;
|
|
3044
|
+
prompt += `- [ ] 状态流转是否闭环(所有状态都有进入和退出条件)\n`;
|
|
3045
|
+
prompt += `- [ ] 是否遗漏了异常分支(网络失败、权限不足、数据为空、超时)\n`;
|
|
3046
|
+
prompt += `- [ ] 是否遗漏了逆向流程(取消、退款、退货、撤销)\n`;
|
|
3047
|
+
prompt += `- [ ] 关键状态变化是否有通知机制(站内信/推送/邮件/短信)\n`;
|
|
3048
|
+
prompt += `- [ ] 并发场景是否有处理(重复提交、幂等性)\n`;
|
|
3049
|
+
prompt += `- [ ] 术语是否统一(同一概念不能有两个名称)\n\n`;
|
|
3050
|
+
prompt += `**交互设计师审查清单**:\n`;
|
|
3051
|
+
prompt += `- [ ] 每个页面/组件是否有 Loading 状态定义\n`;
|
|
3052
|
+
prompt += `- [ ] 每个列表/表格是否有 Empty State 定义\n`;
|
|
3053
|
+
prompt += `- [ ] 每个操作是否有 Error State 定义\n`;
|
|
3054
|
+
prompt += `- [ ] 列表/表格是否有分页/筛选/排序逻辑\n`;
|
|
3055
|
+
prompt += `- [ ] 不可逆操作是否有二次确认\n`;
|
|
3056
|
+
prompt += `- [ ] 表单是否有完整的校验规则\n`;
|
|
3057
|
+
prompt += `- [ ] 不同角色的权限控制是否明确\n`;
|
|
3058
|
+
prompt += `- [ ] 前后端校验规则是否一致\n`;
|
|
3059
|
+
prompt += `- [ ] 数据刷新策略是什么(实时/手动/轮询/WebSocket)\n\n`;
|
|
3060
|
+
prompt += `**输出**:输出一份《深度审查报告》,列出所有发现的问题和修改建议。\n\n`;
|
|
3061
|
+
prompt += `## Step 2: 生成改写版(Draft v1)\n\n`;
|
|
3062
|
+
prompt += `基于 Step 1 的审查报告,生成一份 **完整的专业 PRD 文档**,要求:\n\n`;
|
|
2929
3063
|
prompt += `### 必须包含的章节\n`;
|
|
2930
|
-
prompt += `1.
|
|
2931
|
-
prompt += `2.
|
|
2932
|
-
prompt += `3.
|
|
2933
|
-
prompt += `4.
|
|
2934
|
-
prompt += `
|
|
2935
|
-
prompt += `
|
|
2936
|
-
prompt += `
|
|
3064
|
+
prompt += `1. **背景与目标**:为什么要做这个功能,解决什么问题,预期收益\n`;
|
|
3065
|
+
prompt += `2. **术语表(Glossary)**:文档中所有专业术语的统一表述\n`;
|
|
3066
|
+
prompt += `3. **用户故事**:作为 [角色],我希望 [目标],以便 [价值](每个功能一个)\n`;
|
|
3067
|
+
prompt += `4. **功能规格**(按模块组织):\n`;
|
|
3068
|
+
prompt += ` - 功能清单(带唯一需求编号 R-01, R-02...)\n`;
|
|
3069
|
+
prompt += ` - 每个功能的详细描述(输入、处理、输出)\n`;
|
|
3070
|
+
prompt += ` - 业务流程(正常流程 + 异常分支 + 状态流转图)\n`;
|
|
3071
|
+
prompt += ` - 页面交互逻辑(页面结构、用户操作、反馈机制、权限控制)\n`;
|
|
3072
|
+
prompt += ` - 业务规则(校验、约束、状态流转条件)\n`;
|
|
3073
|
+
prompt += ` - 异常场景和边界条件(网络失败、权限不足、数据为空、超时)\n`;
|
|
3074
|
+
prompt += `5. **验收标准(AC)**:可测试的、具体的验收条件,每条用 \`[ ]\` 标记,必须量化\n`;
|
|
3075
|
+
prompt += `6. **非功能需求**:性能、安全、兼容性、可访问性等\n`;
|
|
3076
|
+
prompt += `7. **依赖与约束**:依赖的其他系统/模块,技术/业务约束\n`;
|
|
3077
|
+
prompt += `8. **功能边界**:明确「做什么」和「不做什么」\n`;
|
|
3078
|
+
prompt += `9. **待确认事项**:标注需要用户确认的内容(不要编造)\n\n`;
|
|
2937
3079
|
prompt += `### 质量要求\n`;
|
|
2938
|
-
prompt += `-
|
|
2939
|
-
prompt += `- 统一术语表述,不要同一概念用不同词汇\n`;
|
|
3080
|
+
prompt += `- 统一术语,建立术语表\n`;
|
|
2940
3081
|
prompt += `- 验收标准必须量化(如响应时间<200ms,成功率>99%)\n`;
|
|
2941
|
-
prompt += `-
|
|
2942
|
-
prompt += `-
|
|
2943
|
-
prompt +=
|
|
2944
|
-
prompt +=
|
|
2945
|
-
prompt +=
|
|
2946
|
-
prompt += `##
|
|
3082
|
+
prompt += `- 业务流程必须包含异常分支\n`;
|
|
3083
|
+
prompt += `- 前端交互必须包含 Loading/Empty/Error 状态\n`;
|
|
3084
|
+
prompt += `- 不要添加文档中未提及的功能\n`;
|
|
3085
|
+
prompt += `- 如果原始描述不完整,标注「待确认」而不是编造\n\n`;
|
|
3086
|
+
prompt += `**输出**:将 Draft v1 的内容暂存,进入 Step 3。\n\n`;
|
|
3087
|
+
prompt += `## Step 3: 生成对比视图\n\n`;
|
|
3088
|
+
prompt += `生成一份 **原文档 vs 改写版(Draft v1)的对比报告**,格式如下:\n\n`;
|
|
3089
|
+
prompt += `\`\`\`\n`;
|
|
3090
|
+
prompt += `## 需求澄清对比报告\n\n`;
|
|
3091
|
+
prompt += `### 重大改进(原文缺失 → 改写版补充)\n`;
|
|
3092
|
+
prompt += `| 改进项 | 原文状态 | 改写版补充 | 影响 |\n`;
|
|
3093
|
+
prompt += `| :--- | :--- | :--- | :--- |\n`;
|
|
3094
|
+
prompt += `| 示例:订单状态流转 | ❌ 未定义 | ✅ 定义了 5 种状态及转换条件 | 避免状态不一致 bug |\n\n`;
|
|
3095
|
+
prompt += `### 交互完善(原文模糊 → 改写版明确)\n`;
|
|
3096
|
+
prompt += `| 改进项 | 原文描述 | 改写版描述 |\n`;
|
|
3097
|
+
prompt += `| :--- | :--- | :--- |\n`;
|
|
3098
|
+
prompt += `| 示例:提交按钮 | 「点击提交」 | 「点击后显示 Loading,成功后跳转,失败后显示错误信息」 |\n\n`;
|
|
3099
|
+
prompt += `### 待确认事项\n`;
|
|
3100
|
+
prompt += `- [ ] 事项 1:需要用户确认的业务规则\n`;
|
|
3101
|
+
prompt += `- [ ] 事项 2:需要用户补充的边界条件\n\n`;
|
|
3102
|
+
prompt += `### 建议取舍\n`;
|
|
3103
|
+
prompt += `- 建议保留改写版的改进(原因)\n`;
|
|
3104
|
+
prompt += `- 建议保留原文的表述(原因)\n`;
|
|
3105
|
+
prompt += `\`\`\`\n\n`;
|
|
3106
|
+
prompt += `**输出**:将对比报告展示给用户,进入 Step 4。\n\n`;
|
|
3107
|
+
prompt += `## Step 4: 迭代确认(多轮对话)\n\n`;
|
|
3108
|
+
prompt += `将 **对比报告** 和 **Draft v1** 一起展示给用户,然后:\n\n`;
|
|
3109
|
+
prompt += `1. **询问用户意见**:\n`;
|
|
3110
|
+
prompt += ` - "以上是我对需求文档的专业分析和改写,请检查是否有以下问题:"\n`;
|
|
3111
|
+
prompt += ` - "业务流程是否正确?"\n`;
|
|
3112
|
+
prompt += ` - "交互逻辑是否完整?"\n`;
|
|
3113
|
+
prompt += ` - "是否有遗漏的功能点?"\n`;
|
|
3114
|
+
prompt += ` - "是否有不需要的功能?"\n\n`;
|
|
3115
|
+
prompt += `2. **接收用户反馈**:\n`;
|
|
3116
|
+
prompt += ` - 如果用户提出修改意见 → 生成 **Draft v2** → 重新生成对比 → 回到步骤 1 询问\n`;
|
|
3117
|
+
prompt += ` - 可以迭代多轮(v1 → v2 → v3 ...),直到用户满意\n`;
|
|
3118
|
+
prompt += ` - 每轮迭代都要生成新的对比报告,标注本轮修改\n\n`;
|
|
3119
|
+
prompt += `3. **迭代原则**:\n`;
|
|
3120
|
+
prompt += ` - 尊重用户决策:用户说保留原文的,保留原文\n`;
|
|
3121
|
+
prompt += ` - 专业建议:用户遗漏的,以「建议补充」形式提出,不强加\n`;
|
|
3122
|
+
prompt += ` - 记录取舍:每轮迭代记录「采纳/拒绝/待确认」的决策\n\n`;
|
|
3123
|
+
prompt += `## Step 5: 确认写入\n\n`;
|
|
3124
|
+
prompt += `当用户确认 "满意,可以写入" 后:\n\n`;
|
|
3125
|
+
prompt += `1. 将最终版 PRD 写入 \`010-requirements/converted/clarified-{源文件名}-{日期}.md\`\n`;
|
|
3126
|
+
prompt += `2. 同时生成 \`010-requirements/converted/clarified-{源文件名}-{日期}-diff.md\` 保存最终对比报告\n`;
|
|
3127
|
+
prompt += `3. 使用以下命令写入:\n\n`;
|
|
2947
3128
|
prompt += `\`\`\`bash\n`;
|
|
2948
|
-
prompt += `speccore analyze --apply '{"010-requirements/converted/clarified-xxx.md":"..."}' -I ${iteration}\n`;
|
|
3129
|
+
prompt += `speccore analyze --apply '{"010-requirements/converted/clarified-xxx.md":"...","010-requirements/converted/clarified-xxx-diff.md":"..."}' -I ${iteration}\n`;
|
|
2949
3130
|
prompt += `\`\`\`\n\n`;
|
|
2950
|
-
prompt += `>
|
|
3131
|
+
prompt += `> 注意:写入后 CLI 会自动推进到需求确认阶段。\n`;
|
|
2951
3132
|
return prompt;
|
|
2952
3133
|
}
|
|
2953
3134
|
async function buildConfirmCheckPrompt(iteration) {
|
|
2954
3135
|
const iterDir = await (0, context_1.getIterationDir)(iteration);
|
|
2955
3136
|
const reportPath = (0, path_1.join)(iterDir, '010-requirements', 'CLARIFY_REPORT.md');
|
|
2956
|
-
|
|
3137
|
+
const convertedDir = (0, path_1.join)(iterDir, '010-requirements', 'converted');
|
|
3138
|
+
let prompt = `\n# 任务: 需求确认(Phase 0: 确认检查,v6.83.0+)\n\n`;
|
|
2957
3139
|
if (await (0, fs_extra_1.pathExists)(reportPath)) {
|
|
2958
3140
|
const report = await (0, fs_extra_2.readFile)(reportPath, 'utf-8');
|
|
2959
3141
|
prompt += `## 需求澄清报告\n\n`;
|
|
@@ -2962,17 +3144,46 @@ async function buildConfirmCheckPrompt(iteration) {
|
|
|
2962
3144
|
prompt += `\n\n... (报告共 ${report.length} 字符,已截断)\n`;
|
|
2963
3145
|
}
|
|
2964
3146
|
}
|
|
2965
|
-
|
|
2966
|
-
|
|
2967
|
-
|
|
2968
|
-
|
|
2969
|
-
|
|
2970
|
-
|
|
2971
|
-
|
|
3147
|
+
// v6.83.0+: 检查是否有 diff 文件
|
|
3148
|
+
let diffFiles = [];
|
|
3149
|
+
if (await (0, fs_extra_1.pathExists)(convertedDir)) {
|
|
3150
|
+
try {
|
|
3151
|
+
const entries = await (0, fs_extra_2.readdir)(convertedDir);
|
|
3152
|
+
diffFiles = entries.filter(f => f.includes('-diff.md'));
|
|
3153
|
+
}
|
|
3154
|
+
catch { /* ignore */ }
|
|
3155
|
+
}
|
|
3156
|
+
if (diffFiles.length > 0) {
|
|
3157
|
+
prompt += `\n## 已生成的对比报告\n\n`;
|
|
3158
|
+
for (const f of diffFiles) {
|
|
3159
|
+
prompt += `- \`converted/${f}\` — 需求澄清对比记录\n`;
|
|
3160
|
+
}
|
|
3161
|
+
prompt += '\n';
|
|
3162
|
+
}
|
|
3163
|
+
prompt += `## 确认检查清单\n\n`;
|
|
3164
|
+
prompt += `请逐项确认:\n\n`;
|
|
3165
|
+
prompt += `- [ ] clarified-*.md 已写入 \`010-requirements/converted/\`\n`;
|
|
3166
|
+
prompt += `- [ ] 验收标准可测试、可量化\n`;
|
|
3167
|
+
prompt += `- [ ] 功能边界明确(不做什么)\n`;
|
|
3168
|
+
prompt += `- [ ] 业务流程完整(含异常分支)\n`;
|
|
3169
|
+
prompt += `- [ ] 交互逻辑完整(Loading/Empty/Error 状态)\n`;
|
|
3170
|
+
prompt += `- [ ] 术语统一(已建立术语表)\n`;
|
|
3171
|
+
prompt += `- [ ] 所有「待确认」事项已解决\n\n`;
|
|
3172
|
+
prompt += `## 操作选项\n\n`;
|
|
3173
|
+
prompt += `**选项 A:确认通过,进入技术方案生成**\n`;
|
|
2972
3174
|
prompt += `\`\`\`bash\n`;
|
|
2973
3175
|
prompt += `speccore analyze --prompt -I ${iteration} --pipeline\n`;
|
|
2974
3176
|
prompt += `\`\`\`\n\n`;
|
|
2975
|
-
prompt +=
|
|
3177
|
+
prompt += `**选项 B:需要重新澄清(返回迭代)**\n`;
|
|
3178
|
+
prompt += `如果对需求文档不满意,可以返回重新澄清:\n`;
|
|
3179
|
+
prompt += `\`\`\`bash\n`;
|
|
3180
|
+
prompt += `speccore analyze --prompt -I ${iteration} --pipeline --skip-clarify=false\n`;
|
|
3181
|
+
prompt += `\`\`\`\n`;
|
|
3182
|
+
prompt += `> 重新进入 clarify-prompt 阶段,AI 会基于已有 draft 继续迭代。\n\n`;
|
|
3183
|
+
prompt += `**选项 C:跳过确认,直接进入分析(风险自负)**\n`;
|
|
3184
|
+
prompt += `\`\`\`bash\n`;
|
|
3185
|
+
prompt += `speccore analyze --prompt -I ${iteration} --pipeline --skip-clarify\n`;
|
|
3186
|
+
prompt += `\`\`\`\n`;
|
|
2976
3187
|
return prompt;
|
|
2977
3188
|
}
|
|
2978
3189
|
//# sourceMappingURL=analyze.js.map
|