@specpow/framework 0.5.32 → 0.6.1

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.
Files changed (34) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/builtin/schemas/mes-prd-to-code/references.md +20 -7
  3. package/builtin/schemas/mes-prd-to-code/rules.md +8 -4
  4. package/builtin/schemas/mes-prd-to-code/schema.yaml +2 -2
  5. package/builtin/schemas/mes-prd-to-code/templates/tech-design.md +10 -3
  6. package/builtin/schemas/spec-driven/schema.yaml +20 -1
  7. package/dist/commands/propose.d.ts.map +1 -1
  8. package/dist/commands/propose.js +17 -0
  9. package/dist/commands/propose.js.map +1 -1
  10. package/dist/core/api-contract/brief-injector.d.ts +16 -0
  11. package/dist/core/api-contract/brief-injector.d.ts.map +1 -0
  12. package/dist/core/api-contract/brief-injector.js +153 -0
  13. package/dist/core/api-contract/brief-injector.js.map +1 -0
  14. package/dist/core/api-contract/extractor.d.ts +16 -0
  15. package/dist/core/api-contract/extractor.d.ts.map +1 -0
  16. package/dist/core/api-contract/extractor.js +604 -0
  17. package/dist/core/api-contract/extractor.js.map +1 -0
  18. package/dist/core/api-contract/index.d.ts +8 -0
  19. package/dist/core/api-contract/index.d.ts.map +1 -0
  20. package/dist/core/api-contract/index.js +8 -0
  21. package/dist/core/api-contract/index.js.map +1 -0
  22. package/dist/core/artifact-graph/types.d.ts +8 -0
  23. package/dist/core/artifact-graph/types.d.ts.map +1 -1
  24. package/dist/core/artifact-graph/types.js +1 -0
  25. package/dist/core/artifact-graph/types.js.map +1 -1
  26. package/dist/core/sdd-engine/controller.d.ts.map +1 -1
  27. package/dist/core/sdd-engine/controller.js +15 -2
  28. package/dist/core/sdd-engine/controller.js.map +1 -1
  29. package/dist/core/sdd-engine/parallel-dispatcher.d.ts.map +1 -1
  30. package/dist/core/sdd-engine/parallel-dispatcher.js +18 -15
  31. package/dist/core/sdd-engine/parallel-dispatcher.js.map +1 -1
  32. package/dist/core/sdd-engine/types.d.ts +1 -0
  33. package/dist/core/sdd-engine/types.d.ts.map +1 -1
  34. package/package.json +1 -2
package/CHANGELOG.md CHANGED
@@ -5,6 +5,21 @@ All notable changes to this project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [0.6.1] - 2026-09-10
9
+
10
+ ### 🔧 mes-prd-to-code Schema 规则修正
11
+
12
+ 统一后端 Excel 导出/导入公共基类约定,修正包路径错误。
13
+
14
+ #### 变更内容
15
+
16
+ - **后端公共类引用规则**:导出统一使用 `BaseExcelExportTemplate`、导入统一使用 `BaseAnalysisEventListener`(均为 `com.twsz.mom.ds.util.excel`)
17
+ - **后端 Controller 规范**:导出/导入逻辑封装在 ServiceImpl,Controller 只负责调用
18
+ - **EasyExcel 白名单**:仅允许 `EasyExcel.read(...)`(作为 `BaseAnalysisEventListener` 的驱动入口);禁止 `EasyExcel.write(...)`、`doReadSync()`
19
+ - **ExcelUtil 废弃**:`com.twsz.mom.web.utils.ExcelUtil` 标注为已废弃,禁止使用
20
+ - 修正 `BaseExcelExportTemplate` 包路径(`core.web.excel` → `ds.util.excel`)并补齐 API 说明(`getTotal()`、`getData(start, size)`,start 从 1 开始)
21
+ - `templates/tech-design.md` 伪代码由 `uploadExcel(List<T>)` 改为 `export(...)` + `handle(List<T>)`
22
+
8
23
  ## [0.5.29] - 2026-08-31
9
24
 
10
25
  ### ✨ Memory Auto Adapter 系统
@@ -37,13 +37,14 @@
37
37
  - `new BaseException(String message)` → 从消息构造
38
38
  - `new BaseException(HttpStatus status, Object... args)` → 带参数格式化
39
39
 
40
- ### ExcelUtil (com.twsz.mom.core.utils.ExcelUtil)
40
+ ### ExcelUtil (com.twsz.mom.web.utils.ExcelUtil) 【已废弃,禁止使用】
41
41
  - `importExcel(InputStream is)` → `List<Map<String, Object>>`(原始导入)
42
42
  - `importExcel(InputStream is, Class<T> clazz)` → `List<T>`(类型化导入)
43
43
  - `export(HttpServletResponse resp, Class<T> clazz, Boolean isCsv, Collection<?> data)` → 标准导出
44
44
  - `export(HttpServletResponse resp, Class<T> clazz, Boolean isCsv, Supplier<Collection<?>> supplier)` → 懒加载导出
45
45
  - `responseJson(HttpServletResponse resp, ResponseWrapper<T> wrapper)` → 写 JSON 错误响应
46
46
  - `exportException(HttpServletResponse resp, Throwable e)` → 写异常为 JSON
47
+ - 废弃说明: 导出改用 BaseExcelExportTemplate,导入改用 BaseAnalysisEventListener;本节仅用于识别存量代码
47
48
 
48
49
  ### ApplicationContextUtil (com.twsz.mom.core.utils.ApplicationContextUtil)
49
50
  - `getUserActName()` → 获取当前登录用户名称(仅在业务逻辑中需要用户名时使用,如日志记录、业务校验)
@@ -53,12 +54,24 @@
53
54
  - `fastSimpleUUID()` → 生成无横线 UUID(用于导出文件名等)
54
55
 
55
56
  ### EasyExcel (com.alibaba.excel.EasyExcel)
56
- - `EasyExcel.write(OutputStream, Class<T>).sheet("sheet").doWrite(List)` → 简单导出
57
- - `EasyExcel.read(InputStream, Class<T>, ReadListener).sheet().doRead()` → 监听式导入
58
-
59
- ### BaseExcelExportTemplate (com.twsz.mom.core.web.excel.BaseExcelExportTemplate)
60
- - 抽象类:`getTotal()` + `getData(Integer start, Integer size)` → 分批导出模板
61
- - 默认 batch size: 1000, sheet max: 1,048,576
57
+ - `EasyExcel.read(InputStream, Class<T>, ReadListener).sheet().doRead()` → 监听式导入(唯一允许用法,必须配合 BaseAnalysisEventListener)
58
+ - 禁止: EasyExcel.write(...)、EasyExcel.read(...).doReadSync()
59
+
60
+ ### BaseExcelExportTemplate (com.twsz.mom.ds.util.excel.BaseExcelExportTemplate)
61
+ - 定义: public abstract class BaseExcelExportTemplate<T>
62
+ - 抽象方法: int getTotal() List<T> getData(Integer start, Integer size)
63
+ - 重要: getData 的 start 参数从 1 开始(源码按 getData(i + 1, batchSize) 调用)
64
+ - 构造器: (Class<T>) / (String fileName, String sheetName, Class<T>) / (..., Integer batchSize) / (..., Integer batchSize, Integer sheetNum)
65
+ - 默认值: batchSize=1000, sheetNum=1048576;sheetNum < batchSize 抛 BaseException
66
+ - exportBatch(HttpServletResponse, Converter<?>...) → 同步导出,内置 try-catch,失败回写 ResponseWrapper.ofFail("导出失败")
67
+ - exportBatch(OutputStream, WriteHandler, Converter<?>...) → 异步落文件,抛异常
68
+
69
+ ### BaseAnalysisEventListener (com.twsz.mom.ds.util.excel.BaseAnalysisEventListener)
70
+ - 定义: public abstract class BaseAnalysisEventListener<T> extends com.alibaba.excel.event.AnalysisEventListener<T>
71
+ - 构造器: (int batchSize)
72
+ - 抽象方法: void handle(List<T> dataList) — 唯一需要实现的方法
73
+ - 分批机制: invoke() 累积满 batchSize 触发 handle() 并清空;doAfterAllAnalysed() 冲刷余量
74
+ - 用法: EasyExcel.read(inputStream, Entity.class, new BaseAnalysisEventListener<Entity>(1000){ handle(list) }).sheet().doRead()
62
75
 
63
76
  ### ViewModel 常量 (com.twsz.mom.ds.model.ViewModel)
64
77
  - `ViewModel.OPT_ADD = "1"` — 新增标记
@@ -58,8 +58,10 @@
58
58
  - Controller 只做参数校验和结果封装,禁止写业务逻辑
59
59
  - 禁止在 Controller 中 try-catch(全局异常处理器 @ControllerAdvice 统一处理)
60
60
  - delete 接口: @DeleteMapping,接收 `Long[] ids`
61
- - export 接口: 使用 ExcelUtil.export() EasyExcel 直接写入 HttpServletResponse
62
- - import 接口: 接收 MultipartFile,使用 ExcelUtil.importExcel() EasyExcel.read()
61
+ - export 接口: 必须用 BaseExcelExportTemplate 匿名子类(实现 getTotal()、getData(start, size),start 从 1 开始),调用 exportBatch(HttpServletResponse, Converter...) 写入响应;禁止 ExcelUtil.export()、禁止 EasyExcel.write()
62
+ - export 位置: 匿名子类封装在 ServiceImpl 导出方法中(如 entityService.export(entity, response)),Controller 只注入调用,禁止在 Controller 内写导出逻辑
63
+ - import 接口: 接收 MultipartFile,必须用 EasyExcel.read(inputStream, Entity.class, new BaseAnalysisEventListener<Entity>(batchSize) { handle(List<Entity>) }).sheet().doRead() 驱动;禁止 ExcelUtil.importExcel()、禁止 doReadSync() 裸读
64
+ - import 位置: 校验与入库逻辑写在 BaseAnalysisEventListener.handle(List<Entity>) 内,由 batchSize 控制分批;禁止在 handle() 内单条循环查询
63
65
 
64
66
  ## 后端 Service 规范
65
67
 
@@ -107,8 +109,10 @@
107
109
  - BaseException: `new BaseException(AIHttpStatus.XXX.getCode(), AIHttpStatus.XXX.getMessage())` — com.twsz.mom.core.exception.BaseException
108
110
  - PageForm<T>: size(页大小), current(页码,1-based), condition(查询条件对象) — com.twsz.mom.core.common.PageForm
109
111
  - ApplicationContextUtil: 获取当前用户名称(getUserActName) — com.twsz.mom.core.utils.ApplicationContextUtil
110
- - ExcelUtil: importExcel/export — com.twsz.mom.core.utils.ExcelUtil
111
- - EasyExcel: com.alibaba.excel.EasyExcel
112
+ - BaseExcelExportTemplate: 导出统一基类,匿名子类实现 getTotal() 与 getData(start, size)(start 从 1 开始),调用 exportBatch(response, converters...) — com.twsz.mom.ds.util.excel.BaseExcelExportTemplate
113
+ - BaseAnalysisEventListener: 导入统一监听器,new BaseAnalysisEventListener<T>(batchSize){ handle(list) },配合 EasyExcel.read(...) 驱动 — com.twsz.mom.ds.util.excel.BaseAnalysisEventListener
114
+ - EasyExcel: 仅允许 EasyExcel.read(...) 驱动 BaseAnalysisEventListener,禁止 EasyExcel.write() — com.alibaba.excel.EasyExcel
115
+ - ExcelUtil: 【已废弃,禁止使用】 — com.twsz.mom.web.utils.ExcelUtil
112
116
  - ViewModel.OPT_ADD = "1", OPT_MODIFY = "2", OPT_DELETE = "3", OPT_NOT_MODIFY_DATE = "0"
113
117
  - IdUtil: cn.hutool.core.util.IdUtil(fastSimpleUUID 等)
114
118
 
@@ -230,7 +230,7 @@ artifacts:
230
230
  - PUT /{entity}/update — 修改
231
231
  - DELETE /{entity}/delete — 批量删除
232
232
  - POST /{entity}/export — 导出
233
- - POST /{entity}/uploadExcel — 导入(如有)
233
+ - POST /{entity}/uploadExcel — 导入(如有),由 BaseAnalysisEventListener 承载批量校验与入库
234
234
  - 外部接口(如功能文档有定义):
235
235
  - 按功能文档定义的路径和方法
236
236
  - 请求/响应格式按功能文档
@@ -409,7 +409,7 @@ artifacts:
409
409
  - deleteByIds: 批量删除+级联
410
410
  - search: 分页查询
411
411
  - list: 列表查询
412
- - importExcel/uploadExcel: 逐行校验、跳过统计(如有)
412
+ - uploadExcel: BaseAnalysisEventListener.handle() 内批量校验、跳过统计(如有)
413
413
 
414
414
  ## 文件路径
415
415
  测试文件放在: src/test/java/{与ServiceImpl相同的包路径}/
@@ -236,10 +236,17 @@ insert({Entity} entity):
236
236
  1. <校验规则描述>
237
237
  2. <校验通过> → baseMapper.insert(entity)
238
238
 
239
- uploadExcel(List<{Entity}> list):
239
+ export({Entity} entity, HttpServletResponse response):
240
+ new BaseExcelExportTemplate<{Entity}>({Entity}.class) {
241
+ getTotal() → <总数查询描述>
242
+ getData(start, size) → <分页查询描述,start 从 1 开始>
243
+ }.exportBatch(response)
244
+
245
+ handle(List<{Entity}> list):
246
+ // BaseAnalysisEventListener 回调,由 EasyExcel.read(...).doRead() 驱动
240
247
  @Transactional(rollbackFor = Exception.class)
241
- 1. <导入校验描述>
242
- 2. 逐行 insert
248
+ 1. <批量导入校验描述>
249
+ 2. 批量 insert(按 batchSize 分批)
243
250
  ```
244
251
 
245
252
  ### 3.4 Controller
@@ -1,5 +1,5 @@
1
1
  # SpecPow 默认 Schema: spec-driven
2
- # 四阶段工件流: proposal → specs → design → tasks → apply
2
+ # 五阶段工件流: proposal → specs → design → api-contract → tasks → apply
3
3
  # 融合 OpenSpec 的规范驱动 + Superpowers 的执行方法论
4
4
 
5
5
  name: spec-driven
@@ -45,6 +45,25 @@ artifacts:
45
45
  每个需求必须可验证。
46
46
  output: specs/<capability>/spec.md
47
47
 
48
+ - id: api-contract
49
+ name: API 契约
50
+ description: REST API 接口契约(OpenAPI 3.0 YAML 可读子集)
51
+ requires:
52
+ - design
53
+ template: api-contract.md
54
+ instruction: |
55
+ 从 design.md 中提取 REST API 接口定义,转换为 OpenAPI 3.0 YAML 可读子集。
56
+
57
+ 规则:
58
+ 1. 仅当 design.md 包含 REST API 接口定义时生成
59
+ 2. 格式为 OpenAPI 3.0 YAML,包含 openapi、info、paths 三部分
60
+ 3. paths 中每个 endpoint 必须包含:method、summary、parameters(含类型/必填/enum)、requestBody(含 schema)、responses(含 schema)
61
+ 4. 支持嵌套对象、数组、enum、optional 字段
62
+ 5. 如果 design.md 中没有 REST API 定义,不生成此文件
63
+ output: api-contract.md
64
+ conditional: true
65
+ autoGenerate: true
66
+
48
67
  - id: design
49
68
  name: 设计
50
69
  description: 怎么做?技术方案和架构决策
@@ -1 +1 @@
1
- {"version":3,"file":"propose.d.ts","sourceRoot":"","sources":["../../src/commands/propose.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAYH,UAAU,cAAc;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;CAChB;AAmED,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CA0QxF"}
1
+ {"version":3,"file":"propose.d.ts","sourceRoot":"","sources":["../../src/commands/propose.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAaH,UAAU,cAAc;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;CAChB;AAmED,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CA0RxF"}
@@ -12,6 +12,7 @@ import { createTemplateEngine } from '../core/templates/index.js';
12
12
  import { GlobalConfigManager } from '../core/config/global-config.js';
13
13
  import { SchemaResolver } from '../core/artifact-graph/resolver.js';
14
14
  import { successResponse, errorResponse, outputJson } from '../core/agent-contract.js';
15
+ import { extractApiContract } from '../core/api-contract/extractor.js';
15
16
  /**
16
17
  * 将 slug 格式的名称转换为可读标题
17
18
  * 例如: 'add-user-auth' → 'Add User Auth'
@@ -141,6 +142,22 @@ export async function proposeChange(name, options) {
141
142
  console.log(chalk.dim(` ○ ${artifact.id} — 等待依赖: ${artifact.requires.join(', ')}`));
142
143
  continue;
143
144
  }
145
+ // 自动生成工件(如 api-contract 从 design.md 提取)
146
+ if (artifact.autoGenerate && artifact.id === 'api-contract') {
147
+ const designPath = join(changeDir, 'design.md');
148
+ const apiContract = extractApiContract(designPath);
149
+ if (apiContract) {
150
+ const outputPath = join(changeDir, artifact.output || 'api-contract.md');
151
+ writeFileSync(outputPath, apiContract, 'utf-8');
152
+ created.push(artifact.id);
153
+ console.log(chalk.green(` ✓ 自动生成: ${artifact.id} → ${relative(changeDir, outputPath)}`));
154
+ continue;
155
+ }
156
+ else {
157
+ console.log(chalk.dim(` ○ ${artifact.id} — design.md 中无 REST API 定义,跳过`));
158
+ continue;
159
+ }
160
+ }
144
161
  // 使用模板引擎加载并渲染模板
145
162
  let resolvedTemplate = '';
146
163
  const templateName = artifact.template || '';
@@ -1 +1 @@
1
- {"version":3,"file":"propose.js","sourceRoot":"","sources":["../../src/commands/propose.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"propose.js","sourceRoot":"","sources":["../../src/commands/propose.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,IAAI,CAAC;AACrF,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,KAAK,QAAQ,MAAM,UAAU,CAAC;AACrC,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACpE,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,UAAU,EAAoB,MAAM,2BAA2B,CAAC;AACzG,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AAQvE;;;GAGG;AACH,SAAS,WAAW,CAAC,IAAY;IAC/B,OAAO,IAAI;SACR,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC;SACrB,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;AAC5C,CAAC;AAED;;;GAGG;AACH,SAAS,mBAAmB,CAAC,KAAa,EAAE,YAAoC;IAC9E,wBAAwB;IACxB,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC;IAC3E,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAEpC,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC,CAAC;IAC5E,MAAM,OAAO,GAAG,IAAI,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;IAEvD,OAAO,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,CAAC;AACzE,CAAC;AAED;;GAEG;AACH,SAAS,eAAe,CAAC,IAA0B;IACjD,MAAM,MAAM,GAA2B,EAAE,CAAC;IAC1C,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,MAAM,CAAC;IAC9C,KAAK,MAAM,EAAE,IAAI,IAAI,EAAE,CAAC;QACtB,MAAM,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAChC,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;YAChB,MAAM,GAAG,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;YAC5C,MAAM,KAAK,GAAG,EAAE,CAAC,SAAS,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAC/C,IAAI,GAAG;gBAAE,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QAC/B,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;GAGG;AACH,KAAK,UAAU,oBAAoB,CAAC,WAAqB;IACvD,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK;QAAE,OAAO,EAAE,CAAC;IAEpC,MAAM,MAAM,GAA2B,EAAE,CAAC;IAC1C,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAEtF,KAAK,MAAM,OAAO,IAAI,WAAW,EAAE,CAAC;QAClC,MAAM,MAAM,GAAW,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YACnD,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,OAAO,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;QACvE,CAAC,CAAC,CAAC;QACH,IAAI,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;YAClB,MAAM,CAAC,OAAO,CAAC,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;QAClC,CAAC;IACH,CAAC;IAED,EAAE,CAAC,KAAK,EAAE,CAAC;IACX,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,IAAY,EAAE,OAAuB;IACvE,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAClC,MAAM,MAAM,GAAG,IAAI,mBAAmB,CAAC,WAAW,CAAC,CAAC,IAAI,EAAE,CAAC;IAC3D,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,aAAa,CAAC;IAC/C,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,KAAK,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;IAEnE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAC9D,OAAO,CAAC,GAAG,CAAC,aAAa,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAC/C,OAAO,CAAC,GAAG,CAAC,SAAS,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAE/C,IAAI,CAAC;QACL,UAAU;QACV,IAAI,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC1B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,IAAI,QAAQ,CAAC,CAAC,CAAC;YACnD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,gCAAgC,IAAI,SAAS,CAAC,CAAC,CAAC;YACzE,OAAO;QACT,CAAC;QAED,SAAS;QACT,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1C,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAEzD,qCAAqC;QACrC,MAAM,QAAQ,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAChD,MAAM,iBAAiB,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;QACrF,MAAM,QAAQ,GAAG,IAAI,cAAc,CAAC,iBAAiB,CAAC,CAAC;QAEvD,IAAI,aAAa,CAAC;QAClB,IAAI,CAAC;YACH,aAAa,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;QACxD,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,eAAe,MAAM,OAAO,CAAC,CAAC,CAAC;YACrD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;YACpC,OAAO;QACT,CAAC;QAED,YAAY;QACZ,MAAM,SAAS,GAAG,aAAa,CAAC,SAAS,IAAI,EAAE,CAAC;QAChD,MAAM,OAAO,GAAa,EAAE,CAAC;QAC7B,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAE3C,6BAA6B;QAC7B,MAAM,QAAQ,GAAG,eAAe,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC9C,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAC1G,CAAC;QAED,UAAU;QACV,MAAM,cAAc,GAAG,oBAAoB,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QAEjE,qDAAqD;QACrD,MAAM,aAAa,GAAG,IAAI,mBAAmB,CAAC,WAAW,CAAC,CAAC;QAC3D,MAAM,cAAc,GAAG,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACpD,MAAM,cAAc,GAAG,aAAa,CAAC,GAAG,CAAC,OAAO,CAAyC,CAAC;QAE1F,oCAAoC;QACpC,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC9D,MAAM,aAAa,GAA2B,EAAE,CAAC;QACjD,IAAI,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;YAC7B,IAAI,CAAC;gBACH,MAAM,SAAS,GAAI,WAAW,CAAC,YAAY,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAc;qBAC3E,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;gBAC1C,KAAK,MAAM,EAAE,IAAI,SAAS,EAAE,CAAC;oBAC3B,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;oBACxC,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,GAAG,QAAQ,CAAC;gBACvC,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,YAAY;YACd,CAAC;QACH,CAAC;QAED,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;YACjC,WAAW;YACX,MAAM,OAAO,GAAG,CAAC,QAAQ,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,GAAW,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;YACxF,IAAI,CAAC,OAAO,IAAI,QAAQ,CAAC,EAAE,KAAK,UAAU,EAAE,CAAC;gBAC3C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,QAAQ,CAAC,EAAE,YAAY,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;gBACrF,SAAS;YACX,CAAC;YAED,wCAAwC;YACxC,IAAI,QAAQ,CAAC,YAAY,IAAI,QAAQ,CAAC,EAAE,KAAK,cAAc,EAAE,CAAC;gBAC5D,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;gBAChD,MAAM,WAAW,GAAG,kBAAkB,CAAC,UAAU,CAAC,CAAC;gBACnD,IAAI,WAAW,EAAE,CAAC;oBAChB,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,MAAM,IAAI,iBAAiB,CAAC,CAAC;oBACzE,aAAa,CAAC,UAAU,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;oBAChD,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;oBAC1B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,QAAQ,CAAC,EAAE,MAAM,QAAQ,CAAC,SAAS,EAAE,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC;oBAC1F,SAAS;gBACX,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,QAAQ,CAAC,EAAE,gCAAgC,CAAC,CAAC,CAAC;oBAC3E,SAAS;gBACX,CAAC;YACH,CAAC;YAED,gBAAgB;YAChB,IAAI,gBAAgB,GAAG,EAAE,CAAC;YAC1B,MAAM,YAAY,GAAG,QAAQ,CAAC,QAAQ,IAAI,EAAE,CAAC;YAE7C,IAAI,YAAY,EAAE,CAAC;gBACjB,MAAM,cAAc,GAAG,cAAc,CAAC,aAAa,CAAC,YAAY,EAAE;oBAChE,QAAQ,EAAE,IAAI;oBACd,WAAW,EAAE,WAAW,CAAC,IAAI,CAAC;oBAC9B,WAAW;oBACX,QAAQ,EAAE,MAAM;oBAChB,SAAS;oBACT,WAAW,EAAE,QAAQ,CAAC,EAAE;oBACxB,GAAG,QAAQ;iBACZ,CAAC,CAAC;gBAEH,IAAI,cAAc,EAAE,CAAC;oBACnB,gBAAgB,GAAG,cAAc,CAAC,OAAO,CAAC;oBAE1C,kBAAkB;oBAClB,IAAI,cAAc,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBAC/C,MAAM,UAAU,GAAG,MAAM,oBAAoB,CAAC,cAAc,CAAC,gBAAgB,CAAC,CAAC;wBAC/E,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;4BACvC,cAAc;4BACd,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;4BACpC,MAAM,QAAQ,GAAG,cAAc,CAAC,aAAa,CAAC,YAAY,EAAE;gCAC1D,QAAQ,EAAE,IAAI;gCACd,WAAW,EAAE,WAAW,CAAC,IAAI,CAAC;gCAC9B,WAAW;gCACX,QAAQ,EAAE,MAAM;gCAChB,SAAS;gCACT,WAAW,EAAE,QAAQ,CAAC,EAAE;gCACxB,GAAG,QAAQ;6BACZ,CAAC,CAAC;4BACH,IAAI,QAAQ,EAAE,CAAC;gCACb,gBAAgB,GAAG,QAAQ,CAAC,OAAO,CAAC;gCACpC,IAAI,QAAQ,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oCACzC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,QAAQ,CAAC,EAAE,YAAY,QAAQ,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;gCACxG,CAAC;4BACH,CAAC;wBACH,CAAC;6BAAM,CAAC;4BACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,QAAQ,CAAC,EAAE,UAAU,cAAc,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;wBAC5G,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;YAED,8BAA8B;YAC9B,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBACtB,MAAM,cAAc,GAAG;oBACrB,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,KAAK,CAAC,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,YAAY,CAAC;oBAC7E,IAAI,CAAC,iBAAiB,EAAE,MAAM,EAAE,WAAW,EAAE,YAAY,CAAC;iBAC3D,CAAC;gBACF,KAAK,MAAM,YAAY,IAAI,cAAc,EAAE,CAAC;oBAC1C,IAAI,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;wBAC7B,gBAAgB,GAAG,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;wBACvD,MAAM;oBACR,CAAC;gBACH,CAAC;YACH,CAAC;YAED,gCAAgC;YAChC,MAAM,WAAW,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;YACtC,MAAM,eAAe,GAA2B;gBAC9C,YAAY;gBACZ,cAAc,EAAE,IAAI;gBACpB,eAAe,EAAE,IAAI;gBACrB,aAAa,EAAE,IAAI;gBACnB,eAAe,EAAE,QAAQ,CAAC,EAAE;gBAC5B,QAAQ,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBAChD,aAAa,EAAE,SAAS;gBACxB,0BAA0B;gBAC1B,QAAQ,EAAE,WAAW;gBACrB,QAAQ,EAAE,IAAI;gBACd,UAAU;gBACV,eAAe,EAAE,IAAI;gBACrB,eAAe,EAAE,IAAI;gBACrB,aAAa,EAAE,IAAI;gBACnB,eAAe,EAAE,QAAQ,CAAC,EAAE;aAC7B,CAAC;YAEF,mCAAmC;YACnC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACpD,eAAe,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC;YACxC,CAAC;YAED,IAAI,cAAc,GAAG,QAAQ,CAAC,MAAM,IAAI,GAAG,QAAQ,CAAC,EAAE,KAAK,CAAC;YAC5D,oCAAoC;YACpC,cAAc,GAAG,mBAAmB,CAAC,cAAc,EAAE,eAAe,CAAC,CAAC;YACtE,gBAAgB,GAAG,mBAAmB,CAAC,gBAAgB,EAAE,eAAe,CAAC,CAAC;YAE1E,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;YAEnD,SAAS;YACT,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;YACtC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC3B,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC5C,CAAC;YAED,aAAa,CAAC,UAAU,EAAE,gBAAgB,EAAE,OAAO,CAAC,CAAC;YACrD,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;YAC1B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,QAAQ,CAAC,EAAE,MAAM,QAAQ,CAAC,SAAS,EAAE,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC;YAE1F,wCAAwC;YACxC,IAAI,QAAQ,CAAC,WAAW,EAAE,CAAC;gBACzB,4BAA4B;gBAC5B,MAAM,YAAY,GAA2B,EAAE,CAAC;gBAChD,KAAK,MAAM,KAAK,IAAI,CAAC,QAAQ,CAAC,QAAQ,IAAI,EAAE,CAAC,EAAE,CAAC;oBAC9C,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;wBAC5B,MAAM,WAAW,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC,CAAC;wBAC/D,MAAM,SAAS,GAAG,WAAW,EAAE,MAAM,IAAI,GAAG,KAAK,KAAK,CAAC;wBACvD,MAAM,iBAAiB,GAAG,mBAAmB,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;wBAC1E,YAAY,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC;oBAC3D,CAAC;gBACH,CAAC;gBAED,MAAM,aAAa,GAAG,cAAc,CAAC,mBAAmB,CACtD,YAAY,EACZ;oBACE,QAAQ,EAAE,IAAI;oBACd,WAAW,EAAE,WAAW,CAAC,IAAI,CAAC;oBAC9B,WAAW;oBACX,QAAQ,EAAE,MAAM;oBAChB,SAAS;iBACV,EACD,QAAQ,CAAC,WAAW,EACpB;oBACE,cAAc,EAAE,cAAc,IAAI,SAAS;oBAC3C,WAAW,EAAE,cAAc,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,SAAS;oBACvD,UAAU,EAAE,MAAM;oBAClB,mBAAmB,EAAE,QAAQ,CAAC,WAAW;oBACzC,YAAY,EAAE,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS;oBAC7E,aAAa,EAAE,QAAQ,CAAC,EAAE,KAAK,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,MAAM,GAAG,CAAC;wBAC7E,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS;iBAC9B,CACF,CAAC;gBACF,2CAA2C;gBAC3C,IAAI,aAAa,EAAE,CAAC;oBAClB,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE,kBAAkB,CAAC,CAAC;oBAClD,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;wBACvB,SAAS,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;oBACxC,CAAC;oBACD,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,QAAQ,CAAC,EAAE,KAAK,CAAC,EAAE,aAAa,EAAE,OAAO,CAAC,CAAC;gBAC1E,CAAC;YACH,CAAC;QACH,CAAC;QAED,yBAAyB;QACzB,aAAa,CAAC,IAAI,CAAC,SAAS,EAAE,gBAAgB,CAAC,EAAE,WAAW,MAAM,IAAI,EAAE,OAAO,CAAC,CAAC;QAEjF,UAAU;QACV,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,MAAM,IAAI,GAAgB;gBACxB,MAAM,EAAE,IAAI;gBACZ,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;oBAC1B,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;oBACzD,MAAM,MAAM,GAAG,QAAQ,EAAE,MAAM,IAAI,GAAG,EAAE,KAAK,CAAC;oBAC9C,OAAO;wBACL,IAAI,EAAE,EAAE;wBACR,IAAI,EAAE,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC;wBAC7B,OAAO,EAAE,IAAI;qBACd,CAAC;gBACJ,CAAC,CAAC;gBACF,MAAM;aACP,CAAC;YACF,UAAU,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC;YAClC,OAAO;QACT,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,IAAI,WAAW,CAAC,CAAC,CAAC;QACtD,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACvB,KAAK,MAAM,EAAE,IAAI,OAAO,EAAE,CAAC;YACzB,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QAC3B,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACpB,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;QAClC,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,CAAC,IAAI,CAAC,2BAA2B,IAAI,EAAE,CAAC,SAAS,CAAC,CAAC;QAC5E,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,CAAC,IAAI,CAAC,0BAA0B,IAAI,EAAE,CAAC,SAAS,CAAC,CAAC;QAC3E,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAClB,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,UAAU,CAAC,aAAa,CAAC,GAAG,CAAC,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,CAAC,CAAC,CAAC;QAChF,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,iBAAiB,GAAG,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC;QAC7D,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * API 契约注入器
3
+ *
4
+ * 分析 task 的 description 和 files,从 api-contract.md 中提取相关 API 定义,
5
+ * 生成注入到 task brief 的约束文本。
6
+ */
7
+ /**
8
+ * 从变更目录中加载 api-contract.md 并注入到 task brief
9
+ *
10
+ * @param changeDir 变更目录路径(包含 api-contract.md)
11
+ * @param taskDescription 任务描述
12
+ * @param taskFiles 任务涉及的文件列表
13
+ * @returns API 约束文本,或 undefined(无相关 API 时)
14
+ */
15
+ export declare function injectApiContract(changeDir: string, taskDescription: string, taskFiles: string[]): string | undefined;
16
+ //# sourceMappingURL=brief-injector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"brief-injector.d.ts","sourceRoot":"","sources":["../../../src/core/api-contract/brief-injector.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,MAAM,EACjB,eAAe,EAAE,MAAM,EACvB,SAAS,EAAE,MAAM,EAAE,GAClB,MAAM,GAAG,SAAS,CAUpB"}
@@ -0,0 +1,153 @@
1
+ /**
2
+ * API 契约注入器
3
+ *
4
+ * 分析 task 的 description 和 files,从 api-contract.md 中提取相关 API 定义,
5
+ * 生成注入到 task brief 的约束文本。
6
+ */
7
+ import { readFileSync, existsSync } from 'fs';
8
+ import { join } from 'path';
9
+ /**
10
+ * 从变更目录中加载 api-contract.md 并注入到 task brief
11
+ *
12
+ * @param changeDir 变更目录路径(包含 api-contract.md)
13
+ * @param taskDescription 任务描述
14
+ * @param taskFiles 任务涉及的文件列表
15
+ * @returns API 约束文本,或 undefined(无相关 API 时)
16
+ */
17
+ export function injectApiContract(changeDir, taskDescription, taskFiles) {
18
+ const contractPath = join(changeDir, 'api-contract.md');
19
+ if (!existsSync(contractPath))
20
+ return undefined;
21
+ const contractContent = readFileSync(contractPath, 'utf-8');
22
+ const relevantPaths = findRelevantPaths(contractContent, taskDescription, taskFiles);
23
+ if (relevantPaths.length === 0)
24
+ return undefined;
25
+ return formatApiContractConstraint(relevantPaths);
26
+ }
27
+ /**
28
+ * 从 api-contract.md 中查找与 task 相关的 API paths
29
+ */
30
+ function findRelevantPaths(contractContent, taskDescription, taskFiles) {
31
+ const relevantPaths = [];
32
+ // 从 contract 中提取所有 path 定义块
33
+ const pathBlocks = extractPathBlocks(contractContent);
34
+ for (const block of pathBlocks) {
35
+ if (isPathRelevant(block, taskDescription, taskFiles)) {
36
+ relevantPaths.push(block.fullText);
37
+ }
38
+ }
39
+ return relevantPaths;
40
+ }
41
+ /**
42
+ * 从 OpenAPI YAML 中提取每个 path 的定义块
43
+ */
44
+ function extractPathBlocks(content) {
45
+ const blocks = [];
46
+ const lines = content.split('\n');
47
+ let currentPath = '';
48
+ let currentBlock = [];
49
+ let inPaths = false;
50
+ for (let i = 0; i < lines.length; i++) {
51
+ const line = lines[i];
52
+ // 检测 paths: 开始
53
+ if (/^paths:\s*$/.test(line.trim())) {
54
+ inPaths = true;
55
+ continue;
56
+ }
57
+ if (!inPaths)
58
+ continue;
59
+ // 检测顶层 path 定义(如 ` /api/xxx:`,缩进 2 空格)
60
+ const pathMatch = line.match(/^ (\/[^:]+):\s*$/);
61
+ if (pathMatch) {
62
+ // 保存前一个 block
63
+ if (currentPath && currentBlock.length > 0) {
64
+ blocks.push({ path: currentPath, fullText: currentBlock.join('\n') });
65
+ }
66
+ currentPath = pathMatch[1];
67
+ currentBlock = [line];
68
+ continue;
69
+ }
70
+ // 检测是否超出了 paths section(新的顶层 key)
71
+ if (/^\w/.test(line) && line.trim().length > 0) {
72
+ inPaths = false;
73
+ if (currentPath && currentBlock.length > 0) {
74
+ blocks.push({ path: currentPath, fullText: currentBlock.join('\n') });
75
+ currentPath = '';
76
+ currentBlock = [];
77
+ }
78
+ continue;
79
+ }
80
+ // 属于当前 path 的行
81
+ if (currentPath) {
82
+ currentBlock.push(line);
83
+ }
84
+ }
85
+ // 保存最后一个 block
86
+ if (currentPath && currentBlock.length > 0) {
87
+ blocks.push({ path: currentPath, fullText: currentBlock.join('\n') });
88
+ }
89
+ return blocks;
90
+ }
91
+ /**
92
+ * 判断一个 API path 是否与 task 相关
93
+ */
94
+ function isPathRelevant(block, taskDescription, taskFiles) {
95
+ const path = block.path;
96
+ // 提取 path 中的关键词(去掉 /api/ 前缀和参数占位符)
97
+ const pathKeywords = path
98
+ .replace(/^\/api\//, '')
99
+ .replace(/\{[^}]+\}/g, '')
100
+ .split('/')
101
+ .filter(s => s.length > 0);
102
+ // 策略 1: task description 中直接提到 API path
103
+ if (taskDescription.includes(path))
104
+ return true;
105
+ // 策略 2: task description 中提到 path 的关键词
106
+ for (const keyword of pathKeywords) {
107
+ // 检查 description 中是否包含这个资源名
108
+ const patterns = [
109
+ new RegExp(`\\b${keyword}s?\\b`, 'i'), // 单复数形式
110
+ new RegExp(`\\/api\\/.*${keyword}`, 'i'), // 在 URL 中出现
111
+ ];
112
+ if (patterns.some(p => p.test(taskDescription)))
113
+ return true;
114
+ }
115
+ // 策略 3: task files 中包含相关的路由/服务文件名
116
+ const routeFilePatterns = pathKeywords.map(k => [
117
+ new RegExp(`routes?\\/.*${k}`, 'i'), // routes/horoscope.ts
118
+ new RegExp(`services?\\/.*${k}`, 'i'), // services/auth.ts
119
+ new RegExp(`controllers?\\/.*${k}`, 'i'), // controllers/reading.ts
120
+ new RegExp(`${k}\\.(service|controller|route)`, 'i'), // horoscope.service.ts
121
+ new RegExp(`api[_-]?${k}`, 'i'), // api-horoscope
122
+ new RegExp(`${k}[_-]?api`, 'i'), // horoscope-api
123
+ ]).flat();
124
+ for (const file of taskFiles) {
125
+ for (const pattern of routeFilePatterns) {
126
+ if (pattern.test(file))
127
+ return true;
128
+ }
129
+ // 也检查前端 API service 文件
130
+ if (/service|api|client/.test(file)) {
131
+ for (const keyword of pathKeywords) {
132
+ if (new RegExp(keyword, 'i').test(file))
133
+ return true;
134
+ }
135
+ }
136
+ }
137
+ return false;
138
+ }
139
+ /**
140
+ * 格式化 API 约束文本,用于注入 task brief
141
+ */
142
+ function formatApiContractConstraint(pathBlocks) {
143
+ return [
144
+ '## API Contract Constraints',
145
+ '',
146
+ '**严格遵守以下 API 契约,不得修改路径、参数名、响应结构。**',
147
+ '',
148
+ '```yaml',
149
+ ...pathBlocks,
150
+ '```',
151
+ ].join('\n');
152
+ }
153
+ //# sourceMappingURL=brief-injector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"brief-injector.js","sourceRoot":"","sources":["../../../src/core/api-contract/brief-injector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * API 契约提取器
3
+ *
4
+ * 从 design.md 中提取 REST API 接口定义,转换为 OpenAPI 3.0 YAML 可读子集。
5
+ * 使用正则+模式匹配,不依赖外部 AI 调用。
6
+ */
7
+ /**
8
+ * 从 design.md 文件提取 API 契约
9
+ * @returns OpenAPI 3.0 YAML 字符串,或 null(无 API 定义时)
10
+ */
11
+ export declare function extractApiContract(designMdPath: string): string | null;
12
+ /**
13
+ * 从 design.md 文本内容提取 API 契约
14
+ */
15
+ export declare function extractApiContractFromText(content: string): string | null;
16
+ //# sourceMappingURL=extractor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extractor.d.ts","sourceRoot":"","sources":["../../../src/core/api-contract/extractor.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AA8CH;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAKtE;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAKzE"}