ai-project-manage-cli 2.0.26 → 3.0.2

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 (293) hide show
  1. package/dist/index.js +500 -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/skills/apm-review/SKILL.md +38 -0
  6. package/template/skills/apm-review/apm-review-reference.md +89 -0
  7. package/template/workitems/README.md +19 -0
  8. package/README.md +0 -171
  9. package/dist/api/cli.d.ts +0 -228
  10. package/dist/api/cli.d.ts.map +0 -1
  11. package/dist/api/cli.js +0 -3
  12. package/dist/api/cli.js.map +0 -1
  13. package/dist/api/client.d.ts +0 -5
  14. package/dist/api/client.d.ts.map +0 -1
  15. package/dist/api/client.js +0 -30
  16. package/dist/api/client.js.map +0 -1
  17. package/dist/api/http.d.ts +0 -21
  18. package/dist/api/http.d.ts.map +0 -1
  19. package/dist/api/http.js +0 -108
  20. package/dist/api/http.js.map +0 -1
  21. package/dist/api/index.d.ts +0 -6
  22. package/dist/api/index.d.ts.map +0 -1
  23. package/dist/api/index.js +0 -13
  24. package/dist/api/index.js.map +0 -1
  25. package/dist/api/request-config.d.ts +0 -25
  26. package/dist/api/request-config.d.ts.map +0 -1
  27. package/dist/api/request-config.js +0 -73
  28. package/dist/api/request-config.js.map +0 -1
  29. package/dist/api/requirement.d.ts +0 -1
  30. package/dist/api/requirement.d.ts.map +0 -1
  31. package/dist/api/requirement.js +0 -2
  32. package/dist/api/requirement.js.map +0 -1
  33. package/dist/apm-dotenv.d.ts +0 -8
  34. package/dist/apm-dotenv.d.ts.map +0 -1
  35. package/dist/apm-dotenv.js +0 -73
  36. package/dist/apm-dotenv.js.map +0 -1
  37. package/dist/cli/agent-stream-log.d.ts +0 -41
  38. package/dist/cli/agent-stream-log.d.ts.map +0 -1
  39. package/dist/cli/agent-stream-log.js +0 -364
  40. package/dist/cli/agent-stream-log.js.map +0 -1
  41. package/dist/cli/commands/auth.d.ts +0 -3
  42. package/dist/cli/commands/auth.d.ts.map +0 -1
  43. package/dist/cli/commands/auth.js +0 -51
  44. package/dist/cli/commands/auth.js.map +0 -1
  45. package/dist/cli/commands/chat.d.ts +0 -3
  46. package/dist/cli/commands/chat.d.ts.map +0 -1
  47. package/dist/cli/commands/chat.js +0 -32
  48. package/dist/cli/commands/chat.js.map +0 -1
  49. package/dist/cli/commands/comment.d.ts +0 -3
  50. package/dist/cli/commands/comment.d.ts.map +0 -1
  51. package/dist/cli/commands/comment.js +0 -66
  52. package/dist/cli/commands/comment.js.map +0 -1
  53. package/dist/cli/commands/config.d.ts +0 -3
  54. package/dist/cli/commands/config.d.ts.map +0 -1
  55. package/dist/cli/commands/config.js +0 -39
  56. package/dist/cli/commands/config.js.map +0 -1
  57. package/dist/cli/commands/deploy-backend.d.ts +0 -7
  58. package/dist/cli/commands/deploy-backend.d.ts.map +0 -1
  59. package/dist/cli/commands/deploy-backend.js +0 -77
  60. package/dist/cli/commands/deploy-backend.js.map +0 -1
  61. package/dist/cli/commands/deploy-frontend.d.ts +0 -3
  62. package/dist/cli/commands/deploy-frontend.d.ts.map +0 -1
  63. package/dist/cli/commands/deploy-frontend.js +0 -167
  64. package/dist/cli/commands/deploy-frontend.js.map +0 -1
  65. package/dist/cli/commands/get.d.ts +0 -3
  66. package/dist/cli/commands/get.d.ts.map +0 -1
  67. package/dist/cli/commands/get.js +0 -145
  68. package/dist/cli/commands/get.js.map +0 -1
  69. package/dist/cli/commands/init.d.ts +0 -3
  70. package/dist/cli/commands/init.d.ts.map +0 -1
  71. package/dist/cli/commands/init.js +0 -179
  72. package/dist/cli/commands/init.js.map +0 -1
  73. package/dist/cli/commands/minio.d.ts +0 -3
  74. package/dist/cli/commands/minio.d.ts.map +0 -1
  75. package/dist/cli/commands/minio.js +0 -65
  76. package/dist/cli/commands/minio.js.map +0 -1
  77. package/dist/cli/commands/publish.d.ts +0 -3
  78. package/dist/cli/commands/publish.d.ts.map +0 -1
  79. package/dist/cli/commands/publish.js +0 -130
  80. package/dist/cli/commands/publish.js.map +0 -1
  81. package/dist/cli/commands/release.d.ts +0 -3
  82. package/dist/cli/commands/release.d.ts.map +0 -1
  83. package/dist/cli/commands/release.js +0 -37
  84. package/dist/cli/commands/release.js.map +0 -1
  85. package/dist/cli/commands/requirement.d.ts +0 -3
  86. package/dist/cli/commands/requirement.d.ts.map +0 -1
  87. package/dist/cli/commands/requirement.js +0 -169
  88. package/dist/cli/commands/requirement.js.map +0 -1
  89. package/dist/cli/commands/set.d.ts +0 -3
  90. package/dist/cli/commands/set.d.ts.map +0 -1
  91. package/dist/cli/commands/set.js +0 -103
  92. package/dist/cli/commands/set.js.map +0 -1
  93. package/dist/cli/commands/status.d.ts +0 -3
  94. package/dist/cli/commands/status.d.ts.map +0 -1
  95. package/dist/cli/commands/status.js +0 -42
  96. package/dist/cli/commands/status.js.map +0 -1
  97. package/dist/cli/commands/update.d.ts +0 -3
  98. package/dist/cli/commands/update.d.ts.map +0 -1
  99. package/dist/cli/commands/update.js +0 -36
  100. package/dist/cli/commands/update.js.map +0 -1
  101. package/dist/cli/commands/ws.d.ts +0 -3
  102. package/dist/cli/commands/ws.d.ts.map +0 -1
  103. package/dist/cli/commands/ws.js +0 -25
  104. package/dist/cli/commands/ws.js.map +0 -1
  105. package/dist/cli/credentials.d.ts +0 -30
  106. package/dist/cli/credentials.d.ts.map +0 -1
  107. package/dist/cli/credentials.js +0 -52
  108. package/dist/cli/credentials.js.map +0 -1
  109. package/dist/cli/exit-api-error.d.ts +0 -2
  110. package/dist/cli/exit-api-error.d.ts.map +0 -1
  111. package/dist/cli/exit-api-error.js +0 -18
  112. package/dist/cli/exit-api-error.js.map +0 -1
  113. package/dist/cli/instruction-log-stream-sink.d.ts +0 -31
  114. package/dist/cli/instruction-log-stream-sink.d.ts.map +0 -1
  115. package/dist/cli/instruction-log-stream-sink.js +0 -59
  116. package/dist/cli/instruction-log-stream-sink.js.map +0 -1
  117. package/dist/cli/session.d.ts +0 -26
  118. package/dist/cli/session.d.ts.map +0 -1
  119. package/dist/cli/session.js +0 -41
  120. package/dist/cli/session.js.map +0 -1
  121. package/dist/cli/utils/parse.d.ts +0 -2
  122. package/dist/cli/utils/parse.d.ts.map +0 -1
  123. package/dist/cli/utils/parse.js +0 -12
  124. package/dist/cli/utils/parse.js.map +0 -1
  125. package/dist/cli/ws-run-command.d.ts +0 -13
  126. package/dist/cli/ws-run-command.d.ts.map +0 -1
  127. package/dist/cli/ws-run-command.js +0 -330
  128. package/dist/cli/ws-run-command.js.map +0 -1
  129. package/dist/cli-version.d.ts +0 -9
  130. package/dist/cli-version.d.ts.map +0 -1
  131. package/dist/cli-version.js +0 -61
  132. package/dist/cli-version.js.map +0 -1
  133. package/dist/cli.d.ts +0 -3
  134. package/dist/cli.d.ts.map +0 -1
  135. package/dist/cli.js +0 -36
  136. package/dist/cli.js.map +0 -1
  137. package/dist/config-store.d.ts +0 -38
  138. package/dist/config-store.d.ts.map +0 -1
  139. package/dist/config-store.js +0 -131
  140. package/dist/config-store.js.map +0 -1
  141. package/dist/core/apm-config.d.ts +0 -81
  142. package/dist/core/apm-config.d.ts.map +0 -1
  143. package/dist/core/apm-config.js +0 -147
  144. package/dist/core/apm-config.js.map +0 -1
  145. package/dist/core/backend-deploy/backend-deploy-workflow.d.ts +0 -20
  146. package/dist/core/backend-deploy/backend-deploy-workflow.d.ts.map +0 -1
  147. package/dist/core/backend-deploy/backend-deploy-workflow.js +0 -86
  148. package/dist/core/backend-deploy/backend-deploy-workflow.js.map +0 -1
  149. package/dist/core/backend-deploy/command-runner.d.ts +0 -11
  150. package/dist/core/backend-deploy/command-runner.d.ts.map +0 -1
  151. package/dist/core/backend-deploy/command-runner.js +0 -47
  152. package/dist/core/backend-deploy/command-runner.js.map +0 -1
  153. package/dist/core/backend-deploy/dockerode-client/client.d.ts +0 -18
  154. package/dist/core/backend-deploy/dockerode-client/client.d.ts.map +0 -1
  155. package/dist/core/backend-deploy/dockerode-client/client.js +0 -114
  156. package/dist/core/backend-deploy/dockerode-client/client.js.map +0 -1
  157. package/dist/core/backend-deploy/dockerode-client/connection-options.d.ts +0 -6
  158. package/dist/core/backend-deploy/dockerode-client/connection-options.d.ts.map +0 -1
  159. package/dist/core/backend-deploy/dockerode-client/connection-options.js +0 -62
  160. package/dist/core/backend-deploy/dockerode-client/connection-options.js.map +0 -1
  161. package/dist/core/backend-deploy/dockerode-client/container-inspect-format.d.ts +0 -3
  162. package/dist/core/backend-deploy/dockerode-client/container-inspect-format.d.ts.map +0 -1
  163. package/dist/core/backend-deploy/dockerode-client/container-inspect-format.js +0 -23
  164. package/dist/core/backend-deploy/dockerode-client/container-inspect-format.js.map +0 -1
  165. package/dist/core/backend-deploy/dockerode-client/container-options.d.ts +0 -4
  166. package/dist/core/backend-deploy/dockerode-client/container-options.d.ts.map +0 -1
  167. package/dist/core/backend-deploy/dockerode-client/container-options.js +0 -44
  168. package/dist/core/backend-deploy/dockerode-client/container-options.js.map +0 -1
  169. package/dist/core/backend-deploy/dockerode-client/env.d.ts +0 -3
  170. package/dist/core/backend-deploy/dockerode-client/env.d.ts.map +0 -1
  171. package/dist/core/backend-deploy/dockerode-client/env.js +0 -40
  172. package/dist/core/backend-deploy/dockerode-client/env.js.map +0 -1
  173. package/dist/core/backend-deploy/dockerode-client/index.d.ts +0 -8
  174. package/dist/core/backend-deploy/dockerode-client/index.d.ts.map +0 -1
  175. package/dist/core/backend-deploy/dockerode-client/index.js +0 -17
  176. package/dist/core/backend-deploy/dockerode-client/index.js.map +0 -1
  177. package/dist/core/backend-deploy/dockerode-client/ports.d.ts +0 -9
  178. package/dist/core/backend-deploy/dockerode-client/ports.d.ts.map +0 -1
  179. package/dist/core/backend-deploy/dockerode-client/ports.js +0 -35
  180. package/dist/core/backend-deploy/dockerode-client/ports.js.map +0 -1
  181. package/dist/core/backend-deploy/dockerode-client/runtime.d.ts +0 -7
  182. package/dist/core/backend-deploy/dockerode-client/runtime.d.ts.map +0 -1
  183. package/dist/core/backend-deploy/dockerode-client/runtime.js +0 -26
  184. package/dist/core/backend-deploy/dockerode-client/runtime.js.map +0 -1
  185. package/dist/core/backend-deploy/dockerode-client/types.d.ts +0 -64
  186. package/dist/core/backend-deploy/dockerode-client/types.d.ts.map +0 -1
  187. package/dist/core/backend-deploy/dockerode-client/types.js +0 -3
  188. package/dist/core/backend-deploy/dockerode-client/types.js.map +0 -1
  189. package/dist/core/backend-deploy/image-tag.d.ts +0 -2
  190. package/dist/core/backend-deploy/image-tag.d.ts.map +0 -1
  191. package/dist/core/backend-deploy/image-tag.js +0 -15
  192. package/dist/core/backend-deploy/image-tag.js.map +0 -1
  193. package/dist/core/backend-deploy/index.d.ts +0 -3
  194. package/dist/core/backend-deploy/index.d.ts.map +0 -1
  195. package/dist/core/backend-deploy/index.js +0 -6
  196. package/dist/core/backend-deploy/index.js.map +0 -1
  197. package/dist/core/backend-deploy/local-docker-build.d.ts +0 -8
  198. package/dist/core/backend-deploy/local-docker-build.d.ts.map +0 -1
  199. package/dist/core/backend-deploy/local-docker-build.js +0 -25
  200. package/dist/core/backend-deploy/local-docker-build.js.map +0 -1
  201. package/dist/core/backend-deploy/logger.d.ts +0 -10
  202. package/dist/core/backend-deploy/logger.d.ts.map +0 -1
  203. package/dist/core/backend-deploy/logger.js +0 -22
  204. package/dist/core/backend-deploy/logger.js.map +0 -1
  205. package/dist/core/backend-deploy/registry-login-push.d.ts +0 -24
  206. package/dist/core/backend-deploy/registry-login-push.d.ts.map +0 -1
  207. package/dist/core/backend-deploy/registry-login-push.js +0 -37
  208. package/dist/core/backend-deploy/registry-login-push.js.map +0 -1
  209. package/dist/core/backend-deploy/remote-docker-client.d.ts +0 -11
  210. package/dist/core/backend-deploy/remote-docker-client.d.ts.map +0 -1
  211. package/dist/core/backend-deploy/remote-docker-client.js +0 -34
  212. package/dist/core/backend-deploy/remote-docker-client.js.map +0 -1
  213. package/dist/core/backend-deploy/remote-pull-image.d.ts +0 -9
  214. package/dist/core/backend-deploy/remote-pull-image.d.ts.map +0 -1
  215. package/dist/core/backend-deploy/remote-pull-image.js +0 -39
  216. package/dist/core/backend-deploy/remote-pull-image.js.map +0 -1
  217. package/dist/core/backend-deploy/resolve-dockerfile.d.ts +0 -7
  218. package/dist/core/backend-deploy/resolve-dockerfile.d.ts.map +0 -1
  219. package/dist/core/backend-deploy/resolve-dockerfile.js +0 -24
  220. package/dist/core/backend-deploy/resolve-dockerfile.js.map +0 -1
  221. package/dist/core/backend-deploy/run-docker-cli.d.ts +0 -9
  222. package/dist/core/backend-deploy/run-docker-cli.d.ts.map +0 -1
  223. package/dist/core/backend-deploy/run-docker-cli.js +0 -14
  224. package/dist/core/backend-deploy/run-docker-cli.js.map +0 -1
  225. package/dist/core/backend-deploy/types.d.ts +0 -23
  226. package/dist/core/backend-deploy/types.d.ts.map +0 -1
  227. package/dist/core/backend-deploy/types.js +0 -3
  228. package/dist/core/backend-deploy/types.js.map +0 -1
  229. package/dist/core/branch-name.d.ts +0 -8
  230. package/dist/core/branch-name.d.ts.map +0 -1
  231. package/dist/core/branch-name.js +0 -37
  232. package/dist/core/branch-name.js.map +0 -1
  233. package/dist/core/constants.d.ts +0 -4
  234. package/dist/core/constants.d.ts.map +0 -1
  235. package/dist/core/constants.js +0 -16
  236. package/dist/core/constants.js.map +0 -1
  237. package/dist/core/cursor-cmd.d.ts +0 -30
  238. package/dist/core/cursor-cmd.d.ts.map +0 -1
  239. package/dist/core/cursor-cmd.js +0 -193
  240. package/dist/core/cursor-cmd.js.map +0 -1
  241. package/dist/core/minio.d.ts +0 -37
  242. package/dist/core/minio.d.ts.map +0 -1
  243. package/dist/core/minio.js +0 -159
  244. package/dist/core/minio.js.map +0 -1
  245. package/dist/core/parse-testcase-md.d.ts +0 -17
  246. package/dist/core/parse-testcase-md.d.ts.map +0 -1
  247. package/dist/core/parse-testcase-md.js +0 -79
  248. package/dist/core/parse-testcase-md.js.map +0 -1
  249. package/dist/core/std-event-handler.d.ts +0 -25
  250. package/dist/core/std-event-handler.d.ts.map +0 -1
  251. package/dist/core/std-event-handler.js +0 -90
  252. package/dist/core/std-event-handler.js.map +0 -1
  253. package/dist/core/utils.d.ts +0 -19
  254. package/dist/core/utils.d.ts.map +0 -1
  255. package/dist/core/utils.js +0 -71
  256. package/dist/core/utils.js.map +0 -1
  257. package/dist/core/ws-client.d.ts +0 -29
  258. package/dist/core/ws-client.d.ts.map +0 -1
  259. package/dist/core/ws-client.js +0 -81
  260. package/dist/core/ws-client.js.map +0 -1
  261. package/dist/employee-ws-client.d.ts +0 -42
  262. package/dist/employee-ws-client.d.ts.map +0 -1
  263. package/dist/employee-ws-client.js +0 -99
  264. package/dist/employee-ws-client.js.map +0 -1
  265. package/dist/index.d.ts +0 -6
  266. package/dist/index.d.ts.map +0 -1
  267. package/dist/index.js.map +0 -1
  268. package/templates/commands/apm-auto-dev.md +0 -6
  269. package/templates/commands/apm-fixbug.md +0 -6
  270. package/templates/commands/apm-prd-review.md +0 -6
  271. package/templates/commands/apm-prd-sync.md +0 -6
  272. package/templates/skills/apm-apply-change/SKILL.md +0 -191
  273. package/templates/skills/apm-auto-dev/SKILL.md +0 -170
  274. package/templates/skills/apm-fixbug/SKILL.md +0 -97
  275. package/templates/skills/apm-propose/SKILL.md +0 -123
  276. package/templates/skills/apm-propose/design-instruction.md +0 -94
  277. package/templates/skills/apm-propose/propose-instruction.md +0 -81
  278. package/templates/skills/apm-propose/specs-instruction.md +0 -114
  279. package/templates/skills/apm-propose/tasks-instruction.md +0 -90
  280. package/templates/skills/apm-release/SKILL.md +0 -87
  281. package/templates/skills/code-change-summary/SKILL.md +0 -84
  282. package/templates/skills/code-change-summary/summary-template.md +0 -55
  283. package/templates/skills/code-deploy/SKILL.md +0 -39
  284. package/templates/skills/prd-review/SKILL.md +0 -48
  285. package/templates/skills/prd-review/output-template.md +0 -47
  286. package/templates/skills/prd-sync/SKILL.md +0 -74
  287. package/templates/skills/prd-sync/updated-requirement-template.md +0 -39
  288. package/templates/skills/prd-testcase/SKILL.md +0 -82
  289. package/templates/skills/prd-testcase/reference.md +0 -44
  290. package/templates/skills/product-capability-inventory/SKILL.md +0 -131
  291. package/templates/skills/product-capability-inventory/template.md +0 -80
  292. package/templates/skills/product-capability-inventory//344/275/277/347/224/250/350/257/264/346/230/216/344/271/246.md +0 -36
  293. package/templates/skills/product-capability-inventory//347/233/256/345/275/225/350/247/204/350/214/203.md +0 -58
@@ -1,77 +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.registerDeployBackendCommands = registerDeployBackendCommands;
7
- const node_path_1 = __importDefault(require("node:path"));
8
- const backend_deploy_1 = require("../../core/backend-deploy");
9
- const image_tag_1 = require("../../core/backend-deploy/image-tag");
10
- const branch_name_1 = require("../../core/branch-name");
11
- const apm_config_1 = require("../../core/apm-config");
12
- const parse_1 = require("../utils/parse");
13
- const node_process_1 = require("node:process");
14
- const api_1 = require("../../api");
15
- /**
16
- * 后端镜像部署:本地 docker build → 推送阿里云私有仓库 → 远程 docker pull。
17
- * 与 deploy-frontend 一致:位置参数 name 为分支名(解析末段),作镜像 tag;--env 为环境标签。
18
- */
19
- function registerDeployBackendCommands(program) {
20
- program
21
- .command("deploy-backend")
22
- .description("使用本地 Docker 构建后端镜像、推送到私有 Registry,并在远程 Docker 主机上拉取镜像(连接信息见 apm.config.json 的 backendDeploy)")
23
- .argument("[name]", "名称,英文下划线分割,作为镜像 tag", "online")
24
- .option("--env <env_tag>", "环境标签", "测试环境")
25
- .requiredOption("--dir <path>", "构建上下文目录(相对当前工作目录或绝对路径);约定使用此目录下的 Dockerfile")
26
- .option("--config <path>", "apm.config.json 路径(默认 .apm/apm.config.json,相对当前工作目录或绝对路径)")
27
- .option("--requirement-id <requirement_id>", "需求 ID(部署成功后登记后端环境,与 deploy-frontend 一致)", parse_1.parsePositiveInt)
28
- .option("-q, --quick <boolean>", "直接部署远程容器,不进行本地构建、推送镜像等步骤", false)
29
- .action(async (name, opts) => {
30
- const branchName = (0, branch_name_1.normalizeBranchName)(name);
31
- if (!branchName) {
32
- console.error("请传入有效的分支名(第一个位置参数 <name>)");
33
- process.exit(1);
34
- }
35
- const cleanBranch = (0, branch_name_1.sanitizeBranchName)(branchName);
36
- (0, image_tag_1.assertDeployImageTag)(cleanBranch);
37
- const cfg = (0, apm_config_1.loadApmConfig)({ configPath: opts.config });
38
- const fromApm = (0, apm_config_1.resolveBackendDeployFromApmConfig)(cfg);
39
- const dirAbs = node_path_1.default.resolve(opts.dir || (0, node_process_1.cwd)());
40
- const params = {
41
- image: fromApm.name,
42
- tag: cleanBranch,
43
- registryHost: fromApm.registryHost,
44
- registryNamespace: fromApm.registryNamespace,
45
- registryUser: fromApm.registryUser,
46
- registryPassword: fromApm.registryPassword,
47
- remoteHost: fromApm.remoteHost,
48
- remotePort: fromApm.remotePort,
49
- remoteProtocol: fromApm.remoteProtocol,
50
- remoteCaPath: fromApm.caPath ?? "",
51
- remoteCertPath: fromApm.certPath ?? "",
52
- remoteKeyPath: fromApm.keyPath ?? "",
53
- envFilePath: fromApm.envFilePath,
54
- containerPortsMappings: fromApm.containerPortsMappings,
55
- dockerNetwork: fromApm.dockerNetwork,
56
- };
57
- const workflow = new backend_deploy_1.BackendDeployWorkflow(params);
58
- if (opts.quick) {
59
- await workflow.deployRemoteContainer(dirAbs);
60
- }
61
- else {
62
- await workflow.run(dirAbs);
63
- }
64
- const envTag = (0, branch_name_1.resolveEnvTag)(opts.env ?? "测试环境");
65
- if (opts.requirementId) {
66
- const api = (0, api_1.createApmClient)();
67
- await api.cli.resourceEnvironmentCreate({
68
- requirementId: opts.requirementId,
69
- name: cleanBranch,
70
- tag: envTag,
71
- type: "BACKEND",
72
- });
73
- }
74
- console.log("后端部署成功");
75
- });
76
- }
77
- //# sourceMappingURL=deploy-backend.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"deploy-backend.js","sourceRoot":"","sources":["../../../src/cli/commands/deploy-backend.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- import type { Command } from "commander";
2
- export declare function registerDeployFrontendCommands(program: Command): void;
3
- //# sourceMappingURL=deploy-frontend.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"deploy-frontend.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/deploy-frontend.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAwEzC,wBAAgB,8BAA8B,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAmKrE"}
@@ -1,167 +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.registerDeployFrontendCommands = registerDeployFrontendCommands;
7
- const promises_1 = require("node:fs/promises");
8
- const node_path_1 = __importDefault(require("node:path"));
9
- const branch_name_1 = require("../../core/branch-name");
10
- const apm_config_1 = require("../../core/apm-config");
11
- const minio_1 = require("../../core/minio");
12
- const parse_1 = require("../utils/parse");
13
- const api_1 = require("../../api");
14
- /**
15
- * 产物协议:优先 `{root}/index.html`;否则在一级子目录中按名排序找第一个 `{root}/<dir>/index.html`,
16
- * 复制到 `{root}/index.html` 后结束。
17
- */
18
- async function ensureArtifactRootIndexHtml(root) {
19
- const indexHtmlPath = node_path_1.default.join(root, "index.html");
20
- try {
21
- const st = await (0, promises_1.stat)(indexHtmlPath);
22
- if (st.isFile()) {
23
- return;
24
- }
25
- }
26
- catch {
27
- /* 不存在则扫描一级子目录 */
28
- }
29
- let entries;
30
- try {
31
- entries = await (0, promises_1.readdir)(root, { withFileTypes: true });
32
- }
33
- catch (e) {
34
- console.error(`无法读取产物目录:${root}`, e);
35
- process.exit(1);
36
- }
37
- const dirNames = entries
38
- .filter((e) => e.isDirectory())
39
- .map((e) => String(e.name))
40
- .sort();
41
- for (const name of dirNames) {
42
- const candidate = node_path_1.default.join(root, name, "index.html");
43
- try {
44
- const st = await (0, promises_1.stat)(candidate);
45
- if (!st.isFile()) {
46
- continue;
47
- }
48
- }
49
- catch {
50
- continue;
51
- }
52
- await (0, promises_1.copyFile)(candidate, indexHtmlPath);
53
- console.error(`产物协议:已将 ${node_path_1.default.join(name, "index.html")} 复制为根目录 index.html`);
54
- return;
55
- }
56
- console.error(`产物协议:需在产物根目录存在 index.html,或在其一级子目录中存在可复制的 index.html(未在 ${root} 下找到)`);
57
- process.exit(1);
58
- }
59
- function registerDeployFrontendCommands(program) {
60
- program
61
- .command("deploy-frontend")
62
- .description("递归上传前端产物目录到 MinIO,并在成功后为该桶设置匿名可读策略(仅读取当前目录下 `.apm/.env` 中的 MINIO_*,已有环境变量优先)")
63
- .argument("[name]", "分支名,作为对象键顶层目录", "online")
64
- .option("--env <env_tag>", "环境标签", "测试环境,正式环境")
65
- .option("--dir <path>", "产物目录(默认 dist)")
66
- .option("--config <path>", "apm.config.json 路径(默认 .apm/apm.config.json,相对当前工作目录或绝对路径)")
67
- .option("--requirement-id <requirement_id>", "需求 ID(上传成功后登记前端环境)", parse_1.parsePositiveInt)
68
- .option("--max-file-size-mb <mb>", `单文件大小上限,默认 ${minio_1.DEFAULT_MAX_FILE_SIZE_MB}`, (v) => Number.parseInt(String(v), 10))
69
- .action(async (name, opts) => {
70
- const cfg = (0, apm_config_1.loadApmConfig)({ configPath: opts.config });
71
- const { frontendDeploy: settings } = cfg;
72
- const nameRaw = (cfg.name ?? "").trim();
73
- if (!nameRaw) {
74
- console.error("请在 .apm/apm.config.json 顶层配置 name(作为 MinIO 对象键前缀)");
75
- process.exit(1);
76
- }
77
- if (nameRaw.includes(":")) {
78
- console.error("apm.config.json 的 name 不能包含 ':'");
79
- process.exit(1);
80
- }
81
- let namePrefix;
82
- try {
83
- namePrefix = (0, minio_1.sanitizeRelativePath)(nameRaw.replace(/\\/g, "/"));
84
- }
85
- catch {
86
- console.error("apm.config.json 的 name 非法(路径片段不能为 . 或 ..)");
87
- process.exit(1);
88
- }
89
- const minio = new minio_1.MinioClient({
90
- endPoint: settings.endpoint,
91
- port: settings.port,
92
- useSSL: settings.useSsl,
93
- accessKey: settings.accessKey,
94
- secretKey: settings.secretKey,
95
- });
96
- const bucket = settings.bucket;
97
- const branchName = (0, branch_name_1.normalizeBranchName)(name);
98
- if (!branchName) {
99
- console.error("请传入有效的分支名(第一个位置参数 <name>)");
100
- process.exit(1);
101
- }
102
- const cleanBranch = (0, branch_name_1.sanitizeBranchName)(branchName);
103
- const root = node_path_1.default.resolve(process.cwd(), opts.dir || "dist");
104
- if (!(await (0, minio_1.isDirectoryPath)(root))) {
105
- console.error(`产物目录不存在:${root}`);
106
- process.exit(1);
107
- }
108
- await ensureArtifactRootIndexHtml(root);
109
- const maxBytes = Math.max(1, Number.isFinite(opts.maxFileSizeMb)
110
- ? Math.floor((opts.maxFileSizeMb ?? minio_1.DEFAULT_MAX_FILE_SIZE_MB) * 1024 * 1024)
111
- : minio_1.DEFAULT_MAX_FILE_SIZE_MB * 1024 * 1024);
112
- const files = await (0, minio_1.collectFiles)(root);
113
- if (files.length === 0) {
114
- console.error(`目录为空:${root}`);
115
- process.exit(1);
116
- }
117
- let uploaded = 0;
118
- let totalBytes = 0;
119
- console.error(`开始直连 MinIO 上传,共 ${files.length} 个文件…`);
120
- await minio.ensureBucket(bucket);
121
- // 只清理与上传目录对应的对象前缀,避免误删同一分支下其它目录内容
122
- await minio.deleteObjectsByPrefix(bucket, `${namePrefix}/${cleanBranch}/dist/`);
123
- for (const f of files) {
124
- if (f.size > maxBytes) {
125
- console.error(`文件过大,已拒绝:${f.relativePath}(${(0, minio_1.toMB)(f.size)}MB > ${(0, minio_1.toMB)(maxBytes)}MB)`);
126
- process.exit(1);
127
- }
128
- const buf = await (0, minio_1.readArtifactFile)(f.absPath);
129
- const cleanRel = (0, minio_1.sanitizeRelativePath)(f.relativePath);
130
- const objectKey = (0, minio_1.toArtifactObjectKey)({
131
- namePrefix,
132
- branchName: cleanBranch,
133
- relativePath: cleanRel,
134
- });
135
- const mimeType = (0, minio_1.detectMimeType)(f.relativePath).trim().toLowerCase() ||
136
- "application/octet-stream";
137
- await minio.putObject(bucket, objectKey, buf, {
138
- "Content-Type": mimeType,
139
- });
140
- uploaded += 1;
141
- totalBytes += buf.length;
142
- console.error(`[${uploaded}/${files.length}] ${f.relativePath} -> ${objectKey}`);
143
- }
144
- console.error("正在设置桶策略(匿名可读对象,便于 HTTP 直链)…");
145
- await minio.setBucketPublicRead(bucket);
146
- console.log(JSON.stringify({
147
- ok: true,
148
- namePrefix,
149
- branchName: cleanBranch,
150
- bucket,
151
- fileCount: uploaded,
152
- totalBytes,
153
- bucketPublicRead: true,
154
- }, null, 2));
155
- const envTag = (0, branch_name_1.resolveEnvTag)(opts.env ?? "测试环境");
156
- if (opts.requirementId) {
157
- const api = (0, api_1.createApmClient)();
158
- await api.cli.resourceEnvironmentCreate({
159
- requirementId: opts.requirementId,
160
- name: cleanBranch,
161
- tag: envTag,
162
- type: "FRONTEND",
163
- });
164
- }
165
- });
166
- }
167
- //# sourceMappingURL=deploy-frontend.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"deploy-frontend.js","sourceRoot":"","sources":["../../../src/cli/commands/deploy-frontend.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- import type { Command } from "commander";
2
- export declare function registerGetCommands(program: Command): void;
3
- //# sourceMappingURL=get.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"get.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/get.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAyCzC,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAiI1D"}
@@ -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"}