wangchuan 3.0.0 → 4.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 +146 -174
- package/README.zh-CN.md +254 -0
- package/dist/bin/wangchuan.d.ts +10 -2
- package/dist/bin/wangchuan.d.ts.map +1 -1
- package/dist/bin/wangchuan.js +30 -233
- package/dist/bin/wangchuan.js.map +1 -1
- package/dist/src/agents/codex.d.ts +9 -0
- package/dist/src/agents/codex.d.ts.map +1 -0
- package/dist/src/agents/codex.js +20 -0
- package/dist/src/agents/codex.js.map +1 -0
- package/dist/src/agents/index.d.ts.map +1 -1
- package/dist/src/agents/index.js +2 -0
- package/dist/src/agents/index.js.map +1 -1
- package/dist/src/commands/completions.js +2 -2
- package/dist/src/commands/completions.js.map +1 -1
- package/dist/src/commands/doctor.d.ts +17 -6
- package/dist/src/commands/doctor.d.ts.map +1 -1
- package/dist/src/commands/doctor.js +233 -65
- package/dist/src/commands/doctor.js.map +1 -1
- package/dist/src/commands/list.d.ts.map +1 -1
- package/dist/src/commands/list.js +1 -0
- package/dist/src/commands/list.js.map +1 -1
- package/dist/src/commands/status.d.ts +20 -3
- package/dist/src/commands/status.d.ts.map +1 -1
- package/dist/src/commands/status.js +321 -51
- package/dist/src/commands/status.js.map +1 -1
- package/dist/src/commands/sync.d.ts.map +1 -1
- package/dist/src/commands/sync.js +51 -0
- package/dist/src/commands/sync.js.map +1 -1
- package/dist/src/commands/template.js +1 -1
- package/dist/src/commands/template.js.map +1 -1
- package/dist/src/core/config.d.ts +9 -9
- package/dist/src/core/config.d.ts.map +1 -1
- package/dist/src/core/config.js +11 -11
- package/dist/src/core/config.js.map +1 -1
- package/dist/src/core/crypto.d.ts +10 -10
- package/dist/src/core/crypto.d.ts.map +1 -1
- package/dist/src/core/crypto.js +19 -19
- package/dist/src/core/crypto.js.map +1 -1
- package/dist/src/core/git.d.ts +2 -2
- package/dist/src/core/git.js +9 -9
- package/dist/src/core/git.js.map +1 -1
- package/dist/src/core/json-field.d.ts +5 -5
- package/dist/src/core/json-field.d.ts.map +1 -1
- package/dist/src/core/json-field.js +5 -5
- package/dist/src/core/json-field.js.map +1 -1
- package/dist/src/core/sync.d.ts +9 -9
- package/dist/src/core/sync.js +47 -47
- package/dist/src/core/sync.js.map +1 -1
- package/dist/src/i18n.d.ts.map +1 -1
- package/dist/src/i18n.js +24 -10
- package/dist/src/i18n.js.map +1 -1
- package/dist/src/types.d.ts +24 -23
- package/dist/src/types.d.ts.map +1 -1
- package/dist/src/types.js +3 -3
- package/dist/src/types.js.map +1 -1
- package/dist/src/utils/linediff.d.ts +6 -5
- package/dist/src/utils/linediff.d.ts.map +1 -1
- package/dist/src/utils/linediff.js +10 -9
- package/dist/src/utils/linediff.js.map +1 -1
- package/dist/test/crypto.test.d.ts +1 -1
- package/dist/test/crypto.test.js +16 -16
- package/dist/test/crypto.test.js.map +1 -1
- package/dist/test/json-field.test.d.ts +1 -1
- package/dist/test/json-field.test.js +13 -13
- package/dist/test/json-field.test.js.map +1 -1
- package/dist/test/sync.test.d.ts +8 -8
- package/dist/test/sync.test.js +122 -113
- package/dist/test/sync.test.js.map +1 -1
- package/package.json +1 -1
- package/skill/SKILL.md +40 -53
- package/skill/claude/SKILL.md +10 -41
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"template.js","sourceRoot":"","sources":["../../../src/commands/template.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAc,mBAAmB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,MAAW,uBAAuB,CAAC;AACvD,OAAO,EAAE,MAAM,EAAE,MAAc,oBAAoB,CAAC;AACpD,OAAO,EAAE,CAAC,EAAE,MAAmB,YAAY,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAS,aAAa,CAAC;AAE7C,OAAO,KAAK,MAAM,OAAO,CAAC;AAW1B,MAAM,SAAS,GAAwB;IACrC;QACE,IAAI,EAAK,SAAS;QAClB,OAAO,EAAE,uBAAuB;QAChC,MAAM,EAAG,CAAC,QAAQ,CAAC;KACpB;IACD;QACE,IAAI,EAAK,MAAM;QACf,OAAO,EAAE,oBAAoB;QAC7B,MAAM,EAAG,CAAC,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"template.js","sourceRoot":"","sources":["../../../src/commands/template.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,29 +1,29 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* config.ts —
|
|
2
|
+
* config.ts — Global configuration management
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
4
|
+
* Config file: ~/.wangchuan/config.json
|
|
5
|
+
* Key file: ~/.wangchuan/master.key
|
|
6
6
|
*/
|
|
7
7
|
import type { WangchuanConfig } from '../types.js';
|
|
8
8
|
export declare const CONFIG_VERSION = 2;
|
|
9
9
|
export declare const config: {
|
|
10
10
|
/** Read config, return null if not found */
|
|
11
11
|
readonly load: () => WangchuanConfig | null;
|
|
12
|
-
/**
|
|
12
|
+
/** Save config to disk */
|
|
13
13
|
readonly save: (cfg: WangchuanConfig) => void;
|
|
14
|
-
/**
|
|
14
|
+
/** Detect the default branch of a remote repository */
|
|
15
15
|
readonly detectDefaultBranch: (repo: string) => Promise<string>;
|
|
16
|
-
/**
|
|
16
|
+
/** Initialize directory and config file, return the new config object */
|
|
17
17
|
readonly initialize: (repo: string) => Promise<WangchuanConfig>;
|
|
18
|
-
/**
|
|
18
|
+
/** Shallow merge two configs (override takes priority) */
|
|
19
19
|
readonly merge: (base: WangchuanConfig, override: Partial<WangchuanConfig>) => WangchuanConfig;
|
|
20
|
-
/**
|
|
20
|
+
/** Defaults (used during migration) */
|
|
21
21
|
readonly defaults: {
|
|
22
22
|
readonly profiles: import("../types.js").AgentProfiles;
|
|
23
23
|
readonly shared: import("../types.js").SharedConfig;
|
|
24
24
|
readonly version: 2;
|
|
25
25
|
};
|
|
26
|
-
/**
|
|
26
|
+
/** Common path constants */
|
|
27
27
|
readonly paths: {
|
|
28
28
|
readonly dir: string;
|
|
29
29
|
readonly config: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/core/config.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AASH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAOnD,eAAO,MAAM,cAAc,IAAI,CAAC;AAQhC,eAAO,MAAM,MAAM;IACjB,4CAA4C;yBACpC,eAAe,GAAG,IAAI;IAsB9B,
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/core/config.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AASH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAOnD,eAAO,MAAM,cAAc,IAAI,CAAC;AAQhC,eAAO,MAAM,MAAM;IACjB,4CAA4C;yBACpC,eAAe,GAAG,IAAI;IAsB9B,0BAA0B;yBAChB,eAAe,KAAG,IAAI;IAMhC,uDAAuD;yCACvB,MAAM,KAAG,OAAO,CAAC,MAAM,CAAC;IAaxD,yEAAyE;gCAClD,MAAM,KAAG,OAAO,CAAC,eAAe,CAAC;IAiBxD,0DAA0D;2BAC9C,eAAe,YAAY,OAAO,CAAC,eAAe,CAAC,KAAG,eAAe;IAIjF,uCAAuC;;;;;;IAOvC,4BAA4B;;;;;;;CAOpB,CAAC;AAEX;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM,CAK7D"}
|
package/dist/src/core/config.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* config.ts —
|
|
2
|
+
* config.ts — Global configuration management
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
4
|
+
* Config file: ~/.wangchuan/config.json
|
|
5
|
+
* Key file: ~/.wangchuan/master.key
|
|
6
6
|
*/
|
|
7
7
|
import fs from 'fs';
|
|
8
8
|
import os from 'os';
|
|
@@ -16,9 +16,9 @@ const CONFIG_PATH = path.join(WANGCHUAN_DIR, 'config.json');
|
|
|
16
16
|
const KEY_PATH = path.join(WANGCHUAN_DIR, 'master.key');
|
|
17
17
|
const EXAMPLE_PATH = fileURLToPath(new URL('../../.wangchuan/config.example.json', import.meta.url));
|
|
18
18
|
export const CONFIG_VERSION = 2;
|
|
19
|
-
/**
|
|
19
|
+
/** Default config skeleton v2 — derived from agent definitions in src/agents/ */
|
|
20
20
|
const DEFAULT_PROFILES = buildDefaultProfiles();
|
|
21
|
-
/**
|
|
21
|
+
/** Shared tier default config — derived from agent definitions in src/agents/ */
|
|
22
22
|
const DEFAULT_SHARED = buildDefaultShared();
|
|
23
23
|
export const config = {
|
|
24
24
|
/** Read config, return null if not found */
|
|
@@ -45,13 +45,13 @@ export const config = {
|
|
|
45
45
|
}
|
|
46
46
|
return parsed;
|
|
47
47
|
},
|
|
48
|
-
/**
|
|
48
|
+
/** Save config to disk */
|
|
49
49
|
save(cfg) {
|
|
50
50
|
fs.mkdirSync(WANGCHUAN_DIR, { recursive: true });
|
|
51
51
|
fs.writeFileSync(CONFIG_PATH, JSON.stringify(cfg, null, 2), 'utf-8');
|
|
52
52
|
logger.debug(t('config.saved', { path: CONFIG_PATH }));
|
|
53
53
|
},
|
|
54
|
-
/**
|
|
54
|
+
/** Detect the default branch of a remote repository */
|
|
55
55
|
async detectDefaultBranch(repo) {
|
|
56
56
|
try {
|
|
57
57
|
const { execSync } = await import('child_process');
|
|
@@ -65,7 +65,7 @@ export const config = {
|
|
|
65
65
|
return 'main';
|
|
66
66
|
}
|
|
67
67
|
},
|
|
68
|
-
/**
|
|
68
|
+
/** Initialize directory and config file, return the new config object */
|
|
69
69
|
async initialize(repo) {
|
|
70
70
|
fs.mkdirSync(WANGCHUAN_DIR, { recursive: true });
|
|
71
71
|
const branch = await this.detectDefaultBranch(repo);
|
|
@@ -82,17 +82,17 @@ export const config = {
|
|
|
82
82
|
this.save(cfg);
|
|
83
83
|
return cfg;
|
|
84
84
|
},
|
|
85
|
-
/**
|
|
85
|
+
/** Shallow merge two configs (override takes priority) */
|
|
86
86
|
merge(base, override) {
|
|
87
87
|
return { ...base, ...override };
|
|
88
88
|
},
|
|
89
|
-
/**
|
|
89
|
+
/** Defaults (used during migration) */
|
|
90
90
|
defaults: {
|
|
91
91
|
profiles: DEFAULT_PROFILES,
|
|
92
92
|
shared: DEFAULT_SHARED,
|
|
93
93
|
version: CONFIG_VERSION,
|
|
94
94
|
},
|
|
95
|
-
/**
|
|
95
|
+
/** Common path constants */
|
|
96
96
|
paths: {
|
|
97
97
|
dir: WANGCHUAN_DIR,
|
|
98
98
|
config: CONFIG_PATH,
|
|
@@ -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;AACpC,OAAO,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAG9E,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,
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/core/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,24 +1,24 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* crypto.ts — AES-256-GCM
|
|
2
|
+
* crypto.ts — AES-256-GCM encryption/decryption module
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
4
|
+
* Key file format: 32 bytes of random data, stored as hex string (64 chars)
|
|
5
|
+
* Ciphertext format: IV(12B) | AuthTag(16B) | CipherText → Base64 written to .enc file
|
|
6
6
|
*/
|
|
7
7
|
export declare const cryptoEngine: {
|
|
8
8
|
/**
|
|
9
|
-
*
|
|
10
|
-
*
|
|
9
|
+
* Generate a new master key and write to file (mode 0o600).
|
|
10
|
+
* Returns the raw 32-byte Buffer for test assertions.
|
|
11
11
|
*/
|
|
12
12
|
readonly generateKey: (keyPath: string) => Buffer;
|
|
13
|
-
/**
|
|
13
|
+
/** Check if key file exists */
|
|
14
14
|
readonly hasKey: (keyPath: string) => boolean;
|
|
15
|
-
/**
|
|
15
|
+
/** Encrypt source file, write ciphertext to destPath (typically ending in .enc) */
|
|
16
16
|
readonly encryptFile: (srcPath: string, destPath: string, keyPath: string) => void;
|
|
17
|
-
/**
|
|
17
|
+
/** Decrypt .enc file, write plaintext to destPath */
|
|
18
18
|
readonly decryptFile: (srcPath: string, destPath: string, keyPath: string) => void;
|
|
19
|
-
/**
|
|
19
|
+
/** Encrypt an arbitrary string, return Base64 ciphertext */
|
|
20
20
|
readonly encryptString: (plaintext: string, keyPath: string) => string;
|
|
21
|
-
/**
|
|
21
|
+
/** Decrypt Base64 ciphertext, return original string */
|
|
22
22
|
readonly decryptString: (b64: string, keyPath: string) => string;
|
|
23
23
|
};
|
|
24
24
|
//# sourceMappingURL=crypto.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"crypto.d.ts","sourceRoot":"","sources":["../../../src/core/crypto.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AA6CH,eAAO,MAAM,YAAY;IACvB;;;OAGG;oCACkB,MAAM,KAAG,MAAM;IAQpC
|
|
1
|
+
{"version":3,"file":"crypto.d.ts","sourceRoot":"","sources":["../../../src/core/crypto.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AA6CH,eAAO,MAAM,YAAY;IACvB;;;OAGG;oCACkB,MAAM,KAAG,MAAM;IAQpC,+BAA+B;+BACf,MAAM,KAAG,OAAO;IAIhC,mFAAmF;oCAC9D,MAAM,YAAY,MAAM,WAAW,MAAM,KAAG,IAAI;IASrE,qDAAqD;oCAChC,MAAM,YAAY,MAAM,WAAW,MAAM,KAAG,IAAI;IASrE,4DAA4D;wCACnC,MAAM,WAAW,MAAM,KAAG,MAAM;IAKzD,wDAAwD;kCACrC,MAAM,WAAW,MAAM,KAAG,MAAM;CAI3C,CAAC"}
|
package/dist/src/core/crypto.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* crypto.ts — AES-256-GCM
|
|
2
|
+
* crypto.ts — AES-256-GCM encryption/decryption module
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
4
|
+
* Key file format: 32 bytes of random data, stored as hex string (64 chars)
|
|
5
|
+
* Ciphertext format: IV(12B) | AuthTag(16B) | CipherText → Base64 written to .enc file
|
|
6
6
|
*/
|
|
7
7
|
import crypto from 'crypto';
|
|
8
8
|
import fs from 'fs';
|
|
@@ -10,20 +10,20 @@ import path from 'path';
|
|
|
10
10
|
import { logger } from '../utils/logger.js';
|
|
11
11
|
const ALGO = 'aes-256-gcm';
|
|
12
12
|
const KEY_BYTES = 32; // 256 bit
|
|
13
|
-
const IV_BYTES = 12; // 96 bit (GCM
|
|
13
|
+
const IV_BYTES = 12; // 96 bit (GCM recommended)
|
|
14
14
|
const TAG_BYTES = 16; // 128 bit auth tag
|
|
15
|
-
/**
|
|
15
|
+
/** Load and validate the master key from file */
|
|
16
16
|
function loadKey(keyPath) {
|
|
17
17
|
if (!fs.existsSync(keyPath)) {
|
|
18
|
-
throw new Error(
|
|
18
|
+
throw new Error(`Key file not found: ${keyPath}\nPlease run wangchuan init to generate a key.`);
|
|
19
19
|
}
|
|
20
20
|
const hex = fs.readFileSync(keyPath, 'utf-8').trim();
|
|
21
21
|
if (hex.length !== KEY_BYTES * 2) {
|
|
22
|
-
throw new Error(
|
|
22
|
+
throw new Error(`Invalid key file format, expected ${KEY_BYTES * 2} hex characters`);
|
|
23
23
|
}
|
|
24
24
|
return Buffer.from(hex, 'hex');
|
|
25
25
|
}
|
|
26
|
-
/**
|
|
26
|
+
/** Encrypt Buffer → Base64 string (format: IV + AuthTag + CipherText) */
|
|
27
27
|
function encryptBuffer(plaintext, key) {
|
|
28
28
|
const iv = crypto.randomBytes(IV_BYTES);
|
|
29
29
|
const cipher = crypto.createCipheriv(ALGO, key, iv);
|
|
@@ -31,7 +31,7 @@ function encryptBuffer(plaintext, key) {
|
|
|
31
31
|
const tag = cipher.getAuthTag();
|
|
32
32
|
return Buffer.concat([iv, tag, enc]).toString('base64');
|
|
33
33
|
}
|
|
34
|
-
/** Base64
|
|
34
|
+
/** Base64 ciphertext → original Buffer */
|
|
35
35
|
function decryptBuffer(b64, key) {
|
|
36
36
|
const data = Buffer.from(b64, 'base64');
|
|
37
37
|
const iv = data.subarray(0, IV_BYTES);
|
|
@@ -43,44 +43,44 @@ function decryptBuffer(b64, key) {
|
|
|
43
43
|
}
|
|
44
44
|
export const cryptoEngine = {
|
|
45
45
|
/**
|
|
46
|
-
*
|
|
47
|
-
*
|
|
46
|
+
* Generate a new master key and write to file (mode 0o600).
|
|
47
|
+
* Returns the raw 32-byte Buffer for test assertions.
|
|
48
48
|
*/
|
|
49
49
|
generateKey(keyPath) {
|
|
50
50
|
fs.mkdirSync(path.dirname(keyPath), { recursive: true });
|
|
51
51
|
const key = crypto.randomBytes(KEY_BYTES);
|
|
52
52
|
fs.writeFileSync(keyPath, key.toString('hex'), { mode: 0o600, encoding: 'utf-8' });
|
|
53
|
-
logger.ok(
|
|
53
|
+
logger.ok(`Master key generated: ${keyPath}`);
|
|
54
54
|
return key;
|
|
55
55
|
},
|
|
56
|
-
/**
|
|
56
|
+
/** Check if key file exists */
|
|
57
57
|
hasKey(keyPath) {
|
|
58
58
|
return fs.existsSync(keyPath);
|
|
59
59
|
},
|
|
60
|
-
/**
|
|
60
|
+
/** Encrypt source file, write ciphertext to destPath (typically ending in .enc) */
|
|
61
61
|
encryptFile(srcPath, destPath, keyPath) {
|
|
62
62
|
const key = loadKey(keyPath);
|
|
63
63
|
const plaintext = fs.readFileSync(srcPath);
|
|
64
64
|
const encrypted = encryptBuffer(plaintext, key);
|
|
65
65
|
fs.mkdirSync(path.dirname(destPath), { recursive: true });
|
|
66
66
|
fs.writeFileSync(destPath, encrypted, 'utf-8');
|
|
67
|
-
logger.debug(
|
|
67
|
+
logger.debug(`Encrypted: ${srcPath} → ${destPath}`);
|
|
68
68
|
},
|
|
69
|
-
/**
|
|
69
|
+
/** Decrypt .enc file, write plaintext to destPath */
|
|
70
70
|
decryptFile(srcPath, destPath, keyPath) {
|
|
71
71
|
const key = loadKey(keyPath);
|
|
72
72
|
const encrypted = fs.readFileSync(srcPath, 'utf-8').trim();
|
|
73
73
|
const plaintext = decryptBuffer(encrypted, key);
|
|
74
74
|
fs.mkdirSync(path.dirname(destPath), { recursive: true });
|
|
75
75
|
fs.writeFileSync(destPath, plaintext);
|
|
76
|
-
logger.debug(
|
|
76
|
+
logger.debug(`Decrypted: ${srcPath} → ${destPath}`);
|
|
77
77
|
},
|
|
78
|
-
/**
|
|
78
|
+
/** Encrypt an arbitrary string, return Base64 ciphertext */
|
|
79
79
|
encryptString(plaintext, keyPath) {
|
|
80
80
|
const key = loadKey(keyPath);
|
|
81
81
|
return encryptBuffer(Buffer.from(plaintext, 'utf-8'), key);
|
|
82
82
|
},
|
|
83
|
-
/**
|
|
83
|
+
/** Decrypt Base64 ciphertext, return original string */
|
|
84
84
|
decryptString(b64, keyPath) {
|
|
85
85
|
const key = loadKey(keyPath);
|
|
86
86
|
return decryptBuffer(b64, key).toString('utf-8');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"crypto.js","sourceRoot":"","sources":["../../../src/core/crypto.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,MAAU,IAAI,CAAC;AACxB,OAAO,IAAI,MAAQ,MAAM,CAAC;AAC1B,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,MAAM,IAAI,GAAQ,aAAsB,CAAC;AACzC,MAAM,SAAS,GAAG,EAAE,CAAC,CAAE,UAAU;AACjC,MAAM,QAAQ,GAAI,EAAE,CAAC,CAAE,
|
|
1
|
+
{"version":3,"file":"crypto.js","sourceRoot":"","sources":["../../../src/core/crypto.ts"],"names":[],"mappings":"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"}
|
package/dist/src/core/git.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* git.ts — simple-git
|
|
2
|
+
* git.ts — simple-git wrapper providing idempotent Git operations
|
|
3
3
|
*
|
|
4
|
-
* simple-git v3
|
|
4
|
+
* simple-git v3 requires named import { simpleGit } under ESM (not default import).
|
|
5
5
|
*/
|
|
6
6
|
import type { DefaultLogFields } from 'simple-git';
|
|
7
7
|
import type { CommitResult } from '../types.js';
|
package/dist/src/core/git.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* git.ts — simple-git
|
|
2
|
+
* git.ts — simple-git wrapper providing idempotent Git operations
|
|
3
3
|
*
|
|
4
|
-
* simple-git v3
|
|
4
|
+
* simple-git v3 requires named import { simpleGit } under ESM (not default import).
|
|
5
5
|
*/
|
|
6
6
|
import { simpleGit } from 'simple-git';
|
|
7
7
|
import fs from 'fs';
|
|
@@ -16,13 +16,13 @@ function createGit(repoPath) {
|
|
|
16
16
|
export const gitEngine = {
|
|
17
17
|
async cloneOrFetch(remoteUrl, localPath, branch = 'main') {
|
|
18
18
|
if (fs.existsSync(path.join(localPath, '.git'))) {
|
|
19
|
-
logger.debug(
|
|
19
|
+
logger.debug(`Repo exists, running fetch: ${localPath}`);
|
|
20
20
|
const git = createGit(localPath);
|
|
21
21
|
await git.fetch('origin', branch);
|
|
22
22
|
await git.reset(['--hard', `origin/${branch}`]);
|
|
23
23
|
}
|
|
24
24
|
else {
|
|
25
|
-
logger.debug(
|
|
25
|
+
logger.debug(`Cloning repo: ${remoteUrl} → ${localPath}`);
|
|
26
26
|
fs.mkdirSync(localPath, { recursive: true });
|
|
27
27
|
await simpleGit().clone(remoteUrl, localPath, ['--branch', branch, '--single-branch']);
|
|
28
28
|
}
|
|
@@ -38,14 +38,14 @@ export const gitEngine = {
|
|
|
38
38
|
await git.add('.');
|
|
39
39
|
const status = await git.status();
|
|
40
40
|
if (status.isClean()) {
|
|
41
|
-
logger.info('
|
|
41
|
+
logger.info('No new changes to commit');
|
|
42
42
|
return { committed: false, pushed: false };
|
|
43
43
|
}
|
|
44
|
-
logger.debug(
|
|
44
|
+
logger.debug(`Staged files: ${status.staged.join(', ')}`);
|
|
45
45
|
const commitResult = await git.commit(message);
|
|
46
46
|
logger.debug(`commit: ${commitResult.commit}`);
|
|
47
47
|
await git.push('origin', branch);
|
|
48
|
-
logger.debug(
|
|
48
|
+
logger.debug(`Pushed to origin/${branch}`);
|
|
49
49
|
return { committed: true, pushed: true, sha: commitResult.commit };
|
|
50
50
|
},
|
|
51
51
|
async status(localPath) {
|
|
@@ -62,9 +62,9 @@ export const gitEngine = {
|
|
|
62
62
|
return remotes.find(r => r.name === 'origin')?.refs?.fetch ?? null;
|
|
63
63
|
},
|
|
64
64
|
async rollback(localPath) {
|
|
65
|
-
logger.warn('
|
|
65
|
+
logger.warn('Rolling back the last commit...');
|
|
66
66
|
await createGit(localPath).reset(['--soft', 'HEAD~1']);
|
|
67
|
-
logger.warn('
|
|
67
|
+
logger.warn('Rollback complete, local changes preserved in staging area');
|
|
68
68
|
},
|
|
69
69
|
/**
|
|
70
70
|
* Fetch from remote and check if remote branch is ahead of local.
|
package/dist/src/core/git.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
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,
|
|
1
|
+
{"version":3,"file":"git.js","sourceRoot":"","sources":["../../../src/core/git.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* json-field.ts — JSON
|
|
2
|
+
* json-field.ts — JSON field-level extraction and merge
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
* pull
|
|
4
|
+
* Supports picking specified top-level fields from large JSON files for sync;
|
|
5
|
+
* merges fields back into target JSON on pull (without destroying other fields).
|
|
6
6
|
*/
|
|
7
7
|
type JsonObject = Record<string, unknown>;
|
|
8
|
-
/**
|
|
8
|
+
/** Extract specified top-level fields from an object */
|
|
9
9
|
export declare function extractFields(obj: JsonObject, fields: readonly string[]): JsonObject;
|
|
10
|
-
/**
|
|
10
|
+
/** Shallow merge extracted fields back into target object (only overwrites extracted fields, preserves the rest) */
|
|
11
11
|
export declare function mergeFields(target: JsonObject, partial: JsonObject): JsonObject;
|
|
12
12
|
export declare const jsonField: {
|
|
13
13
|
readonly extractFields: typeof extractFields;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"json-field.d.ts","sourceRoot":"","sources":["../../../src/core/json-field.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,KAAK,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAE1C,
|
|
1
|
+
{"version":3,"file":"json-field.d.ts","sourceRoot":"","sources":["../../../src/core/json-field.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,KAAK,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAE1C,wDAAwD;AACxD,wBAAgB,aAAa,CAAC,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,MAAM,EAAE,GAAG,UAAU,CAMpF;AAED,oHAAoH;AACpH,wBAAgB,WAAW,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,GAAG,UAAU,CAE/E;AAED,eAAO,MAAM,SAAS;;;CAA0C,CAAC"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* json-field.ts — JSON
|
|
2
|
+
* json-field.ts — JSON field-level extraction and merge
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
* pull
|
|
4
|
+
* Supports picking specified top-level fields from large JSON files for sync;
|
|
5
|
+
* merges fields back into target JSON on pull (without destroying other fields).
|
|
6
6
|
*/
|
|
7
|
-
/**
|
|
7
|
+
/** Extract specified top-level fields from an object */
|
|
8
8
|
export function extractFields(obj, fields) {
|
|
9
9
|
const result = {};
|
|
10
10
|
for (const f of fields) {
|
|
@@ -13,7 +13,7 @@ export function extractFields(obj, fields) {
|
|
|
13
13
|
}
|
|
14
14
|
return result;
|
|
15
15
|
}
|
|
16
|
-
/**
|
|
16
|
+
/** Shallow merge extracted fields back into target object (only overwrites extracted fields, preserves the rest) */
|
|
17
17
|
export function mergeFields(target, partial) {
|
|
18
18
|
return { ...target, ...partial };
|
|
19
19
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"json-field.js","sourceRoot":"","sources":["../../../src/core/json-field.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,
|
|
1
|
+
{"version":3,"file":"json-field.js","sourceRoot":"","sources":["../../../src/core/json-field.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,wDAAwD;AACxD,MAAM,UAAU,aAAa,CAAC,GAAe,EAAE,MAAyB;IACtE,MAAM,MAAM,GAAe,EAAE,CAAC;IAC9B,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,IAAI,CAAC,IAAI,GAAG;YAAE,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;IACnC,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,oHAAoH;AACpH,MAAM,UAAU,WAAW,CAAC,MAAkB,EAAE,OAAmB;IACjE,OAAO,EAAE,GAAG,MAAM,EAAE,GAAG,OAAO,EAAE,CAAC;AACnC,CAAC;AAED,MAAM,CAAC,MAAM,SAAS,GAAG,EAAE,aAAa,EAAE,WAAW,EAAW,CAAC"}
|
package/dist/src/core/sync.d.ts
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* sync.ts —
|
|
2
|
+
* sync.ts — Core sync engine
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
* stageToRepo
|
|
6
|
-
* restoreFromRepo
|
|
7
|
-
* diff
|
|
4
|
+
* Three directions:
|
|
5
|
+
* stageToRepo workspace → local repo directory (pre-push staging)
|
|
6
|
+
* restoreFromRepo local repo directory → workspace (post-pull restore)
|
|
7
|
+
* diff compare both sides, return diff summary
|
|
8
8
|
*
|
|
9
|
-
*
|
|
10
|
-
* shared —
|
|
11
|
-
* agents/* — per-agent
|
|
9
|
+
* Supports two-tier sync:
|
|
10
|
+
* shared — cross-agent sharing (skills, MCP templates, shared memory)
|
|
11
|
+
* agents/* — per-agent cross-environment sync
|
|
12
12
|
*
|
|
13
|
-
*
|
|
13
|
+
* All methods accept an optional agent filter parameter to operate on a specific agent's files only.
|
|
14
14
|
*/
|
|
15
15
|
import type { WangchuanConfig, FileEntry, StageResult, RestoreResult, DiffResult, AgentName, FilterOptions } from '../types.js';
|
|
16
16
|
export declare function expandHome(p: string): string;
|