ai-project-manage-cli 2.0.26 → 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,19 +0,0 @@
1
- export declare function parseNdjsonLine(line: string): unknown | null;
2
- /**
3
- * 统一处理来自服务端或本地的 prompt:安全字符、空白与首词拆分。
4
- * 典型用法:先 `cleanPrompt`,再对 `fullText` 或 `bodyWithoutHead` 调用 `escapePromptForCliArg` 作为 agent argv。
5
- */
6
- export declare function cleanPrompt(raw: string): {
7
- fullText: string;
8
- headToken: string;
9
- bodyWithoutHead: string;
10
- };
11
- /**
12
- * 将用户 prompt 转为适合作为 CLI 单个 argv 的字符串。
13
- * Windows 下经 cmd.exe 拼接时,换行、未配对引号等易破坏解析;使用 C 风格转义
14
- *(\\、\\n、\\t、\\")压成单行。Unix 下 spawn argv 虽通常可原样传递,
15
- * 为与 agent 行为一致仍做相同归一化。
16
- */
17
- export declare function escapePromptForCliArg(raw: string): string;
18
- export declare function readPackageJson(): any;
19
- //# sourceMappingURL=utils.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/core/utils.ts"],"names":[],"mappings":"AAGA,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,CAiB5D;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM;;;;EAatC;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CASzD;AAED,wBAAgB,eAAe,QAM9B"}
@@ -1,71 +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.parseNdjsonLine = parseNdjsonLine;
7
- exports.cleanPrompt = cleanPrompt;
8
- exports.escapePromptForCliArg = escapePromptForCliArg;
9
- exports.readPackageJson = readPackageJson;
10
- const node_fs_1 = require("node:fs");
11
- const node_path_1 = __importDefault(require("node:path"));
12
- function parseNdjsonLine(line) {
13
- const trimmed = line.replace(/\r$/, "").trim();
14
- if (!trimmed)
15
- return null;
16
- let v;
17
- try {
18
- v = JSON.parse(trimmed);
19
- }
20
- catch {
21
- return { type: "stdout", parseError: true, raw: trimmed };
22
- }
23
- if (typeof v === "string") {
24
- try {
25
- return JSON.parse(v);
26
- }
27
- catch {
28
- return v;
29
- }
30
- }
31
- return v;
32
- }
33
- /**
34
- * 统一处理来自服务端或本地的 prompt:安全字符、空白与首词拆分。
35
- * 典型用法:先 `cleanPrompt`,再对 `fullText` 或 `bodyWithoutHead` 调用 `escapePromptForCliArg` 作为 agent argv。
36
- */
37
- function cleanPrompt(raw) {
38
- let s = raw.replace(/\0/g, "");
39
- s = s.replace(/\r\n/g, "\n").replace(/\r/g, "\n");
40
- s = s.replace(/\u2028/g, "\n").replace(/\u2029/g, "\n");
41
- s = s.trim();
42
- const parts = s.split(/\s+/).filter(Boolean);
43
- const head = parts[0] ?? "";
44
- const bodyWithoutHead = parts.slice(1).join(" ").trim();
45
- return {
46
- fullText: s,
47
- headToken: head || "unknown",
48
- bodyWithoutHead,
49
- };
50
- }
51
- /**
52
- * 将用户 prompt 转为适合作为 CLI 单个 argv 的字符串。
53
- * Windows 下经 cmd.exe 拼接时,换行、未配对引号等易破坏解析;使用 C 风格转义
54
- *(\\、\\n、\\t、\\")压成单行。Unix 下 spawn argv 虽通常可原样传递,
55
- * 为与 agent 行为一致仍做相同归一化。
56
- */
57
- function escapePromptForCliArg(raw) {
58
- let s = raw.replace(/\0/g, "");
59
- s = s.replace(/\r\n/g, "\n").replace(/\r/g, "\n");
60
- s = s.replace(/\u2028/g, "\n").replace(/\u2029/g, "\n");
61
- s = s.replace(/\\/g, "\\\\");
62
- s = s.replace(/\n/g, "\\n");
63
- s = s.replace(/\t/g, "\\t");
64
- s = s.replace(/"/g, '\\"');
65
- return s;
66
- }
67
- function readPackageJson() {
68
- const packageJson = (0, node_fs_1.readFileSync)(node_path_1.default.resolve(__dirname, "../../package.json"), "utf-8");
69
- return JSON.parse(packageJson);
70
- }
71
- //# sourceMappingURL=utils.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/core/utils.ts"],"names":[],"mappings":"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"}
@@ -1,29 +0,0 @@
1
- /**
2
- * 员工 CLI WebSocket:与后端 `AppWebSocketGateway` 一致,
3
- * 使用 URL 查询参数 `token`(`Employee.cliToken`),路径 `/ws`;
4
- * 端口优先 `apm config set ws-port`,否则回退 {@link FALLBACK_EMPLOYEE_WS_PORT}。
5
- */
6
- import WebSocket from "ws";
7
- import { CursorCmdPayload } from "./cursor-cmd";
8
- /** 与 `EmployeeWebsocketPushService.pushToEmployee` 发送格式一致 */
9
- export type EmployeeWsServerMessage = {
10
- event: string;
11
- data: CursorCmdPayload;
12
- };
13
- type EmployeeWebSocketClientOptions = {
14
- debug?: boolean;
15
- };
16
- export declare class EmployeeWebSocketClient {
17
- client: WebSocket;
18
- debug: boolean;
19
- constructor(options?: EmployeeWebSocketClientOptions);
20
- buildEmployeeWebSocketUrl(): string;
21
- parseMessageData(data: Buffer): EmployeeWsServerMessage | null;
22
- close: () => void;
23
- onOpen: () => void;
24
- onClose: (code: number, reason: Buffer) => void;
25
- onError: (err: Error) => void;
26
- onMessage: (data: Buffer) => void;
27
- }
28
- export {};
29
- //# sourceMappingURL=ws-client.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ws-client.d.ts","sourceRoot":"","sources":["../../src/core/ws-client.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,SAAS,MAAM,IAAI,CAAC;AAE3B,OAAO,EAAa,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAE3D,6DAA6D;AAC7D,MAAM,MAAM,uBAAuB,GAAG;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,gBAAgB,CAAC;CACxB,CAAC;AAEF,KAAK,8BAA8B,GAAG;IACpC,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF,qBAAa,uBAAuB;IAClC,MAAM,EAAE,SAAS,CAAC;IAClB,KAAK,EAAE,OAAO,CAAC;gBAEH,OAAO,GAAE,8BAAmC;IAWxD,yBAAyB,IAAI,MAAM;IAcnC,gBAAgB,CAAC,IAAI,EAAE,MAAM;IAmB7B,KAAK,aAEH;IAEF,MAAM,aAEJ;IAEF,OAAO,SAAU,MAAM,UAAU,MAAM,UAErC;IAEF,OAAO,QAAS,KAAK,UAEnB;IAEF,SAAS,SAAU,MAAM,UAQvB;CACH"}
@@ -1,81 +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.EmployeeWebSocketClient = void 0;
7
- /**
8
- * 员工 CLI WebSocket:与后端 `AppWebSocketGateway` 一致,
9
- * 使用 URL 查询参数 `token`(`Employee.cliToken`),路径 `/ws`;
10
- * 端口优先 `apm config set ws-port`,否则回退 {@link FALLBACK_EMPLOYEE_WS_PORT}。
11
- */
12
- const ws_1 = __importDefault(require("ws"));
13
- const apm_config_1 = require("./apm-config");
14
- const cursor_cmd_1 = require("./cursor-cmd");
15
- class EmployeeWebSocketClient {
16
- client;
17
- debug;
18
- constructor(options = {}) {
19
- this.debug = Boolean(options.debug);
20
- const url = this.buildEmployeeWebSocketUrl();
21
- const client = new ws_1.default(url);
22
- this.client = client;
23
- client.on("open", this.onOpen);
24
- client.on("close", this.onClose);
25
- client.on("error", this.onError);
26
- client.on("message", this.onMessage);
27
- }
28
- buildEmployeeWebSocketUrl() {
29
- const config = (0, apm_config_1.getApmRuntimeConfig)();
30
- const url = new URL(config.server.url);
31
- const token = config.auth.token;
32
- const port = config.server.wsPort || 4000;
33
- if (!token) {
34
- console.error("token 不存在,请先执行 apm login");
35
- process.exit(1);
36
- }
37
- const wsProto = "ws:";
38
- const params = new URLSearchParams({ token: token.trim() });
39
- return `${wsProto}//${url.hostname}:${port}/ws?${params.toString()}`;
40
- }
41
- parseMessageData(data) {
42
- const raw = Buffer.isBuffer(data) ? data.toString("utf8") : String(data);
43
- let parsed = null;
44
- try {
45
- const j = JSON.parse(raw);
46
- if (j &&
47
- typeof j === "object" &&
48
- "event" in j &&
49
- typeof j.event === "string") {
50
- parsed = j;
51
- }
52
- }
53
- catch {
54
- /* 非 JSON 时 parsed 保持 null */
55
- }
56
- return parsed;
57
- }
58
- close = () => {
59
- this.client.close();
60
- };
61
- onOpen = () => {
62
- console.log("已连接AI项目管理平台,等待服务指令...");
63
- };
64
- onClose = (code, reason) => {
65
- console.log(`连接关闭 code=${code} ${reason.toString()}`);
66
- };
67
- onError = (err) => {
68
- console.error(err.message);
69
- };
70
- onMessage = (data) => {
71
- // 仅处理Cursor事件
72
- const parsed = this.parseMessageData(data);
73
- if (parsed?.event !== "cursor") {
74
- return;
75
- }
76
- const cmd = new cursor_cmd_1.CursorCmd({ ...parsed.data, debug: this.debug });
77
- cmd.execute();
78
- };
79
- }
80
- exports.EmployeeWebSocketClient = EmployeeWebSocketClient;
81
- //# sourceMappingURL=ws-client.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ws-client.js","sourceRoot":"","sources":["../../src/core/ws-client.ts"],"names":[],"mappings":"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"}
@@ -1,42 +0,0 @@
1
- /**
2
- * 员工 CLI WebSocket:与后端 `AppWebSocketGateway` 一致,
3
- * 使用 URL 查询参数 `token`(`Employee.cliToken`),路径 `/ws`;
4
- * 端口优先 `apm config set ws-port`,否则回退 {@link FALLBACK_EMPLOYEE_WS_PORT}。
5
- */
6
- import WebSocket from "ws";
7
- import { FALLBACK_EMPLOYEE_WS_PORT, resolveEmployeeWsPortFromConfig } from "./config-store";
8
- export { FALLBACK_EMPLOYEE_WS_PORT, resolveEmployeeWsPortFromConfig };
9
- /** 与 `EmployeeWebsocketPushService.pushToEmployee` 发送格式一致 */
10
- export type EmployeeWsServerMessage = {
11
- event: string;
12
- data: unknown;
13
- };
14
- export type BuildEmployeeWebSocketUrlOptions = {
15
- /** 显式端口;不传则 {@link resolveEmployeeWsPortFromConfig}(配置 → 回退 4000) */
16
- port?: number;
17
- };
18
- /**
19
- * 由 `baseUrl` 解析主机名(与 HTTP 同源),使用独立 WS 端口构造 `ws(s)://host:port/ws?token=...`。
20
- */
21
- export declare function buildEmployeeWebSocketUrl(baseUrl: string, token: string, options?: BuildEmployeeWebSocketUrlOptions): string;
22
- export type CreateEmployeeWebSocketOptions = {
23
- baseUrl: string;
24
- token: string;
25
- wsPort?: number;
26
- /** 服务端推送的 JSON:`{ event, data }`;解析失败时 `parsed` 为 `null` */
27
- onMessage?: (raw: string, parsed: EmployeeWsServerMessage | null) => void;
28
- onOpen?: () => void;
29
- onClose?: (code: number, reason: Buffer) => void;
30
- onError?: (err: Error) => void;
31
- };
32
- /**
33
- * 使用员工 token 建立 WebSocket,连接成功后可在 `onMessage` 中接收服务端推送。
34
- */
35
- export declare function createEmployeeWebSocket(options: CreateEmployeeWebSocketOptions): WebSocket;
36
- /**
37
- * 连接并等待服务端消息,直到连接关闭或 `signal` 中止。
38
- */
39
- export declare function connectEmployeeWebSocketAndWait(options: CreateEmployeeWebSocketOptions & {
40
- signal?: AbortSignal;
41
- }): Promise<WebSocket>;
42
- //# sourceMappingURL=employee-ws-client.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"employee-ws-client.d.ts","sourceRoot":"","sources":["../src/employee-ws-client.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,SAAS,MAAM,IAAI,CAAC;AAC3B,OAAO,EACL,yBAAyB,EAEzB,+BAA+B,EAChC,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAE,yBAAyB,EAAE,+BAA+B,EAAE,CAAC;AAEtE,6DAA6D;AAC7D,MAAM,MAAM,uBAAuB,GAAG;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,OAAO,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,gCAAgC,GAAG;IAC7C,qEAAqE;IACrE,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEF;;GAEG;AACH,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,gCAAgC,GACzC,MAAM,CAaR;AAED,MAAM,MAAM,8BAA8B,GAAG;IAC3C,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,4DAA4D;IAC5D,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,uBAAuB,GAAG,IAAI,KAAK,IAAI,CAAC;IAC1E,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACjD,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,KAAK,KAAK,IAAI,CAAC;CAChC,CAAC;AAEF;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,8BAA8B,GACtC,SAAS,CA2BX;AAED;;GAEG;AACH,wBAAgB,+BAA+B,CAC7C,OAAO,EAAE,8BAA8B,GAAG;IACxC,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB,GACA,OAAO,CAAC,SAAS,CAAC,CA8BpB"}
@@ -1,99 +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.resolveEmployeeWsPortFromConfig = exports.FALLBACK_EMPLOYEE_WS_PORT = void 0;
7
- exports.buildEmployeeWebSocketUrl = buildEmployeeWebSocketUrl;
8
- exports.createEmployeeWebSocket = createEmployeeWebSocket;
9
- exports.connectEmployeeWebSocketAndWait = connectEmployeeWebSocketAndWait;
10
- /**
11
- * 员工 CLI WebSocket:与后端 `AppWebSocketGateway` 一致,
12
- * 使用 URL 查询参数 `token`(`Employee.cliToken`),路径 `/ws`;
13
- * 端口优先 `apm config set ws-port`,否则回退 {@link FALLBACK_EMPLOYEE_WS_PORT}。
14
- */
15
- const ws_1 = __importDefault(require("ws"));
16
- const config_store_1 = require("./config-store");
17
- Object.defineProperty(exports, "FALLBACK_EMPLOYEE_WS_PORT", { enumerable: true, get: function () { return config_store_1.FALLBACK_EMPLOYEE_WS_PORT; } });
18
- Object.defineProperty(exports, "resolveEmployeeWsPortFromConfig", { enumerable: true, get: function () { return config_store_1.resolveEmployeeWsPortFromConfig; } });
19
- /**
20
- * 由 `baseUrl` 解析主机名(与 HTTP 同源),使用独立 WS 端口构造 `ws(s)://host:port/ws?token=...`。
21
- */
22
- function buildEmployeeWebSocketUrl(baseUrl, token, options) {
23
- const u = new URL((0, config_store_1.normalizeBaseUrl)(baseUrl));
24
- const explicit = options?.port;
25
- const port = explicit != null &&
26
- Number.isFinite(explicit) &&
27
- explicit >= 1 &&
28
- explicit <= 65535
29
- ? Math.floor(explicit)
30
- : (0, config_store_1.resolveEmployeeWsPortFromConfig)();
31
- const wsProto = u.protocol === "https:" ? "wss:" : "ws:";
32
- const params = new URLSearchParams({ token: token.trim() });
33
- return `${wsProto}//${u.hostname}:${port}/ws?${params.toString()}`;
34
- }
35
- /**
36
- * 使用员工 token 建立 WebSocket,连接成功后可在 `onMessage` 中接收服务端推送。
37
- */
38
- function createEmployeeWebSocket(options) {
39
- const url = buildEmployeeWebSocketUrl(options.baseUrl, options.token, {
40
- port: options.wsPort,
41
- });
42
- const ws = new ws_1.default(url);
43
- ws.on("open", () => options.onOpen?.());
44
- ws.on("close", (code, reason) => options.onClose?.(code, reason));
45
- ws.on("error", (err) => options.onError?.(err));
46
- ws.on("message", (data) => {
47
- const raw = Buffer.isBuffer(data) ? data.toString("utf8") : String(data);
48
- let parsed = null;
49
- try {
50
- const j = JSON.parse(raw);
51
- if (j &&
52
- typeof j === "object" &&
53
- "event" in j &&
54
- typeof j.event === "string") {
55
- parsed = j;
56
- }
57
- }
58
- catch {
59
- /* 非 JSON 时 parsed 保持 null */
60
- }
61
- options.onMessage?.(raw, parsed);
62
- });
63
- return ws;
64
- }
65
- /**
66
- * 连接并等待服务端消息,直到连接关闭或 `signal` 中止。
67
- */
68
- function connectEmployeeWebSocketAndWait(options) {
69
- return new Promise((resolve, reject) => {
70
- const ws = createEmployeeWebSocket({
71
- ...options,
72
- onOpen: () => {
73
- options.onOpen?.();
74
- resolve(ws);
75
- },
76
- onError: (err) => {
77
- options.onError?.(err);
78
- reject(err);
79
- },
80
- });
81
- const onAbort = () => {
82
- try {
83
- ws.close();
84
- }
85
- catch {
86
- /* ignore */
87
- }
88
- };
89
- if (options.signal) {
90
- if (options.signal.aborted) {
91
- onAbort();
92
- reject(new Error("aborted"));
93
- return;
94
- }
95
- options.signal.addEventListener("abort", onAbort, { once: true });
96
- }
97
- });
98
- }
99
- //# sourceMappingURL=employee-ws-client.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"employee-ws-client.js","sourceRoot":"","sources":["../src/employee-ws-client.ts"],"names":[],"mappings":";;;;;;AA4BA,8DAiBC;AAgBD,0DA6BC;AAKD,0EAkCC;AAjID;;;;GAIG;AACH,4CAA2B;AAC3B,iDAIwB;AAEf,0GALP,wCAAyB,OAKO;AAAE,gHAHlC,8CAA+B,OAGkC;AAanE;;GAEG;AACH,SAAgB,yBAAyB,CACvC,OAAe,EACf,KAAa,EACb,OAA0C;IAE1C,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,IAAA,+BAAgB,EAAC,OAAO,CAAC,CAAC,CAAC;IAC7C,MAAM,QAAQ,GAAG,OAAO,EAAE,IAAI,CAAC;IAC/B,MAAM,IAAI,GACR,QAAQ,IAAI,IAAI;QAChB,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC;QACzB,QAAQ,IAAI,CAAC;QACb,QAAQ,IAAI,KAAK;QACf,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;QACtB,CAAC,CAAC,IAAA,8CAA+B,GAAE,CAAC;IACxC,MAAM,OAAO,GAAG,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC;IACzD,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAC5D,OAAO,GAAG,OAAO,KAAK,CAAC,CAAC,QAAQ,IAAI,IAAI,OAAO,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC;AACrE,CAAC;AAaD;;GAEG;AACH,SAAgB,uBAAuB,CACrC,OAAuC;IAEvC,MAAM,GAAG,GAAG,yBAAyB,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,KAAK,EAAE;QACpE,IAAI,EAAE,OAAO,CAAC,MAAM;KACrB,CAAC,CAAC;IACH,MAAM,EAAE,GAAG,IAAI,YAAS,CAAC,GAAG,CAAC,CAAC;IAC9B,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACxC,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;IAClE,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,GAAY,CAAC,CAAC,CAAC;IACzD,EAAE,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,EAAE;QACxB,MAAM,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACzE,IAAI,MAAM,GAAmC,IAAI,CAAC;QAClD,IAAI,CAAC;YACH,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAY,CAAC;YACrC,IACE,CAAC;gBACD,OAAO,CAAC,KAAK,QAAQ;gBACrB,OAAO,IAAI,CAAC;gBACZ,OAAQ,CAAwB,CAAC,KAAK,KAAK,QAAQ,EACnD,CAAC;gBACD,MAAM,GAAG,CAA4B,CAAC;YACxC,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,6BAA6B;QAC/B,CAAC;QACD,OAAO,CAAC,SAAS,EAAE,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;IACH,OAAO,EAAE,CAAC;AACZ,CAAC;AAED;;GAEG;AACH,SAAgB,+BAA+B,CAC7C,OAEC;IAED,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,EAAE,GAAG,uBAAuB,CAAC;YACjC,GAAG,OAAO;YACV,MAAM,EAAE,GAAG,EAAE;gBACX,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;gBACnB,OAAO,CAAC,EAAE,CAAC,CAAC;YACd,CAAC;YACD,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;gBACf,OAAO,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC;gBACvB,MAAM,CAAC,GAAG,CAAC,CAAC;YACd,CAAC;SACF,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,GAAG,EAAE;YACnB,IAAI,CAAC;gBACH,EAAE,CAAC,KAAK,EAAE,CAAC;YACb,CAAC;YAAC,MAAM,CAAC;gBACP,YAAY;YACd,CAAC;QACH,CAAC,CAAC;QACF,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACnB,IAAI,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBAC3B,OAAO,EAAE,CAAC;gBACV,MAAM,CAAC,IAAI,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;gBAC7B,OAAO;YACT,CAAC;YACD,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QACpE,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC"}
package/dist/index.d.ts DELETED
@@ -1,6 +0,0 @@
1
- /**
2
- * ai-project-manage 后端 SDK(目录结构对齐 apps/fe/src/api)。
3
- */
4
- export * from "./api/index";
5
- export * from "./employee-ws-client";
6
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,cAAc,aAAa,CAAC;AAC5B,cAAc,sBAAsB,CAAC"}
package/dist/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA;;GAEG;AACH,8CAA4B;AAC5B,uDAAqC"}
@@ -1,6 +0,0 @@
1
- ---
2
- name: "apm-auto-dev"
3
- description: "基于 apm 命令实现全自动开发,当用户在对话中主动提及使用"
4
- ---
5
-
6
- 你必须严格遵循本指令:使用 **READ** 工具阅读 {project-root}/.apm/skills/apm-auto-dev/SKILL.md,并严格按其说明执行!
@@ -1,6 +0,0 @@
1
- ---
2
- name: "apm-fixbug"
3
- description: "基于需求 ID 与 bugs 目录执行标准化缺陷修复:分支准备、同步缺陷、按「待处理」修复并部署测试环境;在对话中主动提及时使用"
4
- ---
5
-
6
- 你必须严格遵循本指令:使用 **READ** 工具阅读 {project-root}/.apm/skills/apm-fixbug/SKILL.md,并严格按其说明执行!
@@ -1,6 +0,0 @@
1
- ---
2
- name: "apm-prd-review"
3
- description: "结合仓库上下文对需求做结构化评审,依赖需求 ID;评审正文落盘并提交 comment;在对话中主动提及时使用"
4
- ---
5
-
6
- 你必须严格遵循本指令:使用 **READ** 工具阅读 {project-root}/.apm/skills/prd-review/SKILL.md,并严格按其说明执行!
@@ -1,6 +0,0 @@
1
- ---
2
- name: "apm-prd-sync"
3
- description: "根据评论与用户回复合并修订 PRD,覆盖本地 prd.md 并通过 apm 同步服务端;依赖需求 ID;在对话中主动提及时使用"
4
- ---
5
-
6
- 你必须严格遵循本指令:使用 **READ** 工具阅读 {project-root}/.apm/skills/prd-sync/SKILL.md,并严格按其说明执行!
@@ -1,191 +0,0 @@
1
- ---
2
- name: apm-apply-change
3
- description: 在 .apm/workitems/<requirementId>/ 按 tasks.md 逐项实现、勾选;一项任务一个 commit。遇事实性阻塞(如规划与代码严重不符)须停止执行,仅陈述事实与需用户提供的材料,不替用户决策或列方案。/opsx:apply 同此技能。
4
- ---
5
-
6
- # APM 工作项:按任务实现
7
-
8
- 根据工作项目录下的 **`tasks.md`** 驱动实现:**读规划 → 做代码 → 对账元数据 → 勾选 → 单独 commit**,直至全部完成或遇硬阻塞;上下文以 **`.apm/workitems/<requirementId>/`** 内文件为准。
9
-
10
- ---
11
-
12
- ## 输入
13
-
14
- | 字段 | 规则 |
15
- | --- | --- |
16
- | **`requirementId`** | **推荐显式提供**(与 `.apm/workitems/<requirementId>/` 目录名一致)。 |
17
-
18
- 若本轮未提供 `requirementId`:
19
-
20
- 1. 若对话中已能**唯一**确定工作项目录名,则用之。
21
- 2. 否则查看 **`.apm/workitems/`** 下子目录:若**仅有一个**,自动采用;若**多个**,**按目录名字典序取第一个**作为本次工作项,并在回复中列出当时可见的候选名,声明 **使用工作项:`<requirementId>`** 及如何覆盖(例如下次显式给出 id)。**不要**调用 AskUserQuestion,**不要**停下来让用户当场选择。
22
-
23
- **不要**为澄清需求而反问用户。若执行中发现**无法在无决策前提下继续**的事实性问题(见上文 **「停止执行」**),**不要**用推断顶过去。
24
-
25
- ---
26
-
27
- ## 停止执行(优先于继续推进)
28
-
29
- 若在实施过程中**发现**任一情况,**立即停止**本技能所驱动的后续实现与勾选(不再继续下一项任务),仅在会话中输出:
30
-
31
- 1. **客观事实**:已读到的文件/路径、与代码或任务条目的**具体矛盾点**(可摘引,避免主观评价)。
32
- 2. **当前进度**:处理到 `tasks.md` 的哪一条、仓库是否已有未提交改动(若有,说明范围)。
33
- 3. **需要用户提供什么**:为继续推进所**缺的信息或决策**(例如:以何者为准、是否接受某类改动、需确认的业务口径)。用**清单**列出,**一句一项**。
34
-
35
- **禁止**:给出「建议你先改 A / 再改 B」「可选方案 1/2/3」「宜采用…」等**替用户决策**或**行动建议**;不指导用户如何改文档、不预设优先级。
36
-
37
- **允许**:描述「若不补充某信息则无法继续」的**逻辑关系**(仍不展开成方案)。
38
-
39
- ---
40
-
41
- ## 工作项路径与必备文件
42
-
43
- - **根路径**:**`.apm/workitems/<requirementId>/`**
44
- - **必备**:**`tasks.md`**(含 `- [ ]` / `- [x]` 待办)。若不存在或无可执行条目:**阻塞**,说明须先完成 **apm-propose**(或手工补齐 `tasks.md`)。
45
- - **强烈建议读**:**`prd.md`**(范围与验收);实现时按需 **Read** **`proposal.md`**、**`design.md`**、**`specs/`**(与 **`tasks-instruction.md`** 中每条任务的元数据一致)。
46
- - **进度**:仅由 **`tasks.md`** 中复选框统计「已完成 / 总数」。
47
-
48
- ### 单会话读取(可选减负)
49
-
50
- 同一轮连续执行多项任务时:**`prd.md` / `design.md` / 各 spec** 若已在会话内读过且无疑虑,不必每个任务重复全文 Read;以**当前任务行**及元数据指向的 spec/设计段落为准,必要时对文件 **Read(偏移)** 或再读全文。
51
-
52
- ---
53
-
54
- ## Steps
55
-
56
- ### 1. 锚定工作项
57
-
58
- 确定 **`requirementId`** 与工作项根路径;声明 **使用工作项:`<requirementId>`**(若依上节规则自动选定,须说明如何覆盖)。
59
-
60
- ### 2. 读取 `tasks.md` 并判断状态
61
-
62
- - **Read** **`.apm/workitems/<requirementId>/tasks.md`**。
63
- - 若文件缺失、为空、或无任何 `- [ ]`:**停止**,提示先具备可执行 `tasks`(规划阶段)。
64
- - 若全部已为 `- [x]`:**可**直接汇报「已全部完成」(仅作事实陈述,不建议是否提交或发 MR)。
65
-
66
- ### 3. 读取实现上下文(按任务需要)
67
-
68
- 开始**第一个**未勾选任务前,至少 **Read**:
69
-
70
- - **`prd.md`**(若存在;与验收相关条款)
71
- - 与任务相关的 **`design.md`** 片段、**`specs/`** 下对应文件(见任务条目的 **需求编号** / 描述)
72
-
73
- 不要求每次任务都重读全部规划文件;以 **`tasks.md` 当前项** + **缺口再 Read** 为准。
74
-
75
- ### 4. 展示当前进度
76
-
77
- 在对话中简要展示:
78
-
79
- - **工作项**:`requirementId`
80
- - **进度**:「N/M 个任务已完成」(由 `tasks.md` 勾选统计)
81
- - **当前将处理**:下一条 `- [ ]` 的摘要(含组号/编号如 `2.1`)
82
-
83
- ### 5. 实现任务(循环直至完成或阻塞)
84
-
85
- 对每一条 **未勾选** 任务(建议按 `tasks.md` 自上而下顺序):
86
-
87
- 1. **说明**正在处理哪一项(编号 + 简述)。
88
- 2. **实现**所需代码/配置/迁移等;改动保持**最小**、与该项描述一致。
89
- 3. **标记完成前**在回复或备注中收集依据(与 **`tasks-instruction.md`** 子列表字段对齐即可):
90
- - **需求编号**:本实现对应 specs / tasks 中的哪条需求或场景。
91
- - **预期改动路径** 与 **实际改动文件**:若有合理偏差,简要说明原因。
92
- - **验证用例编号**(若任务中有)。
93
- - **验证结果** / **完成标准**:如何确认本项已达成(可简短)。
94
- 4. 仅在依据已齐、且自洽通过后,将 **`tasks.md`** 中对应行 **`- [ ]` 改为 `- [x]`**。
95
- 5. **Git**:本待办对应的**实现 + 勾选**等改动,**单独 `git commit` 一次**(**一项待办 = 一个 commit**;勿把多项待办混在同一 commit)。提交信息建议包含 `requirementId` 与任务编号或简述。
96
-
97
- **何时停止(不继续下一项)**——与上文 **「停止执行」** 一致:
98
-
99
- - **`design` / `specs` / `tasks` 与当前代码或彼此严重不一致**,以致无法按任务字面含义在**不臆造**的前提下完成 → **按「停止执行」输出**(事实 + 需用户提供的材料),**不**建议先改哪份文档、不改哪些。
100
- - 命令失败、环境错误、权限等**硬阻塞** → 说明原因、失败点、已执行步骤;**不**给排障步骤或替代命令建议(除非任务本身要求执行某命令且该命令已写在任务/文档中)。
101
- - 用户中断。
102
-
103
- **何时仍可继续**(仅当满足):任务表述略含糊,但可在 **prd / design / specs / tasks** 已有文字内**自洽**完成;若有**假设**,在回复中写清**假设**(仍不反问)。一旦假设会触及「以谁为准」的**产品/架构决策**,转 **「停止执行」**。
104
-
105
- ### 6. 完成或暂停时展示状态
106
-
107
- - **本会话**完成了哪些任务(可列勾选项摘要)。
108
- - **总体进度**:「N/M 个任务已完成」。
109
- - 若**全部完成**:仅陈述事实(进度与勾选状态),**不**建议后续流程(MR/发布/归档等)。
110
- - 若**暂停**:按 **「停止执行」** 或硬阻塞格式输出,**无**「可选后续」或方案建议。
111
-
112
- ---
113
-
114
- ## 实现过程中的输出(示例)
115
-
116
- ```
117
- ## 正在实施:<requirementId>
118
-
119
- 处理任务 3/7:2.1 实现导出接口
120
- [...实现过程...]
121
- ✓ 任务完成 · commit <short-sha> <subject>
122
-
123
- 处理任务 4/7:2.2 …
124
- ```
125
-
126
- ---
127
-
128
- ## 全部完成时的输出(示例)
129
-
130
- ```
131
- ## 实现完成
132
-
133
- **工作项:** <requirementId>
134
- **进度:** 7/7 个任务已完成 ✓
135
-
136
- ### 本会话已完成
137
- - [x] …
138
- - [x] …
139
-
140
- (每项待办均已对应独立 commit。)
141
- ```
142
-
143
- ---
144
-
145
- ## 暂停时的输出(示例)
146
-
147
- ```
148
- ## 实现已暂停
149
-
150
- **工作项:** <requirementId>
151
- **进度:** 4/7 个任务已完成
152
-
153
- ### 事实与原因
154
- <客观描述:文件/行/与任务或代码的矛盾点>
155
-
156
- ### 需要用户提供(或决策)
157
- - …
158
- - …
159
- ```
160
-
161
- (无方案列表、无「建议」;用户补充信息后可再次运行本技能。)
162
-
163
- ---
164
-
165
- ## 约束
166
-
167
- - 持续执行待办直至完成、**停止执行**或硬阻塞。
168
- - 开始前须已能对照 **`tasks.md`** 与 **`prd.md`**(及任务所需的 design/spec);**不要**在未读清当前任务依赖时盲改。
169
- - 任务表述有歧义时,仅在**无需用户决策**的前提下依据 **specs / design / prd** 推断;一旦涉及**以谁为准**或**严重不一致**,**停止执行**(见上文)。
170
- - **不**因「发现规划与代码不符」而**主动建议**修改 `design.md` / `specs/` / `tasks.md`;**停止**并说明事实与需用户提供的材料即可。
171
- - 代码改动保持最小、与**当前任务**范围一致。
172
- - 未完成需求/验证对账前,**不要**将任务勾为完成。
173
- - 验证失败或依据不足时,保持 **`- [ ]`**,并明确写出缺口。
174
- - 若任务元数据缺失(需求编号、预期改动路径、完成标准等),在可能范围内于实现前**补全或按 tasks 模板推断**,并在说明中注明。
175
- - 每完成一项任务并记录依据后,**立即**更新勾选并**随即**单独 `git commit`。
176
- - 遇硬阻塞时暂停并说明原因(**不**给出替代命令或排查建议,除非任务/文档已写明);
177
- - 需求不清且无法自洽推断时,**停止执行**并列出需用户提供的材料;**不反问用户**。
178
-
179
- ---
180
-
181
- ## 与规划流程的衔接
182
-
183
- - **`tasks.md`** 须由 **apm-propose**(或等价流程)生成并符合 **`tasks-instruction.md`** 格式(`- [ ]`、元数据子列表等),否则本技能无法可靠追踪。
184
- - 若执行中发现 **`design` / `specs` 与代码严重不一致**:**停止执行**,按上文输出事实与**需用户提供**的决策/信息;**不**建议先改哪类工件、不代用户排优先级。
185
-
186
- ---
187
-
188
- ## 流动工作流
189
-
190
- - **可分段调用**:可在部分任务完成后结束会话,下次同一工作项继续。
191
- - **规划修订**:由用户在**流程外**修订 `design.md` / `specs/` / `tasks.md` 后,再触发本技能;本技能执行中**不因发现不符**而主动改规划文件或提出修改方案。