ai-project-manage-cli 2.0.25 → 3.0.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 (291) hide show
  1. package/dist/index.js +498 -20
  2. package/package.json +27 -25
  3. package/template/apm.config.json +5 -0
  4. package/template/deploy/README.md +3 -0
  5. package/template/workitems/README.md +19 -0
  6. package/README.md +0 -171
  7. package/dist/api/cli.d.ts +0 -228
  8. package/dist/api/cli.d.ts.map +0 -1
  9. package/dist/api/cli.js +0 -3
  10. package/dist/api/cli.js.map +0 -1
  11. package/dist/api/client.d.ts +0 -5
  12. package/dist/api/client.d.ts.map +0 -1
  13. package/dist/api/client.js +0 -30
  14. package/dist/api/client.js.map +0 -1
  15. package/dist/api/http.d.ts +0 -21
  16. package/dist/api/http.d.ts.map +0 -1
  17. package/dist/api/http.js +0 -108
  18. package/dist/api/http.js.map +0 -1
  19. package/dist/api/index.d.ts +0 -6
  20. package/dist/api/index.d.ts.map +0 -1
  21. package/dist/api/index.js +0 -13
  22. package/dist/api/index.js.map +0 -1
  23. package/dist/api/request-config.d.ts +0 -25
  24. package/dist/api/request-config.d.ts.map +0 -1
  25. package/dist/api/request-config.js +0 -73
  26. package/dist/api/request-config.js.map +0 -1
  27. package/dist/api/requirement.d.ts +0 -1
  28. package/dist/api/requirement.d.ts.map +0 -1
  29. package/dist/api/requirement.js +0 -2
  30. package/dist/api/requirement.js.map +0 -1
  31. package/dist/apm-dotenv.d.ts +0 -8
  32. package/dist/apm-dotenv.d.ts.map +0 -1
  33. package/dist/apm-dotenv.js +0 -73
  34. package/dist/apm-dotenv.js.map +0 -1
  35. package/dist/cli/agent-stream-log.d.ts +0 -41
  36. package/dist/cli/agent-stream-log.d.ts.map +0 -1
  37. package/dist/cli/agent-stream-log.js +0 -364
  38. package/dist/cli/agent-stream-log.js.map +0 -1
  39. package/dist/cli/commands/auth.d.ts +0 -3
  40. package/dist/cli/commands/auth.d.ts.map +0 -1
  41. package/dist/cli/commands/auth.js +0 -51
  42. package/dist/cli/commands/auth.js.map +0 -1
  43. package/dist/cli/commands/chat.d.ts +0 -3
  44. package/dist/cli/commands/chat.d.ts.map +0 -1
  45. package/dist/cli/commands/chat.js +0 -32
  46. package/dist/cli/commands/chat.js.map +0 -1
  47. package/dist/cli/commands/comment.d.ts +0 -3
  48. package/dist/cli/commands/comment.d.ts.map +0 -1
  49. package/dist/cli/commands/comment.js +0 -66
  50. package/dist/cli/commands/comment.js.map +0 -1
  51. package/dist/cli/commands/config.d.ts +0 -3
  52. package/dist/cli/commands/config.d.ts.map +0 -1
  53. package/dist/cli/commands/config.js +0 -39
  54. package/dist/cli/commands/config.js.map +0 -1
  55. package/dist/cli/commands/deploy-backend.d.ts +0 -7
  56. package/dist/cli/commands/deploy-backend.d.ts.map +0 -1
  57. package/dist/cli/commands/deploy-backend.js +0 -77
  58. package/dist/cli/commands/deploy-backend.js.map +0 -1
  59. package/dist/cli/commands/deploy-frontend.d.ts +0 -3
  60. package/dist/cli/commands/deploy-frontend.d.ts.map +0 -1
  61. package/dist/cli/commands/deploy-frontend.js +0 -167
  62. package/dist/cli/commands/deploy-frontend.js.map +0 -1
  63. package/dist/cli/commands/get.d.ts +0 -3
  64. package/dist/cli/commands/get.d.ts.map +0 -1
  65. package/dist/cli/commands/get.js +0 -145
  66. package/dist/cli/commands/get.js.map +0 -1
  67. package/dist/cli/commands/init.d.ts +0 -3
  68. package/dist/cli/commands/init.d.ts.map +0 -1
  69. package/dist/cli/commands/init.js +0 -179
  70. package/dist/cli/commands/init.js.map +0 -1
  71. package/dist/cli/commands/minio.d.ts +0 -3
  72. package/dist/cli/commands/minio.d.ts.map +0 -1
  73. package/dist/cli/commands/minio.js +0 -65
  74. package/dist/cli/commands/minio.js.map +0 -1
  75. package/dist/cli/commands/publish.d.ts +0 -3
  76. package/dist/cli/commands/publish.d.ts.map +0 -1
  77. package/dist/cli/commands/publish.js +0 -130
  78. package/dist/cli/commands/publish.js.map +0 -1
  79. package/dist/cli/commands/release.d.ts +0 -3
  80. package/dist/cli/commands/release.d.ts.map +0 -1
  81. package/dist/cli/commands/release.js +0 -37
  82. package/dist/cli/commands/release.js.map +0 -1
  83. package/dist/cli/commands/requirement.d.ts +0 -3
  84. package/dist/cli/commands/requirement.d.ts.map +0 -1
  85. package/dist/cli/commands/requirement.js +0 -169
  86. package/dist/cli/commands/requirement.js.map +0 -1
  87. package/dist/cli/commands/set.d.ts +0 -3
  88. package/dist/cli/commands/set.d.ts.map +0 -1
  89. package/dist/cli/commands/set.js +0 -103
  90. package/dist/cli/commands/set.js.map +0 -1
  91. package/dist/cli/commands/status.d.ts +0 -3
  92. package/dist/cli/commands/status.d.ts.map +0 -1
  93. package/dist/cli/commands/status.js +0 -42
  94. package/dist/cli/commands/status.js.map +0 -1
  95. package/dist/cli/commands/update.d.ts +0 -3
  96. package/dist/cli/commands/update.d.ts.map +0 -1
  97. package/dist/cli/commands/update.js +0 -36
  98. package/dist/cli/commands/update.js.map +0 -1
  99. package/dist/cli/commands/ws.d.ts +0 -3
  100. package/dist/cli/commands/ws.d.ts.map +0 -1
  101. package/dist/cli/commands/ws.js +0 -25
  102. package/dist/cli/commands/ws.js.map +0 -1
  103. package/dist/cli/credentials.d.ts +0 -30
  104. package/dist/cli/credentials.d.ts.map +0 -1
  105. package/dist/cli/credentials.js +0 -52
  106. package/dist/cli/credentials.js.map +0 -1
  107. package/dist/cli/exit-api-error.d.ts +0 -2
  108. package/dist/cli/exit-api-error.d.ts.map +0 -1
  109. package/dist/cli/exit-api-error.js +0 -18
  110. package/dist/cli/exit-api-error.js.map +0 -1
  111. package/dist/cli/instruction-log-stream-sink.d.ts +0 -31
  112. package/dist/cli/instruction-log-stream-sink.d.ts.map +0 -1
  113. package/dist/cli/instruction-log-stream-sink.js +0 -59
  114. package/dist/cli/instruction-log-stream-sink.js.map +0 -1
  115. package/dist/cli/session.d.ts +0 -26
  116. package/dist/cli/session.d.ts.map +0 -1
  117. package/dist/cli/session.js +0 -41
  118. package/dist/cli/session.js.map +0 -1
  119. package/dist/cli/utils/parse.d.ts +0 -2
  120. package/dist/cli/utils/parse.d.ts.map +0 -1
  121. package/dist/cli/utils/parse.js +0 -12
  122. package/dist/cli/utils/parse.js.map +0 -1
  123. package/dist/cli/ws-run-command.d.ts +0 -13
  124. package/dist/cli/ws-run-command.d.ts.map +0 -1
  125. package/dist/cli/ws-run-command.js +0 -330
  126. package/dist/cli/ws-run-command.js.map +0 -1
  127. package/dist/cli-version.d.ts +0 -9
  128. package/dist/cli-version.d.ts.map +0 -1
  129. package/dist/cli-version.js +0 -61
  130. package/dist/cli-version.js.map +0 -1
  131. package/dist/cli.d.ts +0 -3
  132. package/dist/cli.d.ts.map +0 -1
  133. package/dist/cli.js +0 -36
  134. package/dist/cli.js.map +0 -1
  135. package/dist/config-store.d.ts +0 -38
  136. package/dist/config-store.d.ts.map +0 -1
  137. package/dist/config-store.js +0 -131
  138. package/dist/config-store.js.map +0 -1
  139. package/dist/core/apm-config.d.ts +0 -81
  140. package/dist/core/apm-config.d.ts.map +0 -1
  141. package/dist/core/apm-config.js +0 -147
  142. package/dist/core/apm-config.js.map +0 -1
  143. package/dist/core/backend-deploy/backend-deploy-workflow.d.ts +0 -20
  144. package/dist/core/backend-deploy/backend-deploy-workflow.d.ts.map +0 -1
  145. package/dist/core/backend-deploy/backend-deploy-workflow.js +0 -86
  146. package/dist/core/backend-deploy/backend-deploy-workflow.js.map +0 -1
  147. package/dist/core/backend-deploy/command-runner.d.ts +0 -11
  148. package/dist/core/backend-deploy/command-runner.d.ts.map +0 -1
  149. package/dist/core/backend-deploy/command-runner.js +0 -47
  150. package/dist/core/backend-deploy/command-runner.js.map +0 -1
  151. package/dist/core/backend-deploy/dockerode-client/client.d.ts +0 -18
  152. package/dist/core/backend-deploy/dockerode-client/client.d.ts.map +0 -1
  153. package/dist/core/backend-deploy/dockerode-client/client.js +0 -114
  154. package/dist/core/backend-deploy/dockerode-client/client.js.map +0 -1
  155. package/dist/core/backend-deploy/dockerode-client/connection-options.d.ts +0 -6
  156. package/dist/core/backend-deploy/dockerode-client/connection-options.d.ts.map +0 -1
  157. package/dist/core/backend-deploy/dockerode-client/connection-options.js +0 -62
  158. package/dist/core/backend-deploy/dockerode-client/connection-options.js.map +0 -1
  159. package/dist/core/backend-deploy/dockerode-client/container-inspect-format.d.ts +0 -3
  160. package/dist/core/backend-deploy/dockerode-client/container-inspect-format.d.ts.map +0 -1
  161. package/dist/core/backend-deploy/dockerode-client/container-inspect-format.js +0 -23
  162. package/dist/core/backend-deploy/dockerode-client/container-inspect-format.js.map +0 -1
  163. package/dist/core/backend-deploy/dockerode-client/container-options.d.ts +0 -4
  164. package/dist/core/backend-deploy/dockerode-client/container-options.d.ts.map +0 -1
  165. package/dist/core/backend-deploy/dockerode-client/container-options.js +0 -44
  166. package/dist/core/backend-deploy/dockerode-client/container-options.js.map +0 -1
  167. package/dist/core/backend-deploy/dockerode-client/env.d.ts +0 -3
  168. package/dist/core/backend-deploy/dockerode-client/env.d.ts.map +0 -1
  169. package/dist/core/backend-deploy/dockerode-client/env.js +0 -40
  170. package/dist/core/backend-deploy/dockerode-client/env.js.map +0 -1
  171. package/dist/core/backend-deploy/dockerode-client/index.d.ts +0 -8
  172. package/dist/core/backend-deploy/dockerode-client/index.d.ts.map +0 -1
  173. package/dist/core/backend-deploy/dockerode-client/index.js +0 -17
  174. package/dist/core/backend-deploy/dockerode-client/index.js.map +0 -1
  175. package/dist/core/backend-deploy/dockerode-client/ports.d.ts +0 -9
  176. package/dist/core/backend-deploy/dockerode-client/ports.d.ts.map +0 -1
  177. package/dist/core/backend-deploy/dockerode-client/ports.js +0 -35
  178. package/dist/core/backend-deploy/dockerode-client/ports.js.map +0 -1
  179. package/dist/core/backend-deploy/dockerode-client/runtime.d.ts +0 -7
  180. package/dist/core/backend-deploy/dockerode-client/runtime.d.ts.map +0 -1
  181. package/dist/core/backend-deploy/dockerode-client/runtime.js +0 -26
  182. package/dist/core/backend-deploy/dockerode-client/runtime.js.map +0 -1
  183. package/dist/core/backend-deploy/dockerode-client/types.d.ts +0 -64
  184. package/dist/core/backend-deploy/dockerode-client/types.d.ts.map +0 -1
  185. package/dist/core/backend-deploy/dockerode-client/types.js +0 -3
  186. package/dist/core/backend-deploy/dockerode-client/types.js.map +0 -1
  187. package/dist/core/backend-deploy/image-tag.d.ts +0 -2
  188. package/dist/core/backend-deploy/image-tag.d.ts.map +0 -1
  189. package/dist/core/backend-deploy/image-tag.js +0 -15
  190. package/dist/core/backend-deploy/image-tag.js.map +0 -1
  191. package/dist/core/backend-deploy/index.d.ts +0 -3
  192. package/dist/core/backend-deploy/index.d.ts.map +0 -1
  193. package/dist/core/backend-deploy/index.js +0 -6
  194. package/dist/core/backend-deploy/index.js.map +0 -1
  195. package/dist/core/backend-deploy/local-docker-build.d.ts +0 -8
  196. package/dist/core/backend-deploy/local-docker-build.d.ts.map +0 -1
  197. package/dist/core/backend-deploy/local-docker-build.js +0 -25
  198. package/dist/core/backend-deploy/local-docker-build.js.map +0 -1
  199. package/dist/core/backend-deploy/logger.d.ts +0 -10
  200. package/dist/core/backend-deploy/logger.d.ts.map +0 -1
  201. package/dist/core/backend-deploy/logger.js +0 -22
  202. package/dist/core/backend-deploy/logger.js.map +0 -1
  203. package/dist/core/backend-deploy/registry-login-push.d.ts +0 -24
  204. package/dist/core/backend-deploy/registry-login-push.d.ts.map +0 -1
  205. package/dist/core/backend-deploy/registry-login-push.js +0 -37
  206. package/dist/core/backend-deploy/registry-login-push.js.map +0 -1
  207. package/dist/core/backend-deploy/remote-docker-client.d.ts +0 -11
  208. package/dist/core/backend-deploy/remote-docker-client.d.ts.map +0 -1
  209. package/dist/core/backend-deploy/remote-docker-client.js +0 -34
  210. package/dist/core/backend-deploy/remote-docker-client.js.map +0 -1
  211. package/dist/core/backend-deploy/remote-pull-image.d.ts +0 -9
  212. package/dist/core/backend-deploy/remote-pull-image.d.ts.map +0 -1
  213. package/dist/core/backend-deploy/remote-pull-image.js +0 -39
  214. package/dist/core/backend-deploy/remote-pull-image.js.map +0 -1
  215. package/dist/core/backend-deploy/resolve-dockerfile.d.ts +0 -7
  216. package/dist/core/backend-deploy/resolve-dockerfile.d.ts.map +0 -1
  217. package/dist/core/backend-deploy/resolve-dockerfile.js +0 -24
  218. package/dist/core/backend-deploy/resolve-dockerfile.js.map +0 -1
  219. package/dist/core/backend-deploy/run-docker-cli.d.ts +0 -9
  220. package/dist/core/backend-deploy/run-docker-cli.d.ts.map +0 -1
  221. package/dist/core/backend-deploy/run-docker-cli.js +0 -14
  222. package/dist/core/backend-deploy/run-docker-cli.js.map +0 -1
  223. package/dist/core/backend-deploy/types.d.ts +0 -23
  224. package/dist/core/backend-deploy/types.d.ts.map +0 -1
  225. package/dist/core/backend-deploy/types.js +0 -3
  226. package/dist/core/backend-deploy/types.js.map +0 -1
  227. package/dist/core/branch-name.d.ts +0 -8
  228. package/dist/core/branch-name.d.ts.map +0 -1
  229. package/dist/core/branch-name.js +0 -37
  230. package/dist/core/branch-name.js.map +0 -1
  231. package/dist/core/constants.d.ts +0 -4
  232. package/dist/core/constants.d.ts.map +0 -1
  233. package/dist/core/constants.js +0 -16
  234. package/dist/core/constants.js.map +0 -1
  235. package/dist/core/cursor-cmd.d.ts +0 -30
  236. package/dist/core/cursor-cmd.d.ts.map +0 -1
  237. package/dist/core/cursor-cmd.js +0 -193
  238. package/dist/core/cursor-cmd.js.map +0 -1
  239. package/dist/core/minio.d.ts +0 -37
  240. package/dist/core/minio.d.ts.map +0 -1
  241. package/dist/core/minio.js +0 -159
  242. package/dist/core/minio.js.map +0 -1
  243. package/dist/core/parse-testcase-md.d.ts +0 -17
  244. package/dist/core/parse-testcase-md.d.ts.map +0 -1
  245. package/dist/core/parse-testcase-md.js +0 -79
  246. package/dist/core/parse-testcase-md.js.map +0 -1
  247. package/dist/core/std-event-handler.d.ts +0 -25
  248. package/dist/core/std-event-handler.d.ts.map +0 -1
  249. package/dist/core/std-event-handler.js +0 -90
  250. package/dist/core/std-event-handler.js.map +0 -1
  251. package/dist/core/utils.d.ts +0 -19
  252. package/dist/core/utils.d.ts.map +0 -1
  253. package/dist/core/utils.js +0 -71
  254. package/dist/core/utils.js.map +0 -1
  255. package/dist/core/ws-client.d.ts +0 -29
  256. package/dist/core/ws-client.d.ts.map +0 -1
  257. package/dist/core/ws-client.js +0 -81
  258. package/dist/core/ws-client.js.map +0 -1
  259. package/dist/employee-ws-client.d.ts +0 -42
  260. package/dist/employee-ws-client.d.ts.map +0 -1
  261. package/dist/employee-ws-client.js +0 -99
  262. package/dist/employee-ws-client.js.map +0 -1
  263. package/dist/index.d.ts +0 -6
  264. package/dist/index.d.ts.map +0 -1
  265. package/dist/index.js.map +0 -1
  266. package/templates/commands/apm-auto-dev.md +0 -6
  267. package/templates/commands/apm-fixbug.md +0 -6
  268. package/templates/commands/apm-prd-review.md +0 -6
  269. package/templates/commands/apm-prd-sync.md +0 -6
  270. package/templates/skills/apm-apply-change/SKILL.md +0 -191
  271. package/templates/skills/apm-auto-dev/SKILL.md +0 -170
  272. package/templates/skills/apm-fixbug/SKILL.md +0 -97
  273. package/templates/skills/apm-propose/SKILL.md +0 -123
  274. package/templates/skills/apm-propose/design-instruction.md +0 -94
  275. package/templates/skills/apm-propose/propose-instruction.md +0 -81
  276. package/templates/skills/apm-propose/specs-instruction.md +0 -114
  277. package/templates/skills/apm-propose/tasks-instruction.md +0 -90
  278. package/templates/skills/apm-release/SKILL.md +0 -87
  279. package/templates/skills/code-change-summary/SKILL.md +0 -84
  280. package/templates/skills/code-change-summary/summary-template.md +0 -55
  281. package/templates/skills/code-deploy/SKILL.md +0 -39
  282. package/templates/skills/prd-review/SKILL.md +0 -48
  283. package/templates/skills/prd-review/output-template.md +0 -47
  284. package/templates/skills/prd-sync/SKILL.md +0 -74
  285. package/templates/skills/prd-sync/updated-requirement-template.md +0 -39
  286. package/templates/skills/prd-testcase/SKILL.md +0 -82
  287. package/templates/skills/prd-testcase/reference.md +0 -44
  288. package/templates/skills/product-capability-inventory/SKILL.md +0 -131
  289. package/templates/skills/product-capability-inventory/template.md +0 -80
  290. package/templates/skills/product-capability-inventory//344/275/277/347/224/250/350/257/264/346/230/216/344/271/246.md +0 -36
  291. package/templates/skills/product-capability-inventory//347/233/256/345/275/225/350/247/204/350/214/203.md +0 -58
@@ -1,145 +0,0 @@
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.registerGetCommands = registerGetCommands;
7
- const node_fs_1 = require("node:fs");
8
- const client_1 = require("../../api/client");
9
- const path_1 = __importDefault(require("path"));
10
- const apm_config_1 = require("../../core/apm-config");
11
- /** 与 lpm-server `DefectStatus` / 飞书插件文案一致 */
12
- const DEFECT_STATUS_LABEL = {
13
- OPEN: "已创建",
14
- PENDING: "待处理",
15
- IN_PROGRESS: "处理中",
16
- PENDING_VERIFICATION: "待验证",
17
- FIXED: "已解决",
18
- REOPENED: "重新打开",
19
- };
20
- function buildDefectMarkdown(row) {
21
- return `## 缺陷内容
22
- ${row.title}
23
-
24
- ## 原因复盘
25
- `;
26
- }
27
- function buildStatusYaml(defects) {
28
- const lines = ["# 缺陷状态", "defects:"];
29
- for (const d of defects) {
30
- lines.push(` "${d.id}":`);
31
- lines.push(` status: ${DEFECT_STATUS_LABEL[d.status]}`);
32
- }
33
- return `${lines.join("\n")}\n`;
34
- }
35
- function parseRequirementId(value) {
36
- const n = Number.parseInt(value, 10);
37
- if (!Number.isFinite(n) || n < 1) {
38
- throw new Error(`无效的需求 ID: ${value}`);
39
- }
40
- return n;
41
- }
42
- function registerGetCommands(program) {
43
- const getCmd = program.command("get").description("从服务端拉取资源");
44
- getCmd
45
- .command("requirement")
46
- .description("按需求 ID 获取需求文档正文")
47
- .argument("<id>", "需求 ID", parseRequirementId)
48
- .option("--all", "包含该需求下的所有评论")
49
- .action(async (id, opts) => {
50
- const api = (0, client_1.createApmClient)();
51
- const res = await api.cli.resourceRequirementGet({ id });
52
- if (!res.content) {
53
- throw new Error("需求文档内容为空");
54
- }
55
- const prdPath = path_1.default.join(".apm/workitems", String(id), "prd.md");
56
- (0, node_fs_1.mkdirSync)(path_1.default.dirname(prdPath), { recursive: true });
57
- (0, node_fs_1.writeFileSync)(prdPath, res.content);
58
- const config = (0, apm_config_1.loadApmConfig)();
59
- const currentComment = res.comments.find((c) => c.employeeId === config.auth.id);
60
- if (currentComment) {
61
- (0, node_fs_1.writeFileSync)(path_1.default.join(".apm/workitems", String(id), "comment.md"), `======当前评论内容======
62
- ${currentComment.content}
63
- =========当前评论回复==========
64
- ${currentComment.reply || ""}
65
- `);
66
- }
67
- if (opts.all) {
68
- const text = `======需求内容======
69
- ${res.content}
70
- =========评论内容==========
71
- ${res.comments
72
- .map((c) => `###评审人: ${c.reviewer}\n#### 评审内容\n${c.content}\n#### 人工回复\n${c.reply}`)
73
- .join("\n\n")}
74
- `;
75
- console.log(text);
76
- return;
77
- }
78
- console.log(`需求内容如下(已保存到 ${prdPath}):`);
79
- console.log("--------------------------------");
80
- console.log(res.content);
81
- console.log("--------------------------------");
82
- });
83
- getCmd
84
- .command("defect")
85
- .description("按需求 ID 拉取当前登录员工名下的缺陷列表,并写入 .apm/workitems/<id>/bugs/")
86
- .argument("<id>", "需求 ID", parseRequirementId)
87
- .action(async (requirementId) => {
88
- const api = (0, client_1.createApmClient)();
89
- const res = await api.cli.resourceRequirementDefectsList({
90
- id: requirementId,
91
- });
92
- const currentDir = path_1.default.resolve(process.cwd());
93
- const matched = res.list.filter((row) => {
94
- const defectWorkdir = row.workdir?.trim();
95
- if (!defectWorkdir) {
96
- return false;
97
- }
98
- return defectWorkdir === currentDir;
99
- });
100
- const bugsDir = path_1.default.join(".apm/workitems", String(requirementId), "bugs");
101
- (0, node_fs_1.rmSync)(bugsDir, { recursive: true, force: true });
102
- (0, node_fs_1.mkdirSync)(bugsDir, { recursive: true });
103
- for (const row of matched) {
104
- const mdPath = path_1.default.join(bugsDir, `${row.id}.md`);
105
- (0, node_fs_1.writeFileSync)(mdPath, buildDefectMarkdown(row), "utf8");
106
- }
107
- const statusPath = path_1.default.join(bugsDir, "status.yaml");
108
- (0, node_fs_1.writeFileSync)(statusPath, buildStatusYaml(matched), "utf8");
109
- console.log(`已写入 ${matched.length} 条缺陷到 ${bugsDir},并更新 status.yaml`);
110
- });
111
- getCmd
112
- .command("branch-name")
113
- .alias("branchName")
114
- .description("按需求 ID 获取当前开发目录对应的分支名(服务端返回)")
115
- .argument("<id>", "需求 ID", parseRequirementId)
116
- .action(async (requirementId) => {
117
- const api = (0, client_1.createApmClient)();
118
- const res = await api.cli.resourceRequirementDevelopersBranchNamesList({
119
- id: requirementId,
120
- });
121
- const currentDir = path_1.default.resolve(process.cwd());
122
- const matched = res.list.filter((row) => {
123
- const wd = row.workdir?.trim();
124
- if (!wd) {
125
- return false;
126
- }
127
- return wd === currentDir;
128
- });
129
- if (matched.length === 0) {
130
- const hint = res.list.length > 0
131
- ? `服务端返回 ${res.list.length} 条记录,工作目录均与当前目录不一致。当前目录:${currentDir}`
132
- : "服务端未返回任何开发者分支记录";
133
- throw new Error(`未找到与当前开发目录匹配的分支条目。${hint}`);
134
- }
135
- if (matched.length > 1) {
136
- throw new Error(`存在 ${matched.length} 条工作目录与当前目录一致的记录,无法唯一确定分支名`);
137
- }
138
- const name = matched[0].branchName?.trim();
139
- if (!name) {
140
- throw new Error("已匹配到当前开发目录对应的开发者记录,但分支名尚未设置(可先通过相应流程写入分支名)");
141
- }
142
- console.log(name);
143
- });
144
- }
145
- //# sourceMappingURL=get.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"get.js","sourceRoot":"","sources":["../../../src/cli/commands/get.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- import type { Command } from "commander";
2
- export declare function registerInitCommands(program: Command): void;
3
- //# sourceMappingURL=init.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAwJzC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA2D3D"}
@@ -1,179 +0,0 @@
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_path_1 = __importDefault(require("node:path"));
9
- const DEPLOY_README_STUB = `# 测试环境部署说明
10
-
11
- 请在本文件中编写:前置条件、构建命令、部署命令、验证方式等。Agent / \`apm\` 将按本文档执行测试环境部署。
12
-
13
- ## 前置条件
14
-
15
- (可选)
16
-
17
- ## 部署步骤
18
-
19
- 1.
20
-
21
- ## 验证
22
-
23
- (可选)
24
- `;
25
- const PRODUCT_CAPABILITY_README_STUB = `# 产品能力清单
26
-
27
- 本目录用于维护产品能力条目(CAP)。详见 [使用说明书.md](./使用说明书.md)。
28
-
29
- ## 子系统列表
30
-
31
- | 目录 | 说明 |
32
- |------|------|
33
- | (待补充) | 在各子目录下维护 \`index.md\` 与 \`CAP-*.md\` |
34
- `;
35
- function resolveSkillSourceDir() {
36
- // dist/cli/commands/init.js -> ../../../templates/skills
37
- return node_path_1.default.resolve(__dirname, "../../../templates/skills");
38
- }
39
- function resolveCommandsSourceDir() {
40
- // dist/cli/commands/init.js -> ../../../templates/commands
41
- return node_path_1.default.resolve(__dirname, "../../../templates/commands");
42
- }
43
- async function pathExists(p) {
44
- try {
45
- await (0, promises_1.stat)(p);
46
- return true;
47
- }
48
- catch {
49
- return false;
50
- }
51
- }
52
- /**
53
- * 从当前工作目录向上查找项目根:存在 \`.cursor\`、\`.apm\` 或 \`.git\`(含 worktree 的文件式 .git)的目录。
54
- */
55
- async function resolveProjectRoot() {
56
- let cur = process.cwd();
57
- for (let i = 0; i < 20; i += 1) {
58
- for (const name of [".cursor", ".apm", ".git"]) {
59
- if (await pathExists(node_path_1.default.join(cur, name))) {
60
- return cur;
61
- }
62
- }
63
- const parent = node_path_1.default.dirname(cur);
64
- if (!parent || parent === cur)
65
- break;
66
- cur = parent;
67
- }
68
- // eslint-disable-next-line no-console
69
- console.error("未找到项目根目录:请在包含 .cursor、.apm 或 .git 的目录下执行 apm init");
70
- process.exit(1);
71
- }
72
- /**
73
- * 创建标准 \`.apm\` 目录结构(与仓库内参考 \`.apm\` 一致):
74
- * - workitems
75
- * - deploy(前端发布说明目录,含占位 README;与 apm.config 中 frontendDeploy 配置项独立,已存在则不覆盖)
76
- * - product-capability-inventory(含总览 README;从模板复制使用说明书,已存在则不覆盖)
77
- */
78
- async function ensureApmStandardLayout(projectRoot, skillsTemplateDir) {
79
- const apmRoot = node_path_1.default.join(projectRoot, ".apm");
80
- const created = [];
81
- const warnings = [];
82
- await (0, promises_1.mkdir)(node_path_1.default.join(apmRoot, "workitems"), { recursive: true });
83
- created.push(".apm/workitems");
84
- await (0, promises_1.mkdir)(node_path_1.default.join(apmRoot, "deploy"), { recursive: true });
85
- created.push(".apm/deploy");
86
- await (0, promises_1.mkdir)(node_path_1.default.join(apmRoot, "product-capability-inventory"), { recursive: true });
87
- created.push(".apm/product-capability-inventory");
88
- await (0, promises_1.mkdir)(node_path_1.default.join(apmRoot, "skills"), { recursive: true });
89
- created.push(".apm/skills");
90
- const deployReadme = node_path_1.default.join(apmRoot, "deploy", "README.md");
91
- if (!(await pathExists(deployReadme))) {
92
- await (0, promises_1.writeFile)(deployReadme, DEPLOY_README_STUB, "utf8");
93
- created.push(".apm/deploy/README.md");
94
- }
95
- const manualSrc = node_path_1.default.join(skillsTemplateDir, "product-capability-inventory", "使用说明书.md");
96
- const manualDst = node_path_1.default.join(apmRoot, "product-capability-inventory", "使用说明书.md");
97
- if (!(await pathExists(manualDst))) {
98
- if (await pathExists(manualSrc)) {
99
- await (0, promises_1.cp)(manualSrc, manualDst);
100
- created.push(".apm/product-capability-inventory/使用说明书.md");
101
- }
102
- else {
103
- warnings.push(`模板缺失,未复制使用说明书: ${manualSrc}`);
104
- }
105
- }
106
- const capReadme = node_path_1.default.join(apmRoot, "product-capability-inventory", "README.md");
107
- if (!(await pathExists(capReadme))) {
108
- await (0, promises_1.writeFile)(capReadme, PRODUCT_CAPABILITY_README_STUB, "utf8");
109
- created.push(".apm/product-capability-inventory/README.md");
110
- }
111
- return { apmRoot, created, warnings };
112
- }
113
- /**
114
- * 将内置命令模板合并到 \`.cursor/commands\`:按文件名写入/覆盖,不删除用户已有其它文件。
115
- */
116
- async function mergeCursorCommands(projectRoot, commandsTemplateDir) {
117
- const commandsDir = node_path_1.default.join(projectRoot, ".cursor", "commands");
118
- await (0, promises_1.mkdir)(commandsDir, { recursive: true });
119
- const installed = [];
120
- const entries = await (0, promises_1.readdir)(commandsTemplateDir, { withFileTypes: true });
121
- for (const e of entries) {
122
- if (!e.isFile())
123
- continue;
124
- const name = e.name;
125
- const src = node_path_1.default.join(commandsTemplateDir, name);
126
- const dst = node_path_1.default.join(commandsDir, name);
127
- await (0, promises_1.cp)(src, dst, { force: true });
128
- installed.push(node_path_1.default.join(".cursor/commands", name));
129
- }
130
- return { commandsDir, installed };
131
- }
132
- function registerInitCommands(program) {
133
- program
134
- .command("init")
135
- .description("安装内置 skills 到 .apm/skills,合并内置命令到 .cursor/commands,并初始化标准 .apm 目录结构")
136
- .action(async () => {
137
- const projectRoot = await resolveProjectRoot();
138
- const srcDir = resolveSkillSourceDir();
139
- const commandsSrcDir = resolveCommandsSourceDir();
140
- const apmResult = await ensureApmStandardLayout(projectRoot, srcDir);
141
- const dstSkillsDir = node_path_1.default.join(projectRoot, ".apm", "skills");
142
- await (0, promises_1.mkdir)(dstSkillsDir, { recursive: true });
143
- // 读取模板下的技能子目录名,用于在目标目录中做“删除后重装”
144
- const entries = await (0, promises_1.readdir)(srcDir, { withFileTypes: true });
145
- const skillDirs = entries.filter((e) => e.isDirectory()).map((e) => e.name);
146
- for (const name of skillDirs) {
147
- const existing = node_path_1.default.join(dstSkillsDir, name);
148
- try {
149
- await (0, promises_1.rm)(existing, { recursive: true, force: true });
150
- }
151
- catch {
152
- // ignore 删除失败(例如不存在或权限问题),继续尝试后续目录
153
- }
154
- }
155
- await (0, promises_1.cp)(srcDir, dstSkillsDir, {
156
- recursive: true,
157
- force: true,
158
- });
159
- const commandsResult = await mergeCursorCommands(projectRoot, commandsSrcDir);
160
- console.log(JSON.stringify({
161
- ok: true,
162
- skills: {
163
- installedFrom: srcDir,
164
- installedTo: dstSkillsDir,
165
- },
166
- commands: {
167
- installedFrom: commandsSrcDir,
168
- mergedTo: commandsResult.commandsDir,
169
- files: commandsResult.installed,
170
- },
171
- apm: {
172
- root: apmResult.apmRoot,
173
- created: apmResult.created,
174
- warnings: apmResult.warnings,
175
- },
176
- }, null, 2));
177
- });
178
- }
179
- //# sourceMappingURL=init.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- import type { Command } from "commander";
2
- export declare function registerMinioCommands(program: Command): void;
3
- //# sourceMappingURL=minio.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"minio.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/minio.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAqBzC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAqD5D"}
@@ -1,65 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.registerMinioCommands = registerMinioCommands;
4
- const minio_1 = require("minio");
5
- const apm_dotenv_1 = require("../../apm-dotenv");
6
- const config_store_1 = require("../../config-store");
7
- /** 匿名可读桶内所有对象(仅 GetObject),用于路径直链 */
8
- function buildPublicReadPolicy(bucket) {
9
- const policy = {
10
- Version: "2012-10-17",
11
- Statement: [
12
- {
13
- Effect: "Allow",
14
- Principal: { AWS: ["*"] },
15
- Action: ["s3:GetObject"],
16
- Resource: [`arn:aws:s3:::${bucket}/*`],
17
- },
18
- ],
19
- };
20
- return JSON.stringify(policy);
21
- }
22
- function registerMinioCommands(program) {
23
- const minio = program
24
- .command("minio")
25
- .description("MinIO 辅助(读取当前目录 `.apm/.env` 中的 MINIO_*,已有环境变量优先)");
26
- minio
27
- .command("set-public-read")
28
- .description("为 MINIO_BUCKET 设置匿名可读对象策略(解决 HTTP 直链 AccessDenied,需账号有 setBucketPolicy 权限)")
29
- .action(async () => {
30
- const resolved = (0, config_store_1.resolveMinioSettings)();
31
- if (!resolved.ok) {
32
- console.error(resolved.error);
33
- const envPath = (0, apm_dotenv_1.getLoadedApmDotEnvPath)();
34
- if (envPath) {
35
- console.error(`已加载:${envPath}`);
36
- }
37
- else {
38
- console.error("未找到当前目录下 `.apm/.env`;请在运行目录放置该文件,或在 shell 中先 export MINIO_*");
39
- }
40
- process.exit(1);
41
- }
42
- const { settings } = resolved;
43
- const client = new minio_1.Client({
44
- endPoint: settings.endpoint,
45
- port: settings.port,
46
- useSSL: settings.useSsl,
47
- accessKey: settings.accessKey,
48
- secretKey: settings.secretKey,
49
- });
50
- const bucket = settings.bucket;
51
- const exists = await client.bucketExists(bucket);
52
- if (!exists) {
53
- console.error(`桶不存在:${bucket}`);
54
- process.exit(1);
55
- }
56
- const policy = buildPublicReadPolicy(bucket);
57
- await client.setBucketPolicy(bucket, policy);
58
- console.log(JSON.stringify({
59
- ok: true,
60
- bucket,
61
- message: "已设置匿名可读(s3:GetObject)。若仍 403,请检查 MinIO 全局 Block Public Access 或网关配置。",
62
- }, null, 2));
63
- });
64
- }
65
- //# sourceMappingURL=minio.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"minio.js","sourceRoot":"","sources":["../../../src/cli/commands/minio.ts"],"names":[],"mappings":";;AAqBA,sDAqDC;AAzED,iCAA+B;AAC/B,iDAA0D;AAC1D,qDAA0D;AAE1D,qCAAqC;AACrC,SAAS,qBAAqB,CAAC,MAAc;IAC3C,MAAM,MAAM,GAAG;QACb,OAAO,EAAE,YAAY;QACrB,SAAS,EAAE;YACT;gBACE,MAAM,EAAE,OAAO;gBACf,SAAS,EAAE,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE;gBACzB,MAAM,EAAE,CAAC,cAAc,CAAC;gBACxB,QAAQ,EAAE,CAAC,gBAAgB,MAAM,IAAI,CAAC;aACvC;SACF;KACF,CAAC;IACF,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;AAChC,CAAC;AAED,SAAgB,qBAAqB,CAAC,OAAgB;IACpD,MAAM,KAAK,GAAG,OAAO;SAClB,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,kDAAkD,CAAC,CAAC;IAEnE,KAAK;SACF,OAAO,CAAC,iBAAiB,CAAC;SAC1B,WAAW,CACV,4EAA4E,CAC7E;SACA,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,QAAQ,GAAG,IAAA,mCAAoB,GAAE,CAAC;QACxC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YAC9B,MAAM,OAAO,GAAG,IAAA,mCAAsB,GAAE,CAAC;YACzC,IAAI,OAAO,EAAE,CAAC;gBACZ,OAAO,CAAC,KAAK,CAAC,OAAO,OAAO,EAAE,CAAC,CAAC;YAClC,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,KAAK,CACX,6DAA6D,CAC9D,CAAC;YACJ,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,MAAM,EAAE,QAAQ,EAAE,GAAG,QAAQ,CAAC;QAC9B,MAAM,MAAM,GAAG,IAAI,cAAM,CAAC;YACxB,QAAQ,EAAE,QAAQ,CAAC,QAAQ;YAC3B,IAAI,EAAE,QAAQ,CAAC,IAAI;YACnB,MAAM,EAAE,QAAQ,CAAC,MAAM;YACvB,SAAS,EAAE,QAAQ,CAAC,SAAS;YAC7B,SAAS,EAAE,QAAQ,CAAC,SAAS;SAC9B,CAAC,CAAC;QACH,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;QAC/B,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QACjD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,CAAC,KAAK,CAAC,QAAQ,MAAM,EAAE,CAAC,CAAC;YAChC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,MAAM,MAAM,GAAG,qBAAqB,CAAC,MAAM,CAAC,CAAC;QAC7C,MAAM,MAAM,CAAC,eAAe,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC7C,OAAO,CAAC,GAAG,CACT,IAAI,CAAC,SAAS,CACZ;YACE,EAAE,EAAE,IAAI;YACR,MAAM;YACN,OAAO,EACL,sEAAsE;SACzE,EACD,IAAI,EACJ,CAAC,CACF,CACF,CAAC;IACJ,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -1,3 +0,0 @@
1
- import type { Command } from "commander";
2
- export declare function registerPublishCommands(program: Command): void;
3
- //# sourceMappingURL=publish.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"publish.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/publish.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAezC,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAuI9D"}
@@ -1,130 +0,0 @@
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.registerPublishCommands = registerPublishCommands;
7
- const node_path_1 = __importDefault(require("node:path"));
8
- const client_1 = __importDefault(require("../../api/client"));
9
- const apm_config_1 = require("../../core/apm-config");
10
- const minio_1 = require("../../core/minio");
11
- function registerPublishCommands(program) {
12
- program
13
- .command("publish")
14
- .description("递归上传前端产物目录到 MinIO,并在成功后为该桶设置匿名可读策略(仅读取当前目录下 `.apm/.env` 中的 MINIO_*,已有环境变量优先)")
15
- .argument("<name>", "分支名,作为对象键顶层目录")
16
- .option("--env <env_tag>", "环境标签", "测试环境,正式环境")
17
- .option("--dir <dir>", "产物目录(默认 dist)", "dist")
18
- .option("--requirement-id <requirement_id>", "需求 ID(上传成功后登记前端环境)", (v) => {
19
- const n = Number.parseInt(String(v), 10);
20
- if (!Number.isFinite(n) || n < 1) {
21
- throw new Error("--requirement-id 须为正整数");
22
- }
23
- return n;
24
- })
25
- .option("--max-file-size-mb <mb>", `单文件大小上限,默认 ${minio_1.DEFAULT_MAX_FILE_SIZE_MB}`, (v) => Number.parseInt(String(v), 10))
26
- .action(async (name, opts) => {
27
- const { frontendDeploy: settings } = (0, apm_config_1.loadApmConfig)();
28
- const minio = new minio_1.MinioClient({
29
- endPoint: settings.endpoint,
30
- port: settings.port,
31
- useSSL: settings.useSsl,
32
- accessKey: settings.accessKey,
33
- secretKey: settings.secretKey,
34
- });
35
- const bucket = settings.bucket;
36
- const branchName = normalizeBranchName(name);
37
- if (!branchName) {
38
- console.error("请传入有效的分支名(第一个位置参数 <name>)");
39
- process.exit(1);
40
- }
41
- const cleanBranch = sanitizeBranchName(branchName);
42
- const root = node_path_1.default.resolve(process.cwd(), opts.dir || "dist");
43
- if (!(await (0, minio_1.isDirectoryPath)(root))) {
44
- console.error(`产物目录不存在:${root}`);
45
- process.exit(1);
46
- }
47
- const maxBytes = Math.max(1, Number.isFinite(opts.maxFileSizeMb)
48
- ? Math.floor((opts.maxFileSizeMb ?? minio_1.DEFAULT_MAX_FILE_SIZE_MB) * 1024 * 1024)
49
- : minio_1.DEFAULT_MAX_FILE_SIZE_MB * 1024 * 1024);
50
- const files = await (0, minio_1.collectFiles)(root);
51
- if (files.length === 0) {
52
- console.error(`目录为空:${root}`);
53
- process.exit(1);
54
- }
55
- let uploaded = 0;
56
- let totalBytes = 0;
57
- console.error(`开始直连 MinIO 上传,共 ${files.length} 个文件…`);
58
- await minio.ensureBucket(bucket);
59
- // 只清理与上传目录对应的对象前缀,避免误删同一分支下其它目录内容
60
- await minio.deleteObjectsByPrefix(bucket, `${cleanBranch}/dist/`);
61
- for (const f of files) {
62
- if (f.size > maxBytes) {
63
- console.error(`文件过大,已拒绝:${f.relativePath}(${(0, minio_1.toMB)(f.size)}MB > ${(0, minio_1.toMB)(maxBytes)}MB)`);
64
- process.exit(1);
65
- }
66
- const buf = await (0, minio_1.readArtifactFile)(f.absPath);
67
- const cleanRel = (0, minio_1.sanitizeRelativePath)(f.relativePath);
68
- const objectKey = (0, minio_1.toArtifactObjectKey)({
69
- branchName: cleanBranch,
70
- relativePath: cleanRel,
71
- });
72
- const mimeType = (0, minio_1.detectMimeType)(f.relativePath).trim().toLowerCase() ||
73
- "application/octet-stream";
74
- await minio.putObject(bucket, objectKey, buf, {
75
- "Content-Type": mimeType,
76
- });
77
- uploaded += 1;
78
- totalBytes += buf.length;
79
- console.error(`[${uploaded}/${files.length}] ${f.relativePath} -> ${objectKey}`);
80
- }
81
- console.error("正在设置桶策略(匿名可读对象,便于 HTTP 直链)…");
82
- await minio.setBucketPublicRead(bucket);
83
- console.log(JSON.stringify({
84
- ok: true,
85
- branchName: cleanBranch,
86
- bucket,
87
- fileCount: uploaded,
88
- totalBytes,
89
- bucketPublicRead: true,
90
- }, null, 2));
91
- const envTag = resolveEnvTag(opts.env ?? "测试环境");
92
- if (opts.requirementId) {
93
- await client_1.default.cli.resourceEnvironmentCreate({
94
- requirementId: opts.requirementId,
95
- name: cleanBranch,
96
- tag: envTag,
97
- type: "FRONTEND",
98
- });
99
- }
100
- });
101
- }
102
- function sanitizeBranchName(raw) {
103
- const normalized = raw.replace(/\\/g, "/").replace(/^\/+/, "").trim();
104
- if (!normalized) {
105
- throw new Error("branchName 不能为空");
106
- }
107
- const segs = normalized.split("/");
108
- if (segs.some((s) => s === "" || s === "." || s === "..")) {
109
- throw new Error("branchName 非法");
110
- }
111
- return segs[segs.length - 1] ?? "";
112
- }
113
- function normalizeBranchName(raw) {
114
- const normalized = raw.trim().replace(/\\/g, "/").replace(/^\/+/, "");
115
- if (!normalized)
116
- return "";
117
- const segs = normalized.split("/");
118
- if (segs.some((s) => s === "" || s === "." || s === ".."))
119
- return "";
120
- return segs[segs.length - 1] ?? "";
121
- }
122
- /** `--env` 默认含逗号时取第一段作为标签(如「测试环境」) */
123
- function resolveEnvTag(raw) {
124
- const parts = raw
125
- .split(",")
126
- .map((s) => s.trim())
127
- .filter((s) => s.length > 0);
128
- return parts[0] ?? "测试环境";
129
- }
130
- //# sourceMappingURL=publish.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"publish.js","sourceRoot":"","sources":["../../../src/cli/commands/publish.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- import type { Command } from "commander";
2
- export declare function registerReleaseCommands(program: Command): void;
3
- //# sourceMappingURL=release.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"release.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/release.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAWzC,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAqC9D"}
@@ -1,37 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.registerReleaseCommands = registerReleaseCommands;
4
- const api_1 = require("../../api");
5
- function parsePositiveInt(value, name) {
6
- const n = Number.parseInt(value, 10);
7
- if (!Number.isFinite(n) || n < 1) {
8
- throw new Error(`无效的${name}: ${value}`);
9
- }
10
- return n;
11
- }
12
- function registerReleaseCommands(program) {
13
- program
14
- .command("release")
15
- .description("测试通过:需求进入待上线并创建 PR(与飞书「测试通过」一致);使用 -f / --force 时另对该 PR 执行 squash 合并")
16
- .argument("<requirementId>", "需求主键 ID")
17
- .option("-f, --force", "创建 PR 后合并(squash)")
18
- .requiredOption("-b, --branch <name>", "必填:仅对该分支名对应的开发者创建/合并 PR,或标记失败时指定同一开发分支")
19
- .option("-r, --reason <reason>", "带有该参数表示上线流程失败,并给出失败原因,一般是合并代码出现冲突了(须与 -b 同用)")
20
- .action(async (requirementIdStr, opts) => {
21
- const id = parsePositiveInt(requirementIdStr, "需求 ID");
22
- const branchName = opts.branch.trim();
23
- if (!branchName) {
24
- throw new Error("无效的 -b:分支名不能为空");
25
- }
26
- const reason = opts.reason?.trim();
27
- const api = (0, api_1.createApmClient)();
28
- await api.cli.resourceRequirementRelease({
29
- id,
30
- forceMerge: Boolean(opts.force),
31
- branchName,
32
- failureReason: reason,
33
- });
34
- console.log("操作完成");
35
- });
36
- }
37
- //# sourceMappingURL=release.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"release.js","sourceRoot":"","sources":["../../../src/cli/commands/release.ts"],"names":[],"mappings":";;AAWA,0DAqCC;AA/CD,mCAA4C;AAE5C,SAAS,gBAAgB,CAAC,KAAa,EAAE,IAAY;IACnD,MAAM,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACrC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACjC,MAAM,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK,KAAK,EAAE,CAAC,CAAC;IAC1C,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAED,SAAgB,uBAAuB,CAAC,OAAgB;IACtD,OAAO;SACJ,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CACV,sEAAsE,CACvE;SACA,QAAQ,CAAC,iBAAiB,EAAE,SAAS,CAAC;SACtC,MAAM,CAAC,aAAa,EAAE,mBAAmB,CAAC;SAC1C,cAAc,CACb,qBAAqB,EACrB,wCAAwC,CACzC;SACA,MAAM,CACL,uBAAuB,EACvB,8CAA8C,CAC/C;SACA,MAAM,CACL,KAAK,EACH,gBAAwB,EACxB,IAA0D,EAC1D,EAAE;QACF,MAAM,EAAE,GAAG,gBAAgB,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC;QACvD,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QACtC,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAC;QACpC,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC;QACnC,MAAM,GAAG,GAAG,IAAA,qBAAe,GAAE,CAAC;QAC9B,MAAM,GAAG,CAAC,GAAG,CAAC,0BAA0B,CAAC;YACvC,EAAE;YACF,UAAU,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;YAC/B,UAAU;YACV,aAAa,EAAE,MAAM;SACtB,CAAC,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACtB,CAAC,CACF,CAAC;AACN,CAAC"}
@@ -1,3 +0,0 @@
1
- import type { Command } from "commander";
2
- export declare function registerRequirementCommands(program: Command): void;
3
- //# sourceMappingURL=requirement.d.ts.map
@@ -1 +0,0 @@
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"}