proofscan 0.5.11 → 0.6.1

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 +9 -7
  2. package/dist/cli.js.map +1 -1
  3. package/dist/commands/index.d.ts +1 -0
  4. package/dist/commands/index.d.ts.map +1 -1
  5. package/dist/commands/index.js +2 -0
  6. package/dist/commands/index.js.map +1 -1
  7. package/dist/commands/shell.d.ts +6 -0
  8. package/dist/commands/shell.d.ts.map +1 -0
  9. package/dist/commands/shell.js +33 -0
  10. package/dist/commands/shell.js.map +1 -0
  11. package/dist/shell/completer.d.ts +18 -0
  12. package/dist/shell/completer.d.ts.map +1 -0
  13. package/dist/shell/completer.js +136 -0
  14. package/dist/shell/completer.js.map +1 -0
  15. package/dist/shell/history.d.ts +20 -0
  16. package/dist/shell/history.d.ts.map +1 -0
  17. package/dist/shell/history.js +75 -0
  18. package/dist/shell/history.js.map +1 -0
  19. package/dist/shell/index.d.ts +11 -0
  20. package/dist/shell/index.d.ts.map +1 -0
  21. package/dist/shell/index.js +10 -0
  22. package/dist/shell/index.js.map +1 -0
  23. package/dist/shell/prompt.d.ts +34 -0
  24. package/dist/shell/prompt.d.ts.map +1 -0
  25. package/dist/shell/prompt.js +87 -0
  26. package/dist/shell/prompt.js.map +1 -0
  27. package/dist/shell/repl.d.ts +76 -0
  28. package/dist/shell/repl.d.ts.map +1 -0
  29. package/dist/shell/repl.js +486 -0
  30. package/dist/shell/repl.js.map +1 -0
  31. package/dist/shell/selector.d.ts +23 -0
  32. package/dist/shell/selector.d.ts.map +1 -0
  33. package/dist/shell/selector.js +86 -0
  34. package/dist/shell/selector.js.map +1 -0
  35. package/dist/shell/types.d.ts +47 -0
  36. package/dist/shell/types.d.ts.map +1 -0
  37. package/dist/shell/types.js +71 -0
  38. package/dist/shell/types.js.map +1 -0
  39. package/package.json +1 -1
@@ -0,0 +1,76 @@
1
+ /**
2
+ * Shell REPL implementation
3
+ */
4
+ /**
5
+ * Validate an argument for safe command execution.
6
+ * Since we use shell: false, most injection vectors are blocked.
7
+ * We only reject the most dangerous shell metacharacters as defense-in-depth.
8
+ *
9
+ * Blocked characters: & | ; ` $ (command chaining and substitution)
10
+ * \n \r (newline injection)
11
+ * \0 (null byte injection)
12
+ */
13
+ export declare function isValidArg(arg: string): boolean;
14
+ /**
15
+ * Shell REPL class
16
+ */
17
+ export declare class ShellRepl {
18
+ private context;
19
+ private rl;
20
+ private history;
21
+ private configPath;
22
+ private running;
23
+ private connectorsCache;
24
+ private sessionsCache;
25
+ private rpcsCache;
26
+ constructor(configPath: string);
27
+ /**
28
+ * Invalidate all caches (called after data-modifying commands)
29
+ */
30
+ private invalidateCache;
31
+ /**
32
+ * Get data provider for completions with caching
33
+ */
34
+ private getDataProvider;
35
+ /**
36
+ * Start the REPL
37
+ */
38
+ start(): Promise<void>;
39
+ /**
40
+ * Process a line of input
41
+ */
42
+ private processLine;
43
+ /**
44
+ * Handle built-in shell commands
45
+ */
46
+ private handleBuiltin;
47
+ /**
48
+ * Show help
49
+ */
50
+ private showHelp;
51
+ /**
52
+ * Show current context
53
+ */
54
+ private showContext;
55
+ /**
56
+ * Handle 'use' command
57
+ */
58
+ private handleUse;
59
+ /**
60
+ * Reset context
61
+ */
62
+ private resetContext;
63
+ /**
64
+ * Execute a pfscan command
65
+ */
66
+ private executeCommand;
67
+ /**
68
+ * Build command arguments with context applied
69
+ */
70
+ private buildCommandArgs;
71
+ /**
72
+ * Check if command has a positional connector argument
73
+ */
74
+ private hasPositionalConnector;
75
+ }
76
+ //# sourceMappingURL=repl.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repl.d.ts","sourceRoot":"","sources":["../../src/shell/repl.ts"],"names":[],"mappings":"AAAA;;GAEG;AAqBH;;;;;;;;GAQG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAG/C;AAUD;;GAEG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,OAAO,CAAe;IAC9B,OAAO,CAAC,EAAE,CAAmC;IAC7C,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,OAAO,CAAS;IAGxB,OAAO,CAAC,eAAe,CAAqC;IAC5D,OAAO,CAAC,aAAa,CAAgD;IACrE,OAAO,CAAC,SAAS,CAAgD;gBAErD,UAAU,EAAE,MAAM;IAY9B;;OAEG;IACH,OAAO,CAAC,eAAe;IAMvB;;OAEG;IACH,OAAO,CAAC,eAAe;IAwDvB;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IA4D5B;;OAEG;YACW,WAAW;IAwBzB;;OAEG;YACW,aAAa;IAiC3B;;OAEG;IACH,OAAO,CAAC,QAAQ;IA0BhB;;OAEG;IACH,OAAO,CAAC,WAAW;IAQnB;;OAEG;YACW,SAAS;IA+IvB;;OAEG;IACH,OAAO,CAAC,YAAY;IAOpB;;OAEG;YACW,cAAc;IA+C5B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAiCxB;;OAEG;IACH,OAAO,CAAC,sBAAsB;CAO/B"}
@@ -0,0 +1,486 @@
1
+ /**
2
+ * Shell REPL implementation
3
+ */
4
+ import * as readline from 'readline';
5
+ import { spawn } from 'child_process';
6
+ import { SHELL_BUILTINS, TOP_LEVEL_COMMANDS } from './types.js';
7
+ import { generatePrompt, printSuccess, printError, printInfo, shortenSessionId } from './prompt.js';
8
+ import { loadHistory, saveHistory, addToHistory } from './history.js';
9
+ import { createCompleter } from './completer.js';
10
+ import { selectConnector, selectSession, canInteract } from './selector.js';
11
+ import { EventLineStore } from '../eventline/store.js';
12
+ import { ConfigManager } from '../config/index.js';
13
+ import { getCurrentSession, setCurrentSession, clearCurrentSession, } from '../utils/state.js';
14
+ // Cache TTL in milliseconds (5 seconds)
15
+ const CACHE_TTL_MS = 5000;
16
+ /**
17
+ * Validate an argument for safe command execution.
18
+ * Since we use shell: false, most injection vectors are blocked.
19
+ * We only reject the most dangerous shell metacharacters as defense-in-depth.
20
+ *
21
+ * Blocked characters: & | ; ` $ (command chaining and substitution)
22
+ * \n \r (newline injection)
23
+ * \0 (null byte injection)
24
+ */
25
+ export function isValidArg(arg) {
26
+ const dangerousPattern = /[&|;`$\n\r\0]/;
27
+ return !dangerousPattern.test(arg);
28
+ }
29
+ /**
30
+ * Shell REPL class
31
+ */
32
+ export class ShellRepl {
33
+ context;
34
+ rl = null;
35
+ history = [];
36
+ configPath;
37
+ running = false;
38
+ // Caches for completion data
39
+ connectorsCache = null;
40
+ sessionsCache = new Map();
41
+ rpcsCache = new Map();
42
+ constructor(configPath) {
43
+ this.configPath = configPath;
44
+ this.context = {};
45
+ // Load existing session state
46
+ const currentSession = getCurrentSession();
47
+ if (currentSession) {
48
+ this.context.session = currentSession.sessionId;
49
+ this.context.connector = currentSession.connectorId;
50
+ }
51
+ }
52
+ /**
53
+ * Invalidate all caches (called after data-modifying commands)
54
+ */
55
+ invalidateCache() {
56
+ this.connectorsCache = null;
57
+ this.sessionsCache.clear();
58
+ this.rpcsCache.clear();
59
+ }
60
+ /**
61
+ * Get data provider for completions with caching
62
+ */
63
+ getDataProvider() {
64
+ const manager = new ConfigManager(this.configPath);
65
+ const configDir = manager.getConfigDir();
66
+ return {
67
+ getConnectorIds: () => {
68
+ const now = Date.now();
69
+ if (this.connectorsCache && this.connectorsCache.expiry > now) {
70
+ return this.connectorsCache.data;
71
+ }
72
+ try {
73
+ const store = new EventLineStore(configDir);
74
+ const ids = store.getConnectors().map(c => c.id);
75
+ this.connectorsCache = { data: ids, expiry: now + CACHE_TTL_MS };
76
+ return ids;
77
+ }
78
+ catch {
79
+ return [];
80
+ }
81
+ },
82
+ getSessionPrefixes: (connectorId, limit = 10) => {
83
+ const now = Date.now();
84
+ const cacheKey = `${connectorId || '*'}:${limit}`;
85
+ const cached = this.sessionsCache.get(cacheKey);
86
+ if (cached && cached.expiry > now) {
87
+ return cached.data;
88
+ }
89
+ try {
90
+ const store = new EventLineStore(configDir);
91
+ const sessions = store.getSessions(connectorId, limit);
92
+ const prefixes = sessions.map(s => shortenSessionId(s.session_id));
93
+ this.sessionsCache.set(cacheKey, { data: prefixes, expiry: now + CACHE_TTL_MS });
94
+ return prefixes;
95
+ }
96
+ catch {
97
+ return [];
98
+ }
99
+ },
100
+ getRpcIds: (sessionId) => {
101
+ if (!sessionId)
102
+ return [];
103
+ const now = Date.now();
104
+ const cached = this.rpcsCache.get(sessionId);
105
+ if (cached && cached.expiry > now) {
106
+ return cached.data;
107
+ }
108
+ try {
109
+ const store = new EventLineStore(configDir);
110
+ const rpcs = store.getRpcCalls(sessionId);
111
+ const ids = rpcs.map((_, i) => String(i + 1));
112
+ this.rpcsCache.set(sessionId, { data: ids, expiry: now + CACHE_TTL_MS });
113
+ return ids;
114
+ }
115
+ catch {
116
+ return [];
117
+ }
118
+ },
119
+ };
120
+ }
121
+ /**
122
+ * Start the REPL
123
+ */
124
+ async start() {
125
+ // Load history
126
+ this.history = loadHistory();
127
+ // Create completer
128
+ const dataProvider = this.getDataProvider();
129
+ const completer = createCompleter(this.context, dataProvider);
130
+ // Create readline interface
131
+ this.rl = readline.createInterface({
132
+ input: process.stdin,
133
+ output: process.stdout,
134
+ prompt: generatePrompt(this.context),
135
+ completer: (line, callback) => {
136
+ const [completions, prefix] = completer(line);
137
+ callback(null, [completions, prefix]);
138
+ },
139
+ history: this.history,
140
+ historySize: 1000,
141
+ });
142
+ this.running = true;
143
+ // Print welcome message
144
+ console.log();
145
+ printInfo('proofscan shell - Type "help" for available commands, "exit" to quit');
146
+ console.log();
147
+ // Start prompt loop
148
+ this.rl.prompt();
149
+ this.rl.on('line', async (line) => {
150
+ const trimmed = line.trim();
151
+ if (trimmed) {
152
+ this.history = addToHistory(this.history, trimmed);
153
+ await this.processLine(trimmed);
154
+ }
155
+ if (this.running) {
156
+ // Update prompt (context may have changed)
157
+ this.rl.setPrompt(generatePrompt(this.context));
158
+ this.rl.prompt();
159
+ }
160
+ });
161
+ this.rl.on('close', () => {
162
+ this.running = false;
163
+ saveHistory(this.history);
164
+ console.log();
165
+ printInfo('Goodbye!');
166
+ });
167
+ // Handle SIGINT (Ctrl+C)
168
+ this.rl.on('SIGINT', () => {
169
+ console.log();
170
+ this.rl.prompt();
171
+ });
172
+ }
173
+ /**
174
+ * Process a line of input
175
+ */
176
+ async processLine(line) {
177
+ const tokens = line.trim().split(/\s+/).filter(t => t !== '');
178
+ if (tokens.length === 0)
179
+ return;
180
+ const command = tokens[0];
181
+ const args = tokens.slice(1);
182
+ // Handle built-in commands
183
+ if (SHELL_BUILTINS.includes(command)) {
184
+ await this.handleBuiltin(command, args);
185
+ return;
186
+ }
187
+ // Handle pfscan commands
188
+ if (TOP_LEVEL_COMMANDS.includes(command)) {
189
+ await this.executeCommand(tokens);
190
+ return;
191
+ }
192
+ // Unknown command
193
+ printError(`Unknown command: ${command}`);
194
+ printInfo('Type "help" for available commands');
195
+ }
196
+ /**
197
+ * Handle built-in shell commands
198
+ */
199
+ async handleBuiltin(command, args) {
200
+ switch (command) {
201
+ case 'exit':
202
+ case 'quit':
203
+ this.running = false;
204
+ this.rl?.close();
205
+ break;
206
+ case 'help':
207
+ this.showHelp(args[0]);
208
+ break;
209
+ case 'clear':
210
+ console.clear();
211
+ break;
212
+ case 'pwd':
213
+ this.showContext();
214
+ break;
215
+ case 'use':
216
+ await this.handleUse(args);
217
+ break;
218
+ case 'reset':
219
+ this.resetContext();
220
+ break;
221
+ default:
222
+ printError(`Unknown builtin: ${command}`);
223
+ }
224
+ }
225
+ /**
226
+ * Show help
227
+ */
228
+ showHelp(topic) {
229
+ if (topic) {
230
+ printInfo(`Help for "${topic}" - run "pfscan ${topic} --help" for details`);
231
+ return;
232
+ }
233
+ console.log(`
234
+ Shell Commands:
235
+ use <connector> Set current connector context
236
+ use session <prefix> Set current session context
237
+ reset Clear context (connector and session)
238
+ pwd Show current context
239
+ help [command] Show help
240
+ clear Clear screen
241
+ exit, quit Exit shell
242
+
243
+ Available Commands:
244
+ ${TOP_LEVEL_COMMANDS.join(', ')}
245
+
246
+ Tips:
247
+ - Press TAB for auto-completion
248
+ - Current context is shown in the prompt
249
+ - Commands run with current context applied
250
+ `);
251
+ }
252
+ /**
253
+ * Show current context
254
+ */
255
+ showContext() {
256
+ console.log();
257
+ console.log('Current context:');
258
+ console.log(` Connector: ${this.context.connector || '(not set)'}`);
259
+ console.log(` Session: ${this.context.session ? shortenSessionId(this.context.session) : '(not set)'}`);
260
+ console.log();
261
+ }
262
+ /**
263
+ * Handle 'use' command
264
+ */
265
+ async handleUse(args) {
266
+ if (args.length === 0) {
267
+ // Show interactive connector selection
268
+ if (!canInteract()) {
269
+ printError('Usage: use <connector> or use session <prefix>');
270
+ return;
271
+ }
272
+ const dataProvider = this.getDataProvider();
273
+ const connectors = dataProvider.getConnectorIds();
274
+ if (connectors.length === 0) {
275
+ printError('No connectors found. Run a scan first.');
276
+ return;
277
+ }
278
+ const selected = await selectConnector(connectors);
279
+ if (selected) {
280
+ this.context.connector = selected;
281
+ this.context.session = undefined;
282
+ setCurrentSession('', selected); // Save connector only
283
+ printSuccess(`Connector set to: ${selected}`);
284
+ }
285
+ return;
286
+ }
287
+ if (args[0] === 'session') {
288
+ if (args.length < 2) {
289
+ // Show interactive session selection
290
+ if (!canInteract()) {
291
+ printError('Usage: use session <prefix>');
292
+ return;
293
+ }
294
+ try {
295
+ const manager = new ConfigManager(this.configPath);
296
+ const store = new EventLineStore(manager.getConfigDir());
297
+ const sessions = store.getSessions(this.context.connector, 10);
298
+ if (sessions.length === 0) {
299
+ printError('No sessions found. Run a scan first.');
300
+ return;
301
+ }
302
+ const selected = await selectSession(sessions.map(s => ({ id: s.session_id, connector_id: s.connector_id })));
303
+ if (selected) {
304
+ this.context.session = selected;
305
+ // Also set connector from session
306
+ const session = sessions.find(s => s.session_id === selected);
307
+ if (session) {
308
+ this.context.connector = session.connector_id;
309
+ }
310
+ setCurrentSession(selected, this.context.connector);
311
+ printSuccess(`Session set to: ${shortenSessionId(selected)}`);
312
+ }
313
+ }
314
+ catch (err) {
315
+ printError(`Failed to load sessions: ${err instanceof Error ? err.message : String(err)}`);
316
+ }
317
+ return;
318
+ }
319
+ // Find session by prefix
320
+ const prefix = args[1];
321
+ try {
322
+ const manager = new ConfigManager(this.configPath);
323
+ const store = new EventLineStore(manager.getConfigDir());
324
+ const sessions = store.getSessions(this.context.connector, 100);
325
+ const matches = sessions.filter(s => s.session_id.startsWith(prefix));
326
+ if (matches.length === 0) {
327
+ printError(`Session not found: ${prefix}`);
328
+ return;
329
+ }
330
+ if (matches.length > 1) {
331
+ // Ambiguous prefix - offer interactive selection if possible
332
+ if (canInteract()) {
333
+ printInfo(`Multiple sessions match "${prefix}". Select one:`);
334
+ const selected = await selectSession(matches.slice(0, 20).map(s => ({ id: s.session_id, connector_id: s.connector_id })));
335
+ if (selected) {
336
+ this.context.session = selected;
337
+ const session = matches.find(s => s.session_id === selected);
338
+ if (session) {
339
+ this.context.connector = session.connector_id;
340
+ }
341
+ setCurrentSession(selected, this.context.connector);
342
+ printSuccess(`Session set to: ${shortenSessionId(selected)} (${this.context.connector})`);
343
+ }
344
+ }
345
+ else {
346
+ printError(`Ambiguous session prefix: ${prefix}`);
347
+ printInfo('Matching sessions:');
348
+ matches.slice(0, 10).forEach(s => {
349
+ console.log(` ${shortenSessionId(s.session_id)} (${s.connector_id})`);
350
+ });
351
+ if (matches.length > 10) {
352
+ printInfo(` ... and ${matches.length - 10} more`);
353
+ }
354
+ printInfo('Provide a longer prefix to disambiguate.');
355
+ }
356
+ return;
357
+ }
358
+ const match = matches[0];
359
+ this.context.session = match.session_id;
360
+ this.context.connector = match.connector_id;
361
+ setCurrentSession(match.session_id, match.connector_id);
362
+ printSuccess(`Session set to: ${shortenSessionId(match.session_id)} (${match.connector_id})`);
363
+ }
364
+ catch (err) {
365
+ printError(`Failed to load sessions: ${err instanceof Error ? err.message : String(err)}`);
366
+ }
367
+ return;
368
+ }
369
+ // Set connector
370
+ const connectorId = args[0];
371
+ const dataProvider = this.getDataProvider();
372
+ const connectors = dataProvider.getConnectorIds();
373
+ if (!connectors.includes(connectorId)) {
374
+ // Try partial match
375
+ const match = connectors.find(c => c.startsWith(connectorId));
376
+ if (match) {
377
+ this.context.connector = match;
378
+ this.context.session = undefined;
379
+ printSuccess(`Connector set to: ${match}`);
380
+ return;
381
+ }
382
+ printError(`Connector not found: ${connectorId}`);
383
+ printInfo(`Available: ${connectors.join(', ')}`);
384
+ return;
385
+ }
386
+ this.context.connector = connectorId;
387
+ this.context.session = undefined;
388
+ printSuccess(`Connector set to: ${connectorId}`);
389
+ }
390
+ /**
391
+ * Reset context
392
+ */
393
+ resetContext() {
394
+ this.context.connector = undefined;
395
+ this.context.session = undefined;
396
+ clearCurrentSession();
397
+ printSuccess('Context cleared');
398
+ }
399
+ /**
400
+ * Execute a pfscan command
401
+ */
402
+ async executeCommand(tokens) {
403
+ // Build command line with context
404
+ const cmdArgs = this.buildCommandArgs(tokens);
405
+ const command = tokens[0];
406
+ // Validate all arguments for safety (defense-in-depth with shell: false)
407
+ const invalidArgs = cmdArgs.filter(arg => !isValidArg(arg));
408
+ if (invalidArgs.length > 0) {
409
+ printError(`Invalid characters in arguments: ${invalidArgs.join(', ')}`);
410
+ printInfo('Arguments cannot contain shell metacharacters: & | ; ` $');
411
+ return;
412
+ }
413
+ // Spawn pfscan process
414
+ // Windows requires shell: true for .cmd wrapper scripts (npm global installs)
415
+ // Security is ensured by isValidArg() validation above which blocks dangerous characters
416
+ const isWindows = process.platform === 'win32';
417
+ return new Promise((resolve) => {
418
+ const proc = spawn('pfscan', cmdArgs, {
419
+ stdio: 'inherit',
420
+ shell: isWindows,
421
+ });
422
+ proc.on('error', (err) => {
423
+ printError(`Failed to run command: ${err.message}`);
424
+ resolve();
425
+ });
426
+ proc.on('close', (code) => {
427
+ // Invalidate cache after data-modifying commands
428
+ const dataModifyingCommands = [
429
+ 'scan', 's', // Creates new sessions/events
430
+ 'archive', 'a', // Removes old data
431
+ 'connectors', 'connector', // Adds/removes connectors
432
+ 'config', 'c', // Config changes may affect connectors
433
+ ];
434
+ if (dataModifyingCommands.includes(command)) {
435
+ this.invalidateCache();
436
+ }
437
+ if (code !== 0 && code !== null) {
438
+ printError(`Command exited with code ${code}`);
439
+ }
440
+ resolve();
441
+ });
442
+ });
443
+ }
444
+ /**
445
+ * Build command arguments with context applied
446
+ */
447
+ buildCommandArgs(tokens) {
448
+ const args = [...tokens];
449
+ const command = tokens[0];
450
+ // Add --connector if context has connector and command supports it
451
+ const connectorCommands = ['view', 'v', 'tree', 't'];
452
+ if (this.context.connector && connectorCommands.includes(command)) {
453
+ if (!args.includes('--connector') && !this.hasPositionalConnector(args)) {
454
+ args.push('--connector', this.context.connector);
455
+ }
456
+ }
457
+ // Add --session if context has session and command supports it
458
+ const sessionCommands = ['rpc', 'summary', 'permissions', 'view', 'v'];
459
+ if (this.context.session && sessionCommands.includes(command)) {
460
+ if (!args.includes('--session')) {
461
+ args.push('--session', this.context.session);
462
+ }
463
+ }
464
+ // Add --id for scan start if context has connector
465
+ if (command === 'scan' || command === 's') {
466
+ if (args.includes('start') && !args.includes('--id') && this.context.connector) {
467
+ const hasPositional = args.length > 2 && !args[2].startsWith('-');
468
+ if (!hasPositional) {
469
+ args.push('--id', this.context.connector);
470
+ }
471
+ }
472
+ }
473
+ return args;
474
+ }
475
+ /**
476
+ * Check if command has a positional connector argument
477
+ */
478
+ hasPositionalConnector(args) {
479
+ // For tree command, check if there's a positional argument
480
+ if (args[0] === 'tree' || args[0] === 't') {
481
+ return args.length > 1 && !args[1].startsWith('-');
482
+ }
483
+ return false;
484
+ }
485
+ }
486
+ //# sourceMappingURL=repl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repl.js","sourceRoot":"","sources":["../../src/shell/repl.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Interactive selector for missing arguments
3
+ */
4
+ /**
5
+ * Check if interactive selection is available
6
+ */
7
+ export declare function canInteract(): boolean;
8
+ /**
9
+ * Show a simple numbered list and get selection
10
+ */
11
+ export declare function selectFromList(items: string[], prompt: string): Promise<string | null>;
12
+ /**
13
+ * Show connector selection UI
14
+ */
15
+ export declare function selectConnector(connectors: string[]): Promise<string | null>;
16
+ /**
17
+ * Show session selection UI
18
+ */
19
+ export declare function selectSession(sessions: Array<{
20
+ id: string;
21
+ connector_id: string;
22
+ }>): Promise<string | null>;
23
+ //# sourceMappingURL=selector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"selector.d.ts","sourceRoot":"","sources":["../../src/shell/selector.ts"],"names":[],"mappings":"AAAA;;GAEG;AAYH;;GAEG;AACH,wBAAgB,WAAW,IAAI,OAAO,CAErC;AAED;;GAEG;AACH,wBAAsB,cAAc,CAClC,KAAK,EAAE,MAAM,EAAE,EACf,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAqDxB;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAElF;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,QAAQ,EAAE,KAAK,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAWjH"}