@opentabs-dev/cli 0.0.16 → 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.
- package/dist/cli.js +5 -1
- package/dist/cli.js.map +1 -1
- package/dist/commands/audit.d.ts +11 -0
- package/dist/commands/audit.d.ts.map +1 -0
- package/dist/commands/audit.js +229 -0
- package/dist/commands/audit.js.map +1 -0
- package/dist/commands/config.d.ts.map +1 -1
- package/dist/commands/config.js +308 -18
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/doctor.d.ts +7 -1
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +63 -8
- package/dist/commands/doctor.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/plugin.d.ts +1 -1
- package/dist/commands/plugin.d.ts.map +1 -1
- package/dist/commands/plugin.js +377 -5
- package/dist/commands/plugin.js.map +1 -1
- package/dist/commands/start.d.ts.map +1 -1
- package/dist/commands/start.js +20 -4
- package/dist/commands/start.js.map +1 -1
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +25 -4
- package/dist/commands/status.js.map +1 -1
- package/dist/config.d.ts +13 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +17 -8
- package/dist/config.js.map +1 -1
- package/dist/parse-port.d.ts.map +1 -1
- package/dist/parse-port.js +2 -0
- package/dist/parse-port.js.map +1 -1
- package/dist/scaffold.d.ts +14 -2
- package/dist/scaffold.d.ts.map +1 -1
- package/dist/scaffold.js +86 -8
- package/dist/scaffold.js.map +1 -1
- 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":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,mBAAmB,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC5F,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AACjD,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAsBjC,MAAM,UAAU,GAAG,CAAC,KAAa,EAAU,EAAE;IAC3C,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IACxB,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QAClC,MAAM,IAAI,oBAAoB,CAAC,6BAA6B,CAAC,CAAC;IAChE,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,IAAI,GAAG,CAAiB;IAC7C,CAAC,GAAG,EAAE,KAAK,CAAC;IACZ,CAAC,GAAG,EAAE,MAAM,CAAC;IACb,CAAC,GAAG,EAAE,SAAS,CAAC;IAChB,CAAC,GAAG,EAAE,UAAU,CAAC;CAClB,CAAC,CAAC;AAEH,MAAM,aAAa,GAAG,CAAC,KAAa,EAAU,EAAE;IAC9C,MAAM,KAAK,GAAG,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC5C,MAAM,IAAI,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACnE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACtC,MAAM,IAAI,oBAAoB,CAAC,iEAAiE,CAAC,CAAC;IACpG,CAAC;IACD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;AACjC,CAAC,CAAC;AAEF,MAAM,eAAe,GAAG,CAAC,GAAW,EAAU,EAAE;IAC9C,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC;IAC3B,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;IACvB,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACvD,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAC3D,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAC3D,MAAM,IAAI,GAAG,GAAG,KAAK,IAAI,OAAO,IAAI,OAAO,EAAE,CAAC;IAE9C,4BAA4B;IAC5B,IACE,IAAI,CAAC,WAAW,EAAE,KAAK,GAAG,CAAC,WAAW,EAAE;QACxC,IAAI,CAAC,QAAQ,EAAE,KAAK,GAAG,CAAC,QAAQ,EAAE;QAClC,IAAI,CAAC,OAAO,EAAE,KAAK,GAAG,CAAC,OAAO,EAAE,EAChC,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,+BAA+B;IAC/B,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAC3D,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACpD,OAAO,GAAG,KAAK,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;AACnC,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,CAAC,EAAU,EAAU,EAAE;IAC5C,IAAI,EAAE,GAAG,IAAI;QAAE,OAAO,GAAG,EAAE,IAAI,CAAC;IAChC,OAAO,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;AACtC,CAAC,CAAC;AAEF;;;GAGG;AACH,MAAM,mBAAmB,GAAG,KAAK,EAAE,OAAqB,EAAiB,EAAE;IACzE,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC;IAClC,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,EAAE,EAAE,WAAW,CAAC,CAAC;IAEpD,IAAI,OAAO,GAAkB,IAAI,CAAC;IAClC,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QAClB,OAAO,GAAG,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACzC,CAAC;IAED,MAAM,SAAS,GAAG,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACtC,IAAI,CAAC,CAAC,MAAM,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC;QAChC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,6BAA6B,GAAG,SAAS,CAAC,CAAC,CAAC;QAC/D,OAAO;IACT,CAAC;IAED,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC,IAAI,EAAE,CAAC;IACnC,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAErE,IAAI,OAAO,GAAiB,EAAE,CAAC;IAC/B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC;YACH,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAe,CAAC,CAAC;QAC/C,CAAC;QAAC,MAAM,CAAC;YACP,uBAAuB;QACzB,CAAC;IACH,CAAC;IAED,0DAA0D;IAC1D,OAAO,CAAC,OAAO,EAAE,CAAC;IAElB,gBAAgB;IAChB,IAAI,OAAO,CAAC,MAAM;QAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAC/E,IAAI,OAAO,CAAC,IAAI;QAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACzE,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QACrB,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC;QACpC,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,IAAI,MAAM,CAAC,CAAC;IAC3E,CAAC;IAED,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IAElC,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC9C,OAAO;IACT,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC,CAAC;QAC/C,OAAO;IACT,CAAC;IAED,4CAA4C;IAC5C,MAAM,OAAO,GAAG,EAAE,CAAC;IACnB,MAAM,OAAO,GAAG,EAAE,CAAC;IACnB,MAAM,SAAS,GAAG,CAAC,CAAC;IACpB,MAAM,WAAW,GAAG,EAAE,CAAC;IAEvB,OAAO,CAAC,GAAG,CACT,EAAE,CAAC,IAAI,CACL,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CAC/G,CACF,CAAC;IACF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,GAAG,OAAO,GAAG,SAAS,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;IAE7E,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,MAAM,IAAI,GAAG,eAAe,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC9D,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACxC,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC/D,MAAM,MAAM,GAAG,UAAU,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC;QACnE,MAAM,QAAQ,GAAG,cAAc,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QACtE,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,GAAG,MAAM,GAAG,QAAQ,EAAE,CAAC,CAAC;IACpD,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,WAAW,GAAG,KAAK,EAAE,OAAqB,EAAiB,EAAE;IACjE,gEAAgE;IAChE,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,OAAO,mBAAmB,CAAC,OAAO,CAAC,CAAC;IACtC,CAAC;IAED,MAAM,IAAI,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;IAClC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC;IAElC,iDAAiD;IACjD,IAAI,OAAO,GAAkB,IAAI,CAAC;IAClC,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QAClB,OAAO,GAAG,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACzC,CAAC;IAED,0BAA0B;IAC1B,MAAM,UAAU,GAAG,aAAa,EAAE,CAAC;IACnC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,CAAC;IAChD,MAAM,MAAM,GAAG,MAAM,IAAI,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;IAElF,wEAAwE;IACxE,mCAAmC;IACnC,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,oBAAoB,IAAI,QAAQ,CAAC,CAAC;IACtD,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;IACtE,IAAI,OAAO,CAAC,MAAM;QAAE,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IACnE,IAAI,OAAO,CAAC,IAAI;QAAE,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IAE7D,IAAI,CAAC;QACH,MAAM,OAAO,GAA2B,EAAE,CAAC;QAC3C,IAAI,MAAM;YAAE,OAAO,CAAC,eAAe,CAAC,GAAG,UAAU,MAAM,EAAE,CAAC;QAE1D,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE;YACtC,OAAO;YACP,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC;SACnC,CAAC,CAAC;QAEH,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YACvB,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC,CAAC;YAChD,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,6DAA6D,CAAC,CAAC,CAAC;YACrF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,mCAAmC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YACxE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,IAAI,OAAO,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAiB,CAAC;QAEjD,6BAA6B;QAC7B,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;YACrB,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC;YACpC,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,IAAI,MAAM,CAAC,CAAC;QAC3E,CAAC;QAED,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YAC9C,OAAO;QACT,CAAC;QAED,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC,CAAC;YAC/C,OAAO;QACT,CAAC;QAED,eAAe;QACf,MAAM,OAAO,GAAG,EAAE,CAAC;QACnB,MAAM,OAAO,GAAG,EAAE,CAAC;QACnB,MAAM,SAAS,GAAG,CAAC,CAAC;QACpB,MAAM,WAAW,GAAG,EAAE,CAAC;QAEvB,OAAO,CAAC,GAAG,CACT,EAAE,CAAC,IAAI,CACL,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CAC/G,CACF,CAAC;QACF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,GAAG,OAAO,GAAG,SAAS,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;QAE7E,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,MAAM,IAAI,GAAG,eAAe,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YAC9D,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YACxC,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC/D,MAAM,MAAM,GAAG,UAAU,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC;YACnE,MAAM,QAAQ,GAAG,cAAc,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;YACtE,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,GAAG,MAAM,GAAG,QAAQ,EAAE,CAAC,CAAC;QACpD,CAAC;IACH,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,MAAM,SAAS,GAAG,gCAAgC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QAE3F,IAAI,mBAAmB,CAAC,GAAG,CAAC,EAAE,CAAC;YAC7B,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC,CAAC;YACpD,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;QACnC,CAAC;aAAM,CAAC;YACN,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACjE,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,UAAU,OAAO,EAAE,CAAC,CAAC,CAAC;YAC3C,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;QACnC,CAAC;QAED,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,oBAAoB,GAAG,CAAC,OAAgB,EAAQ,EAAE;IACtD,OAAO;SACJ,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,qCAAqC,CAAC;SAClD,MAAM,CAAC,kBAAkB,EAAE,yCAAyC,EAAE,UAAU,CAAC;SACjF,MAAM,CAAC,iBAAiB,EAAE,uBAAuB,CAAC;SAClD,MAAM,CAAC,eAAe,EAAE,qBAAqB,CAAC;SAC9C,MAAM,CAAC,oBAAoB,EAAE,yDAAyD,CAAC;SACvF,MAAM,CAAC,QAAQ,EAAE,yCAAyC,CAAC;SAC3D,MAAM,CAAC,QAAQ,EAAE,qFAAqF,CAAC;SACvG,WAAW,CACV,OAAO,EACP;;;;;;;;;;oDAU8C,CAC/C;SACA,MAAM,CAAC,CAAC,QAAsB,EAAE,OAAgB,EAAE,EAAE,CAAC,WAAW,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC;AAClG,CAAC,CAAC;AAEF,OAAO,EAAE,oBAAoB,EAAE,CAAC"}
|
|
@@ -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;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"}
|