ft-scout 3.0.6 → 3.0.7

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.
@@ -1,197 +0,0 @@
1
- import fs from 'fs';
2
- import path from 'path';
3
- import { spinner, isCancel, text, confirm } from '@clack/prompts';
4
- import chalk from 'chalk';
5
- import { askRepoQuestion } from '../engine/llm.js';
6
- import { loadContext } from '../utils/config.js';
7
- import { renderMarkdown, safeNote } from '../utils/markdown.js';
8
- import { normalizeLanguage } from '../utils/language.js';
9
- import { handleCreate } from './create.js';
10
- import { handleFix } from './fix.js';
11
- import { handleRunCommand } from './runCommand.js';
12
- import { handleAgent } from './agent.js';
13
- import { handleScan } from './scan.js';
14
- import { handleUndo } from './undo.js';
15
- function getDirectoryFiles(dir, baseDir = dir, maxFiles = 150) {
16
- let results = [];
17
- try {
18
- const list = fs.readdirSync(dir);
19
- for (const file of list) {
20
- if (results.length >= maxFiles)
21
- break;
22
- if (['node_modules', '.git', '.ft', 'dist', 'build', '.next', 'coverage'].includes(file))
23
- continue;
24
- const filePath = path.join(dir, file);
25
- const stat = fs.statSync(filePath);
26
- if (stat && stat.isDirectory()) {
27
- results = results.concat(getDirectoryFiles(filePath, baseDir, maxFiles - results.length));
28
- }
29
- else {
30
- const relativePath = path.relative(baseDir, filePath).replace(/\\/g, '/');
31
- results.push(relativePath);
32
- }
33
- }
34
- }
35
- catch { }
36
- return results;
37
- }
38
- export async function handleChat(options) {
39
- const existingContext = loadContext();
40
- const targetLang = normalizeLanguage(options?.lang) || normalizeLanguage(existingContext?.language);
41
- const cwd = process.cwd();
42
- const filesList = getDirectoryFiles(cwd);
43
- const projectName = existingContext?.projectName || path.basename(cwd) || 'Codebase';
44
- let manifestContent = '';
45
- const pkgPath = path.join(cwd, 'package.json');
46
- if (fs.existsSync(pkgPath)) {
47
- try {
48
- manifestContent = fs.readFileSync(pkgPath, 'utf-8');
49
- }
50
- catch {
51
- manifestContent = '{}';
52
- }
53
- }
54
- const welcomeBanner = `
55
- ${chalk.bold.cyan('Interactive Agentic AI Chat Session Active')} ${targetLang ? `(${targetLang})` : ''}
56
-
57
- ${chalk.bold('Slash Commands Available:')}
58
- ${chalk.cyan('/agent <goal>')} - Run autonomous agent self-healing loop
59
- ${chalk.cyan('/create <file> <prompt>')} - Create a new source file
60
- ${chalk.cyan('/fix [file] [prompt]')} - Auto-fix code in file or codebase
61
- ${chalk.cyan('/run <command>')} - Execute terminal/shell command
62
- ${chalk.cyan('/read <file>')} - Read and display file contents
63
- ${chalk.cyan('/scan')} - Scan codebase for bugs
64
- ${chalk.cyan('/undo')} - Revert Scout's last action
65
- ${chalk.cyan('/help')} - Show slash commands help
66
- ${chalk.cyan('exit / quit')} - Quit chat session
67
- `.trim();
68
- safeNote(welcomeBanner, '🤖 Scout Agentic Copilot Chat');
69
- const chatHistory = [];
70
- while (true) {
71
- const query = await text({
72
- message: chalk.bold('You:'),
73
- placeholder: 'Ask question, run slash command (/agent, /create, /fix, /run...), or request code generation...',
74
- validate: (value) => (!value || !value.trim() ? 'Message cannot be empty' : undefined),
75
- });
76
- if (isCancel(query)) {
77
- safeNote(chalk.yellow('Exiting interactive chat session. Goodbye!'), '👋 Chat Ended');
78
- break;
79
- }
80
- const qText = query.trim();
81
- if (['exit', 'quit', 'q', ':q'].includes(qText.toLowerCase())) {
82
- safeNote(chalk.yellow('Exiting interactive chat session. Goodbye!'), '👋 Chat Ended');
83
- break;
84
- }
85
- // Slash command processing
86
- if (qText.startsWith('/')) {
87
- const parts = qText.split(' ');
88
- const slashCmd = parts[0]?.toLowerCase();
89
- const restArg = parts.slice(1).join(' ').trim();
90
- if (slashCmd === '/help') {
91
- safeNote(welcomeBanner, '🤖 Slash Command Help');
92
- continue;
93
- }
94
- if (slashCmd === '/agent' || slashCmd === '/task' || slashCmd === '/goal') {
95
- await handleAgent(restArg, { lang: targetLang, native: options?.native });
96
- continue;
97
- }
98
- if (slashCmd === '/create') {
99
- const fileParts = restArg.split(' ');
100
- const targetPath = fileParts[0];
101
- const promptStr = fileParts.slice(1).join(' ');
102
- await handleCreate(targetPath, { prompt: promptStr, lang: targetLang, native: options?.native });
103
- continue;
104
- }
105
- if (slashCmd === '/fix') {
106
- await handleFix({ prompt: restArg, lang: targetLang, native: options?.native });
107
- continue;
108
- }
109
- if (slashCmd === '/run' || slashCmd === '/exec') {
110
- await handleRunCommand(restArg, { lang: targetLang, native: options?.native });
111
- continue;
112
- }
113
- if (slashCmd === '/read') {
114
- if (!restArg) {
115
- safeNote(chalk.yellow('Please specify a file path to read (e.g. /read src/index.ts)'), 'âš ī¸ Read Command');
116
- continue;
117
- }
118
- const fullP = path.resolve(cwd, restArg);
119
- if (fs.existsSync(fullP)) {
120
- const content = fs.readFileSync(fullP, 'utf-8');
121
- safeNote(renderMarkdown(`### 📄 \`${restArg}\`\n\`\`\`\n${content.slice(0, 5000)}\n\`\`\``), '📖 File Contents');
122
- }
123
- else {
124
- safeNote(chalk.yellow(`File \`${restArg}\` not found in workspace.`), 'âš ī¸ File Not Found');
125
- }
126
- continue;
127
- }
128
- if (slashCmd === '/scan') {
129
- await handleScan();
130
- continue;
131
- }
132
- if (slashCmd === '/undo') {
133
- await handleUndo();
134
- continue;
135
- }
136
- }
137
- // Regular AI Q&A Synthesis
138
- const askSpinner = spinner();
139
- const isWebNeeded = options?.web ||
140
- /^\/(web|internet|search)\b/i.test(qText) ||
141
- /\b(search the web|internet|online docs|latest docs|web search)\b/i.test(qText);
142
- if (isWebNeeded) {
143
- askSpinner.start('Searching internet & analyzing context...');
144
- }
145
- else {
146
- askSpinner.start('Analyzing context & generating response...');
147
- }
148
- const answer = await askRepoQuestion(qText, projectName, filesList, manifestContent, chatHistory, { useWeb: options?.web, language: targetLang, native: options?.native });
149
- askSpinner.stop('Scout:');
150
- const formattedAnswer = renderMarkdown(answer);
151
- safeNote(formattedAnswer, '💡 AI Response');
152
- chatHistory.push({ role: 'user', content: qText });
153
- chatHistory.push({ role: 'assistant', content: answer });
154
- // Agentic Intent Detection for File Creation, Code Fix, or Shell Execution
155
- const lowerQ = qText.toLowerCase();
156
- // Intent 1: Create File
157
- const createMatch = qText.match(/(?:create|generate|add|make)\s+(?:a\s+)?(?:new\s+)?(?:file\s+)?([a-zA-Z0-9_\-./]+\.[a-zA-Z0-9]+)\b/i);
158
- if (createMatch && createMatch[1] && !createMatch[1].includes('package.json')) {
159
- const targetFile = createMatch[1];
160
- const shouldCreate = await confirm({
161
- message: chalk.bold(`Would you like Scout to create file ${chalk.cyan(targetFile)} now?`),
162
- initialValue: true,
163
- });
164
- if (!isCancel(shouldCreate) && shouldCreate) {
165
- await handleCreate(targetFile, { prompt: qText, lang: targetLang, native: options?.native });
166
- continue;
167
- }
168
- }
169
- // Intent 2: Run Command
170
- const runMatch = qText.match(/(?:run|execute|test|build)\s+(?:command\s+)?`(npm|npx|tsc|git|python|node|cargo|go|make|yarn|pnpm)[^`]+`/i) ||
171
- qText.match(/^(?:run|execute|run command)\s+["']?([^"']+)["']?$/i);
172
- if (runMatch && runMatch[1]) {
173
- const targetCmd = runMatch[1];
174
- const shouldRun = await confirm({
175
- message: chalk.bold(`Would you like Scout to run command \`${chalk.cyan(targetCmd)}\` now?`),
176
- initialValue: true,
177
- });
178
- if (!isCancel(shouldRun) && shouldRun) {
179
- await handleRunCommand(targetCmd, { lang: targetLang, native: options?.native });
180
- continue;
181
- }
182
- }
183
- // Intent 3: Auto-fix Code
184
- const fixMatch = lowerQ.includes('fix bug') || lowerQ.includes('auto-fix') || lowerQ.includes('refactor file') || lowerQ.includes('fix code');
185
- if (fixMatch) {
186
- const shouldFix = await confirm({
187
- message: chalk.bold('Would you like Scout to apply this auto-fix to your codebase now?'),
188
- initialValue: true,
189
- });
190
- if (!isCancel(shouldFix) && shouldFix) {
191
- await handleFix({ prompt: qText, lang: targetLang, native: options?.native });
192
- continue;
193
- }
194
- }
195
- }
196
- }
197
- //# sourceMappingURL=chat.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"chat.js","sourceRoot":"","sources":["chat.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"create.d.ts","sourceRoot":"","sources":["create.ts"],"names":[],"mappings":"AAYA,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,MAAM,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CAC9B;AAsBD,wBAAsB,YAAY,CAAC,aAAa,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa,iBA6JjF"}
@@ -1,160 +0,0 @@
1
- import chalk from 'chalk';
2
- import fs from 'fs';
3
- import path from 'path';
4
- import { spinner, text, select, isCancel } from '@clack/prompts';
5
- import { simpleGit } from 'simple-git';
6
- import { safeNote, renderMarkdown } from '../utils/markdown.js';
7
- import { recordHistoryAction, loadContext } from '../utils/config.js';
8
- import { generateCodeFile } from '../engine/llm.js';
9
- import { createPullRequest } from '../engine/git.js';
10
- import { handleUndo } from './undo.js';
11
- import { normalizeLanguage } from '../utils/language.js';
12
- function getDirectoryFiles(dir, baseDir = dir, maxFiles = 150) {
13
- let results = [];
14
- try {
15
- const list = fs.readdirSync(dir);
16
- for (const file of list) {
17
- if (results.length >= maxFiles)
18
- break;
19
- if (['node_modules', '.git', '.ft', 'dist', 'build', '.next', 'coverage'].includes(file))
20
- continue;
21
- const filePath = path.join(dir, file);
22
- const stat = fs.statSync(filePath);
23
- if (stat && stat.isDirectory()) {
24
- results = results.concat(getDirectoryFiles(filePath, baseDir, maxFiles - results.length));
25
- }
26
- else {
27
- const relativePath = path.relative(baseDir, filePath).replace(/\\/g, '/');
28
- results.push(relativePath);
29
- }
30
- }
31
- }
32
- catch { }
33
- return results;
34
- }
35
- export async function handleCreate(filePathInput, options) {
36
- const existingContext = loadContext();
37
- const targetLang = normalizeLanguage(options?.lang) || normalizeLanguage(existingContext?.language);
38
- const cwd = process.cwd();
39
- const filesList = getDirectoryFiles(cwd);
40
- const projectName = existingContext?.projectName || path.basename(cwd) || 'Codebase';
41
- let targetFilePath = filePathInput;
42
- if (!targetFilePath || !targetFilePath.trim()) {
43
- const userInputPath = await text({
44
- message: chalk.bold('Enter relative file path to create (e.g. src/utils/math.ts):'),
45
- placeholder: 'src/utils/helpers.ts',
46
- validate: (val) => (!val || !val.trim() ? 'File path is required' : undefined),
47
- });
48
- if (isCancel(userInputPath)) {
49
- safeNote(chalk.yellow('File creation operation cancelled.'), '✨ Scout File Creation');
50
- return;
51
- }
52
- targetFilePath = userInputPath.trim();
53
- }
54
- let finalPrompt = options?.prompt;
55
- if (!finalPrompt || !finalPrompt.trim()) {
56
- const userPromptInput = await text({
57
- message: chalk.bold(`What should Scout generate inside ${chalk.cyan(targetFilePath)}?`),
58
- placeholder: 'e.g. Create a utility module with functions for string formatting and timestamp parsing',
59
- validate: (val) => (!val || !val.trim() ? 'Please provide a prompt describing the file requirements' : undefined),
60
- });
61
- if (isCancel(userPromptInput)) {
62
- safeNote(chalk.yellow('File creation operation cancelled.'), '✨ Scout File Creation');
63
- return;
64
- }
65
- finalPrompt = userPromptInput.trim();
66
- }
67
- const resolvedPath = path.resolve(cwd, targetFilePath);
68
- const fileExists = fs.existsSync(resolvedPath);
69
- const originalContent = fileExists ? fs.readFileSync(resolvedPath, 'utf-8') : '__FT_WAS_NEW__';
70
- const git = simpleGit();
71
- const isRepo = await git.checkIsRepo();
72
- let currentBranch = 'main';
73
- if (isRepo) {
74
- try {
75
- const branchSummary = await git.branch();
76
- currentBranch = branchSummary.current || 'main';
77
- }
78
- catch { }
79
- }
80
- const s = spinner();
81
- s.start(`Scout is generating code for ${targetFilePath} with AI...`);
82
- let genResult;
83
- try {
84
- genResult = await generateCodeFile(targetFilePath, finalPrompt, projectName, filesList, targetLang, options?.native);
85
- }
86
- catch (err) {
87
- s.stop(chalk.red('Failed to generate code file.'));
88
- safeNote(chalk.red(`Error: ${err?.message || String(err)}`), 'âš ī¸ Code Generation Error');
89
- return;
90
- }
91
- // Ensure parent directory exists
92
- const parentDir = path.dirname(resolvedPath);
93
- if (!fs.existsSync(parentDir)) {
94
- fs.mkdirSync(parentDir, { recursive: true });
95
- }
96
- try {
97
- fs.writeFileSync(resolvedPath, genResult.code, 'utf-8');
98
- }
99
- catch (writeErr) {
100
- s.stop(chalk.red('Failed to write generated code to disk.'));
101
- safeNote(chalk.red(`Write error: ${writeErr?.message || String(writeErr)}`), 'âš ī¸ File Write Error');
102
- return;
103
- }
104
- recordHistoryAction({
105
- command: `ft create "${targetFilePath}" "${finalPrompt}"`,
106
- description: `Scout created file ${targetFilePath}`,
107
- previousBranch: currentBranch,
108
- affectedFiles: [targetFilePath],
109
- backups: [{ filePath: targetFilePath, originalContent }],
110
- });
111
- s.stop(chalk.green(`File ${targetFilePath} created successfully!`));
112
- const teardownContent = `
113
- ### 📄 Created File
114
- \`${targetFilePath}\`
115
-
116
- ### 💡 Description & Overview
117
- ${genResult.description}
118
-
119
- ### đŸ’ģ Preview
120
- \`\`\`
121
- ${genResult.code.slice(0, 500)}${genResult.code.length > 500 ? '\n... (truncated)' : ''}
122
- \`\`\`
123
-
124
- ---
125
- *File created directly at \`${targetFilePath}\`${isRepo ? ` on active branch \`${currentBranch}\`` : ''}.*
126
- `.trim();
127
- safeNote(renderMarkdown(teardownContent), '✨ Scout File Creation Teardown');
128
- const actionChoice = await select({
129
- message: chalk.bold('Review Scout\'s generated file. What would you like to do?'),
130
- options: [
131
- { value: 'keep', label: '✅ Keep File', hint: `Retain the newly created file directly on current branch (${currentBranch})` },
132
- { value: 'pr', label: '🔀 Create Pull Request', hint: 'Push created file to a new branch & open a Pull Request' },
133
- { value: 'revert', label: 'â†Šī¸ Revert / Delete File', hint: 'Remove the created file immediately' },
134
- ],
135
- });
136
- if (isCancel(actionChoice) || actionChoice === 'revert') {
137
- const revSpinner = spinner();
138
- revSpinner.start('Reverting Scout\'s file creation...');
139
- await handleUndo();
140
- revSpinner.stop('Creation reverted successfully.');
141
- return;
142
- }
143
- if (actionChoice === 'pr') {
144
- const prSpinner = spinner();
145
- prSpinner.start('Creating Pull Request...');
146
- const prRes = await createPullRequest({
147
- branchPrefix: 'create',
148
- title: `feat: Add ${targetFilePath}`,
149
- affectedFiles: [targetFilePath],
150
- commitMessage: `feat: Create ${targetFilePath}`,
151
- });
152
- prSpinner.stop('Pull Request workflow processed.');
153
- safeNote(`${chalk.green('✓')} ${prRes.message}\n` +
154
- `💡 ${chalk.dim('You remain on active branch:')} ${chalk.cyan(currentBranch)}`, '🔀 Pull Request Status');
155
- return;
156
- }
157
- safeNote(`${chalk.green('✓')} Saved ${chalk.bold.cyan(targetFilePath)} on branch ${chalk.bold.green(currentBranch)}.\n` +
158
- `💡 ${chalk.dim('You can revert this creation anytime by running:')} ${chalk.cyan('scout undo')}`, '✅ Creation Confirmed');
159
- }
160
- //# sourceMappingURL=create.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"create.js","sourceRoot":"","sources":["create.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"fix.d.ts","sourceRoot":"","sources":["fix.ts"],"names":[],"mappings":"AAaA,MAAM,WAAW,UAAU;IACzB,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IACpC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,MAAM,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC7B,GAAG,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CAC3B;AAED,wBAAgB,yBAAyB,CACvC,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,MAAM,GAAG,SAAS,EACjC,SAAS,EAAE,MAAM,EAAE,GAClB,MAAM,EAAE,CAwGV;AAED,wBAAsB,SAAS,CAAC,OAAO,CAAC,EAAE,UAAU,iBA2QnD"}