wangchuan 2.3.0 → 2.4.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/bin/wangchuan.d.ts +2 -2
- package/dist/bin/wangchuan.js +24 -24
- package/dist/bin/wangchuan.js.map +1 -1
- package/dist/src/commands/diff.d.ts +3 -3
- package/dist/src/commands/diff.js +15 -15
- package/dist/src/commands/diff.js.map +1 -1
- package/dist/src/commands/dump.d.ts +3 -3
- package/dist/src/commands/dump.d.ts.map +1 -1
- package/dist/src/commands/dump.js +11 -14
- package/dist/src/commands/dump.js.map +1 -1
- package/dist/src/commands/init.d.ts +1 -1
- package/dist/src/commands/init.d.ts.map +1 -1
- package/dist/src/commands/init.js +22 -23
- package/dist/src/commands/init.js.map +1 -1
- package/dist/src/commands/list.d.ts +3 -3
- package/dist/src/commands/list.d.ts.map +1 -1
- package/dist/src/commands/list.js +10 -11
- package/dist/src/commands/list.js.map +1 -1
- package/dist/src/commands/pull.d.ts +1 -1
- package/dist/src/commands/pull.js +17 -17
- package/dist/src/commands/pull.js.map +1 -1
- package/dist/src/commands/push.d.ts +1 -1
- package/dist/src/commands/push.js +20 -20
- package/dist/src/commands/push.js.map +1 -1
- package/dist/src/commands/status.d.ts +1 -1
- package/dist/src/commands/status.js +25 -25
- package/dist/src/commands/status.js.map +1 -1
- package/dist/src/core/migrate.js +13 -13
- package/dist/src/core/migrate.js.map +1 -1
- package/dist/src/core/sync.js +10 -10
- package/dist/src/core/sync.js.map +1 -1
- package/dist/src/utils/prompt.d.ts +6 -6
- package/dist/src/utils/prompt.d.ts.map +1 -1
- package/dist/src/utils/prompt.js +10 -11
- package/dist/src/utils/prompt.js.map +1 -1
- package/dist/src/utils/validator.d.ts +3 -4
- package/dist/src/utils/validator.d.ts.map +1 -1
- package/dist/src/utils/validator.js +4 -4
- package/dist/src/utils/validator.js.map +1 -1
- package/package.json +1 -1
- package/skill/SKILL.md +42 -48
- package/skill/wangchuan-skill.sh +14 -13
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* pull.ts — wangchuan pull 命令
|
|
2
|
+
* pull.ts — wangchuan pull command / pull 命令
|
|
3
3
|
*/
|
|
4
4
|
import { config } from '../core/config.js';
|
|
5
5
|
import { ensureMigrated } from '../core/migrate.js';
|
|
@@ -10,54 +10,54 @@ import { logger } from '../utils/logger.js';
|
|
|
10
10
|
import chalk from 'chalk';
|
|
11
11
|
import ora from 'ora';
|
|
12
12
|
export async function cmdPull({ agent } = {}) {
|
|
13
|
-
logger.banner('忘川 · 拉取配置');
|
|
13
|
+
logger.banner('Wangchuan · Pull / 忘川 · 拉取配置');
|
|
14
14
|
let cfg = config.load();
|
|
15
15
|
validator.requireInit(cfg);
|
|
16
16
|
cfg = ensureMigrated(cfg);
|
|
17
17
|
const repoPath = syncEngine.expandHome(cfg.localRepoPath);
|
|
18
18
|
if (agent)
|
|
19
|
-
logger.info(
|
|
19
|
+
logger.info(`Filter agent / 过滤智能体: ${chalk.cyan(agent)}`);
|
|
20
20
|
// ── 1. git pull ────────────────────────────────────────────
|
|
21
|
-
let spinner = ora(
|
|
21
|
+
let spinner = ora(`Pulling from / 从 ${cfg.repo} 拉取 …`).start();
|
|
22
22
|
try {
|
|
23
23
|
await gitEngine.pull(repoPath, cfg.branch);
|
|
24
|
-
spinner.succeed('远端配置已拉取');
|
|
24
|
+
spinner.succeed('Remote configs pulled / 远端配置已拉取');
|
|
25
25
|
}
|
|
26
26
|
catch (err) {
|
|
27
|
-
spinner.fail('Git 拉取失败');
|
|
28
|
-
throw new Error(`Git pull 失败: ${err.message}`);
|
|
27
|
+
spinner.fail('Git pull failed / Git 拉取失败');
|
|
28
|
+
throw new Error(`Git pull failed / Git pull 失败: ${err.message}`);
|
|
29
29
|
}
|
|
30
|
-
// ── 2. 还原文件
|
|
31
|
-
spinner.stop();
|
|
30
|
+
// ── 2. Restore files / 还原文件 ────────────────────────────
|
|
31
|
+
spinner.stop();
|
|
32
32
|
let result;
|
|
33
33
|
try {
|
|
34
34
|
result = await syncEngine.restoreFromRepo(cfg, agent);
|
|
35
35
|
}
|
|
36
36
|
catch (err) {
|
|
37
|
-
throw new Error(
|
|
37
|
+
throw new Error(`Restore failed / 还原失败: ${err.message}`);
|
|
38
38
|
}
|
|
39
|
-
// ── 3. 输出结果
|
|
39
|
+
// ── 3. Output / 输出结果 ────────────────────────────────────
|
|
40
40
|
console.log();
|
|
41
41
|
if (result.synced.length === 0 && result.skipped.length > 0) {
|
|
42
|
-
logger.info('
|
|
42
|
+
logger.info('No configs in repo yet, run wangchuan push first / 仓库中暂无配置,请先 push');
|
|
43
43
|
return result;
|
|
44
44
|
}
|
|
45
45
|
for (const f of result.synced) {
|
|
46
|
-
const label = result.decrypted.includes(f) ? chalk.gray('[
|
|
46
|
+
const label = result.decrypted.includes(f) ? chalk.gray('[decrypted/已解密]') : '';
|
|
47
47
|
logger.ok(` ${chalk.green(f)} ${label}`);
|
|
48
48
|
}
|
|
49
49
|
if (result.skipped.length > 0) {
|
|
50
|
-
logger.info(`\
|
|
50
|
+
logger.info(`\nSkipped (not in repo) / 跳过(仓库中不存在): ${result.skipped.length} files/个文件`);
|
|
51
51
|
}
|
|
52
52
|
if (result.localOnly.length > 0) {
|
|
53
53
|
console.log();
|
|
54
|
-
logger.warn(
|
|
54
|
+
logger.warn(`Detected ${result.localOnly.length} local-only files / 检测到 ${result.localOnly.length} 个本地独有文件:`);
|
|
55
55
|
for (const f of result.localOnly) {
|
|
56
56
|
logger.warn(` ${chalk.yellow(f)}`);
|
|
57
57
|
}
|
|
58
|
-
logger.info('如需同步到云端,请执行 wangchuan push');
|
|
58
|
+
logger.info('Run wangchuan push to sync / 如需同步到云端,请执行 wangchuan push');
|
|
59
59
|
}
|
|
60
|
-
logger.ok(`\
|
|
60
|
+
logger.ok(`\nSynced ${result.synced.length} files (${result.decrypted.length} encrypted, ${result.conflicts.length} conflicts) / 共同步 ${result.synced.length} 个文件`);
|
|
61
61
|
return result;
|
|
62
62
|
}
|
|
63
63
|
//# sourceMappingURL=pull.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pull.js","sourceRoot":"","sources":["../../../src/commands/pull.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAe,mBAAmB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAO,oBAAoB,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAY,gBAAgB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAW,iBAAiB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAY,uBAAuB,CAAC;AACxD,OAAO,EAAE,MAAM,EAAE,MAAe,oBAAoB,CAAC;AAErD,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAQ,KAAK,CAAC;AAExB,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,EAAE,KAAK,KAAkB,EAAE;IACvD,MAAM,CAAC,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"pull.js","sourceRoot":"","sources":["../../../src/commands/pull.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* push.ts — wangchuan push 命令
|
|
2
|
+
* push.ts — wangchuan push command / push 命令
|
|
3
3
|
*/
|
|
4
4
|
import os from 'os';
|
|
5
5
|
import { config } from '../core/config.js';
|
|
@@ -11,69 +11,69 @@ import { logger } from '../utils/logger.js';
|
|
|
11
11
|
import chalk from 'chalk';
|
|
12
12
|
import ora from 'ora';
|
|
13
13
|
export async function cmdPush({ message, agent } = {}) {
|
|
14
|
-
logger.banner('忘川 · 推送配置');
|
|
14
|
+
logger.banner('Wangchuan · Push / 忘川 · 推送配置');
|
|
15
15
|
let cfg = config.load();
|
|
16
16
|
validator.requireInit(cfg);
|
|
17
17
|
cfg = ensureMigrated(cfg);
|
|
18
18
|
const repoPath = syncEngine.expandHome(cfg.localRepoPath);
|
|
19
19
|
const hostname = cfg.hostname || os.hostname();
|
|
20
20
|
if (agent)
|
|
21
|
-
logger.info(
|
|
21
|
+
logger.info(`Filter agent / 过滤智能体: ${chalk.cyan(agent)}`);
|
|
22
22
|
const agentTag = agent ? `[${agent}]` : '';
|
|
23
23
|
const msg = message
|
|
24
24
|
? `sync: ${message} / update ${agentTag}[${hostname}]`.trimEnd()
|
|
25
25
|
: `sync: 更新配置 / update configs ${agentTag}[${hostname}]`.trimEnd();
|
|
26
|
-
// ── 1. 工作区 → 仓库目录
|
|
27
|
-
let spinner = ora('加密并准备配置文件 …').start();
|
|
26
|
+
// ── 1. Workspace → repo dir / 工作区 → 仓库目录 ────────────────
|
|
27
|
+
let spinner = ora('Encrypting and staging files … / 加密并准备配置文件 …').start();
|
|
28
28
|
let stageResult;
|
|
29
29
|
try {
|
|
30
30
|
stageResult = await syncEngine.stageToRepo(cfg, agent);
|
|
31
|
-
spinner.succeed(
|
|
31
|
+
spinner.succeed(`Staged ${stageResult.synced.length} files / 已准备 ${stageResult.synced.length} 个文件`);
|
|
32
32
|
}
|
|
33
33
|
catch (err) {
|
|
34
|
-
spinner.fail('暂存文件失败');
|
|
35
|
-
throw new Error(
|
|
34
|
+
spinner.fail('Staging failed / 暂存文件失败');
|
|
35
|
+
throw new Error(`Staging failed / 准备文件失败: ${err.message}`);
|
|
36
36
|
}
|
|
37
37
|
if (stageResult.synced.length === 0 && stageResult.deleted.length === 0) {
|
|
38
|
-
logger.info('
|
|
38
|
+
logger.info('No syncable files found, check workspace paths / 没有可同步的文件,请检查工作区路径');
|
|
39
39
|
return { committed: false, pushed: false };
|
|
40
40
|
}
|
|
41
41
|
// ── 2. commit + push ────────────────────────────────────────
|
|
42
|
-
spinner = ora('提交并推送到远端仓库 …').start();
|
|
42
|
+
spinner = ora('Committing and pushing … / 提交并推送到远端仓库 …').start();
|
|
43
43
|
let pushResult;
|
|
44
44
|
try {
|
|
45
45
|
pushResult = await gitEngine.commitAndPush(repoPath, msg, cfg.branch);
|
|
46
46
|
if (pushResult.committed) {
|
|
47
|
-
spinner.succeed(
|
|
47
|
+
spinner.succeed(`Pushed to / 已推送到 ${cfg.repo}`);
|
|
48
48
|
}
|
|
49
49
|
else {
|
|
50
|
-
spinner.info('
|
|
50
|
+
spinner.info('Nothing to commit (repo is up to date) / 没有变更需要提交');
|
|
51
51
|
}
|
|
52
52
|
}
|
|
53
53
|
catch (err) {
|
|
54
|
-
spinner.fail('推送失败,正在回滚 …');
|
|
54
|
+
spinner.fail('Push failed, rolling back … / 推送失败,正在回滚 …');
|
|
55
55
|
try {
|
|
56
56
|
await gitEngine.rollback(repoPath);
|
|
57
57
|
}
|
|
58
58
|
catch (re) {
|
|
59
|
-
logger.error(
|
|
59
|
+
logger.error(`Rollback failed / 回滚失败: ${re.message}`);
|
|
60
60
|
}
|
|
61
|
-
throw new Error(
|
|
61
|
+
throw new Error(`Push failed / 推送失败: ${err.message}`);
|
|
62
62
|
}
|
|
63
|
-
// ── 3. 输出汇总
|
|
63
|
+
// ── 3. Summary / 输出汇总 ─────────────────────────────────────
|
|
64
64
|
if (pushResult.committed) {
|
|
65
65
|
console.log();
|
|
66
66
|
for (const f of stageResult.synced) {
|
|
67
|
-
const label = stageResult.encrypted.includes(f) ? chalk.gray('[
|
|
67
|
+
const label = stageResult.encrypted.includes(f) ? chalk.gray('[encrypted/已加密]') : '';
|
|
68
68
|
logger.ok(` ${chalk.green(f)} ${label}`);
|
|
69
69
|
}
|
|
70
70
|
for (const f of stageResult.deleted) {
|
|
71
|
-
logger.info(` ${chalk.red('✕ ' + f)} ${chalk.gray('[
|
|
71
|
+
logger.info(` ${chalk.red('✕ ' + f)} ${chalk.gray('[pruned/已清理]')}`);
|
|
72
72
|
}
|
|
73
73
|
const delTag = stageResult.deleted.length > 0
|
|
74
|
-
?
|
|
74
|
+
? `, pruned ${stageResult.deleted.length} stale / 清理 ${stageResult.deleted.length} 个过期文件`
|
|
75
75
|
: '';
|
|
76
|
-
logger.ok(`\
|
|
76
|
+
logger.ok(`\nPush complete: ${stageResult.synced.length} files${delTag}, commit: ${pushResult.sha ?? '-'}`);
|
|
77
77
|
}
|
|
78
78
|
return { ...pushResult, stageResult };
|
|
79
79
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"push.js","sourceRoot":"","sources":["../../../src/commands/push.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,MAAM,EAAE,MAAe,mBAAmB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAO,oBAAoB,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAY,gBAAgB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAW,iBAAiB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAY,uBAAuB,CAAC;AACxD,OAAO,EAAE,MAAM,EAAE,MAAe,oBAAoB,CAAC;AAErD,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAQ,KAAK,CAAC;AAMxB,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,EAAE,OAAO,EAAE,KAAK,KAAkB,EAAE;IAChE,MAAM,CAAC,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"push.js","sourceRoot":"","sources":["../../../src/commands/push.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* status.ts — wangchuan status 命令
|
|
2
|
+
* status.ts — wangchuan status command / status 命令
|
|
3
3
|
*/
|
|
4
4
|
import fs from 'fs';
|
|
5
5
|
import { config } from '../core/config.js';
|
|
@@ -10,22 +10,22 @@ import { validator } from '../utils/validator.js';
|
|
|
10
10
|
import { logger } from '../utils/logger.js';
|
|
11
11
|
import chalk from 'chalk';
|
|
12
12
|
export async function cmdStatus({ agent } = {}) {
|
|
13
|
-
logger.banner('忘川 · 同步状态');
|
|
13
|
+
logger.banner('Wangchuan · Status / 忘川 · 同步状态');
|
|
14
14
|
let cfg = config.load();
|
|
15
15
|
validator.requireInit(cfg);
|
|
16
16
|
cfg = ensureMigrated(cfg);
|
|
17
17
|
const repoPath = syncEngine.expandHome(cfg.localRepoPath);
|
|
18
|
-
console.log(chalk.bold(' 仓库地址:') + chalk.cyan(cfg.repo));
|
|
19
|
-
console.log(chalk.bold(' 本地路径:') + repoPath);
|
|
20
|
-
console.log(chalk.bold('
|
|
18
|
+
console.log(chalk.bold(' Repo / 仓库地址:') + chalk.cyan(cfg.repo));
|
|
19
|
+
console.log(chalk.bold(' Local / 本地路径:') + repoPath);
|
|
20
|
+
console.log(chalk.bold(' Branch / 分支: ') + chalk.yellow(cfg.branch));
|
|
21
21
|
if (agent)
|
|
22
|
-
console.log(chalk.bold(' 过滤智能体:') + chalk.cyan(agent));
|
|
22
|
+
console.log(chalk.bold(' Agent / 过滤智能体:') + chalk.cyan(agent));
|
|
23
23
|
console.log();
|
|
24
|
-
// ── 最近提交
|
|
24
|
+
// ── Recent commits / 最近提交 ──────────────────────────────────
|
|
25
25
|
try {
|
|
26
26
|
const logs = await gitEngine.log(repoPath, 3);
|
|
27
27
|
if (logs.length > 0) {
|
|
28
|
-
console.log(chalk.bold(' 最近提交:'));
|
|
28
|
+
console.log(chalk.bold(' Recent commits / 最近提交:'));
|
|
29
29
|
for (const c of logs) {
|
|
30
30
|
const date = new Date(c.date).toLocaleString('zh-CN', { timeZone: 'Asia/Shanghai' });
|
|
31
31
|
console.log(` ${chalk.gray(c.hash.slice(0, 7))} ${chalk.white(c.message.slice(0, 60))} ${chalk.gray(date)}`);
|
|
@@ -34,15 +34,15 @@ export async function cmdStatus({ agent } = {}) {
|
|
|
34
34
|
}
|
|
35
35
|
}
|
|
36
36
|
catch {
|
|
37
|
-
logger.warn('无法读取 git
|
|
37
|
+
logger.warn('Cannot read git log (repo may not be cloned) / 无法读取 git 日志');
|
|
38
38
|
}
|
|
39
|
-
// ── Git 工作树状态
|
|
39
|
+
// ── Git worktree status / Git 工作树状态 ───────────────────────
|
|
40
40
|
const gitStatus = await gitEngine.status(repoPath);
|
|
41
41
|
if (gitStatus !== null) {
|
|
42
42
|
const { modified, created, deleted, not_added } = gitStatus;
|
|
43
43
|
const hasPending = modified.length + created.length + deleted.length + not_added.length > 0;
|
|
44
44
|
if (hasPending) {
|
|
45
|
-
console.log(chalk.bold(' 本地仓库(未提交变更):'));
|
|
45
|
+
console.log(chalk.bold(' Uncommitted changes / 本地仓库(未提交变更):'));
|
|
46
46
|
modified.forEach(f => console.log(` ${chalk.yellow('M')} ${f}`));
|
|
47
47
|
created.forEach(f => console.log(` ${chalk.green('A')} ${f}`));
|
|
48
48
|
deleted.forEach(f => console.log(` ${chalk.red('D')} ${f}`));
|
|
@@ -50,39 +50,39 @@ export async function cmdStatus({ agent } = {}) {
|
|
|
50
50
|
console.log();
|
|
51
51
|
}
|
|
52
52
|
else {
|
|
53
|
-
logger.ok(' 本地仓库与远端保持一致');
|
|
53
|
+
logger.ok(' Local repo in sync with remote / 本地仓库与远端保持一致');
|
|
54
54
|
console.log();
|
|
55
55
|
}
|
|
56
56
|
}
|
|
57
|
-
// ── 工作区差异
|
|
57
|
+
// ── Workspace diff / 工作区差异 ────────────────────────────────
|
|
58
58
|
try {
|
|
59
59
|
const diff = await syncEngine.diff(cfg, agent);
|
|
60
60
|
const total = diff.added.length + diff.modified.length + diff.missing.length;
|
|
61
61
|
if (total === 0) {
|
|
62
|
-
logger.ok(' 工作区与仓库一致,无需同步');
|
|
62
|
+
logger.ok(' Workspace matches repo, no sync needed / 工作区与仓库一致,无需同步');
|
|
63
63
|
}
|
|
64
64
|
else {
|
|
65
|
-
console.log(chalk.bold(' 工作区差异:'));
|
|
66
|
-
diff.added.forEach(f => console.log(` ${chalk.green('+')} ${f} ${chalk.gray('(
|
|
67
|
-
diff.modified.forEach(f => console.log(` ${chalk.yellow('~')} ${f} ${chalk.gray('(已修改)')}`));
|
|
68
|
-
diff.missing.forEach(f => console.log(` ${chalk.red('-')} ${f} ${chalk.gray('(
|
|
65
|
+
console.log(chalk.bold(' Workspace diff / 工作区差异:'));
|
|
66
|
+
diff.added.forEach(f => console.log(` ${chalk.green('+')} ${f} ${chalk.gray('(new, will sync on push / 本地新增)')}`));
|
|
67
|
+
diff.modified.forEach(f => console.log(` ${chalk.yellow('~')} ${f} ${chalk.gray('(modified / 已修改)')}`));
|
|
68
|
+
diff.missing.forEach(f => console.log(` ${chalk.red('-')} ${f} ${chalk.gray('(missing, will restore on pull / 本地缺失)')}`));
|
|
69
69
|
console.log();
|
|
70
|
-
console.log(` ${chalk.yellow('+')} ${diff.added.length}
|
|
71
|
-
`${chalk.yellow('~')} ${diff.modified.length}
|
|
72
|
-
`${chalk.red('-')} ${diff.missing.length}
|
|
70
|
+
console.log(` ${chalk.yellow('+')} ${diff.added.length} added/新增 ` +
|
|
71
|
+
`${chalk.yellow('~')} ${diff.modified.length} modified/修改 ` +
|
|
72
|
+
`${chalk.red('-')} ${diff.missing.length} missing/缺失`);
|
|
73
73
|
}
|
|
74
74
|
}
|
|
75
75
|
catch (err) {
|
|
76
|
-
logger.warn(
|
|
76
|
+
logger.warn(`Diff analysis failed / 差异分析失败: ${err.message}`);
|
|
77
77
|
}
|
|
78
|
-
// ── 文件清单
|
|
78
|
+
// ── File inventory / 文件清单 ──────────────────────────────────
|
|
79
79
|
console.log();
|
|
80
80
|
const entries = syncEngine.buildFileEntries(cfg, undefined, agent);
|
|
81
|
-
console.log(chalk.bold(`
|
|
81
|
+
console.log(chalk.bold(` Config inventory (${entries.length} items) / 配置文件清单:`));
|
|
82
82
|
for (const e of entries) {
|
|
83
83
|
const mark = fs.existsSync(e.srcAbs) ? chalk.green('✔') : chalk.red('✖');
|
|
84
84
|
const encLabel = e.encrypt ? chalk.gray('[enc]') : '';
|
|
85
|
-
const jfLabel = e.jsonExtract ? chalk.blue('[
|
|
85
|
+
const jfLabel = e.jsonExtract ? chalk.blue('[field/字段]') : '';
|
|
86
86
|
console.log(` ${mark} ${e.repoRel} ${encLabel}${jfLabel}`);
|
|
87
87
|
}
|
|
88
88
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/commands/status.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,MAAM,EAAE,MAAe,mBAAmB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAO,oBAAoB,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAY,gBAAgB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAW,iBAAiB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAY,uBAAuB,CAAC;AACxD,OAAO,EAAE,MAAM,EAAE,MAAe,oBAAoB,CAAC;AAErD,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,EAAE,KAAK,KAAoB,EAAE;IAC3D,MAAM,CAAC,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/commands/status.ts"],"names":[],"mappings":"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"}
|
package/dist/src/core/migrate.js
CHANGED
|
@@ -60,13 +60,13 @@ function migrateV1toV2(cfg) {
|
|
|
60
60
|
const lockFile = path.join(wangchuanDir, MIGRATE_LOCK);
|
|
61
61
|
// ── 检测上次中断的迁移 ─────────────────────────────────────
|
|
62
62
|
if (fs.existsSync(lockFile)) {
|
|
63
|
-
logger.warn('
|
|
63
|
+
logger.warn('Incomplete migration detected, rolling back from backup … / 检测到上次迁移未完成,正在回滚 …');
|
|
64
64
|
if (fs.existsSync(backupDir)) {
|
|
65
65
|
// 回滚:删除当前 repo,从备份恢复
|
|
66
66
|
rmDirRecursive(repoPath);
|
|
67
67
|
copyDirRecursive(backupDir, repoPath);
|
|
68
68
|
fs.unlinkSync(lockFile);
|
|
69
|
-
logger.ok('已从备份回滚,重新开始迁移');
|
|
69
|
+
logger.ok('Rolled back from backup, restarting migration / 已从备份回滚,重新开始迁移');
|
|
70
70
|
}
|
|
71
71
|
else {
|
|
72
72
|
// 没有备份但有 lock,说明备份阶段就中断了,repo 应该还是原样
|
|
@@ -75,7 +75,7 @@ function migrateV1toV2(cfg) {
|
|
|
75
75
|
}
|
|
76
76
|
// ── 1. 完整备份旧 repo ─────────────────────────────────────
|
|
77
77
|
if (!fs.existsSync(backupDir)) {
|
|
78
|
-
logger.info('备份旧 repo 结构 …');
|
|
78
|
+
logger.info('Backing up old repo structure … / 备份旧 repo 结构 …');
|
|
79
79
|
copyDirRecursive(repoPath, backupDir);
|
|
80
80
|
}
|
|
81
81
|
// ── 写入迁移锁 ─────────────────────────────────────────────
|
|
@@ -115,7 +115,7 @@ function migrateV1toV2(cfg) {
|
|
|
115
115
|
const abs = path.join(repoPath, rel);
|
|
116
116
|
if (fs.existsSync(abs)) {
|
|
117
117
|
fs.unlinkSync(abs);
|
|
118
|
-
logger.debug(` repo 中移除: ${rel}`);
|
|
118
|
+
logger.debug(` repo removed / repo 中移除: ${rel}`);
|
|
119
119
|
}
|
|
120
120
|
}
|
|
121
121
|
// ── 5. 迁移后校验 ────────────────────────────────────────
|
|
@@ -124,7 +124,7 @@ function migrateV1toV2(cfg) {
|
|
|
124
124
|
];
|
|
125
125
|
for (const check of checks) {
|
|
126
126
|
if (!fs.existsSync(check)) {
|
|
127
|
-
throw new Error(
|
|
127
|
+
throw new Error(`Migration validation failed / 迁移校验失败: ${check} not found`);
|
|
128
128
|
}
|
|
129
129
|
}
|
|
130
130
|
// ── 迁移成功,删除锁 ─────────────────────────────────────
|
|
@@ -132,18 +132,18 @@ function migrateV1toV2(cfg) {
|
|
|
132
132
|
}
|
|
133
133
|
catch (err) {
|
|
134
134
|
// ── 迁移失败,自动回滚 ───────────────────────────────────
|
|
135
|
-
logger.error(
|
|
136
|
-
logger.info('正在从备份回滚 …');
|
|
135
|
+
logger.error(`Migration failed / 迁移失败: ${err.message}`);
|
|
136
|
+
logger.info('Rolling back from backup … / 正在从备份回滚 …');
|
|
137
137
|
try {
|
|
138
138
|
rmDirRecursive(repoPath);
|
|
139
139
|
copyDirRecursive(backupDir, repoPath);
|
|
140
140
|
if (fs.existsSync(lockFile))
|
|
141
141
|
fs.unlinkSync(lockFile);
|
|
142
|
-
logger.ok('已回滚到迁移前状态');
|
|
142
|
+
logger.ok('Rolled back to pre-migration state / 已回滚到迁移前状态');
|
|
143
143
|
}
|
|
144
144
|
catch (rollbackErr) {
|
|
145
|
-
logger.error(
|
|
146
|
-
logger.error(
|
|
145
|
+
logger.error(`Rollback failed / 回滚失败: ${rollbackErr.message}`);
|
|
146
|
+
logger.error(`Please manually restore from ${backupDir} / 请手动从 ${backupDir} 恢复`);
|
|
147
147
|
}
|
|
148
148
|
throw err;
|
|
149
149
|
}
|
|
@@ -170,14 +170,14 @@ export function ensureMigrated(cfg) {
|
|
|
170
170
|
const currentVersion = cfg.version ?? 1;
|
|
171
171
|
if (currentVersion >= CONFIG_VERSION)
|
|
172
172
|
return cfg;
|
|
173
|
-
logger.info(
|
|
173
|
+
logger.info(`Detected v${currentVersion} config, migrating to v${CONFIG_VERSION} … / 检测到 v${currentVersion} 配置,正在迁移 …`);
|
|
174
174
|
let migrated = cfg;
|
|
175
175
|
if (currentVersion < 2) {
|
|
176
176
|
migrated = migrateV1toV2(migrated);
|
|
177
177
|
}
|
|
178
178
|
config.save(migrated);
|
|
179
|
-
logger.ok('配置迁移完成');
|
|
180
|
-
logger.info(
|
|
179
|
+
logger.ok('Config migration complete / 配置迁移完成');
|
|
180
|
+
logger.info(`Old data backed up to ${config.paths.dir}/backup-v1/ / 旧数据已备份`);
|
|
181
181
|
return migrated;
|
|
182
182
|
}
|
|
183
183
|
//# sourceMappingURL=migrate.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../../src/core/migrate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,MAAQ,IAAI,CAAC;AACtB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAG5C,aAAa;AACb,SAAS,gBAAgB,CAAC,GAAW,EAAE,IAAY;IACjD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO;IAChC,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACxC,KAAK,MAAM,KAAK,IAAI,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QACjE,MAAM,OAAO,GAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAC5C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAC7C,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;YACxB,gBAAgB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QACtC,CAAC;aAAM,CAAC;YACN,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;AACH,CAAC;AAED,aAAa;AACb,SAAS,cAAc,CAAC,GAAW;IACjC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO;IAChC,KAAK,MAAM,KAAK,IAAI,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QACjE,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QACrC,IAAI,KAAK,CAAC,WAAW,EAAE;YAAE,cAAc,CAAC,CAAC,CAAC,CAAC;;YACtC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IACxB,CAAC;IACD,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;AACpB,CAAC;AAED,MAAM,YAAY,GAAG,sBAAsB,CAAC;AAE5C,iBAAiB;AACjB,SAAS,aAAa,CAAC,GAAoB;IACzC,MAAM,QAAQ,GAAG,UAAU,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IAC/C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7B,wBAAwB;QACxB,OAAO,aAAa,CAAC,GAAG,CAAC,CAAC;IAC5B,CAAC;IAED,MAAM,YAAY,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAClD,MAAM,SAAS,GAAM,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;IAC1D,MAAM,QAAQ,GAAO,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;IAE3D,qDAAqD;IACrD,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5B,MAAM,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../../src/core/migrate.ts"],"names":[],"mappings":"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"}
|
package/dist/src/core/sync.js
CHANGED
|
@@ -243,7 +243,7 @@ function distributeShared(cfg) {
|
|
|
243
243
|
const dest = path.join(skillsDir, relFile);
|
|
244
244
|
fs.mkdirSync(path.dirname(dest), { recursive: true });
|
|
245
245
|
fs.copyFileSync(srcAbs, dest);
|
|
246
|
-
logger.debug(` 分发 skill: ${relFile} → ${source.agent}`);
|
|
246
|
+
logger.debug(` distribute skill / 分发 skill: ${relFile} → ${source.agent}`);
|
|
247
247
|
}
|
|
248
248
|
}
|
|
249
249
|
// ── 分发 MCP 配置:从每个 source 提取,merge 到其他 agent ──
|
|
@@ -289,7 +289,7 @@ function distributeShared(cfg) {
|
|
|
289
289
|
json[source.field] = currentMcp;
|
|
290
290
|
fs.mkdirSync(path.dirname(srcPath), { recursive: true });
|
|
291
291
|
fs.writeFileSync(srcPath, JSON.stringify(json, null, 2), 'utf-8');
|
|
292
|
-
logger.debug(` 分发 MCP servers → ${source.agent}`);
|
|
292
|
+
logger.debug(` distribute MCP servers / 分发 MCP servers → ${source.agent}`);
|
|
293
293
|
}
|
|
294
294
|
}
|
|
295
295
|
catch { /* 忽略 */ }
|
|
@@ -315,7 +315,7 @@ function pruneRepoStaleFiles(repoPath, entries) {
|
|
|
315
315
|
const abs = path.join(repoPath, repoRel);
|
|
316
316
|
fs.unlinkSync(abs);
|
|
317
317
|
deleted.push(repoRel);
|
|
318
|
-
logger.debug(` repo 清理过期文件: ${repoRel}`);
|
|
318
|
+
logger.debug(` repo prune stale / repo 清理过期文件: ${repoRel}`);
|
|
319
319
|
// 清理空目录
|
|
320
320
|
let dir = path.dirname(abs);
|
|
321
321
|
while (dir !== scanRoot && dir.startsWith(scanRoot)) {
|
|
@@ -350,7 +350,7 @@ export const syncEngine = {
|
|
|
350
350
|
const result = { synced: [], skipped: [], encrypted: [], deleted: [] };
|
|
351
351
|
for (const entry of entries) {
|
|
352
352
|
if (!fs.existsSync(entry.srcAbs)) {
|
|
353
|
-
logger.debug(
|
|
353
|
+
logger.debug(`Skipping (not found) / 跳过(不存在): ${entry.srcAbs}`);
|
|
354
354
|
result.skipped.push(entry.srcAbs);
|
|
355
355
|
continue;
|
|
356
356
|
}
|
|
@@ -373,7 +373,7 @@ export const syncEngine = {
|
|
|
373
373
|
result.synced.push(entry.repoRel);
|
|
374
374
|
}
|
|
375
375
|
catch (err) {
|
|
376
|
-
logger.warn(
|
|
376
|
+
logger.warn(`Skipping JSON field extraction (parse error) / 跳过 JSON 字段提取(解析失败): ${entry.srcAbs} — ${err.message}`);
|
|
377
377
|
result.skipped.push(entry.repoRel);
|
|
378
378
|
}
|
|
379
379
|
continue;
|
|
@@ -382,8 +382,8 @@ export const syncEngine = {
|
|
|
382
382
|
if (!entry.encrypt) {
|
|
383
383
|
const content = fs.readFileSync(entry.srcAbs, 'utf-8');
|
|
384
384
|
if (validator.containsSensitiveData(content)) {
|
|
385
|
-
logger.warn(`⚠ 检测到疑似明文敏感信息: ${entry.srcAbs}`);
|
|
386
|
-
logger.warn(`
|
|
385
|
+
logger.warn(`⚠ Possible plaintext sensitive data detected / 检测到疑似明文敏感信息: ${entry.srcAbs}`);
|
|
386
|
+
logger.warn(` Consider setting encrypt:true in config / 建议标记为 encrypt:true`);
|
|
387
387
|
}
|
|
388
388
|
}
|
|
389
389
|
if (entry.encrypt) {
|
|
@@ -428,7 +428,7 @@ export const syncEngine = {
|
|
|
428
428
|
else if (fs.existsSync(entry.srcAbs)) {
|
|
429
429
|
result.localOnly.push(entry.repoRel);
|
|
430
430
|
}
|
|
431
|
-
logger.debug(
|
|
431
|
+
logger.debug(`Skipping (not in repo) / 跳过(仓库中不存在): ${entry.repoRel}`);
|
|
432
432
|
result.skipped.push(entry.repoRel);
|
|
433
433
|
continue;
|
|
434
434
|
}
|
|
@@ -513,7 +513,7 @@ export const syncEngine = {
|
|
|
513
513
|
if (isDiff) {
|
|
514
514
|
result.conflicts.push(entry.repoRel);
|
|
515
515
|
if (batchDecision === 'skip_all') {
|
|
516
|
-
logger.info(` ↷ 跳过(保留本地): ${entry.repoRel}`);
|
|
516
|
+
logger.info(` ↷ Skipped (keep local) / 跳过(保留本地): ${entry.repoRel}`);
|
|
517
517
|
result.skipped.push(entry.repoRel);
|
|
518
518
|
continue;
|
|
519
519
|
}
|
|
@@ -522,7 +522,7 @@ export const syncEngine = {
|
|
|
522
522
|
if (ans === 'skip' || ans === 'skip_all') {
|
|
523
523
|
if (ans === 'skip_all')
|
|
524
524
|
batchDecision = 'skip_all';
|
|
525
|
-
logger.info(` ↷ 跳过(保留本地): ${entry.repoRel}`);
|
|
525
|
+
logger.info(` ↷ Skipped (keep local) / 跳过(保留本地): ${entry.repoRel}`);
|
|
526
526
|
result.skipped.push(entry.repoRel);
|
|
527
527
|
continue;
|
|
528
528
|
}
|