@opentabs-dev/cli 0.0.16 → 0.0.18
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 +220 -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/logs.js +3 -3
- package/dist/commands/logs.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 +115 -8
- package/dist/scaffold.js.map +1 -1
- package/package.json +4 -4
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 : [];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"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"}
|
package/dist/config.d.ts
CHANGED
|
@@ -3,8 +3,20 @@
|
|
|
3
3
|
*/
|
|
4
4
|
export declare const getConfigDir: () => string;
|
|
5
5
|
export declare const getConfigPath: () => string;
|
|
6
|
+
export declare const getExtensionDir: () => string;
|
|
6
7
|
export declare const getLogFilePath: () => string;
|
|
7
|
-
export
|
|
8
|
+
export type ConfigResult = {
|
|
9
|
+
config: Record<string, unknown>;
|
|
10
|
+
error?: undefined;
|
|
11
|
+
} | {
|
|
12
|
+
config: null;
|
|
13
|
+
error: 'missing';
|
|
14
|
+
} | {
|
|
15
|
+
config: null;
|
|
16
|
+
error: 'invalid';
|
|
17
|
+
message: string;
|
|
18
|
+
};
|
|
19
|
+
export declare const readConfig: (configPath: string) => Promise<ConfigResult>;
|
|
8
20
|
export declare const getLocalPluginsFromConfig: (config: Record<string, unknown>) => string[];
|
|
9
21
|
export declare const resolvePluginPath: (pluginPath: string, configPath: string) => string;
|
|
10
22
|
/**
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,eAAO,MAAM,YAAY,QAAO,MAAqE,CAAC;AAEtG,eAAO,MAAM,aAAa,QAAO,MAA6C,CAAC;AAE/E,eAAO,MAAM,
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,eAAO,MAAM,YAAY,QAAO,MAAqE,CAAC;AAEtG,eAAO,MAAM,aAAa,QAAO,MAA6C,CAAC;AAE/E,eAAO,MAAM,eAAe,QAAO,MAA2C,CAAC;AAE/E,eAAO,MAAM,cAAc,QAAO,MAA4C,CAAC;AAE/E,MAAM,MAAM,YAAY,GACpB;IAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAAC,KAAK,CAAC,EAAE,SAAS,CAAA;CAAE,GACtD;IAAE,MAAM,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,SAAS,CAAA;CAAE,GAClC;IAAE,MAAM,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,SAAS,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAExD,eAAO,MAAM,UAAU,GAAU,YAAY,MAAM,KAAG,OAAO,CAAC,YAAY,CAwBzE,CAAC;AAEF,eAAO,MAAM,yBAAyB,GAAI,QAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAG,MAAM,EAG1E,CAAC;AAET,eAAO,MAAM,iBAAiB,GAAI,YAAY,MAAM,EAAE,YAAY,MAAM,KAAG,MACK,CAAC;AAEjF;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,GAAU,YAAY,MAAM,EAAE,SAAS,MAAM,KAAG,OAAO,CAAC,IAAI,CAczF,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAAI,KAAK,OAAO,KAAG,OAIlD,CAAC"}
|
package/dist/config.js
CHANGED
|
@@ -6,26 +6,33 @@ import { homedir } from 'node:os';
|
|
|
6
6
|
import { join, dirname, resolve, isAbsolute } from 'node:path';
|
|
7
7
|
export const getConfigDir = () => Bun.env.OPENTABS_CONFIG_DIR || join(homedir(), '.opentabs');
|
|
8
8
|
export const getConfigPath = () => join(getConfigDir(), 'config.json');
|
|
9
|
+
export const getExtensionDir = () => join(getConfigDir(), 'extension');
|
|
9
10
|
export const getLogFilePath = () => join(getConfigDir(), 'server.log');
|
|
10
11
|
export const readConfig = async (configPath) => {
|
|
11
12
|
const configFile = Bun.file(configPath);
|
|
12
13
|
if (!(await configFile.exists())) {
|
|
13
|
-
return null;
|
|
14
|
+
return { config: null, error: 'missing' };
|
|
14
15
|
}
|
|
15
16
|
let parsed;
|
|
16
17
|
try {
|
|
17
18
|
parsed = JSON.parse(await configFile.text());
|
|
18
19
|
}
|
|
19
20
|
catch (err) {
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
21
|
+
return {
|
|
22
|
+
config: null,
|
|
23
|
+
error: 'invalid',
|
|
24
|
+
message: `Invalid JSON: ${err instanceof Error ? err.message : String(err)}`,
|
|
25
|
+
};
|
|
23
26
|
}
|
|
24
27
|
if (typeof parsed !== 'object' || parsed === null || Array.isArray(parsed)) {
|
|
25
|
-
|
|
26
|
-
return
|
|
28
|
+
const got = Array.isArray(parsed) ? 'array' : String(parsed);
|
|
29
|
+
return {
|
|
30
|
+
config: null,
|
|
31
|
+
error: 'invalid',
|
|
32
|
+
message: `Expected a JSON object, got ${got}`,
|
|
33
|
+
};
|
|
27
34
|
}
|
|
28
|
-
return parsed;
|
|
35
|
+
return { config: parsed };
|
|
29
36
|
};
|
|
30
37
|
export const getLocalPluginsFromConfig = (config) => Array.isArray(config.localPlugins)
|
|
31
38
|
? config.localPlugins.filter((p) => typeof p === 'string')
|
|
@@ -40,7 +47,9 @@ export const atomicWriteConfig = async (configPath, content) => {
|
|
|
40
47
|
const tmpPath = configPath + '.tmp';
|
|
41
48
|
try {
|
|
42
49
|
await Bun.write(tmpPath, content);
|
|
43
|
-
await chmod(tmpPath, 0o600).catch(() => {
|
|
50
|
+
await chmod(tmpPath, 0o600).catch((err) => {
|
|
51
|
+
console.warn(`Warning: Could not set file permissions on ${tmpPath}: ${err instanceof Error ? err.message : String(err)}. The config file may be readable by other users.`);
|
|
52
|
+
});
|
|
44
53
|
await rename(tmpPath, configPath);
|
|
45
54
|
}
|
|
46
55
|
catch (err) {
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAE/D,MAAM,CAAC,MAAM,YAAY,GAAG,GAAW,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,mBAAmB,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,WAAW,CAAC,CAAC;AAEtG,MAAM,CAAC,MAAM,aAAa,GAAG,GAAW,EAAE,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,aAAa,CAAC,CAAC;AAE/E,MAAM,CAAC,MAAM,cAAc,GAAG,GAAW,EAAE,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,YAAY,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/dist/parse-port.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parse-port.d.ts","sourceRoot":"","sources":["../src/parse-port.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"parse-port.d.ts","sourceRoot":"","sources":["../src/parse-port.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH,QAAA,MAAM,SAAS,GAAI,OAAO,MAAM,KAAG,MAMlC,CAAC;AAEF;;;;;GAKG;AACH,QAAA,MAAM,WAAW,GAAI,SAAS;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,KAAG,MAiBjD,CAAC;AAEF,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC"}
|
package/dist/parse-port.js
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
* Shared port parser and resolver for Commander options.
|
|
3
3
|
*/
|
|
4
4
|
import { InvalidArgumentError } from 'commander';
|
|
5
|
+
import pc from 'picocolors';
|
|
5
6
|
const DEFAULT_PORT = 9515;
|
|
6
7
|
const parsePort = (value) => {
|
|
7
8
|
const port = Number(value);
|
|
@@ -25,6 +26,7 @@ const resolvePort = (options) => {
|
|
|
25
26
|
if (Number.isInteger(parsed) && parsed >= 1 && parsed <= 65535) {
|
|
26
27
|
return parsed;
|
|
27
28
|
}
|
|
29
|
+
console.error(pc.yellow(`Warning: OPENTABS_PORT="${envPort}" is invalid (must be 1-65535). Using default port ${DEFAULT_PORT}.`));
|
|
28
30
|
}
|
|
29
31
|
return DEFAULT_PORT;
|
|
30
32
|
};
|
package/dist/parse-port.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parse-port.js","sourceRoot":"","sources":["../src/parse-port.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"parse-port.js","sourceRoot":"","sources":["../src/parse-port.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AACjD,OAAO,EAAE,MAAM,YAAY,CAAC;AAE5B,MAAM,YAAY,GAAG,IAAI,CAAC;AAE1B,MAAM,SAAS,GAAG,CAAC,KAAa,EAAU,EAAE;IAC1C,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC3B,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,KAAK,EAAE,CAAC;QACxD,MAAM,IAAI,oBAAoB,CAAC,yCAAyC,CAAC,CAAC;IAC5E,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,WAAW,GAAG,CAAC,OAA0B,EAAU,EAAE;IACzD,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS;QAAE,OAAO,OAAO,CAAC,IAAI,CAAC;IAEpD,MAAM,OAAO,GAAG,GAAG,CAAC,GAAG,CAAC,aAAa,CAAC;IACtC,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;QAC/B,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,MAAM,IAAI,CAAC,IAAI,MAAM,IAAI,KAAK,EAAE,CAAC;YAC/D,OAAO,MAAM,CAAC;QAChB,CAAC;QACD,OAAO,CAAC,KAAK,CACX,EAAE,CAAC,MAAM,CACP,2BAA2B,OAAO,sDAAsD,YAAY,GAAG,CACxG,CACF,CAAC;IACJ,CAAC;IAED,OAAO,YAAY,CAAC;AACtB,CAAC,CAAC;AAEF,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC"}
|
package/dist/scaffold.d.ts
CHANGED
|
@@ -18,11 +18,23 @@ interface ScaffoldArgs {
|
|
|
18
18
|
declare const toPascalCase: (name: string) => string;
|
|
19
19
|
/** Convert a hyphenated name to title case: "my-cool-plugin" → "My Cool Plugin" */
|
|
20
20
|
declare const toTitleCase: (name: string) => string;
|
|
21
|
+
interface PartialScaffoldArgs {
|
|
22
|
+
name?: string;
|
|
23
|
+
domain?: string;
|
|
24
|
+
display?: string;
|
|
25
|
+
description?: string;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Prompt the user for any missing required scaffold arguments.
|
|
29
|
+
* If both name and domain are already provided, returns immediately.
|
|
30
|
+
* In non-interactive environments (piped stdin), throws instead of prompting.
|
|
31
|
+
*/
|
|
32
|
+
declare const promptForMissingArgs: (partial: PartialScaffoldArgs) => Promise<ScaffoldArgs>;
|
|
21
33
|
/**
|
|
22
34
|
* Scaffold a new OpenTabs plugin project.
|
|
23
35
|
* Returns the absolute path to the created project directory.
|
|
24
36
|
*/
|
|
25
37
|
declare const scaffoldPlugin: (args: ScaffoldArgs) => Promise<string>;
|
|
26
|
-
export { scaffoldPlugin, ScaffoldError, toPascalCase, toTitleCase };
|
|
27
|
-
export type { ScaffoldArgs };
|
|
38
|
+
export { scaffoldPlugin, promptForMissingArgs, ScaffoldError, toPascalCase, toTitleCase };
|
|
39
|
+
export type { ScaffoldArgs, PartialScaffoldArgs };
|
|
28
40
|
//# sourceMappingURL=scaffold.d.ts.map
|
package/dist/scaffold.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scaffold.d.ts","sourceRoot":"","sources":["../src/scaffold.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;
|
|
1
|
+
{"version":3,"file":"scaffold.d.ts","sourceRoot":"","sources":["../src/scaffold.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAUH,cAAM,aAAc,SAAQ,KAAK;gBACnB,OAAO,EAAE,MAAM;CAI5B;AAID,UAAU,YAAY;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAID,wEAAwE;AACxE,QAAA,MAAM,YAAY,GAAI,MAAM,MAAM,KAAG,MAIxB,CAAC;AAEd,mFAAmF;AACnF,QAAA,MAAM,WAAW,GAAI,MAAM,MAAM,KAAG,MAItB,CAAC;AA6Vf,UAAU,mBAAmB;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;GAIG;AACH,QAAA,MAAM,oBAAoB,GAAU,SAAS,mBAAmB,KAAG,OAAO,CAAC,YAAY,CAsCtF,CAAC;AAIF;;;GAGG;AACH,QAAA,MAAM,cAAc,GAAU,MAAM,YAAY,KAAG,OAAO,CAAC,MAAM,CAuDhE,CAAC;AAEF,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,aAAa,EAAE,YAAY,EAAE,WAAW,EAAE,CAAC;AAC1F,YAAY,EAAE,YAAY,EAAE,mBAAmB,EAAE,CAAC"}
|
package/dist/scaffold.js
CHANGED
|
@@ -9,6 +9,7 @@ import { validatePluginName, validateUrlPattern } from '@opentabs-dev/plugin-sdk
|
|
|
9
9
|
import pc from 'picocolors';
|
|
10
10
|
import { existsSync, mkdirSync } from 'node:fs';
|
|
11
11
|
import { resolve, join, dirname } from 'node:path';
|
|
12
|
+
import { createInterface } from 'node:readline/promises';
|
|
12
13
|
// --- Errors ---
|
|
13
14
|
class ScaffoldError extends Error {
|
|
14
15
|
constructor(message) {
|
|
@@ -57,6 +58,7 @@ const generatePackageJson = async (args, urlPattern) => {
|
|
|
57
58
|
main: 'dist/adapter.iife.js',
|
|
58
59
|
keywords: ['opentabs-plugin'],
|
|
59
60
|
opentabs: {
|
|
61
|
+
'//': 'Optional: place icon.svg (and icon-inactive.svg) next to package.json for a custom side-panel icon',
|
|
60
62
|
displayName,
|
|
61
63
|
description: desc,
|
|
62
64
|
urlPatterns: [urlPattern],
|
|
@@ -71,7 +73,7 @@ const generatePackageJson = async (args, urlPattern) => {
|
|
|
71
73
|
files: ['dist'],
|
|
72
74
|
scripts: {
|
|
73
75
|
build: 'tsc && opentabs-plugin build',
|
|
74
|
-
dev: 'tsc --watch --preserveWatchOutput
|
|
76
|
+
dev: 'concurrently --names tsc,build --prefix-colors blue,green "tsc --watch --preserveWatchOutput" "opentabs-plugin build --watch"',
|
|
75
77
|
'type-check': 'tsc --noEmit',
|
|
76
78
|
lint: 'eslint src/',
|
|
77
79
|
'lint:fix': 'eslint src/ --fix',
|
|
@@ -86,6 +88,7 @@ const generatePackageJson = async (args, urlPattern) => {
|
|
|
86
88
|
},
|
|
87
89
|
devDependencies: {
|
|
88
90
|
'@opentabs-dev/plugin-tools': pluginToolsVersion,
|
|
91
|
+
concurrently: '^9.1.2',
|
|
89
92
|
eslint: '^9.39.2',
|
|
90
93
|
'eslint-config-prettier': '^10.1.8',
|
|
91
94
|
'eslint-plugin-prettier': '^5.5.5',
|
|
@@ -162,6 +165,8 @@ ${desc}
|
|
|
162
165
|
\`\`\`
|
|
163
166
|
${args.name}/
|
|
164
167
|
├── package.json # Plugin metadata (name, opentabs field, dependencies)
|
|
168
|
+
├── icon.svg # Optional custom icon (square SVG, max 8KB)
|
|
169
|
+
├── icon-inactive.svg # Optional manual inactive icon override
|
|
165
170
|
├── src/
|
|
166
171
|
│ ├── index.ts # Plugin class (extends OpenTabsPlugin)
|
|
167
172
|
│ └── tools/ # One file per tool (using defineTool)
|
|
@@ -192,6 +197,32 @@ Plugin metadata is defined in \`package.json\` under the \`opentabs\` field:
|
|
|
192
197
|
- **\`opentabs.description\`** — short description of what the plugin does
|
|
193
198
|
- **\`opentabs.urlPatterns\`** — Chrome match patterns for tabs where the adapter is injected
|
|
194
199
|
|
|
200
|
+
## Custom Icons
|
|
201
|
+
|
|
202
|
+
By default, the side panel shows a colored letter avatar for your plugin. To use a custom icon, place an \`icon.svg\` file in the plugin root (next to \`package.json\`):
|
|
203
|
+
|
|
204
|
+
\`\`\`
|
|
205
|
+
${args.name}/
|
|
206
|
+
├── package.json
|
|
207
|
+
├── icon.svg ← custom icon (optional)
|
|
208
|
+
├── icon-inactive.svg ← manual inactive override (optional, requires icon.svg)
|
|
209
|
+
├── src/
|
|
210
|
+
│ └── ...
|
|
211
|
+
\`\`\`
|
|
212
|
+
|
|
213
|
+
**How it works:**
|
|
214
|
+
|
|
215
|
+
- \`opentabs-plugin build\` reads \`icon.svg\`, validates it, auto-generates a grayscale inactive variant, and embeds both in \`dist/tools.json\`
|
|
216
|
+
- To override the auto-generated inactive icon, provide \`icon-inactive.svg\` (must use only grayscale colors)
|
|
217
|
+
- If no \`icon.svg\` is provided, the letter avatar is used automatically
|
|
218
|
+
|
|
219
|
+
**Icon requirements:**
|
|
220
|
+
|
|
221
|
+
- Square SVG with a \`viewBox\` attribute (e.g., \`viewBox="0 0 32 32"\`)
|
|
222
|
+
- Maximum 8 KB file size
|
|
223
|
+
- No embedded \`<image>\`, \`<script>\`, or event handler attributes (\`onclick\`, etc.)
|
|
224
|
+
- Manual \`icon-inactive.svg\` must use only achromatic (grayscale) colors
|
|
225
|
+
|
|
195
226
|
## Development
|
|
196
227
|
|
|
197
228
|
\`\`\`bash
|
|
@@ -225,6 +256,44 @@ export const myTool = defineTool({
|
|
|
225
256
|
\`\`\`
|
|
226
257
|
|
|
227
258
|
Then register it in \`src/index.ts\` by adding it to the \`tools\` array.
|
|
259
|
+
|
|
260
|
+
## Shared Schemas
|
|
261
|
+
|
|
262
|
+
When 3 or more tools share the same input or output shape, extract common Zod schemas into a shared file to avoid duplication:
|
|
263
|
+
|
|
264
|
+
\`\`\`ts
|
|
265
|
+
// src/schemas/channel.ts
|
|
266
|
+
import { z } from 'zod';
|
|
267
|
+
|
|
268
|
+
export const channelSchema = z.object({
|
|
269
|
+
id: z.string().describe('Channel ID'),
|
|
270
|
+
name: z.string().describe('Channel name'),
|
|
271
|
+
});
|
|
272
|
+
|
|
273
|
+
export type Channel = z.infer<typeof channelSchema>;
|
|
274
|
+
\`\`\`
|
|
275
|
+
|
|
276
|
+
Then import and reuse in your tools:
|
|
277
|
+
|
|
278
|
+
\`\`\`ts
|
|
279
|
+
// src/tools/list-channels.ts
|
|
280
|
+
import { channelSchema } from '../schemas/channel.js';
|
|
281
|
+
|
|
282
|
+
export const listChannels = defineTool({
|
|
283
|
+
name: 'list_channels',
|
|
284
|
+
displayName: 'List Channels',
|
|
285
|
+
description: 'List all available channels',
|
|
286
|
+
icon: 'list',
|
|
287
|
+
input: z.object({}),
|
|
288
|
+
output: z.object({ channels: z.array(channelSchema) }),
|
|
289
|
+
handle: async () => {
|
|
290
|
+
// ...
|
|
291
|
+
return { channels: [] };
|
|
292
|
+
},
|
|
293
|
+
});
|
|
294
|
+
\`\`\`
|
|
295
|
+
|
|
296
|
+
This keeps your tool schemas DRY and makes it easy to evolve shared types in one place.
|
|
228
297
|
`;
|
|
229
298
|
};
|
|
230
299
|
const generatePluginIndex = (args, urlPattern) => {
|
|
@@ -242,13 +311,14 @@ class ${toPascalCase(args.name)}Plugin extends OpenTabsPlugin {
|
|
|
242
311
|
readonly urlPatterns = [${JSON.stringify(urlPattern)}];
|
|
243
312
|
readonly tools: ToolDefinition[] = [exampleTool];
|
|
244
313
|
|
|
245
|
-
//
|
|
246
|
-
//
|
|
247
|
-
//
|
|
248
|
-
// return document.cookie.includes('session=')
|
|
249
|
-
// return document.querySelector('[data-user-id]') !== null
|
|
314
|
+
// IMPORTANT: Implement this method to check if the user is authenticated.
|
|
315
|
+
// The plugin reports 'unavailable' until this returns true.
|
|
316
|
+
// Examples:
|
|
317
|
+
// return document.cookie.includes('session=');
|
|
318
|
+
// return document.querySelector('[data-user-id]') !== null;
|
|
319
|
+
// return getPageGlobal('APP.currentUser') !== undefined;
|
|
250
320
|
async isReady(): Promise<boolean> {
|
|
251
|
-
return
|
|
321
|
+
return false;
|
|
252
322
|
}
|
|
253
323
|
}
|
|
254
324
|
|
|
@@ -278,6 +348,43 @@ export const exampleTool = defineTool({
|
|
|
278
348
|
});
|
|
279
349
|
`;
|
|
280
350
|
};
|
|
351
|
+
/**
|
|
352
|
+
* Prompt the user for any missing required scaffold arguments.
|
|
353
|
+
* If both name and domain are already provided, returns immediately.
|
|
354
|
+
* In non-interactive environments (piped stdin), throws instead of prompting.
|
|
355
|
+
*/
|
|
356
|
+
const promptForMissingArgs = async (partial) => {
|
|
357
|
+
let { name, domain } = partial;
|
|
358
|
+
const { display, description } = partial;
|
|
359
|
+
if (name && domain) {
|
|
360
|
+
return { name, domain, display, description };
|
|
361
|
+
}
|
|
362
|
+
if (!process.stdin.isTTY) {
|
|
363
|
+
const missing = [!name && 'name', !domain && '--domain'].filter(Boolean);
|
|
364
|
+
throw new ScaffoldError(`Missing required arguments: ${missing.join(', ')}. Provide them as flags or run interactively.`);
|
|
365
|
+
}
|
|
366
|
+
const rl = createInterface({ input: process.stdin, output: process.stdout });
|
|
367
|
+
try {
|
|
368
|
+
if (!name) {
|
|
369
|
+
const answer = await rl.question(`Plugin name ${pc.dim('(lowercase, hyphens ok)')}: `);
|
|
370
|
+
name = answer.trim();
|
|
371
|
+
if (!name) {
|
|
372
|
+
throw new ScaffoldError('Plugin name is required.');
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
if (!domain) {
|
|
376
|
+
const answer = await rl.question(`Target domain ${pc.dim('(e.g., .slack.com or github.com)')}: `);
|
|
377
|
+
domain = answer.trim();
|
|
378
|
+
if (!domain) {
|
|
379
|
+
throw new ScaffoldError('Target domain is required.');
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
finally {
|
|
384
|
+
rl.close();
|
|
385
|
+
}
|
|
386
|
+
return { name, domain, display, description };
|
|
387
|
+
};
|
|
281
388
|
// --- Scaffolding ---
|
|
282
389
|
/**
|
|
283
390
|
* Scaffold a new OpenTabs plugin project.
|
|
@@ -325,5 +432,5 @@ const scaffoldPlugin = async (args) => {
|
|
|
325
432
|
console.log(` ${pc.cyan('bun run build')}`);
|
|
326
433
|
return projectDir;
|
|
327
434
|
};
|
|
328
|
-
export { scaffoldPlugin, ScaffoldError, toPascalCase, toTitleCase };
|
|
435
|
+
export { scaffoldPlugin, promptForMissingArgs, ScaffoldError, toPascalCase, toTitleCase };
|
|
329
436
|
//# sourceMappingURL=scaffold.js.map
|
package/dist/scaffold.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scaffold.js","sourceRoot":"","sources":["../src/scaffold.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAClF,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAChD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"scaffold.js","sourceRoot":"","sources":["../src/scaffold.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@opentabs-dev/cli",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.18",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
"./scaffold": {
|
|
@@ -21,9 +21,9 @@
|
|
|
21
21
|
"build": "tsc --build"
|
|
22
22
|
},
|
|
23
23
|
"dependencies": {
|
|
24
|
-
"@opentabs-dev/plugin-sdk": "^0.0.
|
|
25
|
-
"@opentabs-dev/plugin-tools": "^0.0.
|
|
26
|
-
"@opentabs-dev/shared": "^0.0.
|
|
24
|
+
"@opentabs-dev/plugin-sdk": "^0.0.18",
|
|
25
|
+
"@opentabs-dev/plugin-tools": "^0.0.18",
|
|
26
|
+
"@opentabs-dev/shared": "^0.0.18",
|
|
27
27
|
"commander": "^14.0.3",
|
|
28
28
|
"picocolors": "^1.1.1"
|
|
29
29
|
},
|