wangchuan 1.0.2 → 2.2.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 (52) hide show
  1. package/.wangchuan/config.example.json +44 -19
  2. package/README.md +145 -91
  3. package/dist/bin/wangchuan.js +9 -0
  4. package/dist/bin/wangchuan.js.map +1 -1
  5. package/dist/src/commands/diff.d.ts.map +1 -1
  6. package/dist/src/commands/diff.js +3 -1
  7. package/dist/src/commands/diff.js.map +1 -1
  8. package/dist/src/commands/dump.d.ts +9 -0
  9. package/dist/src/commands/dump.d.ts.map +1 -0
  10. package/dist/src/commands/dump.js +68 -0
  11. package/dist/src/commands/dump.js.map +1 -0
  12. package/dist/src/commands/list.d.ts +1 -1
  13. package/dist/src/commands/list.d.ts.map +1 -1
  14. package/dist/src/commands/list.js +26 -12
  15. package/dist/src/commands/list.js.map +1 -1
  16. package/dist/src/commands/pull.d.ts.map +1 -1
  17. package/dist/src/commands/pull.js +11 -1
  18. package/dist/src/commands/pull.js.map +1 -1
  19. package/dist/src/commands/push.d.ts.map +1 -1
  20. package/dist/src/commands/push.js +13 -5
  21. package/dist/src/commands/push.js.map +1 -1
  22. package/dist/src/commands/status.d.ts.map +1 -1
  23. package/dist/src/commands/status.js +5 -2
  24. package/dist/src/commands/status.js.map +1 -1
  25. package/dist/src/core/config.d.ts +8 -1
  26. package/dist/src/core/config.d.ts.map +1 -1
  27. package/dist/src/core/config.js +54 -15
  28. package/dist/src/core/config.js.map +1 -1
  29. package/dist/src/core/json-field.d.ts +17 -0
  30. package/dist/src/core/json-field.d.ts.map +1 -0
  31. package/dist/src/core/json-field.js +21 -0
  32. package/dist/src/core/json-field.js.map +1 -0
  33. package/dist/src/core/migrate.d.ts +22 -0
  34. package/dist/src/core/migrate.d.ts.map +1 -0
  35. package/dist/src/core/migrate.js +183 -0
  36. package/dist/src/core/migrate.js.map +1 -0
  37. package/dist/src/core/sync.d.ts +7 -0
  38. package/dist/src/core/sync.d.ts.map +1 -1
  39. package/dist/src/core/sync.js +423 -68
  40. package/dist/src/core/sync.js.map +1 -1
  41. package/dist/src/types.d.ts +62 -17
  42. package/dist/src/types.d.ts.map +1 -1
  43. package/dist/test/json-field.test.d.ts +5 -0
  44. package/dist/test/json-field.test.d.ts.map +1 -0
  45. package/dist/test/json-field.test.js +71 -0
  46. package/dist/test/json-field.test.js.map +1 -0
  47. package/dist/test/sync.test.d.ts +13 -0
  48. package/dist/test/sync.test.d.ts.map +1 -0
  49. package/dist/test/sync.test.js +477 -0
  50. package/dist/test/sync.test.js.map +1 -0
  51. package/package.json +2 -2
  52. package/skill/SKILL.md +52 -39
@@ -0,0 +1,183 @@
1
+ /**
2
+ * migrate.ts — 配置版本迁移
3
+ *
4
+ * v1 → v2:
5
+ * - repo 结构从 <agent>/ 迁移到 agents/<agent>/
6
+ * - skills 合并到 shared/skills/
7
+ * - 移除不再同步的文件(repo 中的旧条目,不影响本地工作区)
8
+ * - config.json 升级到 v2 格式
9
+ *
10
+ * 安全措施:
11
+ * - 迁移前完整备份旧 repo 到 ~/.wangchuan/backup-v1/
12
+ * - 写入迁移状态标记防止中断后重复执行部分步骤
13
+ * - 迁移后校验关键目录结构
14
+ * - 失败时自动回滚到备份
15
+ */
16
+ import fs from 'fs';
17
+ import path from 'path';
18
+ import { config, CONFIG_VERSION } from './config.js';
19
+ import { expandHome } from './sync.js';
20
+ import { logger } from '../utils/logger.js';
21
+ /** 递归复制目录 */
22
+ function copyDirRecursive(src, dest) {
23
+ if (!fs.existsSync(src))
24
+ return;
25
+ fs.mkdirSync(dest, { recursive: true });
26
+ for (const entry of fs.readdirSync(src, { withFileTypes: true })) {
27
+ const srcPath = path.join(src, entry.name);
28
+ const destPath = path.join(dest, entry.name);
29
+ if (entry.isDirectory()) {
30
+ copyDirRecursive(srcPath, destPath);
31
+ }
32
+ else {
33
+ fs.copyFileSync(srcPath, destPath);
34
+ }
35
+ }
36
+ }
37
+ /** 递归删除目录 */
38
+ function rmDirRecursive(dir) {
39
+ if (!fs.existsSync(dir))
40
+ return;
41
+ for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {
42
+ const p = path.join(dir, entry.name);
43
+ if (entry.isDirectory())
44
+ rmDirRecursive(p);
45
+ else
46
+ fs.unlinkSync(p);
47
+ }
48
+ fs.rmdirSync(dir);
49
+ }
50
+ const MIGRATE_LOCK = '.migrate-in-progress';
51
+ /** v1 → v2 迁移 */
52
+ function migrateV1toV2(cfg) {
53
+ const repoPath = expandHome(cfg.localRepoPath);
54
+ if (!fs.existsSync(repoPath)) {
55
+ // 仓库不存在(尚未 clone),仅升级配置
56
+ return applyConfigV2(cfg);
57
+ }
58
+ const wangchuanDir = expandHome(config.paths.dir);
59
+ const backupDir = path.join(wangchuanDir, 'backup-v1');
60
+ const lockFile = path.join(wangchuanDir, MIGRATE_LOCK);
61
+ // ── 检测上次中断的迁移 ─────────────────────────────────────
62
+ if (fs.existsSync(lockFile)) {
63
+ logger.warn('检测到上次迁移未完成,正在从备份回滚 …');
64
+ if (fs.existsSync(backupDir)) {
65
+ // 回滚:删除当前 repo,从备份恢复
66
+ rmDirRecursive(repoPath);
67
+ copyDirRecursive(backupDir, repoPath);
68
+ fs.unlinkSync(lockFile);
69
+ logger.ok('已从备份回滚,重新开始迁移');
70
+ }
71
+ else {
72
+ // 没有备份但有 lock,说明备份阶段就中断了,repo 应该还是原样
73
+ fs.unlinkSync(lockFile);
74
+ }
75
+ }
76
+ // ── 1. 完整备份旧 repo ─────────────────────────────────────
77
+ if (!fs.existsSync(backupDir)) {
78
+ logger.info('备份旧 repo 结构 …');
79
+ copyDirRecursive(repoPath, backupDir);
80
+ }
81
+ // ── 写入迁移锁 ─────────────────────────────────────────────
82
+ fs.writeFileSync(lockFile, `migrating v1→v2 at ${new Date().toISOString()}`, 'utf-8');
83
+ try {
84
+ // ── 2. 移动 <agent>/ → agents/<agent>/ ────────────────────
85
+ for (const agent of ['openclaw', 'claude', 'gemini']) {
86
+ const oldDir = path.join(repoPath, agent);
87
+ const newDir = path.join(repoPath, 'agents', agent);
88
+ if (fs.existsSync(oldDir) && !fs.existsSync(newDir)) {
89
+ fs.mkdirSync(path.dirname(newDir), { recursive: true });
90
+ fs.renameSync(oldDir, newDir);
91
+ logger.debug(` ${agent}/ → agents/${agent}/`);
92
+ }
93
+ }
94
+ // ── 3. 合并 skills 到 shared/skills/ ──────────────────────
95
+ const sharedSkills = path.join(repoPath, 'shared', 'skills');
96
+ if (!fs.existsSync(sharedSkills)) {
97
+ const ocSkills = path.join(repoPath, 'agents', 'openclaw', 'skills');
98
+ if (fs.existsSync(ocSkills)) {
99
+ copyDirRecursive(ocSkills, sharedSkills);
100
+ logger.debug(' openclaw/skills → shared/skills/');
101
+ }
102
+ }
103
+ // ── 4. 清理 repo 中不再同步的条目 ─────────────────────────
104
+ // 注意:这只清理 repo 中的旧文件,不影响工作区的源文件
105
+ const removals = [
106
+ 'agents/openclaw/USER.md.enc',
107
+ 'agents/openclaw/TOOLS.md',
108
+ 'agents/openclaw/config/mcporter.json.enc',
109
+ 'agents/claude/.claude.json.enc',
110
+ 'agents/gemini/projects.json',
111
+ 'agents/gemini/trustedFolders.json',
112
+ 'agents/gemini/settings.internal.json.enc',
113
+ ];
114
+ for (const rel of removals) {
115
+ const abs = path.join(repoPath, rel);
116
+ if (fs.existsSync(abs)) {
117
+ fs.unlinkSync(abs);
118
+ logger.debug(` repo 中移除: ${rel}`);
119
+ }
120
+ }
121
+ // ── 5. 迁移后校验 ────────────────────────────────────────
122
+ const checks = [
123
+ path.join(repoPath, 'agents'),
124
+ ];
125
+ for (const check of checks) {
126
+ if (!fs.existsSync(check)) {
127
+ throw new Error(`迁移校验失败: ${check} 不存在`);
128
+ }
129
+ }
130
+ // ── 迁移成功,删除锁 ─────────────────────────────────────
131
+ fs.unlinkSync(lockFile);
132
+ }
133
+ catch (err) {
134
+ // ── 迁移失败,自动回滚 ───────────────────────────────────
135
+ logger.error(`迁移失败: ${err.message}`);
136
+ logger.info('正在从备份回滚 …');
137
+ try {
138
+ rmDirRecursive(repoPath);
139
+ copyDirRecursive(backupDir, repoPath);
140
+ if (fs.existsSync(lockFile))
141
+ fs.unlinkSync(lockFile);
142
+ logger.ok('已回滚到迁移前状态');
143
+ }
144
+ catch (rollbackErr) {
145
+ logger.error(`回滚失败: ${rollbackErr.message}`);
146
+ logger.error(`请手动从 ${backupDir} 恢复`);
147
+ }
148
+ throw err;
149
+ }
150
+ return applyConfigV2(cfg);
151
+ }
152
+ /** 将配置升级到 v2 格式(保留 repo/branch 等用户设置) */
153
+ function applyConfigV2(cfg) {
154
+ return {
155
+ repo: cfg.repo,
156
+ branch: cfg.branch,
157
+ localRepoPath: cfg.localRepoPath,
158
+ keyPath: cfg.keyPath,
159
+ hostname: cfg.hostname,
160
+ version: CONFIG_VERSION,
161
+ profiles: { default: config.defaults.profiles },
162
+ shared: config.defaults.shared,
163
+ };
164
+ }
165
+ /**
166
+ * 检测并执行配置迁移,返回最新版本的配置。
167
+ * 在 config.load() 之后调用。
168
+ */
169
+ export function ensureMigrated(cfg) {
170
+ const currentVersion = cfg.version ?? 1;
171
+ if (currentVersion >= CONFIG_VERSION)
172
+ return cfg;
173
+ logger.info(`检测到 v${currentVersion} 配置,正在迁移到 v${CONFIG_VERSION} …`);
174
+ let migrated = cfg;
175
+ if (currentVersion < 2) {
176
+ migrated = migrateV1toV2(migrated);
177
+ }
178
+ config.save(migrated);
179
+ logger.ok('配置迁移完成');
180
+ logger.info(`旧数据已备份到 ${config.paths.dir}/backup-v1/`);
181
+ return migrated;
182
+ }
183
+ //# sourceMappingURL=migrate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../../src/core/migrate.ts"],"names":[],"mappings":"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"}
@@ -6,6 +6,10 @@
6
6
  * restoreFromRepo 本地仓库目录 → 工作区(拉取后还原)
7
7
  * diff 对比两侧,返回差异摘要
8
8
  *
9
+ * 支持三层同步:
10
+ * shared — 跨 agent 共享(skills、MCP 模板、共享记忆)
11
+ * agents/* — per-agent 跨环境同步
12
+ *
9
13
  * 所有方法支持可选的 agent 过滤参数,只操作指定智能体的文件。
10
14
  */
11
15
  import type { WangchuanConfig, FileEntry, StageResult, RestoreResult, DiffResult, AgentName } from '../types.js';
@@ -20,6 +24,9 @@ export declare function buildFileEntries(cfg: WangchuanConfig, repoDirBase?: str
20
24
  export declare const syncEngine: {
21
25
  readonly expandHome: typeof expandHome;
22
26
  readonly buildFileEntries: typeof buildFileEntries;
27
+ /**
28
+ * 推送前:先分发 shared 内容到各 agent,再收集文件到 repo。
29
+ */
23
30
  readonly stageToRepo: (cfg: WangchuanConfig, agent?: AgentName) => Promise<StageResult>;
24
31
  readonly restoreFromRepo: (cfg: WangchuanConfig, agent?: AgentName) => Promise<RestoreResult>;
25
32
  readonly diff: (cfg: WangchuanConfig, agent?: AgentName) => Promise<DiffResult>;
@@ -1 +1 @@
1
- {"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../../src/core/sync.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AASH,OAAO,KAAK,EACV,eAAe,EACf,SAAS,EACT,WAAW,EACX,aAAa,EACb,UAAU,EACV,SAAS,EACV,MAAM,aAAa,CAAC;AAErB,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAG5C;AAiBD;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,eAAe,EACpB,WAAW,CAAC,EAAE,MAAM,EACpB,KAAK,CAAC,EAAE,SAAS,GAChB,SAAS,EAAE,CAuEb;AAED,eAAO,MAAM,UAAU;;;gCAIE,eAAe,UAAU,SAAS,KAAG,OAAO,CAAC,WAAW,CAAC;oCAgCrD,eAAe,UAAU,SAAS,KAAG,OAAO,CAAC,aAAa,CAAC;yBAyEtE,eAAe,UAAU,SAAS,KAAG,OAAO,CAAC,UAAU,CAAC;CAgChE,CAAC"}
1
+ {"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../../src/core/sync.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAUH,OAAO,KAAK,EACV,eAAe,EACf,SAAS,EACT,WAAW,EACX,aAAa,EACb,UAAU,EACV,SAAS,EAEV,MAAM,aAAa,CAAC;AAErB,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAG5C;AAmKD;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,eAAe,EACpB,WAAW,CAAC,EAAE,MAAM,EACpB,KAAK,CAAC,EAAE,SAAS,GAChB,SAAS,EAAE,CAiBb;AAuID,eAAO,MAAM,UAAU;;;IAIrB;;OAEG;gCACoB,eAAe,UAAU,SAAS,KAAG,OAAO,CAAC,WAAW,CAAC;oCAsErD,eAAe,UAAU,SAAS,KAAG,OAAO,CAAC,aAAa,CAAC;yBA6ItE,eAAe,UAAU,SAAS,KAAG,OAAO,CAAC,UAAU,CAAC;CAwDhE,CAAC"}