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.
- package/.wangchuan/config.example.json +85 -8
- package/dist/bin/wangchuan.d.ts +1 -1
- package/dist/bin/wangchuan.js +32 -4
- package/dist/bin/wangchuan.js.map +1 -1
- package/dist/src/commands/env.d.ts +11 -0
- package/dist/src/commands/env.d.ts.map +1 -0
- package/dist/src/commands/env.js +133 -0
- package/dist/src/commands/env.js.map +1 -0
- package/dist/src/commands/list.d.ts.map +1 -1
- package/dist/src/commands/list.js +5 -1
- package/dist/src/commands/list.js.map +1 -1
- package/dist/src/commands/pull.d.ts.map +1 -1
- package/dist/src/commands/pull.js +2 -1
- package/dist/src/commands/pull.js.map +1 -1
- package/dist/src/commands/push.d.ts.map +1 -1
- package/dist/src/commands/push.js +2 -1
- package/dist/src/commands/push.js.map +1 -1
- package/dist/src/commands/status.d.ts.map +1 -1
- package/dist/src/commands/status.js +3 -1
- package/dist/src/commands/status.js.map +1 -1
- package/dist/src/commands/sync.d.ts +18 -0
- package/dist/src/commands/sync.d.ts.map +1 -0
- package/dist/src/commands/sync.js +127 -0
- package/dist/src/commands/sync.js.map +1 -0
- package/dist/src/commands/watch.d.ts +10 -0
- package/dist/src/commands/watch.d.ts.map +1 -0
- package/dist/src/commands/watch.js +122 -0
- package/dist/src/commands/watch.js.map +1 -0
- package/dist/src/core/config.d.ts +6 -0
- package/dist/src/core/config.d.ts.map +1 -1
- package/dist/src/core/config.js +96 -6
- package/dist/src/core/config.js.map +1 -1
- package/dist/src/core/git.d.ts +11 -0
- package/dist/src/core/git.d.ts.map +1 -1
- package/dist/src/core/git.js +88 -0
- package/dist/src/core/git.js.map +1 -1
- package/dist/src/core/migrate.d.ts.map +1 -1
- package/dist/src/core/migrate.js +1 -0
- package/dist/src/core/migrate.js.map +1 -1
- package/dist/src/core/sync.d.ts.map +1 -1
- package/dist/src/core/sync.js +1 -1
- package/dist/src/core/sync.js.map +1 -1
- package/dist/src/i18n.d.ts.map +1 -1
- package/dist/src/i18n.js +70 -2
- package/dist/src/i18n.js.map +1 -1
- package/dist/src/types.d.ts +18 -1
- package/dist/src/types.d.ts.map +1 -1
- package/dist/src/types.js +3 -1
- package/dist/src/types.js.map +1 -1
- package/dist/test/sync.test.js +72 -4
- package/dist/test/sync.test.js.map +1 -1
- package/package.json +1 -1
- package/skill/SKILL.md +21 -3
- package/skill/claude/SKILL.md +113 -0
- 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;
|
|
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"}
|
package/dist/src/core/config.js
CHANGED
|
@@ -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
|
-
|
|
29
|
-
|
|
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":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,MAAQ,IAAI,CAAC;AACtB,OAAO,EAAE,MAAQ,IAAI,CAAC;AACtB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,CAAC,EAAE,MAAW,YAAY,CAAC;AAGpC,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,YAAY,CAAC,CAAC;AAC5D,MAAM,WAAW,GAAK,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;AAC9D,MAAM,QAAQ,GAAQ,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;AAC7D,MAAM,YAAY,GAAI,aAAa,CAAC,IAAI,GAAG,CAAC,sCAAsC,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAEtG,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC;AAEhC,wBAAwB;AACxB,MAAM,gBAAgB,GAAkB;IACtC,QAAQ,EAAE;QACR,OAAO,EAAE,IAAI;QACb,aAAa,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,WAAW,EAAE,WAAW,CAAC;QAChE,SAAS,EAAE;YACT,EAAE,GAAG,EAAE,WAAW,
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/core/config.ts"],"names":[],"mappings":"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"}
|
package/dist/src/core/git.d.ts
CHANGED
|
@@ -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;
|
|
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"}
|
package/dist/src/core/git.js
CHANGED
|
@@ -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
|
package/dist/src/core/git.js.map
CHANGED
|
@@ -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":"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"}
|
|
@@ -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;
|
|
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"}
|
package/dist/src/core/migrate.js
CHANGED
|
@@ -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);
|