wangchuan 3.1.0 → 4.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 (37) hide show
  1. package/dist/bin/wangchuan.d.ts +10 -2
  2. package/dist/bin/wangchuan.d.ts.map +1 -1
  3. package/dist/bin/wangchuan.js +43 -226
  4. package/dist/bin/wangchuan.js.map +1 -1
  5. package/dist/src/commands/doctor.d.ts +17 -6
  6. package/dist/src/commands/doctor.d.ts.map +1 -1
  7. package/dist/src/commands/doctor.js +233 -65
  8. package/dist/src/commands/doctor.js.map +1 -1
  9. package/dist/src/commands/env.d.ts.map +1 -1
  10. package/dist/src/commands/env.js +36 -0
  11. package/dist/src/commands/env.js.map +1 -1
  12. package/dist/src/commands/memory.d.ts +9 -0
  13. package/dist/src/commands/memory.d.ts.map +1 -0
  14. package/dist/src/commands/memory.js +182 -0
  15. package/dist/src/commands/memory.js.map +1 -0
  16. package/dist/src/commands/status.d.ts +20 -3
  17. package/dist/src/commands/status.d.ts.map +1 -1
  18. package/dist/src/commands/status.js +361 -51
  19. package/dist/src/commands/status.js.map +1 -1
  20. package/dist/src/commands/sync.d.ts.map +1 -1
  21. package/dist/src/commands/sync.js +56 -0
  22. package/dist/src/commands/sync.js.map +1 -1
  23. package/dist/src/commands/watch.d.ts +4 -0
  24. package/dist/src/commands/watch.d.ts.map +1 -1
  25. package/dist/src/commands/watch.js +93 -4
  26. package/dist/src/commands/watch.js.map +1 -1
  27. package/dist/src/core/sync.d.ts.map +1 -1
  28. package/dist/src/core/sync.js +12 -1
  29. package/dist/src/core/sync.js.map +1 -1
  30. package/dist/src/i18n.d.ts.map +1 -1
  31. package/dist/src/i18n.js +52 -8
  32. package/dist/src/i18n.js.map +1 -1
  33. package/dist/src/types.d.ts +8 -0
  34. package/dist/src/types.d.ts.map +1 -1
  35. package/package.json +1 -1
  36. package/skill/SKILL.md +40 -53
  37. package/skill/claude/SKILL.md +24 -41
@@ -1,51 +1,206 @@
1
1
  /**
2
- * status.ts — wangchuan status command
2
+ * status.ts — wangchuan status command (enhanced)
3
+ *
4
+ * Default (no flag): compact one-screen summary:
5
+ * - Repo + branch + environment
6
+ * - Health score bar
7
+ * - "3 files changed since last sync"
8
+ * - Last sync timestamp
9
+ * - "Run `wangchuan sync` to update" hint
10
+ *
11
+ * --verbose / -v: full detail:
12
+ * - All managed files with local/repo status (from list.ts logic)
13
+ * - Line-level diff for changed files (from diff.ts logic)
14
+ * - Recent sync history (last 5)
15
+ * - Per-agent breakdown
3
16
  */
4
17
  import fs from 'fs';
18
+ import path from 'path';
19
+ import crypto from 'crypto';
5
20
  import { config } from '../core/config.js';
6
21
  import { resolveGitBranch } from '../core/config.js';
7
22
  import { ensureMigrated } from '../core/migrate.js';
8
23
  import { gitEngine } from '../core/git.js';
9
24
  import { syncEngine } from '../core/sync.js';
25
+ import { cryptoEngine } from '../core/crypto.js';
10
26
  import { syncLock } from '../core/sync-lock.js';
27
+ import { readSyncHistory } from '../core/sync-history.js';
28
+ import { getWatchPid } from './watch.js';
11
29
  import { validator } from '../utils/validator.js';
30
+ import { diffText } from '../utils/linediff.js';
12
31
  import { logger } from '../utils/logger.js';
13
32
  import { t } from '../i18n.js';
14
33
  import { AGENT_NAMES } from '../types.js';
15
34
  import chalk from 'chalk';
16
- export async function cmdStatus({ agent } = {}) {
35
+ // ── Health score helpers (from health.ts) ───────────────────────
36
+ function clamp(n) {
37
+ return Math.max(0, Math.min(100, Math.round(n)));
38
+ }
39
+ function renderBar(score, width = 20) {
40
+ const filled = Math.round((score / 100) * width);
41
+ const empty = width - filled;
42
+ const bar = '█'.repeat(filled) + '░'.repeat(empty);
43
+ const color = score >= 80 ? chalk.green : score >= 50 ? chalk.yellow : chalk.red;
44
+ return `${color(bar)} ${score}/100`;
45
+ }
46
+ function computeFreshness(repoPath) {
47
+ const meta = syncEngine.readSyncMeta(repoPath);
48
+ if (!meta)
49
+ return 0;
50
+ const ageMs = Date.now() - new Date(meta.lastSyncAt).getTime();
51
+ const ageDays = ageMs / (1000 * 60 * 60 * 24);
52
+ return clamp(100 - ageDays * 10);
53
+ }
54
+ function computeCoverage(entries) {
55
+ if (entries.length === 0)
56
+ return 100;
57
+ const existing = entries.filter(e => fs.existsSync(e.srcAbs)).length;
58
+ return clamp((existing / entries.length) * 100);
59
+ }
60
+ function computeIntegrity(repoPath) {
61
+ const integrityPath = path.join(repoPath, 'integrity.json');
62
+ if (!fs.existsSync(integrityPath))
63
+ return 100;
64
+ let manifest;
65
+ try {
66
+ manifest = JSON.parse(fs.readFileSync(integrityPath, 'utf-8'));
67
+ }
68
+ catch {
69
+ return 100;
70
+ }
71
+ const total = Object.keys(manifest.checksums).length;
72
+ if (total === 0)
73
+ return 100;
74
+ let passing = 0;
75
+ for (const [repoRel, expectedHash] of Object.entries(manifest.checksums)) {
76
+ const absPath = path.join(repoPath, repoRel);
77
+ if (!fs.existsSync(absPath))
78
+ continue;
79
+ const actualHash = crypto.createHash('sha256').update(fs.readFileSync(absPath)).digest('hex');
80
+ if (actualHash === expectedHash)
81
+ passing++;
82
+ }
83
+ return clamp((passing / total) * 100);
84
+ }
85
+ function computeEncryption(entries) {
86
+ if (entries.length === 0)
87
+ return 100;
88
+ const sensitivePatterns = ['.env', 'key', 'secret', 'token', 'credential', 'password', 'mcp'];
89
+ const sensitiveEntries = entries.filter(e => sensitivePatterns.some(p => e.repoRel.toLowerCase().includes(p)));
90
+ if (sensitiveEntries.length === 0)
91
+ return 100;
92
+ const encSensitive = sensitiveEntries.filter(e => e.encrypt).length;
93
+ return clamp((encSensitive / sensitiveEntries.length) * 100);
94
+ }
95
+ function computeOverall(repoPath, entries) {
96
+ const freshness = computeFreshness(repoPath);
97
+ const coverage = computeCoverage(entries);
98
+ const integrity = computeIntegrity(repoPath);
99
+ const encryption = computeEncryption(entries);
100
+ return clamp((freshness + coverage + integrity + encryption) / 4);
101
+ }
102
+ // ── Tier labels for list view ──────────────────────────────────
103
+ const TIER_LABELS = {
104
+ openclaw: 'OpenClaw',
105
+ claude: 'Claude',
106
+ gemini: 'Gemini',
107
+ codebuddy: 'CodeBuddy',
108
+ workbuddy: 'WorkBuddy',
109
+ cursor: 'Cursor',
110
+ codex: 'Codex',
111
+ shared: '', // filled via t()
112
+ };
113
+ // ── Main command ────────────────────────────────────────────────
114
+ export async function cmdStatus({ agent, verbose } = {}) {
17
115
  logger.banner(t('status.banner'));
18
116
  let cfg = config.load();
19
117
  validator.requireInit(cfg);
20
118
  cfg = ensureMigrated(cfg);
21
119
  const repoPath = syncEngine.expandHome(cfg.localRepoPath);
120
+ if (verbose) {
121
+ await renderVerbose(cfg, repoPath, agent);
122
+ }
123
+ else {
124
+ await renderCompact(cfg, repoPath, agent);
125
+ }
126
+ }
127
+ // ── Compact view (default) ──────────────────────────────────────
128
+ async function renderCompact(cfg, repoPath, agent) {
129
+ // Header
22
130
  console.log(chalk.bold(' ' + t('status.repo')) + chalk.cyan(cfg.repo));
23
- console.log(chalk.bold(' ' + t('status.local')) + repoPath);
24
131
  console.log(chalk.bold(' ' + t('status.branch')) + chalk.yellow(resolveGitBranch(cfg)));
25
132
  console.log(chalk.bold(' ' + t('status.env')) + chalk.magenta(cfg.environment ?? 'default'));
26
133
  if (agent)
27
134
  console.log(chalk.bold(' ' + t('status.agent')) + chalk.cyan(agent));
28
135
  console.log();
29
- // ── Sync lock status ──────────────────────────────────────────
30
- const lock = syncLock.read();
31
- if (lock) {
32
- let lockAlive;
33
- try {
34
- process.kill(lock.pid, 0);
35
- lockAlive = true;
36
- }
37
- catch {
38
- lockAlive = false;
39
- }
40
- if (lockAlive) {
41
- console.log(chalk.yellow(` ${t('status.lockActive', { pid: lock.pid, startedAt: lock.startedAt })}`));
136
+ // Health score bar
137
+ const entries = syncEngine.buildFileEntries(cfg, undefined, agent);
138
+ const health = computeOverall(repoPath, entries);
139
+ console.log(chalk.bold(' ' + t('status.healthLabel')) + renderBar(health));
140
+ console.log();
141
+ // Sync lock warning
142
+ renderLockWarning();
143
+ // Workspace diff summary
144
+ try {
145
+ const diff = await syncEngine.diff(cfg, agent);
146
+ const total = diff.added.length + diff.modified.length + diff.missing.length;
147
+ if (total === 0) {
148
+ logger.ok(' ' + t('status.noSync'));
42
149
  }
43
150
  else {
44
- console.log(chalk.red(` 🔴 ${t('status.lockStale', { pid: lock.pid })}`));
151
+ console.log(` ${chalk.yellow('+')} ${diff.added.length} ${t('status.addedLabel')} ` +
152
+ `${chalk.yellow('~')} ${diff.modified.length} ${t('status.modifiedLabel')} ` +
153
+ `${chalk.red('-')} ${diff.missing.length} ${t('status.missingLabel')}`);
45
154
  }
155
+ }
156
+ catch (err) {
157
+ logger.warn(t('status.diffFailed', { error: err.message }));
158
+ }
159
+ // Last sync
160
+ const meta = syncEngine.readSyncMeta(repoPath);
161
+ if (meta) {
162
+ const ts = new Date(meta.lastSyncAt).toLocaleString();
46
163
  console.log();
164
+ console.log(` ${t('status.lastSync')} ${chalk.gray(ts)} ${chalk.gray(`(${meta.hostname})`)}`);
47
165
  }
48
- // ── Recent commits ──────────────────────────────────────────────
166
+ // Multi-machine info
167
+ await renderMultiMachineInfo(repoPath);
168
+ // Watch daemon status
169
+ renderWatchStatus();
170
+ // Agent discovery hints
171
+ renderDiscoveryHints(cfg);
172
+ // Hint
173
+ console.log();
174
+ logger.info(` ${t('status.syncHint')}`);
175
+ logger.info(` ${t('status.verboseHint')}`);
176
+ }
177
+ // ── Verbose view (--verbose) ────────────────────────────────────
178
+ async function renderVerbose(cfg, repoPath, agent) {
179
+ // Header
180
+ console.log(chalk.bold(' ' + t('status.repo')) + chalk.cyan(cfg.repo));
181
+ console.log(chalk.bold(' ' + t('status.local')) + repoPath);
182
+ console.log(chalk.bold(' ' + t('status.branch')) + chalk.yellow(resolveGitBranch(cfg)));
183
+ console.log(chalk.bold(' ' + t('status.env')) + chalk.magenta(cfg.environment ?? 'default'));
184
+ if (agent)
185
+ console.log(chalk.bold(' ' + t('status.agent')) + chalk.cyan(agent));
186
+ console.log();
187
+ // Sync lock warning
188
+ renderLockWarning();
189
+ // ── Health score ────────────────────────────────────────────
190
+ const allEntries = syncEngine.buildFileEntries(cfg, undefined, agent);
191
+ const freshness = computeFreshness(repoPath);
192
+ const coverage = computeCoverage(allEntries);
193
+ const integrity = computeIntegrity(repoPath);
194
+ const encryption = computeEncryption(allEntries);
195
+ const overall = clamp((freshness + coverage + integrity + encryption) / 4);
196
+ console.log(chalk.bold(` ${t('status.healthLabel')}`));
197
+ console.log(` ${t('health.freshness').padEnd(14)} ${renderBar(freshness)}`);
198
+ console.log(` ${t('health.coverage').padEnd(14)} ${renderBar(coverage)}`);
199
+ console.log(` ${t('health.integrity').padEnd(14)} ${renderBar(integrity)}`);
200
+ console.log(` ${t('health.encryption').padEnd(14)} ${renderBar(encryption)}`);
201
+ console.log(chalk.bold(` ${t('health.overall').padEnd(14)} ${renderBar(overall)}`));
202
+ console.log();
203
+ // ── Recent commits ─────────────────────────────────────────
49
204
  try {
50
205
  const logs = await gitEngine.log(repoPath, 3);
51
206
  if (logs.length > 0) {
@@ -60,25 +215,7 @@ export async function cmdStatus({ agent } = {}) {
60
215
  catch {
61
216
  logger.warn(t('status.cannotReadLog'));
62
217
  }
63
- // ── Git worktree status ─────────────────────────────────────────
64
- const gitStatus = await gitEngine.status(repoPath);
65
- if (gitStatus !== null) {
66
- const { modified, created, deleted, not_added } = gitStatus;
67
- const hasPending = modified.length + created.length + deleted.length + not_added.length > 0;
68
- if (hasPending) {
69
- console.log(chalk.bold(' ' + t('status.uncommitted')));
70
- modified.forEach(f => console.log(` ${chalk.yellow('M')} ${f}`));
71
- created.forEach(f => console.log(` ${chalk.green('A')} ${f}`));
72
- deleted.forEach(f => console.log(` ${chalk.red('D')} ${f}`));
73
- not_added.forEach(f => console.log(` ${chalk.gray('?')} ${f}`));
74
- console.log();
75
- }
76
- else {
77
- logger.ok(' ' + t('status.inSync'));
78
- console.log();
79
- }
80
- }
81
- // ── Workspace diff ──────────────────────────────────────────────
218
+ // ── Workspace diff ─────────────────────────────────────────
82
219
  try {
83
220
  const diff = await syncEngine.diff(cfg, agent);
84
221
  const total = diff.added.length + diff.modified.length + diff.missing.length;
@@ -95,7 +232,7 @@ export async function cmdStatus({ agent } = {}) {
95
232
  `${chalk.yellow('~')} ${diff.modified.length} ${t('status.modifiedLabel')} ` +
96
233
  `${chalk.red('-')} ${diff.missing.length} ${t('status.missingLabel')}`);
97
234
  }
98
- // ── Conflict detection ──────────────────────────────────────
235
+ // Conflict detection
99
236
  if (diff.modified.length > 0) {
100
237
  const meta = syncEngine.readSyncMeta(repoPath);
101
238
  if (meta) {
@@ -112,7 +249,6 @@ export async function cmdStatus({ agent } = {}) {
112
249
  }
113
250
  }
114
251
  if (conflictFiles.length > 0) {
115
- // Check if remote also has newer commits
116
252
  try {
117
253
  const branch = resolveGitBranch(cfg);
118
254
  const ahead = await gitEngine.fetchAndCheckRemoteAhead(repoPath, branch);
@@ -126,9 +262,7 @@ export async function cmdStatus({ agent } = {}) {
126
262
  logger.info(` ${t('status.conflictHint')}`);
127
263
  }
128
264
  }
129
- catch {
130
- // Fetch failed — skip conflict check silently
131
- }
265
+ catch { /* Fetch failed — skip conflict check */ }
132
266
  }
133
267
  }
134
268
  }
@@ -136,17 +270,44 @@ export async function cmdStatus({ agent } = {}) {
136
270
  catch (err) {
137
271
  logger.warn(t('status.diffFailed', { error: err.message }));
138
272
  }
139
- // ── File inventory ──────────────────────────────────────────────
273
+ // ── Line-level diff ────────────────────────────────────────
140
274
  console.log();
141
- const entries = syncEngine.buildFileEntries(cfg, undefined, agent);
142
- console.log(chalk.bold(` ${t('status.inventory', { count: entries.length })}`));
143
- for (const e of entries) {
144
- const mark = fs.existsSync(e.srcAbs) ? chalk.green('✔') : chalk.red('✖');
145
- const encLabel = e.encrypt ? chalk.gray('[enc]') : '';
146
- const jfLabel = e.jsonExtract ? chalk.blue(t('status.fieldLabel')) : '';
147
- console.log(` ${mark} ${e.repoRel} ${encLabel}${jfLabel}`);
275
+ await renderLineDiff(cfg, repoPath, agent);
276
+ // ── File inventory (from list.ts) ──────────────────────────
277
+ console.log();
278
+ renderFileInventory(cfg, repoPath, agent);
279
+ // ── Sync history (last 5) ──────────────────────────────────
280
+ console.log();
281
+ renderHistory(5);
282
+ // ── Multi-machine info ────────────────────────────────────
283
+ await renderMultiMachineInfo(repoPath);
284
+ // ── Watch daemon status ───────────────────────────────────
285
+ renderWatchStatus();
286
+ // ── Agent discovery hints ──────────────────────────────────
287
+ renderDiscoveryHints(cfg);
288
+ }
289
+ // ── Shared helpers ──────────────────────────────────────────────
290
+ function renderLockWarning() {
291
+ const lock = syncLock.read();
292
+ if (!lock)
293
+ return;
294
+ let lockAlive;
295
+ try {
296
+ process.kill(lock.pid, 0);
297
+ lockAlive = true;
298
+ }
299
+ catch {
300
+ lockAlive = false;
301
+ }
302
+ if (lockAlive) {
303
+ console.log(chalk.yellow(` ⚠ ${t('status.lockActive', { pid: lock.pid, startedAt: lock.startedAt })}`));
304
+ }
305
+ else {
306
+ console.log(chalk.red(` 🔴 ${t('status.lockStale', { pid: lock.pid })}`));
148
307
  }
149
- // ── Agent discovery hints ────────────────────────────────────────
308
+ console.log();
309
+ }
310
+ function renderDiscoveryHints(cfg) {
150
311
  const profiles = cfg.profiles.default;
151
312
  const discovered = [];
152
313
  for (const name of AGENT_NAMES) {
@@ -167,4 +328,153 @@ export async function cmdStatus({ agent } = {}) {
167
328
  }
168
329
  }
169
330
  }
331
+ async function renderLineDiff(cfg, repoPath, agent) {
332
+ const keyPath = syncEngine.expandHome(cfg.keyPath);
333
+ const entries = syncEngine.buildFileEntries(cfg, undefined, agent);
334
+ let totalChanged = 0;
335
+ for (const entry of entries) {
336
+ const srcExists = fs.existsSync(entry.srcAbs);
337
+ const repoAbs = path.join(repoPath, entry.repoRel);
338
+ const repoExists = fs.existsSync(repoAbs);
339
+ if (srcExists && !repoExists) {
340
+ console.log(chalk.bold.green(` +++ ${entry.repoRel}`) + chalk.gray(' ' + t('diff.newFile')));
341
+ console.log();
342
+ totalChanged++;
343
+ continue;
344
+ }
345
+ if (!srcExists && repoExists) {
346
+ console.log(chalk.bold.red(` --- ${entry.repoRel}`) + chalk.gray(' ' + t('diff.missingFile')));
347
+ console.log();
348
+ totalChanged++;
349
+ continue;
350
+ }
351
+ if (!srcExists && !repoExists)
352
+ continue;
353
+ const localText = fs.readFileSync(entry.srcAbs, 'utf-8');
354
+ let repoText;
355
+ if (entry.encrypt) {
356
+ try {
357
+ repoText = cryptoEngine.decryptString(fs.readFileSync(repoAbs, 'utf-8').trim(), keyPath);
358
+ }
359
+ catch {
360
+ console.log(chalk.yellow(` ~ ${entry.repoRel}`) + chalk.gray(' ' + t('diff.cannotDecrypt')));
361
+ console.log();
362
+ totalChanged++;
363
+ continue;
364
+ }
365
+ }
366
+ else {
367
+ repoText = fs.readFileSync(repoAbs, 'utf-8');
368
+ }
369
+ const diffLines = diffText(repoText, localText);
370
+ if (diffLines.length === 0)
371
+ continue;
372
+ const encLabel = entry.encrypt ? chalk.gray(' [enc]') : '';
373
+ console.log(chalk.bold(` ~~~ ${entry.repoRel}`) + encLabel);
374
+ for (const line of diffLines) {
375
+ if (line.content === '...') {
376
+ console.log(chalk.gray(' ...'));
377
+ }
378
+ else if (line.type === 'added') {
379
+ console.log(chalk.green(` + ${line.content}`));
380
+ }
381
+ else if (line.type === 'removed') {
382
+ console.log(chalk.red(` - ${line.content}`));
383
+ }
384
+ else {
385
+ console.log(chalk.gray(` ${line.content}`));
386
+ }
387
+ }
388
+ console.log();
389
+ totalChanged++;
390
+ }
391
+ if (totalChanged === 0) {
392
+ logger.ok(' ' + t('diff.noDiff'));
393
+ }
394
+ else {
395
+ logger.info(' ' + t('diff.filesDiffer', { count: totalChanged }));
396
+ }
397
+ }
398
+ function renderFileInventory(cfg, repoPath, agent) {
399
+ const entries = syncEngine.buildFileEntries(cfg, undefined, agent);
400
+ // Group by agentName
401
+ const groups = new Map();
402
+ for (const e of entries) {
403
+ if (!groups.has(e.agentName))
404
+ groups.set(e.agentName, []);
405
+ groups.get(e.agentName).push(e);
406
+ }
407
+ let totalFiles = 0;
408
+ const order = ['shared', ...AGENT_NAMES];
409
+ for (const tier of order) {
410
+ const group = groups.get(tier);
411
+ if (!group || group.length === 0)
412
+ continue;
413
+ const label = tier === 'shared' ? t('list.tierShared') : TIER_LABELS[tier];
414
+ console.log(chalk.bold.cyan(` ▸ ${label}`));
415
+ for (const e of group) {
416
+ const localExists = fs.existsSync(e.srcAbs);
417
+ const repoExists = fs.existsSync(`${repoPath}/${e.repoRel}`);
418
+ const localMark = localExists ? chalk.green('✔') : chalk.red('✖');
419
+ const repoMark = repoExists ? chalk.green('✔') : chalk.gray('·');
420
+ const encLabel = e.encrypt ? chalk.magenta('[enc]') : ' ';
421
+ const jsonLabel = e.jsonExtract ? chalk.yellow(t('list.fieldLabel')) : ' ';
422
+ console.log(` ${localMark} ${t('list.localLabel')} ${repoMark} ${t('list.repoLabel')} ${encLabel} ${jsonLabel} ${chalk.white(e.repoRel)}`);
423
+ }
424
+ console.log();
425
+ totalFiles += group.length;
426
+ }
427
+ console.log(chalk.gray(` ${t('list.totalFiles', { count: totalFiles })}`));
428
+ console.log(chalk.gray(` ${t('list.legend')}`));
429
+ }
430
+ function renderHistory(limit) {
431
+ const events = readSyncHistory();
432
+ if (events.length === 0) {
433
+ logger.info(' ' + t('history.empty'));
434
+ return;
435
+ }
436
+ const shown = events.slice(-limit).reverse();
437
+ console.log(chalk.bold(` ${t('status.historyLabel')}`));
438
+ for (const ev of shown) {
439
+ const time = ev.timestamp.replace('T', ' ').slice(0, 19);
440
+ const action = ev.action.padEnd(6);
441
+ const files = String(ev.fileCount).padStart(3);
442
+ const host = ev.hostname;
443
+ const actionColor = ev.action === 'push' ? chalk.green(action)
444
+ : ev.action === 'pull' ? chalk.cyan(action)
445
+ : chalk.yellow(action);
446
+ console.log(` ${chalk.white(time)} ${actionColor} ${files} files ${chalk.gray(host)}`);
447
+ }
448
+ }
449
+ /** Show multi-machine information from git log commit messages */
450
+ async function renderMultiMachineInfo(repoPath) {
451
+ try {
452
+ const logs = await gitEngine.log(repoPath, 20);
453
+ const hostnames = new Set();
454
+ const hostnamePattern = /\[([^\]]+)\]\s*$/;
455
+ for (const c of logs) {
456
+ const match = hostnamePattern.exec(c.message);
457
+ if (match?.[1])
458
+ hostnames.add(match[1]);
459
+ }
460
+ if (hostnames.size > 0) {
461
+ const hosts = [...hostnames].join(', ');
462
+ console.log(` ${t('status.activeMachines', { count: hostnames.size, hosts })}`);
463
+ }
464
+ }
465
+ catch {
466
+ // Ignore — git log may not be available
467
+ }
468
+ }
469
+ /** Show watch daemon status */
470
+ function renderWatchStatus() {
471
+ const pid = getWatchPid();
472
+ console.log();
473
+ if (pid !== null) {
474
+ console.log(` ${chalk.green('✔')} ${t('status.watchRunning', { pid })}`);
475
+ }
476
+ else {
477
+ console.log(` ${chalk.red('✖')} ${t('status.watchNotRunning')}`);
478
+ }
479
+ }
170
480
  //# sourceMappingURL=status.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/commands/status.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/commands/status.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../../src/commands/sync.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAeH,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,WAAW,EAAE,YAAY,EAAiB,MAAM,aAAa,CAAC;AAIxG,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,UAAU,CAAC,EAAE,aAAa,GAAG,SAAS,CAAC;IAChD,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,YAAY,GAAG;QAAE,QAAQ,CAAC,WAAW,CAAC,EAAE,WAAW,GAAG,SAAS,CAAA;KAAE,CAAC,GAAG,SAAS,CAAC;CACvG;AAED,wBAAsB,OAAO,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAE,WAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAuB5G"}
1
+ {"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../../src/commands/sync.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAiBH,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,WAAW,EAAE,YAAY,EAAiB,MAAM,aAAa,CAAC;AAiDxG,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,UAAU,CAAC,EAAE,aAAa,GAAG,SAAS,CAAC;IAChD,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,YAAY,GAAG;QAAE,QAAQ,CAAC,WAAW,CAAC,EAAE,WAAW,GAAG,SAAS,CAAA;KAAE,CAAC,GAAG,SAAS,CAAC;CACvG;AAED,wBAAsB,OAAO,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAE,WAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CA0B5G"}
@@ -6,6 +6,8 @@
6
6
  * 3. Then push local changes
7
7
  */
8
8
  import os from 'os';
9
+ import fs from 'fs';
10
+ import path from 'path';
9
11
  import { config } from '../core/config.js';
10
12
  import { resolveGitBranch } from '../core/config.js';
11
13
  import { ensureMigrated } from '../core/migrate.js';
@@ -20,6 +22,53 @@ import { logger } from '../utils/logger.js';
20
22
  import { t } from '../i18n.js';
21
23
  import chalk from 'chalk';
22
24
  import ora from 'ora';
25
+ const WANGCHUAN_DIR = path.join(os.homedir(), '.wangchuan');
26
+ const SNAPSHOTS_DIR = path.join(WANGCHUAN_DIR, 'snapshots');
27
+ const MAX_AUTO_SNAPSHOTS = 5;
28
+ /** Create an auto-snapshot before sync (silent, no user output) */
29
+ function autoSnapshot(repoPath) {
30
+ try {
31
+ if (!fs.existsSync(repoPath))
32
+ return;
33
+ const snapshotName = `auto-${new Date().toISOString().replace(/[:.]/g, '-')}`;
34
+ const snapshotDir = path.join(SNAPSHOTS_DIR, snapshotName);
35
+ fs.mkdirSync(snapshotDir, { recursive: true });
36
+ copyDirSync(repoPath, snapshotDir);
37
+ // Prune old auto-snapshots
38
+ pruneAutoSnapshots(MAX_AUTO_SNAPSHOTS);
39
+ }
40
+ catch {
41
+ // Silent failure — snapshot is a safety net, not a blocker
42
+ }
43
+ }
44
+ function copyDirSync(src, dest) {
45
+ if (!fs.existsSync(src))
46
+ return;
47
+ fs.mkdirSync(dest, { recursive: true });
48
+ for (const entry of fs.readdirSync(src, { withFileTypes: true })) {
49
+ const srcPath = path.join(src, entry.name);
50
+ const destPath = path.join(dest, entry.name);
51
+ if (entry.isDirectory()) {
52
+ copyDirSync(srcPath, destPath);
53
+ }
54
+ else {
55
+ fs.copyFileSync(srcPath, destPath);
56
+ }
57
+ }
58
+ }
59
+ function pruneAutoSnapshots(max) {
60
+ if (!fs.existsSync(SNAPSHOTS_DIR))
61
+ return;
62
+ const autoDirs = fs.readdirSync(SNAPSHOTS_DIR)
63
+ .filter(d => d.startsWith('auto-') && fs.statSync(path.join(SNAPSHOTS_DIR, d)).isDirectory())
64
+ .sort();
65
+ if (autoDirs.length <= max)
66
+ return;
67
+ const toRemove = autoDirs.slice(0, autoDirs.length - max);
68
+ for (const dir of toRemove) {
69
+ fs.rmSync(path.join(SNAPSHOTS_DIR, dir), { recursive: true, force: true });
70
+ }
71
+ }
23
72
  export async function cmdSync({ agent, dryRun, only, exclude } = {}) {
24
73
  logger.banner(t('sync.banner'));
25
74
  let cfg = config.load();
@@ -36,6 +85,8 @@ export async function cmdSync({ agent, dryRun, only, exclude } = {}) {
36
85
  if (dryRun)
37
86
  logger.info(chalk.yellow(t('dryRun.enabled')));
38
87
  const filter = (only?.length || exclude?.length) ? { only, exclude } : undefined;
88
+ // ── Auto-snapshot before sync (silent safety net) ────────────
89
+ autoSnapshot(repoPath);
39
90
  // ── Acquire sync lock ─────────────────────────────────────────
40
91
  await syncLock.acquire(repoPath);
41
92
  try {
@@ -83,6 +134,11 @@ async function runSync(cfg, repoPath, hostname, agent, dryRun, filter) {
83
134
  encrypted: pullResult.decrypted.length,
84
135
  }));
85
136
  }
137
+ if (pullResult.skippedAgents.length > 0) {
138
+ logger.info(t('sync.skippedAgents', {
139
+ agents: pullResult.skippedAgents.join(', '),
140
+ }));
141
+ }
86
142
  }
87
143
  catch (err) {
88
144
  throw new Error(t('sync.restoreFailed', { error: err.message }));