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,94 @@
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.writeSkillsToRepo = writeSkillsToRepo;
37
+ exports.applySkillsFromRepo = applySkillsFromRepo;
38
+ const fs = __importStar(require("fs"));
39
+ const path = __importStar(require("path"));
40
+ const paths_js_1 = require("../utils/paths.js");
41
+ const SKILLS_DIR = 'skills';
42
+ const SKIP_DIRS = new Set(['node_modules', '.git', 'dist', '.cache', '__pycache__']);
43
+ const SKIP_PREFIXES = ['.'];
44
+ function shouldSkip(name) {
45
+ if (SKIP_DIRS.has(name))
46
+ return true;
47
+ for (const prefix of SKIP_PREFIXES) {
48
+ if (name.startsWith(prefix))
49
+ return true;
50
+ }
51
+ return false;
52
+ }
53
+ /** Copy skills/ from ~/.claude/skills/ to repo/skills/ (excluding node_modules) */
54
+ function writeSkillsToRepo(repoDir) {
55
+ const source = path.join((0, paths_js_1.getClaudeHomeDir)(), SKILLS_DIR);
56
+ const dest = path.join(repoDir, SKILLS_DIR);
57
+ if (!fs.existsSync(source)) {
58
+ return 0;
59
+ }
60
+ return copyDirCounted(source, dest);
61
+ }
62
+ /** Copy skills/ from repo/skills/ to ~/.claude/skills/ (overwrite, excluding node_modules) */
63
+ function applySkillsFromRepo(repoDir) {
64
+ const source = path.join(repoDir, SKILLS_DIR);
65
+ const dest = path.join((0, paths_js_1.getClaudeHomeDir)(), SKILLS_DIR);
66
+ if (!fs.existsSync(source)) {
67
+ return 0;
68
+ }
69
+ return copyDirCounted(source, dest);
70
+ }
71
+ function copyDirCounted(src, dest) {
72
+ let count = 0;
73
+ copyDir(src, dest, () => { count++; });
74
+ return count;
75
+ }
76
+ function copyDir(src, dest, onFile) {
77
+ if (!fs.existsSync(src))
78
+ return;
79
+ fs.mkdirSync(dest, { recursive: true });
80
+ for (const entry of fs.readdirSync(src, { withFileTypes: true })) {
81
+ if (shouldSkip(entry.name))
82
+ continue;
83
+ const srcPath = path.join(src, entry.name);
84
+ const destPath = path.join(dest, entry.name);
85
+ if (entry.isDirectory()) {
86
+ copyDir(srcPath, destPath, onFile);
87
+ }
88
+ else if (entry.isFile()) {
89
+ fs.copyFileSync(srcPath, destPath);
90
+ onFile();
91
+ }
92
+ }
93
+ }
94
+ //# sourceMappingURL=skills.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skills.js","sourceRoot":"","sources":["../../src/sync/skills.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Encrypt a plaintext value with a passphrase.
3
+ * Returns a string in the format: ENCRYPTED:<iv_hex>:<salt_hex>:<authTag_hex>:<ciphertext_hex>
4
+ */
5
+ export declare function encrypt(plaintext: string, passphrase: string): string;
6
+ /**
7
+ * Decrypt a value produced by encrypt().
8
+ * Returns the original plaintext.
9
+ * Throws if the passphrase is wrong or the value is malformed.
10
+ */
11
+ export declare function decrypt(encryptedValue: string, passphrase: string): string;
12
+ /**
13
+ * Returns true if the value is an encrypted carry-on secret.
14
+ */
15
+ export declare function isEncrypted(value: string): boolean;
16
+ /**
17
+ * Encrypt all string values in an env object.
18
+ * Returns the encrypted env and a list of key names that were encrypted.
19
+ */
20
+ export declare function encryptEnv(env: Record<string, string>, passphrase: string): {
21
+ encrypted: Record<string, string>;
22
+ encryptedKeys: string[];
23
+ };
24
+ /**
25
+ * Decrypt all encrypted values in an env object.
26
+ */
27
+ export declare function decryptEnv(env: Record<string, string>, passphrase: string): Record<string, string>;
28
+ //# sourceMappingURL=crypto.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crypto.d.ts","sourceRoot":"","sources":["../../src/utils/crypto.ts"],"names":[],"mappings":"AAQA;;;GAGG;AACH,wBAAgB,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAgBrE;AAED;;;;GAIG;AACH,wBAAgB,OAAO,CAAC,cAAc,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CA0B1E;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAElD;AAED;;;GAGG;AACH,wBAAgB,UAAU,CACxB,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC3B,UAAU,EAAE,MAAM,GACjB;IAAE,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,aAAa,EAAE,MAAM,EAAE,CAAA;CAAE,CAchE;AAED;;GAEG;AACH,wBAAgB,UAAU,CACxB,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC3B,UAAU,EAAE,MAAM,GACjB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAYxB"}
@@ -0,0 +1,132 @@
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.encrypt = encrypt;
37
+ exports.decrypt = decrypt;
38
+ exports.isEncrypted = isEncrypted;
39
+ exports.encryptEnv = encryptEnv;
40
+ exports.decryptEnv = decryptEnv;
41
+ const crypto = __importStar(require("crypto"));
42
+ const ENCRYPTED_PREFIX = 'ENCRYPTED:';
43
+ const ALGORITHM = 'aes-256-gcm';
44
+ const KEY_LEN = 32;
45
+ const SALT_LEN = 16;
46
+ const IV_LEN = 12;
47
+ /**
48
+ * Encrypt a plaintext value with a passphrase.
49
+ * Returns a string in the format: ENCRYPTED:<iv_hex>:<salt_hex>:<authTag_hex>:<ciphertext_hex>
50
+ */
51
+ function encrypt(plaintext, passphrase) {
52
+ const salt = crypto.randomBytes(SALT_LEN);
53
+ const iv = crypto.randomBytes(IV_LEN);
54
+ const key = crypto.scryptSync(passphrase, salt, KEY_LEN);
55
+ const cipher = crypto.createCipheriv(ALGORITHM, key, iv);
56
+ const encrypted = Buffer.concat([cipher.update(plaintext, 'utf8'), cipher.final()]);
57
+ const authTag = cipher.getAuthTag();
58
+ return (ENCRYPTED_PREFIX +
59
+ iv.toString('hex') + ':' +
60
+ salt.toString('hex') + ':' +
61
+ authTag.toString('hex') + ':' +
62
+ encrypted.toString('hex'));
63
+ }
64
+ /**
65
+ * Decrypt a value produced by encrypt().
66
+ * Returns the original plaintext.
67
+ * Throws if the passphrase is wrong or the value is malformed.
68
+ */
69
+ function decrypt(encryptedValue, passphrase) {
70
+ if (!encryptedValue.startsWith(ENCRYPTED_PREFIX)) {
71
+ throw new Error('Value is not an encrypted carry-on secret');
72
+ }
73
+ const parts = encryptedValue.slice(ENCRYPTED_PREFIX.length).split(':');
74
+ if (parts.length !== 4) {
75
+ throw new Error('Malformed encrypted value');
76
+ }
77
+ const [ivHex, saltHex, authTagHex, ciphertextHex] = parts;
78
+ const iv = Buffer.from(ivHex, 'hex');
79
+ const salt = Buffer.from(saltHex, 'hex');
80
+ const authTag = Buffer.from(authTagHex, 'hex');
81
+ const ciphertext = Buffer.from(ciphertextHex, 'hex');
82
+ const key = crypto.scryptSync(passphrase, salt, KEY_LEN);
83
+ const decipher = crypto.createDecipheriv(ALGORITHM, key, iv);
84
+ decipher.setAuthTag(authTag);
85
+ try {
86
+ const decrypted = Buffer.concat([decipher.update(ciphertext), decipher.final()]);
87
+ return decrypted.toString('utf8');
88
+ }
89
+ catch {
90
+ throw new Error('Decryption failed — wrong passphrase or corrupted data');
91
+ }
92
+ }
93
+ /**
94
+ * Returns true if the value is an encrypted carry-on secret.
95
+ */
96
+ function isEncrypted(value) {
97
+ return typeof value === 'string' && value.startsWith(ENCRYPTED_PREFIX);
98
+ }
99
+ /**
100
+ * Encrypt all string values in an env object.
101
+ * Returns the encrypted env and a list of key names that were encrypted.
102
+ */
103
+ function encryptEnv(env, passphrase) {
104
+ const encrypted = {};
105
+ const encryptedKeys = [];
106
+ for (const [key, value] of Object.entries(env)) {
107
+ if (value && !isEncrypted(value)) {
108
+ encrypted[key] = encrypt(value, passphrase);
109
+ encryptedKeys.push(key);
110
+ }
111
+ else {
112
+ encrypted[key] = value;
113
+ }
114
+ }
115
+ return { encrypted, encryptedKeys };
116
+ }
117
+ /**
118
+ * Decrypt all encrypted values in an env object.
119
+ */
120
+ function decryptEnv(env, passphrase) {
121
+ const decrypted = {};
122
+ for (const [key, value] of Object.entries(env)) {
123
+ if (isEncrypted(value)) {
124
+ decrypted[key] = decrypt(value, passphrase);
125
+ }
126
+ else {
127
+ decrypted[key] = value;
128
+ }
129
+ }
130
+ return decrypted;
131
+ }
132
+ //# sourceMappingURL=crypto.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crypto.js","sourceRoot":"","sources":["../../src/utils/crypto.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,57 @@
1
+ /**
2
+ * Normalize an absolute path to a portable format:
3
+ * - Replace home dir with ~
4
+ * - Normalize to forward slashes
5
+ * - Normalize npx.cmd → npx (Windows command wrappers)
6
+ */
7
+ export declare function normalizePath(p: string): string;
8
+ /**
9
+ * Expand a portable path back to an absolute platform path:
10
+ * - Expand ~ to home dir
11
+ * - Normalize slashes for current platform
12
+ */
13
+ export declare function expandPath(p: string): string;
14
+ /**
15
+ * Normalize a command name: strip .cmd / .exe extensions added on Windows
16
+ * e.g. npx.cmd → npx
17
+ */
18
+ export declare function normalizeCommand(cmd: string): string;
19
+ /**
20
+ * Expand a command for the current platform.
21
+ * On Windows, node-based commands may need .cmd wrapper.
22
+ * We leave commands as-is and let PATH resolution handle it.
23
+ */
24
+ export declare function expandCommand(cmd: string): string;
25
+ /**
26
+ * Normalize an array of args — replace any absolute paths inside args
27
+ */
28
+ export declare function normalizeArgs(args: string[]): string[];
29
+ /**
30
+ * Expand args back to platform paths
31
+ */
32
+ export declare function expandArgs(args: string[]): string[];
33
+ /**
34
+ * Get the Claude Desktop config path for the current platform
35
+ */
36
+ export declare function getClaudeDesktopConfigPath(): string;
37
+ /**
38
+ * Get the Claude Code settings path
39
+ */
40
+ export declare function getClaudeCodeSettingsPath(): string;
41
+ /**
42
+ * Get the Claude home directory
43
+ */
44
+ export declare function getClaudeHomeDir(): string;
45
+ /**
46
+ * Get the OpenCode config path
47
+ */
48
+ export declare function getOpenCodeConfigPath(): string;
49
+ /**
50
+ * Get the carry-on config directory
51
+ */
52
+ export declare function getCarryOnConfigDir(): string;
53
+ /**
54
+ * Get the carry-on config file path
55
+ */
56
+ export declare function getCarryOnConfigPath(): string;
57
+ //# sourceMappingURL=paths.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../src/utils/paths.ts"],"names":[],"mappings":"AAKA;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAS/C;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAU5C;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEjD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAQtD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAOnD;AAED;;GAEG;AACH,wBAAgB,0BAA0B,IAAI,MAAM,CAUnD;AAED;;GAEG;AACH,wBAAgB,yBAAyB,IAAI,MAAM,CAElD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,MAAM,CAM9C;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,CAE5C;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,CAE7C"}
@@ -0,0 +1,169 @@
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.normalizePath = normalizePath;
37
+ exports.expandPath = expandPath;
38
+ exports.normalizeCommand = normalizeCommand;
39
+ exports.expandCommand = expandCommand;
40
+ exports.normalizeArgs = normalizeArgs;
41
+ exports.expandArgs = expandArgs;
42
+ exports.getClaudeDesktopConfigPath = getClaudeDesktopConfigPath;
43
+ exports.getClaudeCodeSettingsPath = getClaudeCodeSettingsPath;
44
+ exports.getClaudeHomeDir = getClaudeHomeDir;
45
+ exports.getOpenCodeConfigPath = getOpenCodeConfigPath;
46
+ exports.getCarryOnConfigDir = getCarryOnConfigDir;
47
+ exports.getCarryOnConfigPath = getCarryOnConfigPath;
48
+ const os = __importStar(require("os"));
49
+ const path = __importStar(require("path"));
50
+ const HOME = os.homedir();
51
+ /**
52
+ * Normalize an absolute path to a portable format:
53
+ * - Replace home dir with ~
54
+ * - Normalize to forward slashes
55
+ * - Normalize npx.cmd → npx (Windows command wrappers)
56
+ */
57
+ function normalizePath(p) {
58
+ // Replace home directory prefix with ~
59
+ let normalized = p;
60
+ if (normalized.startsWith(HOME)) {
61
+ normalized = '~' + normalized.slice(HOME.length);
62
+ }
63
+ // Normalize backslashes to forward slashes
64
+ normalized = normalized.replace(/\\/g, '/');
65
+ return normalized;
66
+ }
67
+ /**
68
+ * Expand a portable path back to an absolute platform path:
69
+ * - Expand ~ to home dir
70
+ * - Normalize slashes for current platform
71
+ */
72
+ function expandPath(p) {
73
+ let expanded = p;
74
+ if (expanded.startsWith('~/') || expanded === '~') {
75
+ expanded = HOME + expanded.slice(1);
76
+ }
77
+ // On Windows, normalize to backslashes
78
+ if (process.platform === 'win32') {
79
+ expanded = expanded.replace(/\//g, '\\');
80
+ }
81
+ return expanded;
82
+ }
83
+ /**
84
+ * Normalize a command name: strip .cmd / .exe extensions added on Windows
85
+ * e.g. npx.cmd → npx
86
+ */
87
+ function normalizeCommand(cmd) {
88
+ return cmd.replace(/\.(cmd|exe|bat)$/i, '');
89
+ }
90
+ /**
91
+ * Expand a command for the current platform.
92
+ * On Windows, node-based commands may need .cmd wrapper.
93
+ * We leave commands as-is and let PATH resolution handle it.
94
+ */
95
+ function expandCommand(cmd) {
96
+ return cmd;
97
+ }
98
+ /**
99
+ * Normalize an array of args — replace any absolute paths inside args
100
+ */
101
+ function normalizeArgs(args) {
102
+ return args.map(arg => {
103
+ // If the arg looks like an absolute path (starts with / or X:\), normalize it
104
+ if (/^[a-zA-Z]:[\\\/]/.test(arg) || arg.startsWith('/')) {
105
+ return normalizePath(arg);
106
+ }
107
+ return arg;
108
+ });
109
+ }
110
+ /**
111
+ * Expand args back to platform paths
112
+ */
113
+ function expandArgs(args) {
114
+ return args.map(arg => {
115
+ if (arg.startsWith('~')) {
116
+ return expandPath(arg);
117
+ }
118
+ return arg;
119
+ });
120
+ }
121
+ /**
122
+ * Get the Claude Desktop config path for the current platform
123
+ */
124
+ function getClaudeDesktopConfigPath() {
125
+ if (process.platform === 'win32') {
126
+ const appData = process.env['APPDATA'] || path.join(HOME, 'AppData', 'Roaming');
127
+ return path.join(appData, 'Claude', 'claude_desktop_config.json');
128
+ }
129
+ if (process.platform === 'darwin') {
130
+ return path.join(HOME, 'Library', 'Application Support', 'Claude', 'claude_desktop_config.json');
131
+ }
132
+ // Linux
133
+ return path.join(HOME, '.config', 'Claude', 'claude_desktop_config.json');
134
+ }
135
+ /**
136
+ * Get the Claude Code settings path
137
+ */
138
+ function getClaudeCodeSettingsPath() {
139
+ return path.join(HOME, '.claude', 'settings.json');
140
+ }
141
+ /**
142
+ * Get the Claude home directory
143
+ */
144
+ function getClaudeHomeDir() {
145
+ return path.join(HOME, '.claude');
146
+ }
147
+ /**
148
+ * Get the OpenCode config path
149
+ */
150
+ function getOpenCodeConfigPath() {
151
+ if (process.platform === 'win32') {
152
+ const appData = process.env['APPDATA'] || path.join(HOME, 'AppData', 'Roaming');
153
+ return path.join(appData, 'opencode', 'config.json');
154
+ }
155
+ return path.join(HOME, '.config', 'opencode', 'config.json');
156
+ }
157
+ /**
158
+ * Get the carry-on config directory
159
+ */
160
+ function getCarryOnConfigDir() {
161
+ return path.join(HOME, '.carry-on');
162
+ }
163
+ /**
164
+ * Get the carry-on config file path
165
+ */
166
+ function getCarryOnConfigPath() {
167
+ return path.join(getCarryOnConfigDir(), 'config.json');
168
+ }
169
+ //# sourceMappingURL=paths.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/utils/paths.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /** Prompt the user for text input */
2
+ export declare function ask(question: string): Promise<string>;
3
+ /** Prompt for a hidden password (no echo) */
4
+ export declare function askSecret(question: string): Promise<string>;
5
+ //# sourceMappingURL=prompt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../../src/utils/prompt.ts"],"names":[],"mappings":"AAEA,qCAAqC;AACrC,wBAAgB,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAQrD;AAED,6CAA6C;AAC7C,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAmC3D"}
@@ -0,0 +1,85 @@
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.ask = ask;
37
+ exports.askSecret = askSecret;
38
+ const readline = __importStar(require("readline"));
39
+ /** Prompt the user for text input */
40
+ function ask(question) {
41
+ const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
42
+ return new Promise((resolve) => {
43
+ rl.question(question, (answer) => {
44
+ rl.close();
45
+ resolve(answer.trim());
46
+ });
47
+ });
48
+ }
49
+ /** Prompt for a hidden password (no echo) */
50
+ function askSecret(question) {
51
+ return new Promise((resolve) => {
52
+ const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
53
+ process.stdout.write(question);
54
+ // Disable echo
55
+ if (process.stdin.isTTY) {
56
+ process.stdin.setRawMode(true);
57
+ }
58
+ let input = '';
59
+ process.stdin.resume();
60
+ process.stdin.setEncoding('utf8');
61
+ const onData = (char) => {
62
+ if (char === '\n' || char === '\r' || char === '\u0004') {
63
+ process.stdout.write('\n');
64
+ if (process.stdin.isTTY) {
65
+ process.stdin.setRawMode(false);
66
+ }
67
+ process.stdin.removeListener('data', onData);
68
+ rl.close();
69
+ resolve(input);
70
+ }
71
+ else if (char === '\u0003') {
72
+ process.stdout.write('\n');
73
+ process.exit(1);
74
+ }
75
+ else if (char === '\u007f' || char === '\b') {
76
+ input = input.slice(0, -1);
77
+ }
78
+ else {
79
+ input += char;
80
+ }
81
+ };
82
+ process.stdin.on('data', onData);
83
+ });
84
+ }
85
+ //# sourceMappingURL=prompt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../src/utils/prompt.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGA,kBAQC;AAGD,8BAmCC;AAjDD,mDAAqC;AAErC,qCAAqC;AACrC,SAAgB,GAAG,CAAC,QAAgB;IAClC,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACtF,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,EAAE;YAC/B,EAAE,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QACzB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,6CAA6C;AAC7C,SAAgB,SAAS,CAAC,QAAgB;IACxC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QACtF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAE/B,eAAe;QACf,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;YACvB,OAAO,CAAC,KAA2B,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QACxD,CAAC;QAED,IAAI,KAAK,GAAG,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;QACvB,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAElC,MAAM,MAAM,GAAG,CAAC,IAAY,EAAE,EAAE;YAC9B,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACxD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAC3B,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;oBACvB,OAAO,CAAC,KAA2B,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;gBACzD,CAAC;gBACD,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;gBAC7C,EAAE,CAAC,KAAK,EAAE,CAAC;gBACX,OAAO,CAAC,KAAK,CAAC,CAAC;YACjB,CAAC;iBAAM,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC7B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAC3B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;iBAAM,IAAI,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;gBAC9C,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAC7B,CAAC;iBAAM,CAAC;gBACN,KAAK,IAAI,IAAI,CAAC;YAChB,CAAC;QACH,CAAC,CAAC;QAEF,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;AACL,CAAC"}
package/package.json ADDED
@@ -0,0 +1,52 @@
1
+ {
2
+ "name": "mcpocket",
3
+ "version": "0.1.0",
4
+ "description": "Your AI setup. Everywhere you work. Syncs Claude Code agents, skills, plugins, and MCPs across machines.",
5
+ "main": "dist/cli.js",
6
+ "bin": {
7
+ "carry-on": "./dist/cli.js"
8
+ },
9
+ "scripts": {
10
+ "build": "tsc",
11
+ "dev": "tsc --watch",
12
+ "prepublishOnly": "pnpm build"
13
+ },
14
+ "files": [
15
+ "dist/",
16
+ "README.md",
17
+ "LICENSE"
18
+ ],
19
+ "keywords": [
20
+ "claude",
21
+ "claude-code",
22
+ "mcp",
23
+ "ai",
24
+ "sync",
25
+ "agents",
26
+ "skills",
27
+ "plugins",
28
+ "dotfiles",
29
+ "opencode"
30
+ ],
31
+ "author": "davidsmorais",
32
+ "license": "MIT",
33
+ "repository": {
34
+ "type": "git",
35
+ "url": "git+https://github.com/davidsmorais/carry-on.git"
36
+ },
37
+ "homepage": "https://github.com/davidsmorais/carry-on#readme",
38
+ "bugs": {
39
+ "url": "https://github.com/davidsmorais/carry-on/issues"
40
+ },
41
+ "engines": {
42
+ "node": ">=18"
43
+ },
44
+ "type": "commonjs",
45
+ "dependencies": {
46
+ "commander": "^14.0.3"
47
+ },
48
+ "devDependencies": {
49
+ "@types/node": "^25.5.2",
50
+ "typescript": "^6.0.2"
51
+ }
52
+ }