wangchuan 2.5.1 → 2.6.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 (55) hide show
  1. package/.wangchuan/config.example.json +85 -8
  2. package/dist/bin/wangchuan.d.ts +1 -1
  3. package/dist/bin/wangchuan.js +32 -4
  4. package/dist/bin/wangchuan.js.map +1 -1
  5. package/dist/src/commands/env.d.ts +11 -0
  6. package/dist/src/commands/env.d.ts.map +1 -0
  7. package/dist/src/commands/env.js +133 -0
  8. package/dist/src/commands/env.js.map +1 -0
  9. package/dist/src/commands/list.d.ts.map +1 -1
  10. package/dist/src/commands/list.js +5 -1
  11. package/dist/src/commands/list.js.map +1 -1
  12. package/dist/src/commands/pull.d.ts.map +1 -1
  13. package/dist/src/commands/pull.js +2 -1
  14. package/dist/src/commands/pull.js.map +1 -1
  15. package/dist/src/commands/push.d.ts.map +1 -1
  16. package/dist/src/commands/push.js +2 -1
  17. package/dist/src/commands/push.js.map +1 -1
  18. package/dist/src/commands/status.d.ts.map +1 -1
  19. package/dist/src/commands/status.js +3 -1
  20. package/dist/src/commands/status.js.map +1 -1
  21. package/dist/src/commands/sync.d.ts +18 -0
  22. package/dist/src/commands/sync.d.ts.map +1 -0
  23. package/dist/src/commands/sync.js +127 -0
  24. package/dist/src/commands/sync.js.map +1 -0
  25. package/dist/src/commands/watch.d.ts +10 -0
  26. package/dist/src/commands/watch.d.ts.map +1 -0
  27. package/dist/src/commands/watch.js +122 -0
  28. package/dist/src/commands/watch.js.map +1 -0
  29. package/dist/src/core/config.d.ts +6 -0
  30. package/dist/src/core/config.d.ts.map +1 -1
  31. package/dist/src/core/config.js +96 -6
  32. package/dist/src/core/config.js.map +1 -1
  33. package/dist/src/core/git.d.ts +11 -0
  34. package/dist/src/core/git.d.ts.map +1 -1
  35. package/dist/src/core/git.js +88 -0
  36. package/dist/src/core/git.js.map +1 -1
  37. package/dist/src/core/migrate.d.ts.map +1 -1
  38. package/dist/src/core/migrate.js +1 -0
  39. package/dist/src/core/migrate.js.map +1 -1
  40. package/dist/src/core/sync.d.ts.map +1 -1
  41. package/dist/src/core/sync.js +1 -1
  42. package/dist/src/core/sync.js.map +1 -1
  43. package/dist/src/i18n.d.ts.map +1 -1
  44. package/dist/src/i18n.js +70 -2
  45. package/dist/src/i18n.js.map +1 -1
  46. package/dist/src/types.d.ts +18 -1
  47. package/dist/src/types.d.ts.map +1 -1
  48. package/dist/src/types.js +3 -1
  49. package/dist/src/types.js.map +1 -1
  50. package/dist/test/sync.test.js +72 -4
  51. package/dist/test/sync.test.js.map +1 -1
  52. package/package.json +1 -1
  53. package/skill/SKILL.md +21 -3
  54. package/skill/claude/SKILL.md +113 -0
  55. package/skill/wangchuan-skill.sh +2 -2
@@ -0,0 +1,127 @@
1
+ /**
2
+ * sync.ts — wangchuan sync command (bidirectional smart sync)
3
+ *
4
+ * 1. Fetch remote to check for new commits
5
+ * 2. If remote is ahead, pull first
6
+ * 3. Then push local changes
7
+ */
8
+ import os from 'os';
9
+ import { config } from '../core/config.js';
10
+ import { resolveGitBranch } from '../core/config.js';
11
+ import { ensureMigrated } from '../core/migrate.js';
12
+ import { gitEngine } from '../core/git.js';
13
+ import { syncEngine } from '../core/sync.js';
14
+ import { validator } from '../utils/validator.js';
15
+ import { logger } from '../utils/logger.js';
16
+ import { t } from '../i18n.js';
17
+ import chalk from 'chalk';
18
+ import ora from 'ora';
19
+ export async function cmdSync({ agent } = {}) {
20
+ logger.banner(t('sync.banner'));
21
+ let cfg = config.load();
22
+ validator.requireInit(cfg);
23
+ cfg = ensureMigrated(cfg);
24
+ const repoPath = syncEngine.expandHome(cfg.localRepoPath);
25
+ const hostname = cfg.hostname || os.hostname();
26
+ if (agent)
27
+ logger.info(t('sync.filterAgent', { agent: chalk.cyan(agent) }));
28
+ // ── 1. Fetch and check remote ───────────────────────────────
29
+ let spinner = ora(t('sync.fetching')).start();
30
+ let remoteAhead = 0;
31
+ try {
32
+ remoteAhead = await gitEngine.fetchAndCheckRemoteAhead(repoPath, resolveGitBranch(cfg));
33
+ if (remoteAhead > 0) {
34
+ spinner.succeed(t('sync.remoteAhead', { count: remoteAhead }));
35
+ }
36
+ else {
37
+ spinner.succeed(t('sync.remoteUpToDate'));
38
+ }
39
+ }
40
+ catch (err) {
41
+ spinner.fail(t('sync.fetchFailed'));
42
+ throw new Error(t('sync.fetchFailedDetail', { error: err.message }));
43
+ }
44
+ // ── 2. Pull if remote has new commits ───────────────────────
45
+ let pulled = false;
46
+ let pullResult;
47
+ if (remoteAhead > 0) {
48
+ spinner = ora(t('sync.pulling')).start();
49
+ try {
50
+ await gitEngine.pull(repoPath, resolveGitBranch(cfg));
51
+ spinner.succeed(t('sync.pulled'));
52
+ }
53
+ catch (err) {
54
+ spinner.fail(t('sync.pullFailed'));
55
+ throw new Error(t('sync.pullFailedDetail', { error: err.message }));
56
+ }
57
+ try {
58
+ pullResult = await syncEngine.restoreFromRepo(cfg, agent);
59
+ pulled = true;
60
+ if (pullResult.synced.length > 0) {
61
+ logger.ok(t('sync.pullSummary', {
62
+ count: pullResult.synced.length,
63
+ encrypted: pullResult.decrypted.length,
64
+ }));
65
+ }
66
+ }
67
+ catch (err) {
68
+ throw new Error(t('sync.restoreFailed', { error: err.message }));
69
+ }
70
+ }
71
+ // ── 3. Push local changes ──────────────────────────────────
72
+ spinner = ora(t('sync.staging')).start();
73
+ let stageResult;
74
+ try {
75
+ stageResult = await syncEngine.stageToRepo(cfg, agent);
76
+ spinner.succeed(t('sync.staged', { count: stageResult.synced.length }));
77
+ }
78
+ catch (err) {
79
+ spinner.fail(t('sync.stagingFailed'));
80
+ throw new Error(t('sync.stagingFailedDetail', { error: err.message }));
81
+ }
82
+ let pushResult = { committed: false, pushed: false };
83
+ if (stageResult.synced.length > 0 || stageResult.deleted.length > 0) {
84
+ const agentTag = agent ? `[${agent}]` : '';
85
+ const msg = t('sync.commitMsg', { tag: agentTag, host: hostname });
86
+ spinner = ora(t('sync.pushing')).start();
87
+ try {
88
+ const gitResult = await gitEngine.commitAndPush(repoPath, msg, resolveGitBranch(cfg));
89
+ if (gitResult.committed) {
90
+ spinner.succeed(t('sync.pushed', { repo: cfg.repo }));
91
+ }
92
+ else {
93
+ spinner.info(t('sync.nothingToCommit'));
94
+ }
95
+ pushResult = { ...gitResult, stageResult };
96
+ }
97
+ catch (err) {
98
+ spinner.fail(t('sync.pushFailed'));
99
+ try {
100
+ await gitEngine.rollback(repoPath);
101
+ }
102
+ catch (re) {
103
+ logger.error(t('sync.rollbackFailed', { error: re.message }));
104
+ }
105
+ throw new Error(t('sync.pushFailedDetail', { error: err.message }));
106
+ }
107
+ }
108
+ else {
109
+ logger.info(t('sync.noChanges'));
110
+ }
111
+ // ── 4. Summary ─────────────────────────────────────────────
112
+ console.log();
113
+ if (pulled && pullResult) {
114
+ logger.ok(t('sync.summaryPull', { count: pullResult.synced.length }));
115
+ }
116
+ if (pushResult.committed && pushResult.stageResult) {
117
+ logger.ok(t('sync.summaryPush', {
118
+ count: pushResult.stageResult.synced.length,
119
+ sha: pushResult.sha ?? '-',
120
+ }));
121
+ }
122
+ if (!pulled && !pushResult.committed) {
123
+ logger.ok(t('sync.alreadyInSync'));
124
+ }
125
+ return { pulled, pullResult, pushed: pushResult.committed, pushResult };
126
+ }
127
+ //# sourceMappingURL=sync.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync.js","sourceRoot":"","sources":["../../../src/commands/sync.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * watch.ts — wangchuan watch command (long-running daemon)
3
+ *
4
+ * Monitors enabled agents' workspace directories for file changes.
5
+ * Debounces changes then auto-triggers sync. Also periodically polls
6
+ * remote for new commits.
7
+ */
8
+ import type { WatchOptions } from '../types.js';
9
+ export declare function cmdWatch({ agent, interval }?: WatchOptions): Promise<void>;
10
+ //# sourceMappingURL=watch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"watch.d.ts","sourceRoot":"","sources":["../../../src/commands/watch.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAWH,OAAO,KAAK,EAAE,YAAY,EAA8B,MAAM,aAAa,CAAC;AAgC5E,wBAAsB,QAAQ,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAE,YAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAuFpF"}
@@ -0,0 +1,122 @@
1
+ /**
2
+ * watch.ts — wangchuan watch command (long-running daemon)
3
+ *
4
+ * Monitors enabled agents' workspace directories for file changes.
5
+ * Debounces changes then auto-triggers sync. Also periodically polls
6
+ * remote for new commits.
7
+ */
8
+ import fs from 'fs';
9
+ import path from 'path';
10
+ import { config } from '../core/config.js';
11
+ import { ensureMigrated } from '../core/migrate.js';
12
+ import { syncEngine } from '../core/sync.js';
13
+ import { validator } from '../utils/validator.js';
14
+ import { logger } from '../utils/logger.js';
15
+ import { t } from '../i18n.js';
16
+ import { cmdSync } from './sync.js';
17
+ import chalk from 'chalk';
18
+ const DEFAULT_INTERVAL_MINUTES = 5;
19
+ const DEBOUNCE_MS = 5_000;
20
+ /**
21
+ * Collect all absolute paths that should be watched for a given config.
22
+ * Returns a map of absPath → true for quick lookup, plus the list of
23
+ * directories to attach fs.watch() on.
24
+ */
25
+ function collectWatchTargets(cfg, agent) {
26
+ const entries = syncEngine.buildFileEntries(cfg, undefined, agent);
27
+ const watchFiles = new Set();
28
+ const watchDirs = new Set();
29
+ for (const entry of entries) {
30
+ watchFiles.add(entry.srcAbs);
31
+ watchDirs.add(path.dirname(entry.srcAbs));
32
+ }
33
+ return { watchDirs: [...watchDirs], watchFiles };
34
+ }
35
+ function timestamp() {
36
+ return new Date().toLocaleString('zh-CN', { timeZone: 'Asia/Shanghai', hour12: false });
37
+ }
38
+ export async function cmdWatch({ agent, interval } = {}) {
39
+ logger.banner(t('watch.banner'));
40
+ let cfg = config.load();
41
+ validator.requireInit(cfg);
42
+ cfg = ensureMigrated(cfg);
43
+ const intervalMinutes = interval ?? DEFAULT_INTERVAL_MINUTES;
44
+ if (agent)
45
+ logger.info(t('watch.filterAgent', { agent: chalk.cyan(agent) }));
46
+ logger.info(t('watch.interval', { minutes: intervalMinutes }));
47
+ const { watchDirs, watchFiles } = collectWatchTargets(cfg, agent);
48
+ if (watchDirs.length === 0) {
49
+ logger.warn(t('watch.noTargets'));
50
+ return;
51
+ }
52
+ logger.info(t('watch.watching', { dirs: watchDirs.length, files: watchFiles.size }));
53
+ // ── Debounce state ──────────────────────────────────────────
54
+ let debounceTimer = null;
55
+ let syncing = false;
56
+ async function triggerSync(reason) {
57
+ if (syncing)
58
+ return;
59
+ syncing = true;
60
+ try {
61
+ logger.step(t('watch.triggerSync', { reason, time: timestamp() }));
62
+ await cmdSync(agent ? { agent } : {});
63
+ }
64
+ catch (err) {
65
+ logger.error(t('watch.syncError', { error: err.message }));
66
+ }
67
+ finally {
68
+ syncing = false;
69
+ }
70
+ }
71
+ function onFileChange(filePath) {
72
+ if (!watchFiles.has(filePath))
73
+ return;
74
+ logger.debug(t('watch.fileChanged', { file: filePath }));
75
+ if (debounceTimer)
76
+ clearTimeout(debounceTimer);
77
+ debounceTimer = setTimeout(() => {
78
+ void triggerSync(t('watch.reasonFileChange'));
79
+ }, DEBOUNCE_MS);
80
+ }
81
+ // ── Attach fs.watch() to directories ─────────────────────────
82
+ const watchers = [];
83
+ for (const dir of watchDirs) {
84
+ if (!fs.existsSync(dir)) {
85
+ logger.debug(t('watch.dirNotFound', { dir }));
86
+ continue;
87
+ }
88
+ try {
89
+ const watcher = fs.watch(dir, { persistent: true }, (_event, filename) => {
90
+ if (!filename)
91
+ return;
92
+ const fullPath = path.join(dir, filename);
93
+ onFileChange(fullPath);
94
+ });
95
+ watchers.push(watcher);
96
+ }
97
+ catch (err) {
98
+ logger.warn(t('watch.watchError', { dir, error: err.message }));
99
+ }
100
+ }
101
+ // ── Periodic remote polling ──────────────────────────────────
102
+ const pollInterval = setInterval(() => {
103
+ void triggerSync(t('watch.reasonPoll'));
104
+ }, intervalMinutes * 60 * 1_000);
105
+ // ── Graceful shutdown ────────────────────────────────────────
106
+ function shutdown() {
107
+ logger.info(t('watch.shutdown'));
108
+ if (debounceTimer)
109
+ clearTimeout(debounceTimer);
110
+ clearInterval(pollInterval);
111
+ for (const w of watchers)
112
+ w.close();
113
+ process.exit(0);
114
+ }
115
+ process.on('SIGINT', shutdown);
116
+ process.on('SIGTERM', shutdown);
117
+ logger.ok(t('watch.started'));
118
+ logger.info(t('watch.stopHint'));
119
+ // Run an initial sync immediately
120
+ await triggerSync(t('watch.reasonInitial'));
121
+ }
122
+ //# sourceMappingURL=watch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"watch.js","sourceRoot":"","sources":["../../../src/commands/watch.ts"],"names":[],"mappings":"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"}
@@ -31,4 +31,10 @@ export declare const config: {
31
31
  readonly example: string;
32
32
  };
33
33
  };
34
+ /**
35
+ * Resolve the git branch for the given config's active environment.
36
+ * - environment undefined or 'default' → cfg.branch (typically 'main')
37
+ * - any other value → 'env/{name}'
38
+ */
39
+ export declare function resolveGitBranch(cfg: WangchuanConfig): string;
34
40
  //# sourceMappingURL=config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/core/config.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAQH,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAOhF,eAAO,MAAM,cAAc,IAAI,CAAC;AAoEhC,eAAO,MAAM,MAAM;IACjB,uBAAuB;yBACf,eAAe,GAAG,IAAI;IAU9B,cAAc;yBACJ,eAAe,KAAG,IAAI;IAMhC,kBAAkB;yCACc,MAAM,KAAG,OAAO,CAAC,MAAM,CAAC;IAaxD,2BAA2B;gCACJ,MAAM,KAAG,OAAO,CAAC,eAAe,CAAC;IAiBxD,2BAA2B;2BACf,eAAe,YAAY,OAAO,CAAC,eAAe,CAAC,KAAG,eAAe;IAIjF,kBAAkB;;;;;;IAOlB,aAAa;;;;;;;CAOL,CAAC"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/core/config.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAQH,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAOhF,eAAO,MAAM,cAAc,IAAI,CAAC;AAmJhC,eAAO,MAAM,MAAM;IACjB,uBAAuB;yBACf,eAAe,GAAG,IAAI;IAU9B,cAAc;yBACJ,eAAe,KAAG,IAAI;IAMhC,kBAAkB;yCACc,MAAM,KAAG,OAAO,CAAC,MAAM,CAAC;IAaxD,2BAA2B;gCACJ,MAAM,KAAG,OAAO,CAAC,eAAe,CAAC;IAiBxD,2BAA2B;2BACf,eAAe,YAAY,OAAO,CAAC,eAAe,CAAC,KAAG,eAAe;IAIjF,kBAAkB;;;;;;IAOlB,aAAa;;;;;;;CAOL,CAAC;AAEX;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM,CAK7D"}
@@ -24,9 +24,13 @@ const DEFAULT_PROFILES = {
24
24
  { src: 'MEMORY.md', encrypt: true },
25
25
  { src: 'AGENTS.md', encrypt: false },
26
26
  { src: 'SOUL.md', encrypt: false },
27
+ { src: 'IDENTITY.md', encrypt: false },
28
+ { src: 'USER.md', encrypt: true },
27
29
  ],
28
- // skills/ 移至 shared tier
29
- // USER.md(空模板)、TOOLS.md(环境特有)、config/mcporter.json(移至 shared MCP)已移除
30
+ syncDirs: [
31
+ { src: 'memory/', encrypt: true }, // dated memory logs (memory/SHARED.md etc.)
32
+ ],
33
+ // skills/ → shared tier; TOOLS.md excluded (environment-specific)
30
34
  },
31
35
  claude: {
32
36
  enabled: true,
@@ -35,7 +39,6 @@ const DEFAULT_PROFILES = {
35
39
  { src: 'CLAUDE.md', encrypt: false },
36
40
  { src: 'settings.json', encrypt: true },
37
41
  ],
38
- // .claude.json 整文件不再同步,改用 jsonFields 提取 mcpServers
39
42
  jsonFields: [
40
43
  {
41
44
  src: '.claude.json',
@@ -49,17 +52,89 @@ const DEFAULT_PROFILES = {
49
52
  enabled: true,
50
53
  workspacePath: path.join(os.homedir(), '.gemini'),
51
54
  syncFiles: [],
52
- // projects.json 和 trustedFolders.json 是环境特有路径,不再同步
53
- // settings.internal.json 改用 jsonFields 仅提取有用字段
54
55
  jsonFields: [
55
56
  {
56
57
  src: 'settings.internal.json',
57
- fields: ['security', 'model'],
58
+ fields: ['security', 'model', 'general'],
59
+ repoName: 'settings-sync.json',
60
+ encrypt: true,
61
+ },
62
+ ],
63
+ },
64
+ codebuddy: {
65
+ enabled: true,
66
+ workspacePath: path.join(os.homedir(), '.codebuddy'),
67
+ syncFiles: [
68
+ { src: 'MEMORY.md', encrypt: true },
69
+ { src: 'CODEBUDDY.md', encrypt: false },
70
+ ],
71
+ jsonFields: [
72
+ // MCP config at ~/.codebuddy/mcp.json
73
+ {
74
+ src: 'mcp.json',
75
+ fields: ['mcpServers'],
76
+ repoName: 'mcpServers.json',
77
+ encrypt: true,
78
+ },
79
+ // settings.json → only portable fields (exclude hooks with absolute paths)
80
+ {
81
+ src: 'settings.json',
82
+ fields: ['enabledPlugins'],
83
+ repoName: 'settings-sync.json',
84
+ encrypt: true,
85
+ },
86
+ ],
87
+ },
88
+ workbuddy: {
89
+ enabled: true,
90
+ workspacePath: path.join(os.homedir(), '.workbuddy'),
91
+ syncFiles: [
92
+ { src: 'MEMORY.md', encrypt: true },
93
+ { src: 'IDENTITY.md', encrypt: false },
94
+ { src: 'SOUL.md', encrypt: false },
95
+ { src: 'USER.md', encrypt: true },
96
+ ],
97
+ jsonFields: [
98
+ // MCP config at ~/.workbuddy/mcp.json
99
+ {
100
+ src: 'mcp.json',
101
+ fields: ['mcpServers'],
102
+ repoName: 'mcpServers.json',
103
+ encrypt: true,
104
+ },
105
+ // settings.json → only portable fields
106
+ {
107
+ src: 'settings.json',
108
+ fields: ['enabledPlugins'],
58
109
  repoName: 'settings-sync.json',
59
110
  encrypt: true,
60
111
  },
61
112
  ],
62
113
  },
114
+ cursor: {
115
+ enabled: true,
116
+ workspacePath: path.join(os.homedir(), '.cursor'),
117
+ syncFiles: [],
118
+ syncDirs: [
119
+ { src: 'rules/', encrypt: false }, // global rules directory
120
+ ],
121
+ jsonFields: [
122
+ // MCP config at ~/.cursor/mcp.json
123
+ {
124
+ src: 'mcp.json',
125
+ fields: ['mcpServers'],
126
+ repoName: 'mcpServers.json',
127
+ encrypt: true,
128
+ },
129
+ // cli-config.json → only portable fields (exclude authInfo, privacyCache)
130
+ {
131
+ src: 'cli-config.json',
132
+ fields: ['permissions', 'model', 'enabledPlugins'],
133
+ repoName: 'cli-config-sync.json',
134
+ encrypt: true,
135
+ },
136
+ ],
137
+ },
63
138
  };
64
139
  /** 共享层默认配置 */
65
140
  const DEFAULT_SHARED = {
@@ -67,12 +142,16 @@ const DEFAULT_SHARED = {
67
142
  sources: [
68
143
  { agent: 'claude', dir: 'skills/' },
69
144
  { agent: 'openclaw', dir: 'skills/' },
145
+ { agent: 'codebuddy', dir: 'skills/' },
70
146
  ],
71
147
  },
72
148
  mcp: {
73
149
  sources: [
74
150
  { agent: 'claude', src: '.claude.json', field: 'mcpServers' },
75
151
  { agent: 'openclaw', src: 'config/mcporter.json', field: 'mcpServers' },
152
+ { agent: 'codebuddy', src: 'mcp.json', field: 'mcpServers' },
153
+ { agent: 'workbuddy', src: 'mcp.json', field: 'mcpServers' },
154
+ { agent: 'cursor', src: 'mcp.json', field: 'mcpServers' },
76
155
  ],
77
156
  },
78
157
  syncFiles: [
@@ -147,4 +226,15 @@ export const config = {
147
226
  example: EXAMPLE_PATH,
148
227
  },
149
228
  };
229
+ /**
230
+ * Resolve the git branch for the given config's active environment.
231
+ * - environment undefined or 'default' → cfg.branch (typically 'main')
232
+ * - any other value → 'env/{name}'
233
+ */
234
+ export function resolveGitBranch(cfg) {
235
+ if (!cfg.environment || cfg.environment === 'default') {
236
+ return cfg.branch;
237
+ }
238
+ return `env/${cfg.environment}`;
239
+ }
150
240
  //# sourceMappingURL=config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/core/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/core/config.ts"],"names":[],"mappings":"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"}
@@ -13,6 +13,17 @@ export declare const gitEngine: {
13
13
  readonly log: (localPath: string, n?: number) => Promise<readonly DefaultLogFields[]>;
14
14
  readonly getRemoteUrl: (localPath: string) => Promise<string | null>;
15
15
  readonly rollback: (localPath: string) => Promise<void>;
16
+ /**
17
+ * Fetch from remote and check if remote branch is ahead of local.
18
+ * Returns the number of commits the remote is ahead.
19
+ */
20
+ readonly fetchAndCheckRemoteAhead: (localPath: string, branch?: string) => Promise<number>;
16
21
  readonly isGitAvailable: () => Promise<boolean>;
22
+ readonly currentBranch: (localPath: string) => Promise<string>;
23
+ readonly listBranches: (localPath: string) => Promise<readonly string[]>;
24
+ readonly branchExists: (localPath: string, branch: string) => Promise<boolean>;
25
+ readonly createBranch: (localPath: string, branch: string, baseBranch?: string) => Promise<void>;
26
+ readonly switchBranch: (localPath: string, branch: string) => Promise<void>;
27
+ readonly deleteBranch: (localPath: string, branch: string) => Promise<void>;
17
28
  };
18
29
  //# sourceMappingURL=git.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../../../src/core/git.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAa,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAI9D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAShD,eAAO,MAAM,SAAS;uCACU,MAAM,aAAa,MAAM,sBAAoB,OAAO,CAAC,IAAI,CAAC;+BAalE,MAAM;wCAOG,MAAM,WAAW,MAAM,sBAAoB,OAAO,CAAC,YAAY,CAAC;iCAqBvE,MAAM;8BAKT,MAAM,iBAAU,OAAO,CAAC,SAAS,gBAAgB,EAAE,CAAC;uCAK3C,MAAM,KAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;mCAKnC,MAAM,KAAG,OAAO,CAAC,IAAI,CAAC;mCAMxB,OAAO,CAAC,OAAO,CAAC;CAQhC,CAAC"}
1
+ {"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../../../src/core/git.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAa,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAI9D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAShD,eAAO,MAAM,SAAS;uCACU,MAAM,aAAa,MAAM,sBAAoB,OAAO,CAAC,IAAI,CAAC;+BAalE,MAAM;wCAOG,MAAM,WAAW,MAAM,sBAAoB,OAAO,CAAC,YAAY,CAAC;iCAqBvE,MAAM;8BAKT,MAAM,iBAAU,OAAO,CAAC,SAAS,gBAAgB,EAAE,CAAC;uCAK3C,MAAM,KAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;mCAKnC,MAAM,KAAG,OAAO,CAAC,IAAI,CAAC;IAMhD;;;OAGG;mDACuC,MAAM,sBAAoB,OAAO,CAAC,MAAM,CAAC;mCAW3D,OAAO,CAAC,OAAO,CAAC;wCAST,MAAM,KAAG,OAAO,CAAC,MAAM,CAAC;uCAMzB,MAAM,KAAG,OAAO,CAAC,SAAS,MAAM,EAAE,CAAC;uCAgBnC,MAAM,UAAU,MAAM,KAAG,OAAO,CAAC,OAAO,CAAC;uCAazC,MAAM,UAAU,MAAM,eAAe,MAAM,KAAG,OAAO,CAAC,IAAI,CAAC;uCAS3D,MAAM,UAAU,MAAM,KAAG,OAAO,CAAC,IAAI,CAAC;uCActC,MAAM,UAAU,MAAM,KAAG,OAAO,CAAC,IAAI,CAAC;CAc5D,CAAC"}
@@ -66,6 +66,21 @@ export const gitEngine = {
66
66
  await createGit(localPath).reset(['--soft', 'HEAD~1']);
67
67
  logger.warn('回滚完成,本地变更已保留在暂存区');
68
68
  },
69
+ /**
70
+ * Fetch from remote and check if remote branch is ahead of local.
71
+ * Returns the number of commits the remote is ahead.
72
+ */
73
+ async fetchAndCheckRemoteAhead(localPath, branch = 'main') {
74
+ const git = createGit(localPath);
75
+ await git.fetch('origin', branch);
76
+ const local = await git.revparse([branch]);
77
+ const remote = await git.revparse([`origin/${branch}`]);
78
+ if (local.trim() === remote.trim())
79
+ return 0;
80
+ // Count commits remote is ahead
81
+ const log = await git.log({ from: branch, to: `origin/${branch}` });
82
+ return log.total;
83
+ },
69
84
  async isGitAvailable() {
70
85
  try {
71
86
  await simpleGit().version();
@@ -75,5 +90,78 @@ export const gitEngine = {
75
90
  return false;
76
91
  }
77
92
  },
93
+ async currentBranch(localPath) {
94
+ const git = createGit(localPath);
95
+ const result = await git.revparse(['--abbrev-ref', 'HEAD']);
96
+ return result.trim();
97
+ },
98
+ async listBranches(localPath) {
99
+ const git = createGit(localPath);
100
+ // Fetch remote to get up-to-date remote branches
101
+ try {
102
+ await git.fetch('origin');
103
+ }
104
+ catch { /* ignore fetch errors */ }
105
+ const result = await git.branch(['-a']);
106
+ const branches = new Set();
107
+ for (const b of result.all) {
108
+ // Normalize: strip "remotes/origin/" prefix
109
+ const name = b.replace(/^remotes\/origin\//, '').trim();
110
+ if (name === 'main' || name === 'master' || name.startsWith('env/')) {
111
+ branches.add(name);
112
+ }
113
+ }
114
+ return [...branches].sort();
115
+ },
116
+ async branchExists(localPath, branch) {
117
+ const git = createGit(localPath);
118
+ try {
119
+ const result = await git.branch(['-a']);
120
+ return result.all.some(b => {
121
+ const name = b.replace(/^remotes\/origin\//, '').trim();
122
+ return name === branch;
123
+ });
124
+ }
125
+ catch {
126
+ return false;
127
+ }
128
+ },
129
+ async createBranch(localPath, branch, baseBranch) {
130
+ const git = createGit(localPath);
131
+ const base = baseBranch ?? await this.currentBranch(localPath);
132
+ logger.debug(`Creating branch ${branch} from ${base}`);
133
+ await git.checkoutBranch(branch, base);
134
+ await git.push(['--set-upstream', 'origin', branch]);
135
+ logger.debug(`Branch ${branch} pushed to remote`);
136
+ },
137
+ async switchBranch(localPath, branch) {
138
+ const git = createGit(localPath);
139
+ // If remote branch exists but not local, track it
140
+ const result = await git.branch(['-a']);
141
+ const localExists = result.branches[branch] !== undefined;
142
+ if (localExists) {
143
+ await git.checkout(branch);
144
+ }
145
+ else {
146
+ // Create local tracking branch from remote
147
+ await git.checkout(['-b', branch, `origin/${branch}`]);
148
+ }
149
+ logger.debug(`Switched to branch ${branch}`);
150
+ },
151
+ async deleteBranch(localPath, branch) {
152
+ if (branch === 'main' || branch === 'master') {
153
+ throw new Error(`Cannot delete protected branch: ${branch}`);
154
+ }
155
+ const git = createGit(localPath);
156
+ await git.branch(['-D', branch]);
157
+ try {
158
+ await git.push(['origin', '--delete', branch]);
159
+ }
160
+ catch {
161
+ // Remote branch may not exist — ignore
162
+ logger.debug(`Remote branch ${branch} not found, skipping remote delete`);
163
+ }
164
+ logger.debug(`Deleted branch ${branch}`);
165
+ },
78
166
  };
79
167
  //# sourceMappingURL=git.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"git.js","sourceRoot":"","sources":["../../../src/core/git.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"git.js","sourceRoot":"","sources":["../../../src/core/git.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvC,OAAO,EAAE,MAAQ,IAAI,CAAC;AACtB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAG5C,SAAS,SAAS,CAAC,QAAgB;IACjC,OAAO,SAAS,CAAC,QAAQ,EAAE;QACzB,sBAAsB,EAAE,CAAC;QACzB,OAAO,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE;KAC3B,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,KAAK,CAAC,YAAY,CAAC,SAAiB,EAAE,SAAiB,EAAE,MAAM,GAAG,MAAM;QACtE,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC;YAChD,MAAM,CAAC,KAAK,CAAC,mBAAmB,SAAS,EAAE,CAAC,CAAC;YAC7C,MAAM,GAAG,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC;YACjC,MAAM,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YAClC,MAAM,GAAG,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE,UAAU,MAAM,EAAE,CAAC,CAAC,CAAC;QAClD,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,KAAK,CAAC,SAAS,SAAS,MAAM,SAAS,EAAE,CAAC,CAAC;YAClD,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC7C,MAAM,SAAS,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,SAAS,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAAC;QACzF,CAAC;IACH,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,SAAiB,EAAE,MAAM,GAAG,MAAM;QAC3C,MAAM,GAAG,GAAM,SAAS,CAAC,SAAS,CAAC,CAAC;QACpC,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC;QACzE,MAAM,CAAC,KAAK,CAAC,aAAa,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC5D,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,SAAiB,EAAE,OAAe,EAAE,MAAM,GAAG,MAAM;QACrE,MAAM,GAAG,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC;QAEjC,MAAM,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACnB,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,MAAM,EAAE,CAAC;QAElC,IAAI,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC;YACrB,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAC1B,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;QAC7C,CAAC;QAED,MAAM,CAAC,KAAK,CAAC,SAAS,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAClD,MAAM,YAAY,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC/C,MAAM,CAAC,KAAK,CAAC,WAAW,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC;QAE/C,MAAM,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACjC,MAAM,CAAC,KAAK,CAAC,eAAe,MAAM,EAAE,CAAC,CAAC;QAEtC,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,YAAY,CAAC,MAAM,EAAE,CAAC;IACrE,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,SAAiB;QAC5B,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC;QAC9D,OAAO,SAAS,CAAC,SAAS,CAAC,CAAC,MAAM,EAAE,CAAC;IACvC,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,SAAiB,EAAE,CAAC,GAAG,CAAC;QAChC,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;QAC/D,OAAO,MAAM,CAAC,GAAG,CAAC;IACpB,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,SAAiB;QAClC,MAAM,OAAO,GAAG,MAAM,SAAS,CAAC,SAAS,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAC5D,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,EAAE,IAAI,EAAE,KAAK,IAAI,IAAI,CAAC;IACrE,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,SAAiB;QAC9B,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QACjC,MAAM,SAAS,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;QACvD,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;IAClC,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,wBAAwB,CAAC,SAAiB,EAAE,MAAM,GAAG,MAAM;QAC/D,MAAM,GAAG,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC;QACjC,MAAM,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAClC,MAAM,KAAK,GAAI,MAAM,GAAG,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;QAC5C,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,QAAQ,CAAC,CAAC,UAAU,MAAM,EAAE,CAAC,CAAC,CAAC;QACxD,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,MAAM,CAAC,IAAI,EAAE;YAAE,OAAO,CAAC,CAAC;QAC7C,gCAAgC;QAChC,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,MAAM,EAAE,EAAE,CAAC,CAAC;QACpE,OAAO,GAAG,CAAC,KAAK,CAAC;IACnB,CAAC;IAED,KAAK,CAAC,cAAc;QAClB,IAAI,CAAC;YACH,MAAM,SAAS,EAAE,CAAC,OAAO,EAAE,CAAC;YAC5B,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,SAAiB;QACnC,MAAM,GAAG,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC;QACjC,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,QAAQ,CAAC,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC,CAAC;QAC5D,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,SAAiB;QAClC,MAAM,GAAG,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC;QACjC,iDAAiD;QACjD,IAAI,CAAC;YAAC,MAAM,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC,CAAC,yBAAyB,CAAC,CAAC;QACtE,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QACxC,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;QACnC,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,GAAG,EAAE,CAAC;YAC3B,4CAA4C;YAC5C,MAAM,IAAI,GAAG,CAAC,CAAC,OAAO,CAAC,oBAAoB,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;YACxD,IAAI,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;gBACpE,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACrB,CAAC;QACH,CAAC;QACD,OAAO,CAAC,GAAG,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC;IAC9B,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,SAAiB,EAAE,MAAc;QAClD,MAAM,GAAG,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC;QACjC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;YACxC,OAAO,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;gBACzB,MAAM,IAAI,GAAG,CAAC,CAAC,OAAO,CAAC,oBAAoB,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;gBACxD,OAAO,IAAI,KAAK,MAAM,CAAC;YACzB,CAAC,CAAC,CAAC;QACL,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,SAAiB,EAAE,MAAc,EAAE,UAAmB;QACvE,MAAM,GAAG,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC;QACjC,MAAM,IAAI,GAAG,UAAU,IAAI,MAAM,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;QAC/D,MAAM,CAAC,KAAK,CAAC,mBAAmB,MAAM,SAAS,IAAI,EAAE,CAAC,CAAC;QACvD,MAAM,GAAG,CAAC,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QACvC,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC,gBAAgB,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;QACrD,MAAM,CAAC,KAAK,CAAC,UAAU,MAAM,mBAAmB,CAAC,CAAC;IACpD,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,SAAiB,EAAE,MAAc;QAClD,MAAM,GAAG,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC;QACjC,kDAAkD;QAClD,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QACxC,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,SAAS,CAAC;QAC1D,IAAI,WAAW,EAAE,CAAC;YAChB,MAAM,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC7B,CAAC;aAAM,CAAC;YACN,2CAA2C;YAC3C,MAAM,GAAG,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,MAAM,EAAE,CAAC,CAAC,CAAC;QACzD,CAAC;QACD,MAAM,CAAC,KAAK,CAAC,sBAAsB,MAAM,EAAE,CAAC,CAAC;IAC/C,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,SAAiB,EAAE,MAAc;QAClD,IAAI,MAAM,KAAK,MAAM,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC7C,MAAM,IAAI,KAAK,CAAC,mCAAmC,MAAM,EAAE,CAAC,CAAC;QAC/D,CAAC;QACD,MAAM,GAAG,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC;QACjC,MAAM,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;QACjC,IAAI,CAAC;YACH,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;QACjD,CAAC;QAAC,MAAM,CAAC;YACP,uCAAuC;YACvC,MAAM,CAAC,KAAK,CAAC,iBAAiB,MAAM,oCAAoC,CAAC,CAAC;QAC5E,CAAC;QACD,MAAM,CAAC,KAAK,CAAC,kBAAkB,MAAM,EAAE,CAAC,CAAC;IAC3C,CAAC;CACO,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"migrate.d.ts","sourceRoot":"","sources":["../../../src/core/migrate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAQH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAqJnD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,eAAe,GAAG,eAAe,CAepE"}
1
+ {"version":3,"file":"migrate.d.ts","sourceRoot":"","sources":["../../../src/core/migrate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAQH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAsJnD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,eAAe,GAAG,eAAe,CAepE"}
@@ -80,6 +80,7 @@ function migrateV1toV2(cfg) {
80
80
  fs.writeFileSync(lockFile, `migrating v1→v2 at ${new Date().toISOString()}`, 'utf-8');
81
81
  try {
82
82
  // ── 2. Move <agent>/ → agents/<agent>/ ──────────────────────
83
+ // Only the original v1 agents need directory migration
83
84
  for (const agent of ['openclaw', 'claude', 'gemini']) {
84
85
  const oldDir = path.join(repoPath, agent);
85
86
  const newDir = path.join(repoPath, 'agents', agent);