wangchuan 1.0.2 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. package/.wangchuan/config.example.json +44 -19
  2. package/README.md +74 -31
  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 +11 -3
  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 +9 -3
@@ -1,43 +1,68 @@
1
1
  {
2
- "_comment": "忘川配置示例 — 复制为 ~/.wangchuan/config.json 并修改",
3
- "repo": "git@github.com:SUpermin6u/wangchuan.git",
2
+ "_comment": "忘川配置示例 v2 — 复制为 ~/.wangchuan/config.json 并修改",
3
+ "repo": "git@github.com:you/your-brain.git",
4
4
  "branch": "main",
5
5
  "localRepoPath": "~/.wangchuan/repo",
6
6
  "keyPath": "~/.wangchuan/master.key",
7
7
  "hostname": "",
8
+ "version": 2,
8
9
  "profiles": {
9
10
  "default": {
10
11
  "openclaw": {
11
12
  "enabled": true,
12
13
  "workspacePath": "~/.openclaw/workspace",
13
14
  "syncFiles": [
14
- { "src": "MEMORY.md", "encrypt": true },
15
- { "src": "AGENTS.md", "encrypt": false },
16
- { "src": "SOUL.md", "encrypt": false },
17
- { "src": "USER.md", "encrypt": true },
18
- { "src": "TOOLS.md", "encrypt": false },
19
- { "src": "config/mcporter.json", "encrypt": true }
20
- ],
21
- "syncDirs": [
22
- { "src": "skills/", "encrypt": false }
15
+ { "src": "MEMORY.md", "encrypt": true },
16
+ { "src": "AGENTS.md", "encrypt": false },
17
+ { "src": "SOUL.md", "encrypt": false }
23
18
  ]
24
19
  },
25
20
  "claude": {
26
- "enabled": false,
27
- "workspacePath": "~/.claude",
21
+ "enabled": true,
22
+ "workspacePath": "~/.claude-internal",
28
23
  "syncFiles": [
29
- { "src": ".claude.json", "encrypt": true }
24
+ { "src": "CLAUDE.md", "encrypt": false },
25
+ { "src": "settings.json", "encrypt": true }
26
+ ],
27
+ "jsonFields": [
28
+ {
29
+ "src": ".claude.json",
30
+ "fields": ["mcpServers"],
31
+ "repoName": "mcpServers.json",
32
+ "encrypt": true
33
+ }
30
34
  ]
31
35
  },
32
36
  "gemini": {
33
- "enabled": false,
37
+ "enabled": true,
34
38
  "workspacePath": "~/.gemini",
35
- "syncFiles": [
36
- { "src": "settings.internal.json", "encrypt": true },
37
- { "src": "projects.json", "encrypt": false },
38
- { "src": "trustedFolders.json", "encrypt": false }
39
+ "syncFiles": [],
40
+ "jsonFields": [
41
+ {
42
+ "src": "settings.internal.json",
43
+ "fields": ["security", "model"],
44
+ "repoName": "settings-sync.json",
45
+ "encrypt": true
46
+ }
39
47
  ]
40
48
  }
41
49
  }
50
+ },
51
+ "shared": {
52
+ "skills": {
53
+ "sources": [
54
+ { "agent": "claude", "dir": "skills/" },
55
+ { "agent": "openclaw", "dir": "skills/" }
56
+ ]
57
+ },
58
+ "mcp": {
59
+ "sources": [
60
+ { "agent": "claude", "src": ".claude.json", "field": "mcpServers" },
61
+ { "agent": "openclaw", "src": "config/mcporter.json", "field": "mcpServers" }
62
+ ]
63
+ },
64
+ "syncFiles": [
65
+ { "src": "memory/SHARED.md", "workspacePath": "~/.openclaw/workspace", "encrypt": true }
66
+ ]
42
67
  }
43
68
  }
package/README.md CHANGED
@@ -17,12 +17,19 @@ AI 记忆同步系统,支持 OpenClaw / Claude / Gemini 多种智能体记忆
17
17
  | `status` | 查看仓库状态、工作区差异与文件清单 |
18
18
  | `diff` | 逐文件显示本地与仓库的行级差异(自动解密) |
19
19
  | `list` | 列出所有托管文件,显示本地/仓库存在状态 |
20
+ | `dump` | 生成明文快照到临时目录,方便检查同步内容(支持 `--agent` 过滤) |
20
21
 
21
22
  - **AES-256-GCM** 加密:密钥本地存储,永不提交 Git
22
23
  - 全局 `--agent` 过滤:只操作指定智能体(`openclaw` / `claude` / `gemini`)
24
+ - **细粒度同步**:JSON 字段级提取(如 `.claude.json` 只同步 `mcpServers`,不同步 tipsHistory 等无用字段)
25
+ - **跨 agent 共享**:Skills 和 MCP 配置自动在所有 agent 间分发
26
+ - **删除传播**:所有 agent 都删除的 skill/MCP → 自动从 repo 清理,其他环境 pull 时消失
27
+ - **一键还原**:新服务器 `init + pull` 即可完整恢复所有 agent 配置
23
28
  - 推送前自动扫描明文 token/apiKey
29
+ - 拉取时检测本地独有文件,提示同步到云端
24
30
  - 拉取冲突时交互式选择:覆盖 / 跳过 / 全部覆盖 / 全部跳过
25
31
  - 失败自动回滚,不污染仓库历史
32
+ - v1→v2 自动迁移,备份 + 锁文件 + 回滚保护
26
33
  - 支持 OpenClaw Skill 封装,对话直接调用
27
34
 
28
35
  ---
@@ -61,8 +68,8 @@ wangchuan push --message "初始化配置"
61
68
  ### 3. 在新环境拉取记忆
62
69
 
63
70
  ```bash
64
- # 用 --key 直接粘贴原环境的主密钥
65
- wangchuan init --repo git@github.com:yourname/your-brain.git --key <你的64位hex密钥>
71
+ # 用 --key 导入已有密钥,一步完成初始化
72
+ wangchuan init --repo git@github.com:yourname/your-brain.git --key /path/to/master.key
66
73
  wangchuan pull
67
74
  ```
68
75
 
@@ -86,38 +93,63 @@ wangchuan diff --agent gemini
86
93
 
87
94
  每个智能体的 `workspacePath` 均可在 `~/.wangchuan/config.json` 中自定义。
88
95
 
96
+ ### Repo 目录结构(v2)
97
+
98
+ ```
99
+ repo/
100
+ ├── shared/ 跨 agent 共享
101
+ │ ├── skills/ 所有 agent 的 skills 合并
102
+ │ ├── mcp/ 各 agent 的 MCP 配置提取
103
+ │ └── memory/SHARED.md.enc 跨 agent 共享记忆
104
+ ├── agents/
105
+ │ ├── openclaw/
106
+ │ │ ├── MEMORY.md.enc 永久记忆(加密)
107
+ │ │ ├── AGENTS.md Agent 行为准则
108
+ │ │ └── SOUL.md Agent 人格设定
109
+ │ ├── claude/
110
+ │ │ ├── CLAUDE.md 全局指令
111
+ │ │ ├── settings.json.enc 权限/插件/模型(加密)
112
+ │ │ └── mcpServers.json.enc 从 .claude.json 提取的 mcpServers(加密)
113
+ │ └── gemini/
114
+ │ └── settings-sync.json 从 settings.internal.json 提取的 security+model
115
+ ```
116
+
89
117
  ### OpenClaw(默认开启)
90
118
 
91
- | 文件 | 加密 |
92
- |------|------|
93
- | `MEMORY.md` | ✔ 加密 |
94
- | `AGENTS.md` | 明文 |
95
- | `SOUL.md` | 明文 |
96
- | `USER.md` | ✔ 加密 |
97
- | `TOOLS.md` | 明文 |
98
- | `config/mcporter.json` | ✔ 加密 |
99
- | `skills/` (目录) | 明文 |
119
+ | 文件 | 加密 | 说明 |
120
+ |------|------|------|
121
+ | `MEMORY.md` | ✔ | 永久记忆 |
122
+ | `AGENTS.md` | | 行为准则 |
123
+ | `SOUL.md` | | 人格设定 |
100
124
 
101
125
  默认路径:`~/.openclaw/workspace/`
102
126
 
103
- ### Claude(可选,在配置中开启)
127
+ ### Claude(默认开启)
104
128
 
105
- | 文件 | 加密 |
106
- |------|------|
107
- | `.claude.json` | 加密 |
129
+ | 文件 | 加密 | 说明 |
130
+ |------|------|------|
131
+ | `CLAUDE.md` | | 全局指令 |
132
+ | `settings.json` | ✔ | 权限、插件、模型配置 |
133
+ | `.claude.json` → `mcpServers` | ✔ | JSON 字段级提取,仅同步 MCP 服务器配置 |
108
134
 
109
- 默认路径:`~/.claude/`
135
+ 默认路径:`~/.claude-internal/`
110
136
 
111
- ### Gemini(可选,在配置中开启)
137
+ ### Gemini(默认开启)
112
138
 
113
- | 文件 | 加密 |
114
- |------|------|
115
- | `settings.internal.json` | ✔ 加密 |
116
- | `projects.json` | 明文 |
117
- | `trustedFolders.json` | 明文 |
139
+ | 文件 | 加密 | 说明 |
140
+ |------|------|------|
141
+ | `settings.internal.json` → `security`, `model` | ✔ | JSON 字段级提取 |
118
142
 
119
143
  默认路径:`~/.gemini/`
120
144
 
145
+ ### Shared 共享层
146
+
147
+ | 内容 | 说明 |
148
+ |------|------|
149
+ | `shared/skills/` | 从 Claude 和 OpenClaw 的 skills 目录汇聚,自动分发到所有 agent |
150
+ | `shared/mcp/` | 从各 agent 提取 MCP 配置,跨 agent 共享(凭据加密保留) |
151
+ | `shared/memory/SHARED.md` | 跨 agent 共享记忆(加密) |
152
+
121
153
  ---
122
154
 
123
155
  ## 配置文件
@@ -130,12 +162,18 @@ wangchuan diff --agent gemini
130
162
  "branch": "main",
131
163
  "localRepoPath": "~/.wangchuan/repo",
132
164
  "keyPath": "~/.wangchuan/master.key",
165
+ "version": 2,
133
166
  "profiles": {
134
167
  "default": {
135
168
  "openclaw": { "enabled": true, "workspacePath": "~/.openclaw/workspace", ... },
136
- "claude": { "enabled": false, "workspacePath": "~/.claude", ... },
137
- "gemini": { "enabled": false, "workspacePath": "~/.gemini", ... }
169
+ "claude": { "enabled": true, "workspacePath": "~/.claude-internal", ... },
170
+ "gemini": { "enabled": true, "workspacePath": "~/.gemini", ... }
138
171
  }
172
+ },
173
+ "shared": {
174
+ "skills": { "sources": [{ "agent": "claude", "dir": "skills/" }, ...] },
175
+ "mcp": { "sources": [{ "agent": "claude", "src": ".claude.json", "field": "mcpServers" }, ...] },
176
+ "syncFiles": [...]
139
177
  }
140
178
  }
141
179
  ```
@@ -177,17 +215,20 @@ wangchuan/
177
215
  ├── bin/wangchuan.ts CLI 入口
178
216
  ├── src/
179
217
  │ ├── core/
180
- │ │ ├── sync.ts 同步引擎
218
+ │ │ ├── sync.ts 同步引擎(分发、清理、三向操作)
219
+ │ │ ├── json-field.ts JSON 字段级提取与合并
181
220
  │ │ ├── crypto.ts AES-256-GCM 加解密
182
221
  │ │ ├── git.ts simple-git 封装
183
- │ │ └── config.ts 配置管理
222
+ │ │ ├── config.ts 配置管理(v2 默认 profiles + shared)
223
+ │ │ └── migrate.ts v1→v2 迁移(备份+锁+回滚)
184
224
  │ ├── commands/
185
225
  │ │ ├── init.ts init 命令
186
- │ │ ├── pull.ts pull 命令
187
- │ │ ├── push.ts push 命令
226
+ │ │ ├── pull.ts pull 命令(含 localOnly 检测)
227
+ │ │ ├── push.ts push 命令(含过期清理输出)
188
228
  │ │ ├── status.ts status 命令
189
229
  │ │ ├── diff.ts diff 命令
190
- │ │ └── list.ts list 命令
230
+ │ │ ├── list.ts list 命令(shared/agents 分组)
231
+ │ │ └── dump.ts dump 命令(明文快照)
191
232
  │ ├── utils/
192
233
  │ │ ├── logger.ts 日志工具
193
234
  │ │ ├── validator.ts 参数校验
@@ -198,9 +239,11 @@ wangchuan/
198
239
  │ ├── SKILL.md OpenClaw Skill 说明
199
240
  │ └── wangchuan-skill.sh Skill 脚本
200
241
  ├── test/
201
- └── crypto.test.ts 加密模块测试
242
+ ├── crypto.test.ts 加密模块测试
243
+ │ ├── json-field.test.ts JSON 字段提取测试
244
+ │ └── sync.test.ts 同步引擎测试(42 用例)
202
245
  └── .wangchuan/
203
- └── config.example.json 配置示例
246
+ └── config.example.json 配置示例(v2)
204
247
  ```
205
248
 
206
249
  ---
@@ -12,6 +12,7 @@ import { cmdPush } from '../src/commands/push.js';
12
12
  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
+ import { cmdDump } from '../src/commands/dump.js';
15
16
  import { logger } from '../src/utils/logger.js';
16
17
  const AGENT_CHOICES = ['openclaw', 'claude', 'gemini'];
17
18
  /** 校验 --agent 值合法性 */
@@ -77,6 +78,14 @@ program
77
78
  .action(async (opts) => {
78
79
  await run(() => cmdList(opts));
79
80
  });
81
+ // ── dump ────────────────────────────────────────────────────────
82
+ program
83
+ .command('dump')
84
+ .description('生成明文快照到临时目录,方便检查同步内容')
85
+ .option('-a, --agent <name>', '只导出指定智能体 (openclaw|claude|gemini)', parseAgent)
86
+ .action(async (opts) => {
87
+ await run(() => cmdDump(opts));
88
+ });
80
89
  // ── 错误兜底 ────────────────────────────────────────────────────
81
90
  async function run(fn) {
82
91
  try {
@@ -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 +1 @@
1
- {"version":3,"file":"diff.d.ts","sourceRoot":"","sources":["../../../src/commands/diff.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAUH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAGtD,wBAAsB,OAAO,CAAC,EAAE,KAAK,EAAE,GAAE,kBAAuB,GAAG,OAAO,CAAC,IAAI,CAAC,CAqF/E"}
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"}
@@ -7,6 +7,7 @@
7
7
  import fs from 'fs';
8
8
  import path from 'path';
9
9
  import { config } from '../core/config.js';
10
+ import { ensureMigrated } from '../core/migrate.js';
10
11
  import { syncEngine } from '../core/sync.js';
11
12
  import { cryptoEngine } from '../core/crypto.js';
12
13
  import { validator } from '../utils/validator.js';
@@ -15,8 +16,9 @@ import { diffText } from '../utils/linediff.js';
15
16
  import chalk from 'chalk';
16
17
  export async function cmdDiff({ agent } = {}) {
17
18
  logger.banner('忘川 · 文件差异');
18
- const cfg = config.load();
19
+ let cfg = config.load();
19
20
  validator.requireInit(cfg);
21
+ cfg = ensureMigrated(cfg);
20
22
  const repoPath = syncEngine.expandHome(cfg.localRepoPath);
21
23
  const keyPath = syncEngine.expandHome(cfg.keyPath);
22
24
  const entries = syncEngine.buildFileEntries(cfg, undefined, agent);
@@ -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":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * dump.ts — wangchuan dump 命令
3
+ *
4
+ * 在临时目录生成与 repo 完全同构的明文快照,
5
+ * 所有 .enc 加密文件自动解密,方便人工检查同步内容。
6
+ */
7
+ import type { AgentOptions } from '../types.js';
8
+ export declare function cmdDump({ agent }?: AgentOptions): Promise<void>;
9
+ //# sourceMappingURL=dump.d.ts.map
@@ -0,0 +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,CAwDzE"}
@@ -0,0 +1,68 @@
1
+ /**
2
+ * dump.ts — wangchuan dump 命令
3
+ *
4
+ * 在临时目录生成与 repo 完全同构的明文快照,
5
+ * 所有 .enc 加密文件自动解密,方便人工检查同步内容。
6
+ */
7
+ import fs from 'fs';
8
+ import os from 'os';
9
+ import path from 'path';
10
+ import { config } from '../core/config.js';
11
+ import { ensureMigrated } from '../core/migrate.js';
12
+ import { expandHome, buildFileEntries } from '../core/sync.js';
13
+ import { jsonField } from '../core/json-field.js';
14
+ import { validator } from '../utils/validator.js';
15
+ import { logger } from '../utils/logger.js';
16
+ import chalk from 'chalk';
17
+ export async function cmdDump({ agent } = {}) {
18
+ logger.banner('忘川 · 明文快照');
19
+ let cfg = config.load();
20
+ validator.requireInit(cfg);
21
+ cfg = ensureMigrated(cfg);
22
+ const keyPath = expandHome(cfg.keyPath);
23
+ const entries = buildFileEntries(cfg, undefined, agent);
24
+ // 创建临时目录
25
+ const dumpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'wangchuan-dump-'));
26
+ let count = 0;
27
+ let skipped = 0;
28
+ for (const entry of entries) {
29
+ if (!fs.existsSync(entry.srcAbs)) {
30
+ skipped++;
31
+ continue;
32
+ }
33
+ // 输出路径:用 plainRel(不带 .enc 后缀)
34
+ const destPath = path.join(dumpDir, entry.plainRel);
35
+ fs.mkdirSync(path.dirname(destPath), { recursive: true });
36
+ if (entry.jsonExtract) {
37
+ // JSON 字段提取 → 写入提取后的 JSON
38
+ try {
39
+ const fullJson = JSON.parse(fs.readFileSync(entry.srcAbs, 'utf-8'));
40
+ const partial = jsonField.extractFields(fullJson, entry.jsonExtract.fields);
41
+ fs.writeFileSync(destPath, JSON.stringify(partial, null, 2), 'utf-8');
42
+ }
43
+ catch (err) {
44
+ logger.warn(`跳过 JSON 字段提取(解析失败): ${entry.srcAbs}`);
45
+ skipped++;
46
+ continue;
47
+ }
48
+ }
49
+ else {
50
+ // 整文件 → 直接复制明文
51
+ fs.copyFileSync(entry.srcAbs, destPath);
52
+ }
53
+ const labels = [];
54
+ if (entry.encrypt)
55
+ labels.push(chalk.gray('[原文件加密]'));
56
+ if (entry.jsonExtract)
57
+ labels.push(chalk.blue('[字段提取]'));
58
+ console.log(` ${chalk.green('✔')} ${entry.plainRel} ${labels.join('')}`);
59
+ count++;
60
+ }
61
+ console.log();
62
+ console.log(chalk.bold(` 输出目录:`) + chalk.cyan(dumpDir));
63
+ console.log(chalk.bold(` 文件数量:`) + `${count} 个文件` + (skipped > 0 ? chalk.gray(` (${skipped} 个跳过)`) : ''));
64
+ console.log();
65
+ console.log(chalk.gray(` 提示:该目录包含明文敏感信息,查看后请及时删除`));
66
+ console.log(chalk.gray(` rm -rf ${dumpDir}`));
67
+ }
68
+ //# sourceMappingURL=dump.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dump.js","sourceRoot":"","sources":["../../../src/commands/dump.ts"],"names":[],"mappings":"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"}
@@ -2,7 +2,7 @@
2
2
  * list.ts — wangchuan list 命令
3
3
  *
4
4
  * 瞬间列出所有受管配置文件,不做任何 git/IO 操作。
5
- * 支持 --agent 过滤,按智能体分组展示。
5
+ * 支持 --agent 过滤,按智能体和共享层分组展示。
6
6
  */
7
7
  import type { ListOptions } from '../types.js';
8
8
  export declare function cmdList({ agent }?: ListOptions): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../src/commands/list.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH,OAAO,KAAK,EAAE,WAAW,EAAa,MAAM,aAAa,CAAC;AAS1D,wBAAsB,OAAO,CAAC,EAAE,KAAK,EAAE,GAAE,WAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAoCxE"}
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,CAgDxE"}
@@ -2,44 +2,58 @@
2
2
  * list.ts — wangchuan list 命令
3
3
  *
4
4
  * 瞬间列出所有受管配置文件,不做任何 git/IO 操作。
5
- * 支持 --agent 过滤,按智能体分组展示。
5
+ * 支持 --agent 过滤,按智能体和共享层分组展示。
6
6
  */
7
7
  import fs from 'fs';
8
8
  import { config } from '../core/config.js';
9
+ import { ensureMigrated } from '../core/migrate.js';
9
10
  import { syncEngine } from '../core/sync.js';
10
11
  import { validator } from '../utils/validator.js';
11
12
  import { logger } from '../utils/logger.js';
12
13
  import chalk from 'chalk';
13
- const AGENT_LABELS = {
14
+ const TIER_LABELS = {
14
15
  openclaw: 'OpenClaw',
15
16
  claude: 'Claude',
16
17
  gemini: 'Gemini',
18
+ shared: 'Shared(跨 Agent 共享)',
17
19
  };
18
20
  export async function cmdList({ agent } = {}) {
19
21
  logger.banner('忘川 · 配置清单');
20
- const cfg = config.load();
22
+ let cfg = config.load();
21
23
  validator.requireInit(cfg);
24
+ cfg = ensureMigrated(cfg);
22
25
  const repoPath = syncEngine.expandHome(cfg.localRepoPath);
23
- const allAgents = agent ? [agent] : ['openclaw', 'claude', 'gemini'];
26
+ const entries = syncEngine.buildFileEntries(cfg, undefined, agent);
27
+ // 按 agentName 分组
28
+ const groups = new Map();
29
+ for (const e of entries) {
30
+ const tier = e.agentName;
31
+ if (!groups.has(tier))
32
+ groups.set(tier, []);
33
+ groups.get(tier).push(e);
34
+ }
24
35
  let totalFiles = 0;
25
- for (const ag of allAgents) {
26
- const entries = syncEngine.buildFileEntries(cfg, undefined, ag);
27
- if (entries.length === 0)
36
+ // 先展示 shared,再展示各 agent
37
+ const order = ['shared', 'openclaw', 'claude', 'gemini'];
38
+ for (const tier of order) {
39
+ const group = groups.get(tier);
40
+ if (!group || group.length === 0)
28
41
  continue;
29
- console.log(chalk.bold.cyan(` ▸ ${AGENT_LABELS[ag]}`));
30
- for (const e of entries) {
42
+ console.log(chalk.bold.cyan(` ▸ ${TIER_LABELS[tier]}`));
43
+ for (const e of group) {
31
44
  const localExists = fs.existsSync(e.srcAbs);
32
45
  const repoExists = fs.existsSync(`${repoPath}/${e.repoRel}`);
33
46
  const localMark = localExists ? chalk.green('✔') : chalk.red('✖');
34
47
  const repoMark = repoExists ? chalk.green('✔') : chalk.gray('·');
35
48
  const encLabel = e.encrypt ? chalk.magenta('[enc]') : ' ';
36
- console.log(` ${localMark} 本地 ${repoMark} 仓库 ${encLabel} ${chalk.white(e.repoRel)}`);
49
+ const jsonLabel = e.jsonExtract ? chalk.yellow('[字段]') : ' ';
50
+ console.log(` ${localMark} 本地 ${repoMark} 仓库 ${encLabel} ${jsonLabel} ${chalk.white(e.repoRel)}`);
37
51
  console.log(chalk.gray(` └─ ${e.srcAbs}`));
38
52
  }
39
53
  console.log();
40
- totalFiles += entries.length;
54
+ totalFiles += group.length;
41
55
  }
42
56
  console.log(chalk.gray(` 共 ${totalFiles} 个配置文件`));
43
- console.log(chalk.gray(` ✔ = 存在 · = 仓库中尚无(未推送) [enc] = 加密存储`));
57
+ console.log(chalk.gray(` ✔ = 存在 · = 仓库中尚无 [enc] = 加密 [字段] = JSON 字段提取`));
44
58
  }
45
59
  //# sourceMappingURL=list.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/commands/list.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,MAAM,EAAE,MAAU,mBAAmB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAO,uBAAuB,CAAC;AACnD,OAAO,EAAE,MAAM,EAAE,MAAU,oBAAoB,CAAC;AAEhD,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,YAAY,GAA8B;IAC9C,QAAQ,EAAE,UAAU;IACpB,MAAM,EAAI,QAAQ;IAClB,MAAM,EAAI,QAAQ;CACnB,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,EAAE,KAAK,KAAkB,EAAE;IACvD,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IAE3B,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;IAC1B,SAAS,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAE3B,MAAM,QAAQ,GAAG,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IAC1D,MAAM,SAAS,GAAgB,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAElF,IAAI,UAAU,GAAG,CAAC,CAAC;IAEnB,KAAK,MAAM,EAAE,IAAI,SAAS,EAAE,CAAC;QAC3B,MAAM,OAAO,GAAG,UAAU,CAAC,gBAAgB,CAAC,GAAG,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;QAChE,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,SAAS;QAEnC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,YAAY,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAExD,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YACxB,MAAM,WAAW,GAAG,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;YAC5C,MAAM,UAAU,GAAI,EAAE,CAAC,UAAU,CAAC,GAAG,QAAQ,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;YAE9D,MAAM,SAAS,GAAG,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAClE,MAAM,QAAQ,GAAI,UAAU,CAAE,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACnE,MAAM,QAAQ,GAAI,CAAC,CAAC,OAAO,CAAG,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;YAEjE,OAAO,CAAC,GAAG,CACT,OAAO,SAAS,QAAQ,QAAQ,QAAQ,QAAQ,KAAK,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAC9E,CAAC;YACF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAC1D,CAAC;QACD,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC;IAC/B,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,UAAU,QAAQ,CAAC,CAAC,CAAC;IACnD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC,CAAC;AACpE,CAAC"}
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/commands/list.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"pull.d.ts","sourceRoot":"","sources":["../../../src/commands/pull.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAI9D,wBAAsB,OAAO,CAAC,EAAE,KAAK,EAAE,GAAE,WAAgB,GAAG,OAAO,CAAC,aAAa,CAAC,CA8CjF"}
1
+ {"version":3,"file":"pull.d.ts","sourceRoot":"","sources":["../../../src/commands/pull.ts"],"names":[],"mappings":"AAAA;;GAEG;AAQH,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAI9D,wBAAsB,OAAO,CAAC,EAAE,KAAK,EAAE,GAAE,WAAgB,GAAG,OAAO,CAAC,aAAa,CAAC,CAwDjF"}
@@ -2,6 +2,7 @@
2
2
  * pull.ts — wangchuan pull 命令
3
3
  */
4
4
  import { config } from '../core/config.js';
5
+ import { ensureMigrated } from '../core/migrate.js';
5
6
  import { gitEngine } from '../core/git.js';
6
7
  import { syncEngine } from '../core/sync.js';
7
8
  import { validator } from '../utils/validator.js';
@@ -10,8 +11,9 @@ import chalk from 'chalk';
10
11
  import ora from 'ora';
11
12
  export async function cmdPull({ agent } = {}) {
12
13
  logger.banner('忘川 · 拉取配置');
13
- const cfg = config.load();
14
+ let cfg = config.load();
14
15
  validator.requireInit(cfg);
16
+ cfg = ensureMigrated(cfg);
15
17
  const repoPath = syncEngine.expandHome(cfg.localRepoPath);
16
18
  if (agent)
17
19
  logger.info(`过滤智能体: ${chalk.cyan(agent)}`);
@@ -47,6 +49,14 @@ export async function cmdPull({ agent } = {}) {
47
49
  if (result.skipped.length > 0) {
48
50
  logger.info(`\n跳过(仓库中不存在): ${result.skipped.length} 个文件`);
49
51
  }
52
+ if (result.localOnly.length > 0) {
53
+ console.log();
54
+ logger.warn(`检测到 ${result.localOnly.length} 个本地文件在云端不存在:`);
55
+ for (const f of result.localOnly) {
56
+ logger.warn(` ${chalk.yellow(f)}`);
57
+ }
58
+ logger.info('如需同步到云端,请执行 wangchuan push');
59
+ }
50
60
  logger.ok(`\n共同步 ${result.synced.length} 个文件(含 ${result.decrypted.length} 个加密文件,${result.conflicts.length} 个冲突)`);
51
61
  return result;
52
62
  }
@@ -1 +1 @@
1
- {"version":3,"file":"pull.js","sourceRoot":"","sources":["../../../src/commands/pull.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAU,mBAAmB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAO,gBAAgB,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAO,uBAAuB,CAAC;AACnD,OAAO,EAAE,MAAM,EAAE,MAAU,oBAAoB,CAAC;AAEhD,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,WAAW,CAAC,CAAC;IAE3B,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;IAC1B,SAAS,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAE3B,MAAM,QAAQ,GAAG,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IAC1D,IAAI,KAAK;QAAE,MAAM,CAAC,IAAI,CAAC,UAAU,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAEtD,8DAA8D;IAC9D,IAAI,OAAO,GAAG,GAAG,CAAC,KAAK,GAAG,CAAC,IAAI,WAAW,CAAC,CAAC,KAAK,EAAE,CAAC;IACpD,IAAI,CAAC;QACH,MAAM,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;QAC3C,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAC7B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACzB,MAAM,IAAI,KAAK,CAAC,gBAAiB,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;IAC5D,CAAC;IAED,yDAAyD;IACzD,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,kBAAkB;IAClC,IAAI,MAAqB,CAAC;IAC1B,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,UAAU,CAAC,eAAe,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACxD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,SAAU,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;IACrD,CAAC;IAED,yDAAyD;IACzD,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5D,MAAM,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;QAC7C,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAC9B,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACtE,MAAM,CAAC,EAAE,CAAC,KAAK,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC;IAC5C,CAAC;IAED,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9B,MAAM,CAAC,IAAI,CAAC,iBAAiB,MAAM,CAAC,OAAO,CAAC,MAAM,MAAM,CAAC,CAAC;IAC5D,CAAC;IAED,MAAM,CAAC,EAAE,CAAC,SAAS,MAAM,CAAC,MAAM,CAAC,MAAM,UAAU,MAAM,CAAC,SAAS,CAAC,MAAM,UAAU,MAAM,CAAC,SAAS,CAAC,MAAM,OAAO,CAAC,CAAC;IAClH,OAAO,MAAM,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"pull.js","sourceRoot":"","sources":["../../../src/commands/pull.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"push.d.ts","sourceRoot":"","sources":["../../../src/commands/push.ts"],"names":[],"mappings":"AAAA;;GAEG;AAQH,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAI1E,MAAM,WAAW,iBAAkB,SAAQ,YAAY;IACrD,QAAQ,CAAC,WAAW,CAAC,EAAE,WAAW,CAAC;CACpC;AAED,wBAAsB,OAAO,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,GAAE,WAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CA4D9F"}
1
+ {"version":3,"file":"push.d.ts","sourceRoot":"","sources":["../../../src/commands/push.ts"],"names":[],"mappings":"AAAA;;GAEG;AASH,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAI1E,MAAM,WAAW,iBAAkB,SAAQ,YAAY;IACrD,QAAQ,CAAC,WAAW,CAAC,EAAE,WAAW,CAAC;CACpC;AAED,wBAAsB,OAAO,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,GAAE,WAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAmE9F"}