ai-project-manage-cli 2.0.8 → 2.0.10

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/api/cli.d.ts CHANGED
@@ -66,6 +66,27 @@ export type ResCliResourceRequirementContentSet = {
66
66
  workitemId: string;
67
67
  clearedRequirementDevelopers: number;
68
68
  };
69
+ /** 对应 lpm-server `POST /cli/resource/requirement/test-cases/import` */
70
+ export type ReqCliResourceRequirementTestCasesImport = {
71
+ requirementId: number;
72
+ items: {
73
+ title: string;
74
+ steps: string;
75
+ expectedResult?: string;
76
+ }[];
77
+ };
78
+ export type ResCliResourceRequirementTestCasesImport = {
79
+ count: number;
80
+ list: {
81
+ id: number;
82
+ spaceId: string;
83
+ workitemId: string;
84
+ title: string;
85
+ steps: string;
86
+ expectedResult: string | null;
87
+ status: string;
88
+ }[];
89
+ };
69
90
  /** 对应 lpm-server `POST /cli/log/report` */
70
91
  export type ReqCliResourceDevelopLogPayloadReport = {
71
92
  developLogId: string;
@@ -81,7 +102,7 @@ export type ResCliResourceDevelopLogPayloadReport = {
81
102
  payload: unknown;
82
103
  createdAt: string;
83
104
  };
84
- /** 对应 lpm-server `POST /cli/log/developer-status`(按开发日志 id 更新 `RequirementDeveloper.status`) */
105
+ /** 对应 lpm-server `POST /cli/status/developer`(按开发日志 id 更新 `RequirementDeveloper.status`) */
85
106
  export type ReqCliLogDeveloperStatusSet = {
86
107
  developLogId: string;
87
108
  /** `DeveloperStatus` 枚举字符串,如 `DEVELOPING`、`REVIEWING` */
@@ -1 +1 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/api/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/api/cli.ts"],"names":[],"mappings":"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"}
@@ -14,6 +14,7 @@ declare const api: ApiClient<{
14
14
  readonly resourceRequirementGet: import("listpage-http").EndpointConfig<import("./cli").ReqCliResourceRequirementGet, import("./cli").ResCliResourceRequirementGet>;
15
15
  readonly resourceRequirementCommentSet: import("listpage-http").EndpointConfig<import("./cli").ReqCliResourceRequirementCommentSet, import("./cli").ResCliResourceRequirementCommentSet>;
16
16
  readonly resourceRequirementContentSet: import("listpage-http").EndpointConfig<import("./cli").ReqCliResourceRequirementContentSet, import("./cli").ResCliResourceRequirementContentSet>;
17
+ readonly resourceRequirementTestCasesImport: import("listpage-http").EndpointConfig<import("./cli").ReqCliResourceRequirementTestCasesImport, import("./cli").ResCliResourceRequirementTestCasesImport>;
17
18
  readonly resourceDevelopLogPayloadReport: import("listpage-http").EndpointConfig<import("./cli").ReqCliResourceDevelopLogPayloadReport, import("./cli").ResCliResourceDevelopLogPayloadReport>;
18
19
  readonly logDeveloperStatusSet: import("listpage-http").EndpointConfig<import("./cli").ReqCliLogDeveloperStatusSet, import("./cli").ResCliLogDeveloperStatusSet>;
19
20
  };
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,KAAK,SAAS,EAAE,MAAM,eAAe,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAGjD,MAAM,MAAM,sBAAsB,GAAG;IACnC,kBAAkB;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,oDAAoD;IACpD,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAMF,MAAM,MAAM,SAAS,GAAG,SAAS,CAAC,OAAO,aAAa,CAAC,CAAC;AAExD,wBAAgB,eAAe,CAAC,OAAO,EAAE,sBAAsB,GAAG,SAAS,CAkB1E;AAID,QAAA,MAAM,GAAG;;;;;;;;;;;;EAGP,CAAC;AAEH,eAAe,GAAG,CAAC"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,KAAK,SAAS,EAAE,MAAM,eAAe,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAGjD,MAAM,MAAM,sBAAsB,GAAG;IACnC,kBAAkB;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,oDAAoD;IACpD,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAMF,MAAM,MAAM,SAAS,GAAG,SAAS,CAAC,OAAO,aAAa,CAAC,CAAC;AAExD,wBAAgB,eAAe,CAAC,OAAO,EAAE,sBAAsB,GAAG,SAAS,CAkB1E;AAID,QAAA,MAAM,GAAG;;;;;;;;;;;;;EAGP,CAAC;AAEH,eAAe,GAAG,CAAC"}
@@ -2,5 +2,5 @@ export type { ApiClient } from "listpage-http";
2
2
  export { ApiError, ERROR_CODE_NETWORK, RequestTimeoutException, defineEndpoint, } from "listpage-http";
3
3
  export { createApmClient, type ApmClient, type CreateApmClientOptions, } from "./client";
4
4
  export { requestConfig, type RequestConfig } from "./request-config";
5
- export type { ReqCliLogDeveloperStatusSet, ReqCliLoginByEmployee, ReqCliResourceDevelopLogPayloadReport, ReqCliResourceRequirementCommentSet, ReqCliResourceRequirementGet, ReqCliVariablesGet, ResCliLoginByEmployee, ResCliLogDeveloperStatusSet, ResCliResourceDevelopLogPayloadReport, ResCliResourceRequirementCommentSet, ResCliResourceRequirementGet, ResCliVariables, } from "./cli";
5
+ export type { ReqCliLogDeveloperStatusSet, ReqCliLoginByEmployee, ReqCliResourceDevelopLogPayloadReport, ReqCliResourceRequirementCommentSet, ReqCliResourceRequirementGet, ReqCliResourceRequirementTestCasesImport, ReqCliVariablesGet, ResCliLoginByEmployee, ResCliLogDeveloperStatusSet, ResCliResourceDevelopLogPayloadReport, ResCliResourceRequirementCommentSet, ResCliResourceRequirementGet, ResCliResourceRequirementTestCasesImport, ResCliVariables, } from "./cli";
6
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EACL,QAAQ,EACR,kBAAkB,EAClB,uBAAuB,EACvB,cAAc,GACf,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,eAAe,EACf,KAAK,SAAS,EACd,KAAK,sBAAsB,GAC5B,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,aAAa,EAAE,KAAK,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACrE,YAAY,EACV,2BAA2B,EAC3B,qBAAqB,EACrB,qCAAqC,EACrC,mCAAmC,EACnC,4BAA4B,EAC5B,kBAAkB,EAClB,qBAAqB,EACrB,2BAA2B,EAC3B,qCAAqC,EACrC,mCAAmC,EACnC,4BAA4B,EAC5B,eAAe,GAChB,MAAM,OAAO,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EACL,QAAQ,EACR,kBAAkB,EAClB,uBAAuB,EACvB,cAAc,GACf,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,eAAe,EACf,KAAK,SAAS,EACd,KAAK,sBAAsB,GAC5B,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,aAAa,EAAE,KAAK,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACrE,YAAY,EACV,2BAA2B,EAC3B,qBAAqB,EACrB,qCAAqC,EACrC,mCAAmC,EACnC,4BAA4B,EAC5B,wCAAwC,EACxC,kBAAkB,EAClB,qBAAqB,EACrB,2BAA2B,EAC3B,qCAAqC,EACrC,mCAAmC,EACnC,4BAA4B,EAC5B,wCAAwC,EACxC,eAAe,GAChB,MAAM,OAAO,CAAC"}
@@ -1,10 +1,11 @@
1
- import type { ReqCliLogDeveloperStatusSet, ReqCliLoginByEmployee, ReqCliResourceDevelopLogPayloadReport, ReqCliResourceRequirementCommentSet, ReqCliResourceRequirementContentSet, ReqCliResourceRequirementGet, ResCliLoginByEmployee, ResCliLogDeveloperStatusSet, ResCliResourceDevelopLogPayloadReport, ResCliResourceRequirementCommentSet, ResCliResourceRequirementContentSet, ResCliResourceRequirementGet, ResCliVariables } from "./cli";
1
+ import type { ReqCliLogDeveloperStatusSet, ReqCliLoginByEmployee, ReqCliResourceDevelopLogPayloadReport, ReqCliResourceRequirementCommentSet, ReqCliResourceRequirementContentSet, ReqCliResourceRequirementGet, ReqCliResourceRequirementTestCasesImport, ResCliLoginByEmployee, ResCliLogDeveloperStatusSet, ResCliResourceDevelopLogPayloadReport, ResCliResourceRequirementCommentSet, ResCliResourceRequirementContentSet, ResCliResourceRequirementGet, ResCliResourceRequirementTestCasesImport, ResCliVariables } from "./cli";
2
2
  export declare const requestConfig: {
3
3
  readonly cli: {
4
4
  readonly variablesGet: import("listpage-http").EndpointConfig<void, ResCliVariables>;
5
5
  readonly resourceRequirementGet: import("listpage-http").EndpointConfig<ReqCliResourceRequirementGet, ResCliResourceRequirementGet>;
6
6
  readonly resourceRequirementCommentSet: import("listpage-http").EndpointConfig<ReqCliResourceRequirementCommentSet, ResCliResourceRequirementCommentSet>;
7
7
  readonly resourceRequirementContentSet: import("listpage-http").EndpointConfig<ReqCliResourceRequirementContentSet, ResCliResourceRequirementContentSet>;
8
+ readonly resourceRequirementTestCasesImport: import("listpage-http").EndpointConfig<ReqCliResourceRequirementTestCasesImport, ResCliResourceRequirementTestCasesImport>;
8
9
  readonly resourceDevelopLogPayloadReport: import("listpage-http").EndpointConfig<ReqCliResourceDevelopLogPayloadReport, ResCliResourceDevelopLogPayloadReport>;
9
10
  readonly logDeveloperStatusSet: import("listpage-http").EndpointConfig<ReqCliLogDeveloperStatusSet, ResCliLogDeveloperStatusSet>;
10
11
  };
@@ -1 +1 @@
1
- {"version":3,"file":"request-config.d.ts","sourceRoot":"","sources":["../../src/api/request-config.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,2BAA2B,EAC3B,qBAAqB,EACrB,qCAAqC,EACrC,mCAAmC,EACnC,mCAAmC,EACnC,4BAA4B,EAE5B,qBAAqB,EACrB,2BAA2B,EAC3B,qCAAqC,EACrC,mCAAmC,EACnC,mCAAmC,EACnC,4BAA4B,EAC5B,eAAe,EAChB,MAAM,OAAO,CAAC;AAEf,eAAO,MAAM,aAAa;;;;;;;;;;QA2CtB,iDAAiD;;;CAO3C,CAAC;AAEX,MAAM,MAAM,aAAa,GAAG,OAAO,aAAa,CAAC"}
1
+ {"version":3,"file":"request-config.d.ts","sourceRoot":"","sources":["../../src/api/request-config.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,2BAA2B,EAC3B,qBAAqB,EACrB,qCAAqC,EACrC,mCAAmC,EACnC,mCAAmC,EACnC,4BAA4B,EAC5B,wCAAwC,EAExC,qBAAqB,EACrB,2BAA2B,EAC3B,qCAAqC,EACrC,mCAAmC,EACnC,mCAAmC,EACnC,4BAA4B,EAC5B,wCAAwC,EACxC,eAAe,EAChB,MAAM,OAAO,CAAC;AAEf,eAAO,MAAM,aAAa;;;;;;;;;;;QAkDtB,iDAAiD;;;CAO3C,CAAC;AAEX,MAAM,MAAM,aAAa,GAAG,OAAO,aAAa,CAAC"}
@@ -20,13 +20,17 @@ exports.requestConfig = {
20
20
  method: "POST",
21
21
  path: "/cli/resource/requirement/content",
22
22
  }),
23
+ resourceRequirementTestCasesImport: (0, listpage_http_1.defineEndpoint)({
24
+ method: "POST",
25
+ path: "/cli/resource/requirement/test-cases/import",
26
+ }),
23
27
  resourceDevelopLogPayloadReport: (0, listpage_http_1.defineEndpoint)({
24
28
  method: "POST",
25
29
  path: "/cli/log/report",
26
30
  }),
27
31
  logDeveloperStatusSet: (0, listpage_http_1.defineEndpoint)({
28
32
  method: "POST",
29
- path: "/cli/log/developer-status",
33
+ path: "/cli/status/developer",
30
34
  }),
31
35
  },
32
36
  employee: {
@@ -1 +1 @@
1
- {"version":3,"file":"request-config.js","sourceRoot":"","sources":["../../src/api/request-config.ts"],"names":[],"mappings":";;;AAAA,iDAA+C;AAmBlC,QAAA,aAAa,GAAG;IAC3B,GAAG,EAAE;QACH,YAAY,EAAE,IAAA,8BAAc,EAAsC;YAChE,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,oBAAoB;SAC3B,CAAC;QACF,sBAAsB,EAAE,IAAA,8BAAc,EAGpC;YACA,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,2BAA2B;SAClC,CAAC;QACF,6BAA6B,EAAE,IAAA,8BAAc,EAG3C;YACA,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,mCAAmC;SAC1C,CAAC;QACF,6BAA6B,EAAE,IAAA,8BAAc,EAG3C;YACA,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,mCAAmC;SAC1C,CAAC;QACF,+BAA+B,EAAE,IAAA,8BAAc,EAG7C;YACA,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,iBAAiB;SACxB,CAAC;QACF,qBAAqB,EAAE,IAAA,8BAAc,EAGnC;YACA,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,2BAA2B;SAClC,CAAC;KACH;IACD,QAAQ,EAAE;QACR,iDAAiD;QACjD,IAAI,EAAE,IAAA,8BAAc,EAA+C;YACjE,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,oBAAoB;YAC1B,YAAY,EAAE,KAAK;SACpB,CAAC;KACH;CACO,CAAC"}
1
+ {"version":3,"file":"request-config.js","sourceRoot":"","sources":["../../src/api/request-config.ts"],"names":[],"mappings":";;;AAAA,iDAA+C;AAqBlC,QAAA,aAAa,GAAG;IAC3B,GAAG,EAAE;QACH,YAAY,EAAE,IAAA,8BAAc,EAAsC;YAChE,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,oBAAoB;SAC3B,CAAC;QACF,sBAAsB,EAAE,IAAA,8BAAc,EAGpC;YACA,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,2BAA2B;SAClC,CAAC;QACF,6BAA6B,EAAE,IAAA,8BAAc,EAG3C;YACA,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,mCAAmC;SAC1C,CAAC;QACF,6BAA6B,EAAE,IAAA,8BAAc,EAG3C;YACA,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,mCAAmC;SAC1C,CAAC;QACF,kCAAkC,EAAE,IAAA,8BAAc,EAGhD;YACA,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,6CAA6C;SACpD,CAAC;QACF,+BAA+B,EAAE,IAAA,8BAAc,EAG7C;YACA,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,iBAAiB;SACxB,CAAC;QACF,qBAAqB,EAAE,IAAA,8BAAc,EAGnC;YACA,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,uBAAuB;SAC9B,CAAC;KACH;IACD,QAAQ,EAAE;QACR,iDAAiD;QACjD,IAAI,EAAE,IAAA,8BAAc,EAA+C;YACjE,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,oBAAoB;YAC1B,YAAY,EAAE,KAAK;SACpB,CAAC;KACH;CACO,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"set.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/set.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAWzC,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAwD1D"}
1
+ {"version":3,"file":"set.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/set.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAYzC,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA6F1D"}
@@ -7,6 +7,7 @@ exports.registerSetCommands = registerSetCommands;
7
7
  const node_fs_1 = require("node:fs");
8
8
  const node_path_1 = __importDefault(require("node:path"));
9
9
  const client_1 = __importDefault(require("../../api/client"));
10
+ const parse_testcase_md_1 = require("../../core/parse-testcase-md");
10
11
  function parseRequirementId(value) {
11
12
  const n = Number.parseInt(value, 10);
12
13
  if (!Number.isFinite(n) || n < 1) {
@@ -52,5 +53,35 @@ function registerSetCommands(program) {
52
53
  await client_1.default.cli.resourceRequirementCommentSet({ id, content });
53
54
  console.log("评审记录已提交");
54
55
  });
56
+ setCmd
57
+ .command("testcase")
58
+ .description("读取 .apm/workitems/<需求ID>/testcase.md,解析为用例并批量导入服务端")
59
+ .argument("<id>", "需求 ID", parseRequirementId)
60
+ .action(async (id) => {
61
+ const filePath = node_path_1.default.join(process.cwd(), ".apm/workitems", String(id), "testcase.md");
62
+ if (!(0, node_fs_1.existsSync)(filePath)) {
63
+ console.error(`未找到文件: ${filePath}`);
64
+ process.exit(1);
65
+ }
66
+ const raw = (0, node_fs_1.readFileSync)(filePath, "utf8");
67
+ if (!raw.trim()) {
68
+ console.error("testcase.md 内容为空");
69
+ process.exit(1);
70
+ }
71
+ let items;
72
+ try {
73
+ items = (0, parse_testcase_md_1.parseTestcaseMarkdown)(raw);
74
+ }
75
+ catch (e) {
76
+ const msg = e instanceof Error ? e.message : String(e);
77
+ console.error(`解析 testcase.md 失败: ${msg}`);
78
+ process.exit(1);
79
+ }
80
+ const res = await client_1.default.cli.resourceRequirementTestCasesImport({
81
+ requirementId: id,
82
+ items,
83
+ });
84
+ console.log(`测试用例已导入 ${res.count} 条(requirementId=${id})`);
85
+ });
55
86
  }
56
87
  //# sourceMappingURL=set.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"set.js","sourceRoot":"","sources":["../../../src/cli/commands/set.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"set.js","sourceRoot":"","sources":["../../../src/cli/commands/set.ts"],"names":[],"mappings":"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"}
@@ -153,8 +153,8 @@ class CursorCmd {
153
153
  // 在运行命令之前
154
154
  async beforeAction() {
155
155
  const statusMap = {
156
- "prd-review": "REVIEWING",
157
- "prd-sync": "POLISHING",
156
+ "/prd-review": "REVIEWING",
157
+ "/prd-sync": "POLISHING",
158
158
  };
159
159
  const status = statusMap[this.name];
160
160
  if (!status) {
@@ -1 +1 @@
1
- {"version":3,"file":"cursor-cmd.js","sourceRoot":"","sources":["../../src/core/cursor-cmd.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cursor-cmd.js","sourceRoot":"","sources":["../../src/core/cursor-cmd.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * 解析 `.apm/workitems/<id>/testcase.md`
3
+ * 格式由 prd-testcase 技能产出,见 `templates/skills/prd-testcase/reference.md`:
4
+ * - 文首 `# 测试用例`,正文仅 `### 优先级:标题(TC-xxx)` 平铺
5
+ * - 每块内固定顺序:可选「测试类型 / 数据依赖」→「操作步骤」→「预期结果」
6
+ * - 文末可追加 `## 覆盖校验`(技能强制),导入时应忽略
7
+ */
8
+ export type ParsedTestCaseItem = {
9
+ title: string;
10
+ steps: string;
11
+ expectedResult?: string;
12
+ };
13
+ /**
14
+ * 将 testcase.md 正文解析为可提交给后端的 items。
15
+ */
16
+ export declare function parseTestcaseMarkdown(md: string): ParsedTestCaseItem[];
17
+ //# sourceMappingURL=parse-testcase-md.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-testcase-md.d.ts","sourceRoot":"","sources":["../../src/core/parse-testcase-md.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,MAAM,kBAAkB,GAAG;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AAwCF;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,MAAM,GAAG,kBAAkB,EAAE,CA0CtE"}
@@ -0,0 +1,79 @@
1
+ "use strict";
2
+ /**
3
+ * 解析 `.apm/workitems/<id>/testcase.md`
4
+ * 格式由 prd-testcase 技能产出,见 `templates/skills/prd-testcase/reference.md`:
5
+ * - 文首 `# 测试用例`,正文仅 `### 优先级:标题(TC-xxx)` 平铺
6
+ * - 每块内固定顺序:可选「测试类型 / 数据依赖」→「操作步骤」→「预期结果」
7
+ * - 文末可追加 `## 覆盖校验`(技能强制),导入时应忽略
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.parseTestcaseMarkdown = parseTestcaseMarkdown;
11
+ function normalizeNewlines(md) {
12
+ return md.replace(/\r\n/g, "\n");
13
+ }
14
+ /** 技能在文末追加的覆盖矩阵小节,其中含 `###`,若不截断会误解析为用例 */
15
+ function stripCoverageTail(md) {
16
+ const m = md.match(/\n##\s+覆盖校验\b/);
17
+ if (!m || m.index === undefined) {
18
+ return md;
19
+ }
20
+ return md.slice(0, m.index).trim();
21
+ }
22
+ /** 仅识别「用例行」:`### P0: xxx(TC-001)`,避免误把覆盖矩阵里的 `###` 当用例 */
23
+ function isTestCaseHeadingLine(line) {
24
+ const t = line.replace(/^###\s+/, "").trim();
25
+ return /\(TC-\d+\)\s*$/.test(t);
26
+ }
27
+ /**
28
+ * 技能约定:块内必有 `- 操作步骤:`,`- 预期结果:` 紧随其后;二者正文均为缩进编号列表。
29
+ * 用固定分隔符切分即可,无需通用 Markdown 解析。
30
+ */
31
+ function parseCaseBlockBody(body) {
32
+ const stepsM = body.match(/- 操作步骤[::]\s*\n([\s\S]*?)(?=\n- 预期结果[::])/);
33
+ const expectM = body.match(/- 预期结果[::]\s*\n([\s\S]*)/);
34
+ const steps = stepsM?.[1]?.trim() ?? "";
35
+ const expected = expectM?.[1]?.trim();
36
+ return {
37
+ steps,
38
+ expected: expected || undefined,
39
+ };
40
+ }
41
+ /**
42
+ * 将 testcase.md 正文解析为可提交给后端的 items。
43
+ */
44
+ function parseTestcaseMarkdown(md) {
45
+ const text = normalizeNewlines(md).trim();
46
+ if (!text) {
47
+ throw new Error("testcase.md 内容为空");
48
+ }
49
+ const withoutTail = stripCoverageTail(text);
50
+ const chunks = withoutTail.split(/\n(?=### )/);
51
+ const items = [];
52
+ for (const chunk of chunks) {
53
+ const block = chunk.trim();
54
+ if (!block.startsWith("###")) {
55
+ continue;
56
+ }
57
+ const lines = block.split("\n");
58
+ const head = lines[0];
59
+ if (!isTestCaseHeadingLine(head)) {
60
+ continue;
61
+ }
62
+ const title = head.replace(/^###\s+/, "").trim();
63
+ const body = lines.slice(1).join("\n");
64
+ const { steps, expected } = parseCaseBlockBody(body);
65
+ if (!steps) {
66
+ throw new Error(`用例「${title}」缺少「操作步骤」段落`);
67
+ }
68
+ items.push({
69
+ title,
70
+ steps,
71
+ expectedResult: expected,
72
+ });
73
+ }
74
+ if (items.length === 0) {
75
+ throw new Error("未解析到任何用例:请确认正文为「### 优先级:标题(TC-xxx)」且含「操作步骤」");
76
+ }
77
+ return items;
78
+ }
79
+ //# sourceMappingURL=parse-testcase-md.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-testcase-md.js","sourceRoot":"","sources":["../../src/core/parse-testcase-md.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ai-project-manage-cli",
3
- "version": "2.0.8",
3
+ "version": "2.0.10",
4
4
  "private": false,
5
5
  "description": "AI 项目管理 CLI 工具,结合飞书项目实现AI项目开发工作流",
6
6
  "main": "./dist/index.js",
@@ -0,0 +1,82 @@
1
+ ---
2
+ name: prd-testcase
3
+ description: 基于需求文档为其生成测试用例,当用户在明确要求调用本技能时使用,输入参数是 requirementId。
4
+ ---
5
+
6
+ # 从需求文档生成手工测试用例
7
+
8
+ ## 触发条件
9
+
10
+ 用户在对话中明确要求使用本技能。
11
+
12
+ ## 输入
13
+
14
+ - **requirementId**:需求 ID
15
+
16
+ ## 输出
17
+
18
+ 1. 手工测试用例文档:`.apm/workitems/<requirementId>/testcase.md`
19
+
20
+ ---
21
+
22
+ ## 执行流程
23
+
24
+ 1. **拉取需求与评论(使用 CLI)**:执行 `apm get requirement <requirementId>`,获取需求文档。
25
+
26
+ ### 2. 提取需求点
27
+ - 需求点是唯一真理:所有测试点、口径、阈值、边界与禁止项必须从需求清单提炼。
28
+ - 将需求拆分为可追踪条目并编号:`REQ-001`、`REQ-002`、`REQ-003`...
29
+
30
+ ### 3. 先做覆盖设计(严格模式)
31
+
32
+ - **需求正向覆盖(强制)**:每个 `REQ` 至少映射 1 条测试用例(`REQ -> TC`)。
33
+ - **用例逆向追踪(强制)**:每条 `TC` 必须回指至少 1 个 `REQ`(`TC -> REQ`)。
34
+ - **场景维度覆盖(强制)**:每个 `REQ` 至少覆盖以下三类场景:
35
+ - 正向场景(主流程成功)
36
+ - 边界场景(阈值/长度/上下限/临界值)
37
+ - 异常场景(非法输入/失败分支/缺失前置条件)
38
+ - 按上述规则先形成覆盖矩阵,再进入写作:
39
+ - 需求覆盖矩阵:`REQ -> TC[]`
40
+ - 用例追踪矩阵:`TC -> REQ[]`
41
+
42
+ ### 4. 生成手工测试用例(正文平铺)
43
+
44
+ - 依据需求清单归纳可测场景,生成 `test_case.md`。
45
+ - **靶心优先级(强制,避免“先射箭再画靶”)**:
46
+ - **最高优先级:需求清单(requirements/PRD)**。用例的“口径/阈值/不得改变的规则/显示范围/不做什么”等验收结论,必须优先从需求清单可读出的表述提炼。
47
+ - **第二优先级:产品能力清单 CAP**。用例的“目标入口/目标组件区域”必须以 CAP 的 `入口锚点(强制)` 与 `UI 识别锚点(强制)` 为准;若用例目标落在其它相似页面/表格组件上,应视为冲突,必须改写用例以落到 CAP 指定区域。
48
+ - **入口锚点补全(强制,引用产品能力清单)**:
49
+ - 若仓库存在 `.apm/product-capability-inventory/`,则对每条用例的“目标 UI 区域”执行 CAP 对齐:
50
+ 1. 从 `.apm/product-capability-inventory/<系统名>/index.md` 的「能力条目目录表」中,基于需求点标题/关键术语选择最匹配的 `CAP-xxx`(仅选一个最匹配的)。
51
+ 2. 打开对应 `.apm/product-capability-inventory/<系统名>/CAP-xxx.md`,读取字段 `入口锚点(强制)` 与 `UI 识别锚点(强制)`。
52
+ 3. 将 `入口锚点(强制)` 作为“导航来源”,把它转译为用例中的 **操作步骤**(至少覆盖:菜单/抽屉标题/Tab/子页签/目标区域的进入)。
53
+ 4. 将 `UI 识别锚点(强制)` 作为“断言来源”,在 **预期结果**中至少包含 1 条与 `UI 识别锚点(强制)` 对应的可断言检查(例如:表头列名/关键按钮文案/区域标题等),并确保步骤中确实进入了该区域。
54
+ - 若找不到合适 CAP 或 CAP 缺失上述必填字段,则回退到“保守定位”:
55
+ - 用例操作步骤必须显式包含:菜单路径/页面标题 或 抽屉标题 或 Tab 文案 + 目标区域至少两列表头/关键按钮文案(从需求清单提炼),并用预期结果体现可断言点。
56
+ - **testcase.md 格式与结构(强制)**:正文平铺用例、`case_id` 以及缩进/编号规则等全部约束,严格遵循同目录 [`reference.md`](./reference.md)。
57
+ - 将整份 Markdown 写入固定路径:`.apm/workitems/<requirementId>/testcase.md`
58
+ - 在文末追加覆盖校验小节(强制):
59
+ - `## 覆盖校验`
60
+ - `### 需求覆盖矩阵(REQ -> TC)`
61
+ - `### 用例追踪矩阵(TC -> REQ)`
62
+ - `### 场景维度检查`(逐条 REQ 标记正向/边界/异常是否覆盖)
63
+
64
+ ### 5. 导入测试用例到系统
65
+
66
+ - **命令**(在仓库根目录执行):`apm set testcase <requirementId>`
67
+ ---
68
+
69
+ ## 依赖与约定
70
+
71
+ - **输出结构**:仅遵循 `reference.md` 的用例文档格式规范
72
+ - **完整示例**:见 [reference.md](reference.md)
73
+ ---
74
+
75
+ ## 成功标准
76
+
77
+ - 手工测试用例文档已生成到约定路径(`.apm/workitems/<requirementId>/testcase.md`)
78
+ - 文档格式与结构完全符合同目录 `reference.md`(正文平铺用例、`case_id` 与缩进/编号规则)。
79
+ - 每条用例均为 **操作步骤 + 预期结果** 的精简形态,便于生成 **前端 E2E** 用例脚本
80
+ - 需求覆盖率为 100%(无未覆盖 REQ)
81
+ - 无孤儿用例(每条 TC 均可追溯到至少 1 条 REQ)
82
+ - 每条 REQ 至少覆盖正向、边界、异常三类场景
@@ -1,130 +0,0 @@
1
- ---
2
- name: case-creator
3
- description: 基于用户指定的本地 Markdown 需求文档生成手工测试用例(test_case.md)。Use when 用户提到“手工测试case/测试用例/test_case.md”,并希望以需求为唯一真理产出可执行测试点。
4
- ---
5
-
6
- # 从需求文档生成手工测试用例
7
-
8
- ## 触发条件
9
-
10
- - 用户希望生成手工测试 case,且**指定本地 Markdown 需求文档路径**(项目内相对路径或绝对路径)。
11
- - 本技能仅负责产出 `test_case.md`。
12
-
13
- ## 输入
14
-
15
- - **需求内容**:需求文档的 Markdown 文件路径或者文档内容
16
- - **requirementId**:需求 ID(number),用于将测试用例导入系统
17
-
18
- ## 输出
19
-
20
- 1. 手工测试用例文档:`.apm/workitems/<name>/test_case.md`
21
-
22
- ---
23
-
24
- ## 执行流程
25
-
26
- ### 1. 确定需求来源并读取内容
27
-
28
- - 直接读取用户指定的本地 Markdown 文件内容。
29
- - 计算输出目录名 `<name>`:默认使用需求文档文件名(去掉扩展名)作为 `<name>`。
30
- - 输出文件固定写入 `.apm/workitems/<name>/test_case.md`。
31
-
32
- ### 2. 提取需求清单
33
-
34
- - 若该文档中含有「## 需求清单」章节,则只取该章节正文作为需求清单;否则将**整份文档**视为需求清单
35
- - 需求清单是唯一真理:所有测试点、口径、阈值、边界与禁止项必须从需求清单提炼。
36
- - 将需求拆分为可追踪条目并编号:`REQ-001`、`REQ-002`、`REQ-003`...
37
-
38
- ### 3. 先做覆盖设计(严格模式)
39
-
40
- - **需求正向覆盖(强制)**:每个 `REQ` 至少映射 1 条测试用例(`REQ -> TC`)。
41
- - **用例逆向追踪(强制)**:每条 `TC` 必须回指至少 1 个 `REQ`(`TC -> REQ`)。
42
- - **场景维度覆盖(强制)**:每个 `REQ` 至少覆盖以下三类场景:
43
- - 正向场景(主流程成功)
44
- - 边界场景(阈值/长度/上下限/临界值)
45
- - 异常场景(非法输入/失败分支/缺失前置条件)
46
- - 按上述规则先形成覆盖矩阵,再进入写作:
47
- - 需求覆盖矩阵:`REQ -> TC[]`
48
- - 用例追踪矩阵:`TC -> REQ[]`
49
-
50
- ### 4. 生成手工测试用例(正文平铺)
51
-
52
- - 依据需求清单归纳可测场景,生成 `test_case.md`。
53
- - **靶心优先级(强制,避免“先射箭再画靶”)**:
54
- - **最高优先级:需求清单(requirements/PRD)**。用例的“口径/阈值/不得改变的规则/显示范围/不做什么”等验收结论,必须优先从需求清单可读出的表述提炼。
55
- - **第二优先级:产品能力清单 CAP**。用例的“目标入口/目标组件区域”必须以 CAP 的 `入口锚点(强制)` 与 `UI 识别锚点(强制)` 为准;若用例目标落在其它相似页面/表格组件上,应视为冲突,必须改写用例以落到 CAP 指定区域。
56
- - **入口锚点补全(强制,引用产品能力清单)**:
57
- - 若仓库存在 `.apm/product-capability-inventory/`,则对每条用例的“目标 UI 区域”执行 CAP 对齐:
58
- 1. 从 `.apm/product-capability-inventory/<系统名>/index.md` 的「能力条目目录表」中,基于需求点标题/关键术语选择最匹配的 `CAP-xxx`(仅选一个最匹配的)。
59
- 2. 打开对应 `.apm/product-capability-inventory/<系统名>/CAP-xxx.md`,读取字段 `入口锚点(强制)` 与 `UI 识别锚点(强制)`。
60
- 3. 将 `入口锚点(强制)` 作为“导航来源”,把它转译为用例中的 **操作步骤**(至少覆盖:菜单/抽屉标题/Tab/子页签/目标区域的进入)。
61
- 4. 将 `UI 识别锚点(强制)` 作为“断言来源”,在 **预期结果**中至少包含 1 条与 `UI 识别锚点(强制)` 对应的可断言检查(例如:表头列名/关键按钮文案/区域标题等),并确保步骤中确实进入了该区域。
62
- - 若找不到合适 CAP 或 CAP 缺失上述必填字段,则回退到“保守定位”:
63
- - 用例操作步骤必须显式包含:菜单路径/页面标题 或 抽屉标题 或 Tab 文案 + 目标区域至少两列表头/关键按钮文案(从需求清单提炼),并用预期结果体现可断言点。
64
- - **test_case.md 格式与结构(强制)**:正文平铺用例、`case_id` 以及缩进/编号规则等全部约束,严格遵循同目录 [`reference.md`](./reference.md)。
65
- - 将整份 Markdown 写入固定路径:`.apm/workitems/<name>/test_case.md`
66
- - 在文末追加覆盖校验小节(强制):
67
- - `## 覆盖校验`
68
- - `### 需求覆盖矩阵(REQ -> TC)`
69
- - `### 用例追踪矩阵(TC -> REQ)`
70
- - `### 场景维度检查`(逐条 REQ 标记正向/边界/异常是否覆盖)
71
-
72
- ### 5. 导入测试用例到系统(强制)
73
-
74
- - **使用本仓库 CLI 导入**(内部调用 `POST /requirements/test-cases/create-batch`),**不要**手写 `curl` 调 HTTP。
75
- - **前置**:已在 `packages/cli` 下配置好 `apm` 的 base-url,且已 `apm login`(与 CLI 其它需求接口一致)。
76
- - **命令**(在仓库根目录执行):
77
-
78
- ```bash
79
- apm requirement test-case import --requirement-id <requirementId> --file <jsonPath>
80
- ```
81
-
82
- - **导入文件 `--file`**:UTF-8 的 **JSON 数组**(至少 1 条),元素字段与批量创建接口一致(CLI 会为每条补上 `requirementId`,取自 `--requirement-id`):
83
- - `title`:string(用例标题,**不含** `(TC-xxx)`)
84
- - `steps`:string(操作步骤,建议保留 `test_case.md` 中的编号列表,行与行之间用 `\n` 拼接)
85
- - `expectedResult`:string(可选;预期结果,编号列表同样建议用 `\n` 拼接)
86
- - `status`:string(可选;枚举:`DRAFT` | `READY` | `PASSED` | `FAILED` | `BLOCKED`)
87
-
88
- **JSON 示例**(写入任意临时 JSON 文件后导入即可):
89
-
90
- ```json
91
- [
92
- {
93
- "title": "列表顶部展示新增入口",
94
- "steps": "1. 使用具备权限账号登录\n2. 进入目标页面",
95
- "expectedResult": "1. 页面顶部展示新增按钮"
96
- }
97
- ]
98
- ```
99
-
100
- - **字段映射约定(从 `test_case.md` 到 JSON,再交给 CLI)**:
101
- - `### Pn: 标题(TC-xxx)` -> `title`(去掉 `(TC-xxx)`;`Pn` 仅作优先级提示,可写入标题前缀如 `[P0]` 或省略,以团队习惯为准)
102
- - `- 操作步骤:` 下编号列表 -> `steps`
103
- - `- 预期结果:` 下编号列表 -> `expectedResult`
104
- - `- 数据依赖:...`:若需落库为说明,可并入 `steps` 首行或单独一行(当前接口无独立 `dataDependency` 字段)
105
- - **导入前校验**:
106
- - JSON 数组非空
107
- - 每条元素的 `title`、`steps` 非空;`expectedResult` 建议非空(与用例文档一致)
108
- - **失败处理**:若 CLI 报错,保留 `.apm/workitems/<name>/test_case.md` 与已生成的 JSON **不回滚**,根据终端/API 错误修正映射或数据后重试。
109
- - **清理约定**:CLI 导入成功后,删除本次导入使用的临时 JSON 文件。
110
-
111
- ---
112
-
113
- ## 依赖与约定
114
-
115
- - **本地文档**:需求清单取该文件中的「## 需求清单」章节(有则只取该节),无则该文件全文视为需求清单
116
- - **输出结构**:仅遵循 `reference.md` 的用例文档格式规范
117
-
118
- - **完整示例**:见 [reference.md](reference.md)
119
-
120
- ---
121
-
122
- ## 成功标准
123
-
124
- - 手工测试用例文档已生成到约定路径(`.apm/<name>/test_case.md`)
125
- - 文档格式与结构完全符合同目录 `reference.md`(正文平铺用例、`case_id` 与缩进/编号规则)。
126
- - 每条用例均为 **操作步骤 + 预期结果** 的精简形态,便于生成 **前端 E2E** 用例脚本
127
- - 需求覆盖率为 100%(无未覆盖 REQ)
128
- - 无孤儿用例(每条 TC 均可追溯到至少 1 条 REQ)
129
- - 每条 REQ 至少覆盖正向、边界、异常三类场景
130
- - `apm requirement test-case import` 执行成功,且返回条数与 JSON 数组条数一致