ai-project-manage-cli 2.0.11 → 2.0.13

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 (103) hide show
  1. package/README.md +6 -6
  2. package/dist/api/cli.d.ts +84 -7
  3. package/dist/api/cli.d.ts.map +1 -1
  4. package/dist/api/client.d.ts +5 -1
  5. package/dist/api/client.d.ts.map +1 -1
  6. package/dist/api/index.d.ts +1 -1
  7. package/dist/api/index.d.ts.map +1 -1
  8. package/dist/api/request-config.d.ts +6 -2
  9. package/dist/api/request-config.d.ts.map +1 -1
  10. package/dist/api/request-config.js +18 -2
  11. package/dist/api/request-config.js.map +1 -1
  12. package/dist/cli/commands/deploy-backend.d.ts +7 -0
  13. package/dist/cli/commands/deploy-backend.d.ts.map +1 -0
  14. package/dist/cli/commands/deploy-backend.js +81 -0
  15. package/dist/cli/commands/deploy-backend.js.map +1 -0
  16. package/dist/cli/commands/deploy-frontend.d.ts +3 -0
  17. package/dist/cli/commands/deploy-frontend.d.ts.map +1 -0
  18. package/dist/cli/commands/deploy-frontend.js +98 -0
  19. package/dist/cli/commands/deploy-frontend.js.map +1 -0
  20. package/dist/cli/commands/get.d.ts.map +1 -1
  21. package/dist/cli/commands/get.js +37 -13
  22. package/dist/cli/commands/get.js.map +1 -1
  23. package/dist/cli/commands/init.js +1 -1
  24. package/dist/cli/commands/publish.d.ts.map +1 -1
  25. package/dist/cli/commands/publish.js +42 -127
  26. package/dist/cli/commands/publish.js.map +1 -1
  27. package/dist/cli/commands/release.d.ts +3 -0
  28. package/dist/cli/commands/release.d.ts.map +1 -0
  29. package/dist/cli/commands/release.js +39 -0
  30. package/dist/cli/commands/release.js.map +1 -0
  31. package/dist/cli/commands/set.d.ts.map +1 -1
  32. package/dist/cli/commands/set.js +0 -8
  33. package/dist/cli/commands/set.js.map +1 -1
  34. package/dist/cli/commands/status.d.ts +3 -0
  35. package/dist/cli/commands/status.d.ts.map +1 -0
  36. package/dist/cli/commands/status.js +44 -0
  37. package/dist/cli/commands/status.js.map +1 -0
  38. package/dist/cli/utils/parse.d.ts +2 -0
  39. package/dist/cli/utils/parse.d.ts.map +1 -0
  40. package/dist/cli/utils/parse.js +12 -0
  41. package/dist/cli/utils/parse.js.map +1 -0
  42. package/dist/cli.js +8 -2
  43. package/dist/cli.js.map +1 -1
  44. package/dist/core/apm-config.d.ts +60 -1
  45. package/dist/core/apm-config.d.ts.map +1 -1
  46. package/dist/core/apm-config.js +111 -3
  47. package/dist/core/apm-config.js.map +1 -1
  48. package/dist/core/backend-deploy/backend-deploy-workflow.d.ts +16 -0
  49. package/dist/core/backend-deploy/backend-deploy-workflow.d.ts.map +1 -0
  50. package/dist/core/backend-deploy/backend-deploy-workflow.js +53 -0
  51. package/dist/core/backend-deploy/backend-deploy-workflow.js.map +1 -0
  52. package/dist/core/backend-deploy/image-tag.d.ts +2 -0
  53. package/dist/core/backend-deploy/image-tag.d.ts.map +1 -0
  54. package/dist/core/backend-deploy/image-tag.js +15 -0
  55. package/dist/core/backend-deploy/image-tag.js.map +1 -0
  56. package/dist/core/backend-deploy/index.d.ts +12 -0
  57. package/dist/core/backend-deploy/index.d.ts.map +1 -0
  58. package/dist/core/backend-deploy/index.js +23 -0
  59. package/dist/core/backend-deploy/index.js.map +1 -0
  60. package/dist/core/backend-deploy/local-docker-build.d.ts +11 -0
  61. package/dist/core/backend-deploy/local-docker-build.d.ts.map +1 -0
  62. package/dist/core/backend-deploy/local-docker-build.js +29 -0
  63. package/dist/core/backend-deploy/local-docker-build.js.map +1 -0
  64. package/dist/core/backend-deploy/registry-login-push.d.ts +14 -0
  65. package/dist/core/backend-deploy/registry-login-push.d.ts.map +1 -0
  66. package/dist/core/backend-deploy/registry-login-push.js +48 -0
  67. package/dist/core/backend-deploy/registry-login-push.js.map +1 -0
  68. package/dist/core/backend-deploy/remote-docker-client.d.ts +11 -0
  69. package/dist/core/backend-deploy/remote-docker-client.d.ts.map +1 -0
  70. package/dist/core/backend-deploy/remote-docker-client.js +33 -0
  71. package/dist/core/backend-deploy/remote-docker-client.js.map +1 -0
  72. package/dist/core/backend-deploy/remote-pull-image.d.ts +9 -0
  73. package/dist/core/backend-deploy/remote-pull-image.d.ts.map +1 -0
  74. package/dist/core/backend-deploy/remote-pull-image.js +39 -0
  75. package/dist/core/backend-deploy/remote-pull-image.js.map +1 -0
  76. package/dist/core/backend-deploy/resolve-dockerfile.d.ts +12 -0
  77. package/dist/core/backend-deploy/resolve-dockerfile.d.ts.map +1 -0
  78. package/dist/core/backend-deploy/resolve-dockerfile.js +33 -0
  79. package/dist/core/backend-deploy/resolve-dockerfile.js.map +1 -0
  80. package/dist/core/backend-deploy/run-docker-cli.d.ts +14 -0
  81. package/dist/core/backend-deploy/run-docker-cli.d.ts.map +1 -0
  82. package/dist/core/backend-deploy/run-docker-cli.js +33 -0
  83. package/dist/core/backend-deploy/run-docker-cli.js.map +1 -0
  84. package/dist/core/backend-deploy/types.d.ts +69 -0
  85. package/dist/core/backend-deploy/types.d.ts.map +1 -0
  86. package/dist/core/backend-deploy/types.js +6 -0
  87. package/dist/core/backend-deploy/types.js.map +1 -0
  88. package/dist/core/branch-name.d.ts +8 -0
  89. package/dist/core/branch-name.d.ts.map +1 -0
  90. package/dist/core/branch-name.js +37 -0
  91. package/dist/core/branch-name.js.map +1 -0
  92. package/dist/core/cursor-cmd.d.ts.map +1 -1
  93. package/dist/core/cursor-cmd.js +2 -1
  94. package/dist/core/cursor-cmd.js.map +1 -1
  95. package/dist/core/minio.d.ts +35 -0
  96. package/dist/core/minio.d.ts.map +1 -0
  97. package/dist/core/minio.js +154 -0
  98. package/dist/core/minio.js.map +1 -0
  99. package/package.json +6 -6
  100. package/templates/skills/apm-apply-change/SKILL.md +1 -1
  101. package/templates/skills/apm-auto-dev/SKILL.md +1 -1
  102. package/templates/skills/apm-fixbug/SKILL.md +53 -115
  103. package/templates/skills/apm-release/SKILL.md +87 -0
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.pullImageOnRemote = pullImageOnRemote;
4
+ /**
5
+ * 在远程 Docker 上拉取镜像(`docker pull` 的 API 等价物),并等待拉取流结束。
6
+ *
7
+ * 私有仓库拉取需在远程引擎侧提供 authconfig(与本地 `docker login` 写入的认证类似)。
8
+ */
9
+ function pullImageOnRemote(docker, imageRef, auth) {
10
+ return new Promise((resolve, reject) => {
11
+ const authConfig = auth
12
+ ? {
13
+ username: auth.username,
14
+ password: auth.password,
15
+ serveraddress: auth.serveraddress,
16
+ }
17
+ : undefined;
18
+ const cb = (err, stream) => {
19
+ if (err) {
20
+ reject(err);
21
+ return;
22
+ }
23
+ if (!stream) {
24
+ reject(new Error("docker pull 未返回流"));
25
+ return;
26
+ }
27
+ docker.modem.followProgress(stream, (progressErr) => {
28
+ if (progressErr) {
29
+ reject(progressErr);
30
+ }
31
+ else {
32
+ resolve();
33
+ }
34
+ });
35
+ };
36
+ docker.pull(imageRef, {}, cb, authConfig);
37
+ });
38
+ }
39
+ //# sourceMappingURL=remote-pull-image.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remote-pull-image.js","sourceRoot":"","sources":["../../../src/core/backend-deploy/remote-pull-image.ts"],"names":[],"mappings":";;AAgBA,8CAqCC;AA1CD;;;;GAIG;AACH,SAAgB,iBAAiB,CAC/B,MAAc,EACd,QAAgB,EAChB,IAA6B;IAE7B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,UAAU,GAA2B,IAAI;YAC7C,CAAC,CAAC;gBACE,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,aAAa,EAAE,IAAI,CAAC,aAAa;aAClC;YACH,CAAC,CAAC,SAAS,CAAC;QAEd,MAAM,EAAE,GAAG,CACT,GAAiB,EACjB,MAAyC,EACzC,EAAE;YACF,IAAI,GAAG,EAAE,CAAC;gBACR,MAAM,CAAC,GAAG,CAAC,CAAC;gBACZ,OAAO;YACT,CAAC;YACD,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,MAAM,CAAC,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC,CAAC;gBACtC,OAAO;YACT,CAAC;YACD,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC,WAAyB,EAAE,EAAE;gBAChE,IAAI,WAAW,EAAE,CAAC;oBAChB,MAAM,CAAC,WAAW,CAAC,CAAC;gBACtB,CAAC;qBAAM,CAAC;oBACN,OAAO,EAAE,CAAC;gBACZ,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC,CAAC;QAEF,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,EAAE,EAAE,EAAE,UAAU,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,12 @@
1
+ import type { BackendDeployParams } from "./types";
2
+ export type ResolvedDockerBuildPaths = {
3
+ dockerfileAbs: string;
4
+ contextAbs: string;
5
+ };
6
+ /**
7
+ * 校验 Dockerfile 与构建上下文路径,并解析为绝对路径。
8
+ *
9
+ * @param cwd - 解析相对路径时的基准目录,一般为 `process.cwd()`
10
+ */
11
+ export declare function resolveDockerBuildPaths(params: Pick<BackendDeployParams, "dockerfilePath" | "contextPath">, cwd: string): ResolvedDockerBuildPaths;
12
+ //# sourceMappingURL=resolve-dockerfile.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve-dockerfile.d.ts","sourceRoot":"","sources":["../../../src/core/backend-deploy/resolve-dockerfile.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAEnD,MAAM,MAAM,wBAAwB,GAAG;IACrC,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,IAAI,CAAC,mBAAmB,EAAE,gBAAgB,GAAG,aAAa,CAAC,EACnE,GAAG,EAAE,MAAM,GACV,wBAAwB,CAqB1B"}
@@ -0,0 +1,33 @@
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.resolveDockerBuildPaths = resolveDockerBuildPaths;
7
+ const node_fs_1 = require("node:fs");
8
+ const node_path_1 = __importDefault(require("node:path"));
9
+ /**
10
+ * 校验 Dockerfile 与构建上下文路径,并解析为绝对路径。
11
+ *
12
+ * @param cwd - 解析相对路径时的基准目录,一般为 `process.cwd()`
13
+ */
14
+ function resolveDockerBuildPaths(params, cwd) {
15
+ const dockerfileAbs = node_path_1.default.resolve(cwd, params.dockerfilePath);
16
+ if (!(0, node_fs_1.existsSync)(dockerfileAbs)) {
17
+ throw new Error(`Dockerfile 不存在:${dockerfileAbs}`);
18
+ }
19
+ if (!(0, node_fs_1.statSync)(dockerfileAbs).isFile()) {
20
+ throw new Error(`路径不是文件(应为 Dockerfile):${dockerfileAbs}`);
21
+ }
22
+ const contextAbs = params.contextPath
23
+ ? node_path_1.default.resolve(cwd, params.contextPath)
24
+ : node_path_1.default.dirname(dockerfileAbs);
25
+ if (!(0, node_fs_1.existsSync)(contextAbs)) {
26
+ throw new Error(`构建上下文目录不存在:${contextAbs}`);
27
+ }
28
+ if (!(0, node_fs_1.statSync)(contextAbs).isDirectory()) {
29
+ throw new Error(`构建上下文不是目录:${contextAbs}`);
30
+ }
31
+ return { dockerfileAbs, contextAbs };
32
+ }
33
+ //# sourceMappingURL=resolve-dockerfile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve-dockerfile.js","sourceRoot":"","sources":["../../../src/core/backend-deploy/resolve-dockerfile.ts"],"names":[],"mappings":";;;;;AAeA,0DAwBC;AAvCD,qCAA+C;AAC/C,0DAA6B;AAS7B;;;;GAIG;AACH,SAAgB,uBAAuB,CACrC,MAAmE,EACnE,GAAW;IAEX,MAAM,aAAa,GAAG,mBAAI,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,cAAc,CAAC,CAAC;IAC/D,IAAI,CAAC,IAAA,oBAAU,EAAC,aAAa,CAAC,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CAAC,kBAAkB,aAAa,EAAE,CAAC,CAAC;IACrD,CAAC;IACD,IAAI,CAAC,IAAA,kBAAQ,EAAC,aAAa,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;QACtC,MAAM,IAAI,KAAK,CAAC,yBAAyB,aAAa,EAAE,CAAC,CAAC;IAC5D,CAAC;IAED,MAAM,UAAU,GAAG,MAAM,CAAC,WAAW;QACnC,CAAC,CAAC,mBAAI,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,WAAW,CAAC;QACvC,CAAC,CAAC,mBAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IAEhC,IAAI,CAAC,IAAA,oBAAU,EAAC,UAAU,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,cAAc,UAAU,EAAE,CAAC,CAAC;IAC9C,CAAC;IACD,IAAI,CAAC,IAAA,kBAAQ,EAAC,UAAU,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;QACxC,MAAM,IAAI,KAAK,CAAC,aAAa,UAAU,EAAE,CAAC,CAAC;IAC7C,CAAC;IAED,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,CAAC;AACvC,CAAC"}
@@ -0,0 +1,14 @@
1
+ export type RunProcessOptions = {
2
+ cwd?: string;
3
+ /** 默认继承当前进程的 stdio,便于在终端看到 docker 输出 */
4
+ stdio?: "inherit" | "pipe";
5
+ };
6
+ /**
7
+ * 执行本地 `docker` CLI(需已安装 Docker Desktop / Engine 且 `docker` 在 PATH 中)。
8
+ */
9
+ export declare function runDockerCli(args: string[], options?: RunProcessOptions): Promise<void>;
10
+ /**
11
+ * 通用子进程封装:非 0 退出码时 reject。
12
+ */
13
+ export declare function runProcess(command: string, args: string[], options?: RunProcessOptions): Promise<void>;
14
+ //# sourceMappingURL=run-docker-cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-docker-cli.d.ts","sourceRoot":"","sources":["../../../src/core/backend-deploy/run-docker-cli.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,iBAAiB,GAAG;IAC9B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,wCAAwC;IACxC,KAAK,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC;CAC5B,CAAC;AAEF;;GAEG;AACH,wBAAgB,YAAY,CAC1B,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,CAAC,EAAE,iBAAiB,GAC1B,OAAO,CAAC,IAAI,CAAC,CAEf;AAED;;GAEG;AACH,wBAAgB,UAAU,CACxB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,CAAC,EAAE,iBAAiB,GAC1B,OAAO,CAAC,IAAI,CAAC,CAqBf"}
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.runDockerCli = runDockerCli;
4
+ exports.runProcess = runProcess;
5
+ const node_child_process_1 = require("node:child_process");
6
+ /**
7
+ * 执行本地 `docker` CLI(需已安装 Docker Desktop / Engine 且 `docker` 在 PATH 中)。
8
+ */
9
+ function runDockerCli(args, options) {
10
+ return runProcess("docker", args, options);
11
+ }
12
+ /**
13
+ * 通用子进程封装:非 0 退出码时 reject。
14
+ */
15
+ function runProcess(command, args, options) {
16
+ return new Promise((resolve, reject) => {
17
+ const child = (0, node_child_process_1.spawn)(command, args, {
18
+ stdio: options?.stdio ?? "inherit",
19
+ shell: false,
20
+ cwd: options?.cwd,
21
+ });
22
+ child.on("error", reject);
23
+ child.on("close", (code, signal) => {
24
+ if (code === 0) {
25
+ resolve();
26
+ return;
27
+ }
28
+ const hint = signal ? `,信号 ${signal}` : "";
29
+ reject(new Error(`命令失败:${command} ${args.join(" ")}(退出码 ${code ?? "?"}${hint})`));
30
+ });
31
+ });
32
+ }
33
+ //# sourceMappingURL=run-docker-cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-docker-cli.js","sourceRoot":"","sources":["../../../src/core/backend-deploy/run-docker-cli.ts"],"names":[],"mappings":";;AAWA,oCAKC;AAKD,gCAyBC;AA9CD,2DAA2C;AAQ3C;;GAEG;AACH,SAAgB,YAAY,CAC1B,IAAc,EACd,OAA2B;IAE3B,OAAO,UAAU,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;AAC7C,CAAC;AAED;;GAEG;AACH,SAAgB,UAAU,CACxB,OAAe,EACf,IAAc,EACd,OAA2B;IAE3B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,KAAK,GAAG,IAAA,0BAAK,EAAC,OAAO,EAAE,IAAI,EAAE;YACjC,KAAK,EAAE,OAAO,EAAE,KAAK,IAAI,SAAS;YAClC,KAAK,EAAE,KAAK;YACZ,GAAG,EAAE,OAAO,EAAE,GAAG;SAClB,CAAC,CAAC;QACH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC1B,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE;YACjC,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;gBACf,OAAO,EAAE,CAAC;gBACV,OAAO;YACT,CAAC;YACD,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,OAAO,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3C,MAAM,CACJ,IAAI,KAAK,CACP,QAAQ,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,IAAI,IAAI,GAAG,GAAG,IAAI,GAAG,CAC/D,CACF,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,69 @@
1
+ /**
2
+ * 后端镜像部署相关类型(后续可由 .apm/apm.config.json 映射注入)。
3
+ */
4
+ /** 阿里云(或其它兼容 Docker Registry V2 的)私有仓库登录信息 */
5
+ export type PrivateRegistryCredentials = {
6
+ /** 仓库主机名,如 registry.cn-hangzhou.aliyuncs.com */
7
+ registryHost: string;
8
+ username: string;
9
+ password: string;
10
+ };
11
+ /**
12
+ * 远程 Docker 守护进程连接参数(通常对应 TLS 的 Docker Host)。
13
+ * 与 dockerode / DockerModem 选项对齐。
14
+ */
15
+ export type RemoteDockerTlsOptions = {
16
+ host: string;
17
+ port: number;
18
+ /** 默认可为 https(TLS),内网无证书场景可用 http */
19
+ protocol?: "https" | "http";
20
+ /** CA 证书文件路径(PEM) */
21
+ caPath?: string;
22
+ /** 客户端证书路径(PEM),与 keyPath 成对使用 */
23
+ certPath?: string;
24
+ /** 客户端私钥路径(PEM) */
25
+ keyPath?: string;
26
+ };
27
+ /**
28
+ * 在远程主机上拉取私有镜像时,传给 docker pull 的认证(与本地 docker login 类似)。
29
+ * serveraddress 一般为 https://{registryHost}
30
+ */
31
+ export type RemotePullRegistryAuth = {
32
+ username: string;
33
+ password: string;
34
+ /** 例如 https://registry.cn-hangzhou.aliyuncs.com */
35
+ serveraddress: string;
36
+ };
37
+ /**
38
+ * 单次后端部署流程的输入:路径、镜像名、仓库与远程连接均由调用方组装(例如来自 CLI 或配置文件)。
39
+ */
40
+ export type BackendDeployParams = {
41
+ /** Dockerfile 路径(相对 cwd 或绝对路径) */
42
+ dockerfilePath: string;
43
+ /**
44
+ * 构建上下文目录;缺省为 Dockerfile 所在目录。
45
+ * 须包含 Dockerfile 中 COPY 所依赖的文件。
46
+ */
47
+ contextPath?: string;
48
+ /**
49
+ * 完整镜像引用(含 tag),如
50
+ * registry.cn-hangzhou.aliyuncs.com/my-ns/my-app:v1.0.0
51
+ */
52
+ imageRef: string;
53
+ registry: PrivateRegistryCredentials;
54
+ remoteDocker: RemoteDockerTlsOptions;
55
+ /**
56
+ * 远程 docker pull 拉取私有镜像时是否需要认证。
57
+ * 若镜像仓库可在远程主机上匿名拉取,可省略。
58
+ */
59
+ remotePullAuth?: RemotePullRegistryAuth;
60
+ };
61
+ export type BackendDeployStep = "resolveDockerfile" | "localBuild" | "registryPush" | "remotePull";
62
+ export type BackendDeployResult = {
63
+ ok: true;
64
+ imageRef: string;
65
+ dockerfileAbs: string;
66
+ contextAbs: string;
67
+ completedSteps: BackendDeployStep[];
68
+ };
69
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/core/backend-deploy/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,8CAA8C;AAC9C,MAAM,MAAM,0BAA0B,GAAG;IACvC,gDAAgD;IAChD,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,sBAAsB,GAAG;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,qCAAqC;IACrC,QAAQ,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAC5B,qBAAqB;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,kCAAkC;IAClC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,mBAAmB;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,sBAAsB,GAAG;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,mDAAmD;IACnD,aAAa,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,mBAAmB,GAAG;IAChC,kCAAkC;IAClC,cAAc,EAAE,MAAM,CAAC;IACvB;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;OAGG;IACH,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,0BAA0B,CAAC;IACrC,YAAY,EAAE,sBAAsB,CAAC;IACrC;;;OAGG;IACH,cAAc,CAAC,EAAE,sBAAsB,CAAC;CACzC,CAAC;AAEF,MAAM,MAAM,iBAAiB,GACzB,mBAAmB,GACnB,YAAY,GACZ,cAAc,GACd,YAAY,CAAC;AAEjB,MAAM,MAAM,mBAAmB,GAAG;IAChC,EAAE,EAAE,IAAI,CAAC;IACT,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,iBAAiB,EAAE,CAAC;CACrC,CAAC"}
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ /**
3
+ * 后端镜像部署相关类型(后续可由 .apm/apm.config.json 映射注入)。
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/core/backend-deploy/types.ts"],"names":[],"mappings":";AAAA;;GAEG"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * 与 `deploy-frontend` / `deploy-backend` 共享:从位置参数解析「分支名片段」及 `--env` 环境标签。
3
+ */
4
+ export declare function sanitizeBranchName(raw: string): string;
5
+ export declare function normalizeBranchName(raw: string): string;
6
+ /** `--env` 默认含逗号时取第一段作为标签(如「测试环境」) */
7
+ export declare function resolveEnvTag(raw: string): string;
8
+ //# sourceMappingURL=branch-name.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"branch-name.d.ts","sourceRoot":"","sources":["../../src/core/branch-name.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAUtD;AAED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAMvD;AAED,sCAAsC;AACtC,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAMjD"}
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ /**
3
+ * 与 `deploy-frontend` / `deploy-backend` 共享:从位置参数解析「分支名片段」及 `--env` 环境标签。
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.sanitizeBranchName = sanitizeBranchName;
7
+ exports.normalizeBranchName = normalizeBranchName;
8
+ exports.resolveEnvTag = resolveEnvTag;
9
+ function sanitizeBranchName(raw) {
10
+ const normalized = raw.replace(/\\/g, "/").replace(/^\/+/, "").trim();
11
+ if (!normalized) {
12
+ throw new Error("branchName 不能为空");
13
+ }
14
+ const segs = normalized.split("/");
15
+ if (segs.some((s) => s === "" || s === "." || s === "..")) {
16
+ throw new Error("branchName 非法");
17
+ }
18
+ return segs[segs.length - 1] ?? "";
19
+ }
20
+ function normalizeBranchName(raw) {
21
+ const normalized = raw.trim().replace(/\\/g, "/").replace(/^\/+/, "");
22
+ if (!normalized)
23
+ return "";
24
+ const segs = normalized.split("/");
25
+ if (segs.some((s) => s === "" || s === "." || s === ".."))
26
+ return "";
27
+ return segs[segs.length - 1] ?? "";
28
+ }
29
+ /** `--env` 默认含逗号时取第一段作为标签(如「测试环境」) */
30
+ function resolveEnvTag(raw) {
31
+ const parts = raw
32
+ .split(",")
33
+ .map((s) => s.trim())
34
+ .filter((s) => s.length > 0);
35
+ return parts[0] ?? "测试环境";
36
+ }
37
+ //# sourceMappingURL=branch-name.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"branch-name.js","sourceRoot":"","sources":["../../src/core/branch-name.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAEH,gDAUC;AAED,kDAMC;AAGD,sCAMC;AA3BD,SAAgB,kBAAkB,CAAC,GAAW;IAC5C,MAAM,UAAU,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACtE,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;IACrC,CAAC;IACD,MAAM,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACnC,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,CAAC,EAAE,CAAC;QAC1D,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,CAAC;IACnC,CAAC;IACD,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;AACrC,CAAC;AAED,SAAgB,mBAAmB,CAAC,GAAW;IAC7C,MAAM,UAAU,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACtE,IAAI,CAAC,UAAU;QAAE,OAAO,EAAE,CAAC;IAC3B,MAAM,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACnC,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,CAAC;QAAE,OAAO,EAAE,CAAC;IACrE,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;AACrC,CAAC;AAED,sCAAsC;AACtC,SAAgB,aAAa,CAAC,GAAW;IACvC,MAAM,KAAK,GAAG,GAAG;SACd,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;SACpB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC/B,OAAO,KAAK,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC;AAC5B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"cursor-cmd.d.ts","sourceRoot":"","sources":["../../src/core/cursor-cmd.ts"],"names":[],"mappings":"AASA,MAAM,MAAM,gBAAgB,GAAG;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IAEd,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,qBAAa,SAAS;IACpB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,KAAK,CAAC,CAAS;IACvB,OAAO,CAAC,MAAM,CAAC,CAAS;IACxB,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,KAAK,CAAS;gBAEV,OAAO,EAAE,gBAAgB;IAW/B,OAAO;IAab,OAAO,CAAC,SAAS;YAwBH,SAAS;IA4BvB,OAAO,CAAC,UAAU;IAkClB,OAAO,CAAC,WAAW;IAiBnB,OAAO,CAAC,eAAe;YAgBT,MAAM;YAUN,YAAY;YAiBZ,WAAW;CAM1B"}
1
+ {"version":3,"file":"cursor-cmd.d.ts","sourceRoot":"","sources":["../../src/core/cursor-cmd.ts"],"names":[],"mappings":"AASA,MAAM,MAAM,gBAAgB,GAAG;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IAEd,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,qBAAa,SAAS;IACpB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,KAAK,CAAC,CAAS;IACvB,OAAO,CAAC,MAAM,CAAC,CAAS;IACxB,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,KAAK,CAAS;gBAEV,OAAO,EAAE,gBAAgB;IAW/B,OAAO;IAab,OAAO,CAAC,SAAS;YAwBH,SAAS;IA4BvB,OAAO,CAAC,UAAU;IAkClB,OAAO,CAAC,WAAW;IAgBnB,OAAO,CAAC,eAAe;YAgBT,MAAM;YAUN,YAAY;YAmBZ,WAAW;CAM1B"}
@@ -112,7 +112,6 @@ class CursorCmd {
112
112
  return chatId;
113
113
  }
114
114
  execCommand(command, args) {
115
- console.log("执行 cursor 命令", command, args);
116
115
  const isWin = process.platform === "win32";
117
116
  if (isWin) {
118
117
  return (0, node_child_process_1.spawn)("cmd.exe", ["/d", "/s", "/c", command, ...args], {
@@ -156,6 +155,8 @@ class CursorCmd {
156
155
  "/prd-review": "REVIEWING",
157
156
  "/prd-sync": "POLISHING",
158
157
  "/prd-testcase": "GENERATING_TEST_CASE",
158
+ "/apm-auto-dev": "DEVELOPING",
159
+ "/apm-fixbug": "FIXING_DEFECT",
159
160
  };
160
161
  const status = statusMap[this.name];
161
162
  if (!status) {
@@ -1 +1 @@
1
- {"version":3,"file":"cursor-cmd.js","sourceRoot":"","sources":["../../src/core/cursor-cmd.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cursor-cmd.js","sourceRoot":"","sources":["../../src/core/cursor-cmd.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ export type MinioClientOptions = {
2
+ endPoint: string;
3
+ port: number;
4
+ useSSL: boolean;
5
+ accessKey: string;
6
+ secretKey: string;
7
+ };
8
+ export type ArtifactFile = {
9
+ absPath: string;
10
+ relativePath: string;
11
+ size: number;
12
+ };
13
+ export declare const MIME_BY_EXT: Record<string, string>;
14
+ export declare const DEFAULT_MAX_FILE_SIZE_MB = 100;
15
+ export declare function sanitizeRelativePath(raw: string): string;
16
+ export declare function toArtifactObjectKey(input: {
17
+ branchName: string;
18
+ relativePath: string;
19
+ }): string;
20
+ export declare function isDirectoryPath(absPath: string): Promise<boolean>;
21
+ export declare function readArtifactFile(absPath: string): Promise<Buffer>;
22
+ export declare function collectFiles(rootDir: string): Promise<ArtifactFile[]>;
23
+ export declare function detectMimeType(filePath: string): string;
24
+ export declare function toMB(bytes: number): string;
25
+ export declare class MinioClient {
26
+ private readonly client;
27
+ constructor(options: MinioClientOptions);
28
+ ensureBucket(bucket: string): Promise<void>;
29
+ deleteObjectsByPrefix(bucket: string, prefix: string): Promise<void>;
30
+ putObject(bucket: string, objectKey: string, data: Buffer, meta?: {
31
+ "Content-Type"?: string;
32
+ }): Promise<void>;
33
+ setBucketPublicRead(bucket: string): Promise<void>;
34
+ }
35
+ //# sourceMappingURL=minio.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"minio.d.ts","sourceRoot":"","sources":["../../src/core/minio.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,kBAAkB,GAAG;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAkB9C,CAAC;AAEF,eAAO,MAAM,wBAAwB,MAAM,CAAC;AAE5C,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAUxD;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE;IACzC,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;CACtB,GAAG,MAAM,CAIT;AAED,wBAAsB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAOvE;AAED,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAEvE;AAED,wBAAsB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAK3E;AAqBD,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAGvD;AAED,wBAAgB,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE1C;AAwBD,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;gBAEpB,OAAO,EAAE,kBAAkB;IAUjC,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAO3C,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA0BpE,SAAS,CACb,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE;QAAE,cAAc,CAAC,EAAE,MAAM,CAAA;KAAE,GACjC,OAAO,CAAC,IAAI,CAAC;IAIV,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAGzD"}
@@ -0,0 +1,154 @@
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
+ return `${input.branchName}/dist/${input.relativePath}`
50
+ .replace(/\/+/g, "/")
51
+ .replace(/^\//, "");
52
+ }
53
+ async function isDirectoryPath(absPath) {
54
+ try {
55
+ const st = await (0, promises_1.stat)(absPath);
56
+ return st.isDirectory();
57
+ }
58
+ catch {
59
+ return false;
60
+ }
61
+ }
62
+ async function readArtifactFile(absPath) {
63
+ return (0, promises_1.readFile)(absPath);
64
+ }
65
+ async function collectFiles(rootDir) {
66
+ const out = [];
67
+ await walk(rootDir, rootDir, out);
68
+ out.sort((a, b) => a.relativePath.localeCompare(b.relativePath));
69
+ return out;
70
+ }
71
+ async function walk(rootDir, currentDir, out) {
72
+ const entries = await (0, promises_1.readdir)(currentDir, { withFileTypes: true });
73
+ for (const ent of entries) {
74
+ const absPath = node_path_1.default.join(currentDir, ent.name);
75
+ if (ent.isDirectory()) {
76
+ await walk(rootDir, absPath, out);
77
+ continue;
78
+ }
79
+ if (!ent.isFile())
80
+ continue;
81
+ const st = await (0, promises_1.stat)(absPath);
82
+ const rel = node_path_1.default.relative(rootDir, absPath).split(node_path_1.default.sep).join("/");
83
+ out.push({ absPath, relativePath: rel, size: st.size });
84
+ }
85
+ }
86
+ function detectMimeType(filePath) {
87
+ const ext = node_path_1.default.extname(filePath).toLowerCase();
88
+ return exports.MIME_BY_EXT[ext] || "application/octet-stream";
89
+ }
90
+ function toMB(bytes) {
91
+ return (bytes / 1024 / 1024).toFixed(2);
92
+ }
93
+ /**
94
+ * minio 默认 listObjectsV2 每页最多 1000 条,单页 XML 在 fast-xml-parser 中会触发
95
+ * Entity expansion limit exceeded。用 listObjectsV2Query 缩小每页条数并分页列举。
96
+ */
97
+ const LIST_OBJECTS_PAGE_MAX_KEYS = 500;
98
+ /** 匿名可读桶内所有对象(仅 s3:GetObject),用于路径直链 */
99
+ function buildPublicReadPolicy(bucket) {
100
+ const policy = {
101
+ Version: "2012-10-17",
102
+ Statement: [
103
+ {
104
+ Effect: "Allow",
105
+ Principal: { AWS: ["*"] },
106
+ Action: ["s3:GetObject"],
107
+ Resource: [`arn:aws:s3:::${bucket}/*`],
108
+ },
109
+ ],
110
+ };
111
+ return JSON.stringify(policy);
112
+ }
113
+ class MinioClient {
114
+ client;
115
+ constructor(options) {
116
+ this.client = new minio_1.Client({
117
+ endPoint: options.endPoint,
118
+ port: options.port,
119
+ useSSL: options.useSSL,
120
+ accessKey: options.accessKey,
121
+ secretKey: options.secretKey,
122
+ });
123
+ }
124
+ async ensureBucket(bucket) {
125
+ const exists = await this.client.bucketExists(bucket);
126
+ if (!exists) {
127
+ await this.client.makeBucket(bucket);
128
+ }
129
+ }
130
+ async deleteObjectsByPrefix(bucket, prefix) {
131
+ let continuationToken = "";
132
+ const removeBatchSize = 1000;
133
+ for (;;) {
134
+ const result = await this.client.listObjectsV2Query(bucket, prefix, continuationToken, "", LIST_OBJECTS_PAGE_MAX_KEYS, "");
135
+ const keys = result.objects
136
+ .map((obj) => ("name" in obj && obj.name ? obj.name.trim() : ""))
137
+ .filter((name) => name.length > 0);
138
+ for (let i = 0; i < keys.length; i += removeBatchSize) {
139
+ await this.client.removeObjects(bucket, keys.slice(i, i + removeBatchSize));
140
+ }
141
+ if (!result.isTruncated)
142
+ break;
143
+ continuationToken = result.nextContinuationToken ?? "";
144
+ }
145
+ }
146
+ async putObject(bucket, objectKey, data, meta) {
147
+ await this.client.putObject(bucket, objectKey, data, data.length, meta);
148
+ }
149
+ async setBucketPublicRead(bucket) {
150
+ await this.client.setBucketPolicy(bucket, buildPublicReadPolicy(bucket));
151
+ }
152
+ }
153
+ exports.MinioClient = MinioClient;
154
+ //# sourceMappingURL=minio.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"minio.js","sourceRoot":"","sources":["../../src/core/minio.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ai-project-manage-cli",
3
- "version": "2.0.11",
3
+ "version": "2.0.13",
4
4
  "private": false,
5
5
  "description": "AI 项目管理 CLI 工具,结合飞书项目实现AI项目开发工作流",
6
6
  "main": "./dist/index.js",
@@ -27,11 +27,9 @@
27
27
  "apm:login": "node ./dist/cli.js login",
28
28
  "apm:config:get-base-url": "node ./dist/cli.js config get base-url",
29
29
  "apm:init": "node ./dist/cli.js init",
30
- "apm:publish:test": "cd ../.. && node packages/cli/dist/cli.js publish cli-publish-test --dir packages/cli/dist",
31
30
  "apm:comment:help": "node ./dist/cli.js comment --help",
32
31
  "apm:comment:update": "node ./dist/cli.js comment update",
33
32
  "apm:comment:process": "node ./dist/cli.js comment process",
34
- "apm:set:pending-test": "node ./dist/cli.js set pendingTest",
35
33
  "apm:requirement:help": "node ./dist/cli.js requirement --help",
36
34
  "apm:requirement:test-case:import": "node ./dist/cli.js requirement test-case import",
37
35
  "apm:requirement:branch:set-status": "node ./dist/cli.js requirement branch set-status",
@@ -42,11 +40,13 @@
42
40
  "commander": "^13.1.0",
43
41
  "listpage-http": "0.0.316",
44
42
  "ws": "~8.20.0",
45
- "minio": "~8.0.7"
43
+ "minio": "~8.0.7",
44
+ "dockerode": "~4.0.10"
46
45
  },
47
46
  "devDependencies": {
48
47
  "@types/node": "^22.10.7",
49
48
  "typescript": "~5.7.3",
50
- "@types/ws": "~8.18.1"
49
+ "@types/ws": "~8.18.1",
50
+ "@types/dockerode": "~4.0.1"
51
51
  }
52
- }
52
+ }
@@ -5,7 +5,7 @@ description: 在 .apm/workitems/<requirementId>/ 按 tasks.md 逐项实现、勾
5
5
 
6
6
  # APM 工作项:按任务实现
7
7
 
8
- 根据工作项目录下的 **`tasks.md`** 驱动实现:**读规划 → 做代码 → 对账元数据 → 勾选 → 单独 commit**,直至全部完成或遇硬阻塞。不依赖 OpenSpec CLI;上下文以 **`.apm/workitems/<requirementId>/`** 内文件为准。
8
+ 根据工作项目录下的 **`tasks.md`** 驱动实现:**读规划 → 做代码 → 对账元数据 → 勾选 → 单独 commit**,直至全部完成或遇硬阻塞;上下文以 **`.apm/workitems/<requirementId>/`** 内文件为准。
9
9
 
10
10
  ---
11
11
 
@@ -127,7 +127,7 @@ description: 从创建分支到需求的开发的完整流程,当用户明确
127
127
  ## 步骤 8 — 子 Agent:部署&同步状态
128
128
 
129
129
  1. 调用技能 `code-deploy` 部署到测试环境
130
- 2. 执行CLI命令更新需求状态 `apm set pendingTest <需求ID>`
130
+ 2. 执行CLI命令更新需求状态 `apm status requirement <需求ID>`
131
131
  ---
132
132
 
133
133
  ## 主 Agent 汇总输出