ai-project-manage-cli 1.0.4 → 1.0.5

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/README.md CHANGED
@@ -1,29 +1,136 @@
1
1
  # ai-project-manage-cli (`apm`)
2
2
 
3
- ## 配置与登录
3
+ AI 项目管理后端的命令行工具与 SDK(包名 `ai-project-manage-cli`,可执行文件 `apm`)。
4
+
5
+ 全局帮助:`apm --help`;各子命令可加 `--help` 查看参数说明。
6
+
7
+ ## 配置文件
8
+
9
+ 默认路径:`~/.config/apm/config.json`;若设置了 `$XDG_CONFIG_HOME`,则为 `$XDG_CONFIG_HOME/apm/config.json`。
10
+
11
+ 典型字段:`baseUrl`、`token`、`employeeId`(由 `apm login` 写入);可选 `wsPort`(员工 WebSocket 端口,供 `apm ws` 使用)。
12
+
13
+ ## `apm config`
14
+
15
+ 读写本机配置(键名与 `npm config` 风格一致)。
16
+
17
+ | 命令 | 说明 |
18
+ |------|------|
19
+ | `apm config set base-url <url>` | 服务根地址(不含末尾 `/`) |
20
+ | `apm config get base-url` | 打印已配置的 base-url |
21
+ | `apm config set ws-port <1–65535>` | 员工 WebSocket 端口 |
22
+ | `apm config get ws-port` | 打印当前解析到的 ws 端口(未配置时有内置默认) |
23
+
24
+ ## `apm login` / `apm logout`
4
25
 
5
26
  ```bash
6
27
  apm config set base-url http://localhost:3000
7
- apm login -u <员工ID> # 按提示输入 CLI 口令;或 --password(勿写入 shell 历史)
8
- apm config get base-url
9
- apm logout # 清除 token / employeeId,保留 base-url
28
+ apm login -u <员工ID> # 交互输入 CLI 口令;或 --password(勿写入 shell 历史)
29
+ apm login -u <员工ID> --url <url> # 登录并覆盖/写入 base-url
30
+ apm logout # 清除 tokenemployeeId,保留 base-url(及 ws-port 等)
31
+ ```
32
+
33
+ ## `apm init`
34
+
35
+ 安装 CLI 内置技能到用户本机 `~/.cursor/skills`(会递归复制并覆盖同名文件)。
36
+
37
+ ```bash
38
+ apm init
39
+ ```
40
+
41
+ ## 凭证与哪些命令需要登录
42
+
43
+ 除 **`config`**、**`init`**、**`login`**、**`logout`**、**`ws`** 外,其余子命令会在执行前从配置文件读取 **`baseUrl`、`token`、`employeeId`**;未配置完整时会提示先执行 `apm login`。
44
+
45
+ `apm ws` 可单独用 **`--url`**、**`--token`** 覆盖配置文件,不依赖上述 preAction 注入逻辑。
46
+
47
+ ---
48
+
49
+ ## `apm comment`(需求内容版本评论)
50
+
51
+ | 子命令 | 说明 |
52
+ |--------|------|
53
+ | `comment update` | 提交评论正文:仅「已创建」状态可写,成功后变为「待处理」 |
54
+ | `comment process` | 将指定版本下你名下「待处理」评论标为已处理并创建新版本(同步需求正文) |
55
+
56
+ ```bash
57
+ apm comment update --id <评论id> --content "评论正文"
58
+
59
+ apm comment process --requirement-id <需求id> --version-seq <n> --content "新版本正文"
60
+ apm comment process --requirement-id <需求id> --version-seq <n> --content-file ./updated.md
61
+ ```
62
+
63
+ `--version-seq` 为该需求下的版本序号,与界面 **v1、v2** 一致(不是数据库里的版本行 id)。
64
+
65
+ ---
66
+
67
+ ## `apm requirement`
68
+
69
+ ### `requirement version content`
70
+
71
+ 按需求 id 与版本序号获取该版本正文(**stdout** 输出 JSON,含 `content`、`comments` 等)。
72
+
73
+ ```bash
74
+ apm requirement version content --requirement-id <需求id> --version-seq <n>
10
75
  ```
11
76
 
12
- 优先级(业务命令):`--base-url` / `--token` / `--employee-id` → 配置文件 `~/.config/apm/config.json`(或 `$XDG_CONFIG_HOME/apm/config.json`)→ `APM_BASE_URL` / `APM_TOKEN` / `APM_EMPLOYEE_ID`。
77
+ ### `requirement test-case import`
78
+
79
+ 从 UTF-8 JSON **数组**文件批量导入测试用例;元素字段与单条创建一致(如 `title`、`steps`,可选 `expectedResult`、`status`)。
80
+
81
+ ```bash
82
+ apm requirement test-case import --requirement-id <需求id> --file ./cases.json
83
+ ```
84
+
85
+ ### `requirement branch set-status`
86
+
87
+ 更新分支状态,两种方式二选一:
88
+
89
+ 1. **按分支记录 id**(`branches/list` 返回的 `id`):
90
+
91
+ ```bash
92
+ apm requirement branch set-status --branch-id <分支记录id> --status <状态>
93
+ ```
13
94
 
14
- ## 业务子命令(示例)
95
+ 2. **按需求 id + 远程分支名(精确匹配)**:
15
96
 
16
97
  ```bash
17
- apm comment update --id 1 --content "新正文"
98
+ apm requirement branch set-status \
99
+ --requirement-id <需求id> \
100
+ --branch-name <远程分支名> \
101
+ --status <状态>
102
+ ```
18
103
 
19
- apm requirement version create --requirement-id 1 --content "版本说明"
20
- apm requirement version create --requirement-id 1 --content "说明" --no-sync-requirement-content
104
+ 状态取值与后端一致,例如:`CREATED`、`IN_DEVELOPMENT`、`PENDING_TEST`、`MERGED`。
21
105
 
22
- apm requirement test-case import --requirement-id 1 --file ./cases.json
106
+ ### `requirement defect set-status`
23
107
 
24
- apm requirement branch set-status --requirement-id 1 --branch-name feat/x --status IN_DEVELOPMENT
108
+ 按缺陷 id 更新状态。
25
109
 
26
- apm requirement defect set-status --defect-id 1 --status RESOLVED
110
+ ```bash
111
+ apm requirement defect set-status --defect-id <id> --status <状态>
27
112
  ```
28
113
 
29
- 员工 CLI 口令为明文落库,在 Web 端编辑员工节点时填写,或通过 `POST /api/v1/employees/update` 传入 `cliPassword` 后再 `apm login`。
114
+ ---
115
+
116
+ ## `apm ws`
117
+
118
+ 启动员工 **WebSocket** 客户端,连接后等待服务端推送(**Ctrl+C** 退出)。
119
+
120
+ 常用选项:
121
+
122
+ - `--version`:打印当前 CLI 包版本后退出
123
+ - `-u, --url`:服务根地址(覆盖配置中的 base-url)
124
+ - `--token`:员工 token(可覆盖配置文件)
125
+ - `-p, --port`:WebSocket 端口(覆盖 `apm config` 中的 `ws-port`)
126
+ - `--employee-id`:仅用于日志展示,可选
127
+
128
+ ---
129
+
130
+ ## 员工 CLI 口令
131
+
132
+ 员工 CLI 口令在库中为可配置项;在 Web 端维护员工节点时填写,或通过后端员工更新接口设置后再执行 `apm login`。
133
+
134
+ ## SDK
135
+
136
+ 本包导出 `createApmClient`、`requestConfig` 等,供在 Node 中调用与 CLI 相同的 HTTP API;详见包内 `package.json` 的 `exports` 与 `dist` 类型声明。
@@ -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.js";
4
4
  export { requestConfig, type RequestConfig } from "./request-config.js";
5
- export type { EmployeeSummary, ReqBranchList, ReqBranchUpdate, ReqCommentProcessPendingAndVersion, ReqCommentSubmitPending, ResCommentProcessPendingAndVersion, ReqDefectUpdate, ReqLoginByEmployee, ReqTestCaseCreate, RequirementBranchRow, RequirementBranchStatus, RequirementCommentRow, RequirementCommentStatus, RequirementDefectRow, RequirementDefectStatus, RequirementTestCaseRow, RequirementVersionRow, ResLoginByEmployee, } from "./requirement";
5
+ export type { EmployeeSummary, ReqBranchList, ReqBranchUpdate, ReqCommentProcessPendingAndVersion, ReqCommentSubmitPending, ResCommentProcessPendingAndVersion, ReqDefectUpdate, ReqLoginByEmployee, ReqTestCaseCreate, ReqVersionList, RequirementBranchRow, RequirementBranchStatus, RequirementCommentRow, RequirementCommentStatus, RequirementDefectRow, RequirementDefectStatus, RequirementTestCaseRow, RequirementVersionRow, ResLoginByEmployee, } from "./requirement";
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,aAAa,CAAC;AACrB,OAAO,EAAE,aAAa,EAAE,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACxE,YAAY,EACV,eAAe,EACf,aAAa,EACb,eAAe,EACf,kCAAkC,EAClC,uBAAuB,EACvB,kCAAkC,EAClC,eAAe,EACf,kBAAkB,EAClB,iBAAiB,EACjB,oBAAoB,EACpB,uBAAuB,EACvB,qBAAqB,EACrB,wBAAwB,EACxB,oBAAoB,EACpB,uBAAuB,EACvB,sBAAsB,EACtB,qBAAqB,EACrB,kBAAkB,GACnB,MAAM,eAAe,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,aAAa,CAAC;AACrB,OAAO,EAAE,aAAa,EAAE,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACxE,YAAY,EACV,eAAe,EACf,aAAa,EACb,eAAe,EACf,kCAAkC,EAClC,uBAAuB,EACvB,kCAAkC,EAClC,eAAe,EACf,kBAAkB,EAClB,iBAAiB,EACjB,cAAc,EACd,oBAAoB,EACpB,uBAAuB,EACvB,qBAAqB,EACrB,wBAAwB,EACxB,oBAAoB,EACpB,uBAAuB,EACvB,sBAAsB,EACtB,qBAAqB,EACrB,kBAAkB,GACnB,MAAM,eAAe,CAAC"}
@@ -1,4 +1,4 @@
1
- import type { ReqBranchList, ReqBranchUpdate, ReqCommentProcessPendingAndVersion, ReqCommentSubmitPending, ResCommentProcessPendingAndVersion, ReqDefectUpdate, ReqLoginByEmployee, ReqTestCaseCreate, RequirementBranchRow, RequirementCommentRow, RequirementDefectRow, RequirementTestCaseRow, ResLoginByEmployee } from "./requirement";
1
+ import type { ReqBranchList, ReqBranchUpdate, ReqCommentProcessPendingAndVersion, ReqCommentSubmitPending, ResCommentProcessPendingAndVersion, ReqDefectUpdate, ReqLoginByEmployee, ReqTestCaseCreate, ReqVersionList, RequirementBranchRow, RequirementCommentRow, RequirementDefectRow, RequirementTestCaseRow, RequirementVersionRow, ResLoginByEmployee } from "./requirement";
2
2
  export declare const requestConfig: {
3
3
  readonly auth: {
4
4
  readonly loginByEmployee: import("listpage-http").EndpointConfig<ReqLoginByEmployee, ResLoginByEmployee>;
@@ -10,6 +10,7 @@ export declare const requestConfig: {
10
10
  readonly branchesList: import("listpage-http").EndpointConfig<ReqBranchList, RequirementBranchRow[]>;
11
11
  readonly branchesUpdate: import("listpage-http").EndpointConfig<ReqBranchUpdate, RequirementBranchRow>;
12
12
  readonly defectsUpdate: import("listpage-http").EndpointConfig<ReqDefectUpdate, RequirementDefectRow>;
13
+ readonly versionsList: import("listpage-http").EndpointConfig<ReqVersionList, RequirementVersionRow[]>;
13
14
  };
14
15
  };
15
16
  export type RequestConfig = typeof requestConfig;
@@ -1 +1 @@
1
- {"version":3,"file":"request-config.d.ts","sourceRoot":"","sources":["../../src/api/request-config.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,aAAa,EACb,eAAe,EACf,kCAAkC,EAClC,uBAAuB,EACvB,kCAAkC,EAClC,eAAe,EACf,kBAAkB,EAClB,iBAAiB,EACjB,oBAAoB,EACpB,qBAAqB,EACrB,oBAAoB,EACpB,sBAAsB,EACtB,kBAAkB,EACnB,MAAM,eAAe,CAAC;AAEvB,eAAO,MAAM,aAAa;;;;;;;;;;;;CA2ChB,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":"AACA,OAAO,KAAK,EACV,aAAa,EACb,eAAe,EACf,kCAAkC,EAClC,uBAAuB,EACvB,kCAAkC,EAClC,eAAe,EACf,kBAAkB,EAClB,iBAAiB,EACjB,cAAc,EACd,oBAAoB,EACpB,qBAAqB,EACrB,oBAAoB,EACpB,sBAAsB,EACtB,qBAAqB,EACrB,kBAAkB,EACnB,MAAM,eAAe,CAAC;AAEvB,eAAO,MAAM,aAAa;;;;;;;;;;;;;CA+ChB,CAAC;AAEX,MAAM,MAAM,aAAa,GAAG,OAAO,aAAa,CAAC"}
@@ -35,6 +35,10 @@ exports.requestConfig = {
35
35
  method: "POST",
36
36
  path: "/requirements/defects/update",
37
37
  }),
38
+ versionsList: (0, listpage_http_1.defineEndpoint)({
39
+ method: "POST",
40
+ path: "/requirements/versions/list",
41
+ }),
38
42
  },
39
43
  };
40
44
  //# sourceMappingURL=request-config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"request-config.js","sourceRoot":"","sources":["../../src/api/request-config.ts"],"names":[],"mappings":";;;AAAA,iDAA+C;AAiBlC,QAAA,aAAa,GAAG;IAC3B,IAAI,EAAE;QACJ,eAAe,EAAE,IAAA,8BAAc,EAAyC;YACtE,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,yBAAyB;YAC/B,YAAY,EAAE,KAAK;SACpB,CAAC;KACH;IACD,WAAW,EAAE;QACX,qBAAqB,EAAE,IAAA,8BAAc,EAGnC;YACA,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,uCAAuC;SAC9C,CAAC;QACF,gCAAgC,EAAE,IAAA,8BAAc,EAG9C;YACA,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,oDAAoD;SAC3D,CAAC;QACF,oBAAoB,EAAE,IAAA,8BAAc,EAGlC;YACA,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,uCAAuC;SAC9C,CAAC;QACF,YAAY,EAAE,IAAA,8BAAc,EAAwC;YAClE,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,6BAA6B;SACpC,CAAC;QACF,cAAc,EAAE,IAAA,8BAAc,EAAwC;YACpE,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,+BAA+B;SACtC,CAAC;QACF,aAAa,EAAE,IAAA,8BAAc,EAAwC;YACnE,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,8BAA8B;SACrC,CAAC;KACH;CACO,CAAC"}
1
+ {"version":3,"file":"request-config.js","sourceRoot":"","sources":["../../src/api/request-config.ts"],"names":[],"mappings":";;;AAAA,iDAA+C;AAmBlC,QAAA,aAAa,GAAG;IAC3B,IAAI,EAAE;QACJ,eAAe,EAAE,IAAA,8BAAc,EAAyC;YACtE,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,yBAAyB;YAC/B,YAAY,EAAE,KAAK;SACpB,CAAC;KACH;IACD,WAAW,EAAE;QACX,qBAAqB,EAAE,IAAA,8BAAc,EAGnC;YACA,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,uCAAuC;SAC9C,CAAC;QACF,gCAAgC,EAAE,IAAA,8BAAc,EAG9C;YACA,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,oDAAoD;SAC3D,CAAC;QACF,oBAAoB,EAAE,IAAA,8BAAc,EAGlC;YACA,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,uCAAuC;SAC9C,CAAC;QACF,YAAY,EAAE,IAAA,8BAAc,EAAwC;YAClE,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,6BAA6B;SACpC,CAAC;QACF,cAAc,EAAE,IAAA,8BAAc,EAAwC;YACpE,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,+BAA+B;SACtC,CAAC;QACF,aAAa,EAAE,IAAA,8BAAc,EAAwC;YACnE,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,8BAA8B;SACrC,CAAC;QACF,YAAY,EAAE,IAAA,8BAAc,EAA0C;YACpE,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,6BAA6B;SACpC,CAAC;KACH;CACO,CAAC"}
@@ -67,6 +67,7 @@ export type RequirementBranchRow = {
67
67
  repository: {
68
68
  id: number;
69
69
  name: string;
70
+ baseBranch: string;
70
71
  };
71
72
  branchName: string;
72
73
  employee: EmployeeSummary;
@@ -102,6 +103,10 @@ export type ReqTestCaseCreate = {
102
103
  expectedResult?: string;
103
104
  status?: RequirementTestCaseStatus;
104
105
  };
106
+ /** 列出某需求下全部内容版本(与 apps/fe ReqVersionList 对齐) */
107
+ export type ReqVersionList = {
108
+ requirementId: number;
109
+ };
105
110
  export type ReqLoginByEmployee = {
106
111
  employeeId: number;
107
112
  password: string;
@@ -1 +1 @@
1
- {"version":3,"file":"requirement.d.ts","sourceRoot":"","sources":["../../src/api/requirement.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"requirement.d.ts","sourceRoot":"","sources":["../../src/api/requirement.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { Command } from "commander";
2
+ export declare function registerInitCommands(program: Command): void;
3
+ //# sourceMappingURL=init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAWzC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA0B3D"}
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.registerInitCommands = registerInitCommands;
7
+ const promises_1 = require("node:fs/promises");
8
+ const node_os_1 = __importDefault(require("node:os"));
9
+ const node_path_1 = __importDefault(require("node:path"));
10
+ function resolveSkillSourceDir() {
11
+ // dist/cli/commands/init.js -> ../../../templates/skills
12
+ return node_path_1.default.resolve(__dirname, "../../../templates/skills");
13
+ }
14
+ function resolveCursorSkillsDir() {
15
+ return node_path_1.default.join(node_os_1.default.homedir(), ".cursor", "skills");
16
+ }
17
+ function registerInitCommands(program) {
18
+ program
19
+ .command("init")
20
+ .description("安装内置 Cursor skills 到 ~/.cursor/skills")
21
+ .action(async () => {
22
+ const srcDir = resolveSkillSourceDir();
23
+ const dstDir = resolveCursorSkillsDir();
24
+ await (0, promises_1.mkdir)(dstDir, { recursive: true });
25
+ await (0, promises_1.cp)(srcDir, dstDir, {
26
+ recursive: true,
27
+ force: true,
28
+ });
29
+ console.log(JSON.stringify({
30
+ ok: true,
31
+ installedFrom: srcDir,
32
+ installedTo: dstDir,
33
+ }, null, 2));
34
+ });
35
+ }
36
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":";;;;;AAcA,oDA0BC;AAxCD,+CAA6C;AAC7C,sDAAyB;AACzB,0DAA6B;AAG7B,SAAS,qBAAqB;IAC5B,yDAAyD;IACzD,OAAO,mBAAI,CAAC,OAAO,CAAC,SAAS,EAAE,2BAA2B,CAAC,CAAC;AAC9D,CAAC;AAED,SAAS,sBAAsB;IAC7B,OAAO,mBAAI,CAAC,IAAI,CAAC,iBAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;AACtD,CAAC;AAED,SAAgB,oBAAoB,CAAC,OAAgB;IACnD,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,uCAAuC,CAAC;SACpD,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,MAAM,GAAG,qBAAqB,EAAE,CAAC;QACvC,MAAM,MAAM,GAAG,sBAAsB,EAAE,CAAC;QAExC,MAAM,IAAA,gBAAK,EAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACzC,MAAM,IAAA,aAAE,EAAC,MAAM,EAAE,MAAM,EAAE;YACvB,SAAS,EAAE,IAAI;YACf,KAAK,EAAE,IAAI;SACZ,CAAC,CAAC;QAEH,OAAO,CAAC,GAAG,CACT,IAAI,CAAC,SAAS,CACZ;YACE,EAAE,EAAE,IAAI;YACR,aAAa,EAAE,MAAM;YACrB,WAAW,EAAE,MAAM;SACpB,EACD,IAAI,EACJ,CAAC,CACF,CACF,CAAC;IACJ,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"requirement.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/requirement.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAUzC,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAQlE"}
1
+ {"version":3,"file":"requirement.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/requirement.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAUzC,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CASlE"}
@@ -8,10 +8,38 @@ function registerRequirementCommands(program) {
8
8
  const req = program
9
9
  .command("requirement")
10
10
  .description("需求相关子命令(测试用例、分支、缺陷等)");
11
+ registerRequirementVersionCommands(req);
11
12
  registerRequirementTestCaseCommands(req);
12
13
  registerRequirementBranchCommands(req);
13
14
  registerRequirementDefectCommands(req);
14
15
  }
16
+ function registerRequirementVersionCommands(req) {
17
+ const reqVer = req
18
+ .command("version")
19
+ .description("需求内容版本(版本序号与界面 v1、v2 一致)");
20
+ reqVer
21
+ .command("content")
22
+ .description("按需求 id 与版本序号获取该版本正文(JSON,含评论等)")
23
+ .requiredOption("--requirement-id <id>", "需求 id", (v) => Number.parseInt(v, 10))
24
+ .requiredOption("--version-seq <n>", "该需求下的版本序号(与界面 v1、v2 一致,非数据库 id)", (v) => Number.parseInt(v, 10))
25
+ .action(async (opts) => {
26
+ const api = (0, credentials_1.apiClient)();
27
+ try {
28
+ const list = await api.requirement.versionsList({
29
+ requirementId: opts.requirementId,
30
+ });
31
+ const hit = list.find((v) => v.versionSeq === opts.versionSeq);
32
+ if (!hit) {
33
+ console.error(`未找到版本序号 ${opts.versionSeq}(该需求下共有 ${list.length} 个版本)`);
34
+ process.exit(1);
35
+ }
36
+ console.log(JSON.stringify(hit, null, 2));
37
+ }
38
+ catch (e) {
39
+ (0, exit_api_error_1.exitApiError)(e);
40
+ }
41
+ });
42
+ }
15
43
  function registerRequirementTestCaseCommands(req) {
16
44
  const reqTc = req.command("test-case").description("测试用例");
17
45
  reqTc
@@ -62,17 +90,40 @@ function registerRequirementBranchCommands(req) {
62
90
  const reqBranch = req.command("branch").description("需求分支");
63
91
  reqBranch
64
92
  .command("set-status")
65
- .description("按需求 ID + 分支名更新分支状态")
66
- .requiredOption("--requirement-id <id>", "需求 id", (v) => Number.parseInt(v, 10))
67
- .requiredOption("--branch-name <name>", "远程分支名(精确匹配)")
93
+ .description("更新分支状态:按分支记录 id,或按需求 id + 远程分支名精确匹配")
68
94
  .requiredOption("--status <status>", "目标状态")
95
+ .option("--branch-id <id>", "分支记录 id(与 requirement-id + branch-name 二选一)", (v) => Number.parseInt(v, 10))
96
+ .option("--requirement-id <id>", "需求 id", (v) => Number.parseInt(v, 10))
97
+ .option("--branch-name <name>", "远程分支名(精确匹配)")
69
98
  .action(async (opts) => {
70
99
  const status = opts.status;
71
- const name = opts.branchName.trim();
72
100
  const api = (0, credentials_1.apiClient)();
101
+ const byId = opts.branchId != null &&
102
+ Number.isFinite(opts.branchId) &&
103
+ opts.branchId >= 1;
104
+ const reqId = opts.requirementId;
105
+ const name = opts.branchName?.trim() ?? "";
106
+ const byReqAndName = reqId != null &&
107
+ Number.isFinite(reqId) &&
108
+ reqId >= 1 &&
109
+ name.length > 0;
110
+ if (!byId && !byReqAndName) {
111
+ console.error("请使用以下之一:\n" +
112
+ " apm requirement branch set-status --branch-id <id> --status <状态>\n" +
113
+ " apm requirement branch set-status --requirement-id <id> --branch-name <name> --status <状态>");
114
+ process.exit(1);
115
+ }
73
116
  try {
117
+ if (byId) {
118
+ const row = await api.requirement.branchesUpdate({
119
+ id: opts.branchId,
120
+ status,
121
+ });
122
+ console.log(JSON.stringify(row, null, 2));
123
+ return;
124
+ }
74
125
  const list = await api.requirement.branchesList({
75
- requirementId: opts.requirementId,
126
+ requirementId: reqId,
76
127
  });
77
128
  const hits = list.filter((b) => b.branchName.trim() === name);
78
129
  if (hits.length === 0) {
@@ -1 +1 @@
1
- {"version":3,"file":"requirement.js","sourceRoot":"","sources":["../../../src/cli/commands/requirement.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"requirement.js","sourceRoot":"","sources":["../../../src/cli/commands/requirement.ts"],"names":[],"mappings":"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"}
@@ -20,6 +20,7 @@ export declare function apiClient(): import("listpage-http").ApiClient<{
20
20
  readonly branchesList: import("listpage-http").EndpointConfig<import("..").ReqBranchList, import("..").RequirementBranchRow[]>;
21
21
  readonly branchesUpdate: import("listpage-http").EndpointConfig<import("..").ReqBranchUpdate, import("..").RequirementBranchRow>;
22
22
  readonly defectsUpdate: import("listpage-http").EndpointConfig<import("..").ReqDefectUpdate, import("..").RequirementDefectRow>;
23
+ readonly versionsList: import("listpage-http").EndpointConfig<import("..").ReqVersionList, import("..").RequirementVersionRow[]>;
23
24
  };
24
25
  }>;
25
26
  //# sourceMappingURL=credentials.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"credentials.d.ts","sourceRoot":"","sources":["../../src/cli/credentials.ts"],"names":[],"mappings":"AAUA,MAAM,MAAM,cAAc,GAAG;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAIF,0DAA0D;AAC1D,wBAAgB,uBAAuB,CACrC,WAAW,EAAE,cAAc,GAAG,IAAI,GACjC,IAAI,CAEN;AAED,wBAAgB,2BAA2B,IACvC,cAAc,GACd;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAmBpB;AAED,wBAAgB,uBAAuB,IAAI,cAAc,CAMxD;AAED,wBAAgB,SAAS;;;;;;;;;;;;GAOxB"}
1
+ {"version":3,"file":"credentials.d.ts","sourceRoot":"","sources":["../../src/cli/credentials.ts"],"names":[],"mappings":"AAUA,MAAM,MAAM,cAAc,GAAG;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAIF,0DAA0D;AAC1D,wBAAgB,uBAAuB,CACrC,WAAW,EAAE,cAAc,GAAG,IAAI,GACjC,IAAI,CAEN;AAED,wBAAgB,2BAA2B,IACvC,cAAc,GACd;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAmBpB;AAED,wBAAgB,uBAAuB,IAAI,cAAc,CAMxD;AAED,wBAAgB,SAAS;;;;;;;;;;;;;GAOxB"}
package/dist/cli.js CHANGED
@@ -6,6 +6,7 @@ const config_store_1 = require("./config-store");
6
6
  const auth_1 = require("./cli/commands/auth");
7
7
  const comment_1 = require("./cli/commands/comment");
8
8
  const config_1 = require("./cli/commands/config");
9
+ const init_1 = require("./cli/commands/init");
9
10
  const requirement_1 = require("./cli/commands/requirement");
10
11
  const ws_1 = require("./cli/commands/ws");
11
12
  const credentials_1 = require("./cli/credentials");
@@ -16,6 +17,7 @@ const program = new commander_1.Command()
16
17
  const argv = process.argv.slice(2);
17
18
  const first = argv.find((a) => !a.startsWith("-"));
18
19
  if (first === "config" ||
20
+ first === "init" ||
19
21
  first === "login" ||
20
22
  first === "logout" ||
21
23
  first === "ws") {
@@ -30,6 +32,7 @@ const program = new commander_1.Command()
30
32
  (0, credentials_1.setActiveCliCredentials)(cred);
31
33
  });
32
34
  (0, config_1.registerConfigCommands)(program);
35
+ (0, init_1.registerInitCommands)(program);
33
36
  (0, auth_1.registerAuthCommands)(program);
34
37
  (0, comment_1.registerCommentCommands)(program);
35
38
  (0, requirement_1.registerRequirementCommands)(program);
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";;;AACA,yCAAoC;AACpC,iDAAkD;AAClD,8CAA2D;AAC3D,oDAAiE;AACjE,kDAA+D;AAC/D,4DAAyE;AACzE,0CAAuD;AACvD,mDAG2B;AAE3B,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE;KAC1B,IAAI,CAAC,KAAK,CAAC;KACX,WAAW,CAAC,eAAe,CAAC;KAC5B,IAAI,CAAC,WAAW,EAAE,GAAG,EAAE;IACtB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACnC,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;IACnD,IACE,KAAK,KAAK,QAAQ;QAClB,KAAK,KAAK,OAAO;QACjB,KAAK,KAAK,QAAQ;QAClB,KAAK,KAAK,IAAI,EACd,CAAC;QACD,OAAO;IACT,CAAC;IACD,MAAM,IAAI,GAAG,IAAA,yCAA2B,GAAE,CAAC;IAC3C,IAAI,OAAO,IAAI,IAAI,EAAE,CAAC;QACpB,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC1B,OAAO,CAAC,KAAK,CAAC,QAAQ,IAAA,+BAAgB,GAAE,EAAE,CAAC,CAAC;QAC5C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,IAAA,qCAAuB,EAAC,IAAI,CAAC,CAAC;AAChC,CAAC,CAAC,CAAC;AAEL,IAAA,+BAAsB,EAAC,OAAO,CAAC,CAAC;AAChC,IAAA,2BAAoB,EAAC,OAAO,CAAC,CAAC;AAC9B,IAAA,iCAAuB,EAAC,OAAO,CAAC,CAAC;AACjC,IAAA,yCAA2B,EAAC,OAAO,CAAC,CAAC;AACrC,IAAA,uBAAkB,EAAC,OAAO,CAAC,CAAC;AAE5B,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IAC7C,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACnB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";;;AACA,yCAAoC;AACpC,iDAAkD;AAClD,8CAA2D;AAC3D,oDAAiE;AACjE,kDAA+D;AAC/D,8CAA2D;AAC3D,4DAAyE;AACzE,0CAAuD;AACvD,mDAG2B;AAE3B,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE;KAC1B,IAAI,CAAC,KAAK,CAAC;KACX,WAAW,CAAC,eAAe,CAAC;KAC5B,IAAI,CAAC,WAAW,EAAE,GAAG,EAAE;IACtB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACnC,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;IACnD,IACE,KAAK,KAAK,QAAQ;QAClB,KAAK,KAAK,MAAM;QAChB,KAAK,KAAK,OAAO;QACjB,KAAK,KAAK,QAAQ;QAClB,KAAK,KAAK,IAAI,EACd,CAAC;QACD,OAAO;IACT,CAAC;IACD,MAAM,IAAI,GAAG,IAAA,yCAA2B,GAAE,CAAC;IAC3C,IAAI,OAAO,IAAI,IAAI,EAAE,CAAC;QACpB,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC1B,OAAO,CAAC,KAAK,CAAC,QAAQ,IAAA,+BAAgB,GAAE,EAAE,CAAC,CAAC;QAC5C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,IAAA,qCAAuB,EAAC,IAAI,CAAC,CAAC;AAChC,CAAC,CAAC,CAAC;AAEL,IAAA,+BAAsB,EAAC,OAAO,CAAC,CAAC;AAChC,IAAA,2BAAoB,EAAC,OAAO,CAAC,CAAC;AAC9B,IAAA,2BAAoB,EAAC,OAAO,CAAC,CAAC;AAC9B,IAAA,iCAAuB,EAAC,OAAO,CAAC,CAAC;AACjC,IAAA,yCAA2B,EAAC,OAAO,CAAC,CAAC;AACrC,IAAA,uBAAkB,EAAC,OAAO,CAAC,CAAC;AAE5B,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IAC7C,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACnB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ai-project-manage-cli",
3
- "version": "1.0.4",
3
+ "version": "1.0.5",
4
4
  "private": false,
5
5
  "description": "CLI / SDK for AI项目管理",
6
6
  "main": "./dist/index.js",
@@ -16,7 +16,8 @@
16
16
  }
17
17
  },
18
18
  "files": [
19
- "dist"
19
+ "dist",
20
+ "templates"
20
21
  ],
21
22
  "scripts": {
22
23
  "build": "tsc -p tsconfig.json",
@@ -25,13 +26,15 @@
25
26
  "apm:logout": "node ./dist/cli.js logout",
26
27
  "apm:login": "node ./dist/cli.js login",
27
28
  "apm:config:get-base-url": "node ./dist/cli.js config get base-url",
29
+ "apm:init": "node ./dist/cli.js init",
28
30
  "apm:comment:help": "node ./dist/cli.js comment --help",
29
31
  "apm:comment:update": "node ./dist/cli.js comment update",
30
32
  "apm:comment:process": "node ./dist/cli.js comment process",
31
33
  "apm:requirement:help": "node ./dist/cli.js requirement --help",
32
34
  "apm:requirement:test-case:import": "node ./dist/cli.js requirement test-case import",
33
35
  "apm:requirement:branch:set-status": "node ./dist/cli.js requirement branch set-status",
34
- "apm:requirement:defect:set-status": "node ./dist/cli.js requirement defect set-status"
36
+ "apm:requirement:defect:set-status": "node ./dist/cli.js requirement defect set-status",
37
+ "apm:requirement:version:content": "node ./dist/cli.js requirement version content"
35
38
  },
36
39
  "dependencies": {
37
40
  "commander": "^13.1.0",
@@ -0,0 +1,137 @@
1
+ ---
2
+ name: apm-auto-dev
3
+ description: 按分支 ID、分支名、基准分支、需求 ID、版本序号全自动拉分支、更新分支状态、落盘 PRD、串联 openspec-propose 与 openspec-apply-change、生成 MR 评审说明并推送远程。在用户要求全自动开发、APM 自动交付、或给出上述参数时使用。
4
+ ---
5
+
6
+ # APM 全自动开发(编排技能)
7
+
8
+ **角色**:主 Agent 只做参数传递、**串行**启动子 Agent、校验上一步产物、失败则停止并汇总;**禁止**在同一对话里自己执行完整 propose+apply 长流程而不用子 Agent。
9
+
10
+ **输入(必填)**
11
+
12
+ | 字段 | 说明 |
13
+ |------|------|
14
+ | 分支名称 | 远程已存在、本地可无;检出目标 |
15
+ | 基准分支 | 作为 MR 对比基线(通常由服务端 prompt 直接给出) |
16
+ | 需求文档 ID | `--requirement-id` |
17
+ | 需求版本序号 | `--version-seq`(与界面 v1/v2 一致) |
18
+ | 分支记录 ID | `--branch-id`,用于更新需求分支状态 |
19
+
20
+ ---
21
+
22
+ ## 子 Agent 强制隔离
23
+
24
+ - 下列步骤 **1~7** 各对应一次 **Task 子 Agent**(或等价:独立子会话),**严格串行**:仅当上一步子 Agent **明确结束**且主 Agent **已校验产物**后,再启动下一步。
25
+ - **禁止**并行启动多个子 Agent 执行本流程中的步骤。
26
+ - 子 Agent 需执行完毕:读 SKILL、跑命令、写文件、回报结构化结果(路径、变更名、成功/失败)。
27
+
28
+ ---
29
+
30
+ ## 步骤 1 — 子 Agent:Git 分支与未提交处理
31
+
32
+ 在仓库根目录执行(仅读写 git,逻辑如下)。
33
+
34
+ 1. `git fetch origin`(确保能拿到远程分支)。
35
+ 2. 记 `TARGET=<用户分支名>`,`CURRENT=$(git branch --show-current)`。
36
+ 3. 判断是否脏:`git status --porcelain` 非空即为脏。
37
+ 4. 若 `CURRENT != TARGET` 且脏 → `git stash push -u -m "apm-auto-dev: wip before checkout ${TARGET}"`,再检出目标分支。
38
+ 5. 若 `CURRENT == TARGET` 且脏 → **不 stash**:根据当前 diff 生成提交说明并提交(例如用 `git diff --stat` 与关键文件摘要凑成一句 subject + 可选 body;或 `git commit -am` 等价操作),**不得**无消息提交。
39
+ 6. 检出 `TARGET`(本地无则跟踪远程,例如 `git switch -c "$TARGET" "origin/$TARGET"` 或 `git checkout --track "origin/$TARGET"`,以当前 git 版本可用命令为准)。
40
+ 7. 若第 4 步曾 stash,检出成功后 **不要** 自动 pop(避免与后续自动化冲突);在最终结果中提醒用户稍后自行 `git stash pop` 如需取回。
41
+
42
+ **完成判定**:`git branch --show-current` 等于 `TARGET`;第 4/5 步语义已执行。
43
+
44
+ ---
45
+
46
+ ## 步骤 2 — 子 Agent:拉取需求正文并落盘
47
+
48
+ 1. 执行:
49
+
50
+ ```bash
51
+ apm requirement version content --requirement-id <ID> --version-seq <SEQ>
52
+ ```
53
+
54
+ 2. 解析 **stdout** JSON:取版本对象中的 **`content`** 字段(字符串)作为 PRD 正文。
55
+ 3. 由正文推导目录名 `<name>`(**kebab-case**):优先取第一行 Markdown 标题(去 `#`)、否则取首行摘要;小写、空格与下划线改为 `-`,移除非 URL/路径安全字符;过长则截断至约 48 字符。若 `.apm/<name>` 已存在则加后缀 `-2`、`-3`… 直至不冲突。
56
+ 4. 创建目录并**覆盖写入**:
57
+
58
+ `.apm/<name>/prd.md`
59
+
60
+ 5. 将最终采用的 `<name>` 回报主 Agent(后续步骤共用同一目录)。
61
+
62
+ **完成判定**:`prd.md` 存在且非空;`<name>` 已确定。
63
+
64
+ ---
65
+
66
+ ## 步骤 3 — 子 Agent:更新需求分支状态为开发中
67
+
68
+ 1. 在仓库根目录或任意目录执行(只依赖 apm 配置,不依赖当前 cwd):确保已通过 `apm login`,并已配置 `base-url`。
69
+ 2. 调用 CLI 更新分支状态为“开发中”,命令形如:
70
+
71
+ ```bash
72
+ apm requirement branch set-status --branch-id <BRANCH_ID> --status 开发中
73
+ ```
74
+
75
+ 3. 子 Agent 需检查命令退出码,非 0 时读取 stderr,返回失败原因并终止全流程(不要静默继续后续步骤)。
76
+
77
+ **完成判定**:命令成功返回(退出码 0),且无错误输出。
78
+
79
+ ---
80
+
81
+ ## 步骤 4 — 子 Agent:openspec-propose
82
+
83
+ 1. 读取并遵循项目内技能:`.cursor/skills/openspec-propose/SKILL.md`。
84
+ 2. **输入**:仓库内文件路径 **`.apm/<name>/prd.md`**(子 Agent 应用 Read 读全文);变更名可据 PRD 归纳 kebab-case;**不要**向用户追问。
85
+ 3. **输出**:子 Agent 必须回报 **`openspec/changes/<change-name>/` 的绝对或仓库相对路径** 以及 **`<change-name>`**(若与 `<name>` 不同,以 openspec 目录名为准)。
86
+
87
+ **完成判定**:`openspec status --change "<change-name>"` 无「缺工件」类阻塞;`proposal.md`、`tasks.md` 等应已按该 SKILL 就绪。
88
+
89
+ ---
90
+
91
+ ## 步骤 5 — 子 Agent:openspec-apply-change
92
+
93
+ 1. 读取并遵循:`.cursor/skills/openspec-apply-change/SKILL.md`。
94
+ 2. **输入(必须)**:上一步回报的变更目录路径或 **`<change-name>`**(与 openspec-propose 产出一致);主 Agent 必须将步骤 3 的结构化结果传入本子 Agent。
95
+ 3. 按该 SKILL 执行任务直至完成或**硬阻塞**(硬阻塞时停止全流程,汇总原因)。
96
+
97
+ **完成判定**:该 SKILL 定义的完成/暂停语义达成;代码与任务勾选与仓库状态一致。
98
+
99
+ ---
100
+
101
+ ## 步骤 6 — 子 Agent:MR 评审说明 → change.md
102
+
103
+ 1. 读取并遵循:`.cursor/skills/mr-review-brief/SKILL.md`;模板使用 **`.cursor/skills/mr-review-brief/mr-review-template.md`**(若仓库内另有 `release-checklist` 副本,以实际存在路径为准)。
104
+ 2. **对比基准**:使用**必填输入**中的 `baseBranch`。生成前先校验该分支可被 git 识别(本地或远程任一可解析);不可解析则失败并报错,不再回退读取 `AGENTS.md`。
105
+ 3. 只读 git:`git branch --show-current`、`git log ${BASE_BRANCH}..HEAD --oneline`、`git diff ${BASE_BRANCH}..HEAD`(必要时按文件展开),按模板生成完整 Markdown(**不含**模板末尾 HTML 注释块)。
106
+ 4. **落盘(强制)**:写入 **`.apm/<name>/change.md`**,与 `prd.md` 同目录;**已存在则覆盖**。
107
+ 5. 可在对话中摘要说明已生成,但**文件以 `change.md` 为准**。
108
+
109
+ **完成判定**:`change.md` 存在且含模板主要章节;`{BASE_BRANCH}` 与所选基准一致。
110
+
111
+ ---
112
+
113
+ ## 步骤 7 — 子 Agent:全量提交并推送
114
+
115
+ 1. `git status`:若有未跟踪或已修改文件,则 `git add -A`。
116
+ 2. 若有暂存变更:生成一条概括「全自动交付 + PRD/MR 文档 + OpenSpec 实现」的提交说明(可附 `change-name`、requirement id、version-seq),执行 `git commit`。
117
+ 3. **必须** `git push -u origin "<TARGET>"`(或当前分支已设 upstream 则 `git push`);推送失败则回报 stderr,全流程标记失败。
118
+
119
+ **完成判定**:推送成功;工作区干净或仅剩用户需自理的 stash 提示。
120
+
121
+ ---
122
+
123
+ ## 主 Agent 汇总输出
124
+
125
+ 用精简 Markdown 汇总:
126
+
127
+ - 分支名、`.apm/<name>/` 路径、`openspec/changes/<change-name>/`
128
+ - 各子步骤成功/失败
129
+ - 最终 commit SHA(若有)、远程推送结果
130
+ - 若有 stash:提醒用户在其他分支上 `git stash pop` 时注意冲突
131
+
132
+ ---
133
+
134
+ ## 护栏
135
+
136
+ - 任一步子 Agent 失败:**不要**静默跳过;停止后续步骤,输出失败步骤与可复现命令。
137
+ - 全程**不向用户追问**澄清需求;歧义按 openspec / apply 技能中的「合理假设、不反问」处理。