@opentabs-dev/cli 0.0.22 → 0.0.24
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/commands/audit.d.ts.map +1 -1
- package/dist/commands/audit.js +13 -7
- package/dist/commands/audit.js.map +1 -1
- package/dist/commands/config.d.ts.map +1 -1
- package/dist/commands/config.js +48 -56
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/doctor.d.ts +5 -1
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +16 -11
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/logs.d.ts +4 -1
- package/dist/commands/logs.d.ts.map +1 -1
- package/dist/commands/logs.js +29 -16
- package/dist/commands/logs.js.map +1 -1
- package/dist/commands/plugin.d.ts +22 -1
- package/dist/commands/plugin.d.ts.map +1 -1
- package/dist/commands/plugin.js +197 -37
- package/dist/commands/plugin.js.map +1 -1
- package/dist/commands/start.d.ts.map +1 -1
- package/dist/commands/start.js +22 -14
- package/dist/commands/start.js.map +1 -1
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +4 -5
- package/dist/commands/status.js.map +1 -1
- package/dist/config.d.ts +7 -8
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +22 -21
- package/dist/config.js.map +1 -1
- package/dist/parse-port.d.ts.map +1 -1
- package/dist/parse-port.js +1 -1
- package/dist/parse-port.js.map +1 -1
- package/package.json +5 -5
package/dist/commands/start.js
CHANGED
|
@@ -10,8 +10,9 @@
|
|
|
10
10
|
* The `opentabs logs` command tails this file.
|
|
11
11
|
*/
|
|
12
12
|
import { installExtension } from './setup.js';
|
|
13
|
-
import { getConfigDir, getLogFilePath } from '../config.js';
|
|
13
|
+
import { getConfigDir, getLogFilePath, readAuthSecret } from '../config.js';
|
|
14
14
|
import { parsePort, resolvePort } from '../parse-port.js';
|
|
15
|
+
import { isWindows, platformExec, toErrorMessage } from '@opentabs-dev/shared';
|
|
15
16
|
import pc from 'picocolors';
|
|
16
17
|
import { mkdirSync, createWriteStream } from 'node:fs';
|
|
17
18
|
import { resolve, dirname } from 'node:path';
|
|
@@ -69,12 +70,12 @@ const autoInitialize = async (configDir) => {
|
|
|
69
70
|
}
|
|
70
71
|
catch (err) {
|
|
71
72
|
// Extension install is non-fatal — the server can still start without it.
|
|
72
|
-
console.warn(pc.yellow(`Warning: Could not install extension: ${
|
|
73
|
+
console.warn(pc.yellow(`Warning: Could not install extension: ${toErrorMessage(err)}`));
|
|
73
74
|
console.warn(pc.dim('Restart opentabs start to retry extension installation.'));
|
|
74
75
|
}
|
|
75
76
|
return false;
|
|
76
77
|
};
|
|
77
|
-
const printFirstTimeInstructions = (extensionDest, port) => {
|
|
78
|
+
const printFirstTimeInstructions = (extensionDest, port, secret) => {
|
|
78
79
|
const mcpUrl = `http://127.0.0.1:${port}/mcp`;
|
|
79
80
|
console.log('');
|
|
80
81
|
console.log(pc.bold('First-time setup:'));
|
|
@@ -86,20 +87,24 @@ const printFirstTimeInstructions = (extensionDest, port) => {
|
|
|
86
87
|
console.log('');
|
|
87
88
|
console.log(' 2. Configure your MCP client:');
|
|
88
89
|
console.log('');
|
|
89
|
-
printMcpClientConfigs(mcpUrl);
|
|
90
|
+
printMcpClientConfigs(mcpUrl, secret);
|
|
90
91
|
};
|
|
91
|
-
const printMcpClientConfigs = (mcpUrl) => {
|
|
92
|
-
|
|
93
|
-
console.log(pc.dim(` {
|
|
92
|
+
const printMcpClientConfigs = (mcpUrl, secret) => {
|
|
93
|
+
const headers = secret ? `, "headers": { "Authorization": "Bearer ${secret}" }` : '';
|
|
94
|
+
console.log(pc.dim(` ${pc.bold('Claude Code')} (~/.claude.json — add to "mcpServers"):`));
|
|
95
|
+
console.log(pc.dim(` { "mcpServers": { "opentabs": { "type": "streamable-http", "url": "${mcpUrl}"${headers} } } }`));
|
|
96
|
+
console.log('');
|
|
97
|
+
console.log(pc.dim(` ${pc.bold('OpenCode')} (opencode.json in project root):`));
|
|
98
|
+
console.log(pc.dim(` { "mcp": { "opentabs": { "type": "remote", "url": "${mcpUrl}"${headers} } } }`));
|
|
94
99
|
console.log('');
|
|
95
100
|
console.log(pc.dim(` ${pc.bold('Cursor')} (.cursor/mcp.json):`));
|
|
96
|
-
console.log(pc.dim(` { "mcpServers": { "opentabs": { "type": "http", "url": "${mcpUrl}" } } }`));
|
|
101
|
+
console.log(pc.dim(` { "mcpServers": { "opentabs": { "type": "http", "url": "${mcpUrl}"${headers} } } }`));
|
|
97
102
|
console.log('');
|
|
98
103
|
console.log(pc.dim(` ${pc.bold('Windsurf')} (~/.codeium/windsurf/mcp_config.json):`));
|
|
99
|
-
console.log(pc.dim(` { "mcpServers": { "opentabs": { "serverUrl": "${mcpUrl}" } } }`));
|
|
104
|
+
console.log(pc.dim(` { "mcpServers": { "opentabs": { "serverUrl": "${mcpUrl}"${headers} } } }`));
|
|
100
105
|
console.log('');
|
|
101
106
|
console.log(pc.dim(' For other MCP clients, consult their documentation for adding a Streamable HTTP server'));
|
|
102
|
-
console.log(pc.dim(` pointing to ${mcpUrl}
|
|
107
|
+
console.log(pc.dim(` pointing to ${mcpUrl} with Authorization: Bearer <secret>`));
|
|
103
108
|
console.log('');
|
|
104
109
|
};
|
|
105
110
|
const handleStart = async (options) => {
|
|
@@ -119,6 +124,7 @@ const handleStart = async (options) => {
|
|
|
119
124
|
}
|
|
120
125
|
const configDir = getConfigDir();
|
|
121
126
|
const isFirstTime = await autoInitialize(configDir);
|
|
127
|
+
const secret = await readAuthSecret();
|
|
122
128
|
const env = { ...process.env };
|
|
123
129
|
env.PORT = String(port);
|
|
124
130
|
const logFilePath = getLogFilePath();
|
|
@@ -131,23 +137,25 @@ const handleStart = async (options) => {
|
|
|
131
137
|
console.log('');
|
|
132
138
|
if (isFirstTime) {
|
|
133
139
|
const extensionDest = resolve(configDir, 'extension');
|
|
134
|
-
printFirstTimeInstructions(extensionDest, port);
|
|
140
|
+
printFirstTimeInstructions(extensionDest, port, secret);
|
|
135
141
|
}
|
|
136
142
|
else {
|
|
137
143
|
console.log(pc.dim(' MCP client config (add to your client):'));
|
|
138
144
|
console.log('');
|
|
139
|
-
printMcpClientConfigs(`http://127.0.0.1:${port}/mcp
|
|
145
|
+
printMcpClientConfigs(`http://127.0.0.1:${port}/mcp`, secret);
|
|
140
146
|
}
|
|
141
147
|
console.log(pc.dim(' Press Ctrl+C to stop'));
|
|
142
148
|
console.log('');
|
|
143
|
-
const proc = Bun.spawn(['bun', serverEntry], {
|
|
149
|
+
const proc = Bun.spawn([platformExec('bun'), serverEntry], {
|
|
144
150
|
env: env,
|
|
145
151
|
stdio: ['inherit', 'pipe', 'pipe'],
|
|
146
152
|
});
|
|
147
153
|
const stdoutPipe = teeStream(proc.stdout, process.stdout, logStream);
|
|
148
154
|
const stderrPipe = teeStream(proc.stderr, process.stderr, logStream);
|
|
149
155
|
process.on('SIGINT', () => proc.kill('SIGINT'));
|
|
150
|
-
|
|
156
|
+
if (!isWindows()) {
|
|
157
|
+
process.on('SIGTERM', () => proc.kill('SIGTERM'));
|
|
158
|
+
}
|
|
151
159
|
await Promise.all([stdoutPipe, stderrPipe]);
|
|
152
160
|
logStream.end();
|
|
153
161
|
const exitCode = await proc.exited;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"start.js","sourceRoot":"","sources":["../../src/commands/start.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"start.js","sourceRoot":"","sources":["../../src/commands/start.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAuBzC,QAAA,MAAM,YAAY,GAAI,SAAS,MAAM,KAAG,MAWvC,CAAC;AAEF,QAAA,MAAM,aAAa,GAAI,UAAU,MAAM,KAAG,MAIzC,CAAC;AAEF,QAAA,MAAM,SAAS,GAAI,KAAK,OAAO,KAAG,OAAqE,CAAC;AAoGxG,QAAA,MAAM,qBAAqB,GAAI,SAAS,OAAO,KAAG,IAejD,CAAC;AAEF,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,SAAS,EAAE,qBAAqB,EAAE,CAAC"}
|
package/dist/commands/status.js
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* `opentabs status` command — shows server status and connected plugins.
|
|
3
3
|
*/
|
|
4
|
-
import {
|
|
4
|
+
import { isConnectionRefused, readAuthSecret } from '../config.js';
|
|
5
5
|
import { parsePort, resolvePort } from '../parse-port.js';
|
|
6
|
+
import { toErrorMessage } from '@opentabs-dev/shared';
|
|
6
7
|
import pc from 'picocolors';
|
|
7
8
|
const pad = (label) => ` ${pc.cyan(label.padEnd(14))}`;
|
|
8
9
|
const formatUptime = (seconds) => {
|
|
@@ -31,9 +32,7 @@ const isTimeout = (err) => err instanceof DOMException && err.name === 'TimeoutE
|
|
|
31
32
|
const handleStatus = async (options) => {
|
|
32
33
|
const port = resolvePort(options);
|
|
33
34
|
const url = `http://localhost:${port}/health`;
|
|
34
|
-
const
|
|
35
|
-
const { config } = await readConfig(configPath);
|
|
36
|
-
const secret = config && typeof config.secret === 'string' ? config.secret : null;
|
|
35
|
+
const secret = await readAuthSecret();
|
|
37
36
|
try {
|
|
38
37
|
const headers = {};
|
|
39
38
|
if (secret)
|
|
@@ -114,7 +113,7 @@ const handleStatus = async (options) => {
|
|
|
114
113
|
console.error(pc.dim('The health endpoint did not return valid JSON.'));
|
|
115
114
|
}
|
|
116
115
|
else {
|
|
117
|
-
const message =
|
|
116
|
+
const message = toErrorMessage(err);
|
|
118
117
|
console.error(pc.red(`Error: ${message}`));
|
|
119
118
|
console.error(pc.dim(startHint));
|
|
120
119
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"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"}
|
package/dist/config.d.ts
CHANGED
|
@@ -1,10 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Config file helpers shared across CLI commands.
|
|
3
3
|
*/
|
|
4
|
-
|
|
5
|
-
export
|
|
6
|
-
export declare const getExtensionDir: () => string;
|
|
7
|
-
export declare const getLogFilePath: () => string;
|
|
4
|
+
import { getConfigDir, getConfigPath, getExtensionDir, getLogFilePath } from '@opentabs-dev/shared';
|
|
5
|
+
export { getConfigDir, getConfigPath, getExtensionDir, getLogFilePath };
|
|
8
6
|
export type ConfigResult = {
|
|
9
7
|
config: Record<string, unknown>;
|
|
10
8
|
error?: undefined;
|
|
@@ -19,11 +17,12 @@ export type ConfigResult = {
|
|
|
19
17
|
export declare const readConfig: (configPath: string) => Promise<ConfigResult>;
|
|
20
18
|
export declare const getLocalPluginsFromConfig: (config: Record<string, unknown>) => string[];
|
|
21
19
|
export declare const resolvePluginPath: (pluginPath: string, configPath: string) => string;
|
|
20
|
+
/** Write config atomically with restrictive permissions via the shared helper. */
|
|
21
|
+
export declare const atomicWriteConfig: (configPath: string, content: string) => Promise<void>;
|
|
22
22
|
/**
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
* is atomic on POSIX filesystems, so readers never see a partially-written file.
|
|
23
|
+
* Read the WebSocket authentication secret from ~/.opentabs/extension/auth.json.
|
|
24
|
+
* Returns null if auth.json does not exist or has no valid secret.
|
|
26
25
|
*/
|
|
27
|
-
export declare const
|
|
26
|
+
export declare const readAuthSecret: () => Promise<string | null>;
|
|
28
27
|
export declare const isConnectionRefused: (err: unknown) => boolean;
|
|
29
28
|
//# 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;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAEL,YAAY,EACZ,aAAa,EACb,eAAe,EACf,cAAc,EAEf,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,cAAc,EAAE,CAAC;AAExE,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,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,CAc5D,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAAI,KAAK,OAAO,KAAG,OAIlD,CAAC"}
|
package/dist/config.js
CHANGED
|
@@ -1,13 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Config file helpers shared across CLI commands.
|
|
3
3
|
*/
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
|
|
7
|
-
export const getConfigDir = () => Bun.env.OPENTABS_CONFIG_DIR || join(homedir(), '.opentabs');
|
|
8
|
-
export const getConfigPath = () => join(getConfigDir(), 'config.json');
|
|
9
|
-
export const getExtensionDir = () => join(getConfigDir(), 'extension');
|
|
10
|
-
export const getLogFilePath = () => join(getConfigDir(), 'server.log');
|
|
4
|
+
import { atomicWrite, getConfigDir, getConfigPath, getExtensionDir, getLogFilePath, toErrorMessage, } from '@opentabs-dev/shared';
|
|
5
|
+
import { dirname, join, resolve, isAbsolute } from 'node:path';
|
|
6
|
+
export { getConfigDir, getConfigPath, getExtensionDir, getLogFilePath };
|
|
11
7
|
export const readConfig = async (configPath) => {
|
|
12
8
|
const configFile = Bun.file(configPath);
|
|
13
9
|
if (!(await configFile.exists())) {
|
|
@@ -21,7 +17,7 @@ export const readConfig = async (configPath) => {
|
|
|
21
17
|
return {
|
|
22
18
|
config: null,
|
|
23
19
|
error: 'invalid',
|
|
24
|
-
message: `Invalid JSON: ${
|
|
20
|
+
message: `Invalid JSON: ${toErrorMessage(err)}`,
|
|
25
21
|
};
|
|
26
22
|
}
|
|
27
23
|
if (typeof parsed !== 'object' || parsed === null || Array.isArray(parsed)) {
|
|
@@ -38,24 +34,29 @@ export const getLocalPluginsFromConfig = (config) => Array.isArray(config.localP
|
|
|
38
34
|
? config.localPlugins.filter((p) => typeof p === 'string')
|
|
39
35
|
: [];
|
|
40
36
|
export const resolvePluginPath = (pluginPath, configPath) => isAbsolute(pluginPath) ? pluginPath : resolve(dirname(configPath), pluginPath);
|
|
37
|
+
/** Write config atomically with restrictive permissions via the shared helper. */
|
|
38
|
+
export const atomicWriteConfig = (configPath, content) => atomicWrite(configPath, content, 0o600);
|
|
41
39
|
/**
|
|
42
|
-
*
|
|
43
|
-
*
|
|
44
|
-
* is atomic on POSIX filesystems, so readers never see a partially-written file.
|
|
40
|
+
* Read the WebSocket authentication secret from ~/.opentabs/extension/auth.json.
|
|
41
|
+
* Returns null if auth.json does not exist or has no valid secret.
|
|
45
42
|
*/
|
|
46
|
-
export const
|
|
47
|
-
const
|
|
43
|
+
export const readAuthSecret = async () => {
|
|
44
|
+
const authPath = join(getExtensionDir(), 'auth.json');
|
|
45
|
+
const authFile = Bun.file(authPath);
|
|
46
|
+
if (!(await authFile.exists()))
|
|
47
|
+
return null;
|
|
48
48
|
try {
|
|
49
|
-
await
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
49
|
+
const parsed = JSON.parse(await authFile.text());
|
|
50
|
+
if (parsed && typeof parsed === 'object' && !Array.isArray(parsed)) {
|
|
51
|
+
const secret = parsed.secret;
|
|
52
|
+
if (typeof secret === 'string' && secret.length > 0)
|
|
53
|
+
return secret;
|
|
54
|
+
}
|
|
54
55
|
}
|
|
55
|
-
catch
|
|
56
|
-
|
|
57
|
-
throw err;
|
|
56
|
+
catch {
|
|
57
|
+
// Malformed auth.json — treat as missing
|
|
58
58
|
}
|
|
59
|
+
return null;
|
|
59
60
|
};
|
|
60
61
|
export const isConnectionRefused = (err) => {
|
|
61
62
|
if (!(err instanceof TypeError))
|
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,
|
|
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;AAMH,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
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Shared port parser and resolver for Commander options.
|
|
3
3
|
*/
|
|
4
|
+
import { DEFAULT_PORT } from '@opentabs-dev/shared';
|
|
4
5
|
import { InvalidArgumentError } from 'commander';
|
|
5
6
|
import pc from 'picocolors';
|
|
6
|
-
const DEFAULT_PORT = 9515;
|
|
7
7
|
const parsePort = (value) => {
|
|
8
8
|
const port = Number(value);
|
|
9
9
|
if (!Number.isInteger(port) || port < 1 || port > 65535) {
|
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,
|
|
1
|
+
{"version":3,"file":"parse-port.js","sourceRoot":"","sources":["../src/parse-port.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AACjD,OAAO,EAAE,MAAM,YAAY,CAAC;AAE5B,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/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@opentabs-dev/cli",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.24",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
"./scaffold": {
|
|
@@ -21,10 +21,10 @@
|
|
|
21
21
|
"build": "tsc --build"
|
|
22
22
|
},
|
|
23
23
|
"dependencies": {
|
|
24
|
-
"@opentabs-dev/mcp-server": "
|
|
25
|
-
"@opentabs-dev/plugin-sdk": "
|
|
26
|
-
"@opentabs-dev/plugin-tools": "
|
|
27
|
-
"@opentabs-dev/shared": "
|
|
24
|
+
"@opentabs-dev/mcp-server": "0.0.22",
|
|
25
|
+
"@opentabs-dev/plugin-sdk": "0.0.23",
|
|
26
|
+
"@opentabs-dev/plugin-tools": "0.0.23",
|
|
27
|
+
"@opentabs-dev/shared": "0.0.23",
|
|
28
28
|
"commander": "^14.0.3",
|
|
29
29
|
"picocolors": "^1.1.1"
|
|
30
30
|
},
|