@opentabs-dev/cli 0.0.27 → 0.0.28
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.d.ts +1 -1
- package/dist/cli.js +3 -2
- package/dist/cli.js.map +1 -1
- package/dist/commands/audit.d.ts.map +1 -1
- package/dist/commands/audit.js +32 -12
- package/dist/commands/audit.js.map +1 -1
- package/dist/commands/config.d.ts.map +1 -1
- package/dist/commands/config.js +102 -27
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/doctor.d.ts +7 -2
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +94 -23
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/logs.d.ts.map +1 -1
- package/dist/commands/logs.js +6 -3
- package/dist/commands/logs.js.map +1 -1
- package/dist/commands/plugin.d.ts.map +1 -1
- package/dist/commands/plugin.js +69 -92
- package/dist/commands/plugin.js.map +1 -1
- package/dist/commands/setup.d.ts.map +1 -1
- package/dist/commands/setup.js +7 -8
- package/dist/commands/setup.js.map +1 -1
- package/dist/commands/start.d.ts.map +1 -1
- package/dist/commands/start.js +60 -23
- package/dist/commands/start.js.map +1 -1
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +6 -0
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/update.d.ts +1 -1
- package/dist/commands/update.d.ts.map +1 -1
- package/dist/commands/update.js +18 -13
- package/dist/commands/update.js.map +1 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +5 -7
- package/dist/config.js.map +1 -1
- package/dist/notify-server.d.ts +16 -0
- package/dist/notify-server.d.ts.map +1 -0
- package/dist/notify-server.js +53 -0
- package/dist/notify-server.js.map +1 -0
- package/dist/parse-port.js +2 -2
- package/dist/parse-port.js.map +1 -1
- package/dist/scaffold.d.ts.map +1 -1
- package/dist/scaffold.js +19 -16
- package/dist/scaffold.js.map +1 -1
- package/package.json +5 -5
package/dist/commands/doctor.js
CHANGED
|
@@ -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
|
|
28
|
-
|
|
29
|
-
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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.
|
|
212
|
-
results.push(
|
|
213
|
-
// 2.
|
|
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
|
-
//
|
|
217
|
-
const
|
|
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
|
-
//
|
|
291
|
+
// 6. Extension connected
|
|
221
292
|
results.push(checkExtensionConnected(healthData));
|
|
222
|
-
//
|
|
293
|
+
// 7. Extension installed
|
|
223
294
|
const { result: installedResult, versionFile } = await checkExtensionInstalled();
|
|
224
295
|
results.push(installedResult);
|
|
225
|
-
//
|
|
296
|
+
// 8. Extension version matches CLI
|
|
226
297
|
results.push(await checkExtensionVersion(versionFile));
|
|
227
|
-
//
|
|
298
|
+
// 9. MCP client config
|
|
228
299
|
results.push(await checkMcpClientConfig());
|
|
229
|
-
//
|
|
300
|
+
// 10. Local plugin checks
|
|
230
301
|
const pluginResults = await checkPlugins(config);
|
|
231
302
|
results.push(...pluginResults);
|
|
232
|
-
//
|
|
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 {
|
|
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;
|
|
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"}
|
package/dist/commands/logs.js
CHANGED
|
@@ -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
|
|
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
|
|
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":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AACjD,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AASxE,MAAM,aAAa,GAAG,EAAE,CAAC;AAEzB,wEAAwE;AACxE,MAAM,gBAAgB,GAAG,EAAE,GAAG,IAAI,CAAC;AAEnC;;;;;;;GAOG;AACH,MAAM,QAAQ,GAAG,KAAK,EACpB,QAAgB,EAChB,SAAiB,EACjB,MAAe,EACiC,EAAE;IAClD,MAAM,
|
|
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;
|
|
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"}
|
package/dist/commands/plugin.js
CHANGED
|
@@ -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,
|
|
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 =
|
|
56
|
-
|
|
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
|
|
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
|
|
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 (!
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
console.
|
|
149
|
-
|
|
150
|
-
|
|
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
|
|
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 =
|
|
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.
|
|
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 =
|
|
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.
|
|
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
|
-
|
|
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 >
|
|
284
|
-
? pkg.description.slice(0,
|
|
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
|
|
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
|
|
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
|
|
332
|
-
|
|
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
|
-
|
|
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')
|