wangchuan 2.4.0 → 2.5.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.
Files changed (61) hide show
  1. package/dist/bin/wangchuan.d.ts +2 -2
  2. package/dist/bin/wangchuan.js +32 -24
  3. package/dist/bin/wangchuan.js.map +1 -1
  4. package/dist/src/commands/diff.d.ts +1 -1
  5. package/dist/src/commands/diff.d.ts.map +1 -1
  6. package/dist/src/commands/diff.js +13 -12
  7. package/dist/src/commands/diff.js.map +1 -1
  8. package/dist/src/commands/dump.d.ts +1 -1
  9. package/dist/src/commands/dump.d.ts.map +1 -1
  10. package/dist/src/commands/dump.js +12 -9
  11. package/dist/src/commands/dump.js.map +1 -1
  12. package/dist/src/commands/init.d.ts +1 -1
  13. package/dist/src/commands/init.d.ts.map +1 -1
  14. package/dist/src/commands/init.js +23 -22
  15. package/dist/src/commands/init.js.map +1 -1
  16. package/dist/src/commands/lang.d.ts +7 -0
  17. package/dist/src/commands/lang.d.ts.map +1 -0
  18. package/dist/src/commands/lang.js +19 -0
  19. package/dist/src/commands/lang.js.map +1 -0
  20. package/dist/src/commands/list.d.ts +1 -1
  21. package/dist/src/commands/list.d.ts.map +1 -1
  22. package/dist/src/commands/list.js +10 -8
  23. package/dist/src/commands/list.js.map +1 -1
  24. package/dist/src/commands/pull.d.ts +1 -1
  25. package/dist/src/commands/pull.d.ts.map +1 -1
  26. package/dist/src/commands/pull.js +21 -16
  27. package/dist/src/commands/pull.js.map +1 -1
  28. package/dist/src/commands/push.d.ts +1 -1
  29. package/dist/src/commands/push.d.ts.map +1 -1
  30. package/dist/src/commands/push.js +29 -24
  31. package/dist/src/commands/push.js.map +1 -1
  32. package/dist/src/commands/status.d.ts +1 -1
  33. package/dist/src/commands/status.d.ts.map +1 -1
  34. package/dist/src/commands/status.js +26 -25
  35. package/dist/src/commands/status.js.map +1 -1
  36. package/dist/src/core/config.d.ts.map +1 -1
  37. package/dist/src/core/config.js +3 -2
  38. package/dist/src/core/config.js.map +1 -1
  39. package/dist/src/core/migrate.d.ts +12 -12
  40. package/dist/src/core/migrate.d.ts.map +1 -1
  41. package/dist/src/core/migrate.js +39 -42
  42. package/dist/src/core/migrate.js.map +1 -1
  43. package/dist/src/core/sync.d.ts.map +1 -1
  44. package/dist/src/core/sync.js +11 -10
  45. package/dist/src/core/sync.js.map +1 -1
  46. package/dist/src/i18n.d.ts +22 -0
  47. package/dist/src/i18n.d.ts.map +1 -0
  48. package/dist/src/i18n.js +223 -0
  49. package/dist/src/i18n.js.map +1 -0
  50. package/dist/src/types.d.ts +2 -0
  51. package/dist/src/types.d.ts.map +1 -1
  52. package/dist/src/utils/prompt.d.ts +1 -1
  53. package/dist/src/utils/prompt.d.ts.map +1 -1
  54. package/dist/src/utils/prompt.js +6 -5
  55. package/dist/src/utils/prompt.js.map +1 -1
  56. package/dist/src/utils/validator.d.ts +1 -1
  57. package/dist/src/utils/validator.d.ts.map +1 -1
  58. package/dist/src/utils/validator.js +3 -2
  59. package/dist/src/utils/validator.js.map +1 -1
  60. package/package.json +1 -1
  61. package/skill/wangchuan-skill.sh +2 -2
@@ -0,0 +1,223 @@
1
+ /**
2
+ * i18n.ts — Internationalization core module
3
+ *
4
+ * Provides language switching (zh/en) for all CLI messages.
5
+ * Language priority: WANGCHUAN_LANG env > config.json lang field > default 'zh'
6
+ *
7
+ * Zero dependencies on other project modules to avoid circular imports.
8
+ * Reads config.json directly via fs.
9
+ */
10
+ import fs from 'fs';
11
+ import os from 'os';
12
+ import path from 'path';
13
+ const CONFIG_PATH = path.join(os.homedir(), '.wangchuan', 'config.json');
14
+ let cachedLang;
15
+ export function getLang() {
16
+ if (cachedLang !== undefined)
17
+ return cachedLang;
18
+ const env = process.env['WANGCHUAN_LANG'];
19
+ if (env === 'en' || env === 'zh') {
20
+ cachedLang = env;
21
+ return env;
22
+ }
23
+ try {
24
+ const raw = fs.readFileSync(CONFIG_PATH, 'utf-8');
25
+ const cfg = JSON.parse(raw);
26
+ if (cfg.lang === 'en' || cfg.lang === 'zh') {
27
+ cachedLang = cfg.lang;
28
+ return cfg.lang;
29
+ }
30
+ }
31
+ catch { /* config not found or invalid — use default */ }
32
+ cachedLang = 'zh';
33
+ return 'zh';
34
+ }
35
+ export function setLang(lang) {
36
+ let cfg = {};
37
+ if (fs.existsSync(CONFIG_PATH)) {
38
+ cfg = JSON.parse(fs.readFileSync(CONFIG_PATH, 'utf-8'));
39
+ }
40
+ cfg['lang'] = lang;
41
+ fs.mkdirSync(path.dirname(CONFIG_PATH), { recursive: true });
42
+ fs.writeFileSync(CONFIG_PATH, JSON.stringify(cfg, null, 2), 'utf-8');
43
+ cachedLang = lang;
44
+ }
45
+ /** Reset lang cache (for testing or after external config changes) */
46
+ export function resetLangCache() { cachedLang = undefined; }
47
+ const M = {
48
+ // ── CLI ──────────────────────────────────────────────────────
49
+ 'cli.description': ['Wangchuan · AI Memory Sync System', '忘川 · AI 记忆同步系统'],
50
+ 'cli.invalidAgent': ['--agent must be openclaw | claude | gemini, got: {val}', '--agent 必须是 openclaw | claude | gemini,收到: {val}'],
51
+ 'cli.cmd.init': ['Initialize Wangchuan, configure repo and generate key', '初始化忘川,配置仓库并生成密钥'],
52
+ 'cli.cmd.init.repo': ['Git repo URL (SSH or HTTPS)', 'Git 仓库地址'],
53
+ 'cli.cmd.init.key': ['Import existing master key (hex string)', '导入已有的主密钥(十六进制字符串)'],
54
+ 'cli.cmd.init.force': ['Force re-init (overwrite existing config)', '强制重新初始化'],
55
+ 'cli.cmd.pull': ['Pull and restore configs from remote repo', '从远端仓库拉取并还原配置到本地'],
56
+ 'cli.cmd.agent': ['Filter by agent (openclaw|claude|gemini)', '只操作指定智能体 (openclaw|claude|gemini)'],
57
+ 'cli.cmd.push': ['Encrypt and push local configs to remote repo', '将本地配置加密后推送到远端仓库'],
58
+ 'cli.cmd.push.msg': ['Custom commit message', '自定义提交信息'],
59
+ 'cli.cmd.status': ['Show sync status and workspace diff', '查看同步状态和工作区差异'],
60
+ 'cli.cmd.diff': ['Show line-level diff between local and repo', '显示本地与仓库的行级文件差异'],
61
+ 'cli.cmd.list': ['List all managed configs with local/repo status', '列出所有受管配置项及其状态'],
62
+ 'cli.cmd.dump': ['Generate plaintext snapshot to temp dir', '生成明文快照到临时目录'],
63
+ 'cli.cmd.lang': ['Set display language (zh|en)', '设置显示语言 (zh|en)'],
64
+ // ── lang command ────────────────────────────────────────────
65
+ 'lang.current': ['Current language: {lang}', '当前语言: {lang}'],
66
+ 'lang.switched': ['Language set to {lang}', '语言已切换为 {lang}'],
67
+ 'lang.invalid': ['Invalid language, use: zh | en', '无效的语言选项,请使用: zh | en'],
68
+ // ── init ────────────────────────────────────────────────────
69
+ 'init.banner': ['Wangchuan Init', '忘川初始化'],
70
+ 'init.invalidGitUrl': ['Invalid Git URL: {repo}', '无效的 Git 地址: {repo}'],
71
+ 'init.alreadyInit': ['Already initialized (repo: {repo})', '忘川已初始化 (repo: {repo})'],
72
+ 'init.useForce': ['Use --force to re-initialize', '如需重新初始化,请使用 --force 参数'],
73
+ 'init.writingConfig': ['Writing config …', '写入配置 …'],
74
+ 'init.configSaved': ['Config saved: {path}', '配置已写入: {path}'],
75
+ 'init.invalidKey': ['Invalid key format, expected 64 hex chars (256-bit)', '密钥格式无效,需要 64 位十六进制字符'],
76
+ 'init.keyImported': ['Master key imported: {path}', '主密钥已导入: {path}'],
77
+ 'init.generatingKey': ['Generating AES-256-GCM master key …', '生成主密钥 …'],
78
+ 'init.keyGenerated': ['Master key generated: {path}', '主密钥已生成: {path}'],
79
+ 'init.keyExists': ['Master key exists, skipping: {path}', '主密钥已存在: {path}'],
80
+ 'init.cloningRepo': ['Cloning repo: {repo} …', '克隆仓库: {repo} …'],
81
+ 'init.repoReady': ['Repo ready: {path}', '仓库已就绪: {path}'],
82
+ 'init.cloneFailed': ['Clone failed', '克隆仓库失败'],
83
+ 'init.gitFailed': ['Git operation failed: {error}', 'Git 操作失败: {error}'],
84
+ 'init.complete': ['Wangchuan initialized!', '忘川初始化完成!'],
85
+ 'init.nextPull': ['Next: wangchuan pull (pull remote memories)', '下一步: wangchuan pull (同步远端记忆到本地)'],
86
+ 'init.nextPush': [' wangchuan push (push local memories)', ' wangchuan push (推送本地记忆到远端)'],
87
+ // ── pull ────────────────────────────────────────────────────
88
+ 'pull.banner': ['Wangchuan · Pull', '忘川 · 拉取配置'],
89
+ 'pull.filterAgent': ['Filter agent: {agent}', '过滤智能体: {agent}'],
90
+ 'pull.pulling': ['Pulling from {repo} …', '从 {repo} 拉取 …'],
91
+ 'pull.pulled': ['Remote configs pulled', '远端配置已拉取'],
92
+ 'pull.gitFailed': ['Git pull failed', 'Git 拉取失败'],
93
+ 'pull.gitFailedDetail': ['Git pull failed: {error}', 'Git pull 失败: {error}'],
94
+ 'pull.restoreFailed': ['Restore failed: {error}', '还原失败: {error}'],
95
+ 'pull.noConfigs': ['No configs in repo yet, run wangchuan push first', '仓库中暂无配置,请先 push'],
96
+ 'pull.decrypted': ['[decrypted]', '[已解密]'],
97
+ 'pull.skipped': ['Skipped (not in repo): {count} files', '跳过(仓库中不存在): {count} 个文件'],
98
+ 'pull.localOnly': ['Detected {count} local-only files:', '检测到 {count} 个本地独有文件:'],
99
+ 'pull.suggestPush': ['Run wangchuan push to sync', '如需同步到云端,请执行 wangchuan push'],
100
+ 'pull.summary': ['Synced {synced} files ({encrypted} encrypted, {conflicts} conflicts)', '共同步 {synced} 个文件({encrypted} 个加密,{conflicts} 个冲突)'],
101
+ // ── push ────────────────────────────────────────────────────
102
+ 'push.banner': ['Wangchuan · Push', '忘川 · 推送配置'],
103
+ 'push.filterAgent': ['Filter agent: {agent}', '过滤智能体: {agent}'],
104
+ 'push.commitMsgCustom': ['sync: {message} [update {tag}{host}]', 'sync: {message} [更新 {tag}{host}]'],
105
+ 'push.commitMsgDefault': ['sync: update configs {tag}[{host}]', 'sync: 更新配置 {tag}[{host}]'],
106
+ 'push.staging': ['Encrypting and staging files …', '加密并准备配置文件 …'],
107
+ 'push.staged': ['Staged {count} files', '已准备 {count} 个文件'],
108
+ 'push.stagingFailed': ['Staging failed', '暂存文件失败'],
109
+ 'push.stagingFailedDetail': ['Staging failed: {error}', '准备文件失败: {error}'],
110
+ 'push.noFiles': ['No syncable files found, check workspace paths', '没有可同步的文件,请检查工作区路径'],
111
+ 'push.committing': ['Committing and pushing …', '提交并推送到远端仓库 …'],
112
+ 'push.pushed': ['Pushed to {repo}', '已推送到 {repo}'],
113
+ 'push.nothingToCommit': ['Nothing to commit (repo is up to date)', '没有变更需要提交'],
114
+ 'push.pushFailed': ['Push failed, rolling back …', '推送失败,正在回滚 …'],
115
+ 'push.rollbackFailed': ['Rollback failed: {error}', '回滚失败: {error}'],
116
+ 'push.pushFailedDetail': ['Push failed: {error}', '推送失败: {error}'],
117
+ 'push.encrypted': ['[encrypted]', '[已加密]'],
118
+ 'push.pruned': ['[pruned]', '[已清理]'],
119
+ 'push.prunedSummary': [', pruned {count} stale', ',清理 {count} 个过期文件'],
120
+ 'push.complete': ['Push complete: {count} files{pruned}, commit: {sha}', '推送完成: {count} 个文件{pruned},commit: {sha}'],
121
+ // ── status ──────────────────────────────────────────────────
122
+ 'status.banner': ['Wangchuan · Status', '忘川 · 同步状态'],
123
+ 'status.repo': ['Repo: ', '仓库地址:'],
124
+ 'status.local': ['Local: ', '本地路径:'],
125
+ 'status.branch': ['Branch: ', '分支: '],
126
+ 'status.agent': ['Agent: ', '过滤智能体:'],
127
+ 'status.recentCommits': ['Recent commits:', '最近提交:'],
128
+ 'status.cannotReadLog': ['Cannot read git log (repo may not be cloned)', '无法读取 git 日志'],
129
+ 'status.uncommitted': ['Uncommitted changes:', '本地仓库(未提交变更):'],
130
+ 'status.inSync': ['Local repo in sync with remote', '本地仓库与远端保持一致'],
131
+ 'status.noSync': ['Workspace matches repo, no sync needed', '工作区与仓库一致,无需同步'],
132
+ 'status.workspaceDiff': ['Workspace diff:', '工作区差异:'],
133
+ 'status.newTag': ['(new, will sync on push)', '(本地新增)'],
134
+ 'status.modifiedTag': ['(modified)', '(已修改)'],
135
+ 'status.missingTag': ['(missing, will restore on pull)', '(本地缺失)'],
136
+ 'status.addedLabel': ['added', '新增'],
137
+ 'status.modifiedLabel': ['modified', '修改'],
138
+ 'status.missingLabel': ['missing', '缺失'],
139
+ 'status.diffFailed': ['Diff analysis failed: {error}', '差异分析失败: {error}'],
140
+ 'status.inventory': ['Config inventory ({count} items):', '配置文件清单({count} 项):'],
141
+ 'status.fieldLabel': ['[field]', '[字段]'],
142
+ // ── diff ────────────────────────────────────────────────────
143
+ 'diff.banner': ['Wangchuan · Diff', '忘川 · 文件差异'],
144
+ 'diff.filterAgent': ['Filter agent: {agent}', '过滤智能体: {agent}'],
145
+ 'diff.newFile': ['(new, not in repo)', '(新增,仓库中不存在)'],
146
+ 'diff.missingFile': ['(missing locally)', '(本地缺失)'],
147
+ 'diff.cannotDecrypt': ['[encrypted, cannot decrypt]', '[加密文件,无法解密比较]'],
148
+ 'diff.repoVersion': ['--- repo version', '--- 仓库版本'],
149
+ 'diff.localVersion': ['+++ local version', '+++ 本地版本'],
150
+ 'diff.noDiff': ['All files match repo, no diff', '所有文件与仓库一致,无差异'],
151
+ 'diff.filesDiffer': ['{count} files differ', '{count} 个文件有差异'],
152
+ // ── list ────────────────────────────────────────────────────
153
+ 'list.banner': ['Wangchuan · List', '忘川 · 配置清单'],
154
+ 'list.tierShared': ['Shared (cross-agent)', '共享(跨 Agent)'],
155
+ 'list.localLabel': ['local', '本地'],
156
+ 'list.repoLabel': ['repo', '仓库'],
157
+ 'list.fieldLabel': ['[field]', '[字段]'],
158
+ 'list.totalFiles': ['{count} config files', '共 {count} 个配置文件'],
159
+ 'list.legend': ['✔ = exists · = not in repo [enc] = encrypted [field] = JSON field extraction', '✔ = 存在 · = 仓库中尚无 [enc] = 加密 [字段] = JSON 字段提取'],
160
+ // ── dump ────────────────────────────────────────────────────
161
+ 'dump.banner': ['Wangchuan · Dump', '忘川 · 明文快照'],
162
+ 'dump.skipJson': ['Skipping JSON extraction (parse error): {path}', '跳过 JSON 字段提取: {path}'],
163
+ 'dump.srcEncrypted': ['[src encrypted]', '[原文件加密]'],
164
+ 'dump.fieldExtraction': ['[field extraction]', '[字段提取]'],
165
+ 'dump.outputDir': ['Output dir: ', '输出目录:'],
166
+ 'dump.fileCount': ['File count: ', '文件数量:'],
167
+ 'dump.files': ['{count} files', '{count} 个文件'],
168
+ 'dump.skippedCount': ['({count} skipped)', '({count} 个跳过)'],
169
+ 'dump.warning': ['Warning: this dir contains plaintext sensitive data, delete after inspection', '提示:含明文敏感信息,查看后请删除'],
170
+ // ── validator ───────────────────────────────────────────────
171
+ 'validator.notInit': ['Wangchuan not initialized, run: wangchuan init --repo <url>', '忘川尚未初始化,请执行: wangchuan init --repo <url>'],
172
+ // ── prompt ──────────────────────────────────────────────────
173
+ 'prompt.conflict': ['Conflict: {file}', '冲突: {file}'],
174
+ 'prompt.conflictDesc': ['Local file exists and differs.', '本地文件已存在且内容不同。'],
175
+ 'prompt.conflictChoices': ['[o] Overwrite [s] Skip [A] Overwrite all [S] Skip all', '[o] 覆盖 [s] 跳过 [A] 全部覆盖 [S] 全部跳过'],
176
+ 'prompt.choose': ['Choose [o/s/A/S]: ', '请选择 [o/s/A/S]: '],
177
+ // ── migrate ─────────────────────────────────────────────────
178
+ 'migrate.incomplete': ['Incomplete migration detected, rolling back from backup …', '检测到上次迁移未完成,正在回滚 …'],
179
+ 'migrate.rolledBack': ['Rolled back from backup, restarting migration', '已从备份回滚,重新开始迁移'],
180
+ 'migrate.backingUp': ['Backing up old repo structure …', '备份旧 repo 结构 …'],
181
+ 'migrate.validationFailed': ['Migration validation failed: {path} not found', '迁移校验失败: {path} 不存在'],
182
+ 'migrate.failed': ['Migration failed: {error}', '迁移失败: {error}'],
183
+ 'migrate.rollingBack': ['Rolling back from backup …', '正在从备份回滚 …'],
184
+ 'migrate.rolledBackOk': ['Rolled back to pre-migration state', '已回滚到迁移前状态'],
185
+ 'migrate.rollbackFailed': ['Rollback failed: {error}', '回滚失败: {error}'],
186
+ 'migrate.manualRestore': ['Please manually restore from {path}', '请手动从 {path} 恢复'],
187
+ 'migrate.detecting': ['Detected v{from} config, migrating to v{to} …', '检测到 v{from} 配置,正在迁移至 v{to} …'],
188
+ 'migrate.complete': ['Config migration complete', '配置迁移完成'],
189
+ 'migrate.backedUp': ['Old data backed up to {path}/backup-v1/', '旧数据已备份到 {path}/backup-v1/'],
190
+ // ── sync (debug) ────────────────────────────────────────────
191
+ 'sync.distributeSkill': ['distribute skill: {file} → {agent}', '分发 skill: {file} → {agent}'],
192
+ 'sync.distributeMcp': ['distribute MCP servers → {agent}', '分发 MCP servers → {agent}'],
193
+ 'sync.pruneStale': ['repo prune stale: {file}', 'repo 清理过期文件: {file}'],
194
+ 'sync.skipNotFound': ['Skipping (not found): {path}', '跳过(不存在): {path}'],
195
+ 'sync.skipJsonParse': ['Skipping JSON field extraction (parse error): {path} — {error}', '跳过 JSON 字段提取(解析失败): {path} — {error}'],
196
+ 'sync.sensitiveData': ['Possible plaintext sensitive data detected: {path}', '检测到疑似明文敏感信息: {path}'],
197
+ 'sync.suggestEncrypt': ['Consider setting encrypt:true in config', '建议标记为 encrypt:true'],
198
+ 'sync.skipNotInRepo': ['Skipping (not in repo): {file}', '跳过(仓库中不存在): {file}'],
199
+ 'sync.skippedKeepLocal': ['Skipped (keep local): {file}', '跳过(保留本地): {file}'],
200
+ // ── config ──────────────────────────────────────────────────
201
+ 'config.loadFailed': ['Failed to load config: {error}', '读取配置失败: {error}'],
202
+ 'config.saved': ['Config saved to {path}', '配置已保存到 {path}'],
203
+ };
204
+ /**
205
+ * Translate a message key, optionally interpolating {param} placeholders.
206
+ *
207
+ * @example t('init.banner')
208
+ * @example t('push.staged', { count: 26 })
209
+ */
210
+ export function t(key, params) {
211
+ const entry = M[key];
212
+ if (!entry)
213
+ return key;
214
+ const idx = getLang() === 'en' ? 0 : 1;
215
+ let msg = entry[idx];
216
+ if (params) {
217
+ for (const [k, v] of Object.entries(params)) {
218
+ msg = msg.replaceAll(`{${k}}`, String(v));
219
+ }
220
+ }
221
+ return msg;
222
+ }
223
+ //# sourceMappingURL=i18n.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"i18n.js","sourceRoot":"","sources":["../../src/i18n.ts"],"names":[],"mappings":"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"}
@@ -74,6 +74,8 @@ export interface WangchuanConfig {
74
74
  };
75
75
  /** 跨 agent 共享配置 */
76
76
  readonly shared?: SharedConfig;
77
+ /** 显示语言 */
78
+ readonly lang?: 'zh' | 'en';
77
79
  }
78
80
  /** 支持过滤的智能体名称 */
79
81
  export type AgentName = 'openclaw' | 'claude' | 'gemini';
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  /**
2
- * prompt.ts — Interactive user confirmation / 交互式用户确认工具
2
+ * prompt.ts — Interactive user confirmation
3
3
  *
4
4
  * Provides single-file conflict prompt and batch conflict strategy,
5
5
  * supports TTY interactive and CI non-interactive mode (WANGCHUAN_NONINTERACTIVE=1).
@@ -1 +1 @@
1
- {"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../../../src/utils/prompt.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,6DAA6D;AAC7D,MAAM,MAAM,gBAAgB,GACxB,WAAW,GACX,MAAM,GACN,eAAe,GACf,UAAU,CAAC;AAKf;;;GAGG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA0B5E"}
1
+ {"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../../../src/utils/prompt.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,6DAA6D;AAC7D,MAAM,MAAM,gBAAgB,GACxB,WAAW,GACX,MAAM,GACN,eAAe,GACf,UAAU,CAAC;AAKf;;;GAGG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA0B5E"}
@@ -1,10 +1,11 @@
1
1
  /**
2
- * prompt.ts — Interactive user confirmation / 交互式用户确认工具
2
+ * prompt.ts — Interactive user confirmation
3
3
  *
4
4
  * Provides single-file conflict prompt and batch conflict strategy,
5
5
  * supports TTY interactive and CI non-interactive mode (WANGCHUAN_NONINTERACTIVE=1).
6
6
  */
7
7
  import readline from 'readline';
8
+ import { t } from '../i18n.js';
8
9
  /** Default strategy for non-interactive mode (CI) */
9
10
  const NON_INTERACTIVE_DEFAULT = 'skip';
10
11
  /**
@@ -17,10 +18,10 @@ export async function askConflict(repoRel) {
17
18
  }
18
19
  const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
19
20
  return new Promise(resolve => {
20
- process.stdout.write(`\n ⚡ Conflict / 冲突: ${repoRel}\n` +
21
- ` Local file exists and differs / 本地文件已存在且内容不同。\n` +
22
- ` [o] Overwrite/覆盖 [s] Skip/跳过 [A] Overwrite all/全部覆盖 [S] Skip all/全部跳过\n` +
23
- ` Choose / 请选择 [o/s/A/S]: `);
21
+ process.stdout.write(`\n ⚡ ${t('prompt.conflict', { file: repoRel })}\n` +
22
+ ` ${t('prompt.conflictDesc')}\n` +
23
+ ` ${t('prompt.conflictChoices')}\n` +
24
+ ` ${t('prompt.choose')}`);
24
25
  rl.once('line', (ans) => {
25
26
  rl.close();
26
27
  switch (ans.trim()) {
@@ -1 +1 @@
1
- {"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../../src/utils/prompt.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,QAAQ,MAAM,UAAU,CAAC;AAShC,qDAAqD;AACrD,MAAM,uBAAuB,GAAqB,MAAM,CAAC;AAEzD;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,OAAe;IAC/C,IAAI,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QAC5E,OAAO,uBAAuB,CAAC;IACjC,CAAC;IAED,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAEtF,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE;QAC3B,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,wBAAwB,OAAO,IAAI;YACnC,sDAAsD;YACtD,iFAAiF;YACjF,4BAA4B,CAC7B,CAAC;QAEF,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,GAAW,EAAE,EAAE;YAC9B,EAAE,CAAC,KAAK,EAAE,CAAC;YACX,QAAQ,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC;gBACnB,KAAK,GAAG,CAAC,CAAC,OAAO,OAAO,CAAC,WAAW,CAAC,CAAC;gBACtC,KAAK,GAAG,CAAC,CAAC,OAAO,OAAO,CAAC,eAAe,CAAC,CAAC;gBAC1C,KAAK,GAAG,CAAC,CAAC,OAAO,OAAO,CAAC,UAAU,CAAC,CAAC;gBACrC,KAAK,GAAG,CAAC;gBACT,OAAO,CAAC,CAAE,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC;YACnC,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../../src/utils/prompt.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,CAAC,EAAE,MAAM,YAAY,CAAC;AAS/B,qDAAqD;AACrD,MAAM,uBAAuB,GAAqB,MAAM,CAAC;AAEzD;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,OAAe;IAC/C,IAAI,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QAC5E,OAAO,uBAAuB,CAAC;IACjC,CAAC;IAED,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAEtF,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE;QAC3B,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,SAAS,CAAC,CAAC,iBAAiB,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,IAAI;YACpD,QAAQ,CAAC,CAAC,qBAAqB,CAAC,IAAI;YACpC,QAAQ,CAAC,CAAC,wBAAwB,CAAC,IAAI;YACvC,KAAK,CAAC,CAAC,eAAe,CAAC,EAAE,CAC1B,CAAC;QAEF,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,GAAW,EAAE,EAAE;YAC9B,EAAE,CAAC,KAAK,EAAE,CAAC;YACX,QAAQ,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC;gBACnB,KAAK,GAAG,CAAC,CAAC,OAAO,OAAO,CAAC,WAAW,CAAC,CAAC;gBACtC,KAAK,GAAG,CAAC,CAAC,OAAO,OAAO,CAAC,eAAe,CAAC,CAAC;gBAC1C,KAAK,GAAG,CAAC,CAAC,OAAO,OAAO,CAAC,UAAU,CAAC,CAAC;gBACrC,KAAK,GAAG,CAAC;gBACT,OAAO,CAAC,CAAE,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC;YACnC,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -1,5 +1,5 @@
1
1
  /**
2
- * validator.ts — Common validation functions / 通用校验函数
2
+ * validator.ts — Common validation functions
3
3
  *
4
4
  * requireInit uses TypeScript asserts predicate to narrow cfg to non-null.
5
5
  * Must declare explicit interface (TS2775: assertion functions cannot be called through inferred const objects).
@@ -1 +1 @@
1
- {"version":3,"file":"validator.d.ts","sourceRoot":"","sources":["../../../src/utils/validator.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAUnD,UAAU,SAAS;IACjB,UAAU,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAC/B,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IAC/B,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;IAChD,WAAW,CAAC,GAAG,EAAE,eAAe,GAAG,IAAI,GAAG,OAAO,CAAC,GAAG,IAAI,eAAe,CAAC;CAC1E;AAED,eAAO,MAAM,SAAS,EAAE,SAmBvB,CAAC"}
1
+ {"version":3,"file":"validator.d.ts","sourceRoot":"","sources":["../../../src/utils/validator.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAUnD,UAAU,SAAS;IACjB,UAAU,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAC/B,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IAC/B,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;IAChD,WAAW,CAAC,GAAG,EAAE,eAAe,GAAG,IAAI,GAAG,OAAO,CAAC,GAAG,IAAI,eAAe,CAAC;CAC1E;AAED,eAAO,MAAM,SAAS,EAAE,SAmBvB,CAAC"}
@@ -1,10 +1,11 @@
1
1
  /**
2
- * validator.ts — Common validation functions / 通用校验函数
2
+ * validator.ts — Common validation functions
3
3
  *
4
4
  * requireInit uses TypeScript asserts predicate to narrow cfg to non-null.
5
5
  * Must declare explicit interface (TS2775: assertion functions cannot be called through inferred const objects).
6
6
  */
7
7
  import fs from 'fs';
8
+ import { t } from '../i18n.js';
8
9
  const SENSITIVE_PATTERNS = [
9
10
  /sk-[A-Za-z0-9]{20,}/,
10
11
  /api[_-]?key\s*[:=]\s*["']?\S+/i,
@@ -26,7 +27,7 @@ export const validator = {
26
27
  },
27
28
  requireInit(cfg) {
28
29
  if (cfg === null) {
29
- throw new Error('Wangchuan not initialized, run: wangchuan init --repo <url> / 忘川尚未初始化');
30
+ throw new Error(t('validator.notInit'));
30
31
  }
31
32
  },
32
33
  };
@@ -1 +1 @@
1
- {"version":3,"file":"validator.js","sourceRoot":"","sources":["../../../src/utils/validator.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,MAAM,IAAI,CAAC;AAGpB,MAAM,kBAAkB,GAAsB;IAC5C,qBAAqB;IACrB,gCAAgC;IAChC,8BAA8B;IAC9B,6BAA6B;IAC7B,2BAA2B;CAC5B,CAAC;AASF,MAAM,CAAC,MAAM,SAAS,GAAc;IAClC,UAAU,CAAC,CAAS;QAClB,OAAO,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IAC1B,CAAC;IAED,QAAQ,CAAC,GAAW;QAClB,IAAI,CAAC,GAAG;YAAE,OAAO,KAAK,CAAC;QACvB,OAAO,+BAA+B,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;IAC1D,CAAC;IAED,qBAAqB,CAAC,OAAe;QACnC,OAAO,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;IACzD,CAAC;IAED,WAAW,CAAC,GAA2B;QACrC,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,uEAAuE,CAAC,CAAC;QAC3F,CAAC;IACH,CAAC;CACF,CAAC"}
1
+ {"version":3,"file":"validator.js","sourceRoot":"","sources":["../../../src/utils/validator.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,CAAC,EAAE,MAAM,YAAY,CAAC;AAG/B,MAAM,kBAAkB,GAAsB;IAC5C,qBAAqB;IACrB,gCAAgC;IAChC,8BAA8B;IAC9B,6BAA6B;IAC7B,2BAA2B;CAC5B,CAAC;AASF,MAAM,CAAC,MAAM,SAAS,GAAc;IAClC,UAAU,CAAC,CAAS;QAClB,OAAO,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IAC1B,CAAC;IAED,QAAQ,CAAC,GAAW;QAClB,IAAI,CAAC,GAAG;YAAE,OAAO,KAAK,CAAC;QACvB,OAAO,+BAA+B,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;IAC1D,CAAC;IAED,qBAAqB,CAAC,OAAe;QACnC,OAAO,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;IACzD,CAAC;IAED,WAAW,CAAC,GAA2B;QACrC,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC;CACF,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "wangchuan",
3
- "version": "2.4.0",
3
+ "version": "2.5.0",
4
4
  "description": "忘川 · AI 记忆同步系统 — 智能体记忆永不遗失",
5
5
  "bin": {
6
6
  "wangchuan": "./dist/bin/wangchuan.js"
@@ -41,7 +41,7 @@ CMD="${1:-status}"
41
41
  shift || true # Remove first arg, pass remaining / 移除第一个参数,剩余透传
42
42
 
43
43
  case "$CMD" in
44
- pull|push|status|diff|list|dump)
44
+ pull|push|status|diff|list|dump|lang)
45
45
  node "$BIN" "$CMD" "$@"
46
46
  ;;
47
47
  init)
@@ -49,7 +49,7 @@ case "$CMD" in
49
49
  ;;
50
50
  *)
51
51
  echo "✖ Unknown command / 未知命令: $CMD" >&2
52
- echo " Available / 可用: pull | push | status | diff | list | dump | init" >&2
52
+ echo " Available / 可用: pull | push | status | diff | list | dump | lang | init" >&2
53
53
  exit 1
54
54
  ;;
55
55
  esac