cast-code 1.0.2 → 1.0.4
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/README.md +150 -150
- package/dist/modules/config/services/config-commands.service.js +9 -3
- package/dist/modules/config/services/config-commands.service.js.map +1 -1
- package/dist/modules/config/services/init-config.service.js +8 -3
- package/dist/modules/config/services/init-config.service.js.map +1 -1
- package/dist/modules/core/services/deep-agent.service.js +27 -7
- package/dist/modules/core/services/deep-agent.service.js.map +1 -1
- package/dist/modules/mcp/services/mcp-client.service.js +0 -3
- package/dist/modules/mcp/services/mcp-client.service.js.map +1 -1
- package/dist/modules/repl/services/commands/mcp-commands.service.js +1 -7
- package/dist/modules/repl/services/commands/mcp-commands.service.js.map +1 -1
- package/dist/modules/repl/services/repl.service.js +2 -0
- package/dist/modules/repl/services/repl.service.js.map +1 -1
- package/dist/modules/repl/services/smart-input.js +30 -30
- package/dist/modules/repl/services/smart-input.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/modules/repl/services/smart-input.ts"],"sourcesContent":["import { Colors } from '../utils/theme';\n\nexport interface Suggestion {\n text: string;\n display: string;\n description?: string;\n}\n\nexport interface SmartInputOptions {\n prompt: string;\n promptVisibleLen: number;\n getCommandSuggestions: (input: string) => Suggestion[];\n getMentionSuggestions: (partial: string) => Suggestion[];\n onSubmit: (line: string) => void;\n onCancel: () => void;\n onExit: () => void;\n onExpandToolOutput?: () => void;\n}\n\nexport class SmartInput {\n private buffer = '';\n private cursor = 0;\n\n private history: string[] = [];\n private historyIndex = -1;\n private savedBuffer = '';\n\n private suggestions: Suggestion[] = [];\n private selectedIndex = -1;\n private renderedLines = 0;\n\n private mode: 'input' | 'passive' | 'question' = 'input';\n private questionResolve: ((answer: string) => void) | null = null;\n private questionBuffer = '';\n\n private prompt: string;\n private promptLen: number;\n private opts: SmartInputOptions;\n\n private dataHandler: ((data: string) => void) | null = null;\n private terminalWidth = 80; // default\n private isPaused = false;\n\n constructor(opts: SmartInputOptions) {\n this.opts = opts;\n this.prompt = opts.prompt;\n this.promptLen = opts.promptVisibleLen;\n }\n\n start() {\n if (process.stdin.isTTY) {\n process.stdin.setRawMode(true);\n }\n process.stdin.resume();\n process.stdin.setEncoding('utf8');\n\n this.terminalWidth = process.stdout.columns || 80;\n\n // Listener para redimensionamento\n process.stdout.on('resize', () => {\n this.terminalWidth = process.stdout.columns || 80;\n });\n\n this.dataHandler = (data: string) => this.handleData(data);\n process.stdin.on('data', this.dataHandler);\n\n this.mode = 'input';\n this.render();\n }\n\n enterPassiveMode() {\n this.mode = 'passive';\n this.clearSuggestions();\n }\n\n exitPassiveMode() {\n this.mode = 'input';\n }\n\n showPrompt() {\n this.buffer = '';\n this.cursor = 0;\n this.suggestions = [];\n this.selectedIndex = -1;\n this.mode = 'input';\n this.render();\n }\n\n async question(query: string): Promise<string> {\n this.mode = 'question';\n this.questionBuffer = '';\n process.stdout.write(query + ' ');\n\n return new Promise<string>((resolve) => {\n this.questionResolve = resolve;\n });\n }\n\n async askChoice(\n message: string,\n choices: { key: string; label: string; description?: string }[],\n ): Promise<string> {\n process.stdout.write(`\\r\\n${Colors.cyan}${message}${Colors.reset}\\r\\n\\r\\n`);\n choices.forEach((ch, i) => {\n const desc = ch.description ? `${Colors.dim} - ${ch.description}${Colors.reset}` : '';\n process.stdout.write(` ${Colors.white}${i + 1}.${Colors.reset} ${Colors.bold}${ch.label}${Colors.reset}${desc}\\r\\n`);\n });\n process.stdout.write('\\r\\n');\n\n while (true) {\n const answer = await this.question(`${Colors.yellow}Choose (1-${choices.length}):${Colors.reset}`);\n const idx = parseInt(answer) - 1;\n if (idx >= 0 && idx < choices.length) {\n return choices[idx].key;\n }\n process.stdout.write(`${Colors.red} Invalid choice, try again.${Colors.reset}\\r\\n`);\n }\n }\n\n pause() {\n this.isPaused = true;\n if (this.dataHandler) {\n process.stdin.removeListener('data', this.dataHandler);\n }\n if (process.stdin.isTTY) {\n process.stdin.setRawMode(false);\n }\n this.clearSuggestions();\n process.stdout.write('\\r\\n');\n }\n\n resume() {\n this.isPaused = false;\n if (this.dataHandler) {\n process.stdin.on('data', this.dataHandler);\n }\n if (process.stdin.isTTY) {\n process.stdin.setRawMode(true);\n }\n process.stdin.resume();\n this.showPrompt();\n }\n\n destroy() {\n this.clearSuggestions();\n if (this.dataHandler) {\n process.stdin.removeListener('data', this.dataHandler);\n this.dataHandler = null;\n }\n if (process.stdin.isTTY) {\n process.stdin.setRawMode(false);\n }\n }\n\n private handleData(data: string) {\n if (this.isPaused) {\n return;\n }\n\n if (this.mode === 'passive') {\n for (const ch of data) {\n if (ch.charCodeAt(0) === 0x03) {\n this.opts.onCancel();\n }\n }\n return;\n }\n\n if (this.mode === 'question') {\n this.handleQuestionData(data);\n return;\n }\n\n this.handleInputData(data);\n }\n\n private handleQuestionData(data: string) {\n const write = (s: string) => process.stdout.write(s);\n\n for (let i = 0; i < data.length; i++) {\n const code = data.charCodeAt(i);\n\n if (code === 0x0d || code === 0x0a) {\n write('\\r\\n');\n const resolve = this.questionResolve;\n const answer = this.questionBuffer;\n this.questionResolve = null;\n this.questionBuffer = '';\n this.mode = 'input';\n if (resolve) resolve(answer);\n return;\n }\n\n if (code === 0x7f || code === 0x08) {\n if (this.questionBuffer.length > 0) {\n this.questionBuffer = this.questionBuffer.slice(0, -1);\n write('\\b \\b');\n }\n continue;\n }\n\n if (code === 0x03) {\n write('\\r\\n');\n const resolve = this.questionResolve;\n this.questionResolve = null;\n this.questionBuffer = '';\n this.mode = 'input';\n if (resolve) resolve('');\n return;\n }\n\n if (code >= 0x20) {\n this.questionBuffer += data[i];\n write(data[i]);\n }\n }\n }\n\n private handleInputData(data: string) {\n let needsRender = false;\n let bufferChanged = false;\n let i = 0;\n\n while (i < data.length) {\n if (data[i] === '\\x1b' && data[i + 1] === '[') {\n const rest = data.slice(i);\n\n if (rest.startsWith('\\x1b[A')) { this.keyUp(); i += 3; needsRender = true; continue; }\n if (rest.startsWith('\\x1b[B')) { this.keyDown(); i += 3; needsRender = true; continue; }\n if (rest.startsWith('\\x1b[C')) { this.keyRight(); i += 3; needsRender = true; continue; }\n if (rest.startsWith('\\x1b[D')) { this.keyLeft(); i += 3; needsRender = true; continue; }\n if (rest.startsWith('\\x1b[H')) { this.cursor = 0; i += 3; needsRender = true; continue; }\n if (rest.startsWith('\\x1b[F')) { this.cursor = this.buffer.length; i += 3; needsRender = true; continue; }\n if (rest.startsWith('\\x1b[3~')) { this.keyDelete(); i += 4; needsRender = true; bufferChanged = true; continue; }\n\n i++;\n continue;\n }\n\n const code = data.charCodeAt(i);\n\n switch (code) {\n case 0x0d:\n case 0x0a:\n this.keyEnter();\n i++;\n continue;\n\n case 0x09:\n this.keyTab();\n needsRender = true;\n break;\n\n case 0x7f:\n case 0x08:\n this.keyBackspace();\n needsRender = true;\n bufferChanged = true;\n break;\n\n case 0x03:\n this.keyCtrlC();\n i++;\n continue;\n\n case 0x04:\n if (this.buffer.length === 0) {\n this.clearSuggestions();\n process.stdout.write('\\r\\n');\n this.opts.onExit();\n return;\n }\n break;\n\n case 0x0c:\n this.clearSuggestions();\n process.stdout.write('\\x1b[2J\\x1b[H');\n needsRender = true;\n break;\n\n case 0x15:\n this.buffer = this.buffer.slice(this.cursor);\n this.cursor = 0;\n needsRender = true;\n bufferChanged = true;\n break;\n\n case 0x0b:\n this.buffer = this.buffer.slice(0, this.cursor);\n needsRender = true;\n bufferChanged = true;\n break;\n\n case 0x01:\n this.cursor = 0;\n needsRender = true;\n break;\n\n case 0x05:\n this.cursor = this.buffer.length;\n needsRender = true;\n break;\n\n case 0x17:\n this.deleteWordBack();\n needsRender = true;\n bufferChanged = true;\n break;\n\n case 0x0f:\n if (this.opts.onExpandToolOutput) {\n this.clearSuggestions();\n process.stdout.write('\\r\\n');\n this.opts.onExpandToolOutput();\n needsRender = true;\n }\n break;\n\n default:\n if (code >= 0x20) {\n this.buffer =\n this.buffer.slice(0, this.cursor) +\n data[i] +\n this.buffer.slice(this.cursor);\n this.cursor++;\n needsRender = true;\n bufferChanged = true;\n }\n }\n\n i++;\n }\n\n if (needsRender) {\n if (bufferChanged) {\n this.computeSuggestions();\n }\n this.render();\n }\n }\n\n private keyUp() {\n if (this.suggestions.length > 0) {\n this.selectedIndex =\n this.selectedIndex <= 0\n ? this.suggestions.length - 1\n : this.selectedIndex - 1;\n } else {\n if (this.historyIndex === -1) this.savedBuffer = this.buffer;\n if (this.historyIndex < this.history.length - 1) {\n this.historyIndex++;\n this.buffer = this.history[this.historyIndex];\n this.cursor = this.buffer.length;\n }\n }\n }\n\n private keyDown() {\n if (this.suggestions.length > 0) {\n this.selectedIndex =\n this.selectedIndex >= this.suggestions.length - 1\n ? 0\n : this.selectedIndex + 1;\n } else {\n if (this.historyIndex > 0) {\n this.historyIndex--;\n this.buffer = this.history[this.historyIndex];\n this.cursor = this.buffer.length;\n } else if (this.historyIndex === 0) {\n this.historyIndex = -1;\n this.buffer = this.savedBuffer;\n this.cursor = this.buffer.length;\n }\n }\n }\n\n private keyLeft() { if (this.cursor > 0) this.cursor--; }\n private keyRight() { if (this.cursor < this.buffer.length) this.cursor++; }\n\n private keyBackspace() {\n if (this.cursor > 0) {\n this.buffer =\n this.buffer.slice(0, this.cursor - 1) +\n this.buffer.slice(this.cursor);\n this.cursor--;\n }\n }\n\n private keyDelete() {\n if (this.cursor < this.buffer.length) {\n this.buffer =\n this.buffer.slice(0, this.cursor) +\n this.buffer.slice(this.cursor + 1);\n }\n }\n\n private keyEnter() {\n if (this.selectedIndex >= 0 && this.suggestions.length > 0) {\n this.acceptSuggestion();\n this.computeSuggestions();\n this.render();\n } else {\n this.submitLine();\n }\n }\n\n private keyTab() {\n if (this.suggestions.length > 0) {\n if (this.selectedIndex < 0) {\n this.selectedIndex = 0;\n this.acceptSuggestion();\n this.computeSuggestions();\n } else {\n this.acceptSuggestion();\n this.computeSuggestions();\n }\n }\n }\n\n private lastCtrlCTime = 0;\n\n private keyCtrlC() {\n if (this.buffer.length > 0) {\n this.buffer = '';\n this.cursor = 0;\n this.suggestions = [];\n this.selectedIndex = -1;\n this.lastCtrlCTime = Date.now();\n this.clearSuggestions();\n process.stdout.write('\\r\\n');\n this.render();\n } else {\n const now = Date.now();\n if (now - this.lastCtrlCTime < 1500) {\n this.clearSuggestions();\n process.stdout.write('\\r\\n');\n this.opts.onExit();\n return;\n }\n this.lastCtrlCTime = now;\n this.clearSuggestions();\n process.stdout.write(`\\r\\n${Colors.dim} Press Ctrl+C again to exit${Colors.reset}\\r\\n`);\n this.render();\n }\n }\n\n private deleteWordBack() {\n const before = this.buffer.slice(0, this.cursor);\n const match = before.match(/\\S+\\s*$/);\n if (match) {\n const len = match[0].length;\n this.buffer =\n this.buffer.slice(0, this.cursor - len) +\n this.buffer.slice(this.cursor);\n this.cursor -= len;\n }\n }\n\n private submitLine() {\n const line = this.buffer;\n\n this.clearSuggestions();\n process.stdout.write('\\r\\n');\n\n if (line.trim()) {\n this.history.unshift(line);\n if (this.history.length > 200) this.history.pop();\n }\n\n this.buffer = '';\n this.cursor = 0;\n this.historyIndex = -1;\n this.suggestions = [];\n this.selectedIndex = -1;\n\n this.opts.onSubmit(line);\n }\n\n private acceptSuggestion() {\n const s = this.suggestions[this.selectedIndex];\n if (!s) return;\n\n if (this.buffer.startsWith('/')) {\n this.buffer = s.text;\n this.cursor = this.buffer.length;\n } else {\n const atMatch = this.buffer.match(/@[\\w./:~\\-]*$/);\n if (atMatch && atMatch.index !== undefined) {\n this.buffer = this.buffer.slice(0, atMatch.index) + s.text;\n this.cursor = this.buffer.length;\n }\n }\n\n this.selectedIndex = -1;\n\n if (s.text.endsWith('/')) {\n this.computeSuggestions();\n }\n }\n\n private computeSuggestions() {\n this.selectedIndex = -1;\n\n if (this.buffer.startsWith('/')) {\n this.suggestions = this.opts.getCommandSuggestions(this.buffer);\n return;\n }\n\n const atMatch = this.buffer.match(/@([\\w./:~\\-]*)$/);\n if (atMatch) {\n this.suggestions = this.opts.getMentionSuggestions(atMatch[1]);\n return;\n }\n\n this.suggestions = [];\n }\n\n private calculateCursorPosition(): { row: number; col: number } {\n const totalLength = this.promptLen + this.cursor;\n const row = Math.floor(totalLength / this.terminalWidth);\n const col = (totalLength % this.terminalWidth) + 1;\n return { row, col };\n }\n\n private render() {\n const write = (s: string) => process.stdout.write(s);\n\n // Calcular quantas linhas o buffer atual ocupa\n const totalLength = this.promptLen + this.buffer.length;\n const linesUsed = Math.ceil(totalLength / this.terminalWidth);\n\n // Ir para o início do input (primeira linha do input)\n if (linesUsed > 1) {\n write(`\\x1b[${linesUsed - 1}A`); // Sobe para primeira linha do input\n }\n write('\\r'); // Volta para início da linha\n\n // Limpar todas as linhas usadas pelo input\n for (let i = 0; i < linesUsed; i++) {\n write('\\x1b[K'); // Limpa linha atual\n if (i < linesUsed - 1) write('\\n'); // Desce se não for última linha\n }\n\n // Voltar para primeira linha\n if (linesUsed > 1) {\n write(`\\x1b[${linesUsed - 1}A`);\n }\n write('\\r');\n\n // Escrever prompt + buffer\n write(this.prompt + this.buffer);\n\n // Limpar resto da tela (para sugestões antigas)\n write('\\x1b[J');\n\n this.renderedLines = 0;\n\n // Renderizar sugestões\n if (this.suggestions.length > 0) {\n const maxVisible = 10;\n const total = this.suggestions.length;\n\n let scrollStart = 0;\n if (this.selectedIndex >= 0 && total > maxVisible) {\n scrollStart = Math.max(0, Math.min(\n this.selectedIndex - Math.floor(maxVisible / 2),\n total - maxVisible,\n ));\n }\n const scrollEnd = Math.min(scrollStart + maxVisible, total);\n\n if (scrollStart > 0) {\n write(`\\r\\n ${Colors.dim}\\u2191 ${scrollStart} above${Colors.reset}`);\n this.renderedLines++;\n }\n\n for (let i = scrollStart; i < scrollEnd; i++) {\n const s = this.suggestions[i];\n const selected = i === this.selectedIndex;\n\n if (selected) {\n write(`\\r\\n ${Colors.primary}\\u276f${Colors.reset} ${Colors.bold}${Colors.primary}${s.display}${Colors.reset}`);\n } else {\n write(`\\r\\n ${Colors.dim}${s.display}${Colors.reset}`);\n }\n\n if (s.description) {\n write(` ${Colors.muted}${s.description}${Colors.reset}`);\n }\n\n this.renderedLines++;\n }\n\n const remaining = total - scrollEnd;\n if (remaining > 0) {\n write(`\\r\\n ${Colors.dim}\\u2193 ${remaining} below${Colors.reset}`);\n this.renderedLines++;\n }\n }\n\n // Voltar para linha do input se renderizou sugestões\n if (this.renderedLines > 0) {\n write(`\\x1b[${this.renderedLines}A`);\n }\n\n // Posicionar cursor corretamente considerando wrapping\n const { row, col } = this.calculateCursorPosition();\n\n if (row > 0) {\n write(`\\x1b[${row}B`); // Desce 'row' linhas\n }\n write(`\\x1b[${col}G`); // Move para coluna\n }\n\n private clearSuggestions() {\n if (this.renderedLines > 0) {\n const { row, col } = this.calculateCursorPosition();\n\n // Posiciona no fim do buffer\n if (row > 0) {\n process.stdout.write(`\\x1b[${row}B`);\n }\n process.stdout.write(`\\x1b[${col}G\\x1b[J`);\n\n this.renderedLines = 0;\n }\n }\n}\n"],"names":["SmartInput","start","process","stdin","isTTY","setRawMode","resume","setEncoding","terminalWidth","stdout","columns","on","dataHandler","data","handleData","mode","render","enterPassiveMode","clearSuggestions","exitPassiveMode","showPrompt","buffer","cursor","suggestions","selectedIndex","question","query","questionBuffer","write","Promise","resolve","questionResolve","askChoice","message","choices","Colors","cyan","reset","forEach","ch","i","desc","description","dim","white","bold","label","answer","yellow","length","idx","parseInt","key","red","pause","isPaused","removeListener","destroy","charCodeAt","opts","onCancel","handleQuestionData","handleInputData","s","code","slice","needsRender","bufferChanged","rest","startsWith","keyUp","keyDown","keyRight","keyLeft","keyDelete","keyEnter","keyTab","keyBackspace","keyCtrlC","onExit","deleteWordBack","onExpandToolOutput","computeSuggestions","historyIndex","savedBuffer","history","acceptSuggestion","submitLine","lastCtrlCTime","Date","now","before","match","len","line","trim","unshift","pop","onSubmit","text","atMatch","index","undefined","endsWith","getCommandSuggestions","getMentionSuggestions","calculateCursorPosition","totalLength","promptLen","row","Math","floor","col","linesUsed","ceil","prompt","renderedLines","maxVisible","total","scrollStart","max","min","scrollEnd","selected","primary","display","muted","remaining","promptVisibleLen"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../../src/modules/repl/services/smart-input.ts"],"sourcesContent":["import { Colors } from '../utils/theme';\n\nexport interface Suggestion {\n text: string;\n display: string;\n description?: string;\n}\n\nexport interface SmartInputOptions {\n prompt: string;\n promptVisibleLen: number;\n getCommandSuggestions: (input: string) => Suggestion[];\n getMentionSuggestions: (partial: string) => Suggestion[];\n onSubmit: (line: string) => void;\n onCancel: () => void;\n onExit: () => void;\n onExpandToolOutput?: () => void;\n}\n\nexport class SmartInput {\n private buffer = '';\n private cursor = 0;\n\n private history: string[] = [];\n private historyIndex = -1;\n private savedBuffer = '';\n\n private suggestions: Suggestion[] = [];\n private selectedIndex = -1;\n private renderedLines = 0;\n\n private mode: 'input' | 'passive' | 'question' = 'input';\n private questionResolve: ((answer: string) => void) | null = null;\n private questionBuffer = '';\n\n private prompt: string;\n private promptLen: number;\n private opts: SmartInputOptions;\n\n private dataHandler: ((data: string) => void) | null = null;\n private terminalWidth = 80;\n private isPaused = false;\n private cursorRow = 0;\n\n constructor(opts: SmartInputOptions) {\n this.opts = opts;\n this.prompt = opts.prompt;\n this.promptLen = opts.promptVisibleLen;\n }\n\n start() {\n if (process.stdin.isTTY) {\n process.stdin.setRawMode(true);\n }\n process.stdin.resume();\n process.stdin.setEncoding('utf8');\n\n this.terminalWidth = process.stdout.columns || 80;\n\n // Listener para redimensionamento\n process.stdout.on('resize', () => {\n this.terminalWidth = process.stdout.columns || 80;\n });\n\n this.dataHandler = (data: string) => this.handleData(data);\n process.stdin.on('data', this.dataHandler);\n\n this.mode = 'input';\n this.render();\n }\n\n enterPassiveMode() {\n this.mode = 'passive';\n this.clearSuggestions();\n }\n\n exitPassiveMode() {\n this.mode = 'input';\n }\n\n showPrompt() {\n this.buffer = '';\n this.cursor = 0;\n this.suggestions = [];\n this.selectedIndex = -1;\n this.cursorRow = 0;\n this.mode = 'input';\n this.render();\n }\n\n async question(query: string): Promise<string> {\n this.mode = 'question';\n this.questionBuffer = '';\n process.stdout.write(query + ' ');\n\n return new Promise<string>((resolve) => {\n this.questionResolve = resolve;\n });\n }\n\n async askChoice(\n message: string,\n choices: { key: string; label: string; description?: string }[],\n ): Promise<string> {\n process.stdout.write(`\\r\\n${Colors.cyan}${message}${Colors.reset}\\r\\n\\r\\n`);\n choices.forEach((ch, i) => {\n const desc = ch.description ? `${Colors.dim} - ${ch.description}${Colors.reset}` : '';\n process.stdout.write(` ${Colors.white}${i + 1}.${Colors.reset} ${Colors.bold}${ch.label}${Colors.reset}${desc}\\r\\n`);\n });\n process.stdout.write('\\r\\n');\n\n while (true) {\n const answer = await this.question(`${Colors.yellow}Choose (1-${choices.length}):${Colors.reset}`);\n const idx = parseInt(answer) - 1;\n if (idx >= 0 && idx < choices.length) {\n return choices[idx].key;\n }\n process.stdout.write(`${Colors.red} Invalid choice, try again.${Colors.reset}\\r\\n`);\n }\n }\n\n pause() {\n this.isPaused = true;\n if (this.dataHandler) {\n process.stdin.removeListener('data', this.dataHandler);\n }\n if (process.stdin.isTTY) {\n process.stdin.setRawMode(false);\n }\n this.clearSuggestions();\n process.stdout.write('\\r\\n');\n }\n\n resume() {\n this.isPaused = false;\n if (this.dataHandler) {\n process.stdin.on('data', this.dataHandler);\n }\n if (process.stdin.isTTY) {\n process.stdin.setRawMode(true);\n }\n process.stdin.resume();\n this.showPrompt();\n }\n\n destroy() {\n this.clearSuggestions();\n if (this.dataHandler) {\n process.stdin.removeListener('data', this.dataHandler);\n this.dataHandler = null;\n }\n if (process.stdin.isTTY) {\n process.stdin.setRawMode(false);\n }\n }\n\n private handleData(data: string) {\n if (this.isPaused) {\n return;\n }\n\n if (this.mode === 'passive') {\n for (const ch of data) {\n if (ch.charCodeAt(0) === 0x03) {\n this.opts.onCancel();\n }\n }\n return;\n }\n\n if (this.mode === 'question') {\n this.handleQuestionData(data);\n return;\n }\n\n this.handleInputData(data);\n }\n\n private handleQuestionData(data: string) {\n const write = (s: string) => process.stdout.write(s);\n\n for (let i = 0; i < data.length; i++) {\n const code = data.charCodeAt(i);\n\n if (code === 0x0d || code === 0x0a) {\n write('\\r\\n');\n const resolve = this.questionResolve;\n const answer = this.questionBuffer;\n this.questionResolve = null;\n this.questionBuffer = '';\n this.mode = 'input';\n if (resolve) resolve(answer);\n return;\n }\n\n if (code === 0x7f || code === 0x08) {\n if (this.questionBuffer.length > 0) {\n this.questionBuffer = this.questionBuffer.slice(0, -1);\n write('\\b \\b');\n }\n continue;\n }\n\n if (code === 0x03) {\n write('\\r\\n');\n const resolve = this.questionResolve;\n this.questionResolve = null;\n this.questionBuffer = '';\n this.mode = 'input';\n if (resolve) resolve('');\n return;\n }\n\n if (code >= 0x20) {\n this.questionBuffer += data[i];\n write(data[i]);\n }\n }\n }\n\n private handleInputData(data: string) {\n let needsRender = false;\n let bufferChanged = false;\n let i = 0;\n\n while (i < data.length) {\n if (data[i] === '\\x1b' && data[i + 1] === '[') {\n const rest = data.slice(i);\n\n if (rest.startsWith('\\x1b[A')) { this.keyUp(); i += 3; needsRender = true; continue; }\n if (rest.startsWith('\\x1b[B')) { this.keyDown(); i += 3; needsRender = true; continue; }\n if (rest.startsWith('\\x1b[C')) { this.keyRight(); i += 3; needsRender = true; continue; }\n if (rest.startsWith('\\x1b[D')) { this.keyLeft(); i += 3; needsRender = true; continue; }\n if (rest.startsWith('\\x1b[H')) { this.cursor = 0; i += 3; needsRender = true; continue; }\n if (rest.startsWith('\\x1b[F')) { this.cursor = this.buffer.length; i += 3; needsRender = true; continue; }\n if (rest.startsWith('\\x1b[3~')) { this.keyDelete(); i += 4; needsRender = true; bufferChanged = true; continue; }\n\n i++;\n continue;\n }\n\n const code = data.charCodeAt(i);\n\n switch (code) {\n case 0x0d:\n case 0x0a:\n this.keyEnter();\n i++;\n continue;\n\n case 0x09:\n this.keyTab();\n needsRender = true;\n break;\n\n case 0x7f:\n case 0x08:\n this.keyBackspace();\n needsRender = true;\n bufferChanged = true;\n break;\n\n case 0x03:\n this.keyCtrlC();\n i++;\n continue;\n\n case 0x04:\n if (this.buffer.length === 0) {\n this.clearSuggestions();\n process.stdout.write('\\r\\n');\n this.opts.onExit();\n return;\n }\n break;\n\n case 0x0c:\n this.clearSuggestions();\n process.stdout.write('\\x1b[2J\\x1b[H');\n needsRender = true;\n break;\n\n case 0x15:\n this.buffer = this.buffer.slice(this.cursor);\n this.cursor = 0;\n needsRender = true;\n bufferChanged = true;\n break;\n\n case 0x0b:\n this.buffer = this.buffer.slice(0, this.cursor);\n needsRender = true;\n bufferChanged = true;\n break;\n\n case 0x01:\n this.cursor = 0;\n needsRender = true;\n break;\n\n case 0x05:\n this.cursor = this.buffer.length;\n needsRender = true;\n break;\n\n case 0x17:\n this.deleteWordBack();\n needsRender = true;\n bufferChanged = true;\n break;\n\n case 0x0f:\n if (this.opts.onExpandToolOutput) {\n this.clearSuggestions();\n process.stdout.write('\\r\\n');\n this.opts.onExpandToolOutput();\n needsRender = true;\n }\n break;\n\n default:\n if (code >= 0x20) {\n this.buffer =\n this.buffer.slice(0, this.cursor) +\n data[i] +\n this.buffer.slice(this.cursor);\n this.cursor++;\n needsRender = true;\n bufferChanged = true;\n }\n }\n\n i++;\n }\n\n if (needsRender) {\n if (bufferChanged) {\n this.computeSuggestions();\n }\n this.render();\n }\n }\n\n private keyUp() {\n if (this.suggestions.length > 0) {\n this.selectedIndex =\n this.selectedIndex <= 0\n ? this.suggestions.length - 1\n : this.selectedIndex - 1;\n } else {\n if (this.historyIndex === -1) this.savedBuffer = this.buffer;\n if (this.historyIndex < this.history.length - 1) {\n this.historyIndex++;\n this.buffer = this.history[this.historyIndex];\n this.cursor = this.buffer.length;\n }\n }\n }\n\n private keyDown() {\n if (this.suggestions.length > 0) {\n this.selectedIndex =\n this.selectedIndex >= this.suggestions.length - 1\n ? 0\n : this.selectedIndex + 1;\n } else {\n if (this.historyIndex > 0) {\n this.historyIndex--;\n this.buffer = this.history[this.historyIndex];\n this.cursor = this.buffer.length;\n } else if (this.historyIndex === 0) {\n this.historyIndex = -1;\n this.buffer = this.savedBuffer;\n this.cursor = this.buffer.length;\n }\n }\n }\n\n private keyLeft() { if (this.cursor > 0) this.cursor--; }\n private keyRight() { if (this.cursor < this.buffer.length) this.cursor++; }\n\n private keyBackspace() {\n if (this.cursor > 0) {\n this.buffer =\n this.buffer.slice(0, this.cursor - 1) +\n this.buffer.slice(this.cursor);\n this.cursor--;\n }\n }\n\n private keyDelete() {\n if (this.cursor < this.buffer.length) {\n this.buffer =\n this.buffer.slice(0, this.cursor) +\n this.buffer.slice(this.cursor + 1);\n }\n }\n\n private keyEnter() {\n if (this.selectedIndex >= 0 && this.suggestions.length > 0) {\n this.acceptSuggestion();\n this.computeSuggestions();\n this.render();\n } else {\n this.submitLine();\n }\n }\n\n private keyTab() {\n if (this.suggestions.length > 0) {\n if (this.selectedIndex < 0) {\n this.selectedIndex = 0;\n this.acceptSuggestion();\n this.computeSuggestions();\n } else {\n this.acceptSuggestion();\n this.computeSuggestions();\n }\n }\n }\n\n private lastCtrlCTime = 0;\n\n private keyCtrlC() {\n if (this.buffer.length > 0) {\n this.buffer = '';\n this.cursor = 0;\n this.suggestions = [];\n this.selectedIndex = -1;\n this.lastCtrlCTime = Date.now();\n this.clearSuggestions();\n process.stdout.write('\\r\\n');\n this.render();\n } else {\n const now = Date.now();\n if (now - this.lastCtrlCTime < 1500) {\n this.clearSuggestions();\n process.stdout.write('\\r\\n');\n this.opts.onExit();\n return;\n }\n this.lastCtrlCTime = now;\n this.clearSuggestions();\n process.stdout.write(`\\r\\n${Colors.dim} Press Ctrl+C again to exit${Colors.reset}\\r\\n`);\n this.render();\n }\n }\n\n private deleteWordBack() {\n const before = this.buffer.slice(0, this.cursor);\n const match = before.match(/\\S+\\s*$/);\n if (match) {\n const len = match[0].length;\n this.buffer =\n this.buffer.slice(0, this.cursor - len) +\n this.buffer.slice(this.cursor);\n this.cursor -= len;\n }\n }\n\n private submitLine() {\n const line = this.buffer;\n\n this.clearSuggestions();\n process.stdout.write('\\r\\n');\n\n if (line.trim()) {\n this.history.unshift(line);\n if (this.history.length > 200) this.history.pop();\n }\n\n this.buffer = '';\n this.cursor = 0;\n this.historyIndex = -1;\n this.suggestions = [];\n this.selectedIndex = -1;\n\n this.opts.onSubmit(line);\n }\n\n private acceptSuggestion() {\n const s = this.suggestions[this.selectedIndex];\n if (!s) return;\n\n if (this.buffer.startsWith('/')) {\n this.buffer = s.text;\n this.cursor = this.buffer.length;\n } else {\n const atMatch = this.buffer.match(/@[\\w./:~\\-]*$/);\n if (atMatch && atMatch.index !== undefined) {\n this.buffer = this.buffer.slice(0, atMatch.index) + s.text;\n this.cursor = this.buffer.length;\n }\n }\n\n this.selectedIndex = -1;\n\n if (s.text.endsWith('/')) {\n this.computeSuggestions();\n }\n }\n\n private computeSuggestions() {\n this.selectedIndex = -1;\n\n if (this.buffer.startsWith('/')) {\n this.suggestions = this.opts.getCommandSuggestions(this.buffer);\n return;\n }\n\n const atMatch = this.buffer.match(/@([\\w./:~\\-]*)$/);\n if (atMatch) {\n this.suggestions = this.opts.getMentionSuggestions(atMatch[1]);\n return;\n }\n\n this.suggestions = [];\n }\n\n private calculateCursorPosition(): { row: number; col: number } {\n const totalLength = this.promptLen + this.cursor;\n const row = Math.floor(totalLength / this.terminalWidth);\n const col = (totalLength % this.terminalWidth) + 1;\n return { row, col };\n }\n\n private render() {\n const write = (s: string) => process.stdout.write(s);\n\n const totalLength = this.promptLen + this.buffer.length;\n const linesUsed = Math.max(1, Math.ceil(totalLength / this.terminalWidth));\n const exactWrap = totalLength > 0 && totalLength % this.terminalWidth === 0;\n\n if (this.cursorRow > 0) {\n write(`\\x1b[${this.cursorRow}A`);\n }\n write('\\r');\n\n const linesToClear = linesUsed + (exactWrap ? 1 : 0);\n for (let i = 0; i < linesToClear; i++) {\n write('\\x1b[K');\n if (i < linesToClear - 1) write('\\n');\n }\n\n if (linesToClear > 1) {\n write(`\\x1b[${linesToClear - 1}A`);\n }\n write('\\r');\n\n write(this.prompt + this.buffer);\n\n write('\\x1b[J');\n\n this.renderedLines = 0;\n\n if (this.suggestions.length > 0) {\n const maxVisible = 10;\n const total = this.suggestions.length;\n\n let scrollStart = 0;\n if (this.selectedIndex >= 0 && total > maxVisible) {\n scrollStart = Math.max(0, Math.min(\n this.selectedIndex - Math.floor(maxVisible / 2),\n total - maxVisible,\n ));\n }\n const scrollEnd = Math.min(scrollStart + maxVisible, total);\n\n if (scrollStart > 0) {\n write(`\\r\\n ${Colors.dim}\\u2191 ${scrollStart} above${Colors.reset}`);\n this.renderedLines++;\n }\n\n for (let i = scrollStart; i < scrollEnd; i++) {\n const s = this.suggestions[i];\n const selected = i === this.selectedIndex;\n\n if (selected) {\n write(`\\r\\n ${Colors.primary}\\u276f${Colors.reset} ${Colors.bold}${Colors.primary}${s.display}${Colors.reset}`);\n } else {\n write(`\\r\\n ${Colors.dim}${s.display}${Colors.reset}`);\n }\n\n if (s.description) {\n write(` ${Colors.muted}${s.description}${Colors.reset}`);\n }\n\n this.renderedLines++;\n }\n\n const remaining = total - scrollEnd;\n if (remaining > 0) {\n write(`\\r\\n ${Colors.dim}\\u2193 ${remaining} below${Colors.reset}`);\n this.renderedLines++;\n }\n }\n\n if (this.renderedLines > 0) {\n write(`\\x1b[${this.renderedLines}A`);\n }\n\n const { row: targetRow, col: targetCol } = this.calculateCursorPosition();\n const afterWriteRow = exactWrap ? linesUsed : linesUsed - 1;\n const delta = targetRow - afterWriteRow;\n\n if (delta > 0) write(`\\x1b[${delta}B`);\n else if (delta < 0) write(`\\x1b[${-delta}A`);\n write(`\\x1b[${targetCol}G`);\n\n this.cursorRow = targetRow;\n }\n\n private clearSuggestions() {\n if (this.renderedLines > 0) {\n const totalLength = this.promptLen + this.buffer.length;\n const linesUsed = Math.max(1, Math.ceil(totalLength / this.terminalWidth));\n const exactWrap = totalLength > 0 && totalLength % this.terminalWidth === 0;\n const afterWriteRow = exactWrap ? linesUsed : linesUsed - 1;\n const afterWriteCol = exactWrap ? 1 : (totalLength % this.terminalWidth) + 1;\n\n const delta = afterWriteRow - this.cursorRow;\n if (delta > 0) process.stdout.write(`\\x1b[${delta}B`);\n else if (delta < 0) process.stdout.write(`\\x1b[${-delta}A`);\n process.stdout.write(`\\x1b[${afterWriteCol}G\\x1b[J`);\n\n this.renderedLines = 0;\n }\n }\n}\n"],"names":["SmartInput","start","process","stdin","isTTY","setRawMode","resume","setEncoding","terminalWidth","stdout","columns","on","dataHandler","data","handleData","mode","render","enterPassiveMode","clearSuggestions","exitPassiveMode","showPrompt","buffer","cursor","suggestions","selectedIndex","cursorRow","question","query","questionBuffer","write","Promise","resolve","questionResolve","askChoice","message","choices","Colors","cyan","reset","forEach","ch","i","desc","description","dim","white","bold","label","answer","yellow","length","idx","parseInt","key","red","pause","isPaused","removeListener","destroy","charCodeAt","opts","onCancel","handleQuestionData","handleInputData","s","code","slice","needsRender","bufferChanged","rest","startsWith","keyUp","keyDown","keyRight","keyLeft","keyDelete","keyEnter","keyTab","keyBackspace","keyCtrlC","onExit","deleteWordBack","onExpandToolOutput","computeSuggestions","historyIndex","savedBuffer","history","acceptSuggestion","submitLine","lastCtrlCTime","Date","now","before","match","len","line","trim","unshift","pop","onSubmit","text","atMatch","index","undefined","endsWith","getCommandSuggestions","getMentionSuggestions","calculateCursorPosition","totalLength","promptLen","row","Math","floor","col","linesUsed","max","ceil","exactWrap","linesToClear","prompt","renderedLines","maxVisible","total","scrollStart","min","scrollEnd","selected","primary","display","muted","remaining","targetRow","targetCol","afterWriteRow","delta","afterWriteCol","promptVisibleLen"],"mappings":"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"}
|