@opentabs-dev/cli 0.0.15 → 0.0.17

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 (39) hide show
  1. package/dist/cli.js +5 -1
  2. package/dist/cli.js.map +1 -1
  3. package/dist/commands/audit.d.ts +11 -0
  4. package/dist/commands/audit.d.ts.map +1 -0
  5. package/dist/commands/audit.js +229 -0
  6. package/dist/commands/audit.js.map +1 -0
  7. package/dist/commands/config.d.ts.map +1 -1
  8. package/dist/commands/config.js +308 -18
  9. package/dist/commands/config.js.map +1 -1
  10. package/dist/commands/doctor.d.ts +7 -1
  11. package/dist/commands/doctor.d.ts.map +1 -1
  12. package/dist/commands/doctor.js +63 -8
  13. package/dist/commands/doctor.js.map +1 -1
  14. package/dist/commands/index.d.ts +1 -0
  15. package/dist/commands/index.d.ts.map +1 -1
  16. package/dist/commands/index.js +1 -0
  17. package/dist/commands/index.js.map +1 -1
  18. package/dist/commands/plugin.d.ts +1 -1
  19. package/dist/commands/plugin.d.ts.map +1 -1
  20. package/dist/commands/plugin.js +377 -5
  21. package/dist/commands/plugin.js.map +1 -1
  22. package/dist/commands/start.d.ts.map +1 -1
  23. package/dist/commands/start.js +20 -4
  24. package/dist/commands/start.js.map +1 -1
  25. package/dist/commands/status.d.ts.map +1 -1
  26. package/dist/commands/status.js +25 -4
  27. package/dist/commands/status.js.map +1 -1
  28. package/dist/config.d.ts +13 -1
  29. package/dist/config.d.ts.map +1 -1
  30. package/dist/config.js +17 -8
  31. package/dist/config.js.map +1 -1
  32. package/dist/parse-port.d.ts.map +1 -1
  33. package/dist/parse-port.js +2 -0
  34. package/dist/parse-port.js.map +1 -1
  35. package/dist/scaffold.d.ts +14 -2
  36. package/dist/scaffold.d.ts.map +1 -1
  37. package/dist/scaffold.js +86 -8
  38. package/dist/scaffold.js.map +1 -1
  39. package/package.json +4 -4
package/dist/cli.js CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env bun
2
- import { registerConfigCommand, registerDoctorCommand, registerLogsCommand, registerPluginCommand, registerStartCommand, registerStatusCommand, } from './commands/index.js';
2
+ import { registerAuditCommand, registerConfigCommand, registerDoctorCommand, registerLogsCommand, registerPluginCommand, registerStartCommand, registerStatusCommand, } 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';
@@ -10,11 +10,15 @@ const program = new Command('opentabs')
10
10
  .version(pkgJson.version, '-V, --version')
11
11
  .description('OpenTabs — manage your MCP server and plugins')
12
12
  .option('--port <number>', 'MCP server port (env: OPENTABS_PORT, default: 9515)', parsePort)
13
+ .addHelpText('after', `\nEnvironment:
14
+ OPENTABS_PORT MCP server port (overridden by --port)
15
+ OPENTABS_CONFIG_DIR Config directory (default: ~/.opentabs)`)
13
16
  .action(() => {
14
17
  program.help();
15
18
  });
16
19
  registerStartCommand(program);
17
20
  registerStatusCommand(program);
21
+ registerAuditCommand(program);
18
22
  registerDoctorCommand(program);
19
23
  registerLogsCommand(program);
20
24
  registerPluginCommand(program);
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA,OAAO,EACL,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,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,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,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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * `opentabs audit` command — shows recent tool invocation history.
3
+ *
4
+ * By default, queries the running MCP server's in-memory audit buffer.
5
+ * With --file, reads from the persistent disk log (~/.opentabs/audit.log)
6
+ * for post-restart forensics.
7
+ */
8
+ import type { Command } from 'commander';
9
+ declare const registerAuditCommand: (program: Command) => void;
10
+ export { registerAuditCommand };
11
+ //# sourceMappingURL=audit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit.d.ts","sourceRoot":"","sources":["../../src/commands/audit.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAOH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA4PzC,QAAA,MAAM,oBAAoB,GAAI,SAAS,OAAO,KAAG,IAyBhD,CAAC;AAEF,OAAO,EAAE,oBAAoB,EAAE,CAAC"}
@@ -0,0 +1,229 @@
1
+ /**
2
+ * `opentabs audit` command — shows recent tool invocation history.
3
+ *
4
+ * By default, queries the running MCP server's in-memory audit buffer.
5
+ * With --file, reads from the persistent disk log (~/.opentabs/audit.log)
6
+ * for post-restart forensics.
7
+ */
8
+ import { getConfigDir, getConfigPath, isConnectionRefused, readConfig } from '../config.js';
9
+ import { resolvePort } from '../parse-port.js';
10
+ import { InvalidArgumentError } from 'commander';
11
+ import pc from 'picocolors';
12
+ import { join } from 'node:path';
13
+ const parseLimit = (value) => {
14
+ const n = Number(value);
15
+ if (!Number.isInteger(n) || n < 1) {
16
+ throw new InvalidArgumentError('Must be a positive integer.');
17
+ }
18
+ return n;
19
+ };
20
+ const DURATION_UNITS = new Map([
21
+ ['s', 1_000],
22
+ ['m', 60_000],
23
+ ['h', 3_600_000],
24
+ ['d', 86_400_000],
25
+ ]);
26
+ const parseDuration = (value) => {
27
+ const match = /^(\d+)([smhd])$/.exec(value);
28
+ const unit = match?.[2] ? DURATION_UNITS.get(match[2]) : undefined;
29
+ if (!match?.[1] || unit === undefined) {
30
+ throw new InvalidArgumentError('Must be a number followed by s, m, h, or d (e.g., 30m, 1h, 2d).');
31
+ }
32
+ return Number(match[1]) * unit;
33
+ };
34
+ const formatTimestamp = (iso) => {
35
+ const date = new Date(iso);
36
+ const now = new Date();
37
+ const hours = String(date.getHours()).padStart(2, '0');
38
+ const minutes = String(date.getMinutes()).padStart(2, '0');
39
+ const seconds = String(date.getSeconds()).padStart(2, '0');
40
+ const time = `${hours}:${minutes}:${seconds}`;
41
+ // Same day — show time only
42
+ if (date.getFullYear() === now.getFullYear() &&
43
+ date.getMonth() === now.getMonth() &&
44
+ date.getDate() === now.getDate()) {
45
+ return time;
46
+ }
47
+ // Different day — include date
48
+ const month = String(date.getMonth() + 1).padStart(2, '0');
49
+ const day = String(date.getDate()).padStart(2, '0');
50
+ return `${month}-${day} ${time}`;
51
+ };
52
+ const formatDuration = (ms) => {
53
+ if (ms < 1000)
54
+ return `${ms}ms`;
55
+ return `${(ms / 1000).toFixed(1)}s`;
56
+ };
57
+ /**
58
+ * Read audit entries from the persistent disk log (~/.opentabs/audit.log).
59
+ * Parses NDJSON (one JSON object per line), applies the same filters as the server mode.
60
+ */
61
+ const handleAuditFromFile = async (options) => {
62
+ const limit = options.limit ?? 20;
63
+ const auditPath = join(getConfigDir(), 'audit.log');
64
+ let sinceMs = null;
65
+ if (options.since) {
66
+ sinceMs = parseDuration(options.since);
67
+ }
68
+ const auditFile = Bun.file(auditPath);
69
+ if (!(await auditFile.exists())) {
70
+ console.log(pc.dim('No audit log file found at ' + auditPath));
71
+ return;
72
+ }
73
+ const raw = await auditFile.text();
74
+ const lines = raw.split('\n').filter(line => line.trim().length > 0);
75
+ let entries = [];
76
+ for (const line of lines) {
77
+ try {
78
+ entries.push(JSON.parse(line));
79
+ }
80
+ catch {
81
+ // Skip malformed lines
82
+ }
83
+ }
84
+ // Reverse to show newest first (matching server behavior)
85
+ entries.reverse();
86
+ // Apply filters
87
+ if (options.plugin)
88
+ entries = entries.filter(e => e.plugin === options.plugin);
89
+ if (options.tool)
90
+ entries = entries.filter(e => e.tool === options.tool);
91
+ if (sinceMs !== null) {
92
+ const cutoff = Date.now() - sinceMs;
93
+ entries = entries.filter(e => new Date(e.timestamp).getTime() >= cutoff);
94
+ }
95
+ entries = entries.slice(0, limit);
96
+ if (options.json) {
97
+ console.log(JSON.stringify(entries, null, 2));
98
+ return;
99
+ }
100
+ if (entries.length === 0) {
101
+ console.log(pc.dim('No audit entries found.'));
102
+ return;
103
+ }
104
+ // Table output (same format as server mode)
105
+ const timeCol = 15;
106
+ const toolCol = 30;
107
+ const statusCol = 4;
108
+ const durationCol = 10;
109
+ console.log(pc.bold(`${'Time'.padEnd(timeCol)}${'Tool'.padEnd(toolCol)}${'OK'.padEnd(statusCol)}${'Duration'.padEnd(durationCol)}`));
110
+ console.log(pc.dim('─'.repeat(timeCol + toolCol + statusCol + durationCol)));
111
+ for (const entry of entries) {
112
+ const time = formatTimestamp(entry.timestamp).padEnd(timeCol);
113
+ const tool = entry.tool.padEnd(toolCol);
114
+ const statusIcon = entry.success ? pc.green('✓') : pc.red('✗');
115
+ const status = statusIcon + ' '.repeat(Math.max(0, statusCol - 1));
116
+ const duration = formatDuration(entry.durationMs).padEnd(durationCol);
117
+ console.log(`${time}${tool}${status}${duration}`);
118
+ }
119
+ };
120
+ const handleAudit = async (options) => {
121
+ // --file mode reads from disk log instead of the running server
122
+ if (options.file) {
123
+ return handleAuditFromFile(options);
124
+ }
125
+ const port = resolvePort(options);
126
+ const limit = options.limit ?? 20;
127
+ // Parse --since duration (client-side filtering)
128
+ let sinceMs = null;
129
+ if (options.since) {
130
+ sinceMs = parseDuration(options.since);
131
+ }
132
+ // Read secret from config
133
+ const configPath = getConfigPath();
134
+ const { config } = await readConfig(configPath);
135
+ const secret = config && typeof config.secret === 'string' ? config.secret : null;
136
+ // Build URL — request more entries from the server when --since is used
137
+ // so we have enough to filter from
138
+ const url = new URL(`http://localhost:${port}/audit`);
139
+ url.searchParams.set('limit', String(sinceMs !== null ? 500 : limit));
140
+ if (options.plugin)
141
+ url.searchParams.set('plugin', options.plugin);
142
+ if (options.tool)
143
+ url.searchParams.set('tool', options.tool);
144
+ try {
145
+ const headers = {};
146
+ if (secret)
147
+ headers['Authorization'] = `Bearer ${secret}`;
148
+ const res = await fetch(url.toString(), {
149
+ headers,
150
+ signal: AbortSignal.timeout(3_000),
151
+ });
152
+ if (res.status === 401) {
153
+ console.error(pc.red('Authentication failed.'));
154
+ console.error(pc.dim('Is the server secret correct? Check ~/.opentabs/config.json'));
155
+ process.exit(1);
156
+ }
157
+ if (!res.ok) {
158
+ console.error(pc.red(`Error: MCP server returned HTTP ${res.status}.`));
159
+ process.exit(1);
160
+ }
161
+ let entries = (await res.json());
162
+ // Client-side time filtering
163
+ if (sinceMs !== null) {
164
+ const cutoff = Date.now() - sinceMs;
165
+ entries = entries.filter(e => new Date(e.timestamp).getTime() >= cutoff);
166
+ }
167
+ if (options.json) {
168
+ console.log(JSON.stringify(entries, null, 2));
169
+ return;
170
+ }
171
+ if (entries.length === 0) {
172
+ console.log(pc.dim('No audit entries found.'));
173
+ return;
174
+ }
175
+ // Table output
176
+ const timeCol = 15;
177
+ const toolCol = 30;
178
+ const statusCol = 4;
179
+ const durationCol = 10;
180
+ console.log(pc.bold(`${'Time'.padEnd(timeCol)}${'Tool'.padEnd(toolCol)}${'OK'.padEnd(statusCol)}${'Duration'.padEnd(durationCol)}`));
181
+ console.log(pc.dim('─'.repeat(timeCol + toolCol + statusCol + durationCol)));
182
+ for (const entry of entries) {
183
+ const time = formatTimestamp(entry.timestamp).padEnd(timeCol);
184
+ const tool = entry.tool.padEnd(toolCol);
185
+ const statusIcon = entry.success ? pc.green('✓') : pc.red('✗');
186
+ const status = statusIcon + ' '.repeat(Math.max(0, statusCol - 1));
187
+ const duration = formatDuration(entry.durationMs).padEnd(durationCol);
188
+ console.log(`${time}${tool}${status}${duration}`);
189
+ }
190
+ }
191
+ catch (err) {
192
+ const startHint = `Start it with: opentabs start${port !== 9515 ? ` --port ${port}` : ''}`;
193
+ if (isConnectionRefused(err)) {
194
+ console.error(pc.red('MCP server is not running.'));
195
+ console.error(pc.dim(startHint));
196
+ }
197
+ else {
198
+ const message = err instanceof Error ? err.message : String(err);
199
+ console.error(pc.red(`Error: ${message}`));
200
+ console.error(pc.dim(startHint));
201
+ }
202
+ process.exit(1);
203
+ }
204
+ };
205
+ const registerAuditCommand = (program) => {
206
+ program
207
+ .command('audit')
208
+ .description('Show recent tool invocation history')
209
+ .option('--limit <number>', 'Number of entries to show (default: 20)', parseLimit)
210
+ .option('--plugin <name>', 'Filter by plugin name')
211
+ .option('--tool <name>', 'Filter by tool name')
212
+ .option('--since <duration>', 'Show entries from the last duration (e.g., 30m, 1h, 2d)')
213
+ .option('--json', 'Output raw JSON from the audit endpoint')
214
+ .option('--file', 'Read from persistent disk log (~/.opentabs/audit.log) instead of the running server')
215
+ .addHelpText('after', `
216
+ Examples:
217
+ $ opentabs audit
218
+ $ opentabs audit --limit 50
219
+ $ opentabs audit --plugin slack
220
+ $ opentabs audit --tool slack_send_message
221
+ $ opentabs audit --since 1h
222
+ $ opentabs audit --since 30m --plugin slack
223
+ $ opentabs audit --json
224
+ $ opentabs audit --file
225
+ $ opentabs audit --file --since 1h --plugin slack`)
226
+ .action((_options, command) => handleAudit(command.optsWithGlobals()));
227
+ };
228
+ export { registerAuditCommand };
229
+ //# sourceMappingURL=audit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit.js","sourceRoot":"","sources":["../../src/commands/audit.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAkHzC,QAAA,MAAM,qBAAqB,GAAI,SAAS,OAAO,KAAG,IA2CjD,CAAC;AAEF,OAAO,EAAE,qBAAqB,EAAE,CAAC"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAuazC,QAAA,MAAM,qBAAqB,GAAI,SAAS,OAAO,KAAG,IA2EjD,CAAC;AAEF,OAAO,EAAE,qBAAqB,EAAE,CAAC"}