wangchuan 2.4.0 → 2.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/README.md +20 -2
  2. package/dist/bin/wangchuan.d.ts +2 -2
  3. package/dist/bin/wangchuan.js +32 -24
  4. package/dist/bin/wangchuan.js.map +1 -1
  5. package/dist/src/commands/diff.d.ts +1 -1
  6. package/dist/src/commands/diff.d.ts.map +1 -1
  7. package/dist/src/commands/diff.js +13 -12
  8. package/dist/src/commands/diff.js.map +1 -1
  9. package/dist/src/commands/dump.d.ts +1 -1
  10. package/dist/src/commands/dump.d.ts.map +1 -1
  11. package/dist/src/commands/dump.js +12 -9
  12. package/dist/src/commands/dump.js.map +1 -1
  13. package/dist/src/commands/init.d.ts +1 -1
  14. package/dist/src/commands/init.d.ts.map +1 -1
  15. package/dist/src/commands/init.js +23 -22
  16. package/dist/src/commands/init.js.map +1 -1
  17. package/dist/src/commands/lang.d.ts +7 -0
  18. package/dist/src/commands/lang.d.ts.map +1 -0
  19. package/dist/src/commands/lang.js +19 -0
  20. package/dist/src/commands/lang.js.map +1 -0
  21. package/dist/src/commands/list.d.ts +1 -1
  22. package/dist/src/commands/list.d.ts.map +1 -1
  23. package/dist/src/commands/list.js +10 -8
  24. package/dist/src/commands/list.js.map +1 -1
  25. package/dist/src/commands/pull.d.ts +1 -1
  26. package/dist/src/commands/pull.d.ts.map +1 -1
  27. package/dist/src/commands/pull.js +21 -16
  28. package/dist/src/commands/pull.js.map +1 -1
  29. package/dist/src/commands/push.d.ts +1 -1
  30. package/dist/src/commands/push.d.ts.map +1 -1
  31. package/dist/src/commands/push.js +29 -24
  32. package/dist/src/commands/push.js.map +1 -1
  33. package/dist/src/commands/status.d.ts +1 -1
  34. package/dist/src/commands/status.d.ts.map +1 -1
  35. package/dist/src/commands/status.js +26 -25
  36. package/dist/src/commands/status.js.map +1 -1
  37. package/dist/src/core/config.d.ts.map +1 -1
  38. package/dist/src/core/config.js +3 -2
  39. package/dist/src/core/config.js.map +1 -1
  40. package/dist/src/core/migrate.d.ts +12 -12
  41. package/dist/src/core/migrate.d.ts.map +1 -1
  42. package/dist/src/core/migrate.js +39 -42
  43. package/dist/src/core/migrate.js.map +1 -1
  44. package/dist/src/core/sync.d.ts.map +1 -1
  45. package/dist/src/core/sync.js +11 -10
  46. package/dist/src/core/sync.js.map +1 -1
  47. package/dist/src/i18n.d.ts +22 -0
  48. package/dist/src/i18n.d.ts.map +1 -0
  49. package/dist/src/i18n.js +223 -0
  50. package/dist/src/i18n.js.map +1 -0
  51. package/dist/src/types.d.ts +2 -0
  52. package/dist/src/types.d.ts.map +1 -1
  53. package/dist/src/utils/prompt.d.ts +1 -1
  54. package/dist/src/utils/prompt.d.ts.map +1 -1
  55. package/dist/src/utils/prompt.js +6 -5
  56. package/dist/src/utils/prompt.js.map +1 -1
  57. package/dist/src/utils/validator.d.ts +1 -1
  58. package/dist/src/utils/validator.d.ts.map +1 -1
  59. package/dist/src/utils/validator.js +3 -2
  60. package/dist/src/utils/validator.js.map +1 -1
  61. package/package.json +1 -1
  62. package/skill/SKILL.md +5 -0
  63. package/skill/wangchuan-skill.sh +2 -2
package/README.md CHANGED
@@ -23,9 +23,11 @@ AI memory sync system — encrypted backup and cross-environment migration for O
23
23
  | `diff` | 逐文件显示本地与仓库的行级差异(自动解密)/ Show line-level diff per file (auto-decrypt) |
24
24
  | `list` | 列出所有托管文件,显示本地/仓库存在状态 / List all managed files with local/repo presence |
25
25
  | `dump` | 生成明文快照到临时目录,方便检查同步内容 / Generate plaintext snapshot to temp dir for inspection |
26
+ | `lang` | 切换 CLI 显示语言(zh/en)/ Switch CLI display language (zh/en) |
26
27
 
27
28
  - **AES-256-GCM** 加密:密钥本地存储,永不提交 Git / Encryption: keys stored locally, never committed to Git
28
29
  - 全局 `--agent` 过滤:只操作指定智能体 / Global `--agent` filter: operate on a single agent only
30
+ - **多语言 / i18n**:`wangchuan lang zh|en` 切换 CLI 显示语言,支持环境变量 `WANGCHUAN_LANG` 覆盖 / `wangchuan lang zh|en` to switch CLI language, `WANGCHUAN_LANG` env override
29
31
  - **细粒度同步 / Fine-grained sync**:JSON 字段级提取(如 `.claude.json` 只同步 `mcpServers`) / JSON field-level extraction (e.g. only sync `mcpServers` from `.claude.json`)
30
32
  - **跨 agent 共享 / Cross-agent sharing**:Skills 和 MCP 配置自动在所有 agent 间分发 / Skills and MCP configs auto-distributed across all agents
31
33
  - **删除传播 / Delete propagation**:所有 agent 都删除的 skill/MCP → 自动从 repo 清理 / Items deleted from all agents are pruned from repo
@@ -84,7 +86,21 @@ wangchuan pull
84
86
  wangchuan status
85
87
  ```
86
88
 
87
- ### 5. 只操作指定智能体 / Filter by agent
89
+ ### 5. 切换显示语言 / Switch display language
90
+
91
+ ```bash
92
+ wangchuan lang # 查看当前语言 / Show current language
93
+ wangchuan lang en # 切换到英文 / Switch to English
94
+ wangchuan lang zh # 切换到中文 / Switch to Chinese
95
+ ```
96
+
97
+ 也可通过环境变量覆盖 / Or override via env var:
98
+
99
+ ```bash
100
+ WANGCHUAN_LANG=en wangchuan status
101
+ ```
102
+
103
+ ### 6. 只操作指定智能体 / Filter by agent
88
104
 
89
105
  ```bash
90
106
  wangchuan push --agent openclaw -m "更新 OpenClaw 记忆"
@@ -239,12 +255,14 @@ wangchuan/
239
255
  │ │ ├── status.ts 状态命令 / status command
240
256
  │ │ ├── diff.ts 差异命令 / diff command
241
257
  │ │ ├── list.ts 清单命令 / list command (shared/agents grouping)
242
- │ │ └── dump.ts 明文快照 / dump command (plaintext snapshot)
258
+ │ │ ├── dump.ts 明文快照 / dump command (plaintext snapshot)
259
+ │ │ └── lang.ts 语言切换 / lang command (i18n switching)
243
260
  │ ├── utils/
244
261
  │ │ ├── logger.ts 日志工具 / Logger
245
262
  │ │ ├── validator.ts 参数校验 / Validator
246
263
  │ │ ├── linediff.ts LCS 行级差异算法 / LCS line diff
247
264
  │ │ └── prompt.ts 交互式冲突提示 / Interactive conflict prompt
265
+ │ ├── i18n.ts 国际化消息字典 / i18n message dictionary & t() helper
248
266
  │ └── types.ts 全局类型定义 / Global type definitions
249
267
  ├── skill/
250
268
  │ ├── SKILL.md OpenClaw Skill 说明 / OpenClaw Skill doc
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env node
2
2
  /**
3
- * wangchuan.ts — CLI entry / CLI 入口
3
+ * wangchuan.ts — CLI entry
4
4
  *
5
- * Usage / 用法:
5
+ * Usage:
6
6
  * wangchuan <command> [--agent openclaw|claude|gemini] [flags]
7
7
  */
8
8
  export {};
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env node
2
2
  /**
3
- * wangchuan.ts — CLI entry / CLI 入口
3
+ * wangchuan.ts — CLI entry
4
4
  *
5
- * Usage / 用法:
5
+ * Usage:
6
6
  * wangchuan <command> [--agent openclaw|claude|gemini] [flags]
7
7
  */
8
8
  import { Command } from 'commander';
@@ -13,80 +13,88 @@ import { cmdStatus } from '../src/commands/status.js';
13
13
  import { cmdDiff } from '../src/commands/diff.js';
14
14
  import { cmdList } from '../src/commands/list.js';
15
15
  import { cmdDump } from '../src/commands/dump.js';
16
+ import { cmdLang } from '../src/commands/lang.js';
16
17
  import { logger } from '../src/utils/logger.js';
18
+ import { t } from '../src/i18n.js';
17
19
  const AGENT_CHOICES = ['openclaw', 'claude', 'gemini'];
18
- /** Validate --agent value / 校验 --agent 值合法性 */
19
20
  function parseAgent(val) {
20
21
  if (!AGENT_CHOICES.includes(val)) {
21
- throw new Error(`--agent must be openclaw | claude | gemini, got: ${val} / --agent 必须是 openclaw | claude | gemini,收到: ${val}`);
22
+ throw new Error(t('cli.invalidAgent', { val }));
22
23
  }
23
24
  return val;
24
25
  }
25
26
  const program = new Command();
26
27
  program
27
28
  .name('wangchuan')
28
- .description('Wangchuan · AI Memory Sync System / 忘川 · AI 记忆同步系统')
29
- .version('2.3.1');
29
+ .description(t('cli.description'))
30
+ .version('2.5.1');
30
31
  // ── init ────────────────────────────────────────────────────────
31
32
  program
32
33
  .command('init')
33
- .description('Initialize Wangchuan, configure repo and generate key / 初始化忘川,配置仓库并生成密钥')
34
- .requiredOption('-r, --repo <url>', 'Git repo URL (SSH or HTTPS) / Git 仓库地址')
35
- .option('-k, --key <master-key>', 'Import existing master key (hex string) / 导入已有的主密钥(十六进制字符串)')
36
- .option('--force', 'Force re-init (overwrite existing config) / 强制重新初始化', false)
34
+ .description(t('cli.cmd.init'))
35
+ .requiredOption('-r, --repo <url>', t('cli.cmd.init.repo'))
36
+ .option('-k, --key <master-key>', t('cli.cmd.init.key'))
37
+ .option('--force', t('cli.cmd.init.force'), false)
37
38
  .action(async (opts) => {
38
39
  await run(() => cmdInit(opts));
39
40
  });
40
41
  // ── pull ────────────────────────────────────────────────────────
41
42
  program
42
43
  .command('pull')
43
- .description('Pull and restore configs from remote repo / 从远端仓库拉取并还原配置到本地')
44
- .option('-a, --agent <name>', 'Filter by agent / 只操作指定智能体 (openclaw|claude|gemini)', parseAgent)
44
+ .description(t('cli.cmd.pull'))
45
+ .option('-a, --agent <name>', t('cli.cmd.agent'), parseAgent)
45
46
  .action(async (opts) => {
46
47
  await run(() => cmdPull(opts));
47
48
  });
48
49
  // ── push ────────────────────────────────────────────────────────
49
50
  program
50
51
  .command('push')
51
- .description('Encrypt and push local configs to remote repo / 将本地配置加密后推送到远端仓库')
52
- .option('-m, --message <msg>', 'Custom commit message / 自定义提交信息')
53
- .option('-a, --agent <name>', 'Filter by agent / 只操作指定智能体 (openclaw|claude|gemini)', parseAgent)
52
+ .description(t('cli.cmd.push'))
53
+ .option('-m, --message <msg>', t('cli.cmd.push.msg'))
54
+ .option('-a, --agent <name>', t('cli.cmd.agent'), parseAgent)
54
55
  .action(async (opts) => {
55
56
  await run(() => cmdPush(opts));
56
57
  });
57
58
  // ── status ──────────────────────────────────────────────────────
58
59
  program
59
60
  .command('status')
60
- .description('Show sync status and workspace diff / 查看同步状态和工作区差异')
61
- .option('-a, --agent <name>', 'Filter by agent / 只操作指定智能体 (openclaw|claude|gemini)', parseAgent)
61
+ .description(t('cli.cmd.status'))
62
+ .option('-a, --agent <name>', t('cli.cmd.agent'), parseAgent)
62
63
  .action(async (opts) => {
63
64
  await run(() => cmdStatus(opts));
64
65
  });
65
66
  // ── diff ────────────────────────────────────────────────────────
66
67
  program
67
68
  .command('diff')
68
- .description('Show line-level diff between local and repo / 显示本地与仓库的行级文件差异')
69
- .option('-a, --agent <name>', 'Filter by agent / 只显示指定智能体 (openclaw|claude|gemini)', parseAgent)
69
+ .description(t('cli.cmd.diff'))
70
+ .option('-a, --agent <name>', t('cli.cmd.agent'), parseAgent)
70
71
  .action(async (opts) => {
71
72
  await run(() => cmdDiff(opts));
72
73
  });
73
74
  // ── list ────────────────────────────────────────────────────────
74
75
  program
75
76
  .command('list')
76
- .description('List all managed configs with local/repo status / 列出所有受管配置项及其状态')
77
- .option('-a, --agent <name>', 'Filter by agent / 只列出指定智能体 (openclaw|claude|gemini)', parseAgent)
77
+ .description(t('cli.cmd.list'))
78
+ .option('-a, --agent <name>', t('cli.cmd.agent'), parseAgent)
78
79
  .action(async (opts) => {
79
80
  await run(() => cmdList(opts));
80
81
  });
81
82
  // ── dump ────────────────────────────────────────────────────────
82
83
  program
83
84
  .command('dump')
84
- .description('Generate plaintext snapshot to temp dir / 生成明文快照到临时目录')
85
- .option('-a, --agent <name>', 'Filter by agent / 只导出指定智能体 (openclaw|claude|gemini)', parseAgent)
85
+ .description(t('cli.cmd.dump'))
86
+ .option('-a, --agent <name>', t('cli.cmd.agent'), parseAgent)
86
87
  .action(async (opts) => {
87
88
  await run(() => cmdDump(opts));
88
89
  });
89
- // ── Error handler / 错误兜底 ─────────────────────────────────────
90
+ // ── lang ────────────────────────────────────────────────────────
91
+ program
92
+ .command('lang [language]')
93
+ .description(t('cli.cmd.lang'))
94
+ .action(async (language) => {
95
+ await run(() => cmdLang(language));
96
+ });
97
+ // ── Error handler ───────────────────────────────────────────────
90
98
  async function run(fn) {
91
99
  try {
92
100
  await fn();
@@ -1 +1 @@
1
- {"version":3,"file":"wangchuan.js","sourceRoot":"","sources":["../../bin/wangchuan.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"wangchuan.js","sourceRoot":"","sources":["../../bin/wangchuan.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  /**
2
- * diff.ts — wangchuan diff command / diff 命令
2
+ * diff.ts — wangchuan diff command
3
3
  *
4
4
  * Shows line-level unified diff for each changed file.
5
5
  * Encrypted files are decrypted before comparison.
@@ -1 +1 @@
1
- {"version":3,"file":"diff.d.ts","sourceRoot":"","sources":["../../../src/commands/diff.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAWH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAGtD,wBAAsB,OAAO,CAAC,EAAE,KAAK,EAAE,GAAE,kBAAuB,GAAG,OAAO,CAAC,IAAI,CAAC,CAsF/E"}
1
+ {"version":3,"file":"diff.d.ts","sourceRoot":"","sources":["../../../src/commands/diff.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAYH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAGtD,wBAAsB,OAAO,CAAC,EAAE,KAAK,EAAE,GAAE,kBAAuB,GAAG,OAAO,CAAC,IAAI,CAAC,CAsF/E"}
@@ -1,5 +1,5 @@
1
1
  /**
2
- * diff.ts — wangchuan diff command / diff 命令
2
+ * diff.ts — wangchuan diff command
3
3
  *
4
4
  * Shows line-level unified diff for each changed file.
5
5
  * Encrypted files are decrypted before comparison.
@@ -12,10 +12,11 @@ import { syncEngine } from '../core/sync.js';
12
12
  import { cryptoEngine } from '../core/crypto.js';
13
13
  import { validator } from '../utils/validator.js';
14
14
  import { logger } from '../utils/logger.js';
15
+ import { t } from '../i18n.js';
15
16
  import { diffText } from '../utils/linediff.js';
16
17
  import chalk from 'chalk';
17
18
  export async function cmdDiff({ agent } = {}) {
18
- logger.banner('Wangchuan · Diff / 忘川 · 文件差异');
19
+ logger.banner(t('diff.banner'));
19
20
  let cfg = config.load();
20
21
  validator.requireInit(cfg);
21
22
  cfg = ensureMigrated(cfg);
@@ -23,15 +24,15 @@ export async function cmdDiff({ agent } = {}) {
23
24
  const keyPath = syncEngine.expandHome(cfg.keyPath);
24
25
  const entries = syncEngine.buildFileEntries(cfg, undefined, agent);
25
26
  if (agent)
26
- logger.info(`Filter agent / 过滤智能体: ${chalk.cyan(agent)}\n`);
27
+ logger.info(t('diff.filterAgent', { agent: chalk.cyan(agent) }) + '\n');
27
28
  let totalChanged = 0;
28
29
  for (const entry of entries) {
29
30
  const srcExists = fs.existsSync(entry.srcAbs);
30
31
  const repoAbs = path.join(repoPath, entry.repoRel);
31
32
  const repoExists = fs.existsSync(repoAbs);
32
- // ── Only one side exists / 仅一侧存在 ────────────────────────
33
+ // ── Only one side exists ──────────────────────────────────────
33
34
  if (srcExists && !repoExists) {
34
- console.log(chalk.bold.green(`+++ ${entry.repoRel}`) + chalk.gray(' (new, not in repo / 新增,仓库中不存在)'));
35
+ console.log(chalk.bold.green(`+++ ${entry.repoRel}`) + chalk.gray(' ' + t('diff.newFile')));
35
36
  const lines = fs.readFileSync(entry.srcAbs, 'utf-8').split('\n');
36
37
  lines.forEach(l => console.log(chalk.green(`+ ${l}`)));
37
38
  console.log();
@@ -39,14 +40,14 @@ export async function cmdDiff({ agent } = {}) {
39
40
  continue;
40
41
  }
41
42
  if (!srcExists && repoExists) {
42
- console.log(chalk.bold.red(`--- ${entry.repoRel}`) + chalk.gray(' (missing locally / 本地缺失)'));
43
+ console.log(chalk.bold.red(`--- ${entry.repoRel}`) + chalk.gray(' ' + t('diff.missingFile')));
43
44
  console.log();
44
45
  totalChanged++;
45
46
  continue;
46
47
  }
47
48
  if (!srcExists && !repoExists)
48
49
  continue;
49
- // ── Both sides exist, read content / 两侧均存在 ──────────────
50
+ // ── Both sides exist, read content ────────────────────────────
50
51
  const localText = fs.readFileSync(entry.srcAbs, 'utf-8');
51
52
  let repoText;
52
53
  if (entry.encrypt) {
@@ -54,7 +55,7 @@ export async function cmdDiff({ agent } = {}) {
54
55
  repoText = cryptoEngine.decryptString(fs.readFileSync(repoAbs, 'utf-8').trim(), keyPath);
55
56
  }
56
57
  catch {
57
- console.log(chalk.yellow(`~ ${entry.repoRel}`) + chalk.gray(' [encrypted, cannot decrypt / 加密文件,无法解密比较]'));
58
+ console.log(chalk.yellow(`~ ${entry.repoRel}`) + chalk.gray(' ' + t('diff.cannotDecrypt')));
58
59
  console.log();
59
60
  totalChanged++;
60
61
  continue;
@@ -68,8 +69,8 @@ export async function cmdDiff({ agent } = {}) {
68
69
  continue;
69
70
  const encLabel = entry.encrypt ? chalk.gray(' [enc]') : '';
70
71
  console.log(chalk.bold(`~~~ ${entry.repoRel}`) + encLabel);
71
- console.log(chalk.gray(' --- repo version / 仓库版本'));
72
- console.log(chalk.gray(' +++ local version / 本地版本'));
72
+ console.log(chalk.gray(' ' + t('diff.repoVersion')));
73
+ console.log(chalk.gray(' ' + t('diff.localVersion')));
73
74
  console.log();
74
75
  for (const line of diffLines) {
75
76
  if (line.content === '...') {
@@ -89,10 +90,10 @@ export async function cmdDiff({ agent } = {}) {
89
90
  totalChanged++;
90
91
  }
91
92
  if (totalChanged === 0) {
92
- logger.ok('All files match repo, no diff / 所有文件与仓库一致,无差异');
93
+ logger.ok(t('diff.noDiff'));
93
94
  }
94
95
  else {
95
- logger.info(`${totalChanged} files differ / ${totalChanged} 个文件有差异`);
96
+ logger.info(t('diff.filesDiffer', { count: totalChanged }));
96
97
  }
97
98
  }
98
99
  //# sourceMappingURL=diff.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"diff.js","sourceRoot":"","sources":["../../../src/commands/diff.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"diff.js","sourceRoot":"","sources":["../../../src/commands/diff.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,EAAE,MAAe,mBAAmB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAO,oBAAoB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAW,iBAAiB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAS,mBAAmB,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,MAAY,uBAAuB,CAAC;AACxD,OAAO,EAAE,MAAM,EAAE,MAAe,oBAAoB,CAAC;AACrD,OAAO,EAAE,CAAC,EAAE,MAAoB,YAAY,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAU,sBAAsB,CAAC;AAEpD,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,EAAE,KAAK,KAAyB,EAAE;IAC9D,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC;IAEhC,IAAI,GAAG,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;IACxB,SAAS,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAC3B,GAAG,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;IAE1B,MAAM,QAAQ,GAAG,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IAC1D,MAAM,OAAO,GAAI,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACpD,MAAM,OAAO,GAAI,UAAU,CAAC,gBAAgB,CAAC,GAAG,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;IAEpE,IAAI,KAAK;QAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,kBAAkB,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;IAEnF,IAAI,YAAY,GAAG,CAAC,CAAC;IAErB,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,MAAM,SAAS,GAAI,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC/C,MAAM,OAAO,GAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;QACtD,MAAM,UAAU,GAAG,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QAE1C,iEAAiE;QACjE,IAAI,SAAS,IAAI,CAAC,UAAU,EAAE,CAAC;YAC7B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,KAAK,CAAC,OAAO,EAAE,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;YAC7F,MAAM,KAAK,GAAG,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACjE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACvD,OAAO,CAAC,GAAG,EAAE,CAAC;YACd,YAAY,EAAE,CAAC;YACf,SAAS;QACX,CAAC;QACD,IAAI,CAAC,SAAS,IAAI,UAAU,EAAE,CAAC;YAC7B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,KAAK,CAAC,OAAO,EAAE,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC;YAC/F,OAAO,CAAC,GAAG,EAAE,CAAC;YACd,YAAY,EAAE,CAAC;YACf,SAAS;QACX,CAAC;QACD,IAAI,CAAC,SAAS,IAAI,CAAC,UAAU;YAAE,SAAS;QAExC,iEAAiE;QACjE,MAAM,SAAS,GAAG,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACzD,IAAM,QAAgB,CAAC;QAEvB,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YAClB,IAAI,CAAC;gBACH,QAAQ,GAAG,YAAY,CAAC,aAAa,CACnC,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,EACxC,OAAO,CACR,CAAC;YACJ,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC;gBAC7F,OAAO,CAAC,GAAG,EAAE,CAAC;gBACd,YAAY,EAAE,CAAC;gBACf,SAAS;YACX,CAAC;QACH,CAAC;aAAM,CAAC;YACN,QAAQ,GAAG,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC/C,CAAC;QAED,MAAM,SAAS,GAAG,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QAChD,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;YAAE,SAAS;QAErC,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,KAAK,CAAC,OAAO,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC;QAC3D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC;QACxD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC;QACzD,OAAO,CAAC,GAAG,EAAE,CAAC;QAEd,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;YAC7B,IAAI,IAAI,CAAC,OAAO,KAAK,KAAK,EAAE,CAAC;gBAC3B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;YACrC,CAAC;iBAAM,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;gBACjC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;YAClD,CAAC;iBAAM,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBACnC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;YAChD,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;YACjD,CAAC;QACH,CAAC;QACD,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,YAAY,EAAE,CAAC;IACjB,CAAC;IAED,IAAI,YAAY,KAAK,CAAC,EAAE,CAAC;QACvB,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC;IAC9B,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,kBAAkB,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC;IAC9D,CAAC;AACH,CAAC"}
@@ -1,5 +1,5 @@
1
1
  /**
2
- * dump.ts — wangchuan dump command / dump 命令
2
+ * dump.ts — wangchuan dump command
3
3
  *
4
4
  * Generates a plaintext snapshot mirroring repo structure in a temp dir.
5
5
  * All .enc files are auto-decrypted for manual inspection.
@@ -1 +1 @@
1
- {"version":3,"file":"dump.d.ts","sourceRoot":"","sources":["../../../src/commands/dump.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAaH,OAAO,KAAK,EAAE,YAAY,EAAa,MAAM,aAAa,CAAC;AAE3D,wBAAsB,OAAO,CAAC,EAAE,KAAK,EAAE,GAAE,YAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAqDzE"}
1
+ {"version":3,"file":"dump.d.ts","sourceRoot":"","sources":["../../../src/commands/dump.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAcH,OAAO,KAAK,EAAE,YAAY,EAAa,MAAM,aAAa,CAAC;AAE3D,wBAAsB,OAAO,CAAC,EAAE,KAAK,EAAE,GAAE,YAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAyDzE"}
@@ -1,5 +1,5 @@
1
1
  /**
2
- * dump.ts — wangchuan dump command / dump 命令
2
+ * dump.ts — wangchuan dump command
3
3
  *
4
4
  * Generates a plaintext snapshot mirroring repo structure in a temp dir.
5
5
  * All .enc files are auto-decrypted for manual inspection.
@@ -13,15 +13,16 @@ import { expandHome, buildFileEntries } from '../core/sync.js';
13
13
  import { jsonField } from '../core/json-field.js';
14
14
  import { validator } from '../utils/validator.js';
15
15
  import { logger } from '../utils/logger.js';
16
+ import { t } from '../i18n.js';
16
17
  import chalk from 'chalk';
17
18
  export async function cmdDump({ agent } = {}) {
18
- logger.banner('Wangchuan · Dump / 忘川 · 明文快照');
19
+ logger.banner(t('dump.banner'));
19
20
  let cfg = config.load();
20
21
  validator.requireInit(cfg);
21
22
  cfg = ensureMigrated(cfg);
22
23
  const keyPath = expandHome(cfg.keyPath);
23
24
  const entries = buildFileEntries(cfg, undefined, agent);
24
- // Create temp dir / 创建临时目录
25
+ // Create temp dir
25
26
  const dumpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'wangchuan-dump-'));
26
27
  let count = 0;
27
28
  let skipped = 0;
@@ -39,7 +40,7 @@ export async function cmdDump({ agent } = {}) {
39
40
  fs.writeFileSync(destPath, JSON.stringify(partial, null, 2), 'utf-8');
40
41
  }
41
42
  catch (err) {
42
- logger.warn(`Skipping JSON extraction (parse error) / 跳过 JSON 字段提取: ${entry.srcAbs}`);
43
+ logger.warn(t('dump.skipJson', { path: entry.srcAbs }));
43
44
  skipped++;
44
45
  continue;
45
46
  }
@@ -49,17 +50,19 @@ export async function cmdDump({ agent } = {}) {
49
50
  }
50
51
  const labels = [];
51
52
  if (entry.encrypt)
52
- labels.push(chalk.gray('[src encrypted/原文件加密]'));
53
+ labels.push(chalk.gray(t('dump.srcEncrypted')));
53
54
  if (entry.jsonExtract)
54
- labels.push(chalk.blue('[field extraction/字段提取]'));
55
+ labels.push(chalk.blue(t('dump.fieldExtraction')));
55
56
  console.log(` ${chalk.green('✔')} ${entry.plainRel} ${labels.join('')}`);
56
57
  count++;
57
58
  }
58
59
  console.log();
59
- console.log(chalk.bold(` Output dir / 输出目录:`) + chalk.cyan(dumpDir));
60
- console.log(chalk.bold(` File count / 文件数量:`) + `${count} files/个文件` + (skipped > 0 ? chalk.gray(` (${skipped} skipped/个跳过)`) : ''));
60
+ console.log(chalk.bold(` ${t('dump.outputDir')}`) + chalk.cyan(dumpDir));
61
+ console.log(chalk.bold(` ${t('dump.fileCount')}`) +
62
+ t('dump.files', { count }) +
63
+ (skipped > 0 ? chalk.gray(` ${t('dump.skippedCount', { count: skipped })}`) : ''));
61
64
  console.log();
62
- console.log(chalk.gray(` Warning: this dir contains plaintext sensitive data, delete after inspection / 提示:含明文敏感信息,查看后请删除`));
65
+ console.log(chalk.gray(` ${t('dump.warning')}`));
63
66
  console.log(chalk.gray(` rm -rf ${dumpDir}`));
64
67
  }
65
68
  //# sourceMappingURL=dump.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"dump.js","sourceRoot":"","sources":["../../../src/commands/dump.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dump.js","sourceRoot":"","sources":["../../../src/commands/dump.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  /**
2
- * init.ts — wangchuan init command / init 命令
2
+ * init.ts — wangchuan init command
3
3
  */
4
4
  import type { InitOptions, WangchuanConfig } from '../types.js';
5
5
  export declare function cmdInit({ repo, force, key }: InitOptions): Promise<WangchuanConfig>;
@@ -1 +1 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/commands/init.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAKhE,wBAAsB,OAAO,CAAC,EAAE,IAAI,EAAE,KAAa,EAAE,GAAG,EAAE,EAAE,WAAW,GAAG,OAAO,CAAC,eAAe,CAAC,CAmDjG"}
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/commands/init.ts"],"names":[],"mappings":"AAAA;;GAEG;AAQH,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAKhE,wBAAsB,OAAO,CAAC,EAAE,IAAI,EAAE,KAAa,EAAE,GAAG,EAAE,EAAE,WAAW,GAAG,OAAO,CAAC,eAAe,CAAC,CAmDjG"}
@@ -1,60 +1,61 @@
1
1
  /**
2
- * init.ts — wangchuan init command / init 命令
2
+ * init.ts — wangchuan init command
3
3
  */
4
4
  import { config } from '../core/config.js';
5
5
  import { cryptoEngine } from '../core/crypto.js';
6
6
  import { gitEngine } from '../core/git.js';
7
7
  import { validator } from '../utils/validator.js';
8
8
  import { logger } from '../utils/logger.js';
9
+ import { t } from '../i18n.js';
9
10
  import ora from 'ora';
10
11
  import fs from 'fs';
11
12
  import path from 'path';
12
13
  export async function cmdInit({ repo, force = false, key }) {
13
- logger.banner('Wangchuan Init / 忘川初始化');
14
+ logger.banner(t('init.banner'));
14
15
  if (!validator.isGitUrl(repo)) {
15
- throw new Error(`Invalid Git URL / 无效的 Git 地址: ${repo}`);
16
+ throw new Error(t('init.invalidGitUrl', { repo }));
16
17
  }
17
18
  const existing = config.load();
18
19
  if (existing !== null && !force) {
19
- logger.warn(`Already initialized (repo: ${existing.repo}) / 忘川已初始化`);
20
- logger.info('Use --force to re-initialize / 如需重新初始化,请使用 --force 参数');
20
+ logger.warn(t('init.alreadyInit', { repo: existing.repo }));
21
+ logger.info(t('init.useForce'));
21
22
  return existing;
22
23
  }
23
- // ── Write config / 写配置 ──────────────────────────────────────
24
- let spinner = ora('Writing config … / 写入配置 …').start();
24
+ // ── Write config ────────────────────────────────────────────────
25
+ let spinner = ora(t('init.writingConfig')).start();
25
26
  const cfg = await config.initialize(repo);
26
- spinner.succeed(`Config saved / 配置已写入: ${config.paths.config}`);
27
- // ── Key / 密钥 ──────────────────────────────────────────────────
27
+ spinner.succeed(t('init.configSaved', { path: config.paths.config }));
28
+ // ── Key ─────────────────────────────────────────────────────────
28
29
  if (key) {
29
30
  const hex = key.trim();
30
31
  if (!/^[0-9a-fA-F]{64}$/.test(hex)) {
31
- throw new Error('Invalid key format, expected 64 hex chars (256-bit) / 密钥格式无效');
32
+ throw new Error(t('init.invalidKey'));
32
33
  }
33
34
  fs.mkdirSync(path.dirname(cfg.keyPath), { recursive: true });
34
35
  fs.writeFileSync(cfg.keyPath, hex, 'utf-8');
35
- logger.ok(`Master key imported / 主密钥已导入: ${cfg.keyPath}`);
36
+ logger.ok(t('init.keyImported', { path: cfg.keyPath }));
36
37
  }
37
38
  else if (!cryptoEngine.hasKey(cfg.keyPath)) {
38
- spinner = ora('Generating AES-256-GCM master key … / 生成主密钥 …').start();
39
+ spinner = ora(t('init.generatingKey')).start();
39
40
  cryptoEngine.generateKey(cfg.keyPath);
40
- spinner.succeed(`Master key generated / 主密钥已生成: ${cfg.keyPath}`);
41
+ spinner.succeed(t('init.keyGenerated', { path: cfg.keyPath }));
41
42
  }
42
43
  else {
43
- logger.info(`Master key exists, skipping / 主密钥已存在: ${cfg.keyPath}`);
44
+ logger.info(t('init.keyExists', { path: cfg.keyPath }));
44
45
  }
45
- // ── Clone/fetch repo / 克隆仓库 ────────────────────────────────
46
- spinner = ora(`Cloning repo / 克隆仓库: ${repo} …`).start();
46
+ // ── Clone/fetch repo ────────────────────────────────────────────
47
+ spinner = ora(t('init.cloningRepo', { repo })).start();
47
48
  try {
48
49
  await gitEngine.cloneOrFetch(repo, cfg.localRepoPath, cfg.branch);
49
- spinner.succeed(`Repo ready / 仓库已就绪: ${cfg.localRepoPath}`);
50
+ spinner.succeed(t('init.repoReady', { path: cfg.localRepoPath }));
50
51
  }
51
52
  catch (err) {
52
- spinner.fail('Clone failed / 克隆仓库失败');
53
- throw new Error(`Git operation failed / Git 操作失败: ${err.message}`);
53
+ spinner.fail(t('init.cloneFailed'));
54
+ throw new Error(t('init.gitFailed', { error: err.message }));
54
55
  }
55
- logger.ok('\nWangchuan initialized! / 忘川初始化完成!');
56
- logger.step('Next / 下一步: wangchuan pull (pull remote memories / 同步远端记忆到本地)');
57
- logger.step(' wangchuan push (push local memories / 推送本地记忆到远端)');
56
+ logger.ok('\n' + t('init.complete'));
57
+ logger.step(t('init.nextPull'));
58
+ logger.step(t('init.nextPush'));
58
59
  return cfg;
59
60
  }
60
61
  //# sourceMappingURL=init.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/commands/init.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/commands/init.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * lang.ts — wangchuan lang command
3
+ *
4
+ * Display or switch CLI display language.
5
+ */
6
+ export declare function cmdLang(language?: string): Promise<void>;
7
+ //# sourceMappingURL=lang.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lang.d.ts","sourceRoot":"","sources":["../../../src/commands/lang.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,wBAAsB,OAAO,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAU9D"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * lang.ts — wangchuan lang command
3
+ *
4
+ * Display or switch CLI display language.
5
+ */
6
+ import { getLang, setLang, t } from '../i18n.js';
7
+ import { logger } from '../utils/logger.js';
8
+ export async function cmdLang(language) {
9
+ if (!language) {
10
+ console.log(t('lang.current', { lang: getLang() }));
11
+ return;
12
+ }
13
+ if (language !== 'zh' && language !== 'en') {
14
+ throw new Error(t('lang.invalid'));
15
+ }
16
+ setLang(language);
17
+ logger.ok(t('lang.switched', { lang: language }));
18
+ }
19
+ //# sourceMappingURL=lang.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lang.js","sourceRoot":"","sources":["../../../src/commands/lang.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,YAAY,CAAC;AAEjD,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,QAAiB;IAC7C,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,cAAc,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;QACpD,OAAO;IACT,CAAC;IACD,IAAI,QAAQ,KAAK,IAAI,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;QAC3C,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC;IACrC,CAAC;IACD,OAAO,CAAC,QAAgB,CAAC,CAAC;IAC1B,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,eAAe,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;AACpD,CAAC"}
@@ -1,5 +1,5 @@
1
1
  /**
2
- * list.ts — wangchuan list command / list 命令
2
+ * list.ts — wangchuan list command
3
3
  *
4
4
  * Lists all managed config files with local/repo presence.
5
5
  * Grouped by agent and shared tier.
@@ -1 +1 @@
1
- {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../src/commands/list.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAQH,OAAO,KAAK,EAAE,WAAW,EAAuB,MAAM,aAAa,CAAC;AAUpE,wBAAsB,OAAO,CAAC,EAAE,KAAK,EAAE,GAAE,WAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CA+CxE"}
1
+ {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../src/commands/list.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AASH,OAAO,KAAK,EAAE,WAAW,EAAuB,MAAM,aAAa,CAAC;AAUpE,wBAAsB,OAAO,CAAC,EAAE,KAAK,EAAE,GAAE,WAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAgDxE"}