cast-code 1.0.9 → 1.0.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/modules/core/services/deep-agent.service.js +1 -1
- package/dist/modules/core/services/deep-agent.service.js.map +1 -1
- package/dist/modules/kanban/kanban.module.js +36 -0
- package/dist/modules/kanban/kanban.module.js.map +1 -0
- package/dist/modules/kanban/services/kanban-server.service.js +322 -0
- package/dist/modules/kanban/services/kanban-server.service.js.map +1 -0
- package/dist/modules/kanban/views/kanban-ui.js +858 -0
- package/dist/modules/kanban/views/kanban-ui.js.map +1 -0
- package/dist/modules/mentions/services/mentions.service.js +3 -3
- package/dist/modules/mentions/services/mentions.service.js.map +1 -1
- package/dist/modules/permissions/services/prompt.service.js +17 -70
- package/dist/modules/permissions/services/prompt.service.js.map +1 -1
- package/dist/modules/repl/repl.module.js +3 -1
- package/dist/modules/repl/repl.module.js.map +1 -1
- package/dist/modules/repl/services/commands/project-commands.service.js +7 -9
- package/dist/modules/repl/services/commands/project-commands.service.js.map +1 -1
- package/dist/modules/repl/services/repl.service.js +112 -38
- package/dist/modules/repl/services/repl.service.js.map +1 -1
- package/dist/modules/repl/services/smart-input.js +2 -2
- package/dist/modules/repl/services/smart-input.js.map +1 -1
- package/dist/modules/tasks/services/plan-executor.service.js +2 -2
- package/dist/modules/tasks/services/plan-executor.service.js.map +1 -1
- package/dist/modules/tasks/services/plan-mode.service.js +11 -10
- package/dist/modules/tasks/services/plan-mode.service.js.map +1 -1
- package/dist/modules/tasks/services/task-management.service.js +54 -21
- package/dist/modules/tasks/services/task-management.service.js.map +1 -1
- package/dist/modules/tasks/services/task-tools.service.js +2 -2
- package/dist/modules/tasks/services/task-tools.service.js.map +1 -1
- package/dist/modules/tasks/types/task.types.js.map +1 -1
- package/package.json +1 -1
|
@@ -26,6 +26,7 @@ const _mcpcommandsservice = require("./commands/mcp-commands.service");
|
|
|
26
26
|
const _configcommandsservice = require("../../config/services/config-commands.service");
|
|
27
27
|
const _projectcommandsservice = require("./commands/project-commands.service");
|
|
28
28
|
const _toolsregistryservice = require("../../tools/services/tools-registry.service");
|
|
29
|
+
const _kanbanserverservice = require("../../kanban/services/kanban-server.service");
|
|
29
30
|
const _theme = require("../utils/theme");
|
|
30
31
|
function _ts_decorate(decorators, target, key, desc) {
|
|
31
32
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
@@ -193,6 +194,11 @@ let ReplService = class ReplService {
|
|
|
193
194
|
text: '/mcp',
|
|
194
195
|
display: '/mcp',
|
|
195
196
|
description: 'MCP servers'
|
|
197
|
+
},
|
|
198
|
+
{
|
|
199
|
+
text: '/kanban',
|
|
200
|
+
display: '/kanban',
|
|
201
|
+
description: 'Open kanban board'
|
|
196
202
|
}
|
|
197
203
|
];
|
|
198
204
|
return commands.filter((c)=>c.text.startsWith(input));
|
|
@@ -232,46 +238,104 @@ let ReplService = class ReplService {
|
|
|
232
238
|
...this.getFileEntries(partial)
|
|
233
239
|
].slice(0, 30);
|
|
234
240
|
}
|
|
241
|
+
getCachedFiles() {
|
|
242
|
+
const now = Date.now();
|
|
243
|
+
if (this.fileCache && now - this.lastCacheTime < 5000) {
|
|
244
|
+
return this.fileCache;
|
|
245
|
+
}
|
|
246
|
+
const fs = require('fs');
|
|
247
|
+
const path = require('path');
|
|
248
|
+
const ignore = [
|
|
249
|
+
'node_modules',
|
|
250
|
+
'.git',
|
|
251
|
+
'dist',
|
|
252
|
+
'coverage',
|
|
253
|
+
'.next',
|
|
254
|
+
'__pycache__'
|
|
255
|
+
];
|
|
256
|
+
const results = [];
|
|
257
|
+
const walk = (dir)=>{
|
|
258
|
+
try {
|
|
259
|
+
const entries = fs.readdirSync(dir, {
|
|
260
|
+
withFileTypes: true
|
|
261
|
+
});
|
|
262
|
+
for (const e of entries){
|
|
263
|
+
if (ignore.includes(e.name)) continue;
|
|
264
|
+
if (e.name.startsWith('.') && e.name !== '.cast' && e.name !== '.claude') continue;
|
|
265
|
+
const fullPath = path.join(dir, e.name);
|
|
266
|
+
const relPath = path.relative(process.cwd(), fullPath);
|
|
267
|
+
if (e.isDirectory()) {
|
|
268
|
+
walk(fullPath);
|
|
269
|
+
} else {
|
|
270
|
+
results.push(relPath);
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
} catch {}
|
|
274
|
+
};
|
|
275
|
+
walk(process.cwd());
|
|
276
|
+
this.fileCache = results;
|
|
277
|
+
this.lastCacheTime = now;
|
|
278
|
+
return results;
|
|
279
|
+
}
|
|
235
280
|
getFileEntries(partial) {
|
|
236
281
|
const fs = require('fs');
|
|
237
282
|
const path = require('path');
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
283
|
+
if (partial === '' || partial.includes('/') || partial.startsWith('.')) {
|
|
284
|
+
try {
|
|
285
|
+
let dir;
|
|
286
|
+
let prefix;
|
|
287
|
+
if (partial.endsWith('/')) {
|
|
288
|
+
dir = partial.slice(0, -1) || '.';
|
|
289
|
+
prefix = '';
|
|
290
|
+
} else if (partial.includes('/')) {
|
|
291
|
+
dir = path.dirname(partial);
|
|
292
|
+
prefix = path.basename(partial);
|
|
293
|
+
} else {
|
|
294
|
+
dir = '.';
|
|
295
|
+
prefix = partial;
|
|
296
|
+
}
|
|
297
|
+
const resolved = path.resolve(process.cwd(), dir);
|
|
298
|
+
if (!fs.existsSync(resolved) || !fs.statSync(resolved).isDirectory()) return [];
|
|
299
|
+
const entries = fs.readdirSync(resolved, {
|
|
300
|
+
withFileTypes: true
|
|
301
|
+
});
|
|
302
|
+
const ignore = [
|
|
303
|
+
'node_modules',
|
|
304
|
+
'.git',
|
|
305
|
+
'dist',
|
|
306
|
+
'coverage',
|
|
307
|
+
'.next',
|
|
308
|
+
'__pycache__'
|
|
309
|
+
];
|
|
310
|
+
return entries.filter((e)=>!ignore.includes(e.name)).filter((e)=>!e.name.startsWith('.') || prefix.startsWith('.') || e.name === '.cast' || e.name === '.claude').filter((e)=>prefix === '' || e.name.toLowerCase().startsWith(prefix.toLowerCase())).map((e)=>{
|
|
311
|
+
const relDir = dir === '.' ? '' : dir + '/';
|
|
312
|
+
const isDir = e.isDirectory();
|
|
313
|
+
return {
|
|
314
|
+
text: '@' + relDir + e.name + (isDir ? '/' : ''),
|
|
315
|
+
display: '@' + relDir + e.name + (isDir ? '/' : ''),
|
|
316
|
+
description: isDir ? 'dir' : ''
|
|
317
|
+
};
|
|
318
|
+
}).slice(0, 20);
|
|
319
|
+
} catch {
|
|
320
|
+
return [];
|
|
250
321
|
}
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
const
|
|
254
|
-
|
|
322
|
+
} else {
|
|
323
|
+
const allFiles = this.getCachedFiles();
|
|
324
|
+
const lowerPartial = partial.toLowerCase();
|
|
325
|
+
const matched = allFiles.filter((f)=>f.toLowerCase().includes(lowerPartial)).sort((a, b)=>{
|
|
326
|
+
const aName = path.basename(a).toLowerCase();
|
|
327
|
+
const bName = path.basename(b).toLowerCase();
|
|
328
|
+
const aStarts = aName.startsWith(lowerPartial);
|
|
329
|
+
const bStarts = bName.startsWith(lowerPartial);
|
|
330
|
+
if (aStarts && !bStarts) return -1;
|
|
331
|
+
if (!aStarts && bStarts) return 1;
|
|
332
|
+
return a.length - b.length;
|
|
255
333
|
});
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
'.next',
|
|
262
|
-
'__pycache__'
|
|
263
|
-
];
|
|
264
|
-
return entries.filter((e)=>!ignore.includes(e.name)).filter((e)=>!e.name.startsWith('.') || prefix.startsWith('.')).filter((e)=>prefix === '' || e.name.toLowerCase().startsWith(prefix.toLowerCase())).map((e)=>{
|
|
265
|
-
const relDir = dir === '.' ? '' : dir + '/';
|
|
266
|
-
const isDir = e.isDirectory();
|
|
267
|
-
return {
|
|
268
|
-
text: '@' + relDir + e.name + (isDir ? '/' : ''),
|
|
269
|
-
display: '@' + relDir + e.name + (isDir ? '/' : ''),
|
|
270
|
-
description: isDir ? 'dir' : ''
|
|
271
|
-
};
|
|
272
|
-
}).slice(0, 20);
|
|
273
|
-
} catch {
|
|
274
|
-
return [];
|
|
334
|
+
return matched.slice(0, 20).map((f)=>({
|
|
335
|
+
text: '@' + f,
|
|
336
|
+
display: '@' + f,
|
|
337
|
+
description: 'file'
|
|
338
|
+
}));
|
|
275
339
|
}
|
|
276
340
|
}
|
|
277
341
|
handleCancel() {
|
|
@@ -392,9 +456,15 @@ let ReplService = class ReplService {
|
|
|
392
456
|
await this.projectCommands.cmdProject(args, this.smartInput);
|
|
393
457
|
break;
|
|
394
458
|
case 'project-deep':
|
|
395
|
-
await this.projectCommands.cmdProject([
|
|
459
|
+
const deepResult = await this.projectCommands.cmdProject([
|
|
396
460
|
'deep'
|
|
397
461
|
], this.smartInput);
|
|
462
|
+
if (typeof deepResult === 'string') {
|
|
463
|
+
return await this.handleMessage(deepResult);
|
|
464
|
+
}
|
|
465
|
+
break;
|
|
466
|
+
case 'kanban':
|
|
467
|
+
this.kanbanServer.start();
|
|
398
468
|
break;
|
|
399
469
|
default:
|
|
400
470
|
process.stdout.write(`${_theme.Colors.red} Unknown: /${cmd}${_theme.Colors.reset} ${_theme.Colors.dim}Try /help${_theme.Colors.reset}\r\n`);
|
|
@@ -610,7 +680,7 @@ let ReplService = class ReplService {
|
|
|
610
680
|
this.stopSpinner();
|
|
611
681
|
this.smartInput?.destroy();
|
|
612
682
|
}
|
|
613
|
-
constructor(deepAgent, configService, configManager, mentionsService, mcpRegistry, agentRegistry, skillRegistry, welcomeScreen, planMode, replCommands, gitCommands, agentCommands, mcpCommands, configCommands, projectCommands, toolsRegistry){
|
|
683
|
+
constructor(deepAgent, configService, configManager, mentionsService, mcpRegistry, agentRegistry, skillRegistry, welcomeScreen, planMode, replCommands, gitCommands, agentCommands, mcpCommands, configCommands, projectCommands, toolsRegistry, kanbanServer){
|
|
614
684
|
this.deepAgent = deepAgent;
|
|
615
685
|
this.configService = configService;
|
|
616
686
|
this.configManager = configManager;
|
|
@@ -627,10 +697,13 @@ let ReplService = class ReplService {
|
|
|
627
697
|
this.configCommands = configCommands;
|
|
628
698
|
this.projectCommands = projectCommands;
|
|
629
699
|
this.toolsRegistry = toolsRegistry;
|
|
700
|
+
this.kanbanServer = kanbanServer;
|
|
630
701
|
this.smartInput = null;
|
|
631
702
|
this.abortController = null;
|
|
632
703
|
this.isProcessing = false;
|
|
633
704
|
this.spinnerTimer = null;
|
|
705
|
+
this.fileCache = null;
|
|
706
|
+
this.lastCacheTime = 0;
|
|
634
707
|
}
|
|
635
708
|
};
|
|
636
709
|
ReplService = _ts_decorate([
|
|
@@ -652,7 +725,8 @@ ReplService = _ts_decorate([
|
|
|
652
725
|
typeof _mcpcommandsservice.McpCommandsService === "undefined" ? Object : _mcpcommandsservice.McpCommandsService,
|
|
653
726
|
typeof _configcommandsservice.ConfigCommandsService === "undefined" ? Object : _configcommandsservice.ConfigCommandsService,
|
|
654
727
|
typeof _projectcommandsservice.ProjectCommandsService === "undefined" ? Object : _projectcommandsservice.ProjectCommandsService,
|
|
655
|
-
typeof _toolsregistryservice.ToolsRegistryService === "undefined" ? Object : _toolsregistryservice.ToolsRegistryService
|
|
728
|
+
typeof _toolsregistryservice.ToolsRegistryService === "undefined" ? Object : _toolsregistryservice.ToolsRegistryService,
|
|
729
|
+
typeof _kanbanserverservice.KanbanServerService === "undefined" ? Object : _kanbanserverservice.KanbanServerService
|
|
656
730
|
])
|
|
657
731
|
], ReplService);
|
|
658
732
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/modules/repl/services/repl.service.ts"],"sourcesContent":["import { Injectable } from '@nestjs/common';\nimport { DeepAgentService } from '../../core/services/deep-agent.service';\nimport { ConfigService } from '../../../common/services/config.service';\nimport { ConfigManagerService } from '../../config/services/config-manager.service';\nimport { MentionsService } from '../../mentions/services/mentions.service';\nimport { McpRegistryService } from '../../mcp/services/mcp-registry.service';\nimport { AgentRegistryService } from '../../agents/services/agent-registry.service';\nimport { SkillRegistryService } from '../../skills/services/skill-registry.service';\nimport { PlanModeService } from '../../core/services/plan-mode.service';\nimport { SmartInput } from './smart-input';\nimport { WelcomeScreenService } from './welcome-screen.service';\nimport { ReplCommandsService } from './commands/repl-commands.service';\nimport { GitCommandsService } from './commands/git-commands.service';\nimport { AgentCommandsService } from './commands/agent-commands.service';\nimport { McpCommandsService } from './commands/mcp-commands.service';\nimport { ConfigCommandsService } from '../../config/services/config-commands.service';\nimport { ProjectCommandsService } from './commands/project-commands.service';\nimport { ToolsRegistryService } from '../../tools/services/tools-registry.service';\nimport { Colors, Icons } from '../utils/theme';\n\n@Injectable()\nexport class ReplService {\n private smartInput: SmartInput | null = null;\n private abortController: AbortController | null = null;\n private isProcessing = false;\n private spinnerTimer: ReturnType<typeof setInterval> | null = null;\n\n constructor(\n private readonly deepAgent: DeepAgentService,\n private readonly configService: ConfigService,\n private readonly configManager: ConfigManagerService,\n private readonly mentionsService: MentionsService,\n private readonly mcpRegistry: McpRegistryService,\n private readonly agentRegistry: AgentRegistryService,\n private readonly skillRegistry: SkillRegistryService,\n private readonly welcomeScreen: WelcomeScreenService,\n private readonly planMode: PlanModeService,\n private readonly replCommands: ReplCommandsService,\n private readonly gitCommands: GitCommandsService,\n private readonly agentCommands: AgentCommandsService,\n private readonly mcpCommands: McpCommandsService,\n private readonly configCommands: ConfigCommandsService,\n private readonly projectCommands: ProjectCommandsService,\n private readonly toolsRegistry: ToolsRegistryService,\n ) {}\n\n async start(): Promise<void> {\n const initResult = await this.deepAgent.initialize();\n const agentCount = this.agentRegistry.resolveAllAgents().length;\n\n this.welcomeScreen.printWelcomeScreen({\n projectPath: initResult.projectPath || undefined,\n model: this.getModelDisplayName(),\n toolCount: initResult.toolCount,\n agentCount,\n });\n\n this.smartInput = new SmartInput({\n prompt: `${Colors.cyan}${Colors.bold}>${Colors.reset} `,\n promptVisibleLen: 2,\n getCommandSuggestions: (input) => this.getCommandSuggestions(input),\n getMentionSuggestions: (partial) => this.getMentionSuggestions(partial),\n onSubmit: (line) => this.handleLine(line),\n onCancel: () => this.handleCancel(),\n onExit: () => this.handleExit(),\n });\n\n this.smartInput.start();\n }\n\n private getCommandSuggestions(input: string): Array<{ text: string; display: string; description: string }> {\n const commands = [\n { text: '/help', display: '/help', description: 'Show help' },\n { text: '/clear', display: '/clear', description: 'Clear conversation' },\n { text: '/compact', display: '/compact', description: 'Compact history' },\n { text: '/exit', display: '/exit', description: 'Exit' },\n { text: '/status', display: '/status', description: 'Git status' },\n { text: '/diff', display: '/diff', description: 'Git diff' },\n { text: '/log', display: '/log', description: 'Git log' },\n { text: '/commit', display: '/commit', description: 'Commit changes' },\n { text: '/up', display: '/up', description: 'Smart commit & push' },\n { text: '/split-up', display: '/split-up', description: 'Split commits' },\n { text: '/pr', display: '/pr', description: 'Create Pull Request' },\n { text: '/unit-test', display: '/unit-test', description: 'Generate unit tests' },\n { text: '/review', display: '/review', description: 'Code review' },\n { text: '/fix', display: '/fix', description: 'Auto-fix code' },\n { text: '/ident', display: '/ident', description: 'Format code' },\n { text: '/release', display: '/release', description: 'Release notes' },\n { text: '/tools', display: '/tools', description: 'List tools' },\n { text: '/agents', display: '/agents', description: 'List agents' },\n { text: '/skills', display: '/skills', description: 'List skills' },\n { text: '/context', display: '/context', description: 'Session info' },\n { text: '/mentions', display: '/mentions', description: 'Mentions help' },\n { text: '/model', display: '/model', description: 'Show model' },\n { text: '/config', display: '/config', description: 'Configuration' },\n { text: '/project', display: '/project', description: 'Project context' },\n { text: '/project-deep', display: '/project-deep', description: 'Deep project analysis' },\n { text: '/init', display: '/init', description: 'Analyze project and generate context' },\n { text: '/mcp', display: '/mcp', description: 'MCP servers' },\n ];\n\n return commands.filter(c => c.text.startsWith(input));\n }\n\n private getMentionSuggestions(partial: string): Array<{ text: string; display: string; description: string }> {\n const fs = require('fs');\n const path = require('path');\n\n const gitOpts = [\n { text: '@git:status', display: '@git:status', description: 'Git status' },\n { text: '@git:diff', display: '@git:diff', description: 'Git diff' },\n { text: '@git:log', display: '@git:log', description: 'Git log' },\n { text: '@git:branch', display: '@git:branch', description: 'Branches' },\n ];\n\n if (partial === '') return [...gitOpts, ...this.getFileEntries('')];\n if (partial.startsWith('git:')) return gitOpts.filter(o => o.text.startsWith('@' + partial));\n\n return [...gitOpts.filter(o => o.text.startsWith('@' + partial)), ...this.getFileEntries(partial)].slice(0, 30);\n }\n\n private getFileEntries(partial: string): Array<{ text: string; display: string; description: string }> {\n const fs = require('fs');\n const path = require('path');\n\n try {\n let dir: string;\n let prefix: string;\n\n if (partial.endsWith('/')) {\n dir = partial.slice(0, -1) || '.';\n prefix = '';\n } else if (partial.includes('/')) {\n dir = path.dirname(partial);\n prefix = path.basename(partial);\n } else {\n dir = '.';\n prefix = partial;\n }\n\n const resolved = path.resolve(process.cwd(), dir);\n if (!fs.existsSync(resolved) || !fs.statSync(resolved).isDirectory()) return [];\n\n const entries = fs.readdirSync(resolved, { withFileTypes: true });\n const ignore = ['node_modules', '.git', 'dist', 'coverage', '.next', '__pycache__'];\n\n return entries\n .filter(e => !ignore.includes(e.name))\n .filter(e => !e.name.startsWith('.') || prefix.startsWith('.'))\n .filter(e => prefix === '' || e.name.toLowerCase().startsWith(prefix.toLowerCase()))\n .map(e => {\n const relDir = dir === '.' ? '' : dir + '/';\n const isDir = e.isDirectory();\n return {\n text: '@' + relDir + e.name + (isDir ? '/' : ''),\n display: '@' + relDir + e.name + (isDir ? '/' : ''),\n description: isDir ? 'dir' : '',\n };\n })\n .slice(0, 20);\n } catch {\n return [];\n }\n }\n\n private handleCancel(): void {\n if (this.isProcessing && this.abortController) {\n this.abortController.abort();\n this.stopSpinner();\n process.stdout.write(`\\r\\n${Colors.yellow} Cancelled${Colors.reset}\\r\\n\\r\\n`);\n this.isProcessing = false;\n } else {\n process.stdout.write(`${Colors.dim} (Use /exit to quit)${Colors.reset}\\r\\n`);\n this.smartInput?.showPrompt();\n }\n }\n\n private handleExit(): void {\n process.stdout.write(`${Colors.dim} Goodbye!${Colors.reset}\\r\\n`);\n this.stop();\n process.exit(0);\n }\n\n private async handleLine(input: string): Promise<void> {\n const trimmed = input.trim();\n\n if (!trimmed) {\n this.smartInput?.showPrompt();\n return;\n }\n\n if (trimmed.startsWith('/')) {\n await this.handleCommand(trimmed);\n } else {\n await this.handleMessage(trimmed);\n }\n\n this.smartInput?.showPrompt();\n }\n\n private async handleCommand(command: string): Promise<void> {\n const parts = command.slice(1).split(/\\s+/);\n const cmd = parts[0].toLowerCase();\n const args = parts.slice(1);\n\n switch (cmd) {\n case 'help': this.replCommands.printHelp(); break;\n case 'clear': this.replCommands.cmdClear(this.welcomeScreen); break;\n case 'exit':\n case 'quit': this.handleExit(); return;\n case 'compact': await this.handleCompact(); break;\n case 'context': this.replCommands.cmdContext(); break;\n case 'config':\n await this.configCommands.handleConfigCommand(args, this.smartInput!);\n await this.configManager.loadConfig();\n await this.deepAgent.reinitializeModel();\n break;\n case 'model': this.replCommands.cmdModel(args); break;\n case 'init':\n await this.projectCommands.cmdProject(['analyze'], this.smartInput!);\n break;\n case 'mentions': this.replCommands.cmdMentionsHelp(); break;\n case 'tools': this.cmdTools(); break;\n\n case 'status': this.gitCommands.runGit('git status'); break;\n case 'diff': this.gitCommands.runGit(args.length ? `git diff ${args.join(' ')}` : 'git diff'); break;\n case 'log': this.gitCommands.runGit('git log --oneline -15'); break;\n case 'commit': \n await this.gitCommands.cmdCommit(args, this.smartInput!); \n break;\n case 'up': \n await this.gitCommands.cmdUp(this.smartInput!); \n break;\n case 'split-up': \n await this.gitCommands.cmdSplitUp(this.smartInput!); \n break;\n case 'pr': \n await this.gitCommands.cmdPr(this.smartInput!); \n break;\n case 'unit-test':\n await this.gitCommands.cmdUnitTest(this.smartInput!);\n break;\n case 'review': await this.gitCommands.cmdReview(args); break;\n case 'fix': await this.gitCommands.cmdFix(args); break;\n case 'ident': await this.gitCommands.cmdIdent(); break;\n case 'release': await this.gitCommands.cmdRelease(args); break;\n\n case 'agents': \n await this.agentCommands.cmdAgents(args, this.smartInput!); \n break;\n case 'skills': \n await this.agentCommands.cmdSkills(args, this.smartInput!); \n break;\n\n case 'mcp': \n await this.mcpCommands.cmdMcp(args, this.smartInput!); \n break;\n\n case 'project':\n await this.projectCommands.cmdProject(args, this.smartInput!);\n break;\n case 'project-deep':\n await this.projectCommands.cmdProject(['deep'], this.smartInput!);\n break;\n\n default:\n process.stdout.write(`${Colors.red} Unknown: /${cmd}${Colors.reset} ${Colors.dim}Try /help${Colors.reset}\\r\\n`);\n }\n }\n\n private async handleCompact(): Promise<void> {\n const msgCount = this.deepAgent.getMessageCount();\n if (msgCount < 4) {\n process.stdout.write(`${Colors.dim} Nothing to compact (${msgCount} messages)${Colors.reset}\\r\\n`);\n return;\n }\n process.stdout.write(`${Colors.dim} Summarizing ${msgCount} messages...${Colors.reset}\\r\\n`);\n const result = await this.deepAgent.compactHistory();\n if (result.compacted) {\n process.stdout.write(`${Colors.green} Compacted: ${result.messagesBefore} → ${result.messagesAfter} messages${Colors.reset}\\r\\n`);\n } else {\n process.stdout.write(`${Colors.yellow} Could not compact (summarization failed)${Colors.reset}\\r\\n`);\n }\n }\n\n private async handleMessage(message: string): Promise<void> {\n this.isProcessing = true;\n this.abortController = new AbortController();\n this.smartInput?.enterPassiveMode();\n\n try {\n let messageToProcess = message;\n\n const planCheck = await this.planMode.shouldEnterPlanMode(message);\n if (planCheck.shouldPlan) {\n const usePlan = await this.smartInput!.askChoice(\n '📝 Complex task. Create a plan?',\n [\n { key: 'y', label: 'yes', description: 'Create structured plan' },\n { key: 'n', label: 'no', description: 'Proceed without plan' },\n ]\n );\n \n if (usePlan === 'y') {\n const plannedMessage = await this.runInteractivePlanMode(message);\n if (!plannedMessage) {\n this.isProcessing = false;\n this.smartInput?.exitPassiveMode();\n return;\n }\n messageToProcess = plannedMessage;\n }\n }\n\n const mentionResult = await this.mentionsService.processMessage(messageToProcess);\n if (mentionResult.mentions.length > 0) {\n const summary = this.mentionsService.getMentionsSummary(mentionResult.mentions);\n for (const line of summary) {\n process.stdout.write(`${Colors.dim}${line}${Colors.reset}\\r\\n`);\n }\n process.stdout.write('\\r\\n');\n }\n\n this.startSpinner('Thinking');\n\n let firstChunk = true;\n let fullResponse = '';\n\n for await (const chunk of this.deepAgent.chat(mentionResult.expandedMessage)) {\n if (this.abortController?.signal.aborted) break;\n\n const isToolOutput = chunk.includes('\\x1b[') && (\n chunk.includes('⏿') ||\n chunk.includes('tokens:') ||\n chunk.includes('conversation compacted')\n );\n\n if (firstChunk && !isToolOutput) {\n this.stopSpinner();\n process.stdout.write(`\\r\\n${Colors.magenta}${Colors.bold}${Icons.chestnut} Cast${Colors.reset}\\r\\n`);\n firstChunk = false;\n }\n\n if (!isToolOutput) {\n fullResponse += chunk;\n }\n process.stdout.write(chunk);\n }\n\n if (!firstChunk) {\n process.stdout.write('\\r\\n');\n } else {\n this.stopSpinner();\n }\n } catch (error) {\n this.stopSpinner();\n const msg = (error as Error).message;\n if (!msg.includes('abort')) {\n process.stdout.write(`\\r\\n${Colors.red} Error: ${msg}${Colors.reset}\\r\\n\\r\\n`);\n }\n } finally {\n this.isProcessing = false;\n this.abortController = null;\n this.smartInput?.exitPassiveMode();\n }\n }\n\n private async runInteractivePlanMode(userMessage: string): Promise<string | null> {\n process.stdout.write(`\\r\\n${Colors.cyan}${Colors.bold}📋 PLAN MODE${Colors.reset}\\r\\n`);\n process.stdout.write(`${Colors.dim}Build plan first, execute after approval${Colors.reset}\\r\\n\\r\\n`);\n\n const clarifyingQuestions = await this.planMode.generateClarifyingQuestions(userMessage);\n const answers: string[] = [];\n\n if (clarifyingQuestions.length > 0) {\n process.stdout.write(`${Colors.dim}I need a few quick clarifications:${Colors.reset}\\r\\n`);\n for (let i = 0; i < clarifyingQuestions.length; i++) {\n const q = clarifyingQuestions[i];\n const answer = await this.smartInput!.question(`${Colors.yellow}Q${i + 1}:${Colors.reset} ${q} `);\n if (answer.trim()) {\n answers.push(`- ${q} => ${answer.trim()}`);\n }\n }\n process.stdout.write('\\r\\n');\n }\n\n const context = answers.length > 0 ? `User clarifications:\\n${answers.join('\\n')}` : undefined;\n let plan = await this.planMode.generatePlan(userMessage, context);\n\n while (true) {\n process.stdout.write(this.planMode.formatPlanForDisplay(plan));\n\n const action = await this.smartInput!.askChoice('Plan options', [\n { key: 'a', label: 'accept', description: 'Use this plan and continue' },\n { key: 'r', label: 'refine', description: 'Refine plan with extra feedback' },\n { key: 'c', label: 'cancel', description: 'Cancel and return to prompt' },\n ]);\n\n if (action === 'c') {\n process.stdout.write(`${Colors.dim} Plan cancelled${Colors.reset}\\r\\n\\r\\n`);\n return null;\n }\n\n if (action === 'r') {\n const feedback = await this.smartInput!.question(`${Colors.cyan}Refinement feedback:${Colors.reset} `);\n if (!feedback.trim()) {\n process.stdout.write(`${Colors.dim} No feedback provided. Keeping current plan.${Colors.reset}\\r\\n\\r\\n`);\n continue;\n }\n plan = await this.planMode.refinePlan(plan, feedback.trim());\n continue;\n }\n\n return this.buildPlanExecutionPrompt(userMessage, plan, answers);\n }\n }\n\n private buildPlanExecutionPrompt(userMessage: string, plan: { title: string; overview: string; steps: Array<{ id: number; description: string; files: string[] }> }, clarifications: string[]): string {\n const lines: string[] = [];\n lines.push(userMessage);\n lines.push('');\n lines.push('Approved execution plan:');\n lines.push(`Title: ${plan.title}`);\n lines.push(`Overview: ${plan.overview}`);\n lines.push('Steps:');\n for (const step of plan.steps) {\n const files = step.files.length > 0 ? ` | files: ${step.files.join(', ')}` : '';\n lines.push(`${step.id}. ${step.description}${files}`);\n }\n if (clarifications.length > 0) {\n lines.push('');\n lines.push('User clarifications:');\n lines.push(...clarifications);\n }\n lines.push('');\n lines.push('Execute the task following this approved plan and report progress by step.');\n return lines.join('\\n');\n }\n\n private startSpinner(label: string): void {\n let i = 0;\n this.spinnerTimer = setInterval(() => {\n const spinner = Icons.spinner[i % Icons.spinner.length];\n i++;\n process.stdout.write(\n `\\r${Colors.cyan}${spinner}${Colors.reset} ${Colors.dim}${label}...${Colors.reset}`\n );\n }, 80);\n }\n\n private stopSpinner(): void {\n if (this.spinnerTimer) {\n clearInterval(this.spinnerTimer);\n this.spinnerTimer = null;\n process.stdout.write('\\r\\x1b[K');\n }\n }\n\n private cmdTools(): void {\n const allTools = this.toolsRegistry.getAllTools();\n const tools: [string, string][] = allTools.map(t => [t.name, t.description.slice(0, 60)]);\n\n if (tools.length > 0) {\n const maxLen = Math.max(...tools.map(([n]) => n.length));\n\n process.stdout.write('\\r\\n');\n process.stdout.write(`${Colors.bold}Built-in Tools (${tools.length}):${Colors.reset}\\r\\n`);\n for (const [name, desc] of tools) {\n process.stdout.write(` ${Colors.cyan}${name.padEnd(maxLen)}${Colors.reset} ${Colors.dim}${desc}${Colors.reset}\\r\\n`);\n }\n }\n\n const mcpTools = this.mcpRegistry.getAllMcpTools();\n if (mcpTools.length > 0) {\n process.stdout.write(`\\r\\n${Colors.bold}MCP Tools (${mcpTools.length}):${Colors.reset}\\r\\n`);\n for (const t of mcpTools.slice(0, 10)) {\n process.stdout.write(` ${Colors.cyan}${t.name}${Colors.reset} ${Colors.dim}${t.description.slice(0, 50)}${Colors.reset}\\r\\n`);\n }\n }\n process.stdout.write('\\r\\n');\n }\n\n private getModelDisplayName(): string {\n try {\n const modelConfig = this.configManager.getModelConfig('default');\n if (modelConfig) {\n return `${modelConfig.provider}/${modelConfig.model}`;\n }\n } catch {\n }\n return `${this.configService.getProvider()}/${this.configService.getModel()}`;\n }\n\n stop(): void {\n this.stopSpinner();\n this.smartInput?.destroy();\n }\n}\n"],"names":["ReplService","start","initResult","deepAgent","initialize","agentCount","agentRegistry","resolveAllAgents","length","welcomeScreen","printWelcomeScreen","projectPath","undefined","model","getModelDisplayName","toolCount","smartInput","SmartInput","prompt","Colors","cyan","bold","reset","promptVisibleLen","getCommandSuggestions","input","getMentionSuggestions","partial","onSubmit","line","handleLine","onCancel","handleCancel","onExit","handleExit","commands","text","display","description","filter","c","startsWith","fs","require","path","gitOpts","getFileEntries","o","slice","dir","prefix","endsWith","includes","dirname","basename","resolved","resolve","process","cwd","existsSync","statSync","isDirectory","entries","readdirSync","withFileTypes","ignore","e","name","toLowerCase","map","relDir","isDir","isProcessing","abortController","abort","stopSpinner","stdout","write","yellow","dim","showPrompt","stop","exit","trimmed","trim","handleCommand","handleMessage","command","parts","split","cmd","args","replCommands","printHelp","cmdClear","handleCompact","cmdContext","configCommands","handleConfigCommand","configManager","loadConfig","reinitializeModel","cmdModel","projectCommands","cmdProject","cmdMentionsHelp","cmdTools","gitCommands","runGit","join","cmdCommit","cmdUp","cmdSplitUp","cmdPr","cmdUnitTest","cmdReview","cmdFix","cmdIdent","cmdRelease","agentCommands","cmdAgents","cmdSkills","mcpCommands","cmdMcp","red","msgCount","getMessageCount","result","compactHistory","compacted","green","messagesBefore","messagesAfter","message","AbortController","enterPassiveMode","messageToProcess","planCheck","planMode","shouldEnterPlanMode","shouldPlan","usePlan","askChoice","key","label","plannedMessage","runInteractivePlanMode","exitPassiveMode","mentionResult","mentionsService","processMessage","mentions","summary","getMentionsSummary","startSpinner","firstChunk","fullResponse","chunk","chat","expandedMessage","signal","aborted","isToolOutput","magenta","Icons","chestnut","error","msg","userMessage","clarifyingQuestions","generateClarifyingQuestions","answers","i","q","answer","question","push","context","plan","generatePlan","formatPlanForDisplay","action","feedback","refinePlan","buildPlanExecutionPrompt","clarifications","lines","title","overview","step","steps","files","id","spinnerTimer","setInterval","spinner","clearInterval","allTools","toolsRegistry","getAllTools","tools","t","maxLen","Math","max","n","desc","padEnd","mcpTools","mcpRegistry","getAllMcpTools","modelConfig","getModelConfig","provider","configService","getProvider","getModel","destroy","skillRegistry"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../../src/modules/repl/services/repl.service.ts"],"sourcesContent":["import { Injectable } from '@nestjs/common';\nimport { DeepAgentService } from '../../core/services/deep-agent.service';\nimport { ConfigService } from '../../../common/services/config.service';\nimport { ConfigManagerService } from '../../config/services/config-manager.service';\nimport { MentionsService } from '../../mentions/services/mentions.service';\nimport { McpRegistryService } from '../../mcp/services/mcp-registry.service';\nimport { AgentRegistryService } from '../../agents/services/agent-registry.service';\nimport { SkillRegistryService } from '../../skills/services/skill-registry.service';\nimport { PlanModeService } from '../../core/services/plan-mode.service';\nimport { SmartInput } from './smart-input';\nimport { WelcomeScreenService } from './welcome-screen.service';\nimport { ReplCommandsService } from './commands/repl-commands.service';\nimport { GitCommandsService } from './commands/git-commands.service';\nimport { AgentCommandsService } from './commands/agent-commands.service';\nimport { McpCommandsService } from './commands/mcp-commands.service';\nimport { ConfigCommandsService } from '../../config/services/config-commands.service';\nimport { ProjectCommandsService } from './commands/project-commands.service';\nimport { ToolsRegistryService } from '../../tools/services/tools-registry.service';\nimport { KanbanServerService } from '../../kanban/services/kanban-server.service';\nimport { Colors, Icons } from '../utils/theme';\n\n@Injectable()\nexport class ReplService {\n private smartInput: SmartInput | null = null;\n private abortController: AbortController | null = null;\n private isProcessing = false;\n private spinnerTimer: ReturnType<typeof setInterval> | null = null;\n\n constructor(\n private readonly deepAgent: DeepAgentService,\n private readonly configService: ConfigService,\n private readonly configManager: ConfigManagerService,\n private readonly mentionsService: MentionsService,\n private readonly mcpRegistry: McpRegistryService,\n private readonly agentRegistry: AgentRegistryService,\n private readonly skillRegistry: SkillRegistryService,\n private readonly welcomeScreen: WelcomeScreenService,\n private readonly planMode: PlanModeService,\n private readonly replCommands: ReplCommandsService,\n private readonly gitCommands: GitCommandsService,\n private readonly agentCommands: AgentCommandsService,\n private readonly mcpCommands: McpCommandsService,\n private readonly configCommands: ConfigCommandsService,\n private readonly projectCommands: ProjectCommandsService,\n private readonly toolsRegistry: ToolsRegistryService,\n private readonly kanbanServer: KanbanServerService,\n ) { }\n\n async start(): Promise<void> {\n const initResult = await this.deepAgent.initialize();\n const agentCount = this.agentRegistry.resolveAllAgents().length;\n\n this.welcomeScreen.printWelcomeScreen({\n projectPath: initResult.projectPath || undefined,\n model: this.getModelDisplayName(),\n toolCount: initResult.toolCount,\n agentCount,\n });\n\n this.smartInput = new SmartInput({\n prompt: `${Colors.cyan}${Colors.bold}>${Colors.reset} `,\n promptVisibleLen: 2,\n getCommandSuggestions: (input) => this.getCommandSuggestions(input),\n getMentionSuggestions: (partial) => this.getMentionSuggestions(partial),\n onSubmit: (line) => this.handleLine(line),\n onCancel: () => this.handleCancel(),\n onExit: () => this.handleExit(),\n });\n\n this.smartInput.start();\n }\n\n private getCommandSuggestions(input: string): Array<{ text: string; display: string; description: string }> {\n const commands = [\n { text: '/help', display: '/help', description: 'Show help' },\n { text: '/clear', display: '/clear', description: 'Clear conversation' },\n { text: '/compact', display: '/compact', description: 'Compact history' },\n { text: '/exit', display: '/exit', description: 'Exit' },\n { text: '/status', display: '/status', description: 'Git status' },\n { text: '/diff', display: '/diff', description: 'Git diff' },\n { text: '/log', display: '/log', description: 'Git log' },\n { text: '/commit', display: '/commit', description: 'Commit changes' },\n { text: '/up', display: '/up', description: 'Smart commit & push' },\n { text: '/split-up', display: '/split-up', description: 'Split commits' },\n { text: '/pr', display: '/pr', description: 'Create Pull Request' },\n { text: '/unit-test', display: '/unit-test', description: 'Generate unit tests' },\n { text: '/review', display: '/review', description: 'Code review' },\n { text: '/fix', display: '/fix', description: 'Auto-fix code' },\n { text: '/ident', display: '/ident', description: 'Format code' },\n { text: '/release', display: '/release', description: 'Release notes' },\n { text: '/tools', display: '/tools', description: 'List tools' },\n { text: '/agents', display: '/agents', description: 'List agents' },\n { text: '/skills', display: '/skills', description: 'List skills' },\n { text: '/context', display: '/context', description: 'Session info' },\n { text: '/mentions', display: '/mentions', description: 'Mentions help' },\n { text: '/model', display: '/model', description: 'Show model' },\n { text: '/config', display: '/config', description: 'Configuration' },\n { text: '/project', display: '/project', description: 'Project context' },\n { text: '/project-deep', display: '/project-deep', description: 'Deep project analysis' },\n { text: '/init', display: '/init', description: 'Analyze project and generate context' },\n { text: '/mcp', display: '/mcp', description: 'MCP servers' },\n { text: '/kanban', display: '/kanban', description: 'Open kanban board' },\n ];\n\n return commands.filter(c => c.text.startsWith(input));\n }\n\n private getMentionSuggestions(partial: string): Array<{ text: string; display: string; description: string }> {\n const fs = require('fs');\n const path = require('path');\n\n const gitOpts = [\n { text: '@git:status', display: '@git:status', description: 'Git status' },\n { text: '@git:diff', display: '@git:diff', description: 'Git diff' },\n { text: '@git:log', display: '@git:log', description: 'Git log' },\n { text: '@git:branch', display: '@git:branch', description: 'Branches' },\n ];\n\n if (partial === '') return [...gitOpts, ...this.getFileEntries('')];\n if (partial.startsWith('git:')) return gitOpts.filter(o => o.text.startsWith('@' + partial));\n\n return [...gitOpts.filter(o => o.text.startsWith('@' + partial)), ...this.getFileEntries(partial)].slice(0, 30);\n }\n\n private fileCache: string[] | null = null;\n private lastCacheTime = 0;\n\n private getCachedFiles(): string[] {\n const now = Date.now();\n if (this.fileCache && now - this.lastCacheTime < 5000) {\n return this.fileCache;\n }\n\n const fs = require('fs');\n const path = require('path');\n const ignore = ['node_modules', '.git', 'dist', 'coverage', '.next', '__pycache__'];\n\n const results: string[] = [];\n const walk = (dir: string) => {\n try {\n const entries = fs.readdirSync(dir, { withFileTypes: true });\n for (const e of entries) {\n if (ignore.includes(e.name)) continue;\n if (e.name.startsWith('.') && e.name !== '.cast' && e.name !== '.claude') continue;\n const fullPath = path.join(dir, e.name);\n const relPath = path.relative(process.cwd(), fullPath);\n if (e.isDirectory()) {\n walk(fullPath);\n } else {\n results.push(relPath);\n }\n }\n } catch { }\n };\n\n walk(process.cwd());\n this.fileCache = results;\n this.lastCacheTime = now;\n return results;\n }\n\n private getFileEntries(partial: string): Array<{ text: string; display: string; description: string }> {\n const fs = require('fs');\n const path = require('path');\n\n if (partial === '' || partial.includes('/') || partial.startsWith('.')) {\n try {\n let dir: string;\n let prefix: string;\n\n if (partial.endsWith('/')) {\n dir = partial.slice(0, -1) || '.';\n prefix = '';\n } else if (partial.includes('/')) {\n dir = path.dirname(partial);\n prefix = path.basename(partial);\n } else {\n dir = '.';\n prefix = partial;\n }\n\n const resolved = path.resolve(process.cwd(), dir);\n if (!fs.existsSync(resolved) || !fs.statSync(resolved).isDirectory()) return [];\n\n const entries = fs.readdirSync(resolved, { withFileTypes: true });\n const ignore = ['node_modules', '.git', 'dist', 'coverage', '.next', '__pycache__'];\n\n return entries\n .filter(e => !ignore.includes(e.name))\n .filter(e => !e.name.startsWith('.') || prefix.startsWith('.') || e.name === '.cast' || e.name === '.claude')\n .filter(e => prefix === '' || e.name.toLowerCase().startsWith(prefix.toLowerCase()))\n .map(e => {\n const relDir = dir === '.' ? '' : dir + '/';\n const isDir = e.isDirectory();\n return {\n text: '@' + relDir + e.name + (isDir ? '/' : ''),\n display: '@' + relDir + e.name + (isDir ? '/' : ''),\n description: isDir ? 'dir' : '',\n };\n })\n .slice(0, 20);\n } catch {\n return [];\n }\n } else {\n const allFiles = this.getCachedFiles();\n const lowerPartial = partial.toLowerCase();\n\n const matched = allFiles\n .filter(f => f.toLowerCase().includes(lowerPartial))\n .sort((a, b) => {\n const aName = path.basename(a).toLowerCase();\n const bName = path.basename(b).toLowerCase();\n const aStarts = aName.startsWith(lowerPartial);\n const bStarts = bName.startsWith(lowerPartial);\n if (aStarts && !bStarts) return -1;\n if (!aStarts && bStarts) return 1;\n return a.length - b.length;\n });\n\n return matched.slice(0, 20).map(f => ({\n text: '@' + f,\n display: '@' + f,\n description: 'file',\n }));\n }\n }\n\n private handleCancel(): void {\n if (this.isProcessing && this.abortController) {\n this.abortController.abort();\n this.stopSpinner();\n process.stdout.write(`\\r\\n${Colors.yellow} Cancelled${Colors.reset}\\r\\n\\r\\n`);\n this.isProcessing = false;\n } else {\n process.stdout.write(`${Colors.dim} (Use /exit to quit)${Colors.reset}\\r\\n`);\n this.smartInput?.showPrompt();\n }\n }\n\n private handleExit(): void {\n process.stdout.write(`${Colors.dim} Goodbye!${Colors.reset}\\r\\n`);\n this.stop();\n process.exit(0);\n }\n\n private async handleLine(input: string): Promise<void> {\n const trimmed = input.trim();\n\n if (!trimmed) {\n this.smartInput?.showPrompt();\n return;\n }\n\n if (trimmed.startsWith('/')) {\n await this.handleCommand(trimmed);\n } else {\n await this.handleMessage(trimmed);\n }\n\n this.smartInput?.showPrompt();\n }\n\n private async handleCommand(command: string): Promise<void> {\n const parts = command.slice(1).split(/\\s+/);\n const cmd = parts[0].toLowerCase();\n const args = parts.slice(1);\n\n switch (cmd) {\n case 'help': this.replCommands.printHelp(); break;\n case 'clear': this.replCommands.cmdClear(this.welcomeScreen); break;\n case 'exit':\n case 'quit': this.handleExit(); return;\n case 'compact': await this.handleCompact(); break;\n case 'context': this.replCommands.cmdContext(); break;\n case 'config':\n await this.configCommands.handleConfigCommand(args, this.smartInput!);\n await this.configManager.loadConfig();\n await this.deepAgent.reinitializeModel();\n break;\n case 'model': this.replCommands.cmdModel(args); break;\n case 'init':\n await this.projectCommands.cmdProject(['analyze'], this.smartInput!);\n break;\n case 'mentions': this.replCommands.cmdMentionsHelp(); break;\n case 'tools': this.cmdTools(); break;\n\n case 'status': this.gitCommands.runGit('git status'); break;\n case 'diff': this.gitCommands.runGit(args.length ? `git diff ${args.join(' ')}` : 'git diff'); break;\n case 'log': this.gitCommands.runGit('git log --oneline -15'); break;\n case 'commit':\n await this.gitCommands.cmdCommit(args, this.smartInput!);\n break;\n case 'up':\n await this.gitCommands.cmdUp(this.smartInput!);\n break;\n case 'split-up':\n await this.gitCommands.cmdSplitUp(this.smartInput!);\n break;\n case 'pr':\n await this.gitCommands.cmdPr(this.smartInput!);\n break;\n case 'unit-test':\n await this.gitCommands.cmdUnitTest(this.smartInput!);\n break;\n case 'review': await this.gitCommands.cmdReview(args); break;\n case 'fix': await this.gitCommands.cmdFix(args); break;\n case 'ident': await this.gitCommands.cmdIdent(); break;\n case 'release': await this.gitCommands.cmdRelease(args); break;\n\n case 'agents':\n await this.agentCommands.cmdAgents(args, this.smartInput!);\n break;\n case 'skills':\n await this.agentCommands.cmdSkills(args, this.smartInput!);\n break;\n\n case 'mcp':\n await this.mcpCommands.cmdMcp(args, this.smartInput!);\n break;\n\n case 'project':\n await this.projectCommands.cmdProject(args, this.smartInput!);\n break;\n case 'project-deep':\n const deepResult = await this.projectCommands.cmdProject(['deep'], this.smartInput!);\n if (typeof deepResult === 'string') {\n return await this.handleMessage(deepResult);\n }\n break;\n\n case 'kanban':\n this.kanbanServer.start();\n break;\n\n default:\n process.stdout.write(`${Colors.red} Unknown: /${cmd}${Colors.reset} ${Colors.dim}Try /help${Colors.reset}\\r\\n`);\n }\n }\n\n private async handleCompact(): Promise<void> {\n const msgCount = this.deepAgent.getMessageCount();\n if (msgCount < 4) {\n process.stdout.write(`${Colors.dim} Nothing to compact (${msgCount} messages)${Colors.reset}\\r\\n`);\n return;\n }\n process.stdout.write(`${Colors.dim} Summarizing ${msgCount} messages...${Colors.reset}\\r\\n`);\n const result = await this.deepAgent.compactHistory();\n if (result.compacted) {\n process.stdout.write(`${Colors.green} Compacted: ${result.messagesBefore} → ${result.messagesAfter} messages${Colors.reset}\\r\\n`);\n } else {\n process.stdout.write(`${Colors.yellow} Could not compact (summarization failed)${Colors.reset}\\r\\n`);\n }\n }\n\n private async handleMessage(message: string): Promise<void> {\n this.isProcessing = true;\n this.abortController = new AbortController();\n this.smartInput?.enterPassiveMode();\n\n try {\n let messageToProcess = message;\n\n const planCheck = await this.planMode.shouldEnterPlanMode(message);\n if (planCheck.shouldPlan) {\n const usePlan = await this.smartInput!.askChoice(\n '📝 Complex task. Create a plan?',\n [\n { key: 'y', label: 'yes', description: 'Create structured plan' },\n { key: 'n', label: 'no', description: 'Proceed without plan' },\n ]\n );\n\n if (usePlan === 'y') {\n const plannedMessage = await this.runInteractivePlanMode(message);\n if (!plannedMessage) {\n this.isProcessing = false;\n this.smartInput?.exitPassiveMode();\n return;\n }\n messageToProcess = plannedMessage;\n }\n }\n\n const mentionResult = await this.mentionsService.processMessage(messageToProcess);\n if (mentionResult.mentions.length > 0) {\n const summary = this.mentionsService.getMentionsSummary(mentionResult.mentions);\n for (const line of summary) {\n process.stdout.write(`${Colors.dim}${line}${Colors.reset}\\r\\n`);\n }\n process.stdout.write('\\r\\n');\n }\n\n this.startSpinner('Thinking');\n\n let firstChunk = true;\n let fullResponse = '';\n\n for await (const chunk of this.deepAgent.chat(mentionResult.expandedMessage)) {\n if (this.abortController?.signal.aborted) break;\n\n const isToolOutput = chunk.includes('\\x1b[') && (\n chunk.includes('⏿') ||\n chunk.includes('tokens:') ||\n chunk.includes('conversation compacted')\n );\n\n if (firstChunk && !isToolOutput) {\n this.stopSpinner();\n process.stdout.write(`\\r\\n${Colors.magenta}${Colors.bold}${Icons.chestnut} Cast${Colors.reset}\\r\\n`);\n firstChunk = false;\n }\n\n if (!isToolOutput) {\n fullResponse += chunk;\n }\n process.stdout.write(chunk);\n }\n\n if (!firstChunk) {\n process.stdout.write('\\r\\n');\n } else {\n this.stopSpinner();\n }\n } catch (error) {\n this.stopSpinner();\n const msg = (error as Error).message;\n if (!msg.includes('abort')) {\n process.stdout.write(`\\r\\n${Colors.red} Error: ${msg}${Colors.reset}\\r\\n\\r\\n`);\n }\n } finally {\n this.isProcessing = false;\n this.abortController = null;\n this.smartInput?.exitPassiveMode();\n }\n }\n\n private async runInteractivePlanMode(userMessage: string): Promise<string | null> {\n process.stdout.write(`\\r\\n${Colors.cyan}${Colors.bold}📋 PLAN MODE${Colors.reset}\\r\\n`);\n process.stdout.write(`${Colors.dim}Build plan first, execute after approval${Colors.reset}\\r\\n\\r\\n`);\n\n const clarifyingQuestions = await this.planMode.generateClarifyingQuestions(userMessage);\n const answers: string[] = [];\n\n if (clarifyingQuestions.length > 0) {\n process.stdout.write(`${Colors.dim}I need a few quick clarifications:${Colors.reset}\\r\\n`);\n for (let i = 0; i < clarifyingQuestions.length; i++) {\n const q = clarifyingQuestions[i];\n const answer = await this.smartInput!.question(`${Colors.yellow}Q${i + 1}:${Colors.reset} ${q} `);\n if (answer.trim()) {\n answers.push(`- ${q} => ${answer.trim()}`);\n }\n }\n process.stdout.write('\\r\\n');\n }\n\n const context = answers.length > 0 ? `User clarifications:\\n${answers.join('\\n')}` : undefined;\n let plan = await this.planMode.generatePlan(userMessage, context);\n\n while (true) {\n process.stdout.write(this.planMode.formatPlanForDisplay(plan));\n\n const action = await this.smartInput!.askChoice('Plan options', [\n { key: 'a', label: 'accept', description: 'Use this plan and continue' },\n { key: 'r', label: 'refine', description: 'Refine plan with extra feedback' },\n { key: 'c', label: 'cancel', description: 'Cancel and return to prompt' },\n ]);\n\n if (action === 'c') {\n process.stdout.write(`${Colors.dim} Plan cancelled${Colors.reset}\\r\\n\\r\\n`);\n return null;\n }\n\n if (action === 'r') {\n const feedback = await this.smartInput!.question(`${Colors.cyan}Refinement feedback:${Colors.reset} `);\n if (!feedback.trim()) {\n process.stdout.write(`${Colors.dim} No feedback provided. Keeping current plan.${Colors.reset}\\r\\n\\r\\n`);\n continue;\n }\n plan = await this.planMode.refinePlan(plan, feedback.trim());\n continue;\n }\n\n return this.buildPlanExecutionPrompt(userMessage, plan, answers);\n }\n }\n\n private buildPlanExecutionPrompt(userMessage: string, plan: { title: string; overview: string; steps: Array<{ id: number; description: string; files: string[] }> }, clarifications: string[]): string {\n const lines: string[] = [];\n lines.push(userMessage);\n lines.push('');\n lines.push('Approved execution plan:');\n lines.push(`Title: ${plan.title}`);\n lines.push(`Overview: ${plan.overview}`);\n lines.push('Steps:');\n for (const step of plan.steps) {\n const files = step.files.length > 0 ? ` | files: ${step.files.join(', ')}` : '';\n lines.push(`${step.id}. ${step.description}${files}`);\n }\n if (clarifications.length > 0) {\n lines.push('');\n lines.push('User clarifications:');\n lines.push(...clarifications);\n }\n lines.push('');\n lines.push('Execute the task following this approved plan and report progress by step.');\n return lines.join('\\n');\n }\n\n private startSpinner(label: string): void {\n let i = 0;\n this.spinnerTimer = setInterval(() => {\n const spinner = Icons.spinner[i % Icons.spinner.length];\n i++;\n process.stdout.write(\n `\\r${Colors.cyan}${spinner}${Colors.reset} ${Colors.dim}${label}...${Colors.reset}`\n );\n }, 80);\n }\n\n private stopSpinner(): void {\n if (this.spinnerTimer) {\n clearInterval(this.spinnerTimer);\n this.spinnerTimer = null;\n process.stdout.write('\\r\\x1b[K');\n }\n }\n\n private cmdTools(): void {\n const allTools = this.toolsRegistry.getAllTools();\n const tools: [string, string][] = allTools.map(t => [t.name, t.description.slice(0, 60)]);\n\n if (tools.length > 0) {\n const maxLen = Math.max(...tools.map(([n]) => n.length));\n\n process.stdout.write('\\r\\n');\n process.stdout.write(`${Colors.bold}Built-in Tools (${tools.length}):${Colors.reset}\\r\\n`);\n for (const [name, desc] of tools) {\n process.stdout.write(` ${Colors.cyan}${name.padEnd(maxLen)}${Colors.reset} ${Colors.dim}${desc}${Colors.reset}\\r\\n`);\n }\n }\n\n const mcpTools = this.mcpRegistry.getAllMcpTools();\n if (mcpTools.length > 0) {\n process.stdout.write(`\\r\\n${Colors.bold}MCP Tools (${mcpTools.length}):${Colors.reset}\\r\\n`);\n for (const t of mcpTools.slice(0, 10)) {\n process.stdout.write(` ${Colors.cyan}${t.name}${Colors.reset} ${Colors.dim}${t.description.slice(0, 50)}${Colors.reset}\\r\\n`);\n }\n }\n process.stdout.write('\\r\\n');\n }\n\n private getModelDisplayName(): string {\n try {\n const modelConfig = this.configManager.getModelConfig('default');\n if (modelConfig) {\n return `${modelConfig.provider}/${modelConfig.model}`;\n }\n } catch {\n }\n return `${this.configService.getProvider()}/${this.configService.getModel()}`;\n }\n\n stop(): void {\n this.stopSpinner();\n this.smartInput?.destroy();\n }\n}\n"],"names":["ReplService","start","initResult","deepAgent","initialize","agentCount","agentRegistry","resolveAllAgents","length","welcomeScreen","printWelcomeScreen","projectPath","undefined","model","getModelDisplayName","toolCount","smartInput","SmartInput","prompt","Colors","cyan","bold","reset","promptVisibleLen","getCommandSuggestions","input","getMentionSuggestions","partial","onSubmit","line","handleLine","onCancel","handleCancel","onExit","handleExit","commands","text","display","description","filter","c","startsWith","fs","require","path","gitOpts","getFileEntries","o","slice","getCachedFiles","now","Date","fileCache","lastCacheTime","ignore","results","walk","dir","entries","readdirSync","withFileTypes","e","includes","name","fullPath","join","relPath","relative","process","cwd","isDirectory","push","prefix","endsWith","dirname","basename","resolved","resolve","existsSync","statSync","toLowerCase","map","relDir","isDir","allFiles","lowerPartial","matched","f","sort","a","b","aName","bName","aStarts","bStarts","isProcessing","abortController","abort","stopSpinner","stdout","write","yellow","dim","showPrompt","stop","exit","trimmed","trim","handleCommand","handleMessage","command","parts","split","cmd","args","replCommands","printHelp","cmdClear","handleCompact","cmdContext","configCommands","handleConfigCommand","configManager","loadConfig","reinitializeModel","cmdModel","projectCommands","cmdProject","cmdMentionsHelp","cmdTools","gitCommands","runGit","cmdCommit","cmdUp","cmdSplitUp","cmdPr","cmdUnitTest","cmdReview","cmdFix","cmdIdent","cmdRelease","agentCommands","cmdAgents","cmdSkills","mcpCommands","cmdMcp","deepResult","kanbanServer","red","msgCount","getMessageCount","result","compactHistory","compacted","green","messagesBefore","messagesAfter","message","AbortController","enterPassiveMode","messageToProcess","planCheck","planMode","shouldEnterPlanMode","shouldPlan","usePlan","askChoice","key","label","plannedMessage","runInteractivePlanMode","exitPassiveMode","mentionResult","mentionsService","processMessage","mentions","summary","getMentionsSummary","startSpinner","firstChunk","fullResponse","chunk","chat","expandedMessage","signal","aborted","isToolOutput","magenta","Icons","chestnut","error","msg","userMessage","clarifyingQuestions","generateClarifyingQuestions","answers","i","q","answer","question","context","plan","generatePlan","formatPlanForDisplay","action","feedback","refinePlan","buildPlanExecutionPrompt","clarifications","lines","title","overview","step","steps","files","id","spinnerTimer","setInterval","spinner","clearInterval","allTools","toolsRegistry","getAllTools","tools","t","maxLen","Math","max","n","desc","padEnd","mcpTools","mcpRegistry","getAllMcpTools","modelConfig","getModelConfig","provider","configService","getProvider","getModel","destroy","skillRegistry"],"mappings":"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"}
|
|
@@ -408,7 +408,7 @@ let SmartInput = class SmartInput {
|
|
|
408
408
|
this.buffer = s.text;
|
|
409
409
|
this.cursor = this.buffer.length;
|
|
410
410
|
} else {
|
|
411
|
-
const atMatch = this.buffer.match(
|
|
411
|
+
const atMatch = this.buffer.match(/@\[?[\w./:~\-]*\]?$/);
|
|
412
412
|
if (atMatch && atMatch.index !== undefined) {
|
|
413
413
|
this.buffer = this.buffer.slice(0, atMatch.index) + s.text;
|
|
414
414
|
this.cursor = this.buffer.length;
|
|
@@ -425,7 +425,7 @@ let SmartInput = class SmartInput {
|
|
|
425
425
|
this.suggestions = this.opts.getCommandSuggestions(this.buffer);
|
|
426
426
|
return;
|
|
427
427
|
}
|
|
428
|
-
const atMatch = this.buffer.match(
|
|
428
|
+
const atMatch = this.buffer.match(/@\[?([\w./:~\-]*)\]?$/);
|
|
429
429
|
if (atMatch) {
|
|
430
430
|
this.suggestions = this.opts.getMentionSuggestions(atMatch[1]);
|
|
431
431
|
return;
|
|
@@ -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;\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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"}
|
|
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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"}
|