airlock-bot 0.2.16 → 0.2.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.
@@ -0,0 +1,481 @@
1
+ import { execFileSync } from 'child_process';
2
+ import { mkdtempSync, rmSync, writeFileSync } from 'fs';
3
+ import { tmpdir } from 'os';
4
+ import { join } from 'path';
5
+ import { inferType } from './help-parser.js';
6
+ function execLines(bin, args, env) {
7
+ try {
8
+ const out = execFileSync(bin, args, {
9
+ timeout: 5000,
10
+ encoding: 'utf-8',
11
+ stdio: ['ignore', 'pipe', 'pipe'],
12
+ env: env ? { ...process.env, ...env } : process.env,
13
+ });
14
+ return out
15
+ .split('\n')
16
+ .map((line) => line.trimEnd())
17
+ .filter((line) => line.length > 0);
18
+ }
19
+ catch (err) {
20
+ if (err && typeof err === 'object' && 'stdout' in err) {
21
+ const stdout = err.stdout ?? '';
22
+ if (stdout.trim()) {
23
+ return stdout
24
+ .split('\n')
25
+ .map((line) => line.trimEnd())
26
+ .filter((line) => line.length > 0);
27
+ }
28
+ }
29
+ return null;
30
+ }
31
+ }
32
+ function getDescription(bin, subcommandPath) {
33
+ const out = execLines(bin, [...subcommandPath, '--help']);
34
+ return out?.[0]?.trim() || undefined;
35
+ }
36
+ function normalizeFlag(flag) {
37
+ return flag.replace(/[=,:]+$/, '');
38
+ }
39
+ function normalizeParamName(flag) {
40
+ return normalizeFlag(flag).replace(/^--?/, '').replace(/-/g, '_');
41
+ }
42
+ function mergeCandidates(...groups) {
43
+ const merged = new Map();
44
+ for (const group of groups) {
45
+ for (const candidate of group) {
46
+ if (!candidate.name)
47
+ continue;
48
+ const existing = merged.get(candidate.name);
49
+ if (!existing) {
50
+ merged.set(candidate.name, candidate);
51
+ continue;
52
+ }
53
+ if (!existing.description && candidate.description) {
54
+ existing.description = candidate.description;
55
+ }
56
+ if (!existing.type && candidate.type) {
57
+ existing.type = candidate.type;
58
+ }
59
+ }
60
+ }
61
+ return [...merged.values()];
62
+ }
63
+ function classifyCandidates(candidates) {
64
+ const subcommands = [];
65
+ const flags = [];
66
+ for (const candidate of candidates) {
67
+ if (!candidate.name)
68
+ continue;
69
+ if (candidate.name.startsWith('-')) {
70
+ flags.push(candidate);
71
+ continue;
72
+ }
73
+ if (candidate.type === 'file' || candidate.type === 'dir')
74
+ continue;
75
+ subcommands.push(candidate);
76
+ }
77
+ return { subcommands, flags };
78
+ }
79
+ function paramsFromFlags(flags) {
80
+ const params = {};
81
+ for (const flag of flags) {
82
+ const longFlag = normalizeFlag(flag.name);
83
+ if (/^-[A-Za-z0-9]$/.test(longFlag))
84
+ continue;
85
+ const paramName = normalizeParamName(longFlag);
86
+ const desc = flag.description ?? '';
87
+ const hasValueHint = /[=<[]/.test(flag.name) ||
88
+ /\b(value|path|file|dir|name|id|url|port|timeout|count)\b/i.test(desc);
89
+ const isBoolean = !hasValueHint &&
90
+ (longFlag.startsWith('--no-') || desc ? inferType(longFlag, desc) === 'boolean' : true);
91
+ params[paramName] = {
92
+ type: isBoolean ? 'boolean' : inferType(longFlag, desc),
93
+ flag: longFlag,
94
+ positional: false,
95
+ required: false,
96
+ description: flag.description,
97
+ };
98
+ }
99
+ return params;
100
+ }
101
+ function discoverFromProvider(tool, provider, options) {
102
+ const maxDepth = options?.maxDepth ?? 2;
103
+ const include = options?.include ? new Set(options.include) : undefined;
104
+ const exclude = options?.exclude ? new Set(options.exclude) : undefined;
105
+ const startPath = options?.startPath ?? [];
106
+ const commands = {};
107
+ const seenPaths = new Set();
108
+ function discover(path, prefix, depth) {
109
+ const neutral = provider.list(path, '') ?? [];
110
+ const dashed = provider.list(path, '-') ?? [];
111
+ const candidates = mergeCandidates(neutral, dashed);
112
+ if (candidates.length === 0)
113
+ return;
114
+ const { subcommands, flags } = classifyCandidates(candidates);
115
+ if (flags.length > 0 || subcommands.length === 0) {
116
+ const cmdName = prefix || tool;
117
+ if (!exclude?.has(cmdName) && (!include || include.has(cmdName))) {
118
+ commands[cmdName] = {
119
+ exec: [tool, ...path].join(' '),
120
+ description: provider.describe?.(path),
121
+ params: paramsFromFlags(flags),
122
+ timeout: 30,
123
+ };
124
+ }
125
+ }
126
+ if (depth >= maxDepth)
127
+ return;
128
+ for (const sub of subcommands) {
129
+ if (exclude?.has(sub.name))
130
+ continue;
131
+ const newPath = [...path, sub.name];
132
+ const key = newPath.join(' ');
133
+ if (seenPaths.has(key))
134
+ continue;
135
+ seenPaths.add(key);
136
+ const newPrefix = prefix ? `${prefix}_${sub.name}` : sub.name;
137
+ discover(newPath, newPrefix, depth + 1);
138
+ }
139
+ }
140
+ discover(startPath, startPath.join('_'), 0);
141
+ return commands;
142
+ }
143
+ function loadCommandFromProvider(tool, provider, path, name) {
144
+ const neutral = provider.list(path, '') ?? [];
145
+ const dashed = provider.list(path, '-') ?? [];
146
+ const candidates = mergeCandidates(neutral, dashed);
147
+ if (candidates.length === 0)
148
+ return null;
149
+ const { subcommands, flags } = classifyCandidates(candidates);
150
+ if (flags.length === 0 && subcommands.length > 0) {
151
+ return null;
152
+ }
153
+ return {
154
+ exec: [tool, ...path].join(' '),
155
+ description: provider.describe?.(path),
156
+ params: paramsFromFlags(flags),
157
+ timeout: 30,
158
+ };
159
+ }
160
+ function parseCobraLine(line) {
161
+ if (!line || line.startsWith(':'))
162
+ return null;
163
+ const tabIdx = line.indexOf('\t');
164
+ if (tabIdx >= 0) {
165
+ return {
166
+ name: line.slice(0, tabIdx).trim(),
167
+ description: line.slice(tabIdx + 1).trim() || undefined,
168
+ };
169
+ }
170
+ return { name: line.trim() };
171
+ }
172
+ function parseClickLine(line) {
173
+ const tabIdx = line.indexOf('\t');
174
+ const raw = tabIdx >= 0 ? line.slice(0, tabIdx) : line;
175
+ const help = tabIdx >= 0 ? line.slice(tabIdx + 1).trim() || undefined : undefined;
176
+ const commaIdx = raw.indexOf(',');
177
+ if (commaIdx < 0)
178
+ return null;
179
+ const type = raw.slice(0, commaIdx).trim();
180
+ const name = raw.slice(commaIdx + 1).trim();
181
+ if (!name)
182
+ return null;
183
+ return { name, description: help, type };
184
+ }
185
+ function parsePlainLine(line) {
186
+ if (!line)
187
+ return null;
188
+ const tabIdx = line.indexOf('\t');
189
+ if (tabIdx >= 0) {
190
+ return {
191
+ name: line.slice(0, tabIdx).trim(),
192
+ description: line.slice(tabIdx + 1).trim() || undefined,
193
+ };
194
+ }
195
+ return { name: line.trim() };
196
+ }
197
+ function toolEnvName(tool) {
198
+ const base = tool.split(/[\\/]/).pop() ?? tool;
199
+ return `_${base.replace(/-/g, '_').toUpperCase()}_COMPLETE`;
200
+ }
201
+ function runCobraComplete(tool, path, incomplete) {
202
+ const out = execLines(tool, ['__complete', ...path, incomplete]);
203
+ if (!out)
204
+ return null;
205
+ return out.map(parseCobraLine).filter((item) => item !== null);
206
+ }
207
+ function runClickComplete(tool, path, incomplete) {
208
+ const words = [tool, ...path];
209
+ let cword = words.length;
210
+ if (incomplete) {
211
+ words.push(incomplete);
212
+ cword = words.length - 1;
213
+ }
214
+ const out = execLines(tool, [], {
215
+ [toolEnvName(tool)]: 'bash_complete',
216
+ COMP_WORDS: words.join(' '),
217
+ COMP_CWORD: String(cword),
218
+ });
219
+ if (!out)
220
+ return null;
221
+ return out.map(parseClickLine).filter((item) => item !== null);
222
+ }
223
+ function runClapComplete(tool, path, incomplete) {
224
+ const words = [tool, ...path, incomplete];
225
+ const out = execLines(tool, ['--', ...words], {
226
+ COMPLETE: 'bash',
227
+ _CLAP_COMPLETE_INDEX: String(words.length - 1),
228
+ _CLAP_COMPLETE_COMP_TYPE: '9',
229
+ _CLAP_COMPLETE_SPACE: 'true',
230
+ _CLAP_IFS: '\n',
231
+ });
232
+ if (!out)
233
+ return null;
234
+ return out.map(parsePlainLine).filter((item) => item !== null);
235
+ }
236
+ function looksLikeScript(lines) {
237
+ if (!lines || lines.length === 0)
238
+ return false;
239
+ const text = lines.join('\n');
240
+ return (text.includes('complete -F') ||
241
+ text.includes('compdef ') ||
242
+ text.includes('COMPREPLY') ||
243
+ text.includes('compgen ') ||
244
+ text.includes('complete -c '));
245
+ }
246
+ const GENERATOR_ARG_CANDIDATES = [
247
+ ['completion', 'bash'],
248
+ ['completions', 'bash'],
249
+ ['completion', '--shell', 'bash'],
250
+ ['completions', '--shell', 'bash'],
251
+ ['generate-completion', 'bash'],
252
+ ['gen-completion', 'bash'],
253
+ ['shell-completion', 'bash'],
254
+ ['completion', 'script', 'bash'],
255
+ ];
256
+ function setupScriptAdapter(tool) {
257
+ for (const args of GENERATOR_ARG_CANDIDATES) {
258
+ const script = execLines(tool, args);
259
+ if (!script || !looksLikeScript(script))
260
+ continue;
261
+ const scriptText = script.join('\n');
262
+ const dir = mkdtempSync(join(tmpdir(), 'airlock-completion-'));
263
+ const scriptPath = join(dir, `${tool.replace(/[^A-Za-z0-9_-]/g, '_')}.bash`);
264
+ writeFileSync(scriptPath, scriptText);
265
+ const completeSpec = execLines('bash', [
266
+ '-lc',
267
+ 'source "$AIRLOCK_SCRIPT" >/dev/null 2>&1 && complete -p "$AIRLOCK_TOOL" 2>/dev/null',
268
+ ], {
269
+ AIRLOCK_SCRIPT: scriptPath,
270
+ AIRLOCK_TOOL: tool,
271
+ });
272
+ const spec = completeSpec?.join('\n') ?? '';
273
+ const fnMatch = spec.match(/-F\s+(\S+)/);
274
+ if (!fnMatch) {
275
+ rmSync(dir, { recursive: true, force: true });
276
+ continue;
277
+ }
278
+ const fnName = fnMatch[1];
279
+ return {
280
+ cleanup() {
281
+ rmSync(dir, { recursive: true, force: true });
282
+ },
283
+ list(path, incomplete) {
284
+ const words = [tool, ...path, incomplete];
285
+ const line = words.filter((word) => word.length > 0).join(' ');
286
+ const prev = path[path.length - 1] ?? tool;
287
+ const out = execLines('bash', [
288
+ '-lc',
289
+ 'source "$AIRLOCK_SCRIPT" >/dev/null 2>&1 && AIRLOCK_WORDS_ARR=() && while IFS= read -r line; do AIRLOCK_WORDS_ARR+=("$line"); done <<< "$AIRLOCK_WORDS" && COMP_WORDS=("${AIRLOCK_WORDS_ARR[@]}") && COMP_CWORD="$AIRLOCK_CWORD" && COMP_LINE="$AIRLOCK_LINE" && COMP_POINT=${#COMP_LINE} && COMP_TYPE=9 && COMPREPLY=() && "$AIRLOCK_FUNC" "$AIRLOCK_TOOL" "$AIRLOCK_CUR" "$AIRLOCK_PREV" && printf "%s\n" "${COMPREPLY[@]}"',
290
+ ], {
291
+ AIRLOCK_SCRIPT: scriptPath,
292
+ AIRLOCK_TOOL: tool,
293
+ AIRLOCK_FUNC: fnName,
294
+ AIRLOCK_CWORD: String(words.length - 1),
295
+ AIRLOCK_LINE: line,
296
+ AIRLOCK_CUR: incomplete,
297
+ AIRLOCK_PREV: incomplete ? prev : (path[path.length - 1] ?? tool),
298
+ AIRLOCK_WORDS: words.join('\n'),
299
+ });
300
+ return (out?.map(parsePlainLine).filter((item) => item !== null) ??
301
+ null);
302
+ },
303
+ };
304
+ }
305
+ return null;
306
+ }
307
+ const cobraAdapter = {
308
+ id: 'cobra',
309
+ detect(tool) {
310
+ const result = runCobraComplete(tool, [], '');
311
+ return result !== null && result.length > 0;
312
+ },
313
+ createProvider(tool) {
314
+ if (!this.detect(tool))
315
+ return null;
316
+ return {
317
+ list(path, incomplete) {
318
+ return runCobraComplete(tool, path, incomplete);
319
+ },
320
+ describe(path) {
321
+ return getDescription(tool, path);
322
+ },
323
+ };
324
+ },
325
+ };
326
+ const clickAdapter = {
327
+ id: 'click',
328
+ detect(tool) {
329
+ const result = runClickComplete(tool, [], '');
330
+ return result !== null && result.length > 0;
331
+ },
332
+ createProvider(tool) {
333
+ if (!this.detect(tool))
334
+ return null;
335
+ return {
336
+ list(path, incomplete) {
337
+ return runClickComplete(tool, path, incomplete);
338
+ },
339
+ describe(path) {
340
+ return getDescription(tool, path);
341
+ },
342
+ };
343
+ },
344
+ };
345
+ const clapAdapter = {
346
+ id: 'clap',
347
+ detect(tool) {
348
+ const result = runClapComplete(tool, [], '');
349
+ return result !== null && result.length > 0;
350
+ },
351
+ createProvider(tool) {
352
+ if (!this.detect(tool))
353
+ return null;
354
+ return {
355
+ list(path, incomplete) {
356
+ return runClapComplete(tool, path, incomplete);
357
+ },
358
+ describe(path) {
359
+ return getDescription(tool, path);
360
+ },
361
+ };
362
+ },
363
+ };
364
+ const scriptAdapter = {
365
+ id: 'shell-script',
366
+ detect(tool) {
367
+ const session = setupScriptAdapter(tool);
368
+ if (!session)
369
+ return false;
370
+ session.cleanup();
371
+ return true;
372
+ },
373
+ createProvider(tool) {
374
+ const session = setupScriptAdapter(tool);
375
+ if (!session)
376
+ return null;
377
+ process.once('exit', () => session.cleanup());
378
+ return {
379
+ list(path, incomplete) {
380
+ return session.list(path, incomplete);
381
+ },
382
+ describe(path) {
383
+ return getDescription(tool, path);
384
+ },
385
+ };
386
+ },
387
+ };
388
+ const COMPLETION_ADAPTERS = [
389
+ cobraAdapter,
390
+ clickAdapter,
391
+ clapAdapter,
392
+ scriptAdapter,
393
+ ];
394
+ function createSessionWithAdapter(tool, adapter) {
395
+ const provider = adapter.createProvider(tool);
396
+ if (!provider)
397
+ return null;
398
+ let topLevelCache = null;
399
+ const pathCache = new Map();
400
+ const commandCache = new Map();
401
+ return {
402
+ adapterId: adapter.id,
403
+ listTopLevelSubcommands() {
404
+ if (topLevelCache)
405
+ return topLevelCache;
406
+ const neutral = provider.list([], '') ?? [];
407
+ const dashed = provider.list([], '-') ?? [];
408
+ const candidates = mergeCandidates(neutral, dashed);
409
+ const { subcommands } = classifyCandidates(candidates);
410
+ topLevelCache = subcommands.map((candidate) => candidate.name);
411
+ return topLevelCache;
412
+ },
413
+ loadPath(path, options) {
414
+ const key = `${path.join(' ')}|${options?.maxDepth ?? 2}`;
415
+ const cached = pathCache.get(key);
416
+ if (cached)
417
+ return cached;
418
+ const commands = discoverFromProvider(tool, provider, {
419
+ maxDepth: options?.maxDepth,
420
+ startPath: path,
421
+ });
422
+ pathCache.set(key, commands);
423
+ return commands;
424
+ },
425
+ loadCommand(path, name) {
426
+ const key = `${path.join(' ')}|${name ?? ''}`;
427
+ if (commandCache.has(key))
428
+ return commandCache.get(key) ?? null;
429
+ const command = loadCommandFromProvider(tool, provider, path, name);
430
+ commandCache.set(key, command);
431
+ return command;
432
+ },
433
+ };
434
+ }
435
+ export function createCompletionSession(tool) {
436
+ for (const adapter of COMPLETION_ADAPTERS) {
437
+ const session = createSessionWithAdapter(tool, adapter);
438
+ if (session)
439
+ return session;
440
+ }
441
+ return null;
442
+ }
443
+ export function detectCompletionSupport(tool) {
444
+ for (const adapter of COMPLETION_ADAPTERS) {
445
+ if (adapter.detect(tool))
446
+ return adapter.id;
447
+ }
448
+ return null;
449
+ }
450
+ export function discoverViaCompletion(tool, options) {
451
+ for (const adapter of COMPLETION_ADAPTERS) {
452
+ const provider = adapter.createProvider(tool);
453
+ if (!provider)
454
+ continue;
455
+ return {
456
+ adapterId: adapter.id,
457
+ commands: discoverFromProvider(tool, provider, options),
458
+ };
459
+ }
460
+ return null;
461
+ }
462
+ /**
463
+ * Dedup aliases: when multiple command names have the same exec, keep only the longest name.
464
+ * e.g. "calendar" and "cal" both exec "gog calendar" — keep "calendar".
465
+ */
466
+ export function deduplicateAliases(commands) {
467
+ const byExec = new Map();
468
+ for (const [name, cmd] of Object.entries(commands)) {
469
+ const exec = cmd.exec;
470
+ if (!byExec.has(exec))
471
+ byExec.set(exec, []);
472
+ byExec.get(exec).push(name);
473
+ }
474
+ const result = {};
475
+ for (const [exec, names] of byExec) {
476
+ const canonical = names.sort((a, b) => b.length - a.length)[0];
477
+ result[canonical] = commands[canonical];
478
+ }
479
+ return result;
480
+ }
481
+ //# sourceMappingURL=completion.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"completion.js","sourceRoot":"","sources":["../../../src/discover/strategies/completion.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AACxD,OAAO,EAAE,MAAM,EAAE,MAAM,IAAI,CAAC;AAC5B,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAmC7C,SAAS,SAAS,CAAC,GAAW,EAAE,IAAc,EAAE,GAA4B;IAC1E,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,YAAY,CAAC,GAAG,EAAE,IAAI,EAAE;YAClC,OAAO,EAAE,IAAI;YACb,QAAQ,EAAE,OAAO;YACjB,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC;YACjC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG;SACpD,CAAC,CAAC;QACH,OAAO,GAAG;aACP,KAAK,CAAC,IAAI,CAAC;aACX,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;aAC7B,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACvC,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,IAAI,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,QAAQ,IAAI,GAAG,EAAE,CAAC;YACtD,MAAM,MAAM,GAAI,GAA2B,CAAC,MAAM,IAAI,EAAE,CAAC;YACzD,IAAI,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;gBAClB,OAAO,MAAM;qBACV,KAAK,CAAC,IAAI,CAAC;qBACX,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;qBAC7B,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YACvC,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,cAAc,CAAC,GAAW,EAAE,cAAwB;IAC3D,MAAM,GAAG,GAAG,SAAS,CAAC,GAAG,EAAE,CAAC,GAAG,cAAc,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC1D,OAAO,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,SAAS,CAAC;AACvC,CAAC;AAED,SAAS,aAAa,CAAC,IAAY;IACjC,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;AACrC,CAAC;AAED,SAAS,kBAAkB,CAAC,IAAY;IACtC,OAAO,aAAa,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AACpE,CAAC;AAED,SAAS,eAAe,CAAC,GAAG,MAA+B;IACzD,MAAM,MAAM,GAAG,IAAI,GAAG,EAA+B,CAAC;IACtD,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,KAAK,MAAM,SAAS,IAAI,KAAK,EAAE,CAAC;YAC9B,IAAI,CAAC,SAAS,CAAC,IAAI;gBAAE,SAAS;YAC9B,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YAC5C,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;gBACtC,SAAS;YACX,CAAC;YACD,IAAI,CAAC,QAAQ,CAAC,WAAW,IAAI,SAAS,CAAC,WAAW,EAAE,CAAC;gBACnD,QAAQ,CAAC,WAAW,GAAG,SAAS,CAAC,WAAW,CAAC;YAC/C,CAAC;YACD,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,SAAS,CAAC,IAAI,EAAE,CAAC;gBACrC,QAAQ,CAAC,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC;YACjC,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;AAC9B,CAAC;AAED,SAAS,kBAAkB,CAAC,UAAiC;IAI3D,MAAM,WAAW,GAA0B,EAAE,CAAC;IAC9C,MAAM,KAAK,GAA0B,EAAE,CAAC;IAExC,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,IAAI,CAAC,SAAS,CAAC,IAAI;YAAE,SAAS;QAC9B,IAAI,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACnC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACtB,SAAS;QACX,CAAC;QACD,IAAI,SAAS,CAAC,IAAI,KAAK,MAAM,IAAI,SAAS,CAAC,IAAI,KAAK,KAAK;YAAE,SAAS;QACpE,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC9B,CAAC;IAED,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;AAChC,CAAC;AAED,SAAS,eAAe,CAAC,KAA4B;IACnD,MAAM,MAAM,GAAmC,EAAE,CAAC;IAElD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,QAAQ,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1C,IAAI,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC;YAAE,SAAS;QAE9C,MAAM,SAAS,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC;QAC/C,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,IAAI,EAAE,CAAC;QACpC,MAAM,YAAY,GAChB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;YACvB,2DAA2D,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzE,MAAM,SAAS,GACb,CAAC,YAAY;YACb,CAAC,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAE1F,MAAM,CAAC,SAAS,CAAC,GAAG;YAClB,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC;YACvD,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE,KAAK;YACjB,QAAQ,EAAE,KAAK;YACf,WAAW,EAAE,IAAI,CAAC,WAAW;SAC9B,CAAC;IACJ,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,oBAAoB,CAC3B,IAAY,EACZ,QAA4B,EAC5B,OAA6F;IAE7F,MAAM,QAAQ,GAAG,OAAO,EAAE,QAAQ,IAAI,CAAC,CAAC;IACxC,MAAM,OAAO,GAAG,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACxE,MAAM,OAAO,GAAG,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACxE,MAAM,SAAS,GAAG,OAAO,EAAE,SAAS,IAAI,EAAE,CAAC;IAE3C,MAAM,QAAQ,GAAuB,EAAE,CAAC;IACxC,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;IAEpC,SAAS,QAAQ,CAAC,IAAc,EAAE,MAAc,EAAE,KAAa;QAC7D,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC;QAC9C,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC;QAC9C,MAAM,UAAU,GAAG,eAAe,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACpD,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAEpC,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,GAAG,kBAAkB,CAAC,UAAU,CAAC,CAAC;QAE9D,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACjD,MAAM,OAAO,GAAG,MAAM,IAAI,IAAI,CAAC;YAC/B,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;gBACjE,QAAQ,CAAC,OAAO,CAAC,GAAG;oBAClB,IAAI,EAAE,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;oBAC/B,WAAW,EAAE,QAAQ,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC;oBACtC,MAAM,EAAE,eAAe,CAAC,KAAK,CAAC;oBAC9B,OAAO,EAAE,EAAE;iBACZ,CAAC;YACJ,CAAC;QACH,CAAC;QAED,IAAI,KAAK,IAAI,QAAQ;YAAE,OAAO;QAE9B,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;YAC9B,IAAI,OAAO,EAAE,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC;gBAAE,SAAS;YAErC,MAAM,OAAO,GAAG,CAAC,GAAG,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;YACpC,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC9B,IAAI,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC;gBAAE,SAAS;YACjC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAEnB,MAAM,SAAS,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC;YAC9D,QAAQ,CAAC,OAAO,EAAE,SAAS,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC;IAED,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5C,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,uBAAuB,CAC9B,IAAY,EACZ,QAA4B,EAC5B,IAAc,EACd,IAAa;IAEb,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC;IAC9C,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC;IAC9C,MAAM,UAAU,GAAG,eAAe,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IACpD,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAEzC,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,GAAG,kBAAkB,CAAC,UAAU,CAAC,CAAC;IAC9D,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACjD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO;QACL,IAAI,EAAE,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;QAC/B,WAAW,EAAE,QAAQ,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC;QACtC,MAAM,EAAE,eAAe,CAAC,KAAK,CAAC;QAC9B,OAAO,EAAE,EAAE;KACZ,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,IAAY;IAClC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAC/C,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAClC,IAAI,MAAM,IAAI,CAAC,EAAE,CAAC;QAChB,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE;YAClC,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,SAAS;SACxD,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;AAC/B,CAAC;AAED,SAAS,cAAc,CAAC,IAAY;IAClC,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAClC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACvD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;IAClF,MAAM,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAClC,IAAI,QAAQ,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAE9B,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC;IAC3C,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC5C,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IACvB,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AAC3C,CAAC;AAED,SAAS,cAAc,CAAC,IAAY;IAClC,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IACvB,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAClC,IAAI,MAAM,IAAI,CAAC,EAAE,CAAC;QAChB,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE;YAClC,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,SAAS;SACxD,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;AAC/B,CAAC;AAED,SAAS,WAAW,CAAC,IAAY;IAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC;IAC/C,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,WAAW,EAAE,WAAW,CAAC;AAC9D,CAAC;AAED,SAAS,gBAAgB,CACvB,IAAY,EACZ,IAAc,EACd,UAAkB;IAElB,MAAM,GAAG,GAAG,SAAS,CAAC,IAAI,EAAE,CAAC,YAAY,EAAE,GAAG,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC;IACjE,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IACtB,OAAO,GAAG,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAA+B,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;AAC9F,CAAC;AAED,SAAS,gBAAgB,CACvB,IAAY,EACZ,IAAc,EACd,UAAkB;IAElB,MAAM,KAAK,GAAG,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC;IAC9B,IAAI,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC;IACzB,IAAI,UAAU,EAAE,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACvB,KAAK,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;IAC3B,CAAC;IAED,MAAM,GAAG,GAAG,SAAS,CAAC,IAAI,EAAE,EAAE,EAAE;QAC9B,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,EAAE,eAAe;QACpC,UAAU,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;QAC3B,UAAU,EAAE,MAAM,CAAC,KAAK,CAAC;KAC1B,CAAC,CAAC;IACH,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IACtB,OAAO,GAAG,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAA+B,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;AAC9F,CAAC;AAED,SAAS,eAAe,CACtB,IAAY,EACZ,IAAc,EACd,UAAkB;IAElB,MAAM,KAAK,GAAG,CAAC,IAAI,EAAE,GAAG,IAAI,EAAE,UAAU,CAAC,CAAC;IAC1C,MAAM,GAAG,GAAG,SAAS,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,CAAC,EAAE;QAC5C,QAAQ,EAAE,MAAM;QAChB,oBAAoB,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;QAC9C,wBAAwB,EAAE,GAAG;QAC7B,oBAAoB,EAAE,MAAM;QAC5B,SAAS,EAAE,IAAI;KAChB,CAAC,CAAC;IACH,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IACtB,OAAO,GAAG,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAA+B,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;AAC9F,CAAC;AAED,SAAS,eAAe,CAAC,KAAsB;IAC7C,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAC/C,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC9B,OAAO,CACL,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC;QAC5B,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC;QACzB,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC;QAC1B,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC;QACzB,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,CAC9B,CAAC;AACJ,CAAC;AAED,MAAM,wBAAwB,GAAG;IAC/B,CAAC,YAAY,EAAE,MAAM,CAAC;IACtB,CAAC,aAAa,EAAE,MAAM,CAAC;IACvB,CAAC,YAAY,EAAE,SAAS,EAAE,MAAM,CAAC;IACjC,CAAC,aAAa,EAAE,SAAS,EAAE,MAAM,CAAC;IAClC,CAAC,qBAAqB,EAAE,MAAM,CAAC;IAC/B,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAC1B,CAAC,kBAAkB,EAAE,MAAM,CAAC;IAC5B,CAAC,YAAY,EAAE,QAAQ,EAAE,MAAM,CAAC;CACjC,CAAC;AAOF,SAAS,kBAAkB,CAAC,IAAY;IACtC,KAAK,MAAM,IAAI,IAAI,wBAAwB,EAAE,CAAC;QAC5C,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACrC,IAAI,CAAC,MAAM,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC;YAAE,SAAS;QAClD,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAErC,MAAM,GAAG,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,qBAAqB,CAAC,CAAC,CAAC;QAC/D,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;QAC7E,aAAa,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;QAEtC,MAAM,YAAY,GAAG,SAAS,CAC5B,MAAM,EACN;YACE,KAAK;YACL,qFAAqF;SACtF,EACD;YACE,cAAc,EAAE,UAAU;YAC1B,YAAY,EAAE,IAAI;SACnB,CACF,CAAC;QACF,MAAM,IAAI,GAAG,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5C,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QACzC,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YAC9C,SAAS;QACX,CAAC;QAED,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QAC1B,OAAO;YACL,OAAO;gBACL,MAAM,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YAChD,CAAC;YACD,IAAI,CAAC,IAAc,EAAE,UAAkB;gBACrC,MAAM,KAAK,GAAG,CAAC,IAAI,EAAE,GAAG,IAAI,EAAE,UAAU,CAAC,CAAC;gBAC1C,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAC/D,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC;gBAC3C,MAAM,GAAG,GAAG,SAAS,CACnB,MAAM,EACN;oBACE,KAAK;oBACL,+ZAA+Z;iBACha,EACD;oBACE,cAAc,EAAE,UAAU;oBAC1B,YAAY,EAAE,IAAI;oBAClB,YAAY,EAAE,MAAM;oBACpB,aAAa,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;oBACvC,YAAY,EAAE,IAAI;oBAClB,WAAW,EAAE,UAAU;oBACvB,YAAY,EAAE,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC;oBACjE,aAAa,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;iBAChC,CACF,CAAC;gBAEF,OAAO,CACL,GAAG,EAAE,GAAG,CAAC,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAA+B,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC;oBACrF,IAAI,CACL,CAAC;YACJ,CAAC;SACF,CAAC;IACJ,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,YAAY,GAAsB;IACtC,EAAE,EAAE,OAAO;IACX,MAAM,CAAC,IAAI;QACT,MAAM,MAAM,GAAG,gBAAgB,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QAC9C,OAAO,MAAM,KAAK,IAAI,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;IAC9C,CAAC;IACD,cAAc,CAAC,IAAI;QACjB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC;QACpC,OAAO;YACL,IAAI,CAAC,IAAI,EAAE,UAAU;gBACnB,OAAO,gBAAgB,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;YAClD,CAAC;YACD,QAAQ,CAAC,IAAI;gBACX,OAAO,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YACpC,CAAC;SACF,CAAC;IACJ,CAAC;CACF,CAAC;AAEF,MAAM,YAAY,GAAsB;IACtC,EAAE,EAAE,OAAO;IACX,MAAM,CAAC,IAAI;QACT,MAAM,MAAM,GAAG,gBAAgB,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QAC9C,OAAO,MAAM,KAAK,IAAI,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;IAC9C,CAAC;IACD,cAAc,CAAC,IAAI;QACjB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC;QACpC,OAAO;YACL,IAAI,CAAC,IAAI,EAAE,UAAU;gBACnB,OAAO,gBAAgB,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;YAClD,CAAC;YACD,QAAQ,CAAC,IAAI;gBACX,OAAO,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YACpC,CAAC;SACF,CAAC;IACJ,CAAC;CACF,CAAC;AAEF,MAAM,WAAW,GAAsB;IACrC,EAAE,EAAE,MAAM;IACV,MAAM,CAAC,IAAI;QACT,MAAM,MAAM,GAAG,eAAe,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QAC7C,OAAO,MAAM,KAAK,IAAI,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;IAC9C,CAAC;IACD,cAAc,CAAC,IAAI;QACjB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC;QACpC,OAAO;YACL,IAAI,CAAC,IAAI,EAAE,UAAU;gBACnB,OAAO,eAAe,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;YACjD,CAAC;YACD,QAAQ,CAAC,IAAI;gBACX,OAAO,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YACpC,CAAC;SACF,CAAC;IACJ,CAAC;CACF,CAAC;AAEF,MAAM,aAAa,GAAsB;IACvC,EAAE,EAAE,cAAc;IAClB,MAAM,CAAC,IAAI;QACT,MAAM,OAAO,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;QACzC,IAAI,CAAC,OAAO;YAAE,OAAO,KAAK,CAAC;QAC3B,OAAO,CAAC,OAAO,EAAE,CAAC;QAClB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,cAAc,CAAC,IAAI;QACjB,MAAM,OAAO,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;QACzC,IAAI,CAAC,OAAO;YAAE,OAAO,IAAI,CAAC;QAC1B,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;QAE9C,OAAO;YACL,IAAI,CAAC,IAAI,EAAE,UAAU;gBACnB,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;YACxC,CAAC;YACD,QAAQ,CAAC,IAAI;gBACX,OAAO,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YACpC,CAAC;SACF,CAAC;IACJ,CAAC;CACF,CAAC;AAEF,MAAM,mBAAmB,GAAwB;IAC/C,YAAY;IACZ,YAAY;IACZ,WAAW;IACX,aAAa;CACd,CAAC;AAEF,SAAS,wBAAwB,CAC/B,IAAY,EACZ,OAA0B;IAE1B,MAAM,QAAQ,GAAG,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;IAC9C,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC;IAE3B,IAAI,aAAa,GAAoB,IAAI,CAAC;IAC1C,MAAM,SAAS,GAAG,IAAI,GAAG,EAA8B,CAAC;IACxD,MAAM,YAAY,GAAG,IAAI,GAAG,EAAmC,CAAC;IAEhE,OAAO;QACL,SAAS,EAAE,OAAO,CAAC,EAAE;QACrB,uBAAuB;YACrB,IAAI,aAAa;gBAAE,OAAO,aAAa,CAAC;YACxC,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC;YAC5C,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC;YAC5C,MAAM,UAAU,GAAG,eAAe,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YACpD,MAAM,EAAE,WAAW,EAAE,GAAG,kBAAkB,CAAC,UAAU,CAAC,CAAC;YACvD,aAAa,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YAC/D,OAAO,aAAa,CAAC;QACvB,CAAC;QACD,QAAQ,CAAC,IAAI,EAAE,OAAO;YACpB,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,OAAO,EAAE,QAAQ,IAAI,CAAC,EAAE,CAAC;YAC1D,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAClC,IAAI,MAAM;gBAAE,OAAO,MAAM,CAAC;YAE1B,MAAM,QAAQ,GAAG,oBAAoB,CAAC,IAAI,EAAE,QAAQ,EAAE;gBACpD,QAAQ,EAAE,OAAO,EAAE,QAAQ;gBAC3B,SAAS,EAAE,IAAI;aAChB,CAAC,CAAC;YACH,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;YAC7B,OAAO,QAAQ,CAAC;QAClB,CAAC;QACD,WAAW,CAAC,IAAI,EAAE,IAAI;YACpB,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,EAAE,EAAE,CAAC;YAC9C,IAAI,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC;gBAAE,OAAO,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC;YAChE,MAAM,OAAO,GAAG,uBAAuB,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;YACpE,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;YAC/B,OAAO,OAAO,CAAC;QACjB,CAAC;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,IAAY;IAClD,KAAK,MAAM,OAAO,IAAI,mBAAmB,EAAE,CAAC;QAC1C,MAAM,OAAO,GAAG,wBAAwB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACxD,IAAI,OAAO;YAAE,OAAO,OAAO,CAAC;IAC9B,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,IAAY;IAClD,KAAK,MAAM,OAAO,IAAI,mBAAmB,EAAE,CAAC;QAC1C,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC;YAAE,OAAO,OAAO,CAAC,EAAE,CAAC;IAC9C,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,qBAAqB,CACnC,IAAY,EACZ,OAAuE;IAEvE,KAAK,MAAM,OAAO,IAAI,mBAAmB,EAAE,CAAC;QAC1C,MAAM,QAAQ,GAAG,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QAC9C,IAAI,CAAC,QAAQ;YAAE,SAAS;QAExB,OAAO;YACL,SAAS,EAAE,OAAO,CAAC,EAAE;YACrB,QAAQ,EAAE,oBAAoB,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC;SACxD,CAAC;IACJ,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,QAA4B;IAC7D,MAAM,MAAM,GAAG,IAAI,GAAG,EAAoB,CAAC;IAC3C,KAAK,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QACnD,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;QACtB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAC5C,MAAM,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IAED,MAAM,MAAM,GAAuB,EAAE,CAAC;IACtC,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,EAAE,CAAC;QACnC,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/D,MAAM,CAAC,SAAS,CAAC,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC;IAC1C,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
package/dist/index.js CHANGED
@@ -6,6 +6,7 @@ import { Gateway } from './gateway.js';
6
6
  import { runStdioMode } from './stdio-mode.js';
7
7
  import { runDiscover } from './discover/cli.js';
8
8
  import { runConfigureAgent } from './configure-agent/cli.js';
9
+ import { runConfigureCli } from './configure-cli/cli.js';
9
10
  import { logger } from './util/logger.js';
10
11
  // Handle subcommands before parseArgs
11
12
  const subcommand = process.argv[2];
@@ -21,6 +22,12 @@ else if (subcommand === 'configure-agent') {
21
22
  process.exit(1);
22
23
  });
23
24
  }
25
+ else if (subcommand === 'configure-cli') {
26
+ runConfigureCli(process.argv.slice(3)).catch((err) => {
27
+ console.error(err instanceof Error ? err.message : String(err));
28
+ process.exit(1);
29
+ });
30
+ }
24
31
  else {
25
32
  runGateway();
26
33
  }
@@ -41,6 +48,7 @@ airlock — permissions-aware MCP gateway
41
48
  Usage:
42
49
  airlock [options]
43
50
  airlock discover <cli|api> [options]
51
+ airlock configure-cli <tool> [options]
44
52
  airlock configure-agent [options]
45
53
 
46
54
  Options:
@@ -52,6 +60,7 @@ Options:
52
60
  Subcommands:
53
61
  discover cli <tool> Auto-discover CLI commands from --help or Fig specs
54
62
  discover api <spec> Auto-discover API endpoints from an OpenAPI spec
63
+ configure-cli <tool> Interactive TUI to select and configure CLI commands
55
64
  configure-agent Interactive TUI to build allow/ask/deny lists
56
65
 
57
66
  Examples:
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "airlock-bot",
3
- "version": "0.2.16",
3
+ "version": "0.2.17",
4
4
  "description": "Permissions-aware MCP gateway with human-in-the-loop approval for AI agents",
5
5
  "license": "MIT",
6
6
  "type": "module",