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,159 +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.MinioClient = exports.DEFAULT_MAX_FILE_SIZE_MB = exports.MIME_BY_EXT = void 0;
7
- exports.sanitizeRelativePath = sanitizeRelativePath;
8
- exports.toArtifactObjectKey = toArtifactObjectKey;
9
- exports.isDirectoryPath = isDirectoryPath;
10
- exports.readArtifactFile = readArtifactFile;
11
- exports.collectFiles = collectFiles;
12
- exports.detectMimeType = detectMimeType;
13
- exports.toMB = toMB;
14
- const promises_1 = require("node:fs/promises");
15
- const node_path_1 = __importDefault(require("node:path"));
16
- const minio_1 = require("minio");
17
- exports.MIME_BY_EXT = {
18
- ".html": "text/html; charset=utf-8",
19
- ".js": "application/javascript; charset=utf-8",
20
- ".mjs": "application/javascript; charset=utf-8",
21
- ".css": "text/css; charset=utf-8",
22
- ".json": "application/json; charset=utf-8",
23
- ".map": "application/json; charset=utf-8",
24
- ".txt": "text/plain; charset=utf-8",
25
- ".svg": "image/svg+xml",
26
- ".png": "image/png",
27
- ".jpg": "image/jpeg",
28
- ".jpeg": "image/jpeg",
29
- ".webp": "image/webp",
30
- ".gif": "image/gif",
31
- ".ico": "image/x-icon",
32
- ".woff": "font/woff",
33
- ".woff2": "font/woff2",
34
- ".ttf": "font/ttf",
35
- };
36
- exports.DEFAULT_MAX_FILE_SIZE_MB = 100;
37
- function sanitizeRelativePath(raw) {
38
- const normalized = raw.replace(/\\/g, "/").replace(/^\/+/, "").trim();
39
- if (!normalized) {
40
- throw new Error("relativePath 不能为空");
41
- }
42
- const segs = normalized.split("/");
43
- if (segs.some((s) => s === "" || s === "." || s === "..")) {
44
- throw new Error("relativePath 非法");
45
- }
46
- return segs.join("/");
47
- }
48
- function toArtifactObjectKey(input) {
49
- const base = `${input.branchName}/dist/${input.relativePath}`
50
- .replace(/\/+/g, "/")
51
- .replace(/^\//, "");
52
- const prefix = (input.namePrefix ?? "").trim().replace(/^\/+|\/+$/g, "");
53
- if (!prefix) {
54
- return base;
55
- }
56
- return `${prefix}/${base}`.replace(/\/+/g, "/");
57
- }
58
- async function isDirectoryPath(absPath) {
59
- try {
60
- const st = await (0, promises_1.stat)(absPath);
61
- return st.isDirectory();
62
- }
63
- catch {
64
- return false;
65
- }
66
- }
67
- async function readArtifactFile(absPath) {
68
- return (0, promises_1.readFile)(absPath);
69
- }
70
- async function collectFiles(rootDir) {
71
- const out = [];
72
- await walk(rootDir, rootDir, out);
73
- out.sort((a, b) => a.relativePath.localeCompare(b.relativePath));
74
- return out;
75
- }
76
- async function walk(rootDir, currentDir, out) {
77
- const entries = await (0, promises_1.readdir)(currentDir, { withFileTypes: true });
78
- for (const ent of entries) {
79
- const absPath = node_path_1.default.join(currentDir, ent.name);
80
- if (ent.isDirectory()) {
81
- await walk(rootDir, absPath, out);
82
- continue;
83
- }
84
- if (!ent.isFile())
85
- continue;
86
- const st = await (0, promises_1.stat)(absPath);
87
- const rel = node_path_1.default.relative(rootDir, absPath).split(node_path_1.default.sep).join("/");
88
- out.push({ absPath, relativePath: rel, size: st.size });
89
- }
90
- }
91
- function detectMimeType(filePath) {
92
- const ext = node_path_1.default.extname(filePath).toLowerCase();
93
- return exports.MIME_BY_EXT[ext] || "application/octet-stream";
94
- }
95
- function toMB(bytes) {
96
- return (bytes / 1024 / 1024).toFixed(2);
97
- }
98
- /**
99
- * minio 默认 listObjectsV2 每页最多 1000 条,单页 XML 在 fast-xml-parser 中会触发
100
- * Entity expansion limit exceeded。用 listObjectsV2Query 缩小每页条数并分页列举。
101
- */
102
- const LIST_OBJECTS_PAGE_MAX_KEYS = 500;
103
- /** 匿名可读桶内所有对象(仅 s3:GetObject),用于路径直链 */
104
- function buildPublicReadPolicy(bucket) {
105
- const policy = {
106
- Version: "2012-10-17",
107
- Statement: [
108
- {
109
- Effect: "Allow",
110
- Principal: { AWS: ["*"] },
111
- Action: ["s3:GetObject"],
112
- Resource: [`arn:aws:s3:::${bucket}/*`],
113
- },
114
- ],
115
- };
116
- return JSON.stringify(policy);
117
- }
118
- class MinioClient {
119
- client;
120
- constructor(options) {
121
- this.client = new minio_1.Client({
122
- endPoint: options.endPoint,
123
- port: options.port,
124
- useSSL: options.useSSL,
125
- accessKey: options.accessKey,
126
- secretKey: options.secretKey,
127
- });
128
- }
129
- async ensureBucket(bucket) {
130
- const exists = await this.client.bucketExists(bucket);
131
- if (!exists) {
132
- await this.client.makeBucket(bucket);
133
- }
134
- }
135
- async deleteObjectsByPrefix(bucket, prefix) {
136
- let continuationToken = "";
137
- const removeBatchSize = 1000;
138
- for (;;) {
139
- const result = await this.client.listObjectsV2Query(bucket, prefix, continuationToken, "", LIST_OBJECTS_PAGE_MAX_KEYS, "");
140
- const keys = result.objects
141
- .map((obj) => ("name" in obj && obj.name ? obj.name.trim() : ""))
142
- .filter((name) => name.length > 0);
143
- for (let i = 0; i < keys.length; i += removeBatchSize) {
144
- await this.client.removeObjects(bucket, keys.slice(i, i + removeBatchSize));
145
- }
146
- if (!result.isTruncated)
147
- break;
148
- continuationToken = result.nextContinuationToken ?? "";
149
- }
150
- }
151
- async putObject(bucket, objectKey, data, meta) {
152
- await this.client.putObject(bucket, objectKey, data, data.length, meta);
153
- }
154
- async setBucketPublicRead(bucket) {
155
- await this.client.setBucketPolicy(bucket, buildPublicReadPolicy(bucket));
156
- }
157
- }
158
- exports.MinioClient = MinioClient;
159
- //# sourceMappingURL=minio.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"minio.js","sourceRoot":"","sources":["../../src/core/minio.ts"],"names":[],"mappings":"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"}
@@ -1,17 +0,0 @@
1
- /**
2
- * 解析 `.apm/workitems/<id>/testcase.md`
3
- * 格式由 prd-testcase 技能产出,见 `templates/skills/prd-testcase/reference.md`:
4
- * - 文首 `# 测试用例`,正文仅 `### 优先级:标题(TC-xxx)` 平铺
5
- * - 每块内固定顺序:可选「测试类型 / 数据依赖」→「操作步骤」→「预期结果」
6
- * - 文末可追加 `## 覆盖校验`(技能强制),导入时应忽略
7
- */
8
- export type ParsedTestCaseItem = {
9
- title: string;
10
- steps: string;
11
- expectedResult?: string;
12
- };
13
- /**
14
- * 将 testcase.md 正文解析为可提交给后端的 items。
15
- */
16
- export declare function parseTestcaseMarkdown(md: string): ParsedTestCaseItem[];
17
- //# sourceMappingURL=parse-testcase-md.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"parse-testcase-md.d.ts","sourceRoot":"","sources":["../../src/core/parse-testcase-md.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,MAAM,kBAAkB,GAAG;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AAwCF;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,MAAM,GAAG,kBAAkB,EAAE,CA0CtE"}
@@ -1,79 +0,0 @@
1
- "use strict";
2
- /**
3
- * 解析 `.apm/workitems/<id>/testcase.md`
4
- * 格式由 prd-testcase 技能产出,见 `templates/skills/prd-testcase/reference.md`:
5
- * - 文首 `# 测试用例`,正文仅 `### 优先级:标题(TC-xxx)` 平铺
6
- * - 每块内固定顺序:可选「测试类型 / 数据依赖」→「操作步骤」→「预期结果」
7
- * - 文末可追加 `## 覆盖校验`(技能强制),导入时应忽略
8
- */
9
- Object.defineProperty(exports, "__esModule", { value: true });
10
- exports.parseTestcaseMarkdown = parseTestcaseMarkdown;
11
- function normalizeNewlines(md) {
12
- return md.replace(/\r\n/g, "\n");
13
- }
14
- /** 技能在文末追加的覆盖矩阵小节,其中含 `###`,若不截断会误解析为用例 */
15
- function stripCoverageTail(md) {
16
- const m = md.match(/\n##\s+覆盖校验\b/);
17
- if (!m || m.index === undefined) {
18
- return md;
19
- }
20
- return md.slice(0, m.index).trim();
21
- }
22
- /** 仅识别「用例行」:`### P0: xxx(TC-001)`,避免误把覆盖矩阵里的 `###` 当用例 */
23
- function isTestCaseHeadingLine(line) {
24
- const t = line.replace(/^###\s+/, "").trim();
25
- return /\(TC-\d+\)\s*$/.test(t);
26
- }
27
- /**
28
- * 技能约定:块内必有 `- 操作步骤:`,`- 预期结果:` 紧随其后;二者正文均为缩进编号列表。
29
- * 用固定分隔符切分即可,无需通用 Markdown 解析。
30
- */
31
- function parseCaseBlockBody(body) {
32
- const stepsM = body.match(/- 操作步骤[::]\s*\n([\s\S]*?)(?=\n- 预期结果[::])/);
33
- const expectM = body.match(/- 预期结果[::]\s*\n([\s\S]*)/);
34
- const steps = stepsM?.[1]?.trim() ?? "";
35
- const expected = expectM?.[1]?.trim();
36
- return {
37
- steps,
38
- expected: expected || undefined,
39
- };
40
- }
41
- /**
42
- * 将 testcase.md 正文解析为可提交给后端的 items。
43
- */
44
- function parseTestcaseMarkdown(md) {
45
- const text = normalizeNewlines(md).trim();
46
- if (!text) {
47
- throw new Error("testcase.md 内容为空");
48
- }
49
- const withoutTail = stripCoverageTail(text);
50
- const chunks = withoutTail.split(/\n(?=### )/);
51
- const items = [];
52
- for (const chunk of chunks) {
53
- const block = chunk.trim();
54
- if (!block.startsWith("###")) {
55
- continue;
56
- }
57
- const lines = block.split("\n");
58
- const head = lines[0];
59
- if (!isTestCaseHeadingLine(head)) {
60
- continue;
61
- }
62
- const title = head.replace(/^###\s+/, "").trim();
63
- const body = lines.slice(1).join("\n");
64
- const { steps, expected } = parseCaseBlockBody(body);
65
- if (!steps) {
66
- throw new Error(`用例「${title}」缺少「操作步骤」段落`);
67
- }
68
- items.push({
69
- title,
70
- steps,
71
- expectedResult: expected,
72
- });
73
- }
74
- if (items.length === 0) {
75
- throw new Error("未解析到任何用例:请确认正文为「### 优先级:标题(TC-xxx)」且含「操作步骤」");
76
- }
77
- return items;
78
- }
79
- //# sourceMappingURL=parse-testcase-md.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"parse-testcase-md.js","sourceRoot":"","sources":["../../src/core/parse-testcase-md.ts"],"names":[],"mappings":"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"}
@@ -1,25 +0,0 @@
1
- export declare class StdoutEventHandler {
2
- private onChunk;
3
- cacheText: string;
4
- constructor(onChunk: (chunk: any) => void);
5
- onData: (chunk: Buffer) => void;
6
- onEnd: () => void;
7
- private log;
8
- }
9
- export declare class StderrEventHandler {
10
- private onChunk;
11
- private stderrDecoder;
12
- constructor(onChunk: (chunk: any) => void);
13
- onData: (chunk: Buffer) => void;
14
- onEnd: () => void;
15
- private log;
16
- }
17
- export declare class ChildProcessEventHandler {
18
- private command;
19
- private onChunk;
20
- private errorMessage;
21
- constructor(command: string, onChunk: (chunk: any) => void);
22
- onClose: (code: number, signal: string) => void;
23
- onError: (err: Error) => void;
24
- }
25
- //# sourceMappingURL=std-event-handler.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"std-event-handler.d.ts","sourceRoot":"","sources":["../../src/core/std-event-handler.ts"],"names":[],"mappings":"AAGA,qBAAa,kBAAkB;IAGjB,OAAO,CAAC,OAAO;IAF3B,SAAS,EAAE,MAAM,CAAM;gBAEH,OAAO,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI;IAEjD,MAAM,UAAW,MAAM,UAerB;IAEF,KAAK,aAOH;IAEF,OAAO,CAAC,GAAG;CAGZ;AAED,qBAAa,kBAAkB;IAGjB,OAAO,CAAC,OAAO;IAF3B,OAAO,CAAC,aAAa,CAAgB;gBAEjB,OAAO,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI;IAKjD,MAAM,UAAW,MAAM,UAMrB;IAEF,KAAK,aAKH;IAEF,OAAO,CAAC,GAAG;CAGZ;AAED,qBAAa,wBAAwB;IAEvB,OAAO,CAAC,OAAO;IAAU,OAAO,CAAC,OAAO;IADpD,OAAO,CAAC,YAAY,CAAc;gBACd,OAAO,EAAE,MAAM,EAAU,OAAO,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI;IAE1E,OAAO,SAAU,MAAM,UAAU,MAAM,UAMrC;IAEF,OAAO,QAAS,KAAK,UAOnB;CACH"}
@@ -1,90 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ChildProcessEventHandler = exports.StderrEventHandler = exports.StdoutEventHandler = void 0;
4
- const node_string_decoder_1 = require("node:string_decoder");
5
- const utils_1 = require("./utils");
6
- class StdoutEventHandler {
7
- onChunk;
8
- cacheText = "";
9
- constructor(onChunk) {
10
- this.onChunk = onChunk;
11
- }
12
- onData = (chunk) => {
13
- const text = String(chunk);
14
- // 输出到控制台
15
- this.log(text);
16
- this.cacheText += text;
17
- let idx;
18
- while ((idx = this.cacheText.indexOf("\n")) !== -1) {
19
- const line = this.cacheText.slice(0, idx);
20
- this.cacheText = this.cacheText.slice(idx + 1);
21
- const ev = (0, utils_1.parseNdjsonLine)(line);
22
- if (ev !== null) {
23
- this.onChunk(ev);
24
- }
25
- }
26
- };
27
- onEnd = () => {
28
- const rest = this.cacheText;
29
- this.cacheText = "";
30
- const ev = (0, utils_1.parseNdjsonLine)(rest);
31
- if (ev !== null) {
32
- this.onChunk(ev);
33
- }
34
- };
35
- log(text) {
36
- process.stdout.write(text);
37
- }
38
- }
39
- exports.StdoutEventHandler = StdoutEventHandler;
40
- class StderrEventHandler {
41
- onChunk;
42
- stderrDecoder;
43
- constructor(onChunk) {
44
- this.onChunk = onChunk;
45
- const stderrDecoder = new node_string_decoder_1.StringDecoder("utf8");
46
- this.stderrDecoder = stderrDecoder;
47
- }
48
- onData = (chunk) => {
49
- const text = this.stderrDecoder.write(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));
50
- this.log(text);
51
- this.onChunk(text);
52
- };
53
- onEnd = () => {
54
- const tail = this.stderrDecoder.end();
55
- if (!tail)
56
- return;
57
- this.log(tail);
58
- this.onChunk(tail);
59
- };
60
- log(text) {
61
- process.stderr.write(text);
62
- }
63
- }
64
- exports.StderrEventHandler = StderrEventHandler;
65
- class ChildProcessEventHandler {
66
- command;
67
- onChunk;
68
- errorMessage = "";
69
- constructor(command, onChunk) {
70
- this.command = command;
71
- this.onChunk = onChunk;
72
- }
73
- onClose = (code, signal) => {
74
- if (this.errorMessage) {
75
- console.error(`[${this.command}]执行出错: ${this.errorMessage}`);
76
- return;
77
- }
78
- console.log(`[${this.command}]执行结束, ${code} ${signal}`);
79
- };
80
- onError = (err) => {
81
- this.errorMessage = err.message;
82
- this.onChunk({
83
- type: "error",
84
- message: err.message,
85
- at: new Date().toISOString(),
86
- });
87
- };
88
- }
89
- exports.ChildProcessEventHandler = ChildProcessEventHandler;
90
- //# sourceMappingURL=std-event-handler.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"std-event-handler.js","sourceRoot":"","sources":["../../src/core/std-event-handler.ts"],"names":[],"mappings":"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"}
@@ -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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"}