recker 1.0.12-alpha.91ed191 → 1.0.12-next.b76976a

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,46 @@
1
+ import type { SearchResult } from '../../mcp/search/types.js';
2
+ export declare class ShellSearch {
3
+ private hybridSearch;
4
+ private docsIndex;
5
+ private codeExamples;
6
+ private typeDefinitions;
7
+ private initialized;
8
+ private idleTimer;
9
+ private docsPath;
10
+ private examplesPath;
11
+ private srcPath;
12
+ constructor();
13
+ private ensureInitialized;
14
+ private resetIdleTimer;
15
+ private unload;
16
+ search(query: string, options?: {
17
+ limit?: number;
18
+ category?: string;
19
+ }): Promise<SearchResult[]>;
20
+ suggest(useCase: string): Promise<string>;
21
+ getExamples(feature: string, options?: {
22
+ limit?: number;
23
+ complexity?: string;
24
+ }): Promise<string>;
25
+ getStats(): {
26
+ documents: number;
27
+ examples: number;
28
+ types: number;
29
+ loaded: boolean;
30
+ };
31
+ private findDocsPath;
32
+ private findExamplesPath;
33
+ private findSrcPath;
34
+ private buildIndex;
35
+ private indexDocsFromEmbeddings;
36
+ private indexDocsFromFilesystem;
37
+ private indexExamples;
38
+ private indexTypes;
39
+ private extractKeywords;
40
+ private parseExampleMeta;
41
+ private inferFeature;
42
+ private extractMainCode;
43
+ private parseTypeDefinitions;
44
+ }
45
+ export declare function getShellSearch(): ShellSearch;
46
+ //# sourceMappingURL=shell-search.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shell-search.d.ts","sourceRoot":"","sources":["../../../src/cli/tui/shell-search.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAc,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAmC1E,qBAAa,WAAW;IACtB,OAAO,CAAC,YAAY,CAA6B;IACjD,OAAO,CAAC,SAAS,CAAoB;IACrC,OAAO,CAAC,YAAY,CAAqB;IACzC,OAAO,CAAC,eAAe,CAAwB;IAC/C,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,SAAS,CAA8C;IAC/D,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,OAAO,CAAS;;YAWV,iBAAiB;IAgB/B,OAAO,CAAC,cAAc;IAUtB,OAAO,CAAC,MAAM;IAaR,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAO,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAenG,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAqGzC,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAO,GAAG,OAAO,CAAC,MAAM,CAAC;IAwD1G,QAAQ,IAAI;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,OAAO,CAAA;KAAE;IAWnF,OAAO,CAAC,YAAY;IAYpB,OAAO,CAAC,gBAAgB;IAWxB,OAAO,CAAC,WAAW;IAanB,OAAO,CAAC,UAAU;IAUlB,OAAO,CAAC,uBAAuB;IAuC/B,OAAO,CAAC,uBAAuB;IAuC/B,OAAO,CAAC,aAAa;IAoCrB,OAAO,CAAC,UAAU;IAwBlB,OAAO,CAAC,eAAe;IA8BvB,OAAO,CAAC,gBAAgB;IA8BxB,OAAO,CAAC,YAAY;IAcpB,OAAO,CAAC,eAAe;IAkBvB,OAAO,CAAC,oBAAoB;CA4C7B;AAKD,wBAAgB,cAAc,IAAI,WAAW,CAK5C"}
@@ -0,0 +1,452 @@
1
+ import { createHybridSearch } from '../../mcp/search/index.js';
2
+ import { readFileSync, readdirSync, statSync, existsSync } from 'fs';
3
+ import { join, relative, extname, basename, dirname } from 'path';
4
+ import { fileURLToPath } from 'url';
5
+ const IDLE_TIMEOUT_MS = 5 * 60 * 1000;
6
+ export class ShellSearch {
7
+ hybridSearch = null;
8
+ docsIndex = [];
9
+ codeExamples = [];
10
+ typeDefinitions = [];
11
+ initialized = false;
12
+ idleTimer = null;
13
+ docsPath;
14
+ examplesPath;
15
+ srcPath;
16
+ constructor() {
17
+ this.docsPath = this.findDocsPath();
18
+ this.examplesPath = this.findExamplesPath();
19
+ this.srcPath = this.findSrcPath();
20
+ }
21
+ async ensureInitialized() {
22
+ this.resetIdleTimer();
23
+ if (this.initialized && this.hybridSearch) {
24
+ return;
25
+ }
26
+ this.hybridSearch = createHybridSearch({ debug: false });
27
+ this.buildIndex();
28
+ await this.hybridSearch.initialize(this.docsIndex);
29
+ this.initialized = true;
30
+ }
31
+ resetIdleTimer() {
32
+ if (this.idleTimer) {
33
+ clearTimeout(this.idleTimer);
34
+ }
35
+ this.idleTimer = setTimeout(() => this.unload(), IDLE_TIMEOUT_MS);
36
+ }
37
+ unload() {
38
+ if (this.initialized) {
39
+ this.hybridSearch = null;
40
+ this.docsIndex = [];
41
+ this.codeExamples = [];
42
+ this.typeDefinitions = [];
43
+ this.initialized = false;
44
+ }
45
+ }
46
+ async search(query, options = {}) {
47
+ await this.ensureInitialized();
48
+ const { limit = 5, category } = options;
49
+ if (!this.hybridSearch) {
50
+ return [];
51
+ }
52
+ return this.hybridSearch.search(query, { limit, category, mode: 'hybrid' });
53
+ }
54
+ async suggest(useCase) {
55
+ await this.ensureInitialized();
56
+ const results = await this.search(useCase, { limit: 3 });
57
+ if (results.length === 0) {
58
+ return `No suggestions found for: "${useCase}"\n\nTry searching for specific features like:\n - retry\n - cache\n - streaming\n - websocket\n - pagination`;
59
+ }
60
+ const useCaseLower = useCase.toLowerCase();
61
+ const suggestions = [];
62
+ if (useCaseLower.includes('retry') || useCaseLower.includes('fail') || useCaseLower.includes('error')) {
63
+ suggestions.push(`\n**Retry Configuration:**
64
+ \`\`\`typescript
65
+ import { createClient } from 'recker';
66
+
67
+ const client = createClient({
68
+ baseUrl: 'https://api.example.com',
69
+ retry: {
70
+ attempts: 3,
71
+ backoff: 'exponential',
72
+ jitter: true,
73
+ retryOn: [429, 500, 502, 503, 504]
74
+ }
75
+ });
76
+ \`\`\``);
77
+ }
78
+ if (useCaseLower.includes('cache') || useCaseLower.includes('storage')) {
79
+ suggestions.push(`\n**Cache Configuration:**
80
+ \`\`\`typescript
81
+ import { createClient } from 'recker';
82
+
83
+ const client = createClient({
84
+ baseUrl: 'https://api.example.com',
85
+ cache: {
86
+ storage: 'memory', // or 'file'
87
+ ttl: 300000, // 5 minutes
88
+ strategy: 'stale-while-revalidate'
89
+ }
90
+ });
91
+ \`\`\``);
92
+ }
93
+ if (useCaseLower.includes('stream') || useCaseLower.includes('sse') || useCaseLower.includes('ai') || useCaseLower.includes('openai')) {
94
+ suggestions.push(`\n**Streaming Configuration:**
95
+ \`\`\`typescript
96
+ import { createClient } from 'recker';
97
+
98
+ const client = createClient({ baseUrl: 'https://api.openai.com' });
99
+
100
+ // SSE streaming
101
+ for await (const event of client.post('/v1/chat/completions', { body, stream: true }).sse()) {
102
+ console.log(event.data);
103
+ }
104
+ \`\`\``);
105
+ }
106
+ if (useCaseLower.includes('parallel') || useCaseLower.includes('batch') || useCaseLower.includes('concurrent')) {
107
+ suggestions.push(`\n**Batch/Parallel Requests:**
108
+ \`\`\`typescript
109
+ import { createClient } from 'recker';
110
+
111
+ const client = createClient({
112
+ baseUrl: 'https://api.example.com',
113
+ concurrency: { max: 10 }
114
+ });
115
+
116
+ const { results, stats } = await client.batch([
117
+ { path: '/users/1' },
118
+ { path: '/users/2' },
119
+ { path: '/users/3' }
120
+ ], { mapResponse: r => r.json() });
121
+ \`\`\``);
122
+ }
123
+ let output = `**Suggestion for: "${useCase}"**\n`;
124
+ if (suggestions.length > 0) {
125
+ output += suggestions.join('\n');
126
+ }
127
+ output += `\n\n**Related Documentation:**\n`;
128
+ for (const result of results) {
129
+ output += ` - ${result.title} (${result.path})\n`;
130
+ if (result.snippet) {
131
+ output += ` ${result.snippet.slice(0, 100)}...\n`;
132
+ }
133
+ }
134
+ return output;
135
+ }
136
+ async getExamples(feature, options = {}) {
137
+ await this.ensureInitialized();
138
+ const { limit = 3, complexity } = options;
139
+ const featureLower = feature.toLowerCase();
140
+ let examples = this.codeExamples.filter(ex => {
141
+ const matchesFeature = ex.feature.toLowerCase().includes(featureLower) ||
142
+ ex.keywords.some(k => k.toLowerCase().includes(featureLower)) ||
143
+ ex.title.toLowerCase().includes(featureLower);
144
+ const matchesComplexity = !complexity || ex.complexity === complexity;
145
+ return matchesFeature && matchesComplexity;
146
+ });
147
+ if (examples.length === 0) {
148
+ const searchResults = await this.search(`${feature} example`, { limit: 3 });
149
+ if (searchResults.length === 0) {
150
+ return `No examples found for: "${feature}"\n\nAvailable features:\n - retry, cache, streaming, websocket\n - pagination, middleware, batch\n - scraping, load-testing, whois`;
151
+ }
152
+ let output = `**Examples for "${feature}" (from docs):**\n\n`;
153
+ for (const result of searchResults) {
154
+ output += `### ${result.title}\n`;
155
+ const codeBlocks = result.content.match(/```[\s\S]*?```/g) || [];
156
+ if (codeBlocks.length > 0) {
157
+ output += codeBlocks.slice(0, 2).join('\n\n') + '\n\n';
158
+ }
159
+ else if (result.snippet) {
160
+ output += result.snippet + '\n\n';
161
+ }
162
+ }
163
+ return output;
164
+ }
165
+ examples = examples.slice(0, limit);
166
+ let output = `**Code Examples for "${feature}":**\n\n`;
167
+ for (const ex of examples) {
168
+ output += `### ${ex.title} (${ex.complexity})\n`;
169
+ output += `${ex.description}\n\n`;
170
+ output += `\`\`\`typescript\n${ex.code}\n\`\`\`\n\n`;
171
+ }
172
+ return output;
173
+ }
174
+ getStats() {
175
+ return {
176
+ documents: this.docsIndex.length,
177
+ examples: this.codeExamples.length,
178
+ types: this.typeDefinitions.length,
179
+ loaded: this.initialized,
180
+ };
181
+ }
182
+ findDocsPath() {
183
+ const candidates = [
184
+ join(process.cwd(), 'docs'),
185
+ join(dirname(fileURLToPath(import.meta.url)), '../../../docs'),
186
+ join(dirname(fileURLToPath(import.meta.url)), '../../../../docs'),
187
+ ];
188
+ for (const p of candidates) {
189
+ if (existsSync(p))
190
+ return p;
191
+ }
192
+ return candidates[0];
193
+ }
194
+ findExamplesPath() {
195
+ const candidates = [
196
+ join(process.cwd(), 'examples'),
197
+ join(dirname(fileURLToPath(import.meta.url)), '../../../examples'),
198
+ ];
199
+ for (const p of candidates) {
200
+ if (existsSync(p))
201
+ return p;
202
+ }
203
+ return candidates[0];
204
+ }
205
+ findSrcPath() {
206
+ const candidates = [
207
+ join(process.cwd(), 'src'),
208
+ join(dirname(fileURLToPath(import.meta.url)), '../../'),
209
+ ];
210
+ for (const p of candidates) {
211
+ if (existsSync(p))
212
+ return p;
213
+ }
214
+ return candidates[0];
215
+ }
216
+ buildIndex() {
217
+ this.indexDocsFromEmbeddings();
218
+ this.indexExamples();
219
+ this.indexTypes();
220
+ }
221
+ indexDocsFromEmbeddings() {
222
+ try {
223
+ const embeddingsPath = join(dirname(fileURLToPath(import.meta.url)), '../../mcp/data/embeddings.json');
224
+ if (existsSync(embeddingsPath)) {
225
+ const data = JSON.parse(readFileSync(embeddingsPath, 'utf-8'));
226
+ for (const doc of data.documents) {
227
+ let content = '';
228
+ if (!doc.section) {
229
+ const fullPath = join(this.docsPath, doc.path);
230
+ if (existsSync(fullPath)) {
231
+ content = readFileSync(fullPath, 'utf-8');
232
+ }
233
+ }
234
+ this.docsIndex.push({
235
+ id: doc.id,
236
+ path: doc.path,
237
+ title: doc.title,
238
+ content,
239
+ category: doc.category,
240
+ keywords: doc.keywords || [],
241
+ section: doc.section,
242
+ parentPath: doc.parentPath,
243
+ });
244
+ }
245
+ return;
246
+ }
247
+ }
248
+ catch {
249
+ }
250
+ this.indexDocsFromFilesystem();
251
+ }
252
+ indexDocsFromFilesystem() {
253
+ if (!existsSync(this.docsPath))
254
+ return;
255
+ const walkDir = (dir) => {
256
+ const entries = readdirSync(dir);
257
+ for (const entry of entries) {
258
+ const fullPath = join(dir, entry);
259
+ const stat = statSync(fullPath);
260
+ if (stat.isDirectory()) {
261
+ walkDir(fullPath);
262
+ }
263
+ else if (extname(entry) === '.md') {
264
+ const content = readFileSync(fullPath, 'utf-8');
265
+ const relPath = relative(this.docsPath, fullPath);
266
+ const parts = relPath.split('/');
267
+ const category = parts.length > 1 ? parts[0] : 'general';
268
+ const titleMatch = content.match(/^#\s+(.+)$/m);
269
+ const title = titleMatch ? titleMatch[1] : basename(entry, '.md');
270
+ const keywords = this.extractKeywords(content);
271
+ this.docsIndex.push({
272
+ id: relPath,
273
+ path: relPath,
274
+ title,
275
+ content,
276
+ category,
277
+ keywords,
278
+ });
279
+ }
280
+ }
281
+ };
282
+ walkDir(this.docsPath);
283
+ }
284
+ indexExamples() {
285
+ if (!existsSync(this.examplesPath))
286
+ return;
287
+ const walkDir = (dir) => {
288
+ const entries = readdirSync(dir);
289
+ for (const entry of entries) {
290
+ const fullPath = join(dir, entry);
291
+ const stat = statSync(fullPath);
292
+ if (stat.isDirectory()) {
293
+ walkDir(fullPath);
294
+ }
295
+ else if (['.ts', '.js', '.mjs'].includes(extname(entry))) {
296
+ const code = readFileSync(fullPath, 'utf-8');
297
+ const relPath = relative(this.examplesPath, fullPath);
298
+ const meta = this.parseExampleMeta(code);
299
+ const filename = basename(entry, extname(entry));
300
+ this.codeExamples.push({
301
+ id: relPath,
302
+ path: relPath,
303
+ title: meta.title || filename,
304
+ feature: meta.feature || this.inferFeature(filename, code),
305
+ complexity: meta.complexity || 'basic',
306
+ code: this.extractMainCode(code),
307
+ description: meta.description || '',
308
+ keywords: meta.keywords || this.extractKeywords(code),
309
+ });
310
+ }
311
+ }
312
+ };
313
+ walkDir(this.examplesPath);
314
+ }
315
+ indexTypes() {
316
+ if (!existsSync(this.srcPath))
317
+ return;
318
+ const typeFiles = ['types.ts', 'types/index.ts', 'core/types.ts'];
319
+ for (const tf of typeFiles) {
320
+ const fullPath = join(this.srcPath, tf);
321
+ if (!existsSync(fullPath))
322
+ continue;
323
+ const content = readFileSync(fullPath, 'utf-8');
324
+ this.parseTypeDefinitions(content, tf);
325
+ }
326
+ const mainFiles = ['index.ts', 'core/client.ts', 'mcp/server.ts'];
327
+ for (const mf of mainFiles) {
328
+ const fullPath = join(this.srcPath, mf);
329
+ if (!existsSync(fullPath))
330
+ continue;
331
+ const content = readFileSync(fullPath, 'utf-8');
332
+ this.parseTypeDefinitions(content, mf);
333
+ }
334
+ }
335
+ extractKeywords(content) {
336
+ const keywords = new Set();
337
+ const headings = content.match(/^#+\s+(.+)$/gm) || [];
338
+ for (const h of headings) {
339
+ const text = h.replace(/^#+\s+/, '');
340
+ text.split(/\s+/).forEach(w => {
341
+ if (w.length > 3)
342
+ keywords.add(w.toLowerCase());
343
+ });
344
+ }
345
+ const identifiers = content.match(/`([a-zA-Z_][a-zA-Z0-9_]*)`/g) || [];
346
+ for (const id of identifiers) {
347
+ keywords.add(id.replace(/`/g, '').toLowerCase());
348
+ }
349
+ const terms = ['retry', 'cache', 'timeout', 'streaming', 'sse', 'websocket',
350
+ 'middleware', 'plugin', 'hook', 'batch', 'pagination', 'http'];
351
+ for (const term of terms) {
352
+ if (content.toLowerCase().includes(term)) {
353
+ keywords.add(term);
354
+ }
355
+ }
356
+ return Array.from(keywords);
357
+ }
358
+ parseExampleMeta(code) {
359
+ const meta = {};
360
+ const docMatch = code.match(/\/\*\*[\s\S]*?\*\//);
361
+ if (docMatch) {
362
+ const doc = docMatch[0];
363
+ const titleMatch = doc.match(/@title\s+(.+)/);
364
+ if (titleMatch)
365
+ meta.title = titleMatch[1].trim();
366
+ const featureMatch = doc.match(/@feature\s+(.+)/);
367
+ if (featureMatch)
368
+ meta.feature = featureMatch[1].trim();
369
+ const complexityMatch = doc.match(/@complexity\s+(basic|intermediate|advanced)/);
370
+ if (complexityMatch)
371
+ meta.complexity = complexityMatch[1];
372
+ const descMatch = doc.match(/\*\s+([^@*\n].+)/);
373
+ if (descMatch)
374
+ meta.description = descMatch[1].trim();
375
+ }
376
+ return meta;
377
+ }
378
+ inferFeature(filename, code) {
379
+ const nameLower = filename.toLowerCase();
380
+ const codeLower = code.toLowerCase();
381
+ if (nameLower.includes('retry') || codeLower.includes('retry:'))
382
+ return 'retry';
383
+ if (nameLower.includes('cache') || codeLower.includes('cache:'))
384
+ return 'cache';
385
+ if (nameLower.includes('stream') || codeLower.includes('.sse('))
386
+ return 'streaming';
387
+ if (nameLower.includes('ws') || codeLower.includes('websocket'))
388
+ return 'websocket';
389
+ if (nameLower.includes('batch') || codeLower.includes('.batch('))
390
+ return 'batch';
391
+ if (nameLower.includes('pagin') || codeLower.includes('.paginate('))
392
+ return 'pagination';
393
+ return 'general';
394
+ }
395
+ extractMainCode(code) {
396
+ const lines = code.split('\n');
397
+ let startIndex = 0;
398
+ for (let i = 0; i < lines.length; i++) {
399
+ const line = lines[i].trim();
400
+ if (line.startsWith('//') || line.startsWith('/*') || line.startsWith('*') ||
401
+ line.startsWith('import') || line.startsWith('export') || line === '') {
402
+ startIndex = i + 1;
403
+ }
404
+ else {
405
+ break;
406
+ }
407
+ }
408
+ return lines.slice(startIndex).join('\n').trim() || code;
409
+ }
410
+ parseTypeDefinitions(content, path) {
411
+ const interfaceRegex = /(?:\/\*\*[\s\S]*?\*\/\s*)?(export\s+)?interface\s+(\w+)(?:<[^>]+>)?\s*(?:extends\s+[^{]+)?\{[\s\S]*?\n\}/g;
412
+ let match;
413
+ while ((match = interfaceRegex.exec(content)) !== null) {
414
+ const name = match[2];
415
+ const definition = match[0];
416
+ const docMatch = definition.match(/\/\*\*\s*([\s\S]*?)\s*\*\//);
417
+ const description = docMatch
418
+ ? docMatch[1].replace(/\s*\*\s*/g, ' ').trim()
419
+ : '';
420
+ this.typeDefinitions.push({
421
+ name,
422
+ kind: 'interface',
423
+ path,
424
+ definition: definition.replace(/\/\*\*[\s\S]*?\*\/\s*/, '').trim(),
425
+ description,
426
+ });
427
+ }
428
+ const typeRegex = /(?:\/\*\*[\s\S]*?\*\/\s*)?(export\s+)?type\s+(\w+)(?:<[^>]+>)?\s*=\s*[^;]+;/g;
429
+ while ((match = typeRegex.exec(content)) !== null) {
430
+ const name = match[2];
431
+ const definition = match[0];
432
+ const docMatch = definition.match(/\/\*\*\s*([\s\S]*?)\s*\*\//);
433
+ const description = docMatch
434
+ ? docMatch[1].replace(/\s*\*\s*/g, ' ').trim()
435
+ : '';
436
+ this.typeDefinitions.push({
437
+ name,
438
+ kind: 'type',
439
+ path,
440
+ definition: definition.replace(/\/\*\*[\s\S]*?\*\/\s*/, '').trim(),
441
+ description,
442
+ });
443
+ }
444
+ }
445
+ }
446
+ let shellSearchInstance = null;
447
+ export function getShellSearch() {
448
+ if (!shellSearchInstance) {
449
+ shellSearchInstance = new ShellSearch();
450
+ }
451
+ return shellSearchInstance;
452
+ }
@@ -53,6 +53,10 @@ export declare class RekShell {
53
53
  private beautifyCSS;
54
54
  private runBeautifySave;
55
55
  private runSelectTable;
56
+ private runSearch;
57
+ private runSuggest;
58
+ private runExample;
59
+ private printMarkdown;
56
60
  private printHelp;
57
61
  }
58
62
  //# sourceMappingURL=shell.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"shell.d.ts","sourceRoot":"","sources":["../../../src/cli/tui/shell.ts"],"names":[],"mappings":"AAmCA,qBAAa,QAAQ;IACnB,OAAO,CAAC,EAAE,CAAsB;IAChC,OAAO,CAAC,MAAM,CAAM;IACpB,OAAO,CAAC,OAAO,CAAqB;IACpC,OAAO,CAAC,OAAO,CAAc;IAC7B,OAAO,CAAC,YAAY,CAAa;IACjC,OAAO,CAAC,SAAS,CAA2B;IAC5C,OAAO,CAAC,OAAO,CAA8B;IAC7C,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,UAAU,CAA+B;IACjD,OAAO,CAAC,aAAa,CAAc;;YAWrB,iBAAiB;IAe/B,OAAO,CAAC,SAAS;IAMjB,OAAO,CAAC,aAAa;IAUrB,OAAO,CAAC,aAAa;IAiBrB,OAAO,CAAC,SAAS;IAaJ,KAAK;IA8BlB,OAAO,CAAC,MAAM;YAKA,aAAa;YAmKb,kBAAkB;YAkBlB,SAAS;YAkBT,WAAW;IA0DzB,OAAO,CAAC,SAAS;IAMjB,OAAO,CAAC,UAAU;IAMlB,OAAO,CAAC,WAAW;IASnB,OAAO,CAAC,QAAQ;IAoCV,WAAW,CAAC,QAAQ,CAAC,EAAE,MAAM;IA6CnC,OAAO,CAAC,gBAAgB;IAqBxB,OAAO,CAAC,UAAU;YAeJ,cAAc;YAyEd,QAAQ;YA8GR,MAAM;YA2DN,MAAM;YA2EN,OAAO;YA+DP,OAAO;YA0CP,QAAQ;YAoER,SAAS;YAsCT,aAAa;YA8Bb,aAAa;YA+Bb,aAAa;YA6Bb,cAAc;YAkCd,eAAe;YA+Ef,gBAAgB;YAmEhB,YAAY;YAiEZ,mBAAmB;YAsFnB,QAAQ;YA0FR,YAAY;YAoCZ,YAAY;YA6CZ,WAAW;IA6CzB,OAAO,CAAC,UAAU;IA4GlB,OAAO,CAAC,WAAW;YAgFL,eAAe;YAkBf,cAAc;IA8C5B,OAAO,CAAC,SAAS;CAkElB"}
1
+ {"version":3,"file":"shell.d.ts","sourceRoot":"","sources":["../../../src/cli/tui/shell.ts"],"names":[],"mappings":"AAoCA,qBAAa,QAAQ;IACnB,OAAO,CAAC,EAAE,CAAsB;IAChC,OAAO,CAAC,MAAM,CAAM;IACpB,OAAO,CAAC,OAAO,CAAqB;IACpC,OAAO,CAAC,OAAO,CAAc;IAC7B,OAAO,CAAC,YAAY,CAAa;IACjC,OAAO,CAAC,SAAS,CAA2B;IAC5C,OAAO,CAAC,OAAO,CAA8B;IAC7C,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,UAAU,CAA+B;IACjD,OAAO,CAAC,aAAa,CAAc;;YAWrB,iBAAiB;IAe/B,OAAO,CAAC,SAAS;IAMjB,OAAO,CAAC,aAAa;IAUrB,OAAO,CAAC,aAAa;IAiBrB,OAAO,CAAC,SAAS;IAcJ,KAAK;IA8BlB,OAAO,CAAC,MAAM;YAKA,aAAa;YAwLb,kBAAkB;YAkBlB,SAAS;YAkBT,WAAW;IA0DzB,OAAO,CAAC,SAAS;IAMjB,OAAO,CAAC,UAAU;IAMlB,OAAO,CAAC,WAAW;IASnB,OAAO,CAAC,QAAQ;IAoCV,WAAW,CAAC,QAAQ,CAAC,EAAE,MAAM;IA6CnC,OAAO,CAAC,gBAAgB;IAqBxB,OAAO,CAAC,UAAU;YAeJ,cAAc;YAyEd,QAAQ;YA8GR,MAAM;YA2DN,MAAM;YA2EN,OAAO;YA+DP,OAAO;YA0CP,QAAQ;YAoER,SAAS;YAsCT,aAAa;YA8Bb,aAAa;YA+Bb,aAAa;YA6Bb,cAAc;YAkCd,eAAe;YA+Ef,gBAAgB;YAmEhB,YAAY;YAiEZ,mBAAmB;YAsFnB,QAAQ;YA0FR,YAAY;YAoCZ,YAAY;YA6CZ,WAAW;IA6CzB,OAAO,CAAC,UAAU;IA4GlB,OAAO,CAAC,WAAW;YAgFL,eAAe;YAkBf,cAAc;YAgDd,SAAS;YA2CT,UAAU;YAuBV,UAAU;IAwBxB,OAAO,CAAC,aAAa;IAuCrB,OAAO,CAAC,SAAS;CAwElB"}