mcpocket 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (75) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +86 -0
  3. package/dist/cli.d.ts +3 -0
  4. package/dist/cli.d.ts.map +1 -0
  5. package/dist/cli.js +35 -0
  6. package/dist/cli.js.map +1 -0
  7. package/dist/clients/claude-code.d.ts +6 -0
  8. package/dist/clients/claude-code.d.ts.map +1 -0
  9. package/dist/clients/claude-code.js +80 -0
  10. package/dist/clients/claude-code.js.map +1 -0
  11. package/dist/clients/claude-desktop.d.ts +5 -0
  12. package/dist/clients/claude-desktop.d.ts.map +1 -0
  13. package/dist/clients/claude-desktop.js +78 -0
  14. package/dist/clients/claude-desktop.js.map +1 -0
  15. package/dist/clients/opencode.d.ts +5 -0
  16. package/dist/clients/opencode.d.ts.map +1 -0
  17. package/dist/clients/opencode.js +79 -0
  18. package/dist/clients/opencode.js.map +1 -0
  19. package/dist/clients/types.d.ts +29 -0
  20. package/dist/clients/types.d.ts.map +1 -0
  21. package/dist/clients/types.js +3 -0
  22. package/dist/clients/types.js.map +1 -0
  23. package/dist/commands/init.d.ts +2 -0
  24. package/dist/commands/init.d.ts.map +1 -0
  25. package/dist/commands/init.js +71 -0
  26. package/dist/commands/init.js.map +1 -0
  27. package/dist/commands/pull.d.ts +2 -0
  28. package/dist/commands/pull.d.ts.map +1 -0
  29. package/dist/commands/pull.js +143 -0
  30. package/dist/commands/pull.js.map +1 -0
  31. package/dist/commands/push.d.ts +2 -0
  32. package/dist/commands/push.d.ts.map +1 -0
  33. package/dist/commands/push.js +112 -0
  34. package/dist/commands/push.js.map +1 -0
  35. package/dist/commands/status.d.ts +2 -0
  36. package/dist/commands/status.d.ts.map +1 -0
  37. package/dist/commands/status.js +128 -0
  38. package/dist/commands/status.js.map +1 -0
  39. package/dist/config.d.ts +12 -0
  40. package/dist/config.d.ts.map +1 -0
  41. package/dist/config.js +67 -0
  42. package/dist/config.js.map +1 -0
  43. package/dist/storage/github.d.ts +19 -0
  44. package/dist/storage/github.d.ts.map +1 -0
  45. package/dist/storage/github.js +168 -0
  46. package/dist/storage/github.js.map +1 -0
  47. package/dist/sync/agents.d.ts +5 -0
  48. package/dist/sync/agents.d.ts.map +1 -0
  49. package/dist/sync/agents.js +97 -0
  50. package/dist/sync/agents.js.map +1 -0
  51. package/dist/sync/mcp.d.ts +41 -0
  52. package/dist/sync/mcp.d.ts.map +1 -0
  53. package/dist/sync/mcp.js +102 -0
  54. package/dist/sync/mcp.js.map +1 -0
  55. package/dist/sync/plugins.d.ts +18 -0
  56. package/dist/sync/plugins.d.ts.map +1 -0
  57. package/dist/sync/plugins.js +126 -0
  58. package/dist/sync/plugins.js.map +1 -0
  59. package/dist/sync/skills.d.ts +5 -0
  60. package/dist/sync/skills.d.ts.map +1 -0
  61. package/dist/sync/skills.js +94 -0
  62. package/dist/sync/skills.js.map +1 -0
  63. package/dist/utils/crypto.d.ts +28 -0
  64. package/dist/utils/crypto.d.ts.map +1 -0
  65. package/dist/utils/crypto.js +132 -0
  66. package/dist/utils/crypto.js.map +1 -0
  67. package/dist/utils/paths.d.ts +57 -0
  68. package/dist/utils/paths.d.ts.map +1 -0
  69. package/dist/utils/paths.js +169 -0
  70. package/dist/utils/paths.js.map +1 -0
  71. package/dist/utils/prompt.d.ts +5 -0
  72. package/dist/utils/prompt.d.ts.map +1 -0
  73. package/dist/utils/prompt.js +85 -0
  74. package/dist/utils/prompt.js.map +1 -0
  75. package/package.json +52 -0
@@ -0,0 +1,168 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.getAuthenticatedUser = getAuthenticatedUser;
37
+ exports.createRepo = createRepo;
38
+ exports.cloneRepo = cloneRepo;
39
+ exports.pullRepo = pullRepo;
40
+ exports.commitAndPush = commitAndPush;
41
+ exports.ensureGitConfig = ensureGitConfig;
42
+ const fs = __importStar(require("fs"));
43
+ const path = __importStar(require("path"));
44
+ const child_process = __importStar(require("child_process"));
45
+ const GITHUB_API = 'https://api.github.com';
46
+ function headers(token) {
47
+ return {
48
+ 'Authorization': `Bearer ${token}`,
49
+ 'Accept': 'application/vnd.github+json',
50
+ 'X-GitHub-Api-Version': '2022-11-28',
51
+ 'Content-Type': 'application/json',
52
+ 'User-Agent': 'carry-on-cli',
53
+ };
54
+ }
55
+ /** Get the authenticated user's login */
56
+ async function getAuthenticatedUser(token) {
57
+ const res = await fetch(`${GITHUB_API}/user`, { headers: headers(token) });
58
+ if (!res.ok) {
59
+ throw new Error(`GitHub auth failed (${res.status}): ${await res.text()}`);
60
+ }
61
+ const data = await res.json();
62
+ return data.login;
63
+ }
64
+ /** Create a private repo named carry-on-sync (idempotent — returns existing if 422) */
65
+ async function createRepo(token, owner) {
66
+ const repoName = 'carry-on-sync';
67
+ // Try creating
68
+ const res = await fetch(`${GITHUB_API}/user/repos`, {
69
+ method: 'POST',
70
+ headers: headers(token),
71
+ body: JSON.stringify({
72
+ name: repoName,
73
+ description: 'carry-on: AI agent config sync',
74
+ private: true,
75
+ auto_init: true,
76
+ }),
77
+ });
78
+ if (res.ok) {
79
+ const data = await res.json();
80
+ return {
81
+ fullName: data.full_name,
82
+ cloneUrl: data.clone_url,
83
+ sshUrl: data.ssh_url,
84
+ htmlUrl: data.html_url,
85
+ };
86
+ }
87
+ // 422 = already exists, fetch it
88
+ if (res.status === 422) {
89
+ const existing = await fetch(`${GITHUB_API}/repos/${owner}/${repoName}`, {
90
+ headers: headers(token),
91
+ });
92
+ if (existing.ok) {
93
+ const data = await existing.json();
94
+ return {
95
+ fullName: data.full_name,
96
+ cloneUrl: data.clone_url,
97
+ sshUrl: data.ssh_url,
98
+ htmlUrl: data.html_url,
99
+ };
100
+ }
101
+ }
102
+ throw new Error(`Failed to create/fetch repo (${res.status}): ${await res.text()}`);
103
+ }
104
+ /** Clone the repo to a local directory. Uses HTTPS with token auth. */
105
+ function cloneRepo(cloneUrl, token, localDir) {
106
+ if (fs.existsSync(path.join(localDir, '.git'))) {
107
+ return; // already cloned
108
+ }
109
+ // Inject token into clone URL: https://token@github.com/...
110
+ const authUrl = cloneUrl.replace('https://', `https://${token}@`);
111
+ const parentDir = path.dirname(localDir);
112
+ const repoDir = path.basename(localDir);
113
+ fs.mkdirSync(parentDir, { recursive: true });
114
+ run('git', ['clone', authUrl, repoDir], { cwd: parentDir });
115
+ }
116
+ /** Pull latest changes */
117
+ function pullRepo(localDir, token, remoteUrl) {
118
+ if (!fs.existsSync(path.join(localDir, '.git'))) {
119
+ cloneRepo(remoteUrl, token, localDir);
120
+ return;
121
+ }
122
+ // Update remote URL with auth token in case it changed
123
+ const authUrl = remoteUrl.replace('https://', `https://${token}@`);
124
+ run('git', ['remote', 'set-url', 'origin', authUrl], { cwd: localDir });
125
+ run('git', ['pull', '--rebase', 'origin', 'main'], { cwd: localDir });
126
+ }
127
+ /** Stage all changes, commit, and push */
128
+ function commitAndPush(localDir, token, remoteUrl, message = 'carry-on: sync') {
129
+ const authUrl = remoteUrl.replace('https://', `https://${token}@`);
130
+ run('git', ['remote', 'set-url', 'origin', authUrl], { cwd: localDir });
131
+ run('git', ['add', '-A'], { cwd: localDir });
132
+ // Check if there's anything to commit
133
+ const status = child_process.spawnSync('git', ['status', '--porcelain'], {
134
+ cwd: localDir,
135
+ encoding: 'utf8',
136
+ });
137
+ if (!status.stdout?.trim()) {
138
+ console.log('[carry-on] Nothing changed — remote is already up to date.');
139
+ return;
140
+ }
141
+ run('git', ['commit', '-m', message], { cwd: localDir });
142
+ run('git', ['push', 'origin', 'main'], { cwd: localDir });
143
+ }
144
+ /** Configure git user in the repo if not set globally */
145
+ function ensureGitConfig(localDir) {
146
+ const name = child_process.spawnSync('git', ['config', 'user.name'], { encoding: 'utf8' });
147
+ if (!name.stdout?.trim()) {
148
+ run('git', ['config', 'user.name', 'carry-on'], { cwd: localDir });
149
+ }
150
+ const email = child_process.spawnSync('git', ['config', 'user.email'], { encoding: 'utf8' });
151
+ if (!email.stdout?.trim()) {
152
+ run('git', ['config', 'user.email', 'carry-on@localhost'], { cwd: localDir });
153
+ }
154
+ }
155
+ function run(cmd, args, opts = {}) {
156
+ const result = child_process.spawnSync(cmd, args, {
157
+ cwd: opts.cwd,
158
+ encoding: 'utf8',
159
+ stdio: ['ignore', 'pipe', 'pipe'],
160
+ });
161
+ if (result.status !== 0) {
162
+ const stderr = result.stderr?.trim() || '';
163
+ // Sanitize token from error output
164
+ const sanitized = stderr.replace(/https:\/\/[^@]+@/g, 'https://***@');
165
+ throw new Error(`git ${args[0]} failed: ${sanitized}`);
166
+ }
167
+ }
168
+ //# sourceMappingURL=github.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"github.js","sourceRoot":"","sources":["../../src/storage/github.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /** Copy agents/ from ~/.claude/agents/ to repo/agents/ */
2
+ export declare function writeAgentsToRepo(repoDir: string): number;
3
+ /** Copy agents/ from repo/agents/ to ~/.claude/agents/ (overwrite) */
4
+ export declare function applyAgentsFromRepo(repoDir: string): number;
5
+ //# sourceMappingURL=agents.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agents.d.ts","sourceRoot":"","sources":["../../src/sync/agents.ts"],"names":[],"mappings":"AAMA,0DAA0D;AAC1D,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAqBzD;AAED,sEAAsE;AACtE,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAmB3D"}
@@ -0,0 +1,97 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.writeAgentsToRepo = writeAgentsToRepo;
37
+ exports.applyAgentsFromRepo = applyAgentsFromRepo;
38
+ const fs = __importStar(require("fs"));
39
+ const path = __importStar(require("path"));
40
+ const paths_js_1 = require("../utils/paths.js");
41
+ const AGENTS_DIR = 'agents';
42
+ /** Copy agents/ from ~/.claude/agents/ to repo/agents/ */
43
+ function writeAgentsToRepo(repoDir) {
44
+ const source = path.join((0, paths_js_1.getClaudeHomeDir)(), AGENTS_DIR);
45
+ const dest = path.join(repoDir, AGENTS_DIR);
46
+ if (!fs.existsSync(source)) {
47
+ return 0;
48
+ }
49
+ let count = 0;
50
+ copyDir(source, dest, (relPath) => {
51
+ // Only sync .md files from agents
52
+ if (relPath.endsWith('.md')) {
53
+ count++;
54
+ return true;
55
+ }
56
+ // Skip .git, node_modules, CI dirs
57
+ const base = path.basename(relPath);
58
+ return !base.startsWith('.') && base !== 'node_modules';
59
+ });
60
+ return count;
61
+ }
62
+ /** Copy agents/ from repo/agents/ to ~/.claude/agents/ (overwrite) */
63
+ function applyAgentsFromRepo(repoDir) {
64
+ const source = path.join(repoDir, AGENTS_DIR);
65
+ const dest = path.join((0, paths_js_1.getClaudeHomeDir)(), AGENTS_DIR);
66
+ if (!fs.existsSync(source)) {
67
+ return 0;
68
+ }
69
+ let count = 0;
70
+ copyDir(source, dest, (relPath) => {
71
+ if (relPath.endsWith('.md')) {
72
+ count++;
73
+ return true;
74
+ }
75
+ const base = path.basename(relPath);
76
+ return !base.startsWith('.') && base !== 'node_modules';
77
+ });
78
+ return count;
79
+ }
80
+ function copyDir(src, dest, filter) {
81
+ if (!fs.existsSync(src))
82
+ return;
83
+ fs.mkdirSync(dest, { recursive: true });
84
+ for (const entry of fs.readdirSync(src, { withFileTypes: true })) {
85
+ const srcPath = path.join(src, entry.name);
86
+ const destPath = path.join(dest, entry.name);
87
+ if (!filter(entry.name))
88
+ continue;
89
+ if (entry.isDirectory()) {
90
+ copyDir(srcPath, destPath, filter);
91
+ }
92
+ else if (entry.isFile()) {
93
+ fs.copyFileSync(srcPath, destPath);
94
+ }
95
+ }
96
+ }
97
+ //# sourceMappingURL=agents.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agents.js","sourceRoot":"","sources":["../../src/sync/agents.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ import type { McpServersMap, McpServerConfig } from '../clients/types.js';
2
+ export interface PortableMcpConfig {
3
+ version: 1;
4
+ mcpServers: McpServersMap;
5
+ }
6
+ /**
7
+ * Read MCP servers from multiple sources and merge them.
8
+ * Later sources win on conflict.
9
+ */
10
+ export declare function mergeMcpSources(...sources: McpServersMap[]): McpServersMap;
11
+ /**
12
+ * Additive merge: add remote servers to local without overwriting existing local ones.
13
+ */
14
+ export declare function additiveMerge(local: McpServersMap, remote: McpServersMap): McpServersMap;
15
+ /**
16
+ * Normalize a single MCP server config for portable storage.
17
+ * - Normalizes command (strips .cmd/.exe)
18
+ * - Normalizes paths in args
19
+ */
20
+ export declare function normalizeServer(server: McpServerConfig): McpServerConfig;
21
+ /**
22
+ * Expand a single MCP server config from portable to platform-native.
23
+ */
24
+ export declare function expandServer(server: McpServerConfig): McpServerConfig;
25
+ /**
26
+ * Normalize all servers and encrypt their env vars.
27
+ */
28
+ export declare function packMcpServers(servers: McpServersMap, passphrase: string): McpServersMap;
29
+ /**
30
+ * Expand all servers and decrypt their env vars.
31
+ */
32
+ export declare function unpackMcpServers(servers: McpServersMap, passphrase: string): McpServersMap;
33
+ /**
34
+ * Build the portable mcp-config.json content.
35
+ */
36
+ export declare function buildPortableConfig(servers: McpServersMap, passphrase: string): PortableMcpConfig;
37
+ /**
38
+ * Restore MCP servers from portable config.
39
+ */
40
+ export declare function restoreFromPortableConfig(config: PortableMcpConfig, passphrase: string): McpServersMap;
41
+ //# sourceMappingURL=mcp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../../src/sync/mcp.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAE1E,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,CAAC,CAAC;IACX,UAAU,EAAE,aAAa,CAAC;CAC3B;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,GAAG,OAAO,EAAE,aAAa,EAAE,GAAG,aAAa,CAE1E;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,GAAG,aAAa,CAQxF;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,eAAe,GAAG,eAAe,CAMxE;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,eAAe,GAAG,eAAe,CAMrE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,GAAG,aAAa,CAYxF;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,GAAG,aAAa,CAW1F;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,GAAG,iBAAiB,CAKjG;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,GAAG,aAAa,CAEtG"}
@@ -0,0 +1,102 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.mergeMcpSources = mergeMcpSources;
4
+ exports.additiveMerge = additiveMerge;
5
+ exports.normalizeServer = normalizeServer;
6
+ exports.expandServer = expandServer;
7
+ exports.packMcpServers = packMcpServers;
8
+ exports.unpackMcpServers = unpackMcpServers;
9
+ exports.buildPortableConfig = buildPortableConfig;
10
+ exports.restoreFromPortableConfig = restoreFromPortableConfig;
11
+ const crypto_js_1 = require("../utils/crypto.js");
12
+ const paths_js_1 = require("../utils/paths.js");
13
+ /**
14
+ * Read MCP servers from multiple sources and merge them.
15
+ * Later sources win on conflict.
16
+ */
17
+ function mergeMcpSources(...sources) {
18
+ return Object.assign({}, ...sources);
19
+ }
20
+ /**
21
+ * Additive merge: add remote servers to local without overwriting existing local ones.
22
+ */
23
+ function additiveMerge(local, remote) {
24
+ const result = { ...local };
25
+ for (const [name, config] of Object.entries(remote)) {
26
+ if (!(name in result)) {
27
+ result[name] = config;
28
+ }
29
+ }
30
+ return result;
31
+ }
32
+ /**
33
+ * Normalize a single MCP server config for portable storage.
34
+ * - Normalizes command (strips .cmd/.exe)
35
+ * - Normalizes paths in args
36
+ */
37
+ function normalizeServer(server) {
38
+ return {
39
+ ...server,
40
+ command: (0, paths_js_1.normalizeCommand)(server.command),
41
+ args: server.args ? (0, paths_js_1.normalizeArgs)(server.args) : undefined,
42
+ };
43
+ }
44
+ /**
45
+ * Expand a single MCP server config from portable to platform-native.
46
+ */
47
+ function expandServer(server) {
48
+ return {
49
+ ...server,
50
+ command: (0, paths_js_1.expandCommand)(server.command),
51
+ args: server.args ? (0, paths_js_1.expandArgs)(server.args) : undefined,
52
+ };
53
+ }
54
+ /**
55
+ * Normalize all servers and encrypt their env vars.
56
+ */
57
+ function packMcpServers(servers, passphrase) {
58
+ const packed = {};
59
+ for (const [name, server] of Object.entries(servers)) {
60
+ const normalized = normalizeServer(server);
61
+ if (normalized.env && Object.keys(normalized.env).length > 0) {
62
+ const { encrypted } = (0, crypto_js_1.encryptEnv)(normalized.env, passphrase);
63
+ packed[name] = { ...normalized, env: encrypted };
64
+ }
65
+ else {
66
+ packed[name] = normalized;
67
+ }
68
+ }
69
+ return packed;
70
+ }
71
+ /**
72
+ * Expand all servers and decrypt their env vars.
73
+ */
74
+ function unpackMcpServers(servers, passphrase) {
75
+ const unpacked = {};
76
+ for (const [name, server] of Object.entries(servers)) {
77
+ const expanded = expandServer(server);
78
+ if (expanded.env && Object.keys(expanded.env).length > 0) {
79
+ unpacked[name] = { ...expanded, env: (0, crypto_js_1.decryptEnv)(expanded.env, passphrase) };
80
+ }
81
+ else {
82
+ unpacked[name] = expanded;
83
+ }
84
+ }
85
+ return unpacked;
86
+ }
87
+ /**
88
+ * Build the portable mcp-config.json content.
89
+ */
90
+ function buildPortableConfig(servers, passphrase) {
91
+ return {
92
+ version: 1,
93
+ mcpServers: packMcpServers(servers, passphrase),
94
+ };
95
+ }
96
+ /**
97
+ * Restore MCP servers from portable config.
98
+ */
99
+ function restoreFromPortableConfig(config, passphrase) {
100
+ return unpackMcpServers(config.mcpServers, passphrase);
101
+ }
102
+ //# sourceMappingURL=mcp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../src/sync/mcp.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ export interface InstalledPlugin {
2
+ name: string;
3
+ version?: string;
4
+ source?: string;
5
+ [key: string]: unknown;
6
+ }
7
+ export interface InstalledPluginsManifest {
8
+ [key: string]: unknown;
9
+ }
10
+ /** Read all plugin manifest files from ~/.claude/ */
11
+ export declare function readPluginManifests(): Record<string, unknown>;
12
+ /** Write plugin manifest files into a repo directory */
13
+ export declare function writePluginManifestsToRepo(manifests: Record<string, unknown>, repoDir: string): void;
14
+ /** Read plugin manifests from repo directory */
15
+ export declare function readPluginManifestsFromRepo(repoDir: string): Record<string, unknown>;
16
+ /** Apply plugin manifests from repo to ~/.claude/ (additive for installed_plugins, overwrite for others) */
17
+ export declare function applyPluginManifests(manifests: Record<string, unknown>): string[];
18
+ //# sourceMappingURL=plugins.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugins.d.ts","sourceRoot":"","sources":["../../src/sync/plugins.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,wBAAwB;IACvC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAQD,qDAAqD;AACrD,wBAAgB,mBAAmB,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAgB7D;AAED,wDAAwD;AACxD,wBAAgB,0BAA0B,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAMpG;AAED,gDAAgD;AAChD,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAapF;AAED,4GAA4G;AAC5G,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,EAAE,CAoCjF"}
@@ -0,0 +1,126 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.readPluginManifests = readPluginManifests;
37
+ exports.writePluginManifestsToRepo = writePluginManifestsToRepo;
38
+ exports.readPluginManifestsFromRepo = readPluginManifestsFromRepo;
39
+ exports.applyPluginManifests = applyPluginManifests;
40
+ const fs = __importStar(require("fs"));
41
+ const path = __importStar(require("path"));
42
+ const paths_js_1 = require("../utils/paths.js");
43
+ const PLUGIN_FILES = [
44
+ 'plugins/installed_plugins.json',
45
+ 'plugins/blocklist.json',
46
+ 'plugins/known_marketplaces.json',
47
+ ];
48
+ /** Read all plugin manifest files from ~/.claude/ */
49
+ function readPluginManifests() {
50
+ const claudeHome = (0, paths_js_1.getClaudeHomeDir)();
51
+ const manifests = {};
52
+ for (const relPath of PLUGIN_FILES) {
53
+ const fullPath = path.join(claudeHome, relPath);
54
+ if (fs.existsSync(fullPath)) {
55
+ try {
56
+ manifests[relPath] = JSON.parse(fs.readFileSync(fullPath, 'utf8'));
57
+ }
58
+ catch {
59
+ console.warn(`[carry-on] Could not read ${fullPath}`);
60
+ }
61
+ }
62
+ }
63
+ return manifests;
64
+ }
65
+ /** Write plugin manifest files into a repo directory */
66
+ function writePluginManifestsToRepo(manifests, repoDir) {
67
+ for (const [relPath, content] of Object.entries(manifests)) {
68
+ const fullPath = path.join(repoDir, relPath);
69
+ fs.mkdirSync(path.dirname(fullPath), { recursive: true });
70
+ fs.writeFileSync(fullPath, JSON.stringify(content, null, 2), 'utf8');
71
+ }
72
+ }
73
+ /** Read plugin manifests from repo directory */
74
+ function readPluginManifestsFromRepo(repoDir) {
75
+ const manifests = {};
76
+ for (const relPath of PLUGIN_FILES) {
77
+ const fullPath = path.join(repoDir, relPath);
78
+ if (fs.existsSync(fullPath)) {
79
+ try {
80
+ manifests[relPath] = JSON.parse(fs.readFileSync(fullPath, 'utf8'));
81
+ }
82
+ catch {
83
+ console.warn(`[carry-on] Could not read repo file ${fullPath}`);
84
+ }
85
+ }
86
+ }
87
+ return manifests;
88
+ }
89
+ /** Apply plugin manifests from repo to ~/.claude/ (additive for installed_plugins, overwrite for others) */
90
+ function applyPluginManifests(manifests) {
91
+ const claudeHome = (0, paths_js_1.getClaudeHomeDir)();
92
+ const updated = [];
93
+ for (const [relPath, content] of Object.entries(manifests)) {
94
+ const fullPath = path.join(claudeHome, relPath);
95
+ fs.mkdirSync(path.dirname(fullPath), { recursive: true });
96
+ if (relPath === 'plugins/installed_plugins.json' && fs.existsSync(fullPath)) {
97
+ // Additive merge for installed plugins
98
+ try {
99
+ const existing = JSON.parse(fs.readFileSync(fullPath, 'utf8'));
100
+ const remote = content;
101
+ const merged = { ...existing };
102
+ let added = 0;
103
+ for (const [key, val] of Object.entries(remote)) {
104
+ if (!(key in merged)) {
105
+ merged[key] = val;
106
+ added++;
107
+ }
108
+ }
109
+ if (added > 0) {
110
+ fs.writeFileSync(fullPath, JSON.stringify(merged, null, 2), 'utf8');
111
+ updated.push(relPath);
112
+ }
113
+ }
114
+ catch {
115
+ fs.writeFileSync(fullPath, JSON.stringify(content, null, 2), 'utf8');
116
+ updated.push(relPath);
117
+ }
118
+ }
119
+ else {
120
+ fs.writeFileSync(fullPath, JSON.stringify(content, null, 2), 'utf8');
121
+ updated.push(relPath);
122
+ }
123
+ }
124
+ return updated;
125
+ }
126
+ //# sourceMappingURL=plugins.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugins.js","sourceRoot":"","sources":["../../src/sync/plugins.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /** Copy skills/ from ~/.claude/skills/ to repo/skills/ (excluding node_modules) */
2
+ export declare function writeSkillsToRepo(repoDir: string): number;
3
+ /** Copy skills/ from repo/skills/ to ~/.claude/skills/ (overwrite, excluding node_modules) */
4
+ export declare function applySkillsFromRepo(repoDir: string): number;
5
+ //# sourceMappingURL=skills.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skills.d.ts","sourceRoot":"","sources":["../../src/sync/skills.ts"],"names":[],"mappings":"AAiBA,mFAAmF;AACnF,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CASzD;AAED,8FAA8F;AAC9F,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAS3D"}