@opentabs-dev/cli 0.0.16 → 0.0.17
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/dist/cli.js +5 -1
- package/dist/cli.js.map +1 -1
- package/dist/commands/audit.d.ts +11 -0
- package/dist/commands/audit.d.ts.map +1 -0
- package/dist/commands/audit.js +229 -0
- package/dist/commands/audit.js.map +1 -0
- package/dist/commands/config.d.ts.map +1 -1
- package/dist/commands/config.js +308 -18
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/doctor.d.ts +7 -1
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +63 -8
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/index.d.ts +1 -0
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/index.js +1 -0
- package/dist/commands/index.js.map +1 -1
- package/dist/commands/plugin.d.ts +1 -1
- package/dist/commands/plugin.d.ts.map +1 -1
- package/dist/commands/plugin.js +377 -5
- package/dist/commands/plugin.js.map +1 -1
- package/dist/commands/start.d.ts.map +1 -1
- package/dist/commands/start.js +20 -4
- package/dist/commands/start.js.map +1 -1
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +25 -4
- package/dist/commands/status.js.map +1 -1
- package/dist/config.d.ts +13 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +17 -8
- package/dist/config.js.map +1 -1
- package/dist/parse-port.d.ts.map +1 -1
- package/dist/parse-port.js +2 -0
- package/dist/parse-port.js.map +1 -1
- package/dist/scaffold.d.ts +14 -2
- package/dist/scaffold.d.ts.map +1 -1
- package/dist/scaffold.js +86 -8
- package/dist/scaffold.js.map +1 -1
- package/package.json +4 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../src/commands/plugin.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../src/commands/plugin.ts"],"names":[],"mappings":"AAAA;;GAEG;AAeH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA6ZzC,QAAA,MAAM,qBAAqB,GAAI,SAAS,OAAO,KAAG,IAoGjD,CAAC;AAEF,OAAO,EAAE,qBAAqB,EAAE,CAAC"}
|
package/dist/commands/plugin.js
CHANGED
|
@@ -1,8 +1,336 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* `opentabs plugin` command — plugin management (create).
|
|
2
|
+
* `opentabs plugin` command — plugin management (create, search, install, remove, list).
|
|
3
3
|
*/
|
|
4
|
-
import {
|
|
4
|
+
import { colorTabState } from './status.js';
|
|
5
|
+
import { atomicWriteConfig, getConfigPath, getLocalPluginsFromConfig, isConnectionRefused, readConfig, resolvePluginPath, } from '../config.js';
|
|
6
|
+
import { parsePort, resolvePort } from '../parse-port.js';
|
|
7
|
+
import { scaffoldPlugin, promptForMissingArgs, ScaffoldError } from '../scaffold.js';
|
|
5
8
|
import pc from 'picocolors';
|
|
9
|
+
import { join } from 'node:path';
|
|
10
|
+
// --- Helpers ---
|
|
11
|
+
/**
|
|
12
|
+
* Normalize a shorthand plugin name to its full npm package name.
|
|
13
|
+
* "slack" → "opentabs-plugin-slack", but scoped names and full names pass through.
|
|
14
|
+
*/
|
|
15
|
+
const normalizePluginName = (name) => {
|
|
16
|
+
if (name.startsWith('@') || name.startsWith('opentabs-plugin-'))
|
|
17
|
+
return name;
|
|
18
|
+
return `opentabs-plugin-${name}`;
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* Notify the running MCP server to rediscover plugins via POST /reload.
|
|
22
|
+
* Non-fatal — prints a hint on failure but never throws.
|
|
23
|
+
*/
|
|
24
|
+
const notifyServer = async (options) => {
|
|
25
|
+
const port = resolvePort(options);
|
|
26
|
+
const configPath = getConfigPath();
|
|
27
|
+
const { config } = await readConfig(configPath);
|
|
28
|
+
const secret = config && typeof config.secret === 'string' ? config.secret : null;
|
|
29
|
+
try {
|
|
30
|
+
const healthRes = await fetch(`http://localhost:${port}/health`, {
|
|
31
|
+
signal: AbortSignal.timeout(3_000),
|
|
32
|
+
});
|
|
33
|
+
if (!healthRes.ok)
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
// Server not running — nothing to notify
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
try {
|
|
41
|
+
const headers = { 'Content-Type': 'application/json' };
|
|
42
|
+
if (secret)
|
|
43
|
+
headers['Authorization'] = `Bearer ${secret}`;
|
|
44
|
+
const res = await fetch(`http://localhost:${port}/reload`, {
|
|
45
|
+
method: 'POST',
|
|
46
|
+
headers,
|
|
47
|
+
signal: AbortSignal.timeout(5_000),
|
|
48
|
+
});
|
|
49
|
+
if (res.ok) {
|
|
50
|
+
console.log(pc.dim('Server notified — plugins rediscovered.'));
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
console.log(pc.dim(`Could not notify server (HTTP ${res.status}). Restart the server to pick up changes.`));
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
catch {
|
|
57
|
+
console.log(pc.dim('Could not notify server. Restart the server to pick up changes.'));
|
|
58
|
+
}
|
|
59
|
+
};
|
|
60
|
+
// --- Install handler ---
|
|
61
|
+
const handlePluginInstall = async (name, options) => {
|
|
62
|
+
const pkg = normalizePluginName(name);
|
|
63
|
+
console.log(`Installing ${pc.bold(pkg)}...`);
|
|
64
|
+
const proc = Bun.spawn(['npm', 'install', '-g', pkg], {
|
|
65
|
+
stdio: ['inherit', 'inherit', 'inherit'],
|
|
66
|
+
});
|
|
67
|
+
const exitCode = await proc.exited;
|
|
68
|
+
if (exitCode !== 0) {
|
|
69
|
+
console.error(pc.red(`npm install failed (exit code ${exitCode}).`));
|
|
70
|
+
process.exit(1);
|
|
71
|
+
}
|
|
72
|
+
console.log(pc.green(`Successfully installed ${pkg}.`));
|
|
73
|
+
await notifyServer(options);
|
|
74
|
+
};
|
|
75
|
+
// --- Remove handler ---
|
|
76
|
+
/**
|
|
77
|
+
* Remove matching entries from localPlugins in config.
|
|
78
|
+
* An entry matches if its resolved package.json `name` field equals the package name.
|
|
79
|
+
*/
|
|
80
|
+
const removeFromLocalPlugins = async (pkg) => {
|
|
81
|
+
const configPath = getConfigPath();
|
|
82
|
+
const { config } = await readConfig(configPath);
|
|
83
|
+
if (!config)
|
|
84
|
+
return;
|
|
85
|
+
const localPlugins = getLocalPluginsFromConfig(config);
|
|
86
|
+
if (localPlugins.length === 0)
|
|
87
|
+
return;
|
|
88
|
+
const remaining = [];
|
|
89
|
+
for (const entry of localPlugins) {
|
|
90
|
+
const resolved = resolvePluginPath(entry, configPath);
|
|
91
|
+
const pkgJsonPath = join(resolved, 'package.json');
|
|
92
|
+
try {
|
|
93
|
+
const pkgJson = JSON.parse(await Bun.file(pkgJsonPath).text());
|
|
94
|
+
if (typeof pkgJson === 'object' && pkgJson !== null && pkgJson.name === pkg) {
|
|
95
|
+
continue;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
catch {
|
|
99
|
+
// Cannot read package.json — keep the entry
|
|
100
|
+
}
|
|
101
|
+
remaining.push(entry);
|
|
102
|
+
}
|
|
103
|
+
if (remaining.length < localPlugins.length) {
|
|
104
|
+
const removed = localPlugins.length - remaining.length;
|
|
105
|
+
config.localPlugins = remaining;
|
|
106
|
+
await atomicWriteConfig(configPath, JSON.stringify(config, null, 2) + '\n');
|
|
107
|
+
console.log(pc.dim(`Removed ${removed.toString()} local plugin ${removed === 1 ? 'entry' : 'entries'} from config.`));
|
|
108
|
+
}
|
|
109
|
+
};
|
|
110
|
+
const handlePluginRemove = async (name, options) => {
|
|
111
|
+
const pkg = normalizePluginName(name);
|
|
112
|
+
console.log(`Removing ${pc.bold(pkg)}...`);
|
|
113
|
+
const proc = Bun.spawn(['npm', 'uninstall', '-g', pkg], {
|
|
114
|
+
stdio: ['inherit', 'inherit', 'inherit'],
|
|
115
|
+
});
|
|
116
|
+
const exitCode = await proc.exited;
|
|
117
|
+
if (exitCode !== 0) {
|
|
118
|
+
console.error(pc.red(`npm uninstall failed (exit code ${exitCode}).`));
|
|
119
|
+
process.exit(1);
|
|
120
|
+
}
|
|
121
|
+
console.log(pc.green(`Successfully removed ${pkg}.`));
|
|
122
|
+
await removeFromLocalPlugins(pkg);
|
|
123
|
+
await notifyServer(options);
|
|
124
|
+
};
|
|
125
|
+
// --- Search handler ---
|
|
126
|
+
const NPM_SEARCH_URL = 'https://registry.npmjs.org/-/v1/search';
|
|
127
|
+
const handlePluginSearch = async (query) => {
|
|
128
|
+
const params = new URLSearchParams({
|
|
129
|
+
text: query ? `keywords:opentabs-plugin ${query}` : 'keywords:opentabs-plugin',
|
|
130
|
+
size: '20',
|
|
131
|
+
});
|
|
132
|
+
let data;
|
|
133
|
+
try {
|
|
134
|
+
const response = await fetch(`${NPM_SEARCH_URL}?${params.toString()}`);
|
|
135
|
+
if (response.status === 429) {
|
|
136
|
+
console.error(pc.yellow('npm registry rate limit reached. Try again in a moment.'));
|
|
137
|
+
process.exit(1);
|
|
138
|
+
}
|
|
139
|
+
if (!response.ok) {
|
|
140
|
+
console.error(pc.red(`npm registry returned an error (HTTP ${response.status.toString()}). Try again later.`));
|
|
141
|
+
process.exit(1);
|
|
142
|
+
}
|
|
143
|
+
data = (await response.json());
|
|
144
|
+
}
|
|
145
|
+
catch {
|
|
146
|
+
console.error(pc.red('Could not reach npm registry. Check your internet connection.'));
|
|
147
|
+
process.exit(1);
|
|
148
|
+
}
|
|
149
|
+
if (data.objects.length === 0) {
|
|
150
|
+
const term = query ?? '';
|
|
151
|
+
console.log(pc.yellow(`No plugins found for '${term}'. Try a different search term.`));
|
|
152
|
+
return;
|
|
153
|
+
}
|
|
154
|
+
console.log();
|
|
155
|
+
for (const { package: pkg } of data.objects) {
|
|
156
|
+
const label = pkg.name.startsWith('@opentabs-dev/') ? pc.blue('[official]') : pc.dim('[community]');
|
|
157
|
+
const desc = pkg.description
|
|
158
|
+
? pkg.description.length > 60
|
|
159
|
+
? pkg.description.slice(0, 57) + '...'
|
|
160
|
+
: pkg.description
|
|
161
|
+
: '';
|
|
162
|
+
const author = pkg.publisher?.username ?? 'unknown';
|
|
163
|
+
console.log(` ${label} ${pc.bold(pkg.name)} ${pc.dim(`v${pkg.version}`)} — ${desc} ${pc.dim(`by ${author}`)}`);
|
|
164
|
+
}
|
|
165
|
+
console.log();
|
|
166
|
+
console.log(`Install a plugin: ${pc.cyan('opentabs plugin install <name>')}`);
|
|
167
|
+
console.log();
|
|
168
|
+
};
|
|
169
|
+
/**
|
|
170
|
+
* Read basic info from a local plugin directory (package.json + dist/tools.json).
|
|
171
|
+
*/
|
|
172
|
+
const readLocalPluginInfo = async (pluginDir) => {
|
|
173
|
+
try {
|
|
174
|
+
const pkgJsonText = await Bun.file(join(pluginDir, 'package.json')).text();
|
|
175
|
+
const pkgJson = JSON.parse(pkgJsonText);
|
|
176
|
+
const name = typeof pkgJson.name === 'string' ? pkgJson.name : null;
|
|
177
|
+
if (!name)
|
|
178
|
+
return null;
|
|
179
|
+
const opentabs = typeof pkgJson.opentabs === 'object' && pkgJson.opentabs !== null ? pkgJson.opentabs : null;
|
|
180
|
+
const displayName = opentabs && typeof opentabs.displayName === 'string'
|
|
181
|
+
? opentabs.displayName
|
|
182
|
+
: name;
|
|
183
|
+
const version = typeof pkgJson.version === 'string' ? pkgJson.version : null;
|
|
184
|
+
let toolCount = 0;
|
|
185
|
+
try {
|
|
186
|
+
const toolsJsonText = await Bun.file(join(pluginDir, 'dist', 'tools.json')).text();
|
|
187
|
+
const toolsJson = JSON.parse(toolsJsonText);
|
|
188
|
+
const tools = Array.isArray(toolsJson.tools) ? toolsJson.tools : [];
|
|
189
|
+
toolCount = tools.length;
|
|
190
|
+
}
|
|
191
|
+
catch {
|
|
192
|
+
// dist/tools.json may not exist (plugin not built yet)
|
|
193
|
+
}
|
|
194
|
+
return { name, displayName, version, toolCount };
|
|
195
|
+
}
|
|
196
|
+
catch {
|
|
197
|
+
return null;
|
|
198
|
+
}
|
|
199
|
+
};
|
|
200
|
+
/**
|
|
201
|
+
* Scan global node_modules for npm-installed opentabs plugins using `npm list -g --json`.
|
|
202
|
+
*/
|
|
203
|
+
const scanNpmPlugins = async () => {
|
|
204
|
+
const entries = [];
|
|
205
|
+
try {
|
|
206
|
+
const proc = Bun.spawn(['npm', 'list', '-g', '--json', '--depth=0'], {
|
|
207
|
+
stdout: 'pipe',
|
|
208
|
+
stderr: 'pipe',
|
|
209
|
+
});
|
|
210
|
+
const stdout = await new Response(proc.stdout).text();
|
|
211
|
+
await proc.exited;
|
|
212
|
+
const data = JSON.parse(stdout);
|
|
213
|
+
const deps = typeof data.dependencies === 'object' && data.dependencies !== null ? data.dependencies : {};
|
|
214
|
+
for (const [pkgName, info] of Object.entries(deps)) {
|
|
215
|
+
const isPlugin = pkgName.startsWith('opentabs-plugin-') || /^@[^/]+\/opentabs-plugin-/.test(pkgName);
|
|
216
|
+
if (!isPlugin)
|
|
217
|
+
continue;
|
|
218
|
+
const version = typeof info.version === 'string' ? info.version : null;
|
|
219
|
+
entries.push({
|
|
220
|
+
name: pkgName,
|
|
221
|
+
displayName: pkgName,
|
|
222
|
+
version,
|
|
223
|
+
source: 'npm',
|
|
224
|
+
tabState: null,
|
|
225
|
+
toolCount: 0,
|
|
226
|
+
});
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
catch {
|
|
230
|
+
// npm not available or no global packages
|
|
231
|
+
}
|
|
232
|
+
return entries;
|
|
233
|
+
};
|
|
234
|
+
const handlePluginList = async (options) => {
|
|
235
|
+
const port = resolvePort(options);
|
|
236
|
+
// Try to fetch from running server first
|
|
237
|
+
try {
|
|
238
|
+
const res = await fetch(`http://localhost:${port}/health`, {
|
|
239
|
+
signal: AbortSignal.timeout(3_000),
|
|
240
|
+
});
|
|
241
|
+
if (res.ok) {
|
|
242
|
+
const data = (await res.json());
|
|
243
|
+
const pluginDetails = Array.isArray(data.pluginDetails) ? data.pluginDetails : [];
|
|
244
|
+
const failedPlugins = Array.isArray(data.failedPlugins) ? data.failedPlugins : [];
|
|
245
|
+
if (options.json) {
|
|
246
|
+
console.log(JSON.stringify({ plugins: pluginDetails, failedPlugins }, null, 2));
|
|
247
|
+
return;
|
|
248
|
+
}
|
|
249
|
+
if (pluginDetails.length === 0 && failedPlugins.length === 0) {
|
|
250
|
+
console.log(pc.dim('No plugins installed.'));
|
|
251
|
+
console.log(`\nSearch for plugins: ${pc.cyan('opentabs plugin search')}`);
|
|
252
|
+
return;
|
|
253
|
+
}
|
|
254
|
+
console.log(pc.bold('Installed Plugins'));
|
|
255
|
+
console.log();
|
|
256
|
+
for (const p of pluginDetails) {
|
|
257
|
+
const state = colorTabState(p.tabState);
|
|
258
|
+
const tools = pc.dim(`${p.toolCount} tool${p.toolCount === 1 ? '' : 's'}`);
|
|
259
|
+
const sourceLabel = p.source === 'local' ? pc.dim('(local)') : pc.dim('(npm)');
|
|
260
|
+
const sdkWarning = p.sdkVersion === null ? ` ${pc.yellow('⚠ no SDK version')}` : '';
|
|
261
|
+
console.log(` ${p.displayName} ${sourceLabel} ${pc.dim('—')} ${state} ${pc.dim('·')} ${tools}${sdkWarning}`);
|
|
262
|
+
}
|
|
263
|
+
if (failedPlugins.length > 0) {
|
|
264
|
+
console.log();
|
|
265
|
+
console.log(pc.bold('Failed Plugins'));
|
|
266
|
+
console.log();
|
|
267
|
+
for (const f of failedPlugins) {
|
|
268
|
+
console.log(` ${pc.red(f.specifier)} ${pc.dim('—')} ${f.error}`);
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
return;
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
catch (err) {
|
|
275
|
+
if (!isConnectionRefused(err)) {
|
|
276
|
+
// Unexpected error (not just "server not running") — still fall through to offline mode
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
// Offline mode — server is not running
|
|
280
|
+
const configPath = getConfigPath();
|
|
281
|
+
const { config } = await readConfig(configPath);
|
|
282
|
+
const localPlugins = config ? getLocalPluginsFromConfig(config) : [];
|
|
283
|
+
const localEntries = [];
|
|
284
|
+
for (const entry of localPlugins) {
|
|
285
|
+
const resolved = resolvePluginPath(entry, configPath);
|
|
286
|
+
const info = await readLocalPluginInfo(resolved);
|
|
287
|
+
if (info) {
|
|
288
|
+
localEntries.push({
|
|
289
|
+
name: info.name,
|
|
290
|
+
displayName: info.displayName,
|
|
291
|
+
version: info.version,
|
|
292
|
+
source: 'local',
|
|
293
|
+
tabState: null,
|
|
294
|
+
toolCount: info.toolCount,
|
|
295
|
+
});
|
|
296
|
+
}
|
|
297
|
+
else {
|
|
298
|
+
localEntries.push({
|
|
299
|
+
name: entry,
|
|
300
|
+
displayName: entry,
|
|
301
|
+
version: null,
|
|
302
|
+
source: 'local',
|
|
303
|
+
tabState: null,
|
|
304
|
+
toolCount: 0,
|
|
305
|
+
});
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
const npmEntries = await scanNpmPlugins();
|
|
309
|
+
// Deduplicate: local entries take precedence over npm entries with the same name
|
|
310
|
+
const seenNames = new Set(localEntries.map(e => e.name));
|
|
311
|
+
const deduped = [...localEntries, ...npmEntries.filter(e => !seenNames.has(e.name))];
|
|
312
|
+
if (options.json) {
|
|
313
|
+
console.log(JSON.stringify({ plugins: deduped, serverRunning: false }, null, 2));
|
|
314
|
+
return;
|
|
315
|
+
}
|
|
316
|
+
if (deduped.length === 0) {
|
|
317
|
+
console.log(pc.dim('No plugins installed.'));
|
|
318
|
+
console.log(`\nSearch for plugins: ${pc.cyan('opentabs plugin search')}`);
|
|
319
|
+
return;
|
|
320
|
+
}
|
|
321
|
+
console.log(pc.bold('Installed Plugins'));
|
|
322
|
+
console.log(pc.dim('(server not running — tab state unavailable)'));
|
|
323
|
+
console.log();
|
|
324
|
+
for (const p of deduped) {
|
|
325
|
+
const version = p.version ? pc.dim(`v${p.version}`) : pc.dim('unknown version');
|
|
326
|
+
const sourceLabel = p.source === 'local' ? pc.dim('(local)') : pc.dim('(npm)');
|
|
327
|
+
const tools = p.toolCount > 0 ? pc.dim(`${p.toolCount} tool${p.toolCount === 1 ? '' : 's'}`) : '';
|
|
328
|
+
const parts = [p.displayName, sourceLabel, pc.dim('—'), version];
|
|
329
|
+
if (tools)
|
|
330
|
+
parts.push(pc.dim('·'), tools);
|
|
331
|
+
console.log(` ${parts.join(' ')}`);
|
|
332
|
+
}
|
|
333
|
+
};
|
|
6
334
|
// --- Command registration ---
|
|
7
335
|
const registerPluginCommand = (program) => {
|
|
8
336
|
const pluginCmd = program
|
|
@@ -11,25 +339,69 @@ const registerPluginCommand = (program) => {
|
|
|
11
339
|
.action(() => {
|
|
12
340
|
pluginCmd.help();
|
|
13
341
|
});
|
|
342
|
+
pluginCmd
|
|
343
|
+
.command('search')
|
|
344
|
+
.description('Search npm registry for opentabs plugins')
|
|
345
|
+
.argument('[query]', 'Search term (optional — lists all plugins if omitted)')
|
|
346
|
+
.addHelpText('after', `
|
|
347
|
+
Examples:
|
|
348
|
+
$ opentabs plugin search slack
|
|
349
|
+
$ opentabs plugin search # lists all available plugins`)
|
|
350
|
+
.action(async (query) => {
|
|
351
|
+
await handlePluginSearch(query);
|
|
352
|
+
});
|
|
353
|
+
pluginCmd
|
|
354
|
+
.command('list')
|
|
355
|
+
.description('List installed plugins')
|
|
356
|
+
.option('--port <number>', 'Server port (default: 9515)', parsePort)
|
|
357
|
+
.option('--json', 'Output machine-readable JSON')
|
|
358
|
+
.addHelpText('after', `
|
|
359
|
+
Examples:
|
|
360
|
+
$ opentabs plugin list
|
|
361
|
+
$ opentabs plugin list --json
|
|
362
|
+
$ opentabs plugin list --port 3000`)
|
|
363
|
+
.action((_options, command) => handlePluginList(command.optsWithGlobals()));
|
|
364
|
+
pluginCmd
|
|
365
|
+
.command('install')
|
|
366
|
+
.description('Install a plugin from npm')
|
|
367
|
+
.argument('<name>', 'Plugin name or full package name (e.g., slack or opentabs-plugin-slack)')
|
|
368
|
+
.addHelpText('after', `
|
|
369
|
+
Examples:
|
|
370
|
+
$ opentabs plugin install slack
|
|
371
|
+
$ opentabs plugin install opentabs-plugin-slack
|
|
372
|
+
$ opentabs plugin install @my-org/opentabs-plugin-custom`)
|
|
373
|
+
.action((name, _options, command) => handlePluginInstall(name, command.optsWithGlobals()));
|
|
374
|
+
pluginCmd
|
|
375
|
+
.command('remove')
|
|
376
|
+
.description('Remove a globally installed plugin')
|
|
377
|
+
.argument('<name>', 'Plugin name or full package name (e.g., slack or opentabs-plugin-slack)')
|
|
378
|
+
.addHelpText('after', `
|
|
379
|
+
Examples:
|
|
380
|
+
$ opentabs plugin remove slack
|
|
381
|
+
$ opentabs plugin remove opentabs-plugin-slack
|
|
382
|
+
$ opentabs plugin remove @my-org/opentabs-plugin-custom`)
|
|
383
|
+
.action((name, _options, command) => handlePluginRemove(name, command.optsWithGlobals()));
|
|
14
384
|
pluginCmd
|
|
15
385
|
.command('create')
|
|
16
386
|
.description('Scaffold a new plugin project')
|
|
17
|
-
.argument('
|
|
18
|
-
.
|
|
387
|
+
.argument('[name]', 'Plugin name (lowercase alphanumeric + hyphens)')
|
|
388
|
+
.option('--domain <domain>', 'Target domain (e.g., .slack.com or github.com)')
|
|
19
389
|
.option('--display <name>', 'Display name (e.g., Slack)')
|
|
20
390
|
.option('--description <desc>', 'Plugin description')
|
|
21
391
|
.addHelpText('after', `
|
|
22
392
|
Examples:
|
|
393
|
+
$ opentabs plugin create # interactive mode
|
|
23
394
|
$ opentabs plugin create my-plugin --domain .example.com
|
|
24
395
|
$ opentabs plugin create slack --domain .slack.com --display Slack`)
|
|
25
396
|
.action(async (name, options) => {
|
|
26
397
|
try {
|
|
27
|
-
await
|
|
398
|
+
const args = await promptForMissingArgs({
|
|
28
399
|
name,
|
|
29
400
|
domain: options.domain,
|
|
30
401
|
display: options.display,
|
|
31
402
|
description: options.description,
|
|
32
403
|
});
|
|
404
|
+
await scaffoldPlugin(args);
|
|
33
405
|
}
|
|
34
406
|
catch (err) {
|
|
35
407
|
if (err instanceof ScaffoldError) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../src/commands/plugin.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/D,OAAO,EAAE,MAAM,YAAY,CAAC;AAG5B,+BAA+B;AAE/B,MAAM,qBAAqB,GAAG,CAAC,OAAgB,EAAQ,EAAE;IACvD,MAAM,SAAS,GAAG,OAAO;SACtB,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,gBAAgB,CAAC;SAC7B,MAAM,CAAC,GAAG,EAAE;QACX,SAAS,CAAC,IAAI,EAAE,CAAC;IACnB,CAAC,CAAC,CAAC;IAEL,SAAS;SACN,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,+BAA+B,CAAC;SAC5C,QAAQ,CAAC,QAAQ,EAAE,gDAAgD,CAAC;SACpE,cAAc,CAAC,mBAAmB,EAAE,gDAAgD,CAAC;SACrF,MAAM,CAAC,kBAAkB,EAAE,4BAA4B,CAAC;SACxD,MAAM,CAAC,sBAAsB,EAAE,oBAAoB,CAAC;SACpD,WAAW,CACV,OAAO,EACP;;;qEAG+D,CAChE;SACA,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,OAAmE,EAAE,EAAE;QAClG,IAAI,CAAC;YACH,MAAM,cAAc,CAAC;gBACnB,IAAI;gBACJ,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,WAAW,EAAE,OAAO,CAAC,WAAW;aACjC,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,IAAI,GAAG,YAAY,aAAa,EAAE,CAAC;gBACjC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,UAAU,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;gBAC/C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YACD,MAAM,GAAG,CAAC;QACZ,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC,CAAC;AAEF,OAAO,EAAE,qBAAqB,EAAE,CAAC"}
|
|
1
|
+
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../src/commands/plugin.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"start.d.ts","sourceRoot":"","sources":["../../src/commands/start.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AASH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"start.d.ts","sourceRoot":"","sources":["../../src/commands/start.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AASH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA2KzC,eAAO,MAAM,oBAAoB,GAAI,SAAS,OAAO,KAAG,IAavD,CAAC"}
|
package/dist/commands/start.js
CHANGED
|
@@ -64,6 +64,7 @@ const autoInitialize = async (configDir) => {
|
|
|
64
64
|
}
|
|
65
65
|
else if (result.installed) {
|
|
66
66
|
console.log(pc.dim(`Extension updated to v${result.version}`));
|
|
67
|
+
console.log(pc.dim(' Extension will auto-reload when the server connects.'));
|
|
67
68
|
}
|
|
68
69
|
}
|
|
69
70
|
catch (err) {
|
|
@@ -74,6 +75,7 @@ const autoInitialize = async (configDir) => {
|
|
|
74
75
|
return false;
|
|
75
76
|
};
|
|
76
77
|
const printFirstTimeInstructions = (extensionDest, port) => {
|
|
78
|
+
const mcpUrl = `http://127.0.0.1:${port}/mcp`;
|
|
77
79
|
console.log('');
|
|
78
80
|
console.log(pc.bold('First-time setup:'));
|
|
79
81
|
console.log('');
|
|
@@ -82,8 +84,22 @@ const printFirstTimeInstructions = (extensionDest, port) => {
|
|
|
82
84
|
console.log(` b. Enable "Developer mode" (top-right toggle)`);
|
|
83
85
|
console.log(` c. Click "Load unpacked" and select: ${pc.cyan(extensionDest)}`);
|
|
84
86
|
console.log('');
|
|
85
|
-
console.log(' 2. Configure your MCP client
|
|
86
|
-
console.log(
|
|
87
|
+
console.log(' 2. Configure your MCP client:');
|
|
88
|
+
console.log('');
|
|
89
|
+
printMcpClientConfigs(mcpUrl);
|
|
90
|
+
};
|
|
91
|
+
const printMcpClientConfigs = (mcpUrl) => {
|
|
92
|
+
console.log(pc.dim(` ${pc.bold('Claude Code')} (~/.claude/settings/mcp.json):`));
|
|
93
|
+
console.log(pc.dim(` { "mcpServers": { "opentabs": { "type": "streamable-http", "url": "${mcpUrl}" } } }`));
|
|
94
|
+
console.log('');
|
|
95
|
+
console.log(pc.dim(` ${pc.bold('Cursor')} (.cursor/mcp.json):`));
|
|
96
|
+
console.log(pc.dim(` { "mcpServers": { "opentabs": { "type": "http", "url": "${mcpUrl}" } } }`));
|
|
97
|
+
console.log('');
|
|
98
|
+
console.log(pc.dim(` ${pc.bold('Windsurf')} (~/.codeium/windsurf/mcp_config.json):`));
|
|
99
|
+
console.log(pc.dim(` { "mcpServers": { "opentabs": { "serverUrl": "${mcpUrl}" } } }`));
|
|
100
|
+
console.log('');
|
|
101
|
+
console.log(pc.dim(' For other MCP clients, consult their documentation for adding a Streamable HTTP server'));
|
|
102
|
+
console.log(pc.dim(` pointing to ${mcpUrl}`));
|
|
87
103
|
console.log('');
|
|
88
104
|
};
|
|
89
105
|
const handleStart = async (options) => {
|
|
@@ -118,9 +134,9 @@ const handleStart = async (options) => {
|
|
|
118
134
|
printFirstTimeInstructions(extensionDest, port);
|
|
119
135
|
}
|
|
120
136
|
else {
|
|
121
|
-
console.log(pc.dim(' MCP client config (
|
|
122
|
-
console.log(pc.dim(` { "mcpServers": { "opentabs": { "type": "streamable-http", "url": "http://127.0.0.1:${port}/mcp" } } }`));
|
|
137
|
+
console.log(pc.dim(' MCP client config (add to your client):'));
|
|
123
138
|
console.log('');
|
|
139
|
+
printMcpClientConfigs(`http://127.0.0.1:${port}/mcp`);
|
|
124
140
|
}
|
|
125
141
|
console.log(pc.dim(' Press Ctrl+C to stop'));
|
|
126
142
|
console.log('');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"start.js","sourceRoot":"","sources":["../../src/commands/start.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AACvD,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAQzC,MAAM,kBAAkB,GAAG,GAAW,EAAE;IACtC,IAAI,CAAC;QACH,OAAO,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,0BAA0B,CAAC,CAAC,CAAC;IACxE,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QACvD,OAAO,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;IAC7E,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,WAAW,GAAG,KAAK,EAAE,IAAY,EAAoB,EAAE;IAC3D,IAAI,CAAC;QACH,MAAM,KAAK,CAAC,oBAAoB,IAAI,SAAS,EAAE;YAC7C,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC;SACnC,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC,CAAC;AAEF;;;GAGG;AACH,MAAM,SAAS,GAAG,KAAK,EACrB,QAAoC,EACpC,QAA4B,EAC5B,OAAoB,EACL,EAAE;IACjB,MAAM,MAAM,GAAG,QAAQ,CAAC,SAAS,EAAE,CAAC;IACpC,SAAS,CAAC;QACR,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;QAC5C,IAAI,IAAI;YAAE,MAAM;QAChB,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACtB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;AACH,CAAC,CAAC;AAEF;;;GAGG;AACH,MAAM,cAAc,GAAG,KAAK,EAAE,SAAiB,EAAoB,EAAE;IACnE,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE1C,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,SAAS,CAAC,CAAC;QAEjD,IAAI,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;YACzC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,0BAA0B,MAAM,CAAC,aAAa,MAAM,MAAM,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;YAC7F,OAAO,IAAI,CAAC;QACd,CAAC;aAAM,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;YAC5B,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,yBAAyB,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"start.js","sourceRoot":"","sources":["../../src/commands/start.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAuBzC,QAAA,MAAM,YAAY,GAAI,SAAS,MAAM,KAAG,MAWvC,CAAC;AAEF,QAAA,MAAM,aAAa,GAAI,UAAU,MAAM,KAAG,MAIzC,CAAC;AAEF,QAAA,MAAM,SAAS,GAAI,KAAK,OAAO,KAAG,OAAqE,CAAC;AAsGxG,QAAA,MAAM,qBAAqB,GAAI,SAAS,OAAO,KAAG,IAejD,CAAC;AAEF,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,SAAS,EAAE,qBAAqB,EAAE,CAAC"}
|
package/dist/commands/status.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* `opentabs status` command — shows server status and connected plugins.
|
|
3
3
|
*/
|
|
4
|
-
import { isConnectionRefused } from '../config.js';
|
|
4
|
+
import { getConfigPath, isConnectionRefused, readConfig } from '../config.js';
|
|
5
5
|
import { parsePort, resolvePort } from '../parse-port.js';
|
|
6
6
|
import pc from 'picocolors';
|
|
7
7
|
const pad = (label) => ` ${pc.cyan(label.padEnd(14))}`;
|
|
@@ -31,8 +31,14 @@ const isTimeout = (err) => err instanceof DOMException && err.name === 'TimeoutE
|
|
|
31
31
|
const handleStatus = async (options) => {
|
|
32
32
|
const port = resolvePort(options);
|
|
33
33
|
const url = `http://localhost:${port}/health`;
|
|
34
|
+
const configPath = getConfigPath();
|
|
35
|
+
const { config } = await readConfig(configPath);
|
|
36
|
+
const secret = config && typeof config.secret === 'string' ? config.secret : null;
|
|
34
37
|
try {
|
|
35
|
-
const
|
|
38
|
+
const headers = {};
|
|
39
|
+
if (secret)
|
|
40
|
+
headers['Authorization'] = `Bearer ${secret}`;
|
|
41
|
+
const res = await fetch(url, { headers, signal: AbortSignal.timeout(3_000) });
|
|
36
42
|
if (!res.ok) {
|
|
37
43
|
console.error(pc.red(`Error: MCP server returned HTTP ${res.status}.`));
|
|
38
44
|
console.error('The server may be misconfigured. Check the server logs for details.');
|
|
@@ -48,16 +54,20 @@ const handleStatus = async (options) => {
|
|
|
48
54
|
const toolCount = Number(data.toolCount) || 0;
|
|
49
55
|
const uptime = Number(data.uptime) || 0;
|
|
50
56
|
const pluginDetails = Array.isArray(data.pluginDetails) ? data.pluginDetails : [];
|
|
57
|
+
const serverSdkVersion = typeof data.sdkVersion === 'string' ? data.sdkVersion : null;
|
|
51
58
|
console.log(pc.bold('OpenTabs MCP Server'));
|
|
52
59
|
console.log(`${pad('Status')}${pc.green('running')}`);
|
|
53
60
|
console.log(`${pad('Version')}${String(data.version)}`);
|
|
61
|
+
if (serverSdkVersion) {
|
|
62
|
+
console.log(`${pad('SDK')}${serverSdkVersion}`);
|
|
63
|
+
}
|
|
54
64
|
console.log(`${pad('Port')}${String(port)}`);
|
|
55
65
|
console.log(`${pad('Uptime')}${formatUptime(uptime)}`);
|
|
56
66
|
console.log(`${pad('Extension')}${data.extensionConnected ? pc.green('connected') : pc.yellow('not connected')}`);
|
|
57
67
|
console.log(`${pad('MCP clients')}${mcpClients > 0 ? pc.green(String(mcpClients)) : pc.dim('0')}`);
|
|
58
68
|
console.log(`${pad('Plugins')}${plugins > 0 ? pc.green(String(plugins)) : pc.yellow('0')}`);
|
|
59
69
|
console.log(`${pad('Tools')}${toolCount > 0 ? pc.green(String(toolCount)) : pc.dim('0')}`);
|
|
60
|
-
console.log(`${pad('
|
|
70
|
+
console.log(`${pad('Plugin reloads')}${String(data.reloadCount)}`);
|
|
61
71
|
if (pluginDetails.length > 0) {
|
|
62
72
|
console.log('');
|
|
63
73
|
console.log(pc.bold(' Plugins'));
|
|
@@ -65,7 +75,18 @@ const handleStatus = async (options) => {
|
|
|
65
75
|
const state = colorTabState(p.tabState);
|
|
66
76
|
const tools = pc.dim(`${p.toolCount} tool${p.toolCount === 1 ? '' : 's'}`);
|
|
67
77
|
const sourceLabel = p.source === 'local' ? ` ${pc.dim('(local)')}` : ` ${pc.dim('(npm)')}`;
|
|
68
|
-
|
|
78
|
+
const sdkWarning = p.sdkVersion === null ? ` ${pc.yellow('⚠ no SDK version')}` : '';
|
|
79
|
+
console.log(` ${p.displayName}${sourceLabel} ${pc.dim('—')} ${state} ${pc.dim('·')} ${tools}${sdkWarning}`);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
const disabledBrowserTools = Array.isArray(data.disabledBrowserTools)
|
|
83
|
+
? data.disabledBrowserTools
|
|
84
|
+
: [];
|
|
85
|
+
if (disabledBrowserTools.length > 0) {
|
|
86
|
+
console.log('');
|
|
87
|
+
console.log(pc.bold(' Disabled Browser Tools'));
|
|
88
|
+
for (const name of disabledBrowserTools) {
|
|
89
|
+
console.log(` ${pc.red(name)}`);
|
|
69
90
|
}
|
|
70
91
|
}
|
|
71
92
|
const failedPlugins = Array.isArray(data.failedPlugins) ? data.failedPlugins : [];
|