@opentabs-dev/cli 0.0.27 → 0.0.29

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 (45) hide show
  1. package/dist/cli.d.ts +1 -1
  2. package/dist/cli.js +3 -2
  3. package/dist/cli.js.map +1 -1
  4. package/dist/commands/audit.d.ts.map +1 -1
  5. package/dist/commands/audit.js +32 -12
  6. package/dist/commands/audit.js.map +1 -1
  7. package/dist/commands/config.d.ts.map +1 -1
  8. package/dist/commands/config.js +102 -27
  9. package/dist/commands/config.js.map +1 -1
  10. package/dist/commands/doctor.d.ts +7 -2
  11. package/dist/commands/doctor.d.ts.map +1 -1
  12. package/dist/commands/doctor.js +94 -23
  13. package/dist/commands/doctor.js.map +1 -1
  14. package/dist/commands/logs.d.ts.map +1 -1
  15. package/dist/commands/logs.js +6 -3
  16. package/dist/commands/logs.js.map +1 -1
  17. package/dist/commands/plugin.d.ts.map +1 -1
  18. package/dist/commands/plugin.js +69 -92
  19. package/dist/commands/plugin.js.map +1 -1
  20. package/dist/commands/setup.d.ts.map +1 -1
  21. package/dist/commands/setup.js +7 -8
  22. package/dist/commands/setup.js.map +1 -1
  23. package/dist/commands/start.d.ts.map +1 -1
  24. package/dist/commands/start.js +60 -23
  25. package/dist/commands/start.js.map +1 -1
  26. package/dist/commands/status.d.ts.map +1 -1
  27. package/dist/commands/status.js +6 -0
  28. package/dist/commands/status.js.map +1 -1
  29. package/dist/commands/update.d.ts +1 -1
  30. package/dist/commands/update.d.ts.map +1 -1
  31. package/dist/commands/update.js +18 -13
  32. package/dist/commands/update.js.map +1 -1
  33. package/dist/config.d.ts.map +1 -1
  34. package/dist/config.js +5 -7
  35. package/dist/config.js.map +1 -1
  36. package/dist/notify-server.d.ts +16 -0
  37. package/dist/notify-server.d.ts.map +1 -0
  38. package/dist/notify-server.js +53 -0
  39. package/dist/notify-server.js.map +1 -0
  40. package/dist/parse-port.js +2 -2
  41. package/dist/parse-port.js.map +1 -1
  42. package/dist/scaffold.d.ts.map +1 -1
  43. package/dist/scaffold.js +19 -16
  44. package/dist/scaffold.js.map +1 -1
  45. package/package.json +5 -5
@@ -1,9 +1,9 @@
1
1
  /**
2
2
  * `opentabs doctor` command — diagnoses the entire OpenTabs setup.
3
3
  */
4
- import { getConfigPath, getExtensionDir, getLocalPluginsFromConfig, readConfig, resolvePluginPath } from '../config.js';
4
+ import { getConfigPath, getExtensionDir, getLocalPluginsFromConfig, readAuthSecret, readConfig, resolvePluginPath, } from '../config.js';
5
5
  import { parsePort, resolvePort } from '../parse-port.js';
6
- import { ADAPTER_FILENAME, TOOLS_FILENAME } from '@opentabs-dev/shared';
6
+ import { ADAPTER_FILENAME, TOOLS_FILENAME, fileExists as runtimeFileExists, isBun, readFile, readJsonFile, } from '@opentabs-dev/shared';
7
7
  import pc from 'picocolors';
8
8
  import { existsSync } from 'node:fs';
9
9
  import { homedir } from 'node:os';
@@ -24,12 +24,11 @@ const fail = (label, detail, hint) => ({
24
24
  hint,
25
25
  fatal: true,
26
26
  });
27
- const checkBunVersion = () => {
28
- const bunVersion = typeof Bun !== 'undefined' ? Bun.version : undefined;
29
- if (bunVersion) {
30
- return pass('Bun runtime', `v${bunVersion}`);
27
+ const checkRuntime = () => {
28
+ if (isBun) {
29
+ return pass('Runtime', `Bun v${Bun.version}`);
31
30
  }
32
- return fail('Bun runtime', 'not detected', 'Install Bun: https://bun.sh');
31
+ return pass('Runtime', `Node.js ${process.version}`);
33
32
  };
34
33
  const checkConfigFile = async () => {
35
34
  const configPath = getConfigPath();
@@ -93,7 +92,7 @@ const checkExtensionInstalled = async () => {
93
92
  };
94
93
  }
95
94
  const versionPath = join(extensionDir, '.opentabs-version');
96
- const versionFile = (await Bun.file(versionPath).exists()) ? await Bun.file(versionPath).text() : null;
95
+ const versionFile = (await runtimeFileExists(versionPath)) ? await readFile(versionPath) : null;
97
96
  return {
98
97
  result: pass('Extension installed', extensionDir),
99
98
  versionFile: versionFile?.trim() ?? null,
@@ -103,7 +102,7 @@ const checkExtensionVersion = async (installedVersion) => {
103
102
  const cliDir = dirname(fileURLToPath(import.meta.url));
104
103
  let cliVersion = 'unknown';
105
104
  try {
106
- const pkgJson = JSON.parse(await Bun.file(join(cliDir, '..', '..', 'package.json')).text());
105
+ const pkgJson = JSON.parse(await readFile(join(cliDir, '..', '..', 'package.json')));
107
106
  cliVersion = pkgJson.version;
108
107
  }
109
108
  catch {
@@ -147,7 +146,7 @@ const checkMcpClientConfig = async (clients = defaultMcpClientLocations()) => {
147
146
  if (!existsSync(client.path))
148
147
  continue;
149
148
  try {
150
- const content = await Bun.file(client.path).text();
149
+ const content = await readFile(client.path);
151
150
  const parsed = JSON.parse(content);
152
151
  if (parsed !== null &&
153
152
  typeof parsed === 'object' &&
@@ -192,7 +191,7 @@ const checkPlugins = async (config) => {
192
191
  }
193
192
  let pluginName = pluginPath;
194
193
  try {
195
- const pkgData = await Bun.file(join(resolvedPath, 'package.json')).json();
194
+ const pkgData = await readJsonFile(join(resolvedPath, 'package.json'));
196
195
  if (pkgData !== null && typeof pkgData === 'object' && 'name' in pkgData) {
197
196
  const d = pkgData;
198
197
  pluginName = d.name;
@@ -205,31 +204,103 @@ const checkPlugins = async (config) => {
205
204
  }
206
205
  return results;
207
206
  };
207
+ const MACOS_BROWSER_PATHS = [
208
+ '/Applications/Google Chrome.app',
209
+ '/Applications/Chromium.app',
210
+ '/Applications/Microsoft Edge.app',
211
+ '/Applications/Brave Browser.app',
212
+ ];
213
+ const LINUX_BROWSER_COMMANDS = ['google-chrome', 'chromium', 'chromium-browser', 'microsoft-edge'];
214
+ const checkBrowser = () => {
215
+ const platform = process.platform;
216
+ if (platform === 'darwin') {
217
+ for (const appPath of MACOS_BROWSER_PATHS) {
218
+ if (existsSync(appPath)) {
219
+ const name = appPath.replace('/Applications/', '').replace('.app', '');
220
+ return pass('Browser', name);
221
+ }
222
+ }
223
+ return warn('Browser', 'no Chromium-based browser found', 'Install Google Chrome, Microsoft Edge, or Brave from their official websites');
224
+ }
225
+ if (platform === 'linux') {
226
+ for (const cmd of LINUX_BROWSER_COMMANDS) {
227
+ try {
228
+ const result = Bun.spawnSync(['which', cmd], { stdout: 'pipe', stderr: 'pipe' });
229
+ if (result.exitCode === 0) {
230
+ return pass('Browser', cmd);
231
+ }
232
+ }
233
+ catch {
234
+ // which failed — try next
235
+ }
236
+ }
237
+ return warn('Browser', 'no Chromium-based browser found', 'Install google-chrome, chromium, or microsoft-edge via your package manager');
238
+ }
239
+ if (platform === 'win32') {
240
+ const programFiles = process.env.PROGRAMFILES ?? 'C:\\Program Files';
241
+ const programFilesX86 = process.env['PROGRAMFILES(X86)'] ?? 'C:\\Program Files (x86)';
242
+ const winPaths = [
243
+ join(programFiles, 'Google', 'Chrome', 'Application', 'chrome.exe'),
244
+ join(programFilesX86, 'Google', 'Chrome', 'Application', 'chrome.exe'),
245
+ join(programFiles, 'Microsoft', 'Edge', 'Application', 'msedge.exe'),
246
+ join(programFilesX86, 'Microsoft', 'Edge', 'Application', 'msedge.exe'),
247
+ join(programFiles, 'BraveSoftware', 'Brave-Browser', 'Application', 'brave.exe'),
248
+ join(programFilesX86, 'BraveSoftware', 'Brave-Browser', 'Application', 'brave.exe'),
249
+ ];
250
+ for (const exePath of winPaths) {
251
+ if (existsSync(exePath)) {
252
+ const name = exePath.includes('Chrome')
253
+ ? 'Google Chrome'
254
+ : exePath.includes('Edge')
255
+ ? 'Microsoft Edge'
256
+ : 'Brave';
257
+ return pass('Browser', name);
258
+ }
259
+ }
260
+ return warn('Browser', 'no Chromium-based browser found', 'Install Google Chrome, Microsoft Edge, or Brave from their official websites');
261
+ }
262
+ return warn('Browser', `unsupported platform: ${platform}`, 'Ensure a Chromium-based browser is installed');
263
+ };
264
+ const checkAuthSecret = async () => {
265
+ const secret = await readAuthSecret();
266
+ if (secret) {
267
+ return { result: pass('Auth secret', 'valid'), secret };
268
+ }
269
+ const authPath = join(getExtensionDir(), 'auth.json');
270
+ return {
271
+ result: warn('Auth secret', `missing or invalid at ${authPath}`, 'Run opentabs start to generate auth.json'),
272
+ secret: null,
273
+ };
274
+ };
208
275
  const handleDoctor = async (options) => {
209
276
  const port = resolvePort(options);
210
277
  const results = [];
211
- // 1. Bun version
212
- results.push(checkBunVersion());
213
- // 2. Config file
278
+ // 1. Runtime version
279
+ results.push(checkRuntime());
280
+ // 2. Browser
281
+ results.push(checkBrowser());
282
+ // 3. Config file
214
283
  const { result: configResult, config } = await checkConfigFile();
215
284
  results.push(configResult);
216
- // 3. MCP server health
217
- const secret = config && typeof config.secret === 'string' ? config.secret : null;
285
+ // 4. Auth secret
286
+ const { result: authResult, secret } = await checkAuthSecret();
287
+ results.push(authResult);
288
+ // 5. MCP server health
218
289
  const { result: serverResult, data: healthData } = await checkServerHealth(port, secret);
219
290
  results.push(serverResult);
220
- // 4. Extension connected
291
+ // 6. Extension connected
221
292
  results.push(checkExtensionConnected(healthData));
222
- // 5. Extension installed
293
+ // 7. Extension installed
223
294
  const { result: installedResult, versionFile } = await checkExtensionInstalled();
224
295
  results.push(installedResult);
225
- // 6. Extension version matches CLI
296
+ // 8. Extension version matches CLI
226
297
  results.push(await checkExtensionVersion(versionFile));
227
- // 7. MCP client config
298
+ // 9. MCP client config
228
299
  results.push(await checkMcpClientConfig());
229
- // 8. Local plugin checks
300
+ // 10. Local plugin checks
230
301
  const pluginResults = await checkPlugins(config);
231
302
  results.push(...pluginResults);
232
- // 9. npm plugin health (from server /health data)
303
+ // 11. npm plugin health (from server /health data)
233
304
  results.push(...checkNpmPlugins(healthData));
234
305
  // Print results
235
306
  console.log(pc.bold('OpenTabs Doctor'));
@@ -270,5 +341,5 @@ Examples:
270
341
  $ opentabs doctor --port 3000`)
271
342
  .action((_options, command) => handleDoctor(command.optsWithGlobals()));
272
343
  };
273
- export { checkBunVersion, checkConfigFile, checkExtensionConnected, checkMcpClientConfig, checkNpmPlugins, checkPlugins, checkServerHealth, registerDoctorCommand, };
344
+ export { checkAuthSecret, checkBrowser, checkRuntime, checkConfigFile, checkExtensionConnected, checkMcpClientConfig, checkNpmPlugins, checkPlugins, checkServerHealth, registerDoctorCommand, };
274
345
  //# sourceMappingURL=doctor.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"logs.d.ts","sourceRoot":"","sources":["../../src/commands/logs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAMH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA2JzC,QAAA,MAAM,mBAAmB,GAAI,SAAS,OAAO,KAAG,IAiB/C,CAAC;AAEF,OAAO,EAAE,mBAAmB,EAAE,CAAC"}
1
+ {"version":3,"file":"logs.d.ts","sourceRoot":"","sources":["../../src/commands/logs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAOH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAgKzC,QAAA,MAAM,mBAAmB,GAAI,SAAS,OAAO,KAAG,IAiB/C,CAAC;AAEF,OAAO,EAAE,mBAAmB,EAAE,CAAC"}
@@ -12,6 +12,7 @@
12
12
  * onPluginLog handler.
13
13
  */
14
14
  import { getLogFilePath } from '../config.js';
15
+ import { getFileSize, readFileSlice } from '@opentabs-dev/shared';
15
16
  import { InvalidArgumentError } from 'commander';
16
17
  import pc from 'picocolors';
17
18
  import { existsSync, statSync, createReadStream, watch } from 'node:fs';
@@ -27,12 +28,11 @@ const TAIL_BUFFER_SIZE = 64 * 1024;
27
28
  * included in the result. The line count applies to filtered lines.
28
29
  */
29
30
  const tailFile = async (filePath, lineCount, filter) => {
30
- const file = Bun.file(filePath);
31
- const fileSize = file.size;
31
+ const fileSize = await getFileSize(filePath);
32
32
  if (lineCount <= 0 || fileSize === 0)
33
33
  return { content: '', fileSize };
34
34
  const readStart = Math.max(0, fileSize - TAIL_BUFFER_SIZE);
35
- const chunk = await file.slice(readStart, fileSize).text();
35
+ const chunk = await readFileSlice(filePath, readStart, fileSize);
36
36
  let lines = chunk.split('\n');
37
37
  // If we didn't read from the start, the first line may be partial — skip it
38
38
  if (readStart > 0)
@@ -147,6 +147,9 @@ const handleLogs = async (options) => {
147
147
  if (options.follow === true) {
148
148
  await followFile(logFilePath, fileSize, filter);
149
149
  }
150
+ else if (!content && options.plugin) {
151
+ console.error(pc.dim(`No log output found for plugin "${options.plugin}". Check the plugin name or ensure the plugin has produced log output.`));
152
+ }
150
153
  };
151
154
  const registerLogsCommand = (program) => {
152
155
  program
@@ -1 +1 @@
1
- {"version":3,"file":"logs.js","sourceRoot":"","sources":["../../src/commands/logs.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"logs.js","sourceRoot":"","sources":["../../src/commands/logs.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../src/commands/plugin.ts"],"names":[],"mappings":"AAAA;;GAEG;AAwBH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAmDzC;;;GAGG;AACH,QAAA,MAAM,kBAAkB,GAAI,KAAK,MAAM,KAAG,OAKzC,CAAC;AAEF;;;;;;GAMG;AACH,QAAA,MAAM,kBAAkB,GAAI,MAAM,MAAM,KAAG,MAAM,GAAG,IAQnD,CAAC;AAiKF;;;;;;GAMG;AACH,QAAA,MAAM,2BAA2B,GAAI,QAAQ,MAAM,KAAG,MAAM,EAK3D,CAAC;AAkTF,QAAA,MAAM,qBAAqB,GAAI,SAAS,OAAO,KAAG,IAoGjD,CAAC;AAEF,OAAO,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,2BAA2B,EAAE,CAAC"}
1
+ {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../src/commands/plugin.ts"],"names":[],"mappings":"AAAA;;GAEG;AA6BH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAazC;;;GAGG;AACH,QAAA,MAAM,kBAAkB,GAAI,KAAK,MAAM,KAAG,OAGzC,CAAC;AAEF;;;;;;GAMG;AACH,QAAA,MAAM,kBAAkB,GAAI,MAAM,MAAM,KAAG,MAAM,GAAG,IAQnD,CAAC;AAgLF;;;;;;GAMG;AACH,QAAA,MAAM,2BAA2B,GAAI,QAAQ,MAAM,KAAG,MAAM,EAK3D,CAAC;AA0TF,QAAA,MAAM,qBAAqB,GAAI,SAAS,OAAO,KAAG,IAwGjD,CAAC;AAEF,OAAO,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,2BAA2B,EAAE,CAAC"}
@@ -2,60 +2,21 @@
2
2
  * `opentabs plugin` command — plugin management (create, search, install, remove, list).
3
3
  */
4
4
  import { colorTabState } from './status.js';
5
- import { atomicWriteConfig, getConfigPath, getLocalPluginsFromConfig, isConnectionRefused, readAuthSecret, readConfig, resolvePluginPath, } from '../config.js';
5
+ import { atomicWriteConfig, getConfigPath, getLocalPluginsFromConfig, isConnectionRefused, readConfig, resolvePluginPath, } from '../config.js';
6
+ import { notifyServer } from '../notify-server.js';
6
7
  import { parsePort, resolvePort } from '../parse-port.js';
7
8
  import { scaffoldPlugin, promptForMissingArgs, ScaffoldError } from '../scaffold.js';
8
- import { TOOLS_FILENAME, OFFICIAL_SCOPE, PLUGIN_PREFIX, normalizePluginName, resolvePluginPackageCandidates, platformExec, } from '@opentabs-dev/shared';
9
+ import { TOOLS_FILENAME, OFFICIAL_SCOPE, PLUGIN_PREFIX, normalizePluginName, readFile, resolvePluginPackageCandidates, platformExec, spawnInherit, spawnProcess, spawnProcessSync, toErrorMessage, } from '@opentabs-dev/shared';
9
10
  import pc from 'picocolors';
10
11
  import { join } from 'node:path';
11
- /**
12
- * Notify the running MCP server to rediscover plugins via POST /reload.
13
- * Non-fatal — prints a hint on failure but never throws.
14
- */
15
- const notifyServer = async (options) => {
16
- const port = resolvePort(options);
17
- const secret = await readAuthSecret();
18
- try {
19
- const healthRes = await fetch(`http://localhost:${port}/health`, {
20
- signal: AbortSignal.timeout(3_000),
21
- });
22
- if (!healthRes.ok)
23
- return;
24
- }
25
- catch {
26
- // Server not running — nothing to notify
27
- return;
28
- }
29
- try {
30
- const headers = { 'Content-Type': 'application/json' };
31
- if (secret)
32
- headers['Authorization'] = `Bearer ${secret}`;
33
- const res = await fetch(`http://localhost:${port}/reload`, {
34
- method: 'POST',
35
- headers,
36
- signal: AbortSignal.timeout(5_000),
37
- });
38
- if (res.ok) {
39
- console.log(pc.dim('Server notified — plugins rediscovered.'));
40
- }
41
- else {
42
- console.log(pc.dim(`Could not notify server (HTTP ${res.status}). Restart the server to pick up changes.`));
43
- }
44
- }
45
- catch {
46
- console.log(pc.dim('Could not notify server. Restart the server to pick up changes.'));
47
- }
48
- };
49
12
  // --- Install handler ---
50
13
  /**
51
14
  * Check whether a package exists on the npm registry via `npm view`.
52
15
  * Delegates auth to npm itself (reads ~/.npmrc), supporting private packages.
53
16
  */
54
17
  const packageExistsOnNpm = (pkg) => {
55
- const result = Bun.spawnSync([platformExec('npm'), 'view', pkg, 'version'], {
56
- stdio: ['ignore', 'pipe', 'pipe'],
57
- });
58
- return result.exitCode === 0 && result.stdout.toString().trim().length > 0;
18
+ const result = spawnProcessSync('npm', ['view', pkg, 'version']);
19
+ return result.exitCode === 0 && result.stdout.trim().length > 0;
59
20
  };
60
21
  /**
61
22
  * Resolve a user-supplied plugin name to the actual npm package name.
@@ -74,6 +35,29 @@ const resolvePackageName = (name) => {
74
35
  }
75
36
  return null;
76
37
  };
38
+ /**
39
+ * After a global npm install, check the installed package's package.json for
40
+ * the `opentabs` field or `opentabs-plugin` keyword. Prints a yellow warning
41
+ * if neither is found — the install is not rolled back.
42
+ */
43
+ const warnIfNotPlugin = async (pkg) => {
44
+ try {
45
+ const rootResult = await spawnProcess('npm', ['root', '-g']);
46
+ const globalRoot = rootResult.stdout.trim();
47
+ const pkgJsonPath = join(globalRoot, pkg, 'package.json');
48
+ const pkgJsonText = await readFile(pkgJsonPath);
49
+ const pkgJson = JSON.parse(pkgJsonText);
50
+ const hasOpentabsField = typeof pkgJson.opentabs === 'object' && pkgJson.opentabs !== null;
51
+ const keywords = Array.isArray(pkgJson.keywords) ? pkgJson.keywords : [];
52
+ const hasPluginKeyword = keywords.includes('opentabs-plugin');
53
+ if (!hasOpentabsField && !hasPluginKeyword) {
54
+ console.log(pc.yellow('Warning: This package does not appear to be an OpenTabs plugin (missing opentabs metadata). It may not load correctly.'));
55
+ }
56
+ }
57
+ catch {
58
+ // Cannot read installed package — skip validation silently
59
+ }
60
+ };
77
61
  const handlePluginInstall = async (name, options) => {
78
62
  const candidates = resolvePluginPackageCandidates(name);
79
63
  const isShorthand = candidates.length > 1;
@@ -89,15 +73,13 @@ const handlePluginInstall = async (name, options) => {
89
73
  process.exit(1);
90
74
  }
91
75
  console.log(`Installing ${pc.bold(pkg)}...`);
92
- const proc = Bun.spawn([platformExec('npm'), 'install', '-g', pkg], {
93
- stdio: ['inherit', 'inherit', 'inherit'],
94
- });
95
- const exitCode = await proc.exited;
76
+ const exitCode = await spawnInherit(platformExec('npm'), ['install', '-g', pkg]);
96
77
  if (exitCode !== 0) {
97
78
  console.error(pc.red(`npm install failed (exit code ${exitCode}).`));
98
79
  process.exit(1);
99
80
  }
100
81
  console.log(pc.green(`Successfully installed ${pkg}.`));
82
+ await warnIfNotPlugin(pkg);
101
83
  await notifyServer(options);
102
84
  };
103
85
  // --- Remove handler ---
@@ -118,7 +100,7 @@ const removeFromLocalPlugins = async (pkg) => {
118
100
  const resolved = resolvePluginPath(entry, configPath);
119
101
  const pkgJsonPath = join(resolved, 'package.json');
120
102
  try {
121
- const pkgJson = JSON.parse(await Bun.file(pkgJsonPath).text());
103
+ const pkgJson = JSON.parse(await readFile(pkgJsonPath));
122
104
  if (typeof pkgJson === 'object' && pkgJson !== null && pkgJson.name === pkg) {
123
105
  continue;
124
106
  }
@@ -141,29 +123,16 @@ const handlePluginRemove = async (name, options) => {
141
123
  if (isShorthand) {
142
124
  console.log(`Resolving plugin ${pc.bold(name)}...`);
143
125
  }
144
- const pkg = resolvePackageName(name);
145
- if (!pkg) {
146
- // Fall back to the primary candidate for uninstall (npm uninstall is lenient)
147
- const fallback = normalizePluginName(name);
148
- console.log(`Removing ${pc.bold(fallback)}...`);
149
- const proc = Bun.spawn([platformExec('npm'), 'uninstall', '-g', fallback], {
150
- stdio: ['inherit', 'inherit', 'inherit'],
151
- });
152
- const exitCode = await proc.exited;
153
- if (exitCode !== 0) {
154
- console.error(pc.red(`npm uninstall failed (exit code ${exitCode}).`));
155
- process.exit(1);
156
- }
157
- console.log(pc.green(`Successfully removed ${fallback}.`));
158
- await removeFromLocalPlugins(fallback);
159
- await notifyServer(options);
160
- return;
126
+ const pkg = resolvePackageName(name) ?? normalizePluginName(name);
127
+ if (!options.confirm) {
128
+ console.error(`This will remove the plugin ${pc.bold(pkg)} globally.`);
129
+ console.error('');
130
+ console.error(`Run with ${pc.bold('--confirm')} (or ${pc.bold('-y')}) to proceed:`);
131
+ console.error(` opentabs plugin remove ${name} --confirm`);
132
+ process.exit(1);
161
133
  }
162
134
  console.log(`Removing ${pc.bold(pkg)}...`);
163
- const proc = Bun.spawn([platformExec('npm'), 'uninstall', '-g', pkg], {
164
- stdio: ['inherit', 'inherit', 'inherit'],
165
- });
166
- const exitCode = await proc.exited;
135
+ const exitCode = await spawnInherit(platformExec('npm'), ['uninstall', '-g', pkg]);
167
136
  if (exitCode !== 0) {
168
137
  console.error(pc.red(`npm uninstall failed (exit code ${exitCode}).`));
169
138
  process.exit(1);
@@ -179,10 +148,10 @@ const handlePluginRemove = async (name, options) => {
179
148
  */
180
149
  const fetchPackageInfo = (pkg) => {
181
150
  try {
182
- const result = Bun.spawnSync([platformExec('npm'), 'view', pkg, 'name', 'description', 'version', 'maintainers', '--json'], { stdio: ['ignore', 'pipe', 'pipe'] });
151
+ const result = spawnProcessSync('npm', ['view', pkg, 'name', 'description', 'version', 'maintainers', '--json']);
183
152
  if (result.exitCode !== 0)
184
153
  return null;
185
- const data = JSON.parse(result.stdout.toString().trim());
154
+ const data = JSON.parse(result.stdout.trim());
186
155
  const name = typeof data.name === 'string' ? data.name : pkg;
187
156
  const version = typeof data.version === 'string' ? data.version : null;
188
157
  if (!version)
@@ -227,13 +196,11 @@ const buildDirectLookupCandidates = (query) => {
227
196
  */
228
197
  const npmSearchPlugins = (query) => {
229
198
  const searchTerm = query ? `keywords:opentabs-plugin ${query}` : 'keywords:opentabs-plugin';
230
- const result = Bun.spawnSync([platformExec('npm'), 'search', searchTerm, '--json'], {
231
- stdio: ['ignore', 'pipe', 'pipe'],
232
- });
199
+ const result = spawnProcessSync('npm', ['search', searchTerm, '--json']);
233
200
  if (result.exitCode !== 0)
234
201
  return [];
235
202
  try {
236
- const entries = JSON.parse(result.stdout.toString().trim());
203
+ const entries = JSON.parse(result.stdout.trim());
237
204
  return entries.map(entry => ({
238
205
  name: entry.name,
239
206
  description: entry.description,
@@ -272,16 +239,26 @@ const handlePluginSearch = (query) => {
272
239
  }
273
240
  }
274
241
  if (results.length === 0) {
275
- const term = query ?? '';
276
- console.log(pc.yellow(`No plugins found for '${term}'. Try a different search term.`));
242
+ console.log(pc.yellow(query ? `No plugins found for "${query}". Try a different search term.` : 'No plugins found.'));
277
243
  return;
278
244
  }
245
+ const termWidth = process.stdout.columns || 80;
246
+ // Compute the max visible width used by non-description parts across all results.
247
+ // Line format: " [label] name vVersion — desc by author"
248
+ const maxLabelLen = 11; // "[community]" is the longest label
249
+ const overheadPerPkg = results.map(pkg => {
250
+ const author = pkg.publisher?.username ?? 'unknown';
251
+ // 2 indent + label + 1 space + name + 1 space + "v" + version + " — " + " by " + author
252
+ return 2 + maxLabelLen + 1 + pkg.name.length + 1 + 1 + pkg.version.length + 3 + 4 + author.length;
253
+ });
254
+ const maxOverhead = Math.max(...overheadPerPkg);
255
+ const descWidth = Math.max(30, termWidth - maxOverhead);
279
256
  console.log();
280
257
  for (const pkg of results) {
281
258
  const label = pkg.name.startsWith(`${OFFICIAL_SCOPE}/`) ? pc.blue('[official]') : pc.dim('[community]');
282
259
  const desc = pkg.description
283
- ? pkg.description.length > 60
284
- ? pkg.description.slice(0, 57) + '...'
260
+ ? pkg.description.length > descWidth
261
+ ? pkg.description.slice(0, descWidth - 3) + '...'
285
262
  : pkg.description
286
263
  : '';
287
264
  const author = pkg.publisher?.username ?? 'unknown';
@@ -296,7 +273,7 @@ const handlePluginSearch = (query) => {
296
273
  */
297
274
  const readLocalPluginInfo = async (pluginDir) => {
298
275
  try {
299
- const pkgJsonText = await Bun.file(join(pluginDir, 'package.json')).text();
276
+ const pkgJsonText = await readFile(join(pluginDir, 'package.json'));
300
277
  const pkgJson = JSON.parse(pkgJsonText);
301
278
  const name = typeof pkgJson.name === 'string' ? pkgJson.name : null;
302
279
  if (!name)
@@ -308,7 +285,7 @@ const readLocalPluginInfo = async (pluginDir) => {
308
285
  const version = typeof pkgJson.version === 'string' ? pkgJson.version : null;
309
286
  let toolCount = 0;
310
287
  try {
311
- const toolsJsonText = await Bun.file(join(pluginDir, 'dist', TOOLS_FILENAME)).text();
288
+ const toolsJsonText = await readFile(join(pluginDir, 'dist', TOOLS_FILENAME));
312
289
  const toolsJson = JSON.parse(toolsJsonText);
313
290
  const tools = Array.isArray(toolsJson.tools) ? toolsJson.tools : [];
314
291
  toolCount = tools.length;
@@ -328,12 +305,8 @@ const readLocalPluginInfo = async (pluginDir) => {
328
305
  const scanNpmPlugins = async () => {
329
306
  const entries = [];
330
307
  try {
331
- const proc = Bun.spawn([platformExec('npm'), 'list', '-g', '--json', '--depth=0'], {
332
- stdout: 'pipe',
333
- stderr: 'pipe',
334
- });
335
- const stdout = await new Response(proc.stdout).text();
336
- await proc.exited;
308
+ const result = await spawnProcess(platformExec('npm'), ['list', '-g', '--json', '--depth=0']);
309
+ const stdout = result.stdout;
337
310
  const data = JSON.parse(stdout);
338
311
  const deps = typeof data.dependencies === 'object' && data.dependencies !== null ? data.dependencies : {};
339
312
  for (const [pkgName, info] of Object.entries(deps)) {
@@ -398,7 +371,7 @@ const handlePluginList = async (options) => {
398
371
  }
399
372
  catch (err) {
400
373
  if (!isConnectionRefused(err)) {
401
- // Unexpected error (not just "server not running") still fall through to offline mode
374
+ console.error(pc.dim(`Could not reach server: ${toErrorMessage(err)}. Showing offline data.`));
402
375
  }
403
376
  }
404
377
  // Offline mode — server is not running
@@ -477,6 +450,7 @@ Examples:
477
450
  });
478
451
  pluginCmd
479
452
  .command('list')
453
+ .alias('ls')
480
454
  .description('List installed plugins')
481
455
  .option('--port <number>', 'Server port (default: 9515)', parsePort)
482
456
  .option('--json', 'Output machine-readable JSON')
@@ -488,6 +462,7 @@ Examples:
488
462
  .action((_options, command) => handlePluginList(command.optsWithGlobals()));
489
463
  pluginCmd
490
464
  .command('install')
465
+ .alias('add')
491
466
  .description('Install a plugin from npm')
492
467
  .argument('<name>', 'Plugin name or full package name (e.g., slack or opentabs-plugin-slack)')
493
468
  .addHelpText('after', `
@@ -498,13 +473,15 @@ Examples:
498
473
  .action((name, _options, command) => handlePluginInstall(name, command.optsWithGlobals()));
499
474
  pluginCmd
500
475
  .command('remove')
476
+ .alias('rm')
501
477
  .description('Remove a globally installed plugin')
502
478
  .argument('<name>', 'Plugin name or full package name (e.g., slack or opentabs-plugin-slack)')
479
+ .option('-y, --confirm', 'Confirm removal')
503
480
  .addHelpText('after', `
504
481
  Examples:
505
- $ opentabs plugin remove slack
506
- $ opentabs plugin remove opentabs-plugin-slack
507
- $ opentabs plugin remove @my-org/opentabs-plugin-custom`)
482
+ $ opentabs plugin remove slack --confirm
483
+ $ opentabs plugin remove opentabs-plugin-slack -y
484
+ $ opentabs plugin remove @my-org/opentabs-plugin-custom --confirm`)
508
485
  .action((name, _options, command) => handlePluginRemove(name, command.optsWithGlobals()));
509
486
  pluginCmd
510
487
  .command('create')