wangchuan 6.0.2 → 7.0.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.
package/README.md CHANGED
@@ -33,7 +33,7 @@ Agent: (creates skill, asks which agents to distribute to,
33
33
 
34
34
  You: "Switch to work environment"
35
35
  Agent: (asks about unsynced changes, switches branch, pulls work env data,
36
- checks for conflicts, restarts background daemon)
36
+ checks for conflicts)
37
37
  ```
38
38
 
39
39
  **The agent does everything.** You just talk to it. The skill file (`skill/SKILL.md`) teaches the agent exactly how to manage your memories — no manual CLI needed.
@@ -56,11 +56,11 @@ The main SKILL.md is kept under 120 lines. When the agent encounters a specific
56
56
 
57
57
  ### Skill Benchmark
58
58
 
59
- Every skill change is validated against **53 test cases** (`test/skill-benchmark.md`) covering:
59
+ Every skill change is validated against **52 test cases** (`test/skill-benchmark.md`) covering:
60
60
 
61
61
  - 29 user instructions (init, CRUD for 4 resource types, push/pull, rollback, env management)
62
- - 4 environment isolation scenarios (cross-env pull, workspace leakage, env selection on restore, watch restart)
63
- - Global rules (watch daemon auto-start, env-aware sync, non-TTY constraints)
62
+ - 4 environment isolation scenarios (cross-env pull, workspace leakage, env selection on restore)
63
+ - Global rules (env-aware push/pull, non-TTY constraints)
64
64
 
65
65
  ### Install the Skill
66
66
 
@@ -95,9 +95,9 @@ wangchuan restore --repo git@github.com:you/brain.git --key wangchuan_<hex>
95
95
  |---------|---------|-------------|-----------|
96
96
  | `init` | — | Brand new setup — auto-detects agents, auto-creates repo (GitHub CLI), runs first sync | `--repo`, `--force` |
97
97
  | `restore` | — | Restore from cloud — imports key, pulls cloud data first, then pushes local additions | `--repo`, `--key` |
98
- | `sync` | `s` | Smart bidirectional sync THE daily command | `-a, --agent`, `-n, --dry-run`, `-o, --only`, `-x, --exclude` |
98
+ | `pull` | | Pull cloud data to local | `-a, --agent`, `-o, --only`, `-x, --exclude` |
99
+ | `push` | `s` | Push local changes to cloud | `-a, --agent`, `-n, --dry-run`, `-y`, `-o, --only`, `-x, --exclude` |
99
100
  | `status` | `st` | One-screen summary + health score | `-v, --verbose` |
100
- | `watch` | — | Pull-only background daemon for continuous cloud sync | `-i, --interval <min>` |
101
101
  | `doctor` | — | Diagnose + auto-fix everything | `--key-export`, `--key-rotate`, `--setup` |
102
102
  | `memory` | — | Browse/copy memories between agents | `list`, `show`, `copy`, `broadcast` |
103
103
  | `env` | — | Multi-environment management | `list`, `create`, `switch`, `current`, `delete` |
@@ -138,19 +138,13 @@ Agent paths are customizable in `~/.wangchuan/config.json`.
138
138
  - Automatic conflict resolution for `.md`, `.txt`, `.json`, `.yaml`, `.yml` files
139
139
  - Non-overlapping edits → auto-merged silently
140
140
  - Overlapping conflicts → conflict markers written for user resolution
141
- - Watch daemon records unresolvable conflicts to `pending-conflicts.json` for next interactive session
141
+ - Unresolvable conflicts recorded to `pending-conflicts.json` for next interactive session
142
142
 
143
143
  ### Multi-Environment
144
144
  - Create isolated environments: `wangchuan env create work`
145
145
  - Switch instantly: `wangchuan env switch work`
146
146
  - Git-branch-level isolation; shared local workspace with leakage detection
147
147
 
148
- ### Watch Daemon (Pull-Only)
149
- - `wangchuan watch` continuously pulls cloud changes in the background
150
- - Does **not** push — users must `wangchuan sync` to push manually
151
- - Auto-started by the skill after every interaction
152
- - Restarts automatically on environment switch
153
-
154
148
  ### Snapshot Rollback
155
149
  - Auto-snapshots before every sync (safety net)
156
150
  - Named snapshots: `wangchuan snapshot save before-refactor`
package/README.zh-CN.md CHANGED
@@ -33,7 +33,7 @@ Agent: (创建技能, 询问分发到哪些 Agent,
33
33
 
34
34
  用户: "切换到 work 环境"
35
35
  Agent: (询问是否先推送未同步变更, 切换分支, 拉取 work 环境数据,
36
- 检查冲突, 重启后台守护)
36
+ 检查冲突)
37
37
  ```
38
38
 
39
39
  **Agent 负责一切。** 你只需要对话。技能文件(`skill/SKILL.md`)教会 Agent 如何管理你的记忆 —— 不需要手动敲 CLI。
@@ -56,11 +56,11 @@ skill/
56
56
 
57
57
  ### 技能基准测试
58
58
 
59
- 每次技能变更都经过 **53 个测试用例**(`test/skill-benchmark.md`)验证:
59
+ 每次技能变更都经过 **52 个测试用例**(`test/skill-benchmark.md`)验证:
60
60
 
61
61
  - 29 条用户指令(初始化、4 种资源的增删改查、推送/拉取、回退、环境管理)
62
- - 4 个环境隔离场景(跨环境拉取、工作空间泄漏、恢复时环境选择、watch 重启)
63
- - 全局规则(watch 自动启动、环境感知同步、非 TTY 约束)
62
+ - 4 个环境隔离场景(跨环境拉取、工作空间泄漏、恢复时环境选择)
63
+ - 全局规则(环境感知推送/拉取、非 TTY 约束)
64
64
 
65
65
  ### 安装技能
66
66
 
@@ -95,9 +95,9 @@ wangchuan restore --repo git@github.com:you/brain.git --key wangchuan_<hex>
95
95
  |------|------|------|----------|
96
96
  | `init` | — | 全新初始化 — 自动检测智能体,支持一键创建仓库(GitHub CLI),执行首次同步 | `--repo`、`--force` |
97
97
  | `restore` | — | 恢复云端记忆 — 导入密钥,先拉取云端数据,再推送本地新增内容 | `--repo`、`--key` |
98
- | `sync` | `s` | 智能双向同步 — 日常唯一命令 | `-a, --agent`、`-n, --dry-run`、`-o, --only`、`-x, --exclude` |
98
+ | `pull` | | 拉取云端数据到本地 | `-a, --agent`、`-o, --only`、`-x, --exclude` |
99
+ | `push` | `s` | 推送本地变更到云端 | `-a, --agent`、`-n, --dry-run`、`-y`、`-o, --only`、`-x, --exclude` |
99
100
  | `status` | `st` | 一屏总览 + 健康评分 | `-v, --verbose` |
100
- | `watch` | — | 仅拉取的后台守护进程,持续同步云端变更 | `-i, --interval <分钟>` |
101
101
  | `doctor` | — | 诊断 + 自动修复所有问题 | `--key-export`、`--key-rotate`、`--setup` |
102
102
  | `memory` | — | 浏览/复制智能体记忆 | `list`、`show`、`copy`、`broadcast` |
103
103
  | `env` | — | 多环境管理 | `list`、`create`、`switch`、`current`、`delete` |
@@ -138,19 +138,13 @@ wangchuan restore --repo git@github.com:you/brain.git --key wangchuan_<hex>
138
138
  - 自动冲突解决,支持 `.md`、`.txt`、`.json`、`.yaml`、`.yml`
139
139
  - 不重叠编辑 → 静默合并
140
140
  - 重叠冲突 → 写入冲突标记供用户解决
141
- - Watch 守护记录无法自动解决的冲突到 `pending-conflicts.json`,下次交互时提示
141
+ - 无法自动解决的冲突记录到 `pending-conflicts.json`,下次交互时提示
142
142
 
143
143
  ### 多环境管理
144
144
  - 创建隔离环境:`wangchuan env create work`
145
145
  - 即时切换:`wangchuan env switch work`
146
146
  - Git 分支级隔离;共享本地工作空间,自动检测泄漏
147
147
 
148
- ### Watch 守护进程(仅拉取)
149
- - `wangchuan watch` 持续在后台拉取云端变更
150
- - **不会推送** — 用户需手动 `wangchuan sync` 推送
151
- - 技能每次交互后自动启动
152
- - 环境切换时自动重启
153
-
154
148
  ### 快照回滚
155
149
  - 每次同步前自动创建快照(安全网)
156
150
  - 命名快照:`wangchuan snapshot save before-refactor`
@@ -8,11 +8,11 @@
8
8
  * Commands:
9
9
  * init — One-time setup (interactive if no --repo)
10
10
  * restore — Restore from cloud (import key + clone + pull)
11
- * syncSmart bidirectional sync (the ONE daily command)
11
+ * pullPull remote changes to local workspace
12
+ * push — Push local changes to remote
12
13
  * status — Show sync state at a glance (--verbose for full detail)
13
14
  * doctor — Diagnose + auto-fix issues (always runs --fix)
14
15
  * env — Multi-environment management
15
- * watch — Background daemon for continuous sync
16
16
  * memory — Browse/copy memories across agents
17
17
  * snapshot — Manage sync snapshots (save/list/restore/delete)
18
18
  * lang — Switch display language
@@ -8,11 +8,11 @@
8
8
  * Commands:
9
9
  * init — One-time setup (interactive if no --repo)
10
10
  * restore — Restore from cloud (import key + clone + pull)
11
- * syncSmart bidirectional sync (the ONE daily command)
11
+ * pullPull remote changes to local workspace
12
+ * push — Push local changes to remote
12
13
  * status — Show sync state at a glance (--verbose for full detail)
13
14
  * doctor — Diagnose + auto-fix issues (always runs --fix)
14
15
  * env — Multi-environment management
15
- * watch — Background daemon for continuous sync
16
16
  * memory — Browse/copy memories across agents
17
17
  * snapshot — Manage sync snapshots (save/list/restore/delete)
18
18
  * lang — Switch display language
@@ -21,11 +21,11 @@ import { Command } from 'commander';
21
21
  import { cmdInit } from '../src/commands/init.js';
22
22
  import { cmdRestore } from '../src/commands/restore.js';
23
23
  import { cmdStatus } from '../src/commands/status.js';
24
- import { cmdSync } from '../src/commands/sync.js';
24
+ import { cmdPull } from '../src/commands/pull.js';
25
+ import { cmdPush } from '../src/commands/push.js';
25
26
  import { cmdEnv } from '../src/commands/env.js';
26
27
  import { cmdDoctor } from '../src/commands/doctor.js';
27
28
  import { cmdLang } from '../src/commands/lang.js';
28
- import { cmdWatch } from '../src/commands/watch.js';
29
29
  import { cmdMemory } from '../src/commands/memory.js';
30
30
  import { cmdSnapshot } from '../src/commands/snapshot.js';
31
31
  import { config } from '../src/core/config.js';
@@ -47,7 +47,7 @@ const program = new Command();
47
47
  program
48
48
  .name('wangchuan')
49
49
  .description(t('cli.description'))
50
- .version('6.0.2');
50
+ .version('7.0.0');
51
51
  // ── init ────────────────────────────────────────────────────────
52
52
  program
53
53
  .command('init')
@@ -66,18 +66,28 @@ program
66
66
  .action(async (opts) => {
67
67
  await run(() => cmdRestore(opts));
68
68
  });
69
- // ── sync ────────────────────────────────────────────────────────
69
+ // ── pull ────────────────────────────────────────────────────────
70
70
  program
71
- .command('sync')
72
- .alias('s')
73
- .description(t('cli.cmd.sync'))
71
+ .command('pull')
72
+ .description(t('cli.cmd.pull'))
73
+ .option('-a, --agent <name>', t('cli.cmd.agent'), parseAgent)
74
+ .option('-n, --dry-run', t('cli.cmd.dryRun'), false)
75
+ .option('-o, --only <patterns...>', t('cli.cmd.sync.only'))
76
+ .option('-x, --exclude <patterns...>', t('cli.cmd.sync.exclude'))
77
+ .action(async (opts) => {
78
+ await run(() => cmdPull(opts));
79
+ });
80
+ // ── push ────────────────────────────────────────────────────────
81
+ program
82
+ .command('push')
83
+ .description(t('cli.cmd.push'))
74
84
  .option('-a, --agent <name>', t('cli.cmd.agent'), parseAgent)
75
85
  .option('-n, --dry-run', t('cli.cmd.dryRun'), false)
76
86
  .option('-o, --only <patterns...>', t('cli.cmd.sync.only'))
77
87
  .option('-x, --exclude <patterns...>', t('cli.cmd.sync.exclude'))
78
88
  .option('-y, --yes', t('cli.cmd.sync.yes'), false)
79
89
  .action(async (opts) => {
80
- await run(() => cmdSync(opts));
90
+ await run(() => cmdPush(opts));
81
91
  });
82
92
  // ── status ──────────────────────────────────────────────────────
83
93
  program
@@ -107,15 +117,6 @@ program
107
117
  .action(async (action, name, opts) => {
108
118
  await run(() => cmdEnv({ action, name, from: opts.from }));
109
119
  });
110
- // ── watch ───────────────────────────────────────────────────────
111
- program
112
- .command('watch')
113
- .description(t('cli.cmd.watch'))
114
- .option('-i, --interval <minutes>', t('cli.cmd.watch.interval'), parseFloat)
115
- .option('-a, --agent <name>', t('cli.cmd.agent'), parseAgent)
116
- .action(async (opts) => {
117
- await run(() => cmdWatch(opts));
118
- });
119
120
  // ── memory ──────────────────────────────────────────────────────
120
121
  program
121
122
  .command('memory <action> [args...]')
@@ -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,6 +1,14 @@
1
1
  /**
2
2
  * pull.ts — wangchuan pull command
3
+ *
4
+ * Pull-only operation: fetch remote changes and restore to local workspace.
5
+ * Cloud is the single source of truth — files absent from repo are deleted locally.
6
+ *
7
+ * 1. Fetch remote to check for new commits
8
+ * 2. If remote is ahead, git pull
9
+ * 3. restoreFromRepo (cloud → local)
10
+ * 4. Report results
3
11
  */
4
12
  import type { PullOptions, RestoreResult } from '../types.js';
5
- export declare function cmdPull({ agent, only, exclude }?: PullOptions): Promise<RestoreResult>;
13
+ export declare function cmdPull({ agent, dryRun, only, exclude }?: PullOptions): Promise<RestoreResult | undefined>;
6
14
  //# sourceMappingURL=pull.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"pull.d.ts","sourceRoot":"","sources":["../../../src/commands/pull.ts"],"names":[],"mappings":"AAAA;;GAEG;AAcH,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAiB,MAAM,aAAa,CAAC;AAI7E,wBAAsB,OAAO,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,GAAE,WAAgB,GAAG,OAAO,CAAC,aAAa,CAAC,CAqBhG"}
1
+ {"version":3,"file":"pull.d.ts","sourceRoot":"","sources":["../../../src/commands/pull.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAkBH,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAiB,MAAM,aAAa,CAAC;AAkC7E,wBAAsB,OAAO,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAE,WAAgB,GAAG,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC,CA0BpH"}
@@ -1,6 +1,17 @@
1
1
  /**
2
2
  * pull.ts — wangchuan pull command
3
+ *
4
+ * Pull-only operation: fetch remote changes and restore to local workspace.
5
+ * Cloud is the single source of truth — files absent from repo are deleted locally.
6
+ *
7
+ * 1. Fetch remote to check for new commits
8
+ * 2. If remote is ahead, git pull
9
+ * 3. restoreFromRepo (cloud → local)
10
+ * 4. Report results
3
11
  */
12
+ import os from 'os';
13
+ import fs from 'fs';
14
+ import path from 'path';
4
15
  import { config } from '../core/config.js';
5
16
  import { resolveGitBranch } from '../core/config.js';
6
17
  import { ensureMigrated } from '../core/migrate.js';
@@ -10,92 +21,157 @@ import { syncLock } from '../core/sync-lock.js';
10
21
  import { appendSyncEvent } from '../core/sync-history.js';
11
22
  import { fireWebhooks, buildWebhookPayload } from '../core/webhook.js';
12
23
  import { runHooks } from '../core/hooks.js';
24
+ import { copyDirSync } from '../utils/fs.js';
13
25
  import { validator } from '../utils/validator.js';
14
26
  import { logger } from '../utils/logger.js';
15
27
  import { t } from '../i18n.js';
16
28
  import chalk from 'chalk';
17
29
  import ora from 'ora';
18
- export async function cmdPull({ agent, only, exclude } = {}) {
30
+ const WANGCHUAN_DIR = path.join(os.homedir(), '.wangchuan');
31
+ const SNAPSHOTS_DIR = path.join(WANGCHUAN_DIR, 'snapshots');
32
+ const MAX_AUTO_SNAPSHOTS = 5;
33
+ /** Create an auto-snapshot before pull (silent, no user output) */
34
+ function autoSnapshot(repoPath) {
35
+ try {
36
+ if (!fs.existsSync(repoPath))
37
+ return;
38
+ const snapshotName = `auto-${new Date().toISOString().replace(/[:.]/g, '-')}`;
39
+ const snapshotDir = path.join(SNAPSHOTS_DIR, snapshotName);
40
+ fs.mkdirSync(snapshotDir, { recursive: true });
41
+ copyDirSync(repoPath, snapshotDir);
42
+ pruneAutoSnapshots(MAX_AUTO_SNAPSHOTS);
43
+ }
44
+ catch {
45
+ // Silent failure — snapshot is a safety net, not a blocker
46
+ }
47
+ }
48
+ function pruneAutoSnapshots(max) {
49
+ if (!fs.existsSync(SNAPSHOTS_DIR))
50
+ return;
51
+ const autoDirs = fs.readdirSync(SNAPSHOTS_DIR)
52
+ .filter(d => d.startsWith('auto-') && fs.statSync(path.join(SNAPSHOTS_DIR, d)).isDirectory())
53
+ .sort();
54
+ if (autoDirs.length <= max)
55
+ return;
56
+ const toRemove = autoDirs.slice(0, autoDirs.length - max);
57
+ for (const dir of toRemove) {
58
+ fs.rmSync(path.join(SNAPSHOTS_DIR, dir), { recursive: true, force: true });
59
+ }
60
+ }
61
+ export async function cmdPull({ agent, dryRun, only, exclude } = {}) {
19
62
  logger.banner(t('pull.banner'));
20
63
  let cfg = config.load();
21
64
  validator.requireInit(cfg);
22
65
  cfg = ensureMigrated(cfg);
23
66
  const repoPath = syncEngine.expandHome(cfg.localRepoPath);
67
+ const hostname = cfg.hostname || os.hostname();
24
68
  if (agent)
25
- logger.info(t('pull.filterAgent', { agent: chalk.cyan(agent) }));
69
+ logger.info(t('sync.filterAgent', { agent: chalk.cyan(agent) }));
26
70
  if (only?.length)
27
71
  logger.info(t('filter.only', { patterns: only.join(', ') }));
28
72
  if (exclude?.length)
29
73
  logger.info(t('filter.exclude', { patterns: exclude.join(', ') }));
74
+ if (dryRun)
75
+ logger.info(chalk.yellow(t('dryRun.enabled')));
30
76
  const filter = (only?.length || exclude?.length) ? { only, exclude } : undefined;
31
- // ── Acquire sync lock ─────────────────────────────────────────
77
+ // Auto-snapshot before pull (silent safety net)
78
+ autoSnapshot(repoPath);
79
+ // Acquire sync lock
32
80
  await syncLock.acquire(repoPath);
33
81
  try {
34
- return await runPull(cfg, repoPath, agent, filter);
82
+ return await runPull(cfg, repoPath, hostname, agent, dryRun, filter);
35
83
  }
36
84
  finally {
37
85
  syncLock.release();
38
86
  }
39
87
  }
40
- async function runPull(cfg, repoPath, agent, filter) {
41
- let spinner = ora(t('pull.pulling', { repo: cfg.repo })).start();
88
+ async function runPull(cfg, repoPath, hostname, agent, dryRun, filter) {
89
+ // 1. Fetch remote
90
+ let spinner = ora(t('sync.fetching')).start();
91
+ let remoteAhead = 0;
42
92
  try {
43
- await gitEngine.pull(repoPath, resolveGitBranch(cfg));
44
- spinner.succeed(t('pull.pulled'));
93
+ remoteAhead = await gitEngine.fetchAndCheckRemoteAhead(repoPath, resolveGitBranch(cfg));
94
+ if (remoteAhead > 0) {
95
+ spinner.succeed(t('sync.remoteAhead', { count: remoteAhead }));
96
+ }
97
+ else {
98
+ spinner.succeed(t('sync.remoteUpToDate'));
99
+ }
45
100
  }
46
101
  catch (err) {
47
- spinner.fail(t('pull.gitFailed'));
48
- throw new Error(t('pull.gitFailedDetail', { error: err.message }));
102
+ spinner.fail(t('sync.fetchFailed'));
103
+ throw new Error(t('sync.fetchFailedDetail', { error: err.message }));
49
104
  }
50
- // ── 2. Restore files ──────────────────────────────────────
51
- spinner.stop();
52
- let result;
105
+ // 2. Git pull if remote ahead
106
+ if (remoteAhead > 0) {
107
+ spinner = ora(t('sync.pulling')).start();
108
+ try {
109
+ await gitEngine.pull(repoPath, resolveGitBranch(cfg));
110
+ spinner.succeed(t('sync.pulled'));
111
+ }
112
+ catch (err) {
113
+ spinner.fail(t('sync.pullFailed'));
114
+ throw new Error(t('sync.pullFailedDetail', { error: err.message }));
115
+ }
116
+ }
117
+ // 3. Restore repo → local workspace
118
+ let pullResult;
53
119
  try {
54
- result = await syncEngine.restoreFromRepo(cfg, agent, filter);
120
+ pullResult = await syncEngine.restoreFromRepo(cfg, agent, filter);
55
121
  }
56
122
  catch (err) {
57
- throw new Error(t('pull.restoreFailed', { error: err.message }));
123
+ throw new Error(t('sync.restoreFailed', { error: err.message }));
58
124
  }
59
- // ── 3. Output ─────────────────────────────────────────────
60
- console.log();
61
- if (result.synced.length === 0 && result.skipped.length > 0) {
62
- logger.info(t('pull.noConfigs'));
63
- return result;
64
- }
65
- for (const f of result.synced) {
66
- const label = result.decrypted.includes(f) ? chalk.gray(t('pull.decrypted')) : '';
67
- logger.ok(` ${chalk.green(f)} ${label}`);
68
- }
69
- if (result.skipped.length > 0) {
70
- logger.info('\n' + t('pull.skipped', { count: result.skipped.length }));
71
- }
72
- if (result.localOnly.length > 0) {
73
- console.log();
74
- logger.warn(t('pull.localOnly', { count: result.localOnly.length }));
75
- for (const f of result.localOnly) {
76
- logger.warn(` ${chalk.yellow(f)}`);
125
+ // 4. Report results
126
+ if (dryRun) {
127
+ if (pullResult.synced.length > 0) {
128
+ console.log();
129
+ for (const f of pullResult.synced) {
130
+ logger.ok(` ${chalk.green(f)}`);
131
+ }
132
+ logger.ok('\n' + t('dryRun.wouldSync', {
133
+ count: pullResult.synced.length,
134
+ encrypted: pullResult.decrypted.length,
135
+ }));
136
+ }
137
+ else {
138
+ logger.ok(t('sync.alreadyInSync'));
77
139
  }
78
- logger.info(t('pull.suggestPush'));
140
+ return pullResult;
141
+ }
142
+ if (pullResult.synced.length > 0) {
143
+ logger.ok(t('sync.pullSummary', {
144
+ count: pullResult.synced.length,
145
+ encrypted: pullResult.decrypted.length,
146
+ }));
147
+ }
148
+ if (pullResult.skippedAgents.length > 0) {
149
+ logger.info(t('sync.skippedAgents', {
150
+ agents: pullResult.skippedAgents.join(', '),
151
+ }));
152
+ }
153
+ // Summary
154
+ console.log();
155
+ if (pullResult.synced.length > 0) {
156
+ logger.ok(t('sync.summaryPull', { count: pullResult.synced.length }));
157
+ }
158
+ else {
159
+ logger.ok(t('sync.alreadyInSync'));
79
160
  }
80
- logger.ok('\n' + t('pull.summary', {
81
- synced: result.synced.length,
82
- encrypted: result.decrypted.length,
83
- conflicts: result.conflicts.length,
84
- }));
85
161
  // Record sync history
86
- appendSyncEvent({
87
- timestamp: new Date().toISOString(),
88
- action: 'pull',
89
- environment: cfg.environment ?? 'default',
90
- agent: agent,
91
- fileCount: result.synced.length,
92
- encrypted: result.decrypted.length,
93
- hostname: cfg.hostname || (await import('os')).default.hostname(),
94
- });
95
- // Fire webhooks (fire-and-forget)
96
- await fireWebhooks(cfg, 'pull', buildWebhookPayload(cfg, 'pull', result.synced.length));
97
- // Run post-pull hooks
98
- runHooks('postPull', cfg);
99
- return result;
162
+ if (pullResult.synced.length > 0) {
163
+ appendSyncEvent({
164
+ timestamp: new Date().toISOString(),
165
+ action: 'pull',
166
+ environment: cfg.environment ?? 'default',
167
+ agent,
168
+ fileCount: pullResult.synced.length,
169
+ encrypted: pullResult.decrypted.length,
170
+ hostname,
171
+ });
172
+ await fireWebhooks(cfg, 'pull', buildWebhookPayload(cfg, 'pull', pullResult.synced.length, undefined));
173
+ runHooks('postPull', cfg);
174
+ }
175
+ return pullResult;
100
176
  }
101
177
  //# sourceMappingURL=pull.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"pull.js","sourceRoot":"","sources":["../../../src/commands/pull.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pull.js","sourceRoot":"","sources":["../../../src/commands/pull.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,16 @@
1
1
  /**
2
2
  * push.ts — wangchuan push command
3
+ *
4
+ * Push-only operation: stage local changes to repo and push to remote.
5
+ *
6
+ * 1. Process pending distributions and deletions (if interactive)
7
+ * 2. stageToRepo (local → repo)
8
+ * 3. Detect stale files (local deleted = repo stale = prune)
9
+ * 4. commitAndPush
10
+ * 5. Report results
3
11
  */
4
- import type { PushOptions, CommitResult, StageResult } from '../types.js';
5
- export interface PushCommandResult extends CommitResult {
6
- readonly stageResult?: StageResult;
7
- }
8
- export declare function cmdPush({ message, agent, dryRun, only, exclude }?: PushOptions): Promise<PushCommandResult>;
12
+ import type { PushOptions, StageResult, CommitResult } from '../types.js';
13
+ export declare function cmdPush({ agent, dryRun, only, exclude, yes, skipStaleDetection }?: PushOptions): Promise<CommitResult & {
14
+ readonly stageResult?: StageResult | undefined;
15
+ }>;
9
16
  //# sourceMappingURL=push.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"push.d.ts","sourceRoot":"","sources":["../../../src/commands/push.ts"],"names":[],"mappings":"AAAA;;GAEG;AAeH,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAiB,MAAM,aAAa,CAAC;AAIzF,MAAM,WAAW,iBAAkB,SAAQ,YAAY;IACrD,QAAQ,CAAC,WAAW,CAAC,EAAE,WAAW,CAAC;CACpC;AAED,wBAAsB,OAAO,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAE,WAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAuBrH"}
1
+ {"version":3,"file":"push.d.ts","sourceRoot":"","sources":["../../../src/commands/push.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAkBH,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,YAAY,EAAiB,MAAM,aAAa,CAAC;AAkCzF,wBAAsB,OAAO,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,kBAAkB,EAAE,GAAE,WAAgB,GAAG,OAAO,CAAC,YAAY,GAAG;IAAE,QAAQ,CAAC,WAAW,CAAC,EAAE,WAAW,GAAG,SAAS,CAAA;CAAE,CAAC,CAoErL"}