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.
- package/README.md +6 -6
- package/dist/api/cli.d.ts +84 -7
- package/dist/api/cli.d.ts.map +1 -1
- package/dist/api/client.d.ts +5 -1
- package/dist/api/client.d.ts.map +1 -1
- package/dist/api/index.d.ts +1 -1
- package/dist/api/index.d.ts.map +1 -1
- package/dist/api/request-config.d.ts +6 -2
- package/dist/api/request-config.d.ts.map +1 -1
- package/dist/api/request-config.js +18 -2
- package/dist/api/request-config.js.map +1 -1
- package/dist/cli/commands/deploy-backend.d.ts +7 -0
- package/dist/cli/commands/deploy-backend.d.ts.map +1 -0
- package/dist/cli/commands/deploy-backend.js +81 -0
- package/dist/cli/commands/deploy-backend.js.map +1 -0
- package/dist/cli/commands/deploy-frontend.d.ts +3 -0
- package/dist/cli/commands/deploy-frontend.d.ts.map +1 -0
- package/dist/cli/commands/deploy-frontend.js +98 -0
- package/dist/cli/commands/deploy-frontend.js.map +1 -0
- package/dist/cli/commands/get.d.ts.map +1 -1
- package/dist/cli/commands/get.js +37 -13
- package/dist/cli/commands/get.js.map +1 -1
- package/dist/cli/commands/init.js +1 -1
- package/dist/cli/commands/publish.d.ts.map +1 -1
- package/dist/cli/commands/publish.js +42 -127
- package/dist/cli/commands/publish.js.map +1 -1
- package/dist/cli/commands/release.d.ts +3 -0
- package/dist/cli/commands/release.d.ts.map +1 -0
- package/dist/cli/commands/release.js +39 -0
- package/dist/cli/commands/release.js.map +1 -0
- package/dist/cli/commands/set.d.ts.map +1 -1
- package/dist/cli/commands/set.js +0 -8
- package/dist/cli/commands/set.js.map +1 -1
- package/dist/cli/commands/status.d.ts +3 -0
- package/dist/cli/commands/status.d.ts.map +1 -0
- package/dist/cli/commands/status.js +44 -0
- package/dist/cli/commands/status.js.map +1 -0
- package/dist/cli/utils/parse.d.ts +2 -0
- package/dist/cli/utils/parse.d.ts.map +1 -0
- package/dist/cli/utils/parse.js +12 -0
- package/dist/cli/utils/parse.js.map +1 -0
- package/dist/cli.js +8 -2
- package/dist/cli.js.map +1 -1
- package/dist/core/apm-config.d.ts +60 -1
- package/dist/core/apm-config.d.ts.map +1 -1
- package/dist/core/apm-config.js +111 -3
- package/dist/core/apm-config.js.map +1 -1
- package/dist/core/backend-deploy/backend-deploy-workflow.d.ts +16 -0
- package/dist/core/backend-deploy/backend-deploy-workflow.d.ts.map +1 -0
- package/dist/core/backend-deploy/backend-deploy-workflow.js +53 -0
- package/dist/core/backend-deploy/backend-deploy-workflow.js.map +1 -0
- package/dist/core/backend-deploy/image-tag.d.ts +2 -0
- package/dist/core/backend-deploy/image-tag.d.ts.map +1 -0
- package/dist/core/backend-deploy/image-tag.js +15 -0
- package/dist/core/backend-deploy/image-tag.js.map +1 -0
- package/dist/core/backend-deploy/index.d.ts +12 -0
- package/dist/core/backend-deploy/index.d.ts.map +1 -0
- package/dist/core/backend-deploy/index.js +23 -0
- package/dist/core/backend-deploy/index.js.map +1 -0
- package/dist/core/backend-deploy/local-docker-build.d.ts +11 -0
- package/dist/core/backend-deploy/local-docker-build.d.ts.map +1 -0
- package/dist/core/backend-deploy/local-docker-build.js +29 -0
- package/dist/core/backend-deploy/local-docker-build.js.map +1 -0
- package/dist/core/backend-deploy/registry-login-push.d.ts +14 -0
- package/dist/core/backend-deploy/registry-login-push.d.ts.map +1 -0
- package/dist/core/backend-deploy/registry-login-push.js +48 -0
- package/dist/core/backend-deploy/registry-login-push.js.map +1 -0
- package/dist/core/backend-deploy/remote-docker-client.d.ts +11 -0
- package/dist/core/backend-deploy/remote-docker-client.d.ts.map +1 -0
- package/dist/core/backend-deploy/remote-docker-client.js +33 -0
- package/dist/core/backend-deploy/remote-docker-client.js.map +1 -0
- package/dist/core/backend-deploy/remote-pull-image.d.ts +9 -0
- package/dist/core/backend-deploy/remote-pull-image.d.ts.map +1 -0
- package/dist/core/backend-deploy/remote-pull-image.js +39 -0
- package/dist/core/backend-deploy/remote-pull-image.js.map +1 -0
- package/dist/core/backend-deploy/resolve-dockerfile.d.ts +12 -0
- package/dist/core/backend-deploy/resolve-dockerfile.d.ts.map +1 -0
- package/dist/core/backend-deploy/resolve-dockerfile.js +33 -0
- package/dist/core/backend-deploy/resolve-dockerfile.js.map +1 -0
- package/dist/core/backend-deploy/run-docker-cli.d.ts +14 -0
- package/dist/core/backend-deploy/run-docker-cli.d.ts.map +1 -0
- package/dist/core/backend-deploy/run-docker-cli.js +33 -0
- package/dist/core/backend-deploy/run-docker-cli.js.map +1 -0
- package/dist/core/backend-deploy/types.d.ts +69 -0
- package/dist/core/backend-deploy/types.d.ts.map +1 -0
- package/dist/core/backend-deploy/types.js +6 -0
- package/dist/core/backend-deploy/types.js.map +1 -0
- package/dist/core/branch-name.d.ts +8 -0
- package/dist/core/branch-name.d.ts.map +1 -0
- package/dist/core/branch-name.js +37 -0
- package/dist/core/branch-name.js.map +1 -0
- package/dist/core/cursor-cmd.d.ts.map +1 -1
- package/dist/core/cursor-cmd.js +2 -1
- package/dist/core/cursor-cmd.js.map +1 -1
- package/dist/core/minio.d.ts +35 -0
- package/dist/core/minio.d.ts.map +1 -0
- package/dist/core/minio.js +154 -0
- package/dist/core/minio.js.map +1 -0
- package/package.json +6 -6
- package/templates/skills/apm-apply-change/SKILL.md +1 -1
- package/templates/skills/apm-auto-dev/SKILL.md +1 -1
- package/templates/skills/apm-fixbug/SKILL.md +53 -115
- 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 @@
|
|
|
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;
|
|
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"}
|
package/dist/core/cursor-cmd.js
CHANGED
|
@@ -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.
|
|
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
|
|
8
|
+
根据工作项目录下的 **`tasks.md`** 驱动实现:**读规划 → 做代码 → 对账元数据 → 勾选 → 单独 commit**,直至全部完成或遇硬阻塞;上下文以 **`.apm/workitems/<requirementId>/`** 内文件为准。
|
|
9
9
|
|
|
10
10
|
---
|
|
11
11
|
|