mcpocket 0.1.0 → 0.2.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/CHANGELOG.md +30 -0
- package/LICENSE +1 -1
- package/README.md +309 -37
- package/dist/cli.js +30 -9
- package/dist/cli.js.map +1 -1
- package/dist/clients/antigravity.d.ts +5 -0
- package/dist/clients/antigravity.d.ts.map +1 -0
- package/dist/clients/antigravity.js +94 -0
- package/dist/clients/antigravity.js.map +1 -0
- package/dist/clients/claude-code.js +2 -2
- package/dist/clients/claude-desktop.js +2 -2
- package/dist/clients/codex.d.ts +5 -0
- package/dist/clients/codex.d.ts.map +1 -0
- package/dist/clients/codex.js +78 -0
- package/dist/clients/codex.js.map +1 -0
- package/dist/clients/copilot-cli.d.ts +5 -0
- package/dist/clients/copilot-cli.d.ts.map +1 -0
- package/dist/clients/copilot-cli.js +90 -0
- package/dist/clients/copilot-cli.js.map +1 -0
- package/dist/clients/cursor.d.ts +5 -0
- package/dist/clients/cursor.d.ts.map +1 -0
- package/dist/clients/cursor.js +77 -0
- package/dist/clients/cursor.js.map +1 -0
- package/dist/clients/opencode.js +2 -2
- package/dist/clients/providers.d.ts +7 -0
- package/dist/clients/providers.d.ts.map +1 -0
- package/dist/clients/providers.js +80 -0
- package/dist/clients/providers.js.map +1 -0
- package/dist/clients/types.d.ts +27 -1
- package/dist/clients/types.d.ts.map +1 -1
- package/dist/commands/dedupe.d.ts +2 -0
- package/dist/commands/dedupe.d.ts.map +1 -0
- package/dist/commands/dedupe.js +114 -0
- package/dist/commands/dedupe.js.map +1 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +111 -43
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/provider-options.d.ts +18 -0
- package/dist/commands/provider-options.d.ts.map +1 -0
- package/dist/commands/provider-options.js +34 -0
- package/dist/commands/provider-options.js.map +1 -0
- package/dist/commands/pull.d.ts +2 -1
- package/dist/commands/pull.d.ts.map +1 -1
- package/dist/commands/pull.js +101 -72
- package/dist/commands/pull.js.map +1 -1
- package/dist/commands/push.d.ts +2 -1
- package/dist/commands/push.d.ts.map +1 -1
- package/dist/commands/push.js +107 -51
- package/dist/commands/push.js.map +1 -1
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +38 -23
- package/dist/commands/status.js.map +1 -1
- package/dist/config.d.ts +11 -7
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +14 -9
- package/dist/config.js.map +1 -1
- package/dist/storage/gist.d.ts +21 -0
- package/dist/storage/gist.d.ts.map +1 -0
- package/dist/storage/gist.js +149 -0
- package/dist/storage/gist.js.map +1 -0
- package/dist/storage/github.d.ts +1 -1
- package/dist/storage/github.js +8 -8
- package/dist/sync/agents.d.ts +6 -2
- package/dist/sync/agents.d.ts.map +1 -1
- package/dist/sync/agents.js +35 -33
- package/dist/sync/agents.js.map +1 -1
- package/dist/sync/mcp.d.ts.map +1 -1
- package/dist/sync/mcp.js +75 -9
- package/dist/sync/mcp.js.map +1 -1
- package/dist/sync/plugins.d.ts +5 -1
- package/dist/sync/plugins.d.ts.map +1 -1
- package/dist/sync/plugins.js +16 -2
- package/dist/sync/plugins.js.map +1 -1
- package/dist/sync/pocket.d.ts +3 -0
- package/dist/sync/pocket.d.ts.map +1 -0
- package/dist/sync/pocket.js +16 -0
- package/dist/sync/pocket.js.map +1 -0
- package/dist/sync/skills.d.ts +3 -2
- package/dist/sync/skills.d.ts.map +1 -1
- package/dist/sync/skills.js +28 -18
- package/dist/sync/skills.js.map +1 -1
- package/dist/utils/crypto.d.ts +12 -1
- package/dist/utils/crypto.d.ts.map +1 -1
- package/dist/utils/crypto.js +19 -5
- package/dist/utils/crypto.js.map +1 -1
- package/dist/utils/files.d.ts +16 -0
- package/dist/utils/files.d.ts.map +1 -0
- package/dist/utils/files.js +168 -0
- package/dist/utils/files.js.map +1 -0
- package/dist/utils/paths.d.ts +20 -4
- package/dist/utils/paths.d.ts.map +1 -1
- package/dist/utils/paths.js +46 -11
- package/dist/utils/paths.js.map +1 -1
- package/dist/utils/sparkle.d.ts +60 -0
- package/dist/utils/sparkle.d.ts.map +1 -0
- package/dist/utils/sparkle.js +131 -0
- package/dist/utils/sparkle.js.map +1 -0
- package/package.json +6 -4
package/dist/commands/push.js
CHANGED
|
@@ -34,79 +34,135 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
34
34
|
})();
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
36
|
exports.pushCommand = pushCommand;
|
|
37
|
-
const fs = __importStar(require("fs"));
|
|
38
|
-
const path = __importStar(require("path"));
|
|
37
|
+
const fs = __importStar(require("node:fs"));
|
|
38
|
+
const path = __importStar(require("node:path"));
|
|
39
39
|
const config_js_1 = require("../config.js");
|
|
40
40
|
const github_js_1 = require("../storage/github.js");
|
|
41
|
-
const
|
|
42
|
-
const claude_code_js_1 = require("../clients/claude-code.js");
|
|
43
|
-
const opencode_js_1 = require("../clients/opencode.js");
|
|
41
|
+
const gist_js_1 = require("../storage/gist.js");
|
|
44
42
|
const mcp_js_1 = require("../sync/mcp.js");
|
|
45
43
|
const plugins_js_1 = require("../sync/plugins.js");
|
|
46
44
|
const agents_js_1 = require("../sync/agents.js");
|
|
47
45
|
const skills_js_1 = require("../sync/skills.js");
|
|
46
|
+
const pocket_js_1 = require("../sync/pocket.js");
|
|
47
|
+
const provider_options_js_1 = require("./provider-options.js");
|
|
48
48
|
const prompt_js_1 = require("../utils/prompt.js");
|
|
49
|
-
|
|
49
|
+
const sparkle_js_1 = require("../utils/sparkle.js");
|
|
50
|
+
async function pushCommand(options = {}) {
|
|
50
51
|
const config = (0, config_js_1.readConfig)();
|
|
51
52
|
const repoDir = (0, config_js_1.getLocalRepoDir)();
|
|
52
|
-
|
|
53
|
-
|
|
53
|
+
const selection = (0, provider_options_js_1.resolveProviderSelection)(options);
|
|
54
|
+
(0, sparkle_js_1.section)('Push');
|
|
55
|
+
if (selection.isFiltered) {
|
|
56
|
+
(0, sparkle_js_1.sparkle)(`Sync scope: ${(0, provider_options_js_1.formatProviderList)(selection.selected)}`);
|
|
57
|
+
}
|
|
58
|
+
preparePocketDirectory(config.storageType, repoDir, config.githubToken, config.repoCloneUrl);
|
|
59
|
+
const prunedEntries = (0, pocket_js_1.prunePocketDir)(repoDir);
|
|
60
|
+
if (prunedEntries > 0) {
|
|
61
|
+
(0, sparkle_js_1.sparkle)(`Removed ${prunedEntries} stale pocket entr${prunedEntries === 1 ? 'y' : 'ies'}`);
|
|
62
|
+
}
|
|
63
|
+
const passphrase = await promptForPushPassphrase();
|
|
64
|
+
(0, sparkle_js_1.sparkle)(sparkle_js_1.WITTY.readingMCP);
|
|
65
|
+
const merged = (0, mcp_js_1.mergeMcpSources)(...selection.selected.map((provider) => provider.readMcpServers()));
|
|
66
|
+
const serverCount = Object.keys(merged).length;
|
|
67
|
+
(0, sparkle_js_1.sparkle)(`Found ${serverCount} MCP server(s) across ${selection.selected.length} provider(s)`);
|
|
68
|
+
// Write mcp-config.json
|
|
69
|
+
(0, sparkle_js_1.sparkle)(sparkle_js_1.WITTY.encrypting);
|
|
70
|
+
const portableConfig = (0, mcp_js_1.buildPortableConfig)(merged, passphrase);
|
|
71
|
+
fs.writeFileSync(path.join(repoDir, 'mcp-config.json'), JSON.stringify(portableConfig, null, 2), 'utf8');
|
|
72
|
+
const assetSummary = syncClaudeHomeAssetsToPocket(repoDir, selection.syncsClaudeHomeAssets, selection.isFiltered);
|
|
73
|
+
// Push to remote
|
|
74
|
+
(0, sparkle_js_1.sparkle)(sparkle_js_1.WITTY.pushing);
|
|
75
|
+
if (config.storageType === 'gist') {
|
|
76
|
+
try {
|
|
77
|
+
const files = (0, gist_js_1.collectFilesFromDir)(repoDir);
|
|
78
|
+
await (0, gist_js_1.updateGist)(config.githubToken, config.gistId, files);
|
|
79
|
+
(0, sparkle_js_1.celebrate)(sparkle_js_1.WITTY.pushDone);
|
|
80
|
+
}
|
|
81
|
+
catch (err) {
|
|
82
|
+
(0, sparkle_js_1.oops)(`Gist push failed: ${err.message}`);
|
|
83
|
+
process.exit(1);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
(0, github_js_1.ensureGitConfig)(repoDir);
|
|
88
|
+
try {
|
|
89
|
+
(0, github_js_1.commitAndPush)(repoDir, config.githubToken, config.repoCloneUrl, 'mcpocket: push');
|
|
90
|
+
(0, sparkle_js_1.celebrate)(sparkle_js_1.WITTY.pushDone);
|
|
91
|
+
}
|
|
92
|
+
catch (err) {
|
|
93
|
+
(0, sparkle_js_1.oops)(`Push failed: ${err.message}`);
|
|
94
|
+
process.exit(1);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
(0, sparkle_js_1.section)('Summary');
|
|
98
|
+
(0, sparkle_js_1.stat)('Storage', config.storageType === 'gist' ? `gist (${config.gistUrl})` : `repo (${config.repoHtmlUrl})`);
|
|
99
|
+
(0, sparkle_js_1.stat)('Providers', (0, provider_options_js_1.formatProviderList)(selection.selected));
|
|
100
|
+
(0, sparkle_js_1.stat)('MCPs', serverCount.toString());
|
|
101
|
+
(0, sparkle_js_1.stat)('Plugins', `${assetSummary.manifestCount} manifest file(s)`);
|
|
102
|
+
(0, sparkle_js_1.stat)('Agents', assetSummary.agentResult.synced.toString());
|
|
103
|
+
(0, sparkle_js_1.stat)('Skills', assetSummary.skillResult.synced.toString());
|
|
104
|
+
console.log('');
|
|
105
|
+
}
|
|
106
|
+
function preparePocketDirectory(storageType, repoDir, githubToken, repoCloneUrl) {
|
|
107
|
+
if (storageType === 'gist') {
|
|
108
|
+
fs.mkdirSync(repoDir, { recursive: true });
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
(0, sparkle_js_1.sparkle)(sparkle_js_1.WITTY.pulling);
|
|
54
112
|
try {
|
|
55
|
-
(0, github_js_1.pullRepo)(repoDir,
|
|
113
|
+
(0, github_js_1.pullRepo)(repoDir, githubToken, repoCloneUrl);
|
|
56
114
|
}
|
|
57
115
|
catch (err) {
|
|
58
|
-
|
|
116
|
+
(0, sparkle_js_1.heads_up)(`Could not pull latest — ${err.message}`);
|
|
59
117
|
}
|
|
60
|
-
|
|
61
|
-
|
|
118
|
+
}
|
|
119
|
+
async function promptForPushPassphrase() {
|
|
120
|
+
const passphrase = await (0, prompt_js_1.askSecret)(' 🔒 Passphrase to encrypt secrets: ');
|
|
62
121
|
if (!passphrase) {
|
|
63
|
-
|
|
122
|
+
(0, sparkle_js_1.oops)('Passphrase cannot be empty.');
|
|
64
123
|
process.exit(1);
|
|
65
124
|
}
|
|
66
|
-
const confirm = await (0, prompt_js_1.askSecret)('Confirm passphrase: ');
|
|
125
|
+
const confirm = await (0, prompt_js_1.askSecret)(' 🔒 Confirm passphrase: ');
|
|
67
126
|
if (passphrase !== confirm) {
|
|
68
|
-
|
|
127
|
+
(0, sparkle_js_1.oops)('Passphrases don\'t match. Give it another whirl!');
|
|
69
128
|
process.exit(1);
|
|
70
129
|
}
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
130
|
+
return passphrase;
|
|
131
|
+
}
|
|
132
|
+
function syncClaudeHomeAssetsToPocket(repoDir, shouldSync, showSkipMessage) {
|
|
133
|
+
if (!shouldSync) {
|
|
134
|
+
if (showSkipMessage) {
|
|
135
|
+
(0, sparkle_js_1.sparkle)('Skipping Claude home plugin manifests for this provider selection');
|
|
136
|
+
(0, sparkle_js_1.sparkle)('Skipping Claude home agents for this provider selection');
|
|
137
|
+
(0, sparkle_js_1.sparkle)('Skipping Claude home skills for this provider selection');
|
|
138
|
+
}
|
|
139
|
+
return {
|
|
140
|
+
manifestCount: 0,
|
|
141
|
+
pluginResult: { synced: 0, removed: 0 },
|
|
142
|
+
agentResult: { synced: 0, removed: 0 },
|
|
143
|
+
skillResult: { synced: 0, removed: 0 },
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
(0, sparkle_js_1.sparkle)(sparkle_js_1.WITTY.readingPlugins);
|
|
83
147
|
const manifests = (0, plugins_js_1.readPluginManifests)();
|
|
84
148
|
const manifestCount = Object.keys(manifests).length;
|
|
85
|
-
|
|
86
|
-
(0, plugins_js_1.writePluginManifestsToRepo)(manifests, repoDir);
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
const agentCount = (0, agents_js_1.writeAgentsToRepo)(repoDir);
|
|
90
|
-
console.log(` Synced ${agentCount} agent file(s)`);
|
|
91
|
-
// Sync skills
|
|
92
|
-
console.log('\nSyncing skills...');
|
|
93
|
-
const skillCount = (0, skills_js_1.writeSkillsToRepo)(repoDir);
|
|
94
|
-
console.log(` Synced ${skillCount} skill file(s)`);
|
|
95
|
-
// Commit and push
|
|
96
|
-
console.log('\nPushing to GitHub...');
|
|
97
|
-
(0, github_js_1.ensureGitConfig)(repoDir);
|
|
98
|
-
try {
|
|
99
|
-
(0, github_js_1.commitAndPush)(repoDir, config.githubToken, config.repoCloneUrl, 'carry-on: push');
|
|
100
|
-
console.log(`\n✓ Pushed to ${config.repoHtmlUrl}`);
|
|
149
|
+
(0, sparkle_js_1.sparkle)(`Found ${manifestCount} plugin manifest file(s)`);
|
|
150
|
+
const pluginResult = (0, plugins_js_1.writePluginManifestsToRepo)(manifests, repoDir);
|
|
151
|
+
if (pluginResult.removed > 0) {
|
|
152
|
+
(0, sparkle_js_1.sparkle)(`Removed ${pluginResult.removed} stale plugin manifest file(s) from the pocket`);
|
|
101
153
|
}
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
154
|
+
(0, sparkle_js_1.sparkle)(sparkle_js_1.WITTY.readingAgents);
|
|
155
|
+
const agentResult = (0, agents_js_1.writeAgentsToRepo)(repoDir);
|
|
156
|
+
(0, sparkle_js_1.sparkle)(`Synced ${agentResult.synced} agent file(s)`);
|
|
157
|
+
if (agentResult.removed > 0) {
|
|
158
|
+
(0, sparkle_js_1.sparkle)(`Removed ${agentResult.removed} stale agent file(s) from the pocket`);
|
|
159
|
+
}
|
|
160
|
+
(0, sparkle_js_1.sparkle)(sparkle_js_1.WITTY.readingSkills);
|
|
161
|
+
const skillResult = (0, skills_js_1.writeSkillsToRepo)(repoDir);
|
|
162
|
+
(0, sparkle_js_1.sparkle)(`Synced ${skillResult.synced} skill file(s)`);
|
|
163
|
+
if (skillResult.removed > 0) {
|
|
164
|
+
(0, sparkle_js_1.sparkle)(`Removed ${skillResult.removed} stale skill file(s) from the pocket`);
|
|
105
165
|
}
|
|
106
|
-
|
|
107
|
-
console.log(` MCPs: ${serverCount}`);
|
|
108
|
-
console.log(` Plugins: ${manifestCount} manifest file(s)`);
|
|
109
|
-
console.log(` Agents: ${agentCount}`);
|
|
110
|
-
console.log(` Skills: ${skillCount}`);
|
|
166
|
+
return { manifestCount, pluginResult, agentResult, skillResult };
|
|
111
167
|
}
|
|
112
168
|
//# sourceMappingURL=push.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"push.js","sourceRoot":"","sources":["../../src/commands/push.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"push.js","sourceRoot":"","sources":["../../src/commands/push.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsBA,kCAmEC;AAzFD,4CAA8B;AAC9B,gDAAkC;AAClC,4CAA2D;AAC3D,oDAAgF;AAChF,gDAAqE;AACrE,2CAAsE;AACtE,mDAAqF;AACrF,iDAAsD;AACtD,iDAAsD;AACtD,iDAAmD;AACnD,+DAAqF;AAErF,kDAA+C;AAC/C,oDAA+F;AASxF,KAAK,UAAU,WAAW,CAAC,UAA+B,EAAE;IACjE,MAAM,MAAM,GAAG,IAAA,sBAAU,GAAE,CAAC;IAC5B,MAAM,OAAO,GAAG,IAAA,2BAAe,GAAE,CAAC;IAClC,MAAM,SAAS,GAAG,IAAA,8CAAwB,EAAC,OAAO,CAAC,CAAC;IAEpD,IAAA,oBAAO,EAAC,MAAM,CAAC,CAAC;IAEhB,IAAI,SAAS,CAAC,UAAU,EAAE,CAAC;QACzB,IAAA,oBAAO,EAAC,eAAe,IAAA,wCAAkB,EAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IACnE,CAAC;IAED,sBAAsB,CAAC,MAAM,CAAC,WAAW,EAAE,OAAO,EAAE,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC;IAE7F,MAAM,aAAa,GAAG,IAAA,0BAAc,EAAC,OAAO,CAAC,CAAC;IAC9C,IAAI,aAAa,GAAG,CAAC,EAAE,CAAC;QACtB,IAAA,oBAAO,EAAC,WAAW,aAAa,qBAAqB,aAAa,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;IAC5F,CAAC;IAED,MAAM,UAAU,GAAG,MAAM,uBAAuB,EAAE,CAAC;IAEnD,IAAA,oBAAO,EAAC,kBAAK,CAAC,UAAU,CAAC,CAAC;IAC1B,MAAM,MAAM,GAAG,IAAA,wBAAe,EAAC,GAAG,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC;IACnG,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC;IAC/C,IAAA,oBAAO,EAAC,SAAS,WAAW,yBAAyB,SAAS,CAAC,QAAQ,CAAC,MAAM,cAAc,CAAC,CAAC;IAE9F,wBAAwB;IACxB,IAAA,oBAAO,EAAC,kBAAK,CAAC,UAAU,CAAC,CAAC;IAC1B,MAAM,cAAc,GAAG,IAAA,4BAAmB,EAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAC/D,EAAE,CAAC,aAAa,CACd,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,iBAAiB,CAAC,EACrC,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC,EACvC,MAAM,CACP,CAAC;IAEF,MAAM,YAAY,GAAG,4BAA4B,CAAC,OAAO,EAAE,SAAS,CAAC,qBAAqB,EAAE,SAAS,CAAC,UAAU,CAAC,CAAC;IAElH,iBAAiB;IACjB,IAAA,oBAAO,EAAC,kBAAK,CAAC,OAAO,CAAC,CAAC;IAEvB,IAAI,MAAM,CAAC,WAAW,KAAK,MAAM,EAAE,CAAC;QAClC,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,IAAA,6BAAmB,EAAC,OAAO,CAAC,CAAC;YAC3C,MAAM,IAAA,oBAAU,EAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,MAAO,EAAE,KAAK,CAAC,CAAC;YAC5D,IAAA,sBAAS,EAAC,kBAAK,CAAC,QAAQ,CAAC,CAAC;QAC5B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAA,iBAAI,EAAC,qBAAsB,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;YACpD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;SAAM,CAAC;QACN,IAAA,2BAAe,EAAC,OAAO,CAAC,CAAC;QACzB,IAAI,CAAC;YACH,IAAA,yBAAa,EAAC,OAAO,EAAE,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,YAAa,EAAE,gBAAgB,CAAC,CAAC;YACnF,IAAA,sBAAS,EAAC,kBAAK,CAAC,QAAQ,CAAC,CAAC;QAC5B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAA,iBAAI,EAAC,gBAAiB,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;YAC/C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAED,IAAA,oBAAO,EAAC,SAAS,CAAC,CAAC;IACnB,IAAA,iBAAI,EAAC,SAAS,EAAE,MAAM,CAAC,WAAW,KAAK,MAAM,CAAC,CAAC,CAAC,SAAS,MAAM,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,SAAS,MAAM,CAAC,WAAW,GAAG,CAAC,CAAC;IAC7G,IAAA,iBAAI,EAAC,WAAW,EAAE,IAAA,wCAAkB,EAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC1D,IAAA,iBAAI,EAAC,MAAM,EAAE,WAAW,CAAC,QAAQ,EAAE,CAAC,CAAC;IACrC,IAAA,iBAAI,EAAC,SAAS,EAAE,GAAG,YAAY,CAAC,aAAa,mBAAmB,CAAC,CAAC;IAClE,IAAA,iBAAI,EAAC,QAAQ,EAAE,YAAY,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC3D,IAAA,iBAAI,EAAC,QAAQ,EAAE,YAAY,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC3D,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAClB,CAAC;AAED,SAAS,sBAAsB,CAC7B,WAA4B,EAC5B,OAAe,EACf,WAAmB,EACnB,YAAqB;IAErB,IAAI,WAAW,KAAK,MAAM,EAAE,CAAC;QAC3B,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3C,OAAO;IACT,CAAC;IAED,IAAA,oBAAO,EAAC,kBAAK,CAAC,OAAO,CAAC,CAAC;IACvB,IAAI,CAAC;QACH,IAAA,oBAAQ,EAAC,OAAO,EAAE,WAAW,EAAE,YAAa,CAAC,CAAC;IAChD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAA,qBAAQ,EAAC,2BAA4B,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;IAChE,CAAC;AACH,CAAC;AAED,KAAK,UAAU,uBAAuB;IACpC,MAAM,UAAU,GAAG,MAAM,IAAA,qBAAS,EAAC,sCAAsC,CAAC,CAAC;IAC3E,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,IAAA,iBAAI,EAAC,6BAA6B,CAAC,CAAC;QACpC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,IAAA,qBAAS,EAAC,2BAA2B,CAAC,CAAC;IAC7D,IAAI,UAAU,KAAK,OAAO,EAAE,CAAC;QAC3B,IAAA,iBAAI,EAAC,kDAAkD,CAAC,CAAC;QACzD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,SAAS,4BAA4B,CACnC,OAAe,EACf,UAAmB,EACnB,eAAwB;IAExB,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,IAAI,eAAe,EAAE,CAAC;YACpB,IAAA,oBAAO,EAAC,mEAAmE,CAAC,CAAC;YAC7E,IAAA,oBAAO,EAAC,yDAAyD,CAAC,CAAC;YACnE,IAAA,oBAAO,EAAC,yDAAyD,CAAC,CAAC;QACrE,CAAC;QAED,OAAO;YACL,aAAa,EAAE,CAAC;YAChB,YAAY,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE;YACvC,WAAW,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE;YACtC,WAAW,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE;SACvC,CAAC;IACJ,CAAC;IAED,IAAA,oBAAO,EAAC,kBAAK,CAAC,cAAc,CAAC,CAAC;IAC9B,MAAM,SAAS,GAAG,IAAA,gCAAmB,GAAE,CAAC;IACxC,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC;IACpD,IAAA,oBAAO,EAAC,SAAS,aAAa,0BAA0B,CAAC,CAAC;IAC1D,MAAM,YAAY,GAAG,IAAA,uCAA0B,EAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IACpE,IAAI,YAAY,CAAC,OAAO,GAAG,CAAC,EAAE,CAAC;QAC7B,IAAA,oBAAO,EAAC,WAAW,YAAY,CAAC,OAAO,gDAAgD,CAAC,CAAC;IAC3F,CAAC;IAED,IAAA,oBAAO,EAAC,kBAAK,CAAC,aAAa,CAAC,CAAC;IAC7B,MAAM,WAAW,GAAG,IAAA,6BAAiB,EAAC,OAAO,CAAC,CAAC;IAC/C,IAAA,oBAAO,EAAC,UAAU,WAAW,CAAC,MAAM,gBAAgB,CAAC,CAAC;IACtD,IAAI,WAAW,CAAC,OAAO,GAAG,CAAC,EAAE,CAAC;QAC5B,IAAA,oBAAO,EAAC,WAAW,WAAW,CAAC,OAAO,sCAAsC,CAAC,CAAC;IAChF,CAAC;IAED,IAAA,oBAAO,EAAC,kBAAK,CAAC,aAAa,CAAC,CAAC;IAC7B,MAAM,WAAW,GAAG,IAAA,6BAAiB,EAAC,OAAO,CAAC,CAAC;IAC/C,IAAA,oBAAO,EAAC,UAAU,WAAW,CAAC,MAAM,gBAAgB,CAAC,CAAC;IACtD,IAAI,WAAW,CAAC,OAAO,GAAG,CAAC,EAAE,CAAC;QAC5B,IAAA,oBAAO,EAAC,WAAW,WAAW,CAAC,OAAO,sCAAsC,CAAC,CAAC;IAChF,CAAC;IAED,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC;AACnE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAYA,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CA0FnD"}
|
package/dist/commands/status.js
CHANGED
|
@@ -38,23 +38,37 @@ const fs = __importStar(require("fs"));
|
|
|
38
38
|
const path = __importStar(require("path"));
|
|
39
39
|
const config_js_1 = require("../config.js");
|
|
40
40
|
const github_js_1 = require("../storage/github.js");
|
|
41
|
+
const gist_js_1 = require("../storage/gist.js");
|
|
41
42
|
const claude_desktop_js_1 = require("../clients/claude-desktop.js");
|
|
42
43
|
const claude_code_js_1 = require("../clients/claude-code.js");
|
|
43
44
|
const opencode_js_1 = require("../clients/opencode.js");
|
|
44
45
|
const mcp_js_1 = require("../sync/mcp.js");
|
|
46
|
+
const sparkle_js_1 = require("../utils/sparkle.js");
|
|
45
47
|
async function statusCommand() {
|
|
46
48
|
const config = (0, config_js_1.readConfig)();
|
|
47
49
|
const repoDir = (0, config_js_1.getLocalRepoDir)();
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
50
|
+
(0, sparkle_js_1.sparkle)(sparkle_js_1.WITTY.pulling);
|
|
51
|
+
if (config.storageType === 'gist') {
|
|
52
|
+
try {
|
|
53
|
+
const gistFiles = await (0, gist_js_1.fetchGist)(config.githubToken, config.gistId);
|
|
54
|
+
fs.mkdirSync(repoDir, { recursive: true });
|
|
55
|
+
(0, gist_js_1.writeGistFilesToDir)(repoDir, gistFiles);
|
|
56
|
+
}
|
|
57
|
+
catch (err) {
|
|
58
|
+
(0, sparkle_js_1.heads_up)(`Could not fetch gist — ${err.message}`);
|
|
59
|
+
}
|
|
51
60
|
}
|
|
52
|
-
|
|
53
|
-
|
|
61
|
+
else {
|
|
62
|
+
try {
|
|
63
|
+
(0, github_js_1.pullRepo)(repoDir, config.githubToken, config.repoCloneUrl);
|
|
64
|
+
}
|
|
65
|
+
catch (err) {
|
|
66
|
+
(0, sparkle_js_1.heads_up)(`Could not pull latest — ${err.message}`);
|
|
67
|
+
}
|
|
54
68
|
}
|
|
55
69
|
const mcpConfigPath = path.join(repoDir, 'mcp-config.json');
|
|
56
70
|
if (!fs.existsSync(mcpConfigPath)) {
|
|
57
|
-
|
|
71
|
+
(0, sparkle_js_1.heads_up)('The pocket is empty! Run `mcpocket push` to stash your setup.');
|
|
58
72
|
return;
|
|
59
73
|
}
|
|
60
74
|
// Compare MCPs (without decrypting — just compare names)
|
|
@@ -65,53 +79,54 @@ async function statusCommand() {
|
|
|
65
79
|
const onlyRemote = [...remoteNames].filter(n => !localNames.has(n));
|
|
66
80
|
const onlyLocal = [...localNames].filter(n => !remoteNames.has(n));
|
|
67
81
|
const inBoth = [...remoteNames].filter(n => localNames.has(n));
|
|
68
|
-
|
|
82
|
+
(0, sparkle_js_1.section)('MCP Servers');
|
|
69
83
|
if (inBoth.length > 0) {
|
|
70
|
-
console.log('\n
|
|
84
|
+
console.log('\n \x1b[32mSynced:\x1b[0m');
|
|
71
85
|
for (const n of inBoth)
|
|
72
|
-
console.log(`
|
|
86
|
+
console.log(` ✓ ${n}`);
|
|
73
87
|
}
|
|
74
88
|
if (onlyRemote.length > 0) {
|
|
75
|
-
console.log('\n
|
|
89
|
+
console.log('\n \x1b[36mIn pocket, not here (run pull):\x1b[0m');
|
|
76
90
|
for (const n of onlyRemote)
|
|
77
|
-
console.log(`
|
|
91
|
+
console.log(` ↓ ${n}`);
|
|
78
92
|
}
|
|
79
93
|
if (onlyLocal.length > 0) {
|
|
80
|
-
console.log('\n
|
|
94
|
+
console.log('\n \x1b[33mLocal only (run push):\x1b[0m');
|
|
81
95
|
for (const n of onlyLocal)
|
|
82
|
-
console.log(`
|
|
96
|
+
console.log(` ↑ ${n}`);
|
|
83
97
|
}
|
|
84
98
|
if (remoteNames.size === 0 && localNames.size === 0) {
|
|
85
|
-
|
|
99
|
+
(0, sparkle_js_1.sparkle)('No MCP servers found. Your pocket is empty!');
|
|
86
100
|
}
|
|
87
101
|
// Plugins
|
|
88
|
-
|
|
102
|
+
(0, sparkle_js_1.section)('Plugin Manifests');
|
|
89
103
|
const pluginFiles = ['plugins/installed_plugins.json', 'plugins/blocklist.json', 'plugins/known_marketplaces.json'];
|
|
90
104
|
for (const f of pluginFiles) {
|
|
91
105
|
const inRepo = fs.existsSync(path.join(repoDir, f));
|
|
92
|
-
console.log(`
|
|
106
|
+
console.log(` ${inRepo ? '\x1b[32m✓\x1b[0m' : '\x1b[31m✗\x1b[0m'} ${f}`);
|
|
93
107
|
}
|
|
94
108
|
// Agents
|
|
95
|
-
|
|
109
|
+
(0, sparkle_js_1.section)('Agents');
|
|
96
110
|
const agentsDir = path.join(repoDir, 'agents');
|
|
97
111
|
if (fs.existsSync(agentsDir)) {
|
|
98
112
|
const count = countFiles(agentsDir, '.md');
|
|
99
|
-
|
|
113
|
+
(0, sparkle_js_1.sparkle)(`${count} agent file(s) in the pocket`);
|
|
100
114
|
}
|
|
101
115
|
else {
|
|
102
|
-
|
|
116
|
+
(0, sparkle_js_1.sparkle)('Not synced yet — they\'re waiting for their first adventure!');
|
|
103
117
|
}
|
|
104
118
|
// Skills
|
|
105
|
-
|
|
119
|
+
(0, sparkle_js_1.section)('Skills');
|
|
106
120
|
const skillsDir = path.join(repoDir, 'skills');
|
|
107
121
|
if (fs.existsSync(skillsDir)) {
|
|
108
122
|
const count = countFiles(skillsDir);
|
|
109
|
-
|
|
123
|
+
(0, sparkle_js_1.sparkle)(`${count} skill file(s) in the pocket`);
|
|
110
124
|
}
|
|
111
125
|
else {
|
|
112
|
-
|
|
126
|
+
(0, sparkle_js_1.sparkle)('Not synced yet — skill points unspent!');
|
|
113
127
|
}
|
|
114
|
-
|
|
128
|
+
const remoteUrl = config.storageType === 'gist' ? config.gistUrl : config.repoHtmlUrl;
|
|
129
|
+
console.log(`\n 🔗 Remote: ${remoteUrl}\n`);
|
|
115
130
|
}
|
|
116
131
|
function countFiles(dir, ext) {
|
|
117
132
|
let count = 0;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAYA,sCA0FC;AAtGD,uCAAyB;AACzB,2CAA6B;AAC7B,4CAA2D;AAC3D,oDAAgD;AAChD,gDAAoE;AACpE,oEAA2E;AAC3E,8DAAqE;AACrE,wDAAgE;AAChE,2CAAiD;AAEjD,oDAAwE;AAEjE,KAAK,UAAU,aAAa;IACjC,MAAM,MAAM,GAAG,IAAA,sBAAU,GAAE,CAAC;IAC5B,MAAM,OAAO,GAAG,IAAA,2BAAe,GAAE,CAAC;IAElC,IAAA,oBAAO,EAAC,kBAAK,CAAC,OAAO,CAAC,CAAC;IAEvB,IAAI,MAAM,CAAC,WAAW,KAAK,MAAM,EAAE,CAAC;QAClC,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,MAAM,IAAA,mBAAS,EAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,MAAO,CAAC,CAAC;YACtE,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC3C,IAAA,6BAAmB,EAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QAC1C,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAA,qBAAQ,EAAC,0BAA2B,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;QAC/D,CAAC;IACH,CAAC;SAAM,CAAC;QACN,IAAI,CAAC;YACH,IAAA,oBAAQ,EAAC,OAAO,EAAE,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,YAAa,CAAC,CAAC;QAC9D,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAA,qBAAQ,EAAC,2BAA4B,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;QAChE,CAAC;IACH,CAAC;IAED,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC;IAC5D,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;QAClC,IAAA,qBAAQ,EAAC,+DAA+D,CAAC,CAAC;QAC1E,OAAO;IACT,CAAC;IAED,yDAAyD;IACzD,MAAM,cAAc,GAAsB,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC,CAAC;IAC7F,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC;IAEpE,MAAM,KAAK,GAAG,IAAA,wBAAe,EAC3B,IAAA,+CAA2B,GAAE,EAC7B,IAAA,yCAAwB,GAAE,EAC1B,IAAA,oCAAsB,GAAE,CACzB,CAAC;IACF,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAE/C,MAAM,UAAU,GAAG,CAAC,GAAG,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACpE,MAAM,SAAS,GAAG,CAAC,GAAG,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACnE,MAAM,MAAM,GAAG,CAAC,GAAG,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAE/D,IAAA,oBAAO,EAAC,aAAa,CAAC,CAAC;IACvB,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;QAC5C,KAAK,MAAM,CAAC,IAAI,MAAM;YAAE,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IACtD,CAAC;IACD,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1B,OAAO,CAAC,GAAG,CAAC,sDAAsD,CAAC,CAAC;QACpE,KAAK,MAAM,CAAC,IAAI,UAAU;YAAE,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IAC1D,CAAC;IACD,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzB,OAAO,CAAC,GAAG,CAAC,6CAA6C,CAAC,CAAC;QAC3D,KAAK,MAAM,CAAC,IAAI,SAAS;YAAE,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IACzD,CAAC;IACD,IAAI,WAAW,CAAC,IAAI,KAAK,CAAC,IAAI,UAAU,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACpD,IAAA,oBAAO,EAAC,6CAA6C,CAAC,CAAC;IACzD,CAAC;IAED,UAAU;IACV,IAAA,oBAAO,EAAC,kBAAkB,CAAC,CAAC;IAC5B,MAAM,WAAW,GAAG,CAAC,gCAAgC,EAAE,wBAAwB,EAAE,iCAAiC,CAAC,CAAC;IACpH,KAAK,MAAM,CAAC,IAAI,WAAW,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;QACpD,OAAO,CAAC,GAAG,CAAC,OAAO,MAAM,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,kBAAkB,IAAI,CAAC,EAAE,CAAC,CAAC;IAC9E,CAAC;IAED,SAAS;IACT,IAAA,oBAAO,EAAC,QAAQ,CAAC,CAAC;IAClB,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAC/C,IAAI,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC7B,MAAM,KAAK,GAAG,UAAU,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QAC3C,IAAA,oBAAO,EAAC,GAAG,KAAK,8BAA8B,CAAC,CAAC;IAClD,CAAC;SAAM,CAAC;QACN,IAAA,oBAAO,EAAC,8DAA8D,CAAC,CAAC;IAC1E,CAAC;IAED,SAAS;IACT,IAAA,oBAAO,EAAC,QAAQ,CAAC,CAAC;IAClB,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAC/C,IAAI,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC7B,MAAM,KAAK,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;QACpC,IAAA,oBAAO,EAAC,GAAG,KAAK,8BAA8B,CAAC,CAAC;IAClD,CAAC;SAAM,CAAC;QACN,IAAA,oBAAO,EAAC,wCAAwC,CAAC,CAAC;IACpD,CAAC;IAED,MAAM,SAAS,GAAG,MAAM,CAAC,WAAW,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC;IACtF,OAAO,CAAC,GAAG,CAAC,kBAAkB,SAAS,IAAI,CAAC,CAAC;AAC/C,CAAC;AAED,SAAS,UAAU,CAAC,GAAW,EAAE,GAAY;IAC3C,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,MAAM,KAAK,IAAI,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QACjE,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;YACxB,KAAK,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;QACvD,CAAC;aAAM,IAAI,CAAC,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAC5C,KAAK,EAAE,CAAC;QACV,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
|
package/dist/config.d.ts
CHANGED
|
@@ -1,12 +1,16 @@
|
|
|
1
|
-
export
|
|
1
|
+
export type StorageType = 'repo' | 'gist';
|
|
2
|
+
export interface McpocketConfig {
|
|
2
3
|
githubToken: string;
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
4
|
+
storageType: StorageType;
|
|
5
|
+
repoFullName?: string;
|
|
6
|
+
repoCloneUrl?: string;
|
|
7
|
+
repoHtmlUrl?: string;
|
|
8
|
+
gistId?: string;
|
|
9
|
+
gistUrl?: string;
|
|
6
10
|
}
|
|
7
11
|
export declare function configExists(): boolean;
|
|
8
|
-
export declare function readConfig():
|
|
9
|
-
export declare function writeConfig(config:
|
|
10
|
-
/** Local
|
|
12
|
+
export declare function readConfig(): McpocketConfig;
|
|
13
|
+
export declare function writeConfig(config: McpocketConfig): void;
|
|
14
|
+
/** Local staging directory for synced pocket contents */
|
|
11
15
|
export declare function getLocalRepoDir(): string;
|
|
12
16
|
//# sourceMappingURL=config.d.ts.map
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,MAAM,CAAC;AAE1C,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,WAAW,CAAC;IAEzB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,YAAY,IAAI,OAAO,CAEtC;AAED,wBAAgB,UAAU,IAAI,cAAc,CAa3C;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI,CAQxD;AAED,yDAAyD;AACzD,wBAAgB,eAAe,IAAI,MAAM,CAExC"}
|
package/dist/config.js
CHANGED
|
@@ -42,26 +42,31 @@ const path = __importStar(require("path"));
|
|
|
42
42
|
const os = __importStar(require("os"));
|
|
43
43
|
const paths_js_1 = require("./utils/paths.js");
|
|
44
44
|
function configExists() {
|
|
45
|
-
return fs.existsSync((0, paths_js_1.
|
|
45
|
+
return fs.existsSync((0, paths_js_1.getMcpocketConfigPath)());
|
|
46
46
|
}
|
|
47
47
|
function readConfig() {
|
|
48
|
-
const configPath = (0, paths_js_1.
|
|
48
|
+
const configPath = (0, paths_js_1.getMcpocketConfigPath)();
|
|
49
49
|
if (!fs.existsSync(configPath)) {
|
|
50
|
-
throw new Error('
|
|
50
|
+
throw new Error('mcpocket is not initialized. Run `mcpocket init` first.');
|
|
51
51
|
}
|
|
52
|
-
|
|
52
|
+
const raw = JSON.parse(fs.readFileSync(configPath, 'utf8'));
|
|
53
|
+
// Backward compat: configs created before gist support default to repo
|
|
54
|
+
if (!raw.storageType) {
|
|
55
|
+
raw.storageType = 'repo';
|
|
56
|
+
}
|
|
57
|
+
return raw;
|
|
53
58
|
}
|
|
54
59
|
function writeConfig(config) {
|
|
55
|
-
const dir = (0, paths_js_1.
|
|
60
|
+
const dir = (0, paths_js_1.getMcpocketConfigDir)();
|
|
56
61
|
fs.mkdirSync(dir, { recursive: true });
|
|
57
|
-
fs.writeFileSync((0, paths_js_1.
|
|
62
|
+
fs.writeFileSync((0, paths_js_1.getMcpocketConfigPath)(), JSON.stringify(config, null, 2), 'utf8');
|
|
58
63
|
// Restrict permissions on non-Windows (contains GitHub token)
|
|
59
64
|
if (process.platform !== 'win32') {
|
|
60
|
-
fs.chmodSync((0, paths_js_1.
|
|
65
|
+
fs.chmodSync((0, paths_js_1.getMcpocketConfigPath)(), 0o600);
|
|
61
66
|
}
|
|
62
67
|
}
|
|
63
|
-
/** Local
|
|
68
|
+
/** Local staging directory for synced pocket contents */
|
|
64
69
|
function getLocalRepoDir() {
|
|
65
|
-
return path.join(os.homedir(), '.
|
|
70
|
+
return path.join(os.homedir(), '.mcpocket', 'repo');
|
|
66
71
|
}
|
|
67
72
|
//# sourceMappingURL=config.js.map
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmBA,oCAEC;AAED,gCAaC;AAED,kCAQC;AAGD,0CAEC;AAnDD,uCAAyB;AACzB,2CAA6B;AAC7B,uCAAyB;AACzB,+CAA+E;AAgB/E,SAAgB,YAAY;IAC1B,OAAO,EAAE,CAAC,UAAU,CAAC,IAAA,gCAAqB,GAAE,CAAC,CAAC;AAChD,CAAC;AAED,SAAgB,UAAU;IACxB,MAAM,UAAU,GAAG,IAAA,gCAAqB,GAAE,CAAC;IAC3C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CACb,yDAAyD,CAC1D,CAAC;IACJ,CAAC;IACD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;IAC5D,uEAAuE;IACvE,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;QACrB,GAAG,CAAC,WAAW,GAAG,MAAM,CAAC;IAC3B,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAgB,WAAW,CAAC,MAAsB;IAChD,MAAM,GAAG,GAAG,IAAA,+BAAoB,GAAE,CAAC;IACnC,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACvC,EAAE,CAAC,aAAa,CAAC,IAAA,gCAAqB,GAAE,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IACnF,8DAA8D;IAC9D,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QACjC,EAAE,CAAC,SAAS,CAAC,IAAA,gCAAqB,GAAE,EAAE,KAAK,CAAC,CAAC;IAC/C,CAAC;AACH,CAAC;AAED,yDAAyD;AACzD,SAAgB,eAAe;IAC7B,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;AACtD,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export interface GistInfo {
|
|
2
|
+
id: string;
|
|
3
|
+
htmlUrl: string;
|
|
4
|
+
}
|
|
5
|
+
/** Create a private gist as the sync target */
|
|
6
|
+
export declare function createGist(token: string): Promise<GistInfo>;
|
|
7
|
+
/** Upload files to an existing gist (creates/updates, does not delete missing files) */
|
|
8
|
+
export declare function updateGist(token: string, gistId: string, files: Record<string, string>): Promise<void>;
|
|
9
|
+
/** Fetch all files from a gist */
|
|
10
|
+
export declare function fetchGist(token: string, gistId: string): Promise<Record<string, string>>;
|
|
11
|
+
/**
|
|
12
|
+
* Collect all files from a directory into a flat map.
|
|
13
|
+
* Directory separators are encoded as __ in keys.
|
|
14
|
+
*/
|
|
15
|
+
export declare function collectFilesFromDir(dir: string): Record<string, string>;
|
|
16
|
+
/**
|
|
17
|
+
* Write flat gist files back to a directory.
|
|
18
|
+
* Keys with __ are expanded to subdirectories.
|
|
19
|
+
*/
|
|
20
|
+
export declare function writeGistFilesToDir(dir: string, files: Record<string, string>): void;
|
|
21
|
+
//# sourceMappingURL=gist.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gist.d.ts","sourceRoot":"","sources":["../../src/storage/gist.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;CACjB;AAYD,+CAA+C;AAC/C,wBAAsB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAmBjE;AAED,wFAAwF;AACxF,wBAAsB,UAAU,CAC9B,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC5B,OAAO,CAAC,IAAI,CAAC,CA6Bf;AAED,kCAAkC;AAClC,wBAAsB,SAAS,CAC7B,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAkBjC;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAKvE;AAoBD;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC5B,IAAI,CAON"}
|
|
@@ -0,0 +1,149 @@
|
|
|
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.createGist = createGist;
|
|
37
|
+
exports.updateGist = updateGist;
|
|
38
|
+
exports.fetchGist = fetchGist;
|
|
39
|
+
exports.collectFilesFromDir = collectFilesFromDir;
|
|
40
|
+
exports.writeGistFilesToDir = writeGistFilesToDir;
|
|
41
|
+
const fs = __importStar(require("fs"));
|
|
42
|
+
const path = __importStar(require("path"));
|
|
43
|
+
const files_js_1 = require("../utils/files.js");
|
|
44
|
+
const GITHUB_API = 'https://api.github.com';
|
|
45
|
+
function headers(token) {
|
|
46
|
+
return {
|
|
47
|
+
'Authorization': `Bearer ${token}`,
|
|
48
|
+
'Accept': 'application/vnd.github+json',
|
|
49
|
+
'X-GitHub-Api-Version': '2022-11-28',
|
|
50
|
+
'Content-Type': 'application/json',
|
|
51
|
+
'User-Agent': 'mcpocket-cli',
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
/** Create a private gist as the sync target */
|
|
55
|
+
async function createGist(token) {
|
|
56
|
+
const res = await fetch(`${GITHUB_API}/gists`, {
|
|
57
|
+
method: 'POST',
|
|
58
|
+
headers: headers(token),
|
|
59
|
+
body: JSON.stringify({
|
|
60
|
+
description: 'mcpocket: AI agent config sync',
|
|
61
|
+
public: false,
|
|
62
|
+
files: {
|
|
63
|
+
'mcpocket.json': { content: JSON.stringify({ version: 1 }, null, 2) },
|
|
64
|
+
},
|
|
65
|
+
}),
|
|
66
|
+
});
|
|
67
|
+
if (!res.ok) {
|
|
68
|
+
throw new Error(`Failed to create gist (${res.status}): ${await res.text()}`);
|
|
69
|
+
}
|
|
70
|
+
const data = await res.json();
|
|
71
|
+
return { id: data.id, htmlUrl: data.html_url };
|
|
72
|
+
}
|
|
73
|
+
/** Upload files to an existing gist (creates/updates, does not delete missing files) */
|
|
74
|
+
async function updateGist(token, gistId, files) {
|
|
75
|
+
const gistFiles = {};
|
|
76
|
+
for (const [name, content] of Object.entries(files)) {
|
|
77
|
+
gistFiles[name] = { content };
|
|
78
|
+
}
|
|
79
|
+
const existingFiles = await fetchGist(token, gistId);
|
|
80
|
+
for (const name of Object.keys(existingFiles)) {
|
|
81
|
+
if (!(name in files)) {
|
|
82
|
+
gistFiles[name] = { content: '' };
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
const res = await fetch(`${GITHUB_API}/gists/${gistId}`, {
|
|
86
|
+
method: 'PATCH',
|
|
87
|
+
headers: headers(token),
|
|
88
|
+
body: JSON.stringify({
|
|
89
|
+
files: Object.fromEntries(Object.entries(gistFiles).map(([name, file]) => [
|
|
90
|
+
name,
|
|
91
|
+
name in files ? file : null,
|
|
92
|
+
])),
|
|
93
|
+
}),
|
|
94
|
+
});
|
|
95
|
+
if (!res.ok) {
|
|
96
|
+
throw new Error(`Failed to update gist (${res.status}): ${await res.text()}`);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
/** Fetch all files from a gist */
|
|
100
|
+
async function fetchGist(token, gistId) {
|
|
101
|
+
const res = await fetch(`${GITHUB_API}/gists/${gistId}`, {
|
|
102
|
+
headers: headers(token),
|
|
103
|
+
});
|
|
104
|
+
if (!res.ok) {
|
|
105
|
+
throw new Error(`Failed to fetch gist (${res.status}): ${await res.text()}`);
|
|
106
|
+
}
|
|
107
|
+
const data = await res.json();
|
|
108
|
+
const files = {};
|
|
109
|
+
for (const [name, file] of Object.entries(data.files)) {
|
|
110
|
+
files[name] = file.content;
|
|
111
|
+
}
|
|
112
|
+
return files;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Collect all files from a directory into a flat map.
|
|
116
|
+
* Directory separators are encoded as __ in keys.
|
|
117
|
+
*/
|
|
118
|
+
function collectFilesFromDir(dir) {
|
|
119
|
+
const files = {};
|
|
120
|
+
if (!fs.existsSync(dir))
|
|
121
|
+
return files;
|
|
122
|
+
collectRecursive(dir, '', files);
|
|
123
|
+
return files;
|
|
124
|
+
}
|
|
125
|
+
function collectRecursive(dir, prefix, files) {
|
|
126
|
+
for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {
|
|
127
|
+
if (entry.name === '.git')
|
|
128
|
+
continue;
|
|
129
|
+
const key = prefix ? `${prefix}__${entry.name}` : entry.name;
|
|
130
|
+
const fullPath = path.join(dir, entry.name);
|
|
131
|
+
if (entry.isDirectory()) {
|
|
132
|
+
collectRecursive(fullPath, key, files);
|
|
133
|
+
}
|
|
134
|
+
else if (entry.isFile()) {
|
|
135
|
+
files[key] = fs.readFileSync(fullPath, 'utf8');
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Write flat gist files back to a directory.
|
|
141
|
+
* Keys with __ are expanded to subdirectories.
|
|
142
|
+
*/
|
|
143
|
+
function writeGistFilesToDir(dir, files) {
|
|
144
|
+
const expandedFiles = Object.fromEntries(Object.entries(files).map(([key, content]) => [key.split('__').join(path.sep), content]));
|
|
145
|
+
(0, files_js_1.mirrorFileMapToDir)(dir, expandedFiles, {
|
|
146
|
+
protectedTopLevelNames: new Set(['.git']),
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
//# sourceMappingURL=gist.js.map
|