ai-project-manage-cli 2.0.26 → 3.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +500 -20
- package/package.json +27 -25
- package/template/apm.config.json +5 -0
- package/template/deploy/README.md +3 -0
- package/template/skills/apm-review/SKILL.md +38 -0
- package/template/skills/apm-review/apm-review-reference.md +89 -0
- package/template/workitems/README.md +19 -0
- package/README.md +0 -171
- package/dist/api/cli.d.ts +0 -228
- package/dist/api/cli.d.ts.map +0 -1
- package/dist/api/cli.js +0 -3
- package/dist/api/cli.js.map +0 -1
- package/dist/api/client.d.ts +0 -5
- package/dist/api/client.d.ts.map +0 -1
- package/dist/api/client.js +0 -30
- package/dist/api/client.js.map +0 -1
- package/dist/api/http.d.ts +0 -21
- package/dist/api/http.d.ts.map +0 -1
- package/dist/api/http.js +0 -108
- package/dist/api/http.js.map +0 -1
- package/dist/api/index.d.ts +0 -6
- package/dist/api/index.d.ts.map +0 -1
- package/dist/api/index.js +0 -13
- package/dist/api/index.js.map +0 -1
- package/dist/api/request-config.d.ts +0 -25
- package/dist/api/request-config.d.ts.map +0 -1
- package/dist/api/request-config.js +0 -73
- package/dist/api/request-config.js.map +0 -1
- package/dist/api/requirement.d.ts +0 -1
- package/dist/api/requirement.d.ts.map +0 -1
- package/dist/api/requirement.js +0 -2
- package/dist/api/requirement.js.map +0 -1
- package/dist/apm-dotenv.d.ts +0 -8
- package/dist/apm-dotenv.d.ts.map +0 -1
- package/dist/apm-dotenv.js +0 -73
- package/dist/apm-dotenv.js.map +0 -1
- package/dist/cli/agent-stream-log.d.ts +0 -41
- package/dist/cli/agent-stream-log.d.ts.map +0 -1
- package/dist/cli/agent-stream-log.js +0 -364
- package/dist/cli/agent-stream-log.js.map +0 -1
- package/dist/cli/commands/auth.d.ts +0 -3
- package/dist/cli/commands/auth.d.ts.map +0 -1
- package/dist/cli/commands/auth.js +0 -51
- package/dist/cli/commands/auth.js.map +0 -1
- package/dist/cli/commands/chat.d.ts +0 -3
- package/dist/cli/commands/chat.d.ts.map +0 -1
- package/dist/cli/commands/chat.js +0 -32
- package/dist/cli/commands/chat.js.map +0 -1
- package/dist/cli/commands/comment.d.ts +0 -3
- package/dist/cli/commands/comment.d.ts.map +0 -1
- package/dist/cli/commands/comment.js +0 -66
- package/dist/cli/commands/comment.js.map +0 -1
- package/dist/cli/commands/config.d.ts +0 -3
- package/dist/cli/commands/config.d.ts.map +0 -1
- package/dist/cli/commands/config.js +0 -39
- package/dist/cli/commands/config.js.map +0 -1
- package/dist/cli/commands/deploy-backend.d.ts +0 -7
- package/dist/cli/commands/deploy-backend.d.ts.map +0 -1
- package/dist/cli/commands/deploy-backend.js +0 -77
- package/dist/cli/commands/deploy-backend.js.map +0 -1
- package/dist/cli/commands/deploy-frontend.d.ts +0 -3
- package/dist/cli/commands/deploy-frontend.d.ts.map +0 -1
- package/dist/cli/commands/deploy-frontend.js +0 -167
- package/dist/cli/commands/deploy-frontend.js.map +0 -1
- package/dist/cli/commands/get.d.ts +0 -3
- package/dist/cli/commands/get.d.ts.map +0 -1
- package/dist/cli/commands/get.js +0 -145
- package/dist/cli/commands/get.js.map +0 -1
- package/dist/cli/commands/init.d.ts +0 -3
- package/dist/cli/commands/init.d.ts.map +0 -1
- package/dist/cli/commands/init.js +0 -179
- package/dist/cli/commands/init.js.map +0 -1
- package/dist/cli/commands/minio.d.ts +0 -3
- package/dist/cli/commands/minio.d.ts.map +0 -1
- package/dist/cli/commands/minio.js +0 -65
- package/dist/cli/commands/minio.js.map +0 -1
- package/dist/cli/commands/publish.d.ts +0 -3
- package/dist/cli/commands/publish.d.ts.map +0 -1
- package/dist/cli/commands/publish.js +0 -130
- package/dist/cli/commands/publish.js.map +0 -1
- package/dist/cli/commands/release.d.ts +0 -3
- package/dist/cli/commands/release.d.ts.map +0 -1
- package/dist/cli/commands/release.js +0 -37
- package/dist/cli/commands/release.js.map +0 -1
- package/dist/cli/commands/requirement.d.ts +0 -3
- package/dist/cli/commands/requirement.d.ts.map +0 -1
- package/dist/cli/commands/requirement.js +0 -169
- package/dist/cli/commands/requirement.js.map +0 -1
- package/dist/cli/commands/set.d.ts +0 -3
- package/dist/cli/commands/set.d.ts.map +0 -1
- package/dist/cli/commands/set.js +0 -103
- package/dist/cli/commands/set.js.map +0 -1
- package/dist/cli/commands/status.d.ts +0 -3
- package/dist/cli/commands/status.d.ts.map +0 -1
- package/dist/cli/commands/status.js +0 -42
- package/dist/cli/commands/status.js.map +0 -1
- package/dist/cli/commands/update.d.ts +0 -3
- package/dist/cli/commands/update.d.ts.map +0 -1
- package/dist/cli/commands/update.js +0 -36
- package/dist/cli/commands/update.js.map +0 -1
- package/dist/cli/commands/ws.d.ts +0 -3
- package/dist/cli/commands/ws.d.ts.map +0 -1
- package/dist/cli/commands/ws.js +0 -25
- package/dist/cli/commands/ws.js.map +0 -1
- package/dist/cli/credentials.d.ts +0 -30
- package/dist/cli/credentials.d.ts.map +0 -1
- package/dist/cli/credentials.js +0 -52
- package/dist/cli/credentials.js.map +0 -1
- package/dist/cli/exit-api-error.d.ts +0 -2
- package/dist/cli/exit-api-error.d.ts.map +0 -1
- package/dist/cli/exit-api-error.js +0 -18
- package/dist/cli/exit-api-error.js.map +0 -1
- package/dist/cli/instruction-log-stream-sink.d.ts +0 -31
- package/dist/cli/instruction-log-stream-sink.d.ts.map +0 -1
- package/dist/cli/instruction-log-stream-sink.js +0 -59
- package/dist/cli/instruction-log-stream-sink.js.map +0 -1
- package/dist/cli/session.d.ts +0 -26
- package/dist/cli/session.d.ts.map +0 -1
- package/dist/cli/session.js +0 -41
- package/dist/cli/session.js.map +0 -1
- package/dist/cli/utils/parse.d.ts +0 -2
- package/dist/cli/utils/parse.d.ts.map +0 -1
- package/dist/cli/utils/parse.js +0 -12
- package/dist/cli/utils/parse.js.map +0 -1
- package/dist/cli/ws-run-command.d.ts +0 -13
- package/dist/cli/ws-run-command.d.ts.map +0 -1
- package/dist/cli/ws-run-command.js +0 -330
- package/dist/cli/ws-run-command.js.map +0 -1
- package/dist/cli-version.d.ts +0 -9
- package/dist/cli-version.d.ts.map +0 -1
- package/dist/cli-version.js +0 -61
- package/dist/cli-version.js.map +0 -1
- package/dist/cli.d.ts +0 -3
- package/dist/cli.d.ts.map +0 -1
- package/dist/cli.js +0 -36
- package/dist/cli.js.map +0 -1
- package/dist/config-store.d.ts +0 -38
- package/dist/config-store.d.ts.map +0 -1
- package/dist/config-store.js +0 -131
- package/dist/config-store.js.map +0 -1
- package/dist/core/apm-config.d.ts +0 -81
- package/dist/core/apm-config.d.ts.map +0 -1
- package/dist/core/apm-config.js +0 -147
- package/dist/core/apm-config.js.map +0 -1
- package/dist/core/backend-deploy/backend-deploy-workflow.d.ts +0 -20
- package/dist/core/backend-deploy/backend-deploy-workflow.d.ts.map +0 -1
- package/dist/core/backend-deploy/backend-deploy-workflow.js +0 -86
- package/dist/core/backend-deploy/backend-deploy-workflow.js.map +0 -1
- package/dist/core/backend-deploy/command-runner.d.ts +0 -11
- package/dist/core/backend-deploy/command-runner.d.ts.map +0 -1
- package/dist/core/backend-deploy/command-runner.js +0 -47
- package/dist/core/backend-deploy/command-runner.js.map +0 -1
- package/dist/core/backend-deploy/dockerode-client/client.d.ts +0 -18
- package/dist/core/backend-deploy/dockerode-client/client.d.ts.map +0 -1
- package/dist/core/backend-deploy/dockerode-client/client.js +0 -114
- package/dist/core/backend-deploy/dockerode-client/client.js.map +0 -1
- package/dist/core/backend-deploy/dockerode-client/connection-options.d.ts +0 -6
- package/dist/core/backend-deploy/dockerode-client/connection-options.d.ts.map +0 -1
- package/dist/core/backend-deploy/dockerode-client/connection-options.js +0 -62
- package/dist/core/backend-deploy/dockerode-client/connection-options.js.map +0 -1
- package/dist/core/backend-deploy/dockerode-client/container-inspect-format.d.ts +0 -3
- package/dist/core/backend-deploy/dockerode-client/container-inspect-format.d.ts.map +0 -1
- package/dist/core/backend-deploy/dockerode-client/container-inspect-format.js +0 -23
- package/dist/core/backend-deploy/dockerode-client/container-inspect-format.js.map +0 -1
- package/dist/core/backend-deploy/dockerode-client/container-options.d.ts +0 -4
- package/dist/core/backend-deploy/dockerode-client/container-options.d.ts.map +0 -1
- package/dist/core/backend-deploy/dockerode-client/container-options.js +0 -44
- package/dist/core/backend-deploy/dockerode-client/container-options.js.map +0 -1
- package/dist/core/backend-deploy/dockerode-client/env.d.ts +0 -3
- package/dist/core/backend-deploy/dockerode-client/env.d.ts.map +0 -1
- package/dist/core/backend-deploy/dockerode-client/env.js +0 -40
- package/dist/core/backend-deploy/dockerode-client/env.js.map +0 -1
- package/dist/core/backend-deploy/dockerode-client/index.d.ts +0 -8
- package/dist/core/backend-deploy/dockerode-client/index.d.ts.map +0 -1
- package/dist/core/backend-deploy/dockerode-client/index.js +0 -17
- package/dist/core/backend-deploy/dockerode-client/index.js.map +0 -1
- package/dist/core/backend-deploy/dockerode-client/ports.d.ts +0 -9
- package/dist/core/backend-deploy/dockerode-client/ports.d.ts.map +0 -1
- package/dist/core/backend-deploy/dockerode-client/ports.js +0 -35
- package/dist/core/backend-deploy/dockerode-client/ports.js.map +0 -1
- package/dist/core/backend-deploy/dockerode-client/runtime.d.ts +0 -7
- package/dist/core/backend-deploy/dockerode-client/runtime.d.ts.map +0 -1
- package/dist/core/backend-deploy/dockerode-client/runtime.js +0 -26
- package/dist/core/backend-deploy/dockerode-client/runtime.js.map +0 -1
- package/dist/core/backend-deploy/dockerode-client/types.d.ts +0 -64
- package/dist/core/backend-deploy/dockerode-client/types.d.ts.map +0 -1
- package/dist/core/backend-deploy/dockerode-client/types.js +0 -3
- package/dist/core/backend-deploy/dockerode-client/types.js.map +0 -1
- package/dist/core/backend-deploy/image-tag.d.ts +0 -2
- package/dist/core/backend-deploy/image-tag.d.ts.map +0 -1
- package/dist/core/backend-deploy/image-tag.js +0 -15
- package/dist/core/backend-deploy/image-tag.js.map +0 -1
- package/dist/core/backend-deploy/index.d.ts +0 -3
- package/dist/core/backend-deploy/index.d.ts.map +0 -1
- package/dist/core/backend-deploy/index.js +0 -6
- package/dist/core/backend-deploy/index.js.map +0 -1
- package/dist/core/backend-deploy/local-docker-build.d.ts +0 -8
- package/dist/core/backend-deploy/local-docker-build.d.ts.map +0 -1
- package/dist/core/backend-deploy/local-docker-build.js +0 -25
- package/dist/core/backend-deploy/local-docker-build.js.map +0 -1
- package/dist/core/backend-deploy/logger.d.ts +0 -10
- package/dist/core/backend-deploy/logger.d.ts.map +0 -1
- package/dist/core/backend-deploy/logger.js +0 -22
- package/dist/core/backend-deploy/logger.js.map +0 -1
- package/dist/core/backend-deploy/registry-login-push.d.ts +0 -24
- package/dist/core/backend-deploy/registry-login-push.d.ts.map +0 -1
- package/dist/core/backend-deploy/registry-login-push.js +0 -37
- package/dist/core/backend-deploy/registry-login-push.js.map +0 -1
- package/dist/core/backend-deploy/remote-docker-client.d.ts +0 -11
- package/dist/core/backend-deploy/remote-docker-client.d.ts.map +0 -1
- package/dist/core/backend-deploy/remote-docker-client.js +0 -34
- package/dist/core/backend-deploy/remote-docker-client.js.map +0 -1
- package/dist/core/backend-deploy/remote-pull-image.d.ts +0 -9
- package/dist/core/backend-deploy/remote-pull-image.d.ts.map +0 -1
- package/dist/core/backend-deploy/remote-pull-image.js +0 -39
- package/dist/core/backend-deploy/remote-pull-image.js.map +0 -1
- package/dist/core/backend-deploy/resolve-dockerfile.d.ts +0 -7
- package/dist/core/backend-deploy/resolve-dockerfile.d.ts.map +0 -1
- package/dist/core/backend-deploy/resolve-dockerfile.js +0 -24
- package/dist/core/backend-deploy/resolve-dockerfile.js.map +0 -1
- package/dist/core/backend-deploy/run-docker-cli.d.ts +0 -9
- package/dist/core/backend-deploy/run-docker-cli.d.ts.map +0 -1
- package/dist/core/backend-deploy/run-docker-cli.js +0 -14
- package/dist/core/backend-deploy/run-docker-cli.js.map +0 -1
- package/dist/core/backend-deploy/types.d.ts +0 -23
- package/dist/core/backend-deploy/types.d.ts.map +0 -1
- package/dist/core/backend-deploy/types.js +0 -3
- package/dist/core/backend-deploy/types.js.map +0 -1
- package/dist/core/branch-name.d.ts +0 -8
- package/dist/core/branch-name.d.ts.map +0 -1
- package/dist/core/branch-name.js +0 -37
- package/dist/core/branch-name.js.map +0 -1
- package/dist/core/constants.d.ts +0 -4
- package/dist/core/constants.d.ts.map +0 -1
- package/dist/core/constants.js +0 -16
- package/dist/core/constants.js.map +0 -1
- package/dist/core/cursor-cmd.d.ts +0 -30
- package/dist/core/cursor-cmd.d.ts.map +0 -1
- package/dist/core/cursor-cmd.js +0 -193
- package/dist/core/cursor-cmd.js.map +0 -1
- package/dist/core/minio.d.ts +0 -37
- package/dist/core/minio.d.ts.map +0 -1
- package/dist/core/minio.js +0 -159
- package/dist/core/minio.js.map +0 -1
- package/dist/core/parse-testcase-md.d.ts +0 -17
- package/dist/core/parse-testcase-md.d.ts.map +0 -1
- package/dist/core/parse-testcase-md.js +0 -79
- package/dist/core/parse-testcase-md.js.map +0 -1
- package/dist/core/std-event-handler.d.ts +0 -25
- package/dist/core/std-event-handler.d.ts.map +0 -1
- package/dist/core/std-event-handler.js +0 -90
- package/dist/core/std-event-handler.js.map +0 -1
- package/dist/core/utils.d.ts +0 -19
- package/dist/core/utils.d.ts.map +0 -1
- package/dist/core/utils.js +0 -71
- package/dist/core/utils.js.map +0 -1
- package/dist/core/ws-client.d.ts +0 -29
- package/dist/core/ws-client.d.ts.map +0 -1
- package/dist/core/ws-client.js +0 -81
- package/dist/core/ws-client.js.map +0 -1
- package/dist/employee-ws-client.d.ts +0 -42
- package/dist/employee-ws-client.d.ts.map +0 -1
- package/dist/employee-ws-client.js +0 -99
- package/dist/employee-ws-client.js.map +0 -1
- package/dist/index.d.ts +0 -6
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/templates/commands/apm-auto-dev.md +0 -6
- package/templates/commands/apm-fixbug.md +0 -6
- package/templates/commands/apm-prd-review.md +0 -6
- package/templates/commands/apm-prd-sync.md +0 -6
- package/templates/skills/apm-apply-change/SKILL.md +0 -191
- package/templates/skills/apm-auto-dev/SKILL.md +0 -170
- package/templates/skills/apm-fixbug/SKILL.md +0 -97
- package/templates/skills/apm-propose/SKILL.md +0 -123
- package/templates/skills/apm-propose/design-instruction.md +0 -94
- package/templates/skills/apm-propose/propose-instruction.md +0 -81
- package/templates/skills/apm-propose/specs-instruction.md +0 -114
- package/templates/skills/apm-propose/tasks-instruction.md +0 -90
- package/templates/skills/apm-release/SKILL.md +0 -87
- package/templates/skills/code-change-summary/SKILL.md +0 -84
- package/templates/skills/code-change-summary/summary-template.md +0 -55
- package/templates/skills/code-deploy/SKILL.md +0 -39
- package/templates/skills/prd-review/SKILL.md +0 -48
- package/templates/skills/prd-review/output-template.md +0 -47
- package/templates/skills/prd-sync/SKILL.md +0 -74
- package/templates/skills/prd-sync/updated-requirement-template.md +0 -39
- package/templates/skills/prd-testcase/SKILL.md +0 -82
- package/templates/skills/prd-testcase/reference.md +0 -44
- package/templates/skills/product-capability-inventory/SKILL.md +0 -131
- package/templates/skills/product-capability-inventory/template.md +0 -80
- package/templates/skills/product-capability-inventory//344/275/277/347/224/250/350/257/264/346/230/216/344/271/246.md +0 -36
- package/templates/skills/product-capability-inventory//347/233/256/345/275/225/350/247/204/350/214/203.md +0 -58
package/dist/core/minio.js
DELETED
|
@@ -1,159 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.MinioClient = exports.DEFAULT_MAX_FILE_SIZE_MB = exports.MIME_BY_EXT = void 0;
|
|
7
|
-
exports.sanitizeRelativePath = sanitizeRelativePath;
|
|
8
|
-
exports.toArtifactObjectKey = toArtifactObjectKey;
|
|
9
|
-
exports.isDirectoryPath = isDirectoryPath;
|
|
10
|
-
exports.readArtifactFile = readArtifactFile;
|
|
11
|
-
exports.collectFiles = collectFiles;
|
|
12
|
-
exports.detectMimeType = detectMimeType;
|
|
13
|
-
exports.toMB = toMB;
|
|
14
|
-
const promises_1 = require("node:fs/promises");
|
|
15
|
-
const node_path_1 = __importDefault(require("node:path"));
|
|
16
|
-
const minio_1 = require("minio");
|
|
17
|
-
exports.MIME_BY_EXT = {
|
|
18
|
-
".html": "text/html; charset=utf-8",
|
|
19
|
-
".js": "application/javascript; charset=utf-8",
|
|
20
|
-
".mjs": "application/javascript; charset=utf-8",
|
|
21
|
-
".css": "text/css; charset=utf-8",
|
|
22
|
-
".json": "application/json; charset=utf-8",
|
|
23
|
-
".map": "application/json; charset=utf-8",
|
|
24
|
-
".txt": "text/plain; charset=utf-8",
|
|
25
|
-
".svg": "image/svg+xml",
|
|
26
|
-
".png": "image/png",
|
|
27
|
-
".jpg": "image/jpeg",
|
|
28
|
-
".jpeg": "image/jpeg",
|
|
29
|
-
".webp": "image/webp",
|
|
30
|
-
".gif": "image/gif",
|
|
31
|
-
".ico": "image/x-icon",
|
|
32
|
-
".woff": "font/woff",
|
|
33
|
-
".woff2": "font/woff2",
|
|
34
|
-
".ttf": "font/ttf",
|
|
35
|
-
};
|
|
36
|
-
exports.DEFAULT_MAX_FILE_SIZE_MB = 100;
|
|
37
|
-
function sanitizeRelativePath(raw) {
|
|
38
|
-
const normalized = raw.replace(/\\/g, "/").replace(/^\/+/, "").trim();
|
|
39
|
-
if (!normalized) {
|
|
40
|
-
throw new Error("relativePath 不能为空");
|
|
41
|
-
}
|
|
42
|
-
const segs = normalized.split("/");
|
|
43
|
-
if (segs.some((s) => s === "" || s === "." || s === "..")) {
|
|
44
|
-
throw new Error("relativePath 非法");
|
|
45
|
-
}
|
|
46
|
-
return segs.join("/");
|
|
47
|
-
}
|
|
48
|
-
function toArtifactObjectKey(input) {
|
|
49
|
-
const base = `${input.branchName}/dist/${input.relativePath}`
|
|
50
|
-
.replace(/\/+/g, "/")
|
|
51
|
-
.replace(/^\//, "");
|
|
52
|
-
const prefix = (input.namePrefix ?? "").trim().replace(/^\/+|\/+$/g, "");
|
|
53
|
-
if (!prefix) {
|
|
54
|
-
return base;
|
|
55
|
-
}
|
|
56
|
-
return `${prefix}/${base}`.replace(/\/+/g, "/");
|
|
57
|
-
}
|
|
58
|
-
async function isDirectoryPath(absPath) {
|
|
59
|
-
try {
|
|
60
|
-
const st = await (0, promises_1.stat)(absPath);
|
|
61
|
-
return st.isDirectory();
|
|
62
|
-
}
|
|
63
|
-
catch {
|
|
64
|
-
return false;
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
async function readArtifactFile(absPath) {
|
|
68
|
-
return (0, promises_1.readFile)(absPath);
|
|
69
|
-
}
|
|
70
|
-
async function collectFiles(rootDir) {
|
|
71
|
-
const out = [];
|
|
72
|
-
await walk(rootDir, rootDir, out);
|
|
73
|
-
out.sort((a, b) => a.relativePath.localeCompare(b.relativePath));
|
|
74
|
-
return out;
|
|
75
|
-
}
|
|
76
|
-
async function walk(rootDir, currentDir, out) {
|
|
77
|
-
const entries = await (0, promises_1.readdir)(currentDir, { withFileTypes: true });
|
|
78
|
-
for (const ent of entries) {
|
|
79
|
-
const absPath = node_path_1.default.join(currentDir, ent.name);
|
|
80
|
-
if (ent.isDirectory()) {
|
|
81
|
-
await walk(rootDir, absPath, out);
|
|
82
|
-
continue;
|
|
83
|
-
}
|
|
84
|
-
if (!ent.isFile())
|
|
85
|
-
continue;
|
|
86
|
-
const st = await (0, promises_1.stat)(absPath);
|
|
87
|
-
const rel = node_path_1.default.relative(rootDir, absPath).split(node_path_1.default.sep).join("/");
|
|
88
|
-
out.push({ absPath, relativePath: rel, size: st.size });
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
function detectMimeType(filePath) {
|
|
92
|
-
const ext = node_path_1.default.extname(filePath).toLowerCase();
|
|
93
|
-
return exports.MIME_BY_EXT[ext] || "application/octet-stream";
|
|
94
|
-
}
|
|
95
|
-
function toMB(bytes) {
|
|
96
|
-
return (bytes / 1024 / 1024).toFixed(2);
|
|
97
|
-
}
|
|
98
|
-
/**
|
|
99
|
-
* minio 默认 listObjectsV2 每页最多 1000 条,单页 XML 在 fast-xml-parser 中会触发
|
|
100
|
-
* Entity expansion limit exceeded。用 listObjectsV2Query 缩小每页条数并分页列举。
|
|
101
|
-
*/
|
|
102
|
-
const LIST_OBJECTS_PAGE_MAX_KEYS = 500;
|
|
103
|
-
/** 匿名可读桶内所有对象(仅 s3:GetObject),用于路径直链 */
|
|
104
|
-
function buildPublicReadPolicy(bucket) {
|
|
105
|
-
const policy = {
|
|
106
|
-
Version: "2012-10-17",
|
|
107
|
-
Statement: [
|
|
108
|
-
{
|
|
109
|
-
Effect: "Allow",
|
|
110
|
-
Principal: { AWS: ["*"] },
|
|
111
|
-
Action: ["s3:GetObject"],
|
|
112
|
-
Resource: [`arn:aws:s3:::${bucket}/*`],
|
|
113
|
-
},
|
|
114
|
-
],
|
|
115
|
-
};
|
|
116
|
-
return JSON.stringify(policy);
|
|
117
|
-
}
|
|
118
|
-
class MinioClient {
|
|
119
|
-
client;
|
|
120
|
-
constructor(options) {
|
|
121
|
-
this.client = new minio_1.Client({
|
|
122
|
-
endPoint: options.endPoint,
|
|
123
|
-
port: options.port,
|
|
124
|
-
useSSL: options.useSSL,
|
|
125
|
-
accessKey: options.accessKey,
|
|
126
|
-
secretKey: options.secretKey,
|
|
127
|
-
});
|
|
128
|
-
}
|
|
129
|
-
async ensureBucket(bucket) {
|
|
130
|
-
const exists = await this.client.bucketExists(bucket);
|
|
131
|
-
if (!exists) {
|
|
132
|
-
await this.client.makeBucket(bucket);
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
async deleteObjectsByPrefix(bucket, prefix) {
|
|
136
|
-
let continuationToken = "";
|
|
137
|
-
const removeBatchSize = 1000;
|
|
138
|
-
for (;;) {
|
|
139
|
-
const result = await this.client.listObjectsV2Query(bucket, prefix, continuationToken, "", LIST_OBJECTS_PAGE_MAX_KEYS, "");
|
|
140
|
-
const keys = result.objects
|
|
141
|
-
.map((obj) => ("name" in obj && obj.name ? obj.name.trim() : ""))
|
|
142
|
-
.filter((name) => name.length > 0);
|
|
143
|
-
for (let i = 0; i < keys.length; i += removeBatchSize) {
|
|
144
|
-
await this.client.removeObjects(bucket, keys.slice(i, i + removeBatchSize));
|
|
145
|
-
}
|
|
146
|
-
if (!result.isTruncated)
|
|
147
|
-
break;
|
|
148
|
-
continuationToken = result.nextContinuationToken ?? "";
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
|
-
async putObject(bucket, objectKey, data, meta) {
|
|
152
|
-
await this.client.putObject(bucket, objectKey, data, data.length, meta);
|
|
153
|
-
}
|
|
154
|
-
async setBucketPublicRead(bucket) {
|
|
155
|
-
await this.client.setBucketPolicy(bucket, buildPublicReadPolicy(bucket));
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
exports.MinioClient = MinioClient;
|
|
159
|
-
//# sourceMappingURL=minio.js.map
|
package/dist/core/minio.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"minio.js","sourceRoot":"","sources":["../../src/core/minio.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* 解析 `.apm/workitems/<id>/testcase.md`
|
|
3
|
-
* 格式由 prd-testcase 技能产出,见 `templates/skills/prd-testcase/reference.md`:
|
|
4
|
-
* - 文首 `# 测试用例`,正文仅 `### 优先级:标题(TC-xxx)` 平铺
|
|
5
|
-
* - 每块内固定顺序:可选「测试类型 / 数据依赖」→「操作步骤」→「预期结果」
|
|
6
|
-
* - 文末可追加 `## 覆盖校验`(技能强制),导入时应忽略
|
|
7
|
-
*/
|
|
8
|
-
export type ParsedTestCaseItem = {
|
|
9
|
-
title: string;
|
|
10
|
-
steps: string;
|
|
11
|
-
expectedResult?: string;
|
|
12
|
-
};
|
|
13
|
-
/**
|
|
14
|
-
* 将 testcase.md 正文解析为可提交给后端的 items。
|
|
15
|
-
*/
|
|
16
|
-
export declare function parseTestcaseMarkdown(md: string): ParsedTestCaseItem[];
|
|
17
|
-
//# sourceMappingURL=parse-testcase-md.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"parse-testcase-md.d.ts","sourceRoot":"","sources":["../../src/core/parse-testcase-md.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,MAAM,kBAAkB,GAAG;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AAwCF;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,MAAM,GAAG,kBAAkB,EAAE,CA0CtE"}
|
|
@@ -1,79 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* 解析 `.apm/workitems/<id>/testcase.md`
|
|
4
|
-
* 格式由 prd-testcase 技能产出,见 `templates/skills/prd-testcase/reference.md`:
|
|
5
|
-
* - 文首 `# 测试用例`,正文仅 `### 优先级:标题(TC-xxx)` 平铺
|
|
6
|
-
* - 每块内固定顺序:可选「测试类型 / 数据依赖」→「操作步骤」→「预期结果」
|
|
7
|
-
* - 文末可追加 `## 覆盖校验`(技能强制),导入时应忽略
|
|
8
|
-
*/
|
|
9
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
-
exports.parseTestcaseMarkdown = parseTestcaseMarkdown;
|
|
11
|
-
function normalizeNewlines(md) {
|
|
12
|
-
return md.replace(/\r\n/g, "\n");
|
|
13
|
-
}
|
|
14
|
-
/** 技能在文末追加的覆盖矩阵小节,其中含 `###`,若不截断会误解析为用例 */
|
|
15
|
-
function stripCoverageTail(md) {
|
|
16
|
-
const m = md.match(/\n##\s+覆盖校验\b/);
|
|
17
|
-
if (!m || m.index === undefined) {
|
|
18
|
-
return md;
|
|
19
|
-
}
|
|
20
|
-
return md.slice(0, m.index).trim();
|
|
21
|
-
}
|
|
22
|
-
/** 仅识别「用例行」:`### P0: xxx(TC-001)`,避免误把覆盖矩阵里的 `###` 当用例 */
|
|
23
|
-
function isTestCaseHeadingLine(line) {
|
|
24
|
-
const t = line.replace(/^###\s+/, "").trim();
|
|
25
|
-
return /\(TC-\d+\)\s*$/.test(t);
|
|
26
|
-
}
|
|
27
|
-
/**
|
|
28
|
-
* 技能约定:块内必有 `- 操作步骤:`,`- 预期结果:` 紧随其后;二者正文均为缩进编号列表。
|
|
29
|
-
* 用固定分隔符切分即可,无需通用 Markdown 解析。
|
|
30
|
-
*/
|
|
31
|
-
function parseCaseBlockBody(body) {
|
|
32
|
-
const stepsM = body.match(/- 操作步骤[::]\s*\n([\s\S]*?)(?=\n- 预期结果[::])/);
|
|
33
|
-
const expectM = body.match(/- 预期结果[::]\s*\n([\s\S]*)/);
|
|
34
|
-
const steps = stepsM?.[1]?.trim() ?? "";
|
|
35
|
-
const expected = expectM?.[1]?.trim();
|
|
36
|
-
return {
|
|
37
|
-
steps,
|
|
38
|
-
expected: expected || undefined,
|
|
39
|
-
};
|
|
40
|
-
}
|
|
41
|
-
/**
|
|
42
|
-
* 将 testcase.md 正文解析为可提交给后端的 items。
|
|
43
|
-
*/
|
|
44
|
-
function parseTestcaseMarkdown(md) {
|
|
45
|
-
const text = normalizeNewlines(md).trim();
|
|
46
|
-
if (!text) {
|
|
47
|
-
throw new Error("testcase.md 内容为空");
|
|
48
|
-
}
|
|
49
|
-
const withoutTail = stripCoverageTail(text);
|
|
50
|
-
const chunks = withoutTail.split(/\n(?=### )/);
|
|
51
|
-
const items = [];
|
|
52
|
-
for (const chunk of chunks) {
|
|
53
|
-
const block = chunk.trim();
|
|
54
|
-
if (!block.startsWith("###")) {
|
|
55
|
-
continue;
|
|
56
|
-
}
|
|
57
|
-
const lines = block.split("\n");
|
|
58
|
-
const head = lines[0];
|
|
59
|
-
if (!isTestCaseHeadingLine(head)) {
|
|
60
|
-
continue;
|
|
61
|
-
}
|
|
62
|
-
const title = head.replace(/^###\s+/, "").trim();
|
|
63
|
-
const body = lines.slice(1).join("\n");
|
|
64
|
-
const { steps, expected } = parseCaseBlockBody(body);
|
|
65
|
-
if (!steps) {
|
|
66
|
-
throw new Error(`用例「${title}」缺少「操作步骤」段落`);
|
|
67
|
-
}
|
|
68
|
-
items.push({
|
|
69
|
-
title,
|
|
70
|
-
steps,
|
|
71
|
-
expectedResult: expected,
|
|
72
|
-
});
|
|
73
|
-
}
|
|
74
|
-
if (items.length === 0) {
|
|
75
|
-
throw new Error("未解析到任何用例:请确认正文为「### 优先级:标题(TC-xxx)」且含「操作步骤」");
|
|
76
|
-
}
|
|
77
|
-
return items;
|
|
78
|
-
}
|
|
79
|
-
//# sourceMappingURL=parse-testcase-md.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"parse-testcase-md.js","sourceRoot":"","sources":["../../src/core/parse-testcase-md.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
export declare class StdoutEventHandler {
|
|
2
|
-
private onChunk;
|
|
3
|
-
cacheText: string;
|
|
4
|
-
constructor(onChunk: (chunk: any) => void);
|
|
5
|
-
onData: (chunk: Buffer) => void;
|
|
6
|
-
onEnd: () => void;
|
|
7
|
-
private log;
|
|
8
|
-
}
|
|
9
|
-
export declare class StderrEventHandler {
|
|
10
|
-
private onChunk;
|
|
11
|
-
private stderrDecoder;
|
|
12
|
-
constructor(onChunk: (chunk: any) => void);
|
|
13
|
-
onData: (chunk: Buffer) => void;
|
|
14
|
-
onEnd: () => void;
|
|
15
|
-
private log;
|
|
16
|
-
}
|
|
17
|
-
export declare class ChildProcessEventHandler {
|
|
18
|
-
private command;
|
|
19
|
-
private onChunk;
|
|
20
|
-
private errorMessage;
|
|
21
|
-
constructor(command: string, onChunk: (chunk: any) => void);
|
|
22
|
-
onClose: (code: number, signal: string) => void;
|
|
23
|
-
onError: (err: Error) => void;
|
|
24
|
-
}
|
|
25
|
-
//# sourceMappingURL=std-event-handler.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"std-event-handler.d.ts","sourceRoot":"","sources":["../../src/core/std-event-handler.ts"],"names":[],"mappings":"AAGA,qBAAa,kBAAkB;IAGjB,OAAO,CAAC,OAAO;IAF3B,SAAS,EAAE,MAAM,CAAM;gBAEH,OAAO,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI;IAEjD,MAAM,UAAW,MAAM,UAerB;IAEF,KAAK,aAOH;IAEF,OAAO,CAAC,GAAG;CAGZ;AAED,qBAAa,kBAAkB;IAGjB,OAAO,CAAC,OAAO;IAF3B,OAAO,CAAC,aAAa,CAAgB;gBAEjB,OAAO,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI;IAKjD,MAAM,UAAW,MAAM,UAMrB;IAEF,KAAK,aAKH;IAEF,OAAO,CAAC,GAAG;CAGZ;AAED,qBAAa,wBAAwB;IAEvB,OAAO,CAAC,OAAO;IAAU,OAAO,CAAC,OAAO;IADpD,OAAO,CAAC,YAAY,CAAc;gBACd,OAAO,EAAE,MAAM,EAAU,OAAO,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI;IAE1E,OAAO,SAAU,MAAM,UAAU,MAAM,UAMrC;IAEF,OAAO,QAAS,KAAK,UAOnB;CACH"}
|
|
@@ -1,90 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.ChildProcessEventHandler = exports.StderrEventHandler = exports.StdoutEventHandler = void 0;
|
|
4
|
-
const node_string_decoder_1 = require("node:string_decoder");
|
|
5
|
-
const utils_1 = require("./utils");
|
|
6
|
-
class StdoutEventHandler {
|
|
7
|
-
onChunk;
|
|
8
|
-
cacheText = "";
|
|
9
|
-
constructor(onChunk) {
|
|
10
|
-
this.onChunk = onChunk;
|
|
11
|
-
}
|
|
12
|
-
onData = (chunk) => {
|
|
13
|
-
const text = String(chunk);
|
|
14
|
-
// 输出到控制台
|
|
15
|
-
this.log(text);
|
|
16
|
-
this.cacheText += text;
|
|
17
|
-
let idx;
|
|
18
|
-
while ((idx = this.cacheText.indexOf("\n")) !== -1) {
|
|
19
|
-
const line = this.cacheText.slice(0, idx);
|
|
20
|
-
this.cacheText = this.cacheText.slice(idx + 1);
|
|
21
|
-
const ev = (0, utils_1.parseNdjsonLine)(line);
|
|
22
|
-
if (ev !== null) {
|
|
23
|
-
this.onChunk(ev);
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
};
|
|
27
|
-
onEnd = () => {
|
|
28
|
-
const rest = this.cacheText;
|
|
29
|
-
this.cacheText = "";
|
|
30
|
-
const ev = (0, utils_1.parseNdjsonLine)(rest);
|
|
31
|
-
if (ev !== null) {
|
|
32
|
-
this.onChunk(ev);
|
|
33
|
-
}
|
|
34
|
-
};
|
|
35
|
-
log(text) {
|
|
36
|
-
process.stdout.write(text);
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
exports.StdoutEventHandler = StdoutEventHandler;
|
|
40
|
-
class StderrEventHandler {
|
|
41
|
-
onChunk;
|
|
42
|
-
stderrDecoder;
|
|
43
|
-
constructor(onChunk) {
|
|
44
|
-
this.onChunk = onChunk;
|
|
45
|
-
const stderrDecoder = new node_string_decoder_1.StringDecoder("utf8");
|
|
46
|
-
this.stderrDecoder = stderrDecoder;
|
|
47
|
-
}
|
|
48
|
-
onData = (chunk) => {
|
|
49
|
-
const text = this.stderrDecoder.write(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));
|
|
50
|
-
this.log(text);
|
|
51
|
-
this.onChunk(text);
|
|
52
|
-
};
|
|
53
|
-
onEnd = () => {
|
|
54
|
-
const tail = this.stderrDecoder.end();
|
|
55
|
-
if (!tail)
|
|
56
|
-
return;
|
|
57
|
-
this.log(tail);
|
|
58
|
-
this.onChunk(tail);
|
|
59
|
-
};
|
|
60
|
-
log(text) {
|
|
61
|
-
process.stderr.write(text);
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
exports.StderrEventHandler = StderrEventHandler;
|
|
65
|
-
class ChildProcessEventHandler {
|
|
66
|
-
command;
|
|
67
|
-
onChunk;
|
|
68
|
-
errorMessage = "";
|
|
69
|
-
constructor(command, onChunk) {
|
|
70
|
-
this.command = command;
|
|
71
|
-
this.onChunk = onChunk;
|
|
72
|
-
}
|
|
73
|
-
onClose = (code, signal) => {
|
|
74
|
-
if (this.errorMessage) {
|
|
75
|
-
console.error(`[${this.command}]执行出错: ${this.errorMessage}`);
|
|
76
|
-
return;
|
|
77
|
-
}
|
|
78
|
-
console.log(`[${this.command}]执行结束, ${code} ${signal}`);
|
|
79
|
-
};
|
|
80
|
-
onError = (err) => {
|
|
81
|
-
this.errorMessage = err.message;
|
|
82
|
-
this.onChunk({
|
|
83
|
-
type: "error",
|
|
84
|
-
message: err.message,
|
|
85
|
-
at: new Date().toISOString(),
|
|
86
|
-
});
|
|
87
|
-
};
|
|
88
|
-
}
|
|
89
|
-
exports.ChildProcessEventHandler = ChildProcessEventHandler;
|
|
90
|
-
//# sourceMappingURL=std-event-handler.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"std-event-handler.js","sourceRoot":"","sources":["../../src/core/std-event-handler.ts"],"names":[],"mappings":"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"}
|
package/dist/core/utils.d.ts
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
export declare function parseNdjsonLine(line: string): unknown | null;
|
|
2
|
-
/**
|
|
3
|
-
* 统一处理来自服务端或本地的 prompt:安全字符、空白与首词拆分。
|
|
4
|
-
* 典型用法:先 `cleanPrompt`,再对 `fullText` 或 `bodyWithoutHead` 调用 `escapePromptForCliArg` 作为 agent argv。
|
|
5
|
-
*/
|
|
6
|
-
export declare function cleanPrompt(raw: string): {
|
|
7
|
-
fullText: string;
|
|
8
|
-
headToken: string;
|
|
9
|
-
bodyWithoutHead: string;
|
|
10
|
-
};
|
|
11
|
-
/**
|
|
12
|
-
* 将用户 prompt 转为适合作为 CLI 单个 argv 的字符串。
|
|
13
|
-
* Windows 下经 cmd.exe 拼接时,换行、未配对引号等易破坏解析;使用 C 风格转义
|
|
14
|
-
*(\\、\\n、\\t、\\")压成单行。Unix 下 spawn argv 虽通常可原样传递,
|
|
15
|
-
* 为与 agent 行为一致仍做相同归一化。
|
|
16
|
-
*/
|
|
17
|
-
export declare function escapePromptForCliArg(raw: string): string;
|
|
18
|
-
export declare function readPackageJson(): any;
|
|
19
|
-
//# sourceMappingURL=utils.d.ts.map
|
package/dist/core/utils.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/core/utils.ts"],"names":[],"mappings":"AAGA,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,CAiB5D;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM;;;;EAatC;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CASzD;AAED,wBAAgB,eAAe,QAM9B"}
|
package/dist/core/utils.js
DELETED
|
@@ -1,71 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.parseNdjsonLine = parseNdjsonLine;
|
|
7
|
-
exports.cleanPrompt = cleanPrompt;
|
|
8
|
-
exports.escapePromptForCliArg = escapePromptForCliArg;
|
|
9
|
-
exports.readPackageJson = readPackageJson;
|
|
10
|
-
const node_fs_1 = require("node:fs");
|
|
11
|
-
const node_path_1 = __importDefault(require("node:path"));
|
|
12
|
-
function parseNdjsonLine(line) {
|
|
13
|
-
const trimmed = line.replace(/\r$/, "").trim();
|
|
14
|
-
if (!trimmed)
|
|
15
|
-
return null;
|
|
16
|
-
let v;
|
|
17
|
-
try {
|
|
18
|
-
v = JSON.parse(trimmed);
|
|
19
|
-
}
|
|
20
|
-
catch {
|
|
21
|
-
return { type: "stdout", parseError: true, raw: trimmed };
|
|
22
|
-
}
|
|
23
|
-
if (typeof v === "string") {
|
|
24
|
-
try {
|
|
25
|
-
return JSON.parse(v);
|
|
26
|
-
}
|
|
27
|
-
catch {
|
|
28
|
-
return v;
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
return v;
|
|
32
|
-
}
|
|
33
|
-
/**
|
|
34
|
-
* 统一处理来自服务端或本地的 prompt:安全字符、空白与首词拆分。
|
|
35
|
-
* 典型用法:先 `cleanPrompt`,再对 `fullText` 或 `bodyWithoutHead` 调用 `escapePromptForCliArg` 作为 agent argv。
|
|
36
|
-
*/
|
|
37
|
-
function cleanPrompt(raw) {
|
|
38
|
-
let s = raw.replace(/\0/g, "");
|
|
39
|
-
s = s.replace(/\r\n/g, "\n").replace(/\r/g, "\n");
|
|
40
|
-
s = s.replace(/\u2028/g, "\n").replace(/\u2029/g, "\n");
|
|
41
|
-
s = s.trim();
|
|
42
|
-
const parts = s.split(/\s+/).filter(Boolean);
|
|
43
|
-
const head = parts[0] ?? "";
|
|
44
|
-
const bodyWithoutHead = parts.slice(1).join(" ").trim();
|
|
45
|
-
return {
|
|
46
|
-
fullText: s,
|
|
47
|
-
headToken: head || "unknown",
|
|
48
|
-
bodyWithoutHead,
|
|
49
|
-
};
|
|
50
|
-
}
|
|
51
|
-
/**
|
|
52
|
-
* 将用户 prompt 转为适合作为 CLI 单个 argv 的字符串。
|
|
53
|
-
* Windows 下经 cmd.exe 拼接时,换行、未配对引号等易破坏解析;使用 C 风格转义
|
|
54
|
-
*(\\、\\n、\\t、\\")压成单行。Unix 下 spawn argv 虽通常可原样传递,
|
|
55
|
-
* 为与 agent 行为一致仍做相同归一化。
|
|
56
|
-
*/
|
|
57
|
-
function escapePromptForCliArg(raw) {
|
|
58
|
-
let s = raw.replace(/\0/g, "");
|
|
59
|
-
s = s.replace(/\r\n/g, "\n").replace(/\r/g, "\n");
|
|
60
|
-
s = s.replace(/\u2028/g, "\n").replace(/\u2029/g, "\n");
|
|
61
|
-
s = s.replace(/\\/g, "\\\\");
|
|
62
|
-
s = s.replace(/\n/g, "\\n");
|
|
63
|
-
s = s.replace(/\t/g, "\\t");
|
|
64
|
-
s = s.replace(/"/g, '\\"');
|
|
65
|
-
return s;
|
|
66
|
-
}
|
|
67
|
-
function readPackageJson() {
|
|
68
|
-
const packageJson = (0, node_fs_1.readFileSync)(node_path_1.default.resolve(__dirname, "../../package.json"), "utf-8");
|
|
69
|
-
return JSON.parse(packageJson);
|
|
70
|
-
}
|
|
71
|
-
//# sourceMappingURL=utils.js.map
|
package/dist/core/utils.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/core/utils.ts"],"names":[],"mappings":";;;;;AAGA,0CAiBC;AAMD,kCAaC;AAQD,sDASC;AAED,0CAMC;AAhED,qCAAuC;AACvC,0DAA6B;AAE7B,SAAgB,eAAe,CAAC,IAAY;IAC1C,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAC/C,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAC1B,IAAI,CAAU,CAAC;IACf,IAAI,CAAC;QACH,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC1B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC;IAC5D,CAAC;IACD,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE,CAAC;QAC1B,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACvB,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,CAAC;QACX,CAAC;IACH,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAED;;;GAGG;AACH,SAAgB,WAAW,CAAC,GAAW;IACrC,IAAI,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAC/B,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAClD,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IACxD,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IACb,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC7C,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC5B,MAAM,eAAe,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IACxD,OAAO;QACL,QAAQ,EAAE,CAAC;QACX,SAAS,EAAE,IAAI,IAAI,SAAS;QAC5B,eAAe;KAChB,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,SAAgB,qBAAqB,CAAC,GAAW;IAC/C,IAAI,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAC/B,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAClD,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IACxD,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAC7B,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAC5B,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAC5B,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC3B,OAAO,CAAC,CAAC;AACX,CAAC;AAED,SAAgB,eAAe;IAC7B,MAAM,WAAW,GAAG,IAAA,sBAAY,EAC9B,mBAAI,CAAC,OAAO,CAAC,SAAS,EAAE,oBAAoB,CAAC,EAC7C,OAAO,CACR,CAAC;IACF,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;AACjC,CAAC"}
|
package/dist/core/ws-client.d.ts
DELETED
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* 员工 CLI WebSocket:与后端 `AppWebSocketGateway` 一致,
|
|
3
|
-
* 使用 URL 查询参数 `token`(`Employee.cliToken`),路径 `/ws`;
|
|
4
|
-
* 端口优先 `apm config set ws-port`,否则回退 {@link FALLBACK_EMPLOYEE_WS_PORT}。
|
|
5
|
-
*/
|
|
6
|
-
import WebSocket from "ws";
|
|
7
|
-
import { CursorCmdPayload } from "./cursor-cmd";
|
|
8
|
-
/** 与 `EmployeeWebsocketPushService.pushToEmployee` 发送格式一致 */
|
|
9
|
-
export type EmployeeWsServerMessage = {
|
|
10
|
-
event: string;
|
|
11
|
-
data: CursorCmdPayload;
|
|
12
|
-
};
|
|
13
|
-
type EmployeeWebSocketClientOptions = {
|
|
14
|
-
debug?: boolean;
|
|
15
|
-
};
|
|
16
|
-
export declare class EmployeeWebSocketClient {
|
|
17
|
-
client: WebSocket;
|
|
18
|
-
debug: boolean;
|
|
19
|
-
constructor(options?: EmployeeWebSocketClientOptions);
|
|
20
|
-
buildEmployeeWebSocketUrl(): string;
|
|
21
|
-
parseMessageData(data: Buffer): EmployeeWsServerMessage | null;
|
|
22
|
-
close: () => void;
|
|
23
|
-
onOpen: () => void;
|
|
24
|
-
onClose: (code: number, reason: Buffer) => void;
|
|
25
|
-
onError: (err: Error) => void;
|
|
26
|
-
onMessage: (data: Buffer) => void;
|
|
27
|
-
}
|
|
28
|
-
export {};
|
|
29
|
-
//# sourceMappingURL=ws-client.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ws-client.d.ts","sourceRoot":"","sources":["../../src/core/ws-client.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,SAAS,MAAM,IAAI,CAAC;AAE3B,OAAO,EAAa,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAE3D,6DAA6D;AAC7D,MAAM,MAAM,uBAAuB,GAAG;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,gBAAgB,CAAC;CACxB,CAAC;AAEF,KAAK,8BAA8B,GAAG;IACpC,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF,qBAAa,uBAAuB;IAClC,MAAM,EAAE,SAAS,CAAC;IAClB,KAAK,EAAE,OAAO,CAAC;gBAEH,OAAO,GAAE,8BAAmC;IAWxD,yBAAyB,IAAI,MAAM;IAcnC,gBAAgB,CAAC,IAAI,EAAE,MAAM;IAmB7B,KAAK,aAEH;IAEF,MAAM,aAEJ;IAEF,OAAO,SAAU,MAAM,UAAU,MAAM,UAErC;IAEF,OAAO,QAAS,KAAK,UAEnB;IAEF,SAAS,SAAU,MAAM,UAQvB;CACH"}
|
package/dist/core/ws-client.js
DELETED
|
@@ -1,81 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.EmployeeWebSocketClient = void 0;
|
|
7
|
-
/**
|
|
8
|
-
* 员工 CLI WebSocket:与后端 `AppWebSocketGateway` 一致,
|
|
9
|
-
* 使用 URL 查询参数 `token`(`Employee.cliToken`),路径 `/ws`;
|
|
10
|
-
* 端口优先 `apm config set ws-port`,否则回退 {@link FALLBACK_EMPLOYEE_WS_PORT}。
|
|
11
|
-
*/
|
|
12
|
-
const ws_1 = __importDefault(require("ws"));
|
|
13
|
-
const apm_config_1 = require("./apm-config");
|
|
14
|
-
const cursor_cmd_1 = require("./cursor-cmd");
|
|
15
|
-
class EmployeeWebSocketClient {
|
|
16
|
-
client;
|
|
17
|
-
debug;
|
|
18
|
-
constructor(options = {}) {
|
|
19
|
-
this.debug = Boolean(options.debug);
|
|
20
|
-
const url = this.buildEmployeeWebSocketUrl();
|
|
21
|
-
const client = new ws_1.default(url);
|
|
22
|
-
this.client = client;
|
|
23
|
-
client.on("open", this.onOpen);
|
|
24
|
-
client.on("close", this.onClose);
|
|
25
|
-
client.on("error", this.onError);
|
|
26
|
-
client.on("message", this.onMessage);
|
|
27
|
-
}
|
|
28
|
-
buildEmployeeWebSocketUrl() {
|
|
29
|
-
const config = (0, apm_config_1.getApmRuntimeConfig)();
|
|
30
|
-
const url = new URL(config.server.url);
|
|
31
|
-
const token = config.auth.token;
|
|
32
|
-
const port = config.server.wsPort || 4000;
|
|
33
|
-
if (!token) {
|
|
34
|
-
console.error("token 不存在,请先执行 apm login");
|
|
35
|
-
process.exit(1);
|
|
36
|
-
}
|
|
37
|
-
const wsProto = "ws:";
|
|
38
|
-
const params = new URLSearchParams({ token: token.trim() });
|
|
39
|
-
return `${wsProto}//${url.hostname}:${port}/ws?${params.toString()}`;
|
|
40
|
-
}
|
|
41
|
-
parseMessageData(data) {
|
|
42
|
-
const raw = Buffer.isBuffer(data) ? data.toString("utf8") : String(data);
|
|
43
|
-
let parsed = null;
|
|
44
|
-
try {
|
|
45
|
-
const j = JSON.parse(raw);
|
|
46
|
-
if (j &&
|
|
47
|
-
typeof j === "object" &&
|
|
48
|
-
"event" in j &&
|
|
49
|
-
typeof j.event === "string") {
|
|
50
|
-
parsed = j;
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
catch {
|
|
54
|
-
/* 非 JSON 时 parsed 保持 null */
|
|
55
|
-
}
|
|
56
|
-
return parsed;
|
|
57
|
-
}
|
|
58
|
-
close = () => {
|
|
59
|
-
this.client.close();
|
|
60
|
-
};
|
|
61
|
-
onOpen = () => {
|
|
62
|
-
console.log("已连接AI项目管理平台,等待服务指令...");
|
|
63
|
-
};
|
|
64
|
-
onClose = (code, reason) => {
|
|
65
|
-
console.log(`连接关闭 code=${code} ${reason.toString()}`);
|
|
66
|
-
};
|
|
67
|
-
onError = (err) => {
|
|
68
|
-
console.error(err.message);
|
|
69
|
-
};
|
|
70
|
-
onMessage = (data) => {
|
|
71
|
-
// 仅处理Cursor事件
|
|
72
|
-
const parsed = this.parseMessageData(data);
|
|
73
|
-
if (parsed?.event !== "cursor") {
|
|
74
|
-
return;
|
|
75
|
-
}
|
|
76
|
-
const cmd = new cursor_cmd_1.CursorCmd({ ...parsed.data, debug: this.debug });
|
|
77
|
-
cmd.execute();
|
|
78
|
-
};
|
|
79
|
-
}
|
|
80
|
-
exports.EmployeeWebSocketClient = EmployeeWebSocketClient;
|
|
81
|
-
//# sourceMappingURL=ws-client.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ws-client.js","sourceRoot":"","sources":["../../src/core/ws-client.ts"],"names":[],"mappings":"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"}
|