@opentabs-dev/cli 0.0.34 → 0.0.36
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 +17 -3
- package/dist/cli.js.map +1 -1
- package/dist/commands/audit.d.ts +5 -1
- package/dist/commands/audit.d.ts.map +1 -1
- package/dist/commands/audit.js +9 -5
- package/dist/commands/audit.js.map +1 -1
- package/dist/commands/config.d.ts +21 -1
- package/dist/commands/config.d.ts.map +1 -1
- package/dist/commands/config.js +168 -21
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/doctor.d.ts +9 -2
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +68 -24
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/index.d.ts +2 -1
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/index.js +2 -1
- package/dist/commands/index.js.map +1 -1
- package/dist/commands/logs.d.ts +10 -1
- package/dist/commands/logs.d.ts.map +1 -1
- package/dist/commands/logs.js +22 -3
- package/dist/commands/logs.js.map +1 -1
- package/dist/commands/plugin.d.ts +57 -9
- package/dist/commands/plugin.d.ts.map +1 -1
- package/dist/commands/plugin.js +74 -32
- package/dist/commands/plugin.js.map +1 -1
- package/dist/commands/setup.js +2 -2
- package/dist/commands/setup.js.map +1 -1
- package/dist/commands/start.d.ts +8 -1
- package/dist/commands/start.d.ts.map +1 -1
- package/dist/commands/start.js +99 -40
- package/dist/commands/start.js.map +1 -1
- package/dist/commands/status.d.ts +14 -1
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +115 -16
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/stop.d.ts +11 -0
- package/dist/commands/stop.d.ts.map +1 -0
- package/dist/commands/stop.js +104 -0
- package/dist/commands/stop.js.map +1 -0
- package/dist/config.d.ts +8 -2
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +36 -5
- package/dist/config.js.map +1 -1
- package/dist/scaffold.d.ts.map +1 -1
- package/dist/scaffold.js +49 -27
- package/dist/scaffold.js.map +1 -1
- package/package.json +7 -10
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `opentabs stop` command — stops a background MCP server.
|
|
3
|
+
*
|
|
4
|
+
* Reads the PID file written by `opentabs start --background`, sends SIGTERM
|
|
5
|
+
* to the process, waits for it to exit, and cleans up the PID file. Falls back
|
|
6
|
+
* to a health-check probe when no PID file exists.
|
|
7
|
+
*/
|
|
8
|
+
import { isConnectionRefused, getPidFilePath } from '../config.js';
|
|
9
|
+
import { parsePort, resolvePort } from '../parse-port.js';
|
|
10
|
+
import pc from 'picocolors';
|
|
11
|
+
import { readFile, unlink } from 'node:fs/promises';
|
|
12
|
+
/** Returns true if a process with the given PID is alive. */
|
|
13
|
+
const isProcessAlive = (pid) => {
|
|
14
|
+
try {
|
|
15
|
+
process.kill(pid, 0);
|
|
16
|
+
return true;
|
|
17
|
+
}
|
|
18
|
+
catch {
|
|
19
|
+
return false;
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
/** Wait for a process to exit, polling every 200ms up to `timeoutMs`. */
|
|
23
|
+
const waitForExit = (pid, timeoutMs) => new Promise(resolve => {
|
|
24
|
+
const start = Date.now();
|
|
25
|
+
const check = () => {
|
|
26
|
+
if (!isProcessAlive(pid)) {
|
|
27
|
+
resolve(true);
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
if (Date.now() - start >= timeoutMs) {
|
|
31
|
+
resolve(false);
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
setTimeout(check, 200);
|
|
35
|
+
};
|
|
36
|
+
check();
|
|
37
|
+
});
|
|
38
|
+
const handleStop = async (options) => {
|
|
39
|
+
const pidPath = getPidFilePath();
|
|
40
|
+
let pidFileContent;
|
|
41
|
+
try {
|
|
42
|
+
pidFileContent = await readFile(pidPath, 'utf-8');
|
|
43
|
+
}
|
|
44
|
+
catch {
|
|
45
|
+
// No PID file — fall through to port-based detection
|
|
46
|
+
}
|
|
47
|
+
if (pidFileContent !== undefined) {
|
|
48
|
+
const pid = parseInt(pidFileContent.trim(), 10);
|
|
49
|
+
if (isNaN(pid)) {
|
|
50
|
+
await unlink(pidPath).catch(() => { });
|
|
51
|
+
console.log('Server is not running (invalid PID file cleaned up).');
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
if (!isProcessAlive(pid)) {
|
|
55
|
+
await unlink(pidPath).catch(() => { });
|
|
56
|
+
console.log('Server is not running (stale PID file cleaned up).');
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
process.kill(pid, 'SIGTERM');
|
|
60
|
+
const exited = await waitForExit(pid, 5_000);
|
|
61
|
+
await unlink(pidPath).catch(() => { });
|
|
62
|
+
if (exited) {
|
|
63
|
+
console.log('Server stopped.');
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
console.log(pc.yellow(`Server process (PID: ${String(pid)}) did not exit within 5 seconds.`));
|
|
67
|
+
console.log(pc.dim(`You may need to kill it manually: kill -9 ${String(pid)}`));
|
|
68
|
+
}
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
// No PID file — check if a server is running on the port via health endpoint
|
|
72
|
+
const port = resolvePort(options);
|
|
73
|
+
const url = `http://localhost:${port}/health`;
|
|
74
|
+
try {
|
|
75
|
+
const res = await fetch(url, { signal: AbortSignal.timeout(3_000) });
|
|
76
|
+
if (res.ok) {
|
|
77
|
+
const data = (await res.json());
|
|
78
|
+
if (typeof data.status === 'string') {
|
|
79
|
+
console.log('Server is running but was not started with --background. Stop it with Ctrl+C in the terminal where it is running.');
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
catch (err) {
|
|
85
|
+
if (isConnectionRefused(err)) {
|
|
86
|
+
console.log('Server is not running.');
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
console.log('Server is not running.');
|
|
91
|
+
};
|
|
92
|
+
const registerStopCommand = (program) => {
|
|
93
|
+
program
|
|
94
|
+
.command('stop')
|
|
95
|
+
.description('Stop the background MCP server')
|
|
96
|
+
.option('--port <number>', 'Server port for fallback detection (default: 9515)', parsePort)
|
|
97
|
+
.addHelpText('after', `
|
|
98
|
+
Examples:
|
|
99
|
+
$ opentabs stop
|
|
100
|
+
$ opentabs stop --port 3000`)
|
|
101
|
+
.action((_options, command) => handleStop(command.optsWithGlobals()));
|
|
102
|
+
};
|
|
103
|
+
export { registerStopCommand };
|
|
104
|
+
//# sourceMappingURL=stop.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stop.js","sourceRoot":"","sources":["../../src/commands/stop.ts"],"names":[],"mappings":"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"}
|
package/dist/config.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Config file helpers shared across CLI commands.
|
|
3
3
|
*/
|
|
4
|
-
import { getConfigDir, getConfigPath, getExtensionDir, getLogFilePath } from '@opentabs-dev/shared';
|
|
5
|
-
export { getConfigDir, getConfigPath, getExtensionDir, getLogFilePath };
|
|
4
|
+
import { getConfigDir, getConfigPath, getExtensionDir, getLogFilePath, getPidFilePath } from '@opentabs-dev/shared';
|
|
5
|
+
export { getConfigDir, getConfigPath, getExtensionDir, getLogFilePath, getPidFilePath };
|
|
6
6
|
export type ConfigResult = {
|
|
7
7
|
config: Record<string, unknown>;
|
|
8
8
|
error?: undefined;
|
|
@@ -24,5 +24,11 @@ export declare const atomicWriteConfig: (configPath: string, content: string) =>
|
|
|
24
24
|
* Returns null if auth.json does not exist or has no valid secret.
|
|
25
25
|
*/
|
|
26
26
|
export declare const readAuthSecret: () => Promise<string | null>;
|
|
27
|
+
/**
|
|
28
|
+
* Ensure the WebSocket authentication secret exists in auth.json.
|
|
29
|
+
* If auth.json already exists with a valid secret, returns it unchanged.
|
|
30
|
+
* If auth.json is missing or malformed, generates a new secret, writes it, and returns it.
|
|
31
|
+
*/
|
|
32
|
+
export declare const ensureAuthSecret: () => Promise<string>;
|
|
27
33
|
export declare const isConnectionRefused: (err: unknown) => boolean;
|
|
28
34
|
//# sourceMappingURL=config.d.ts.map
|
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;AAEH,OAAO,
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAGL,YAAY,EACZ,aAAa,EACb,eAAe,EACf,cAAc,EACd,cAAc,EAEf,MAAM,sBAAsB,CAAC;AAK9B,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,cAAc,EAAE,cAAc,EAAE,CAAC;AAExF,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,CA4BzE,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,MAG1E,CAAC;AAEF,kFAAkF;AAClF,eAAO,MAAM,iBAAiB,GAAI,YAAY,MAAM,EAAE,SAAS,MAAM,KAAG,OAAO,CAAC,IAAI,CAC3C,CAAC;AAE1C;;;GAGG;AACH,eAAO,MAAM,cAAc,QAAa,OAAO,CAAC,MAAM,GAAG,IAAI,CAmB5D,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,QAAa,OAAO,CAAC,MAAM,CAwBvD,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAAI,KAAK,OAAO,KAAG,OAIlD,CAAC"}
|
package/dist/config.js
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Config file helpers shared across CLI commands.
|
|
3
3
|
*/
|
|
4
|
-
import { atomicWrite, getConfigDir, getConfigPath, getExtensionDir, getLogFilePath, toErrorMessage, } from '@opentabs-dev/shared';
|
|
5
|
-
import { access, readFile } from 'node:fs/promises';
|
|
6
|
-
import {
|
|
7
|
-
|
|
4
|
+
import { atomicWrite, generateSecret, getConfigDir, getConfigPath, getExtensionDir, getLogFilePath, getPidFilePath, toErrorMessage, } from '@opentabs-dev/shared';
|
|
5
|
+
import { access, mkdir, readFile } from 'node:fs/promises';
|
|
6
|
+
import { homedir } from 'node:os';
|
|
7
|
+
import { dirname, isAbsolute, join, resolve } from 'node:path';
|
|
8
|
+
export { getConfigDir, getConfigPath, getExtensionDir, getLogFilePath, getPidFilePath };
|
|
8
9
|
export const readConfig = async (configPath) => {
|
|
9
10
|
if (!(await access(configPath).then(() => true, () => false))) {
|
|
10
11
|
return { config: null, error: 'missing' };
|
|
@@ -33,7 +34,11 @@ export const readConfig = async (configPath) => {
|
|
|
33
34
|
export const getLocalPluginsFromConfig = (config) => Array.isArray(config.localPlugins)
|
|
34
35
|
? config.localPlugins.filter((p) => typeof p === 'string')
|
|
35
36
|
: [];
|
|
36
|
-
export const resolvePluginPath = (pluginPath, configPath) =>
|
|
37
|
+
export const resolvePluginPath = (pluginPath, configPath) => {
|
|
38
|
+
if (pluginPath.startsWith('~/'))
|
|
39
|
+
return resolve(homedir(), pluginPath.slice(2));
|
|
40
|
+
return isAbsolute(pluginPath) ? pluginPath : resolve(dirname(configPath), pluginPath);
|
|
41
|
+
};
|
|
37
42
|
/** Write config atomically with restrictive permissions via the shared helper. */
|
|
38
43
|
export const atomicWriteConfig = (configPath, content) => atomicWrite(configPath, content, 0o600);
|
|
39
44
|
/**
|
|
@@ -57,6 +62,32 @@ export const readAuthSecret = async () => {
|
|
|
57
62
|
}
|
|
58
63
|
return null;
|
|
59
64
|
};
|
|
65
|
+
/**
|
|
66
|
+
* Ensure the WebSocket authentication secret exists in auth.json.
|
|
67
|
+
* If auth.json already exists with a valid secret, returns it unchanged.
|
|
68
|
+
* If auth.json is missing or malformed, generates a new secret, writes it, and returns it.
|
|
69
|
+
*/
|
|
70
|
+
export const ensureAuthSecret = async () => {
|
|
71
|
+
const extensionDir = getExtensionDir();
|
|
72
|
+
const authPath = join(extensionDir, 'auth.json');
|
|
73
|
+
if (await access(authPath).then(() => true, () => false)) {
|
|
74
|
+
try {
|
|
75
|
+
const parsed = JSON.parse(await readFile(authPath, 'utf-8'));
|
|
76
|
+
if (parsed && typeof parsed === 'object' && !Array.isArray(parsed)) {
|
|
77
|
+
const secret = parsed.secret;
|
|
78
|
+
if (typeof secret === 'string' && secret.length > 0)
|
|
79
|
+
return secret;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
catch {
|
|
83
|
+
// Malformed auth.json — regenerate below
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
const secret = generateSecret();
|
|
87
|
+
await mkdir(extensionDir, { recursive: true, mode: 0o700 });
|
|
88
|
+
await atomicWrite(authPath, JSON.stringify({ secret }) + '\n', 0o600);
|
|
89
|
+
return secret;
|
|
90
|
+
};
|
|
60
91
|
export const isConnectionRefused = (err) => {
|
|
61
92
|
if (!(err instanceof TypeError))
|
|
62
93
|
return false;
|
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,EACL,WAAW,EACX,YAAY,EACZ,aAAa,EACb,eAAe,EACf,cAAc,EACd,cAAc,GACf,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
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;AAWH,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;
|
|
1
|
+
{"version":3,"file":"scaffold.d.ts","sourceRoot":"","sources":["../src/scaffold.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAWH,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;AA8Wf,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,CAiEhE,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
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
*/
|
|
8
8
|
import { validatePluginName, validateUrlPattern } from '@opentabs-dev/plugin-sdk';
|
|
9
9
|
import pc from 'picocolors';
|
|
10
|
-
import { existsSync, mkdirSync } from 'node:fs';
|
|
10
|
+
import { existsSync, mkdirSync, rmSync } from 'node:fs';
|
|
11
11
|
import { readFile, writeFile } from 'node:fs/promises';
|
|
12
12
|
import { resolve, join, dirname } from 'node:path';
|
|
13
13
|
import { createInterface } from 'node:readline/promises';
|
|
@@ -29,6 +29,8 @@ const toTitleCase = (name) => name
|
|
|
29
29
|
.split('-')
|
|
30
30
|
.map(part => part.charAt(0).toUpperCase() + part.slice(1))
|
|
31
31
|
.join(' ');
|
|
32
|
+
/** Wrap a string value in a single-quoted TypeScript string literal with proper escaping. */
|
|
33
|
+
const singleQuote = (value) => `'${value.replace(/\\/g, '\\\\').replace(/'/g, "\\'")}'`;
|
|
32
34
|
// --- Template generation ---
|
|
33
35
|
/**
|
|
34
36
|
* Resolve the version of @opentabs-dev packages for scaffolded plugins.
|
|
@@ -156,7 +158,6 @@ const PRETTIERRC_CONTENT = JSON.stringify({
|
|
|
156
158
|
const GITIGNORE_CONTENT = `dist/
|
|
157
159
|
node_modules/
|
|
158
160
|
*.tsbuildinfo
|
|
159
|
-
bun.lock
|
|
160
161
|
package-lock.json
|
|
161
162
|
`;
|
|
162
163
|
const generateReadme = (args, urlPattern) => {
|
|
@@ -308,15 +309,25 @@ const generatePluginIndex = (args, urlPattern) => {
|
|
|
308
309
|
return `import { OpenTabsPlugin } from '@opentabs-dev/plugin-sdk';
|
|
309
310
|
import { exampleTool } from './tools/example.js';
|
|
310
311
|
import type { ToolDefinition } from '@opentabs-dev/plugin-sdk';
|
|
312
|
+
// To add resources or prompts, extend the import above:
|
|
313
|
+
// import type { ToolDefinition, ResourceDefinition, PromptDefinition } from '@opentabs-dev/plugin-sdk';
|
|
311
314
|
|
|
312
315
|
class ${toPascalCase(args.name)}Plugin extends OpenTabsPlugin {
|
|
313
|
-
readonly name = ${
|
|
316
|
+
readonly name = ${singleQuote(args.name)};
|
|
314
317
|
readonly version = '0.0.1';
|
|
315
|
-
readonly description = ${
|
|
316
|
-
override readonly displayName = ${
|
|
317
|
-
readonly urlPatterns = [${
|
|
318
|
+
readonly description = ${singleQuote(desc)};
|
|
319
|
+
override readonly displayName = ${singleQuote(displayName)};
|
|
320
|
+
readonly urlPatterns = [${singleQuote(urlPattern)}];
|
|
318
321
|
readonly tools: ToolDefinition[] = [exampleTool];
|
|
319
322
|
|
|
323
|
+
// To expose read-only data as resources (the 'override' keyword is required):
|
|
324
|
+
// override readonly resources: ResourceDefinition[] = [];
|
|
325
|
+
//
|
|
326
|
+
// To add prompt templates (the 'override' keyword is required):
|
|
327
|
+
// override readonly prompts: PromptDefinition[] = [];
|
|
328
|
+
//
|
|
329
|
+
// See: https://opentabs.dev/docs/guides/resources-prompts
|
|
330
|
+
|
|
320
331
|
// IMPORTANT: Implement this method to check if the user is authenticated.
|
|
321
332
|
// The plugin reports 'unavailable' until this returns true.
|
|
322
333
|
// Examples:
|
|
@@ -333,7 +344,7 @@ export default new ${toPascalCase(args.name)}Plugin();
|
|
|
333
344
|
};
|
|
334
345
|
const generateExampleTool = (args) => {
|
|
335
346
|
const displayName = args.display ?? toTitleCase(args.name);
|
|
336
|
-
const escaped =
|
|
347
|
+
const escaped = singleQuote(displayName);
|
|
337
348
|
return `import { z } from 'zod';
|
|
338
349
|
import { defineTool } from '@opentabs-dev/plugin-sdk';
|
|
339
350
|
|
|
@@ -348,7 +359,7 @@ export const exampleTool = defineTool({
|
|
|
348
359
|
output: z.object({
|
|
349
360
|
result: z.string().describe('The result of the example operation'),
|
|
350
361
|
}),
|
|
351
|
-
handle: async
|
|
362
|
+
handle: async params => {
|
|
352
363
|
return { result: 'Hello from ' + ${escaped} + ': ' + params.message };
|
|
353
364
|
},
|
|
354
365
|
});
|
|
@@ -367,7 +378,7 @@ const promptForMissingArgs = async (partial) => {
|
|
|
367
378
|
}
|
|
368
379
|
if (!process.stdin.isTTY) {
|
|
369
380
|
const missing = [!name && 'name', !domain && '--domain'].filter(Boolean);
|
|
370
|
-
throw new ScaffoldError(`Missing required arguments: ${missing.join(', ')}
|
|
381
|
+
throw new ScaffoldError(`Missing required arguments: ${missing.join(', ')}.\n\nUsage: opentabs plugin create <name> --domain <domain>\nExample: opentabs plugin create my-app --domain .example.com --display "My App"`);
|
|
371
382
|
}
|
|
372
383
|
const rl = createInterface({ input: process.stdin, output: process.stdout });
|
|
373
384
|
try {
|
|
@@ -411,24 +422,35 @@ const scaffoldPlugin = async (args) => {
|
|
|
411
422
|
throw new ScaffoldError(`Directory "${args.name}" already exists`);
|
|
412
423
|
}
|
|
413
424
|
console.log(`Creating ${pc.bold(`opentabs-plugin-${args.name}`)}...`);
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
425
|
+
try {
|
|
426
|
+
mkdirSync(projectDir, { recursive: true });
|
|
427
|
+
mkdirSync(join(projectDir, 'src', 'tools'), { recursive: true });
|
|
428
|
+
await writeFile(join(projectDir, 'package.json'), await generatePackageJson(args, urlPattern), 'utf-8');
|
|
429
|
+
console.log(` ${pc.dim('Created:')} ${pc.bold('package.json')}`);
|
|
430
|
+
await writeFile(join(projectDir, 'tsconfig.json'), TSCONFIG_CONTENT, 'utf-8');
|
|
431
|
+
console.log(` ${pc.dim('Created:')} ${pc.bold('tsconfig.json')}`);
|
|
432
|
+
await writeFile(join(projectDir, 'eslint.config.ts'), ESLINT_CONFIG_CONTENT, 'utf-8');
|
|
433
|
+
console.log(` ${pc.dim('Created:')} ${pc.bold('eslint.config.ts')}`);
|
|
434
|
+
await writeFile(join(projectDir, '.prettierrc'), PRETTIERRC_CONTENT, 'utf-8');
|
|
435
|
+
console.log(` ${pc.dim('Created:')} ${pc.bold('.prettierrc')}`);
|
|
436
|
+
await writeFile(join(projectDir, '.gitignore'), GITIGNORE_CONTENT, 'utf-8');
|
|
437
|
+
console.log(` ${pc.dim('Created:')} ${pc.bold('.gitignore')}`);
|
|
438
|
+
await writeFile(join(projectDir, 'src', 'index.ts'), generatePluginIndex(args, urlPattern), 'utf-8');
|
|
439
|
+
console.log(` ${pc.dim('Created:')} ${pc.bold('src/index.ts')}`);
|
|
440
|
+
await writeFile(join(projectDir, 'src', 'tools', 'example.ts'), generateExampleTool(args), 'utf-8');
|
|
441
|
+
console.log(` ${pc.dim('Created:')} ${pc.bold('src/tools/example.ts')}`);
|
|
442
|
+
await writeFile(join(projectDir, 'README.md'), generateReadme(args, urlPattern), 'utf-8');
|
|
443
|
+
console.log(` ${pc.dim('Created:')} ${pc.bold('README.md')}`);
|
|
444
|
+
}
|
|
445
|
+
catch (error) {
|
|
446
|
+
try {
|
|
447
|
+
rmSync(projectDir, { recursive: true, force: true });
|
|
448
|
+
}
|
|
449
|
+
catch {
|
|
450
|
+
/* ignore cleanup errors */
|
|
451
|
+
}
|
|
452
|
+
throw error;
|
|
453
|
+
}
|
|
432
454
|
console.log('');
|
|
433
455
|
console.log(pc.green(`Plugin scaffolded in ./${args.name}/`));
|
|
434
456
|
console.log('');
|
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;
|
|
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,EAAE,MAAM,SAAS,CAAC;AACxD,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAEzD,iBAAiB;AAEjB,MAAM,aAAc,SAAQ,KAAK;IAC/B,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;IAC9B,CAAC;CACF;AAWD,kBAAkB;AAElB,wEAAwE;AACxE,MAAM,YAAY,GAAG,CAAC,IAAY,EAAU,EAAE,CAC5C,IAAI;KACD,KAAK,CAAC,GAAG,CAAC;KACV,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;KACzD,IAAI,CAAC,EAAE,CAAC,CAAC;AAEd,mFAAmF;AACnF,MAAM,WAAW,GAAG,CAAC,IAAY,EAAU,EAAE,CAC3C,IAAI;KACD,KAAK,CAAC,GAAG,CAAC;KACV,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;KACzD,IAAI,CAAC,GAAG,CAAC,CAAC;AAEf,6FAA6F;AAC7F,MAAM,WAAW,GAAG,CAAC,KAAa,EAAU,EAAE,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC;AAExG,8BAA8B;AAE9B;;;;;;;GAOG;AACH,MAAM,sBAAsB,GAAG,KAAK,IAAqB,EAAE;IACzD,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,0BAA0B,CAAC,CAAC;QACjE,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC;QACrD,MAAM,GAAG,GAAY,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,cAAc,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;QAC/F,IAAI,GAAG,KAAK,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,SAAS,IAAI,GAAG,IAAI,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;YACnG,OAAO,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;QAC3B,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,oBAAoB;IACtB,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC,CAAC;AAEF,MAAM,mBAAmB,GAAG,KAAK,EAAE,IAAkB,EAAE,UAAkB,EAAmB,EAAE;IAC5F,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,IAAI,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3D,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,IAAI,uBAAuB,WAAW,EAAE,CAAC;IAEtE,MAAM,eAAe,GAAG,MAAM,sBAAsB,EAAE,CAAC;IAEvD,MAAM,GAAG,GAAG;QACV,IAAI,EAAE,mBAAmB,IAAI,CAAC,IAAI,EAAE;QACpC,OAAO,EAAE,OAAO;QAChB,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,sBAAsB;QAC5B,QAAQ,EAAE,CAAC,iBAAiB,CAAC;QAC7B,QAAQ,EAAE;YACR,IAAI,EAAE,oGAAoG;YAC1G,WAAW;YACX,WAAW,EAAE,IAAI;YACjB,WAAW,EAAE,CAAC,UAAU,CAAC;SAC1B;QACD,OAAO,EAAE;YACP,GAAG,EAAE;gBACH,KAAK,EAAE,mBAAmB;gBAC1B,MAAM,EAAE,iBAAiB;aAC1B;SACF;QACD,KAAK,EAAE,mBAAmB;QAC1B,KAAK,EAAE,CAAC,MAAM,CAAC;QACf,OAAO,EAAE;YACP,KAAK,EAAE,8BAA8B;YACrC,GAAG,EAAE,+HAA+H;YACpI,YAAY,EAAE,cAAc;YAC5B,IAAI,EAAE,aAAa;YACnB,UAAU,EAAE,mBAAmB;YAC/B,cAAc,EAAE,gCAAgC;YAChD,MAAM,EAAE,gCAAgC;SACzC;QACD,gBAAgB,EAAE;YAChB,GAAG,EAAE,QAAQ;SACd;QACD,YAAY,EAAE;YACZ,0BAA0B,EAAE,eAAe;SAC5C;QACD,eAAe,EAAE;YACf,4BAA4B,EAAE,eAAe;YAC7C,YAAY,EAAE,QAAQ;YACtB,MAAM,EAAE,SAAS;YACjB,wBAAwB,EAAE,SAAS;YACnC,wBAAwB,EAAE,QAAQ;YAClC,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,QAAQ;YAClB,UAAU,EAAE,QAAQ;YACpB,mBAAmB,EAAE,SAAS;YAC9B,GAAG,EAAE,QAAQ;SACd;KACF,CAAC;IACF,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC;AAC7C,CAAC,CAAC;AAEF,MAAM,gBAAgB,GACpB,IAAI,CAAC,SAAS,CACZ;IACE,eAAe,EAAE;QACf,MAAM,EAAE,QAAQ;QAChB,MAAM,EAAE,QAAQ;QAChB,gBAAgB,EAAE,SAAS;QAC3B,WAAW,EAAE,IAAI;QACjB,cAAc,EAAE,IAAI;QACpB,SAAS,EAAE,IAAI;QACf,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,KAAK;QACd,MAAM,EAAE,IAAI;QACZ,wBAAwB,EAAE,IAAI;QAC9B,0BAA0B,EAAE,IAAI;QAChC,iBAAiB,EAAE,IAAI;QACvB,kBAAkB,EAAE,IAAI;QACxB,gCAAgC,EAAE,IAAI;QACtC,eAAe,EAAE,IAAI;QACrB,YAAY,EAAE,IAAI;QAClB,SAAS,EAAE,IAAI;KAChB;IACD,OAAO,EAAE,CAAC,KAAK,CAAC;CACjB,EACD,IAAI,EACJ,CAAC,CACF,GAAG,IAAI,CAAC;AAEX,MAAM,qBAAqB,GAAG;;;;;;;;;;;;;;;;;CAiB7B,CAAC;AAEF,MAAM,kBAAkB,GACtB,IAAI,CAAC,SAAS,CACZ;IACE,aAAa,EAAE,KAAK;IACpB,IAAI,EAAE,IAAI;IACV,WAAW,EAAE,IAAI;IACjB,WAAW,EAAE,OAAO;IACpB,UAAU,EAAE,GAAG;CAChB,EACD,IAAI,EACJ,CAAC,CACF,GAAG,IAAI,CAAC;AAEX,MAAM,iBAAiB,GAAG;;;;CAIzB,CAAC;AAEF,MAAM,cAAc,GAAG,CAAC,IAAkB,EAAE,UAAkB,EAAU,EAAE;IACxE,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,IAAI,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3D,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,IAAI,uBAAuB,WAAW,EAAE,CAAC;IAEtE,OAAO,qBAAqB,IAAI,CAAC,IAAI;;EAErC,IAAI;;;;;EAKJ,IAAI,CAAC,IAAI;;;;;;;;;;;;;;;;;;;6BAmBkB,IAAI,CAAC,IAAI;;;sBAGhB,WAAW;sBACX,IAAI;uBACH,UAAU;;;;;;;;;;;;;;;EAe/B,IAAI,CAAC,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4FV,CAAC;AACF,CAAC,CAAC;AAEF,MAAM,mBAAmB,GAAG,CAAC,IAAkB,EAAE,UAAkB,EAAU,EAAE;IAC7E,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,IAAI,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3D,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,IAAI,uBAAuB,WAAW,EAAE,CAAC;IAEtE,OAAO;;;;;;QAMD,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;oBACX,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;;2BAEf,WAAW,CAAC,IAAI,CAAC;oCACR,WAAW,CAAC,WAAW,CAAC;4BAChC,WAAW,CAAC,UAAU,CAAC;;;;;;;;;;;;;;;;;;;;;;qBAsB9B,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;CAC3C,CAAC;AACF,CAAC,CAAC;AAEF,MAAM,mBAAmB,GAAG,CAAC,IAAkB,EAAU,EAAE;IACzD,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,IAAI,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAE3D,MAAM,OAAO,GAAG,WAAW,CAAC,WAAW,CAAC,CAAC;IAEzC,OAAO;;;;;;0CAMiC,OAAO;;;;;;;;;uCASV,OAAO;;;CAG7C,CAAC;AACF,CAAC,CAAC;AAWF;;;;GAIG;AACH,MAAM,oBAAoB,GAAG,KAAK,EAAE,OAA4B,EAAyB,EAAE;IACzF,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IAC/B,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC;IAEzC,IAAI,IAAI,IAAI,MAAM,EAAE,CAAC;QACnB,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC;IAChD,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACzB,MAAM,OAAO,GAAG,CAAC,CAAC,IAAI,IAAI,MAAM,EAAE,CAAC,MAAM,IAAI,UAAU,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACzE,MAAM,IAAI,aAAa,CACrB,+BAA+B,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,8IAA8I,CAChM,CAAC;IACJ,CAAC;IAED,MAAM,EAAE,GAAG,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAE7E,IAAI,CAAC;QACH,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,eAAe,EAAE,CAAC,GAAG,CAAC,yBAAyB,CAAC,IAAI,CAAC,CAAC;YACvF,IAAI,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;YACrB,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,MAAM,IAAI,aAAa,CAAC,0BAA0B,CAAC,CAAC;YACtD,CAAC;QACH,CAAC;QAED,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,iBAAiB,EAAE,CAAC,GAAG,CAAC,kCAAkC,CAAC,IAAI,CAAC,CAAC;YAClG,MAAM,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;YACvB,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,MAAM,IAAI,aAAa,CAAC,4BAA4B,CAAC,CAAC;YACxD,CAAC;QACH,CAAC;IACH,CAAC;YAAS,CAAC;QACT,EAAE,CAAC,KAAK,EAAE,CAAC;IACb,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC;AAChD,CAAC,CAAC;AAEF,sBAAsB;AAEtB;;;GAGG;AACH,MAAM,cAAc,GAAG,KAAK,EAAE,IAAkB,EAAmB,EAAE;IACnE,MAAM,SAAS,GAAG,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAChD,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,IAAI,aAAa,CAAC,SAAS,CAAC,CAAC;IACrC,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,MAAM,IAAI,CAAC;IAClG,MAAM,YAAY,GAAG,kBAAkB,CAAC,UAAU,CAAC,CAAC;IACpD,IAAI,YAAY,EAAE,CAAC;QACjB,MAAM,IAAI,aAAa,CAAC,YAAY,CAAC,CAAC;IACxC,CAAC;IAED,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;IACrD,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC3B,MAAM,IAAI,aAAa,CAAC,cAAc,IAAI,CAAC,IAAI,kBAAkB,CAAC,CAAC;IACrE,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,mBAAmB,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC;IAEtE,IAAI,CAAC;QACH,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3C,SAAS,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAEjE,MAAM,SAAS,CAAC,IAAI,CAAC,UAAU,EAAE,cAAc,CAAC,EAAE,MAAM,mBAAmB,CAAC,IAAI,EAAE,UAAU,CAAC,EAAE,OAAO,CAAC,CAAC;QACxG,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;QAElE,MAAM,SAAS,CAAC,IAAI,CAAC,UAAU,EAAE,eAAe,CAAC,EAAE,gBAAgB,EAAE,OAAO,CAAC,CAAC;QAC9E,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;QAEnE,MAAM,SAAS,CAAC,IAAI,CAAC,UAAU,EAAE,kBAAkB,CAAC,EAAE,qBAAqB,EAAE,OAAO,CAAC,CAAC;QACtF,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC;QAEtE,MAAM,SAAS,CAAC,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,EAAE,kBAAkB,EAAE,OAAO,CAAC,CAAC;QAC9E,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;QAEjE,MAAM,SAAS,CAAC,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,EAAE,iBAAiB,EAAE,OAAO,CAAC,CAAC;QAC5E,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;QAEhE,MAAM,SAAS,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,EAAE,UAAU,CAAC,EAAE,mBAAmB,CAAC,IAAI,EAAE,UAAU,CAAC,EAAE,OAAO,CAAC,CAAC;QACrG,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;QAElE,MAAM,SAAS,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,EAAE,OAAO,EAAE,YAAY,CAAC,EAAE,mBAAmB,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;QACpG,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,sBAAsB,CAAC,EAAE,CAAC,CAAC;QAE1E,MAAM,SAAS,CAAC,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,EAAE,cAAc,CAAC,IAAI,EAAE,UAAU,CAAC,EAAE,OAAO,CAAC,CAAC;QAC1F,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IACjE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,CAAC;YACH,MAAM,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACvD,CAAC;QAAC,MAAM,CAAC;YACP,2BAA2B;QAC7B,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,0BAA0B,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;IAC9D,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IAC3B,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;IAC/C,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;IAC3C,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;IAC/E,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE,CAAC,GAAG,CAAC,wCAAwC,CAAC,EAAE,CAAC,CAAC;IAEvG,OAAO,UAAU,CAAC;AACpB,CAAC,CAAC;AAEF,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,aAAa,EAAE,YAAY,EAAE,WAAW,EAAE,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@opentabs-dev/cli",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.36",
|
|
4
4
|
"engines": {
|
|
5
|
-
"node": ">=
|
|
5
|
+
"node": ">= 22.0.0"
|
|
6
6
|
},
|
|
7
7
|
"type": "module",
|
|
8
8
|
"exports": {
|
|
@@ -24,15 +24,12 @@
|
|
|
24
24
|
"build": "tsc --build"
|
|
25
25
|
},
|
|
26
26
|
"dependencies": {
|
|
27
|
-
"@opentabs-dev/browser-extension": "
|
|
28
|
-
"@opentabs-dev/mcp-server": "
|
|
29
|
-
"@opentabs-dev/plugin-sdk": "
|
|
30
|
-
"@opentabs-dev/plugin-tools": "
|
|
31
|
-
"@opentabs-dev/shared": "
|
|
27
|
+
"@opentabs-dev/browser-extension": "*",
|
|
28
|
+
"@opentabs-dev/mcp-server": "*",
|
|
29
|
+
"@opentabs-dev/plugin-sdk": "*",
|
|
30
|
+
"@opentabs-dev/plugin-tools": "*",
|
|
31
|
+
"@opentabs-dev/shared": "*",
|
|
32
32
|
"commander": "^14.0.3",
|
|
33
33
|
"picocolors": "^1.1.1"
|
|
34
|
-
},
|
|
35
|
-
"devDependencies": {
|
|
36
|
-
"bun-types": "^1.3.9"
|
|
37
34
|
}
|
|
38
35
|
}
|