@opentabs-dev/cli 0.0.24 → 0.0.25
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 +2 -1
- package/dist/cli.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/update.d.ts +12 -0
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/update.js +109 -0
- package/dist/commands/update.js.map +1 -0
- package/package.json +1 -1
package/dist/cli.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env bun
|
|
2
|
-
import { registerAuditCommand, registerConfigCommand, registerDoctorCommand, registerLogsCommand, registerPluginCommand, registerStartCommand, registerStatusCommand, } from './commands/index.js';
|
|
2
|
+
import { registerAuditCommand, registerConfigCommand, registerDoctorCommand, registerLogsCommand, registerPluginCommand, registerStartCommand, registerStatusCommand, registerUpdateCommand, } from './commands/index.js';
|
|
3
3
|
import { parsePort } from './parse-port.js';
|
|
4
4
|
import { Command } from 'commander';
|
|
5
5
|
import { dirname, join } from 'node:path';
|
|
@@ -23,5 +23,6 @@ registerDoctorCommand(program);
|
|
|
23
23
|
registerLogsCommand(program);
|
|
24
24
|
registerPluginCommand(program);
|
|
25
25
|
registerConfigCommand(program);
|
|
26
|
+
registerUpdateCommand(program);
|
|
26
27
|
await program.parseAsync();
|
|
27
28
|
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EACrB,qBAAqB,EACrB,mBAAmB,EACnB,qBAAqB,EACrB,oBAAoB,EACpB,qBAAqB,GACtB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AACvD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC,IAAI,EAAE,CAAwB,CAAC;AAE7G,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,UAAU,CAAC;KACpC,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,eAAe,CAAC;KACzC,WAAW,CAAC,+CAA+C,CAAC;KAC5D,MAAM,CAAC,iBAAiB,EAAE,qDAAqD,EAAE,SAAS,CAAC;KAC3F,WAAW,CACV,OAAO,EACP;;gEAE4D,CAC7D;KACA,MAAM,CAAC,GAAG,EAAE;IACX,OAAO,CAAC,IAAI,EAAE,CAAC;AACjB,CAAC,CAAC,CAAC;AAEL,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAC9B,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/B,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAC9B,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/B,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAC7B,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/B,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAE/B,MAAM,OAAO,CAAC,UAAU,EAAE,CAAC"}
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EACrB,qBAAqB,EACrB,mBAAmB,EACnB,qBAAqB,EACrB,oBAAoB,EACpB,qBAAqB,EACrB,qBAAqB,GACtB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AACvD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC,IAAI,EAAE,CAAwB,CAAC;AAE7G,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,UAAU,CAAC;KACpC,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,eAAe,CAAC;KACzC,WAAW,CAAC,+CAA+C,CAAC;KAC5D,MAAM,CAAC,iBAAiB,EAAE,qDAAqD,EAAE,SAAS,CAAC;KAC3F,WAAW,CACV,OAAO,EACP;;gEAE4D,CAC7D;KACA,MAAM,CAAC,GAAG,EAAE;IACX,OAAO,CAAC,IAAI,EAAE,CAAC;AACjB,CAAC,CAAC,CAAC;AAEL,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAC9B,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/B,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAC9B,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/B,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAC7B,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/B,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/B,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAE/B,MAAM,OAAO,CAAC,UAAU,EAAE,CAAC"}
|
package/dist/commands/index.d.ts
CHANGED
|
@@ -5,4 +5,5 @@ export { registerLogsCommand } from './logs.js';
|
|
|
5
5
|
export { registerStartCommand } from './start.js';
|
|
6
6
|
export { registerStatusCommand } from './status.js';
|
|
7
7
|
export { registerPluginCommand } from './plugin.js';
|
|
8
|
+
export { registerUpdateCommand } from './update.js';
|
|
8
9
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC"}
|
package/dist/commands/index.js
CHANGED
|
@@ -5,4 +5,5 @@ export { registerLogsCommand } from './logs.js';
|
|
|
5
5
|
export { registerStartCommand } from './start.js';
|
|
6
6
|
export { registerStatusCommand } from './status.js';
|
|
7
7
|
export { registerPluginCommand } from './plugin.js';
|
|
8
|
+
export { registerUpdateCommand } from './update.js';
|
|
8
9
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `opentabs update` command — update the CLI to the latest version.
|
|
3
|
+
*
|
|
4
|
+
* Shells out to `npm view` to check the latest published version (which
|
|
5
|
+
* handles auth for private packages via ~/.npmrc), compares with the
|
|
6
|
+
* currently installed version, and delegates to `bun install -g` for
|
|
7
|
+
* the actual update. Warns if a server is running.
|
|
8
|
+
*/
|
|
9
|
+
import type { Command } from 'commander';
|
|
10
|
+
declare const registerUpdateCommand: (program: Command) => void;
|
|
11
|
+
export { registerUpdateCommand };
|
|
12
|
+
//# sourceMappingURL=update.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAOH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAuGzC,QAAA,MAAM,qBAAqB,GAAI,SAAS,OAAO,KAAG,IAWjD,CAAC;AAEF,OAAO,EAAE,qBAAqB,EAAE,CAAC"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `opentabs update` command — update the CLI to the latest version.
|
|
3
|
+
*
|
|
4
|
+
* Shells out to `npm view` to check the latest published version (which
|
|
5
|
+
* handles auth for private packages via ~/.npmrc), compares with the
|
|
6
|
+
* currently installed version, and delegates to `bun install -g` for
|
|
7
|
+
* the actual update. Warns if a server is running.
|
|
8
|
+
*/
|
|
9
|
+
import { resolvePort } from '../parse-port.js';
|
|
10
|
+
import { toErrorMessage } from '@opentabs-dev/shared';
|
|
11
|
+
import pc from 'picocolors';
|
|
12
|
+
import { dirname, join } from 'node:path';
|
|
13
|
+
import { fileURLToPath } from 'node:url';
|
|
14
|
+
const CLI_PACKAGE_NAME = '@opentabs-dev/cli';
|
|
15
|
+
/** Read the currently installed CLI version from package.json. */
|
|
16
|
+
const getInstalledVersion = async () => {
|
|
17
|
+
const cliDir = dirname(fileURLToPath(import.meta.url));
|
|
18
|
+
const pkgJson = JSON.parse(await Bun.file(join(cliDir, '..', '..', 'package.json')).text());
|
|
19
|
+
return pkgJson.version;
|
|
20
|
+
};
|
|
21
|
+
/** Query the latest published version via `npm view`. */
|
|
22
|
+
const getLatestVersion = () => {
|
|
23
|
+
const result = Bun.spawnSync(['npm', 'view', CLI_PACKAGE_NAME, 'version'], {
|
|
24
|
+
stdio: ['ignore', 'pipe', 'pipe'],
|
|
25
|
+
});
|
|
26
|
+
if (result.exitCode !== 0) {
|
|
27
|
+
const stderr = result.stderr.toString().trim();
|
|
28
|
+
throw new Error(`npm view failed: ${stderr || `exit code ${result.exitCode}`}`);
|
|
29
|
+
}
|
|
30
|
+
return result.stdout.toString().trim();
|
|
31
|
+
};
|
|
32
|
+
/** Check if the MCP server is running on the given port. */
|
|
33
|
+
const isServerRunning = async (port) => {
|
|
34
|
+
try {
|
|
35
|
+
const res = await fetch(`http://localhost:${port}/health`, {
|
|
36
|
+
signal: AbortSignal.timeout(2_000),
|
|
37
|
+
});
|
|
38
|
+
return res.ok;
|
|
39
|
+
}
|
|
40
|
+
catch {
|
|
41
|
+
return false;
|
|
42
|
+
}
|
|
43
|
+
};
|
|
44
|
+
/** Run `bun install -g` to update the CLI package. */
|
|
45
|
+
const performUpdate = (version) => {
|
|
46
|
+
const target = `${CLI_PACKAGE_NAME}@${version}`;
|
|
47
|
+
const result = Bun.spawnSync(['bun', 'install', '-g', target], {
|
|
48
|
+
stdio: ['inherit', 'inherit', 'inherit'],
|
|
49
|
+
});
|
|
50
|
+
return result.exitCode === 0;
|
|
51
|
+
};
|
|
52
|
+
const handleUpdate = async (options) => {
|
|
53
|
+
const port = resolvePort(options);
|
|
54
|
+
// 1. Get current and latest versions
|
|
55
|
+
let installed;
|
|
56
|
+
let latest;
|
|
57
|
+
try {
|
|
58
|
+
console.log(pc.dim('Checking for updates...'));
|
|
59
|
+
installed = await getInstalledVersion();
|
|
60
|
+
latest = getLatestVersion();
|
|
61
|
+
}
|
|
62
|
+
catch (err) {
|
|
63
|
+
console.error(pc.red(`Failed to check for updates: ${toErrorMessage(err)}`));
|
|
64
|
+
process.exit(1);
|
|
65
|
+
}
|
|
66
|
+
if (installed === latest) {
|
|
67
|
+
console.log(pc.green(`Already up to date (v${installed}).`));
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
console.log(` Installed: ${pc.dim(`v${installed}`)}`);
|
|
71
|
+
console.log(` Latest: ${pc.cyan(`v${latest}`)}`);
|
|
72
|
+
console.log('');
|
|
73
|
+
// 2. Check if server is running and warn
|
|
74
|
+
const serverRunning = await isServerRunning(port);
|
|
75
|
+
if (serverRunning) {
|
|
76
|
+
console.log(pc.yellow(`Warning: MCP server is running on port ${port}.`));
|
|
77
|
+
console.log(pc.yellow('The server will need to be restarted after the update.'));
|
|
78
|
+
console.log('');
|
|
79
|
+
}
|
|
80
|
+
// 3. Perform the update
|
|
81
|
+
console.log(`Updating ${CLI_PACKAGE_NAME} to v${latest}...`);
|
|
82
|
+
console.log('');
|
|
83
|
+
const success = performUpdate(latest);
|
|
84
|
+
if (!success) {
|
|
85
|
+
console.error('');
|
|
86
|
+
console.error(pc.red('Update failed.'));
|
|
87
|
+
console.error(pc.dim(`Try manually: bun install -g ${CLI_PACKAGE_NAME}@latest`));
|
|
88
|
+
process.exit(1);
|
|
89
|
+
}
|
|
90
|
+
console.log('');
|
|
91
|
+
console.log(pc.green(`Updated to v${latest}.`));
|
|
92
|
+
if (serverRunning) {
|
|
93
|
+
console.log('');
|
|
94
|
+
console.log('Restart the MCP server to use the new version:');
|
|
95
|
+
console.log(pc.dim(' 1. Stop the current server (Ctrl+C or kill the process)'));
|
|
96
|
+
console.log(pc.dim(' 2. Run: opentabs start'));
|
|
97
|
+
}
|
|
98
|
+
};
|
|
99
|
+
const registerUpdateCommand = (program) => {
|
|
100
|
+
program
|
|
101
|
+
.command('update')
|
|
102
|
+
.description('Update OpenTabs CLI to the latest version')
|
|
103
|
+
.addHelpText('after', `
|
|
104
|
+
Examples:
|
|
105
|
+
$ opentabs update`)
|
|
106
|
+
.action((_options, command) => handleUpdate(command.optsWithGlobals()));
|
|
107
|
+
};
|
|
108
|
+
export { registerUpdateCommand };
|
|
109
|
+
//# sourceMappingURL=update.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"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"}
|