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.
- package/LICENSE +21 -0
- package/README.md +86 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +35 -0
- package/dist/cli.js.map +1 -0
- package/dist/clients/claude-code.d.ts +6 -0
- package/dist/clients/claude-code.d.ts.map +1 -0
- package/dist/clients/claude-code.js +80 -0
- package/dist/clients/claude-code.js.map +1 -0
- package/dist/clients/claude-desktop.d.ts +5 -0
- package/dist/clients/claude-desktop.d.ts.map +1 -0
- package/dist/clients/claude-desktop.js +78 -0
- package/dist/clients/claude-desktop.js.map +1 -0
- package/dist/clients/opencode.d.ts +5 -0
- package/dist/clients/opencode.d.ts.map +1 -0
- package/dist/clients/opencode.js +79 -0
- package/dist/clients/opencode.js.map +1 -0
- package/dist/clients/types.d.ts +29 -0
- package/dist/clients/types.d.ts.map +1 -0
- package/dist/clients/types.js +3 -0
- package/dist/clients/types.js.map +1 -0
- package/dist/commands/init.d.ts +2 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +71 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/pull.d.ts +2 -0
- package/dist/commands/pull.d.ts.map +1 -0
- package/dist/commands/pull.js +143 -0
- package/dist/commands/pull.js.map +1 -0
- package/dist/commands/push.d.ts +2 -0
- package/dist/commands/push.d.ts.map +1 -0
- package/dist/commands/push.js +112 -0
- package/dist/commands/push.js.map +1 -0
- package/dist/commands/status.d.ts +2 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +128 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/config.d.ts +12 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +67 -0
- package/dist/config.js.map +1 -0
- package/dist/storage/github.d.ts +19 -0
- package/dist/storage/github.d.ts.map +1 -0
- package/dist/storage/github.js +168 -0
- package/dist/storage/github.js.map +1 -0
- package/dist/sync/agents.d.ts +5 -0
- package/dist/sync/agents.d.ts.map +1 -0
- package/dist/sync/agents.js +97 -0
- package/dist/sync/agents.js.map +1 -0
- package/dist/sync/mcp.d.ts +41 -0
- package/dist/sync/mcp.d.ts.map +1 -0
- package/dist/sync/mcp.js +102 -0
- package/dist/sync/mcp.js.map +1 -0
- package/dist/sync/plugins.d.ts +18 -0
- package/dist/sync/plugins.d.ts.map +1 -0
- package/dist/sync/plugins.js +126 -0
- package/dist/sync/plugins.js.map +1 -0
- package/dist/sync/skills.d.ts +5 -0
- package/dist/sync/skills.d.ts.map +1 -0
- package/dist/sync/skills.js +94 -0
- package/dist/sync/skills.js.map +1 -0
- package/dist/utils/crypto.d.ts +28 -0
- package/dist/utils/crypto.d.ts.map +1 -0
- package/dist/utils/crypto.js +132 -0
- package/dist/utils/crypto.js.map +1 -0
- package/dist/utils/paths.d.ts +57 -0
- package/dist/utils/paths.d.ts.map +1 -0
- package/dist/utils/paths.js +169 -0
- package/dist/utils/paths.js.map +1 -0
- package/dist/utils/prompt.d.ts +5 -0
- package/dist/utils/prompt.d.ts.map +1 -0
- package/dist/utils/prompt.js +85 -0
- package/dist/utils/prompt.js.map +1 -0
- 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 @@
|
|
|
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
|
+
}
|