ai-project-manage-cli 2.0.12 → 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 (91) hide show
  1. package/README.md +6 -6
  2. package/dist/api/cli.d.ts +62 -1
  3. package/dist/api/cli.d.ts.map +1 -1
  4. package/dist/api/client.d.ts +3 -0
  5. package/dist/api/client.d.ts.map +1 -1
  6. package/dist/api/request-config.d.ts +4 -1
  7. package/dist/api/request-config.d.ts.map +1 -1
  8. package/dist/api/request-config.js +12 -0
  9. package/dist/api/request-config.js.map +1 -1
  10. package/dist/cli/commands/deploy-backend.d.ts +7 -0
  11. package/dist/cli/commands/deploy-backend.d.ts.map +1 -0
  12. package/dist/cli/commands/deploy-backend.js +81 -0
  13. package/dist/cli/commands/deploy-backend.js.map +1 -0
  14. package/dist/cli/commands/deploy-frontend.d.ts +3 -0
  15. package/dist/cli/commands/deploy-frontend.d.ts.map +1 -0
  16. package/dist/cli/commands/deploy-frontend.js +98 -0
  17. package/dist/cli/commands/deploy-frontend.js.map +1 -0
  18. package/dist/cli/commands/get.d.ts.map +1 -1
  19. package/dist/cli/commands/get.js +1 -1
  20. package/dist/cli/commands/get.js.map +1 -1
  21. package/dist/cli/commands/init.js +1 -1
  22. package/dist/cli/commands/publish.d.ts.map +1 -1
  23. package/dist/cli/commands/publish.js +42 -127
  24. package/dist/cli/commands/publish.js.map +1 -1
  25. package/dist/cli/commands/release.d.ts +3 -0
  26. package/dist/cli/commands/release.d.ts.map +1 -0
  27. package/dist/cli/commands/release.js +39 -0
  28. package/dist/cli/commands/release.js.map +1 -0
  29. package/dist/cli/utils/parse.d.ts +2 -0
  30. package/dist/cli/utils/parse.d.ts.map +1 -0
  31. package/dist/cli/utils/parse.js +12 -0
  32. package/dist/cli/utils/parse.js.map +1 -0
  33. package/dist/cli.js +6 -2
  34. package/dist/cli.js.map +1 -1
  35. package/dist/core/apm-config.d.ts +60 -1
  36. package/dist/core/apm-config.d.ts.map +1 -1
  37. package/dist/core/apm-config.js +111 -3
  38. package/dist/core/apm-config.js.map +1 -1
  39. package/dist/core/backend-deploy/backend-deploy-workflow.d.ts +16 -0
  40. package/dist/core/backend-deploy/backend-deploy-workflow.d.ts.map +1 -0
  41. package/dist/core/backend-deploy/backend-deploy-workflow.js +53 -0
  42. package/dist/core/backend-deploy/backend-deploy-workflow.js.map +1 -0
  43. package/dist/core/backend-deploy/image-tag.d.ts +2 -0
  44. package/dist/core/backend-deploy/image-tag.d.ts.map +1 -0
  45. package/dist/core/backend-deploy/image-tag.js +15 -0
  46. package/dist/core/backend-deploy/image-tag.js.map +1 -0
  47. package/dist/core/backend-deploy/index.d.ts +12 -0
  48. package/dist/core/backend-deploy/index.d.ts.map +1 -0
  49. package/dist/core/backend-deploy/index.js +23 -0
  50. package/dist/core/backend-deploy/index.js.map +1 -0
  51. package/dist/core/backend-deploy/local-docker-build.d.ts +11 -0
  52. package/dist/core/backend-deploy/local-docker-build.d.ts.map +1 -0
  53. package/dist/core/backend-deploy/local-docker-build.js +29 -0
  54. package/dist/core/backend-deploy/local-docker-build.js.map +1 -0
  55. package/dist/core/backend-deploy/registry-login-push.d.ts +14 -0
  56. package/dist/core/backend-deploy/registry-login-push.d.ts.map +1 -0
  57. package/dist/core/backend-deploy/registry-login-push.js +48 -0
  58. package/dist/core/backend-deploy/registry-login-push.js.map +1 -0
  59. package/dist/core/backend-deploy/remote-docker-client.d.ts +11 -0
  60. package/dist/core/backend-deploy/remote-docker-client.d.ts.map +1 -0
  61. package/dist/core/backend-deploy/remote-docker-client.js +33 -0
  62. package/dist/core/backend-deploy/remote-docker-client.js.map +1 -0
  63. package/dist/core/backend-deploy/remote-pull-image.d.ts +9 -0
  64. package/dist/core/backend-deploy/remote-pull-image.d.ts.map +1 -0
  65. package/dist/core/backend-deploy/remote-pull-image.js +39 -0
  66. package/dist/core/backend-deploy/remote-pull-image.js.map +1 -0
  67. package/dist/core/backend-deploy/resolve-dockerfile.d.ts +12 -0
  68. package/dist/core/backend-deploy/resolve-dockerfile.d.ts.map +1 -0
  69. package/dist/core/backend-deploy/resolve-dockerfile.js +33 -0
  70. package/dist/core/backend-deploy/resolve-dockerfile.js.map +1 -0
  71. package/dist/core/backend-deploy/run-docker-cli.d.ts +14 -0
  72. package/dist/core/backend-deploy/run-docker-cli.d.ts.map +1 -0
  73. package/dist/core/backend-deploy/run-docker-cli.js +33 -0
  74. package/dist/core/backend-deploy/run-docker-cli.js.map +1 -0
  75. package/dist/core/backend-deploy/types.d.ts +69 -0
  76. package/dist/core/backend-deploy/types.d.ts.map +1 -0
  77. package/dist/core/backend-deploy/types.js +6 -0
  78. package/dist/core/backend-deploy/types.js.map +1 -0
  79. package/dist/core/branch-name.d.ts +8 -0
  80. package/dist/core/branch-name.d.ts.map +1 -0
  81. package/dist/core/branch-name.js +37 -0
  82. package/dist/core/branch-name.js.map +1 -0
  83. package/dist/core/cursor-cmd.d.ts.map +1 -1
  84. package/dist/core/cursor-cmd.js +2 -1
  85. package/dist/core/cursor-cmd.js.map +1 -1
  86. package/dist/core/minio.d.ts +35 -0
  87. package/dist/core/minio.d.ts.map +1 -0
  88. package/dist/core/minio.js +154 -0
  89. package/dist/core/minio.js.map +1 -0
  90. package/package.json +6 -5
  91. package/templates/skills/apm-release/SKILL.md +87 -0
@@ -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.12",
3
+ "version": "2.0.13",
4
4
  "private": false,
5
5
  "description": "AI 项目管理 CLI 工具,结合飞书项目实现AI项目开发工作流",
6
6
  "main": "./dist/index.js",
@@ -27,7 +27,6 @@
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",
@@ -41,11 +40,13 @@
41
40
  "commander": "^13.1.0",
42
41
  "listpage-http": "0.0.316",
43
42
  "ws": "~8.20.0",
44
- "minio": "~8.0.7"
43
+ "minio": "~8.0.7",
44
+ "dockerode": "~4.0.10"
45
45
  },
46
46
  "devDependencies": {
47
47
  "@types/node": "^22.10.7",
48
48
  "typescript": "~5.7.3",
49
- "@types/ws": "~8.18.1"
49
+ "@types/ws": "~8.18.1",
50
+ "@types/dockerode": "~4.0.1"
50
51
  }
51
- }
52
+ }
@@ -0,0 +1,87 @@
1
+ ---
2
+ name: apm-release
3
+ description: 需求上线:取分支 → 切分支并拉最新 → code-deploy 正式环境 → apm release 同步状态。用户 @ 本技能时使用。
4
+ ---
5
+
6
+ # 需求上线(apm-release)
7
+
8
+ ## 输入
9
+
10
+ - **`requirementId`(必须)**:需求主键 ID。
11
+ - **`-f` / `--force`(可选,默认不加)**:仅当用户在对话中**明确表态**「不用走代码审核 / 不审代码直接上线 / 合并 PR 即可」等同类含义时,第 4 步的 `apm release` 才增加 **`-f`**(与 CLI 一致:创建 PR 后对其实施 squash 合并)。**用户未明确说时一律不带 `-f`**,不得自行替用户决定。
12
+
13
+ ## 执行顺序(严格 1 → 2 → 3 → 4)
14
+
15
+ ### 第 1 步 — 获取分支名
16
+
17
+ 执行:
18
+
19
+ ```bash
20
+ apm get branchName <requirementId>
21
+ ```
22
+
23
+ 从标准输出读取**一行分支名**,记为 `BRANCH`。若命令失败,**不要继续第 2、3 步**,直接进入第 4 步(见下:若拿不到 `BRANCH`,`-b` 无法填写时须在对话中说明,并按失败场景处理)。
24
+
25
+ **对话输出**:本步结束后,在回复中写明**执行状态**(成功/失败)与**结果**(分支名或报错摘要)。
26
+
27
+ ### 第 2 步 — 切分支并拉取最新
28
+
29
+ 1. 若工作区有未提交变更(含未跟踪文件按项目习惯):先 `git stash`(或等价方式)保存,再切分支。
30
+ 2. `git checkout <BRANCH>`(已在该分支可跳过 checkout)。
31
+ 3. `git pull`(或 `git fetch` + 与项目一致的合并方式),确保当前分支与远程一致、代码最新。
32
+ 4. **合并冲突时**(pull/merge 产生冲突):
33
+ - 可先**自行解决**,但**只处理**与本次需求意图**明显无冲突**的情形(例如无关文件、能明确判定为可安全合并的变更)。
34
+ - 一旦出现**无法分辨**的冲突(说不清是否影响本需求、怀疑与需求意图相悖、或不能确信合并结果正确):**立即判定本步骤失败**,**不要**猜测性选边或强行合并;进入第 4 步,`-r` 用简短说明(如 `pull 冲突无法安全解决`)。
35
+
36
+ 任一步失败则**停止第 3 步**,进入第 4 步。
37
+
38
+ **对话输出**:本步结束后,在回复中写明**执行状态**与**结果**(当前分支、pull 是否成功、stash 是否使用、若有冲突则是否已解决或已判失败等)。
39
+
40
+ ### 第 3 步 — 部署正式环境
41
+
42
+ 调用 **`code-deploy` 技能**:按项目 `.apm/deploy/README.md`(或技能约定)部署**线上/正式环境**。
43
+
44
+ 失败则**停止**,进入第 4 步。
45
+
46
+ **对话输出**:本步结束后,在回复中写明**执行状态**与**结果**(部署是否完成、关键输出摘要)。
47
+
48
+ ### 第 4 步 — 同步状态(`apm release`)
49
+
50
+ **始终在本流程末尾执行本步**(前面任一步失败也要执行,用于同步服务端状态)。
51
+
52
+ ```bash
53
+ apm release <requirementId> -b <BRANCH>
54
+ # 用户已明确「不审代码直接上线」时(见上文「输入」):
55
+ apm release <requirementId> -b <BRANCH> -f
56
+ ```
57
+
58
+ - **第 1~3 步全部成功**:带 `-b`;**仅**在用户已明确要求时再加 `-f`。不带 `-r`。
59
+ - **任一步失败**:带 `-b` 与 **`-r`**,`reason` 为**简短**失败说明(十来字~一两行),不要把整段日志塞进 `-r`。**失败路径不要加 `-f`**(`-f` 只用于成功同步且用户明确要跳审合并的场景)。
60
+
61
+ 示例:
62
+
63
+ ```bash
64
+ apm release <requirementId> -b <BRANCH> -r "获取分支失败"
65
+ apm release <requirementId> -b <BRANCH> -r "git pull 冲突"
66
+ apm release <requirementId> -b <BRANCH> -r "code-deploy 失败"
67
+ ```
68
+
69
+ 若第 1 步未得到 `BRANCH`,无法在命令行合法填写 `-b` 时:在对话中说明阻塞原因;若能从用户或环境确认分支名再补 `-b`,否则不要编造分支名。
70
+
71
+ ## 对话输出(必选)
72
+
73
+ **第 1~3 步**在面向用户的回复中用下面表格呈现(每步一行;未执行的步骤填「未执行」及原因):
74
+
75
+ | 步骤 | 状态 | 结果/说明 |
76
+ |------|------|-----------|
77
+ | 1 获取分支名 | 成功 / 失败 / 未执行 | 分支名或报错摘要 |
78
+ | 2 切分支并拉取 | 成功 / 失败 / 未执行 | 当前分支、pull/stash/冲突处理摘要 |
79
+ | 3 code-deploy | 成功 / 失败 / 未执行 | 部署是否完成、关键输出摘要 |
80
+
81
+ **第 4 步**:在表格后另起一段说明是否执行 `apm release`、是否带 **`-r`**、是否因用户明确要求而带 **`-f`**、命令是否成功。
82
+
83
+ ## 约束
84
+
85
+ - `-r` 仅用于概括失败类型,详细日志放在对话说明里。
86
+ - **`-f`**:仅在用户**明确口头表达**「不审代码直接上线」等含义时使用;不得因图省事或默认假设而加 `-f`。
87
+ - 不要为「碰运气」重复执行同一意图的 `apm release`;成功路径 `-b`(无 `-r`)与失败路径 `-b -r` 各以一次为常例。