@uoyo/mvtt 2.0.0-beta.6 → 2.1.0
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/cli.d.ts.map +1 -1
- package/dist/cli.js +14 -6
- package/dist/cli.js.map +1 -1
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +28 -16
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/install.d.ts.map +1 -1
- package/dist/commands/install.js +64 -59
- package/dist/commands/install.js.map +1 -1
- package/dist/commands/uninstall.d.ts.map +1 -1
- package/dist/commands/uninstall.js +58 -25
- package/dist/commands/uninstall.js.map +1 -1
- package/dist/commands/update.d.ts.map +1 -1
- package/dist/commands/update.js +31 -20
- package/dist/commands/update.js.map +1 -1
- package/dist/fs/materialize.d.ts.map +1 -1
- package/dist/fs/materialize.js +3 -2
- package/dist/fs/materialize.js.map +1 -1
- package/dist/index.js +0 -1
- package/dist/index.js.map +1 -1
- package/dist/scripts/epic-update.cjs +32 -14
- package/dist/scripts/epic-update.md +57 -0
- package/dist/scripts/plan-update.cjs +54 -23
- package/dist/scripts/plan-update.md +59 -0
- package/dist/scripts/session-update.cjs +36 -17
- package/dist/types/platform.d.ts +1 -1
- package/dist/types/platform.d.ts.map +1 -1
- package/dist/types/platform.js +12 -0
- package/dist/types/platform.js.map +1 -1
- package/dist/util/bilingual.d.ts +10 -0
- package/dist/util/bilingual.d.ts.map +1 -0
- package/dist/util/bilingual.js +14 -0
- package/dist/util/bilingual.js.map +1 -0
- package/dist/util/cancel.d.ts +2 -0
- package/dist/util/cancel.d.ts.map +1 -0
- package/dist/util/cancel.js +6 -0
- package/dist/util/cancel.js.map +1 -0
- package/dist/util/color.d.ts +9 -6
- package/dist/util/color.d.ts.map +1 -1
- package/dist/util/color.js +10 -10
- package/dist/util/color.js.map +1 -1
- package/dist/util/spinner.d.ts +8 -0
- package/dist/util/spinner.d.ts.map +1 -0
- package/dist/util/spinner.js +17 -0
- package/dist/util/spinner.js.map +1 -0
- package/install-manifest.yaml +4 -0
- package/package.json +4 -3
- package/registry.yaml +72 -72
- package/sources/defaults/config.yaml +5 -0
- package/sources/scripts/epic-update.js +3 -21
- package/sources/scripts/epic-update.md +57 -0
- package/sources/scripts/plan-update.js +30 -20
- package/sources/scripts/plan-update.md +59 -0
- package/sources/scripts/session-update.js +7 -23
- package/sources/sections/activation-load-config.md +7 -10
- package/sources/sections/activation-load-context.md +15 -25
- package/sources/sections/activation-preflight.md +1 -1
- package/sources/sections/footer-next-steps.md +1 -1
- package/sources/sections/language-constraint.md +11 -0
- package/sources/sections/output-format-constraint.md +11 -14
- package/sources/sections/project-context-profile.md +29 -29
- package/sources/sections/script-usage-rule.md +32 -0
- package/sources/sections/session-update.md +24 -110
- package/sources/skills/mvt-analyze/business.md +1 -1
- package/sources/skills/mvt-analyze/manifest.yaml +7 -7
- package/sources/skills/mvt-analyze-code/manifest.yaml +7 -7
- package/sources/skills/mvt-bug-detect/manifest.yaml +3 -0
- package/sources/skills/mvt-check-context/manifest.yaml +3 -0
- package/sources/skills/mvt-cleanup/business.md +9 -0
- package/sources/skills/mvt-cleanup/manifest.yaml +6 -6
- package/sources/skills/mvt-config/business.md +1 -0
- package/sources/skills/mvt-config/manifest.yaml +4 -0
- package/sources/skills/mvt-create-skill/business.md +1 -1
- package/sources/skills/mvt-create-skill/manifest.yaml +1 -1
- package/sources/skills/mvt-decompose/business.md +18 -9
- package/sources/skills/mvt-decompose/manifest.yaml +7 -7
- package/sources/skills/mvt-design/business.md +34 -43
- package/sources/skills/mvt-design/manifest.yaml +7 -7
- package/sources/skills/mvt-fix/manifest.yaml +6 -6
- package/sources/skills/mvt-help/business.md +19 -9
- package/sources/skills/mvt-help/manifest.yaml +6 -14
- package/sources/skills/mvt-implement/business.md +27 -34
- package/sources/skills/mvt-implement/manifest.yaml +8 -14
- package/sources/skills/mvt-init/manifest.yaml +6 -6
- package/sources/skills/mvt-manage-context/manifest.yaml +1 -1
- package/sources/skills/mvt-plan-dev/business.md +12 -2
- package/sources/skills/mvt-plan-dev/manifest.yaml +7 -7
- package/sources/skills/mvt-quick-dev/manifest.yaml +1 -1
- package/sources/skills/mvt-refactor/manifest.yaml +1 -1
- package/sources/skills/mvt-resume/manifest.yaml +3 -0
- package/sources/skills/mvt-review/business.md +3 -9
- package/sources/skills/mvt-review/manifest.yaml +7 -7
- package/sources/skills/mvt-status/business.md +2 -12
- package/sources/skills/mvt-status/manifest.yaml +3 -0
- package/sources/skills/mvt-sync-context/business.md +1 -1
- package/sources/skills/mvt-sync-context/manifest.yaml +6 -6
- package/sources/skills/mvt-template/manifest.yaml +3 -0
- package/sources/skills/mvt-test/business.md +2 -10
- package/sources/skills/mvt-test/manifest.yaml +7 -7
- package/sources/skills/mvt-update-plan/business.md +12 -27
- package/sources/skills/mvt-update-plan/manifest.yaml +12 -6
- package/sources/templates/analyze-output/body.md +41 -0
- package/sources/templates/decompose-output/body.md +36 -0
- package/sources/templates/design-output/body.md +48 -0
- package/sources/templates/implement-output/body.md +48 -3
- package/sources/templates/project-context/body.md +45 -0
- package/sources/templates/review-output/body.md +59 -0
- package/sources/templates/test-output/body.md +72 -0
- package/sources/sections/output-language-constraint.md +0 -11
package/dist/cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAUA,wBAAsB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAkDvD"}
|
package/dist/cli.js
CHANGED
|
@@ -1,37 +1,45 @@
|
|
|
1
1
|
import { Command } from "commander";
|
|
2
|
+
import * as p from "@clack/prompts";
|
|
2
3
|
import { installCommand } from "./commands/install.js";
|
|
3
4
|
import { updateCommand } from "./commands/update.js";
|
|
4
5
|
import { doctorCommand } from "./commands/doctor.js";
|
|
5
6
|
import { uninstallCommand } from "./commands/uninstall.js";
|
|
6
7
|
import { getVersion } from "./commands/shared.js";
|
|
8
|
+
import { bilingual } from "./util/bilingual.js";
|
|
9
|
+
import { color } from "./util/color.js";
|
|
7
10
|
export async function run(argv) {
|
|
11
|
+
const version = getVersion();
|
|
12
|
+
const isMeta = argv.some((a) => a === "--help" || a === "-h" || a === "--version" || a === "-v" || a === "help");
|
|
13
|
+
if (isMeta && process.stdout.isTTY) {
|
|
14
|
+
p.intro(color.cyan(bilingual(`MVTT v${version} — My Virtual Tech Team`, `MVTT v${version} — 我的虚拟技术团队`)));
|
|
15
|
+
}
|
|
8
16
|
const program = new Command();
|
|
9
17
|
program
|
|
10
18
|
.name("mvtt")
|
|
11
|
-
.description("My Virtual Tech Team CLI")
|
|
19
|
+
.description(bilingual("My Virtual Tech Team CLI", "My Virtual Tech Team 命令行工具"))
|
|
12
20
|
.version(getVersion(), "-v, --version");
|
|
13
21
|
program
|
|
14
22
|
.command("install")
|
|
15
|
-
.description("Install MVTT into current project")
|
|
23
|
+
.description(bilingual("Install MVTT into current project", "将 MVTT 安装到当前项目"))
|
|
16
24
|
.action(async () => {
|
|
17
25
|
await installCommand();
|
|
18
26
|
});
|
|
19
27
|
program
|
|
20
28
|
.command("update")
|
|
21
|
-
.description("Update MVTT to latest version")
|
|
22
|
-
.option("--check", "Only report version diff, do not modify")
|
|
29
|
+
.description(bilingual("Update MVTT to latest version", "将 MVTT 更新到最新版本"))
|
|
30
|
+
.option("--check", bilingual("Only report version diff, do not modify", "仅报告版本差异,不实际修改"))
|
|
23
31
|
.action((opts) => {
|
|
24
32
|
updateCommand(opts);
|
|
25
33
|
});
|
|
26
34
|
program
|
|
27
35
|
.command("doctor")
|
|
28
|
-
.description("Check installation health")
|
|
36
|
+
.description(bilingual("Check installation health", "检查安装健康状况"))
|
|
29
37
|
.action(() => {
|
|
30
38
|
doctorCommand();
|
|
31
39
|
});
|
|
32
40
|
program
|
|
33
41
|
.command("uninstall")
|
|
34
|
-
.description("Remove MVTT generated files")
|
|
42
|
+
.description(bilingual("Remove MVTT generated files", "删除 MVTT 生成的文件"))
|
|
35
43
|
.action(async () => {
|
|
36
44
|
await uninstallCommand();
|
|
37
45
|
});
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,CAAC,MAAM,gBAAgB,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAExC,MAAM,CAAC,KAAK,UAAU,GAAG,CAAC,IAAc;IACtC,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAE7B,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CACtB,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,WAAW,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,MAAM,CACvF,CAAC;IACF,IAAI,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QACnC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAC1B,SAAS,OAAO,yBAAyB,EACzC,SAAS,OAAO,aAAa,CAC9B,CAAC,CAAC,CAAC;IACN,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;IAE9B,OAAO;SACJ,IAAI,CAAC,MAAM,CAAC;SACZ,WAAW,CAAC,SAAS,CAAC,0BAA0B,EAAE,4BAA4B,CAAC,CAAC;SAChF,OAAO,CAAC,UAAU,EAAE,EAAE,eAAe,CAAC,CAAC;IAE1C,OAAO;SACJ,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CAAC,SAAS,CAAC,mCAAmC,EAAE,gBAAgB,CAAC,CAAC;SAC7E,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,cAAc,EAAE,CAAC;IACzB,CAAC,CAAC,CAAC;IAEL,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,SAAS,CAAC,+BAA+B,EAAE,gBAAgB,CAAC,CAAC;SACzE,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC,yCAAyC,EAAE,eAAe,CAAC,CAAC;SACxF,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;QACf,aAAa,CAAC,IAAI,CAAC,CAAC;IACtB,CAAC,CAAC,CAAC;IAEL,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,SAAS,CAAC,2BAA2B,EAAE,UAAU,CAAC,CAAC;SAC/D,MAAM,CAAC,GAAG,EAAE;QACX,aAAa,EAAE,CAAC;IAClB,CAAC,CAAC,CAAC;IAEL,OAAO;SACJ,OAAO,CAAC,WAAW,CAAC;SACpB,WAAW,CAAC,SAAS,CAAC,6BAA6B,EAAE,eAAe,CAAC,CAAC;SACtE,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,gBAAgB,EAAE,CAAC;IAC3B,CAAC,CAAC,CAAC;IAEL,MAAM,OAAO,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;AACnD,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AASA,wBAAgB,aAAa,IAAI,IAAI,CAoFpC"}
|
package/dist/commands/doctor.js
CHANGED
|
@@ -1,22 +1,30 @@
|
|
|
1
1
|
import { existsSync } from "node:fs";
|
|
2
2
|
import path from "node:path";
|
|
3
|
+
import * as p from "@clack/prompts";
|
|
3
4
|
import { readInstallationManifest } from "../fs/install-manifest.js";
|
|
4
5
|
import { hashFile } from "../fs/hash.js";
|
|
5
6
|
import { getVersion } from "./shared.js";
|
|
7
|
+
import { bilingual } from "../util/bilingual.js";
|
|
6
8
|
import { color } from "../util/color.js";
|
|
7
9
|
export function doctorCommand() {
|
|
8
10
|
const projectRoot = process.cwd();
|
|
9
11
|
const version = getVersion();
|
|
10
12
|
const checks = [];
|
|
11
|
-
|
|
13
|
+
p.intro(color.cyan(bilingual(`mvtt doctor v${version}`, `mvtt doctor v${version}`)));
|
|
12
14
|
const manifest = readInstallationManifest(projectRoot);
|
|
13
15
|
if (!manifest) {
|
|
14
|
-
checks.push({
|
|
16
|
+
checks.push({
|
|
17
|
+
status: "FAIL",
|
|
18
|
+
message: bilingual(".ai-agents/.mvtt-manifest.json not found (MVTT not installed)", ".ai-agents/.mvtt-manifest.json 不存在(MVTT 尚未安装)"),
|
|
19
|
+
});
|
|
15
20
|
report(checks);
|
|
16
21
|
process.exit(1);
|
|
17
22
|
return;
|
|
18
23
|
}
|
|
19
|
-
checks.push({
|
|
24
|
+
checks.push({
|
|
25
|
+
status: "PASS",
|
|
26
|
+
message: bilingual(`.mvtt-manifest.json exists (v${manifest.mvtt_version})`, `.mvtt-manifest.json 存在(v${manifest.mvtt_version})`),
|
|
27
|
+
});
|
|
20
28
|
let missing = 0;
|
|
21
29
|
let modified = 0;
|
|
22
30
|
let total = 0;
|
|
@@ -25,19 +33,22 @@ export function doctorCommand() {
|
|
|
25
33
|
const absPath = path.resolve(projectRoot, relPath);
|
|
26
34
|
if (!existsSync(absPath)) {
|
|
27
35
|
missing++;
|
|
28
|
-
checks.push({ status: "FAIL", message: `Missing file: ${relPath}` });
|
|
36
|
+
checks.push({ status: "FAIL", message: bilingual(`Missing file: ${relPath}`, `缺少文件:${relPath}`) });
|
|
29
37
|
continue;
|
|
30
38
|
}
|
|
31
39
|
if (record.category === "generated") {
|
|
32
40
|
const currentHash = hashFile(absPath);
|
|
33
41
|
if (currentHash !== record.hash) {
|
|
34
42
|
modified++;
|
|
35
|
-
checks.push({ status: "WARN", message: `Manually modified: ${relPath}` });
|
|
43
|
+
checks.push({ status: "WARN", message: bilingual(`Manually modified: ${relPath}`, `已被手动修改:${relPath}`) });
|
|
36
44
|
}
|
|
37
45
|
}
|
|
38
46
|
}
|
|
39
47
|
if (missing === 0 && modified === 0) {
|
|
40
|
-
checks.push({
|
|
48
|
+
checks.push({
|
|
49
|
+
status: "PASS",
|
|
50
|
+
message: bilingual(`All ${total} tracked files present and unmodified`, `全部 ${total} 个跟踪文件均存在且未被修改`),
|
|
51
|
+
});
|
|
41
52
|
}
|
|
42
53
|
const userDirs = [
|
|
43
54
|
".ai-agents/workspace",
|
|
@@ -49,12 +60,12 @@ export function doctorCommand() {
|
|
|
49
60
|
let userDirsOk = true;
|
|
50
61
|
for (const dir of userDirs) {
|
|
51
62
|
if (!existsSync(path.resolve(projectRoot, dir))) {
|
|
52
|
-
checks.push({ status: "WARN", message: `User data dir missing: ${dir}` });
|
|
63
|
+
checks.push({ status: "WARN", message: bilingual(`User data dir missing: ${dir}`, `用户数据目录缺失:${dir}`) });
|
|
53
64
|
userDirsOk = false;
|
|
54
65
|
}
|
|
55
66
|
}
|
|
56
67
|
if (userDirsOk) {
|
|
57
|
-
checks.push({ status: "PASS", message: "All user data directories present" });
|
|
68
|
+
checks.push({ status: "PASS", message: bilingual("All user data directories present", "所有用户数据目录均存在") });
|
|
58
69
|
}
|
|
59
70
|
report(checks);
|
|
60
71
|
const errors = checks.filter((c) => c.status === "FAIL").length;
|
|
@@ -63,16 +74,17 @@ export function doctorCommand() {
|
|
|
63
74
|
}
|
|
64
75
|
function report(checks) {
|
|
65
76
|
for (const c of checks) {
|
|
66
|
-
const
|
|
67
|
-
|
|
68
|
-
: c.status === "WARN"
|
|
69
|
-
? color.yellow(`[${c.status}]`)
|
|
70
|
-
: color.red(`[${c.status}]`);
|
|
71
|
-
console.log(`${tag} ${c.message}`);
|
|
77
|
+
const fn = c.status === "PASS" ? p.log.success : c.status === "WARN" ? p.log.warn : p.log.error;
|
|
78
|
+
fn(`[${c.status}] ${c.message}`);
|
|
72
79
|
}
|
|
73
80
|
const errors = checks.filter((c) => c.status === "FAIL").length;
|
|
74
81
|
const warnings = checks.filter((c) => c.status === "WARN").length;
|
|
75
|
-
const summary =
|
|
76
|
-
|
|
82
|
+
const summary = bilingual(`Summary: ${warnings} warning${warnings === 1 ? "" : "s"}, ${errors} error${errors === 1 ? "" : "s"}`, `汇总:${warnings} 个警告,${errors} 个错误`);
|
|
83
|
+
if (errors > 0)
|
|
84
|
+
p.log.error(summary);
|
|
85
|
+
else if (warnings > 0)
|
|
86
|
+
p.log.warn(summary);
|
|
87
|
+
else
|
|
88
|
+
p.log.success(summary);
|
|
77
89
|
}
|
|
78
90
|
//# sourceMappingURL=doctor.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAEzC,MAAM,UAAU,aAAa;IAC3B,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAClC,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAC7B,MAAM,MAAM,GAAiE,EAAE,CAAC;IAEhF,
|
|
1
|
+
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"AAkBA,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAyFpD"}
|
package/dist/commands/install.js
CHANGED
|
@@ -1,92 +1,97 @@
|
|
|
1
1
|
import path from "node:path";
|
|
2
2
|
import { readFileSync, writeFileSync } from "node:fs";
|
|
3
|
-
import
|
|
3
|
+
import * as p from "@clack/prompts";
|
|
4
4
|
import { materializeProject } from "../fs/materialize.js";
|
|
5
5
|
import { manifestPath, readInstallationManifest, writeInstallationManifest, } from "../fs/install-manifest.js";
|
|
6
6
|
import { getPackageRoot, getVersion } from "./shared.js";
|
|
7
7
|
import { color } from "../util/color.js";
|
|
8
|
+
import { bilingual } from "../util/bilingual.js";
|
|
8
9
|
import { PLATFORMS, DEFAULT_PLATFORMS } from "../types/platform.js";
|
|
10
|
+
import { cancelled } from "../util/cancel.js";
|
|
9
11
|
export async function installCommand() {
|
|
10
12
|
const projectRoot = process.cwd();
|
|
11
13
|
const packageRoot = getPackageRoot();
|
|
12
14
|
const version = getVersion();
|
|
13
15
|
const existing = readInstallationManifest(projectRoot);
|
|
14
16
|
if (existing) {
|
|
15
|
-
console.error(`MVTT is already installed (v${existing.mvtt_version}). Use \`mvtt update\` to update
|
|
17
|
+
console.error(bilingual(`MVTT is already installed (v${existing.mvtt_version}). Use \`mvtt update\` to update.`, `MVTT 已经安装(v${existing.mvtt_version})。请使用 \`mvtt update\` 进行更新。`));
|
|
16
18
|
process.exit(1);
|
|
17
19
|
}
|
|
20
|
+
p.intro(color.cyan(bilingual(`MVTT Installer — v${version}`, `MVTT 安装器 — v${version}`)));
|
|
18
21
|
const interactionLanguage = await selectLanguage("interaction");
|
|
19
22
|
const documentLanguage = await selectLanguage("document", interactionLanguage);
|
|
20
23
|
const platforms = await selectPlatforms();
|
|
21
|
-
console.log(`Installing MVTT v${version} into ${projectRoot}...`);
|
|
22
|
-
const materialized = materializeProject({
|
|
23
|
-
packageRoot,
|
|
24
|
-
projectRoot,
|
|
25
|
-
platforms,
|
|
26
|
-
overwriteCreateOnce: false,
|
|
27
|
-
});
|
|
28
24
|
const configPath = path.resolve(projectRoot, ".ai-agents/config.yaml");
|
|
29
|
-
let
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
25
|
+
let materialized;
|
|
26
|
+
await p.tasks([
|
|
27
|
+
{
|
|
28
|
+
title: bilingual(`Materializing ${platforms.length} platform(s)`, `正在生成 ${platforms.length} 个平台的文件`),
|
|
29
|
+
task: async () => {
|
|
30
|
+
materialized = materializeProject({
|
|
31
|
+
packageRoot,
|
|
32
|
+
projectRoot,
|
|
33
|
+
platforms,
|
|
34
|
+
overwriteCreateOnce: false,
|
|
35
|
+
});
|
|
36
|
+
return bilingual(`${materialized.length} files written`, `已写入 ${materialized.length} 个文件`);
|
|
37
|
+
},
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
title: bilingual(`Writing config (interaction: ${interactionLanguage}, document: ${documentLanguage})`, `正在写入配置(交互:${interactionLanguage},文档:${documentLanguage})`),
|
|
41
|
+
task: async () => {
|
|
42
|
+
let config = readFileSync(configPath, "utf-8");
|
|
43
|
+
config = config.replace(/interaction_language:\s*en-US/, `interaction_language: ${interactionLanguage}`);
|
|
44
|
+
config = config.replace(/document_output_language:\s*en-US/, `document_output_language: ${documentLanguage}`);
|
|
45
|
+
writeFileSync(configPath, config, "utf-8");
|
|
46
|
+
return bilingual("Config updated", "配置已更新");
|
|
47
|
+
},
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
title: bilingual("Writing installation manifest", "正在写入安装清单"),
|
|
51
|
+
task: async () => {
|
|
52
|
+
writeInstallationManifest(projectRoot, version, materialized, null, platforms);
|
|
53
|
+
return bilingual("Manifest written", "清单已写入");
|
|
54
|
+
},
|
|
55
|
+
},
|
|
56
|
+
]);
|
|
34
57
|
const generatedCount = materialized.filter((f) => f.category === "generated").length;
|
|
35
58
|
const createOnceCount = materialized.filter((f) => f.category === "create_once").length;
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
console.log(` Interaction language: ${interactionLanguage}`);
|
|
40
|
-
console.log(` Document output language: ${documentLanguage}`);
|
|
41
|
-
console.log(` Platforms: ${platforms.join(", ")}`);
|
|
42
|
-
console.log(` Manifest: ${color.gray(path.relative(projectRoot, manifestPath(projectRoot)))}`);
|
|
43
|
-
console.log(`\n${color.bold("Next steps:")}`);
|
|
44
|
-
console.log(` Run ${color.cyan("/mvt-init")} in your AI IDE to initialize the project`);
|
|
59
|
+
p.log.info(bilingual(`${generatedCount} generated · ${createOnceCount} user-editable · ${platforms.length} platform(s)`, `${generatedCount} 个生成文件 · ${createOnceCount} 个用户可编辑文件 · ${platforms.length} 个平台`));
|
|
60
|
+
p.log.info(bilingual(`Manifest: ${path.relative(projectRoot, manifestPath(projectRoot))}`, `清单路径:${path.relative(projectRoot, manifestPath(projectRoot))}`));
|
|
61
|
+
p.outro(color.green(bilingual(`Next: run /mvt-init in your AI IDE`, `下一步:在你的 AI IDE 中运行 /mvt-init`)));
|
|
45
62
|
}
|
|
46
63
|
async function selectLanguage(kind, fallback) {
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
: 0;
|
|
55
|
-
const response = await prompts({
|
|
56
|
-
type: "select",
|
|
57
|
-
name: "language",
|
|
64
|
+
const baseMessage = kind === "interaction"
|
|
65
|
+
? bilingual("Interaction language (chat replies, prompts)", "交互语言")
|
|
66
|
+
: bilingual("Document output language (artifacts, project-context.md)", "文档输出语言(artifacts、project-context.md)");
|
|
67
|
+
const message = kind === "document" && fallback
|
|
68
|
+
? `${baseMessage} [${bilingual(`default: ${fallback}`, `默认:${fallback}`)}]`
|
|
69
|
+
: baseMessage;
|
|
70
|
+
const response = await p.select({
|
|
58
71
|
message,
|
|
59
|
-
|
|
60
|
-
{
|
|
61
|
-
{
|
|
72
|
+
options: [
|
|
73
|
+
{ value: "en-US", label: bilingual("English (en-US)", "English (en-US)") },
|
|
74
|
+
{ value: "zh-CN", label: bilingual("中文 (zh-CN)", "中文 (zh-CN)") },
|
|
62
75
|
],
|
|
63
|
-
|
|
64
|
-
}, {
|
|
65
|
-
onCancel: () => {
|
|
66
|
-
throw new Error("Cancelled");
|
|
67
|
-
},
|
|
76
|
+
initialValue: kind === "document" && fallback ? fallback : "en-US",
|
|
68
77
|
});
|
|
69
|
-
|
|
78
|
+
if (p.isCancel(response))
|
|
79
|
+
cancelled();
|
|
80
|
+
return response;
|
|
70
81
|
}
|
|
71
82
|
async function selectPlatforms() {
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
message: "Target AI platforms / 目标 AI 平台",
|
|
78
|
-
choices: PLATFORMS.map((p) => ({
|
|
79
|
-
title: `${p.dir} — ${p.description}`,
|
|
80
|
-
value: p.id,
|
|
81
|
-
selected: true,
|
|
83
|
+
const response = await p.multiselect({
|
|
84
|
+
message: bilingual("Target AI platforms", "目标 AI 平台"),
|
|
85
|
+
options: PLATFORMS.map((pl) => ({
|
|
86
|
+
value: pl.id,
|
|
87
|
+
label: `${pl.dir} — ${pl.description}`,
|
|
82
88
|
})),
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
onCancel: () => {
|
|
86
|
-
throw new Error("Cancelled");
|
|
87
|
-
},
|
|
89
|
+
initialValues: DEFAULT_PLATFORMS,
|
|
90
|
+
required: true,
|
|
88
91
|
});
|
|
89
|
-
|
|
92
|
+
if (p.isCancel(response))
|
|
93
|
+
cancelled();
|
|
94
|
+
const selected = response;
|
|
90
95
|
return selected.length > 0 ? selected : DEFAULT_PLATFORMS;
|
|
91
96
|
}
|
|
92
97
|
//# sourceMappingURL=install.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACtD,OAAO,
|
|
1
|
+
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"uninstall.d.ts","sourceRoot":"","sources":["../../src/commands/uninstall.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"uninstall.d.ts","sourceRoot":"","sources":["../../src/commands/uninstall.ts"],"names":[],"mappings":"AAsBA,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC,CAwEtD"}
|
|
@@ -1,32 +1,47 @@
|
|
|
1
1
|
import { existsSync, readdirSync, rmSync, statSync, unlinkSync } from "node:fs";
|
|
2
2
|
import path from "node:path";
|
|
3
|
-
import
|
|
3
|
+
import * as p from "@clack/prompts";
|
|
4
4
|
import { manifestPath, readInstallationManifest, readInstalledPlatforms } from "../fs/install-manifest.js";
|
|
5
5
|
import { PLATFORMS, getPlatformById } from "../types/platform.js";
|
|
6
|
+
import { bilingual } from "../util/bilingual.js";
|
|
7
|
+
import { cancelled } from "../util/cancel.js";
|
|
8
|
+
import { color } from "../util/color.js";
|
|
9
|
+
const USER_DATA_PATHS = [
|
|
10
|
+
".ai-agents/workspace",
|
|
11
|
+
".ai-agents/skills/_templates/custom",
|
|
12
|
+
".ai-agents/knowledge/principle",
|
|
13
|
+
".ai-agents/knowledge/project",
|
|
14
|
+
".ai-agents/knowledge/core/user",
|
|
15
|
+
".ai-agents/config.yaml",
|
|
16
|
+
".ai-agents/registry.yaml",
|
|
17
|
+
".ai-agents/knowledge/core/manifest.yaml",
|
|
18
|
+
".ai-agents/workspace/session.yaml",
|
|
19
|
+
".ai-agents/workspace/project-context.yaml",
|
|
20
|
+
];
|
|
6
21
|
export async function uninstallCommand() {
|
|
7
22
|
const projectRoot = process.cwd();
|
|
8
23
|
const manifest = readInstallationManifest(projectRoot);
|
|
9
24
|
if (!manifest) {
|
|
10
|
-
console.error(
|
|
25
|
+
console.error(bilingual("MVTT is not installed in this project.", "MVTT 尚未安装到当前项目。"));
|
|
11
26
|
process.exit(1);
|
|
12
27
|
}
|
|
13
28
|
const generated = Object.entries(manifest.files).filter(([, r]) => r.category === "generated");
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
console.log(`\nUser data (workspace/, custom/, principle/, project/, config.yaml) will be PRESERVED.`);
|
|
29
|
+
p.intro(color.cyan(bilingual(`MVTT Uninstaller — ${generated.length} file(s) to remove`, `MVTT 卸载器 — 将删除 ${generated.length} 个文件`)));
|
|
30
|
+
p.log.info(bilingual(`By default, user data will be PRESERVED (workspace/, custom skills, principle/, project/, config.yaml, ...).`, `默认情况下将保留用户数据(工作区、自定义技能、原则、项目、config.yaml 等)。`));
|
|
31
|
+
p.log.info(bilingual("You will be asked whether to also remove user data.", "接下来会询问是否一并删除用户数据。"));
|
|
18
32
|
const confirmed = await confirmUninstall();
|
|
19
|
-
if (!confirmed) {
|
|
20
|
-
|
|
33
|
+
if (p.isCancel(confirmed) || !confirmed) {
|
|
34
|
+
p.cancel(bilingual("Uninstall cancelled.", "已取消卸载。"));
|
|
21
35
|
return;
|
|
22
36
|
}
|
|
37
|
+
const preserveUserData = await confirmUserDataPreservation();
|
|
38
|
+
if (p.isCancel(preserveUserData))
|
|
39
|
+
cancelled();
|
|
23
40
|
for (const [rel] of generated) {
|
|
24
41
|
const abs = path.resolve(projectRoot, rel);
|
|
25
42
|
if (existsSync(abs))
|
|
26
43
|
unlinkSync(abs);
|
|
27
44
|
}
|
|
28
|
-
// Clean up residual mvt-* directories across all known platforms.
|
|
29
|
-
// Fall back to all known platforms if manifest is unreadable.
|
|
30
45
|
const installedPlatforms = readInstalledPlatforms(projectRoot);
|
|
31
46
|
const platformIds = installedPlatforms.length > 0
|
|
32
47
|
? installedPlatforms
|
|
@@ -45,24 +60,42 @@ export async function uninstallCommand() {
|
|
|
45
60
|
}
|
|
46
61
|
}
|
|
47
62
|
}
|
|
63
|
+
if (!preserveUserData) {
|
|
64
|
+
removeUserData(projectRoot);
|
|
65
|
+
}
|
|
48
66
|
unlinkSync(manifestPath(projectRoot));
|
|
49
|
-
|
|
67
|
+
p.outro(color.green(preserveUserData
|
|
68
|
+
? bilingual("Uninstall complete. User data preserved.", "卸载完成。已保留用户数据。")
|
|
69
|
+
: bilingual("Uninstall complete. All MVTT data removed.", "卸载完成。已删除所有 MVTT 数据。")));
|
|
50
70
|
}
|
|
51
71
|
async function confirmUninstall() {
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
72
|
+
return p.confirm({
|
|
73
|
+
message: bilingual("Proceed with uninstall?", "确认卸载?"),
|
|
74
|
+
active: bilingual("Yes, remove", "是,删除"),
|
|
75
|
+
inactive: bilingual("No, keep", "否,保留"),
|
|
76
|
+
initialValue: false,
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
async function confirmUserDataPreservation() {
|
|
80
|
+
return p.confirm({
|
|
81
|
+
message: bilingual("Preserve user data?", "是否保留用户数据?"),
|
|
82
|
+
active: bilingual("Yes, preserve", "是,保留"),
|
|
83
|
+
inactive: bilingual("No, remove all", "否,全部删除"),
|
|
84
|
+
initialValue: true,
|
|
65
85
|
});
|
|
66
|
-
|
|
86
|
+
}
|
|
87
|
+
function removeUserData(projectRoot) {
|
|
88
|
+
for (const rel of USER_DATA_PATHS) {
|
|
89
|
+
const abs = path.resolve(projectRoot, rel);
|
|
90
|
+
if (!existsSync(abs))
|
|
91
|
+
continue;
|
|
92
|
+
const stat = statSync(abs);
|
|
93
|
+
if (stat.isDirectory()) {
|
|
94
|
+
rmSync(abs, { recursive: true, force: true });
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
unlinkSync(abs);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
67
100
|
}
|
|
68
101
|
//# sourceMappingURL=uninstall.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"uninstall.js","sourceRoot":"","sources":["../../src/commands/uninstall.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAChF,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,
|
|
1
|
+
{"version":3,"file":"uninstall.js","sourceRoot":"","sources":["../../src/commands/uninstall.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"AAaA,MAAM,WAAW,aAAa;IAC5B,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,wBAAgB,aAAa,CAAC,OAAO,GAAE,aAAkB,GAAG,IAAI,CA+F/D"}
|