@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
package/dist/cli.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { registerAuditCommand, registerConfigCommand, registerDoctorCommand, registerLogsCommand, registerPluginCommand, registerStartCommand, registerStatusCommand, registerUpdateCommand, } from './commands/index.js';
|
|
2
|
+
import { handleStatus, registerAuditCommand, registerConfigCommand, registerDoctorCommand, registerLogsCommand, registerPluginCommand, registerStartCommand, registerStatusCommand, registerStopCommand, registerUpdateCommand, } from './commands/index.js';
|
|
3
3
|
import { parsePort } from './parse-port.js';
|
|
4
4
|
import { Command } from 'commander';
|
|
5
5
|
import { readFile } from 'node:fs/promises';
|
|
@@ -13,10 +13,20 @@ const program = new Command('opentabs')
|
|
|
13
13
|
.option('--port <number>', 'MCP server port (env: OPENTABS_PORT, default: 9515)', parsePort)
|
|
14
14
|
.showSuggestionAfterError()
|
|
15
15
|
.showHelpAfterError()
|
|
16
|
+
.allowExcessArguments(true)
|
|
16
17
|
.addHelpText('after', `\nEnvironment:
|
|
17
18
|
OPENTABS_PORT MCP server port (overridden by --port)
|
|
18
|
-
OPENTABS_CONFIG_DIR Config directory (default: ~/.opentabs)`)
|
|
19
|
+
OPENTABS_CONFIG_DIR Config directory (default: ~/.opentabs)`)
|
|
20
|
+
.action((_options, command) => {
|
|
21
|
+
if (command.args.length > 0) {
|
|
22
|
+
// Unknown subcommand typed (e.g. opentabs typo) — delegate to Commander's
|
|
23
|
+
// unknownCommand() to get proper error formatting and did-you-mean suggestion.
|
|
24
|
+
command.unknownCommand();
|
|
25
|
+
}
|
|
26
|
+
return handleStatus(command.optsWithGlobals());
|
|
27
|
+
});
|
|
19
28
|
registerStartCommand(program);
|
|
29
|
+
registerStopCommand(program);
|
|
20
30
|
registerStatusCommand(program);
|
|
21
31
|
registerAuditCommand(program);
|
|
22
32
|
registerDoctorCommand(program);
|
|
@@ -24,5 +34,9 @@ registerLogsCommand(program);
|
|
|
24
34
|
registerPluginCommand(program);
|
|
25
35
|
registerConfigCommand(program);
|
|
26
36
|
registerUpdateCommand(program);
|
|
27
|
-
await program.parseAsync()
|
|
37
|
+
await program.parseAsync().catch(() => {
|
|
38
|
+
// Action handlers print their own errors and call process.exit(1).
|
|
39
|
+
// Swallow the rejected promise so Commander does not re-print the output.
|
|
40
|
+
process.exitCode ??= 1;
|
|
41
|
+
});
|
|
28
42
|
//# 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,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,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,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,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,cAAc,CAAC,EAAE,OAAO,CAAC,CAAwB,CAAC;AAE/G,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,wBAAwB,EAAE;KAC1B,kBAAkB,EAAE;KACpB,WAAW,CACV,OAAO,EACP;;gEAE4D,CAC7D,CAAC;
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA,OAAO,EACL,YAAY,EACZ,oBAAoB,EACpB,qBAAqB,EACrB,qBAAqB,EACrB,mBAAmB,EACnB,qBAAqB,EACrB,oBAAoB,EACpB,qBAAqB,EACrB,mBAAmB,EACnB,qBAAqB,GACtB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,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,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,cAAc,CAAC,EAAE,OAAO,CAAC,CAAwB,CAAC;AAE/G,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,wBAAwB,EAAE;KAC1B,kBAAkB,EAAE;KACpB,oBAAoB,CAAC,IAAI,CAAC;KAC1B,WAAW,CACV,OAAO,EACP;;gEAE4D,CAC7D;KACA,MAAM,CAAC,CAAC,QAAQ,EAAE,OAAgB,EAAE,EAAE;IACrC,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,0EAA0E;QAC1E,+EAA+E;QAC9E,OAAsD,CAAC,cAAc,EAAE,CAAC;IAC3E,CAAC;IACD,OAAO,YAAY,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC;AACjD,CAAC,CAAC,CAAC;AAEL,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAC9B,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAC7B,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,KAAK,CAAC,GAAG,EAAE;IACpC,mEAAmE;IACnE,0EAA0E;IAC1E,OAAO,CAAC,QAAQ,KAAK,CAAC,CAAC;AACzB,CAAC,CAAC,CAAC"}
|
package/dist/commands/audit.d.ts
CHANGED
|
@@ -6,6 +6,10 @@
|
|
|
6
6
|
* for post-restart forensics.
|
|
7
7
|
*/
|
|
8
8
|
import type { Command } from 'commander';
|
|
9
|
+
declare const parseLimit: (value: string) => number;
|
|
10
|
+
declare const parseDuration: (value: string) => number | null;
|
|
11
|
+
declare const formatTimestamp: (iso: string) => string;
|
|
12
|
+
declare const formatDuration: (ms: number) => string;
|
|
9
13
|
declare const registerAuditCommand: (program: Command) => void;
|
|
10
|
-
export { registerAuditCommand };
|
|
14
|
+
export { registerAuditCommand, parseDuration, formatTimestamp, formatDuration, parseLimit };
|
|
11
15
|
//# sourceMappingURL=audit.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"audit.d.ts","sourceRoot":"","sources":["../../src/commands/audit.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAUH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"audit.d.ts","sourceRoot":"","sources":["../../src/commands/audit.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAUH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAqBzC,QAAA,MAAM,UAAU,GAAI,OAAO,MAAM,KAAG,MAMnC,CAAC;AASF,QAAA,MAAM,aAAa,GAAI,OAAO,MAAM,KAAG,MAAM,GAAG,IAO/C,CAAC;AAEF,QAAA,MAAM,eAAe,GAAI,KAAK,MAAM,KAAG,MAqBtC,CAAC;AAEF,QAAA,MAAM,cAAc,GAAI,IAAI,MAAM,KAAG,MAGpC,CAAC;AA4NF,QAAA,MAAM,oBAAoB,GAAI,SAAS,OAAO,KAAG,IAyBhD,CAAC;AAEF,OAAO,EAAE,oBAAoB,EAAE,aAAa,EAAE,eAAe,EAAE,cAAc,EAAE,UAAU,EAAE,CAAC"}
|
package/dist/commands/audit.js
CHANGED
|
@@ -58,15 +58,17 @@ const formatDuration = (ms) => {
|
|
|
58
58
|
return `${(ms / 1000).toFixed(1)}s`;
|
|
59
59
|
};
|
|
60
60
|
const COL_TIME = 15;
|
|
61
|
-
const
|
|
61
|
+
const COL_TOOL_MIN = 'Tool'.length;
|
|
62
62
|
const COL_STATUS = 4;
|
|
63
63
|
const COL_DURATION = 10;
|
|
64
64
|
const printAuditTable = (entries) => {
|
|
65
|
-
|
|
66
|
-
|
|
65
|
+
const maxToolLen = entries.reduce((max, e) => Math.max(max, e.tool.length), 0);
|
|
66
|
+
const colTool = Math.max(COL_TOOL_MIN, maxToolLen) + 2;
|
|
67
|
+
console.log(pc.bold(`${'Time'.padEnd(COL_TIME)}${'Tool'.padEnd(colTool)}${''.padEnd(COL_STATUS)}${'Duration'.padEnd(COL_DURATION)}`));
|
|
68
|
+
console.log(pc.dim('─'.repeat(COL_TIME + colTool + COL_STATUS + COL_DURATION)));
|
|
67
69
|
for (const entry of entries) {
|
|
68
70
|
const time = formatTimestamp(entry.timestamp).padEnd(COL_TIME);
|
|
69
|
-
const tool = entry.tool.padEnd(
|
|
71
|
+
const tool = entry.tool.padEnd(colTool);
|
|
70
72
|
// Pad the plain-text icon to the column width, then colorize.
|
|
71
73
|
// Colorizing after padding ensures ANSI escape codes don't affect alignment.
|
|
72
74
|
const icon = entry.success ? '✓' : '✗';
|
|
@@ -216,10 +218,12 @@ const handleAudit = async (options) => {
|
|
|
216
218
|
if (isConnectionRefused(err)) {
|
|
217
219
|
console.error(pc.red('MCP server is not running.'));
|
|
218
220
|
console.error(pc.dim(startHint));
|
|
221
|
+
console.error(pc.dim('Tip: Use --file to read audit history from the persistent disk log.'));
|
|
219
222
|
}
|
|
220
223
|
else if (isTimeout(err)) {
|
|
221
224
|
console.error(pc.red('Server not responding (timed out). Is the server running?'));
|
|
222
225
|
console.error(pc.dim(`The server at port ${port} did not respond in time.`));
|
|
226
|
+
console.error(pc.dim('Tip: Use --file to read audit history from the persistent disk log.'));
|
|
223
227
|
}
|
|
224
228
|
else {
|
|
225
229
|
const message = toErrorMessage(err);
|
|
@@ -252,5 +256,5 @@ Examples:
|
|
|
252
256
|
$ opentabs audit --file --since 1h --plugin slack`)
|
|
253
257
|
.action((_options, command) => handleAudit(command.optsWithGlobals()));
|
|
254
258
|
};
|
|
255
|
-
export { registerAuditCommand };
|
|
259
|
+
export { registerAuditCommand, parseDuration, formatTimestamp, formatDuration, parseLimit };
|
|
256
260
|
//# sourceMappingURL=audit.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"audit.js","sourceRoot":"","sources":["../../src/commands/audit.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"audit.js","sourceRoot":"","sources":["../../src/commands/audit.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,6 +2,26 @@
|
|
|
2
2
|
* `opentabs config` command — view and manage configuration.
|
|
3
3
|
*/
|
|
4
4
|
import type { Command } from 'commander';
|
|
5
|
+
declare const maskSecret: (secret: string) => string;
|
|
6
|
+
/**
|
|
7
|
+
* Apply an enabled/disabled change to a policy map.
|
|
8
|
+
* When enabled (the default), the entry is removed so defaults are not persisted.
|
|
9
|
+
* When disabled, the entry is explicitly set to false.
|
|
10
|
+
* Returns whether the entry was removed (true) or set to false (false).
|
|
11
|
+
*/
|
|
12
|
+
declare const applyPolicyEntry: (map: Record<string, boolean>, key: string, enabled: boolean) => void;
|
|
13
|
+
/**
|
|
14
|
+
* Resolve a stored plugin path to its absolute form for comparison.
|
|
15
|
+
* Handles both absolute paths and relative paths (resolved against configDir).
|
|
16
|
+
*/
|
|
17
|
+
declare const resolveStoredPluginPath: (storedPath: string, configDir: string) => string;
|
|
18
|
+
declare const handleSetLocalPluginsAdd: (value: string, options: {
|
|
19
|
+
port?: number;
|
|
20
|
+
force?: boolean;
|
|
21
|
+
}) => Promise<void>;
|
|
22
|
+
declare const levenshtein: (a: string, b: string) => number;
|
|
23
|
+
declare const KNOWN_KEYS: string[];
|
|
24
|
+
declare const suggestKey: (input: string) => string | null;
|
|
5
25
|
declare const registerConfigCommand: (program: Command) => void;
|
|
6
|
-
export { registerConfigCommand };
|
|
26
|
+
export { registerConfigCommand, maskSecret, resolveStoredPluginPath, levenshtein, suggestKey, KNOWN_KEYS, applyPolicyEntry, handleSetLocalPluginsAdd, };
|
|
7
27
|
//# sourceMappingURL=config.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAmBH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAWzC,QAAA,MAAM,UAAU,GAAI,QAAQ,MAAM,KAAG,MAGpC,CAAC;AAgQF;;;;;GAKG;AACH,QAAA,MAAM,gBAAgB,GAAI,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,KAAK,MAAM,EAAE,SAAS,OAAO,KAAG,IAMvF,CAAC;AA6HF;;;GAGG;AACH,QAAA,MAAM,uBAAuB,GAAI,YAAY,MAAM,EAAE,WAAW,MAAM,KAAG,MAIxE,CAAC;AAEF,QAAA,MAAM,wBAAwB,GAAU,OAAO,MAAM,EAAE,SAAS;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,KAAG,OAAO,CAAC,IAAI,CAoChH,CAAC;AA4BF,QAAA,MAAM,WAAW,GAAI,GAAG,MAAM,EAAE,GAAG,MAAM,KAAG,MAa3C,CAAC;AAEF,QAAA,MAAM,UAAU,UAAgF,CAAC;AAEjG,QAAA,MAAM,UAAU,GAAI,OAAO,MAAM,KAAG,MAAM,GAAG,IAqB5C,CAAC;AAqJF,QAAA,MAAM,qBAAqB,GAAI,SAAS,OAAO,KAAG,IAqFjD,CAAC;AAEF,OAAO,EACL,qBAAqB,EACrB,UAAU,EACV,uBAAuB,EACvB,WAAW,EACX,UAAU,EACV,UAAU,EACV,gBAAgB,EAChB,wBAAwB,GACzB,CAAC"}
|
package/dist/commands/config.js
CHANGED
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* `opentabs config` command — view and manage configuration.
|
|
3
3
|
*/
|
|
4
|
+
import { getMcpClientConfigs, printMcpClientConfigs } from './start.js';
|
|
4
5
|
import { atomicWriteConfig, getConfigPath, getExtensionDir, isConnectionRefused, readAuthSecret, readConfig, } from '../config.js';
|
|
5
6
|
import { notifyServer } from '../notify-server.js';
|
|
6
7
|
import { resolvePort } from '../parse-port.js';
|
|
7
|
-
import { atomicWrite, generateSecret, toErrorMessage } from '@opentabs-dev/shared';
|
|
8
|
+
import { atomicWrite, DEFAULT_PORT, generateSecret, toErrorMessage } from '@opentabs-dev/shared';
|
|
8
9
|
import pc from 'picocolors';
|
|
9
10
|
import { existsSync } from 'node:fs';
|
|
10
11
|
import { access, mkdir, unlink } from 'node:fs/promises';
|
|
11
12
|
import { homedir } from 'node:os';
|
|
12
|
-
import { dirname, join, resolve } from 'node:path';
|
|
13
|
+
import { dirname, isAbsolute, join, resolve } from 'node:path';
|
|
13
14
|
const handleConfigPath = () => {
|
|
14
15
|
console.log(getConfigPath());
|
|
15
16
|
};
|
|
@@ -35,7 +36,17 @@ const handleConfigShow = async (options) => {
|
|
|
35
36
|
const secret = await readAuthSecret();
|
|
36
37
|
const displaySecret = secret ? (options.showSecret ? secret : maskSecret(secret)) : null;
|
|
37
38
|
if (options.json) {
|
|
38
|
-
|
|
39
|
+
let mcpClients;
|
|
40
|
+
if (options.showSecret) {
|
|
41
|
+
const port = typeof config.port === 'number' ? config.port : DEFAULT_PORT;
|
|
42
|
+
const mcpUrl = `http://127.0.0.1:${port}/mcp`;
|
|
43
|
+
mcpClients = Object.fromEntries(getMcpClientConfigs(mcpUrl, secret).map(({ label, file, json }) => [label, { name: label, file, json }]));
|
|
44
|
+
}
|
|
45
|
+
const output = {
|
|
46
|
+
...config,
|
|
47
|
+
...(displaySecret ? { secret: displaySecret } : {}),
|
|
48
|
+
...(mcpClients !== undefined ? { mcpClients } : {}),
|
|
49
|
+
};
|
|
39
50
|
console.log(JSON.stringify(output, null, 2));
|
|
40
51
|
}
|
|
41
52
|
else {
|
|
@@ -80,6 +91,61 @@ const handleConfigShow = async (options) => {
|
|
|
80
91
|
}
|
|
81
92
|
}
|
|
82
93
|
}
|
|
94
|
+
else if (key === 'permissions' && typeof value === 'object' && value !== null) {
|
|
95
|
+
const perms = value;
|
|
96
|
+
console.log(` ${pc.cyan('permissions')}`);
|
|
97
|
+
const trustedDomains = Array.isArray(perms.trustedDomains) ? perms.trustedDomains : [];
|
|
98
|
+
console.log(` trustedDomains`);
|
|
99
|
+
if (trustedDomains.length === 0) {
|
|
100
|
+
console.log(` ${pc.dim('(none)')}`);
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
for (const d of trustedDomains) {
|
|
104
|
+
console.log(` - ${String(d)}`);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
const sensitiveDomains = Array.isArray(perms.sensitiveDomains) ? perms.sensitiveDomains : [];
|
|
108
|
+
console.log(` sensitiveDomains`);
|
|
109
|
+
if (sensitiveDomains.length === 0) {
|
|
110
|
+
console.log(` ${pc.dim('(none)')}`);
|
|
111
|
+
}
|
|
112
|
+
else {
|
|
113
|
+
for (const d of sensitiveDomains) {
|
|
114
|
+
console.log(` - ${String(d)}`);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
const toolPolicyEntries = typeof perms.toolPolicy === 'object' && perms.toolPolicy !== null && !Array.isArray(perms.toolPolicy)
|
|
118
|
+
? Object.entries(perms.toolPolicy)
|
|
119
|
+
: [];
|
|
120
|
+
console.log(` toolPolicy`);
|
|
121
|
+
if (toolPolicyEntries.length === 0) {
|
|
122
|
+
console.log(` ${pc.dim('(none)')}`);
|
|
123
|
+
}
|
|
124
|
+
else {
|
|
125
|
+
for (const [toolName, policy] of toolPolicyEntries) {
|
|
126
|
+
console.log(` ${toolName}: ${String(policy)}`);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
const domainToolPolicyEntries = typeof perms.domainToolPolicy === 'object' &&
|
|
130
|
+
perms.domainToolPolicy !== null &&
|
|
131
|
+
!Array.isArray(perms.domainToolPolicy)
|
|
132
|
+
? Object.entries(perms.domainToolPolicy)
|
|
133
|
+
: [];
|
|
134
|
+
console.log(` domainToolPolicy`);
|
|
135
|
+
if (domainToolPolicyEntries.length === 0) {
|
|
136
|
+
console.log(` ${pc.dim('(none)')}`);
|
|
137
|
+
}
|
|
138
|
+
else {
|
|
139
|
+
for (const [domain, toolsPolicy] of domainToolPolicyEntries) {
|
|
140
|
+
console.log(` ${domain}`);
|
|
141
|
+
if (typeof toolsPolicy === 'object' && toolsPolicy !== null && !Array.isArray(toolsPolicy)) {
|
|
142
|
+
for (const [toolName, policy] of Object.entries(toolsPolicy)) {
|
|
143
|
+
console.log(` ${toolName}: ${String(policy)}`);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
}
|
|
83
149
|
else {
|
|
84
150
|
const display = typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean'
|
|
85
151
|
? String(value)
|
|
@@ -91,6 +157,14 @@ const handleConfigShow = async (options) => {
|
|
|
91
157
|
console.log('');
|
|
92
158
|
console.log(` ${pc.cyan('secret')} ${pc.dim(displaySecret)}`);
|
|
93
159
|
}
|
|
160
|
+
if (options.showSecret && secret) {
|
|
161
|
+
const port = typeof config.port === 'number' ? config.port : DEFAULT_PORT;
|
|
162
|
+
const mcpUrl = `http://127.0.0.1:${port}/mcp`;
|
|
163
|
+
console.log('');
|
|
164
|
+
console.log(pc.dim(' MCP client config (add to your client):'));
|
|
165
|
+
console.log('');
|
|
166
|
+
printMcpClientConfigs(mcpUrl, secret);
|
|
167
|
+
}
|
|
94
168
|
}
|
|
95
169
|
};
|
|
96
170
|
const TOOL_PREFIX = 'tool.';
|
|
@@ -140,6 +214,27 @@ const fetchToolNames = async (port) => {
|
|
|
140
214
|
return null;
|
|
141
215
|
}
|
|
142
216
|
};
|
|
217
|
+
const fetchBrowserToolNames = async (port) => {
|
|
218
|
+
try {
|
|
219
|
+
const secret = await readAuthSecret();
|
|
220
|
+
const headers = {};
|
|
221
|
+
if (secret)
|
|
222
|
+
headers['Authorization'] = `Bearer ${secret}`;
|
|
223
|
+
const res = await fetch(`http://localhost:${port}/health`, {
|
|
224
|
+
headers,
|
|
225
|
+
signal: AbortSignal.timeout(3_000),
|
|
226
|
+
});
|
|
227
|
+
if (!res.ok)
|
|
228
|
+
return null;
|
|
229
|
+
const data = (await res.json());
|
|
230
|
+
if (!Array.isArray(data.browserToolNames))
|
|
231
|
+
return null;
|
|
232
|
+
return data.browserToolNames;
|
|
233
|
+
}
|
|
234
|
+
catch {
|
|
235
|
+
return null;
|
|
236
|
+
}
|
|
237
|
+
};
|
|
143
238
|
const handleListTools = async (options) => {
|
|
144
239
|
const port = resolvePort(options);
|
|
145
240
|
const tools = await fetchToolNames(port);
|
|
@@ -152,7 +247,8 @@ const handleListTools = async (options) => {
|
|
|
152
247
|
process.exit(1);
|
|
153
248
|
}
|
|
154
249
|
if (tools.length === 0) {
|
|
155
|
-
console.log(pc.dim('No tools available (no plugins installed).'));
|
|
250
|
+
console.log(pc.dim('No plugin tools available (no plugins installed).'));
|
|
251
|
+
console.log(pc.dim('Browser tools are managed with: opentabs config set browser-tool.<name> enabled|disabled'));
|
|
156
252
|
return;
|
|
157
253
|
}
|
|
158
254
|
console.log(pc.bold('Available tools:'));
|
|
@@ -162,6 +258,20 @@ const handleListTools = async (options) => {
|
|
|
162
258
|
console.log('');
|
|
163
259
|
console.log(pc.dim('Usage: opentabs config set tool.<name> enabled|disabled'));
|
|
164
260
|
};
|
|
261
|
+
/**
|
|
262
|
+
* Apply an enabled/disabled change to a policy map.
|
|
263
|
+
* When enabled (the default), the entry is removed so defaults are not persisted.
|
|
264
|
+
* When disabled, the entry is explicitly set to false.
|
|
265
|
+
* Returns whether the entry was removed (true) or set to false (false).
|
|
266
|
+
*/
|
|
267
|
+
const applyPolicyEntry = (map, key, enabled) => {
|
|
268
|
+
if (enabled) {
|
|
269
|
+
Reflect.deleteProperty(map, key);
|
|
270
|
+
}
|
|
271
|
+
else {
|
|
272
|
+
map[key] = false;
|
|
273
|
+
}
|
|
274
|
+
};
|
|
165
275
|
const handleSetTool = async (key, value, options) => {
|
|
166
276
|
const toolName = key.slice(TOOL_PREFIX.length);
|
|
167
277
|
if (!toolName || !toolName.includes('_')) {
|
|
@@ -181,7 +291,10 @@ const handleSetTool = async (key, value, options) => {
|
|
|
181
291
|
}
|
|
182
292
|
const tools = config.tools;
|
|
183
293
|
const enabled = value === 'enabled';
|
|
184
|
-
tools
|
|
294
|
+
applyPolicyEntry(tools, toolName, enabled);
|
|
295
|
+
if (Object.keys(tools).length === 0) {
|
|
296
|
+
delete config.tools;
|
|
297
|
+
}
|
|
185
298
|
await atomicWriteConfig(configPath, JSON.stringify(config, null, 2) + '\n');
|
|
186
299
|
const indicator = enabled ? pc.green('enabled') : pc.red('disabled');
|
|
187
300
|
console.log(`${toolName}: ${indicator}`);
|
|
@@ -190,6 +303,9 @@ const handleSetTool = async (key, value, options) => {
|
|
|
190
303
|
if (registeredTools && !registeredTools.includes(toolName)) {
|
|
191
304
|
console.log(pc.yellow(`Warning: "${toolName}" does not match any registered tool. Check the name or start the server.`));
|
|
192
305
|
}
|
|
306
|
+
else if (!registeredTools) {
|
|
307
|
+
console.log(pc.dim(`Note: Could not validate tool name (server not running). Verify with: opentabs config set tool.`));
|
|
308
|
+
}
|
|
193
309
|
await notifyServer({ port: options.port, warnIfNotRunning: true });
|
|
194
310
|
};
|
|
195
311
|
const handleSetBrowserTool = async (key, value, options) => {
|
|
@@ -215,10 +331,21 @@ const handleSetBrowserTool = async (key, value, options) => {
|
|
|
215
331
|
}
|
|
216
332
|
const policy = config.browserToolPolicy;
|
|
217
333
|
const enabled = value === 'enabled';
|
|
218
|
-
policy
|
|
334
|
+
applyPolicyEntry(policy, toolName, enabled);
|
|
335
|
+
if (Object.keys(policy).length === 0) {
|
|
336
|
+
delete config.browserToolPolicy;
|
|
337
|
+
}
|
|
219
338
|
await atomicWriteConfig(configPath, JSON.stringify(config, null, 2) + '\n');
|
|
220
339
|
const indicator = enabled ? pc.green('enabled') : pc.red('disabled');
|
|
221
340
|
console.log(`${toolName}: ${indicator}`);
|
|
341
|
+
const port = resolvePort(options);
|
|
342
|
+
const registeredBrowserTools = await fetchBrowserToolNames(port);
|
|
343
|
+
if (registeredBrowserTools && !registeredBrowserTools.includes(toolName)) {
|
|
344
|
+
console.log(pc.yellow(`Warning: "${toolName}" does not match any registered browser tool. Check the name or start the server.`));
|
|
345
|
+
}
|
|
346
|
+
else if (!registeredBrowserTools) {
|
|
347
|
+
console.log(pc.dim(`Note: Could not validate tool name (server not running). Verify with: opentabs config set browser-tool.`));
|
|
348
|
+
}
|
|
222
349
|
await notifyServer({ port: options.port, warnIfNotRunning: true });
|
|
223
350
|
};
|
|
224
351
|
const handleSetPort = async (value, options) => {
|
|
@@ -229,7 +356,12 @@ const handleSetPort = async (value, options) => {
|
|
|
229
356
|
process.exit(1);
|
|
230
357
|
}
|
|
231
358
|
const { config, configPath } = await loadConfig();
|
|
232
|
-
|
|
359
|
+
if (newPort === DEFAULT_PORT) {
|
|
360
|
+
delete config.port;
|
|
361
|
+
}
|
|
362
|
+
else {
|
|
363
|
+
config.port = newPort;
|
|
364
|
+
}
|
|
233
365
|
await atomicWriteConfig(configPath, JSON.stringify(config, null, 2) + '\n');
|
|
234
366
|
console.log(`port: ${pc.cyan(String(newPort))}`);
|
|
235
367
|
console.log(pc.yellow('Restart the MCP server for the port change to take effect.'));
|
|
@@ -240,14 +372,15 @@ const handleSetPort = async (value, options) => {
|
|
|
240
372
|
* Handles both absolute paths and relative paths (resolved against configDir).
|
|
241
373
|
*/
|
|
242
374
|
const resolveStoredPluginPath = (storedPath, configDir) => {
|
|
243
|
-
if (storedPath.startsWith('/'))
|
|
244
|
-
return storedPath;
|
|
245
375
|
if (storedPath.startsWith('~/'))
|
|
246
376
|
return resolve(homedir(), storedPath.slice(2));
|
|
377
|
+
if (isAbsolute(storedPath))
|
|
378
|
+
return storedPath;
|
|
247
379
|
return resolve(configDir, storedPath);
|
|
248
380
|
};
|
|
249
381
|
const handleSetLocalPluginsAdd = async (value, options) => {
|
|
250
|
-
const
|
|
382
|
+
const expandedValue = value.startsWith('~/') ? join(homedir(), value.slice(2)) : value;
|
|
383
|
+
const pluginPath = resolve(expandedValue);
|
|
251
384
|
const { config, configPath } = await loadConfig();
|
|
252
385
|
if (!Array.isArray(config.localPlugins)) {
|
|
253
386
|
config.localPlugins = [];
|
|
@@ -259,19 +392,29 @@ const handleSetLocalPluginsAdd = async (value, options) => {
|
|
|
259
392
|
console.log(`${pc.dim('Already registered:')} ${pluginPath}`);
|
|
260
393
|
return;
|
|
261
394
|
}
|
|
262
|
-
plugins.push(pluginPath);
|
|
263
|
-
await atomicWriteConfig(configPath, JSON.stringify(config, null, 2) + '\n');
|
|
264
|
-
console.log(`${pc.green('Added:')} ${pluginPath}`);
|
|
265
395
|
if (!existsSync(pluginPath)) {
|
|
396
|
+
if (!options.force) {
|
|
397
|
+
console.error(pc.red(`Error: Path does not exist: ${pluginPath}`));
|
|
398
|
+
process.exit(1);
|
|
399
|
+
}
|
|
400
|
+
plugins.push(pluginPath);
|
|
401
|
+
await atomicWriteConfig(configPath, JSON.stringify(config, null, 2) + '\n');
|
|
402
|
+
console.log(`${pc.green('Added:')} ${pluginPath}`);
|
|
266
403
|
console.log(pc.yellow(`Warning: Path does not exist: ${pluginPath}`));
|
|
267
404
|
}
|
|
268
|
-
else
|
|
269
|
-
|
|
405
|
+
else {
|
|
406
|
+
plugins.push(pluginPath);
|
|
407
|
+
await atomicWriteConfig(configPath, JSON.stringify(config, null, 2) + '\n');
|
|
408
|
+
console.log(`${pc.green('Added:')} ${pluginPath}`);
|
|
409
|
+
if (!existsSync(join(pluginPath, 'package.json'))) {
|
|
410
|
+
console.log(pc.yellow(`Warning: No package.json found at ${pluginPath}. Plugin may not load.`));
|
|
411
|
+
}
|
|
270
412
|
}
|
|
271
413
|
await notifyServer({ port: options.port, warnIfNotRunning: true });
|
|
272
414
|
};
|
|
273
415
|
const handleSetLocalPluginsRemove = async (value, options) => {
|
|
274
|
-
const
|
|
416
|
+
const expandedValue = value.startsWith('~/') ? join(homedir(), value.slice(2)) : value;
|
|
417
|
+
const pluginPath = resolve(expandedValue);
|
|
275
418
|
const { config, configPath } = await loadConfig();
|
|
276
419
|
if (!Array.isArray(config.localPlugins)) {
|
|
277
420
|
console.error(pc.red(`Path not found in localPlugins: ${pluginPath}`));
|
|
@@ -381,7 +524,7 @@ const handleConfigReset = async (options) => {
|
|
|
381
524
|
*/
|
|
382
525
|
const writeAuthFile = async (secret) => {
|
|
383
526
|
const extensionDir = getExtensionDir();
|
|
384
|
-
await mkdir(extensionDir, { recursive: true });
|
|
527
|
+
await mkdir(extensionDir, { recursive: true, mode: 0o700 });
|
|
385
528
|
const authPath = join(extensionDir, 'auth.json');
|
|
386
529
|
await atomicWrite(authPath, JSON.stringify({ secret }) + '\n', 0o600);
|
|
387
530
|
};
|
|
@@ -401,7 +544,9 @@ const handleRotateSecret = async (options) => {
|
|
|
401
544
|
await writeAuthFile(newSecret);
|
|
402
545
|
}
|
|
403
546
|
catch (err) {
|
|
404
|
-
console.
|
|
547
|
+
console.error(pc.red(`Failed to write auth.json: ${toErrorMessage(err)}`));
|
|
548
|
+
console.error('Secret was NOT rotated.');
|
|
549
|
+
process.exit(1);
|
|
405
550
|
}
|
|
406
551
|
// Notify the running server using the OLD secret so it reloads with the new one
|
|
407
552
|
if (oldSecret) {
|
|
@@ -446,15 +591,17 @@ const registerConfigCommand = (program) => {
|
|
|
446
591
|
configCmd
|
|
447
592
|
.command('set <key> [value]')
|
|
448
593
|
.description('Set a config value')
|
|
594
|
+
.option('-f, --force', 'Force localPlugins.add even if the path does not exist yet')
|
|
449
595
|
.addHelpText('after', `
|
|
450
596
|
Examples:
|
|
451
597
|
$ opentabs config set tool. List available tools
|
|
452
598
|
$ opentabs config set tool.slack_send_message disabled
|
|
453
599
|
$ opentabs config set tool.slack_send_message enabled
|
|
454
|
-
$ opentabs config set browser-tool.
|
|
600
|
+
$ opentabs config set browser-tool.browser_execute_script disabled
|
|
455
601
|
$ opentabs config set browser-tool.browser_execute_script enabled
|
|
456
602
|
$ opentabs config set port 9515
|
|
457
603
|
$ opentabs config set localPlugins.add /path/to/plugin
|
|
604
|
+
$ opentabs config set localPlugins.add /future/path --force
|
|
458
605
|
$ opentabs config set localPlugins.remove /path/to/plugin`)
|
|
459
606
|
.action((key, value, _options, command) => handleConfigSet(key, value, command.optsWithGlobals()));
|
|
460
607
|
configCmd
|
|
@@ -469,7 +616,7 @@ Examples:
|
|
|
469
616
|
.alias('get')
|
|
470
617
|
.description('Show config contents')
|
|
471
618
|
.option('--json', 'Output config as JSON')
|
|
472
|
-
.option('--show-secret', 'Display the full authentication secret')
|
|
619
|
+
.option('--show-secret', 'Display the full authentication secret and MCP client configurations')
|
|
473
620
|
.addHelpText('after', `
|
|
474
621
|
Examples:
|
|
475
622
|
$ opentabs config show
|
|
@@ -496,5 +643,5 @@ Examples:
|
|
|
496
643
|
$ opentabs config rotate-secret --confirm`)
|
|
497
644
|
.action((options, command) => handleRotateSecret({ ...options, ...command.optsWithGlobals() }));
|
|
498
645
|
};
|
|
499
|
-
export { registerConfigCommand };
|
|
646
|
+
export { registerConfigCommand, maskSecret, resolveStoredPluginPath, levenshtein, suggestKey, KNOWN_KEYS, applyPolicyEntry, handleSetLocalPluginsAdd, };
|
|
500
647
|
//# sourceMappingURL=config.js.map
|