@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.
Files changed (39) hide show
  1. package/dist/cli.js +5 -1
  2. package/dist/cli.js.map +1 -1
  3. package/dist/commands/audit.d.ts +11 -0
  4. package/dist/commands/audit.d.ts.map +1 -0
  5. package/dist/commands/audit.js +229 -0
  6. package/dist/commands/audit.js.map +1 -0
  7. package/dist/commands/config.d.ts.map +1 -1
  8. package/dist/commands/config.js +308 -18
  9. package/dist/commands/config.js.map +1 -1
  10. package/dist/commands/doctor.d.ts +7 -1
  11. package/dist/commands/doctor.d.ts.map +1 -1
  12. package/dist/commands/doctor.js +63 -8
  13. package/dist/commands/doctor.js.map +1 -1
  14. package/dist/commands/index.d.ts +1 -0
  15. package/dist/commands/index.d.ts.map +1 -1
  16. package/dist/commands/index.js +1 -0
  17. package/dist/commands/index.js.map +1 -1
  18. package/dist/commands/plugin.d.ts +1 -1
  19. package/dist/commands/plugin.d.ts.map +1 -1
  20. package/dist/commands/plugin.js +377 -5
  21. package/dist/commands/plugin.js.map +1 -1
  22. package/dist/commands/start.d.ts.map +1 -1
  23. package/dist/commands/start.js +20 -4
  24. package/dist/commands/start.js.map +1 -1
  25. package/dist/commands/status.d.ts.map +1 -1
  26. package/dist/commands/status.js +25 -4
  27. package/dist/commands/status.js.map +1 -1
  28. package/dist/config.d.ts +13 -1
  29. package/dist/config.d.ts.map +1 -1
  30. package/dist/config.js +17 -8
  31. package/dist/config.js.map +1 -1
  32. package/dist/parse-port.d.ts.map +1 -1
  33. package/dist/parse-port.js +2 -0
  34. package/dist/parse-port.js.map +1 -1
  35. package/dist/scaffold.d.ts +14 -2
  36. package/dist/scaffold.d.ts.map +1 -1
  37. package/dist/scaffold.js +86 -8
  38. package/dist/scaffold.js.map +1 -1
  39. package/package.json +4 -4
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../src/commands/plugin.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIzC,QAAA,MAAM,qBAAqB,GAAI,SAAS,OAAO,KAAG,IAsCjD,CAAC;AAEF,OAAO,EAAE,qBAAqB,EAAE,CAAC"}
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"}
@@ -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 { scaffoldPlugin, ScaffoldError } from '../scaffold.js';
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('<name>', 'Plugin name (lowercase alphanumeric + hyphens)')
18
- .requiredOption('--domain <domain>', 'Target domain (e.g., .slack.com or github.com)')
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 scaffoldPlugin({
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;AAiKzC,eAAO,MAAM,oBAAoB,GAAI,SAAS,OAAO,KAAG,IAavD,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"}
@@ -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 (~/.claude/settings/mcp.json):');
86
- console.log(pc.dim(` { "mcpServers": { "opentabs": { "type": "streamable-http", "url": "http://127.0.0.1:${port}/mcp" } } }`));
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 (~/.claude/settings/mcp.json):'));
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":"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"}
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;AAsBzC,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;AA4ExG,QAAA,MAAM,qBAAqB,GAAI,SAAS,OAAO,KAAG,IAejD,CAAC;AAEF,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,SAAS,EAAE,qBAAqB,EAAE,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"}
@@ -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 res = await fetch(url, { signal: AbortSignal.timeout(3_000) });
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('Reloads')}${String(data.reloadCount)}`);
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
- console.log(` ${p.displayName}${sourceLabel} ${pc.dim('')} ${state} ${pc.dim('·')} ${tools}`);
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 : [];