@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.
Files changed (48) hide show
  1. package/dist/cli.js +17 -3
  2. package/dist/cli.js.map +1 -1
  3. package/dist/commands/audit.d.ts +5 -1
  4. package/dist/commands/audit.d.ts.map +1 -1
  5. package/dist/commands/audit.js +9 -5
  6. package/dist/commands/audit.js.map +1 -1
  7. package/dist/commands/config.d.ts +21 -1
  8. package/dist/commands/config.d.ts.map +1 -1
  9. package/dist/commands/config.js +168 -21
  10. package/dist/commands/config.js.map +1 -1
  11. package/dist/commands/doctor.d.ts +9 -2
  12. package/dist/commands/doctor.d.ts.map +1 -1
  13. package/dist/commands/doctor.js +68 -24
  14. package/dist/commands/doctor.js.map +1 -1
  15. package/dist/commands/index.d.ts +2 -1
  16. package/dist/commands/index.d.ts.map +1 -1
  17. package/dist/commands/index.js +2 -1
  18. package/dist/commands/index.js.map +1 -1
  19. package/dist/commands/logs.d.ts +10 -1
  20. package/dist/commands/logs.d.ts.map +1 -1
  21. package/dist/commands/logs.js +22 -3
  22. package/dist/commands/logs.js.map +1 -1
  23. package/dist/commands/plugin.d.ts +57 -9
  24. package/dist/commands/plugin.d.ts.map +1 -1
  25. package/dist/commands/plugin.js +74 -32
  26. package/dist/commands/plugin.js.map +1 -1
  27. package/dist/commands/setup.js +2 -2
  28. package/dist/commands/setup.js.map +1 -1
  29. package/dist/commands/start.d.ts +8 -1
  30. package/dist/commands/start.d.ts.map +1 -1
  31. package/dist/commands/start.js +99 -40
  32. package/dist/commands/start.js.map +1 -1
  33. package/dist/commands/status.d.ts +14 -1
  34. package/dist/commands/status.d.ts.map +1 -1
  35. package/dist/commands/status.js +115 -16
  36. package/dist/commands/status.js.map +1 -1
  37. package/dist/commands/stop.d.ts +11 -0
  38. package/dist/commands/stop.d.ts.map +1 -0
  39. package/dist/commands/stop.js +104 -0
  40. package/dist/commands/stop.js.map +1 -0
  41. package/dist/config.d.ts +8 -2
  42. package/dist/config.d.ts.map +1 -1
  43. package/dist/config.js +36 -5
  44. package/dist/config.js.map +1 -1
  45. package/dist/scaffold.d.ts.map +1 -1
  46. package/dist/scaffold.js +49 -27
  47. package/dist/scaffold.js.map +1 -1
  48. 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;AAEJ,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"}
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"}
@@ -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;AA8RzC,QAAA,MAAM,oBAAoB,GAAI,SAAS,OAAO,KAAG,IAyBhD,CAAC;AAEF,OAAO,EAAE,oBAAoB,EAAE,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"}
@@ -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 COL_TOOL = 30;
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
- console.log(pc.bold(`${'Time'.padEnd(COL_TIME)}${'Tool'.padEnd(COL_TOOL)}${'OK'.padEnd(COL_STATUS)}${'Duration'.padEnd(COL_DURATION)}`));
66
- console.log(pc.dim('─'.repeat(COL_TIME + COL_TOOL + COL_STATUS + COL_DURATION)));
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(COL_TOOL);
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;AAkBH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAggBzC,QAAA,MAAM,qBAAqB,GAAI,SAAS,OAAO,KAAG,IAmFjD,CAAC;AAEF,OAAO,EAAE,qBAAqB,EAAE,CAAC"}
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"}
@@ -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
- const output = { ...config, ...(displaySecret ? { secret: displaySecret } : {}) };
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[toolName] = enabled;
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[toolName] = enabled;
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
- config.port = newPort;
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 pluginPath = resolve(value);
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 if (!existsSync(join(pluginPath, 'package.json'))) {
269
- console.log(pc.yellow(`Warning: No package.json found at ${pluginPath}. Plugin may not load.`));
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 pluginPath = resolve(value);
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.warn(pc.yellow(`Warning: Could not write auth.json: ${toErrorMessage(err)}`));
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.execute_script disabled
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