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.
- package/bin/ft.js +1 -0
- package/bin/src/commands/agent.d.ts.map +1 -1
- package/bin/src/commands/agent.js +590 -150
- package/bin/src/commands/agent.js.map +1 -1
- package/bin/src/engine/llm.d.ts.map +1 -1
- package/bin/src/engine/llm.js +11 -7
- package/bin/src/engine/llm.js.map +1 -1
- package/bin/src/index.js +19 -75
- package/bin/src/index.js.map +1 -1
- package/bin/src/utils/branding.js +1 -1
- package/package.json +1 -48
- package/bin/src/commands/add.d.ts.map +0 -1
- package/bin/src/commands/add.js +0 -45
- package/bin/src/commands/add.js.map +0 -1
- package/bin/src/commands/chat.d.ts.map +0 -1
- package/bin/src/commands/chat.js +0 -197
- package/bin/src/commands/chat.js.map +0 -1
- package/bin/src/commands/create.d.ts.map +0 -1
- package/bin/src/commands/create.js +0 -160
- package/bin/src/commands/create.js.map +0 -1
- package/bin/src/commands/fix.d.ts.map +0 -1
- package/bin/src/commands/fix.js +0 -306
- package/bin/src/commands/fix.js.map +0 -1
- package/bin/src/commands/runCommand.d.ts.map +0 -1
- package/bin/src/commands/runCommand.js +0 -106
- package/bin/src/commands/runCommand.js.map +0 -1
- package/bin/src/commands/scan.d.ts.map +0 -1
- package/bin/src/commands/scan.js +0 -82
- package/bin/src/commands/scan.js.map +0 -1
package/bin/src/commands/chat.js
DELETED
|
@@ -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"}
|