ft-scout 3.0.5 → 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/README.md +11 -4
- package/bin/ft.js +1 -0
- package/bin/src/commands/agent.d.ts.map +1 -0
- package/bin/src/commands/agent.js +640 -0
- package/bin/src/commands/agent.js.map +1 -0
- package/bin/src/engine/git.d.ts.map +1 -1
- package/bin/src/engine/llm.d.ts.map +1 -1
- package/bin/src/engine/llm.js +138 -47
- package/bin/src/engine/llm.js.map +1 -1
- package/bin/src/index.js +29 -68
- package/bin/src/index.js.map +1 -1
- package/bin/src/utils/branding.js +1 -1
- package/bin/src/utils/config.d.ts.map +1 -1
- package/bin/src/utils/config.js +41 -0
- package/bin/src/utils/config.js.map +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 -191
- 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 -269
- 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/index.js
CHANGED
|
@@ -8,18 +8,13 @@ import { handleOwners } from './commands/owners.js';
|
|
|
8
8
|
import { handleRisky } from './commands/risky.js';
|
|
9
9
|
import { handleSetup } from './commands/setup.js';
|
|
10
10
|
import { handleWebSearch } from './commands/web.js';
|
|
11
|
-
import { handleChat } from './commands/chat.js';
|
|
12
11
|
import { handleBrief } from './commands/brief.js';
|
|
13
|
-
import { handleScan } from './commands/scan.js';
|
|
14
|
-
import { handleFix } from './commands/fix.js';
|
|
15
12
|
import { handleRecommend } from './commands/recommend.js';
|
|
16
|
-
import { handleAdd } from './commands/add.js';
|
|
17
13
|
import { handleAudit } from './commands/audit.js';
|
|
18
14
|
import { handleHistory } from './commands/history.js';
|
|
19
15
|
import { handleUndo } from './commands/undo.js';
|
|
20
16
|
import { handleConfig } from './commands/configCommand.js';
|
|
21
|
-
import {
|
|
22
|
-
import { handleRunCommand } from './commands/runCommand.js';
|
|
17
|
+
import { handleAgent } from './commands/agent.js';
|
|
23
18
|
import { renderBranding } from './utils/branding.js';
|
|
24
19
|
import { checkForUpdates } from './utils/updateCheck.js';
|
|
25
20
|
import { maybeShowDiscoveryMessage } from './discovery/display.js';
|
|
@@ -29,12 +24,12 @@ program
|
|
|
29
24
|
.name('scout')
|
|
30
25
|
.alias('ft')
|
|
31
26
|
.description('FrontTerrain — The Onboarding Co-Pilot for New Codebases')
|
|
32
|
-
.version('3.0.
|
|
27
|
+
.version('3.0.7');
|
|
33
28
|
// Header UI on execution with FrontTerrain proprietary logo & version auto-checker
|
|
34
29
|
program.hook('preAction', async (_thisCommand, actionCommand) => {
|
|
35
|
-
intro(renderBranding('3.0.
|
|
30
|
+
intro(renderBranding('3.0.7'));
|
|
36
31
|
if (actionCommand && actionCommand.name() !== 'upgrade') {
|
|
37
|
-
await checkForUpdates('3.0.
|
|
32
|
+
await checkForUpdates('3.0.7');
|
|
38
33
|
}
|
|
39
34
|
});
|
|
40
35
|
// PostAction hook for Discovery Layer (runs on successful command completion)
|
|
@@ -106,46 +101,31 @@ program
|
|
|
106
101
|
outro(chalk.cyan('Fragility scan complete.'));
|
|
107
102
|
});
|
|
108
103
|
program
|
|
109
|
-
.command('
|
|
110
|
-
.
|
|
111
|
-
.
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
.
|
|
117
|
-
.
|
|
118
|
-
.
|
|
119
|
-
.
|
|
120
|
-
.option('-
|
|
121
|
-
.option('-
|
|
122
|
-
.option('--
|
|
123
|
-
.action(async (filePath, promptParts, options) => {
|
|
124
|
-
const promptStr = options.prompt || (Array.isArray(promptParts) && promptParts.length > 0 ? promptParts.join(' ') : undefined);
|
|
125
|
-
await handleCreate(filePath, { ...options, prompt: promptStr });
|
|
126
|
-
outro(chalk.green('File creation workflow complete.'));
|
|
127
|
-
});
|
|
128
|
-
program
|
|
129
|
-
.command('fix [prompt...]')
|
|
130
|
-
.description('Auto-fixes code using AI based on prompt or issue ID, with revert capability')
|
|
131
|
-
.option('-f, --file <file>', 'Specific file path to fix')
|
|
132
|
-
.option('-i, --issue <id>', 'Specific issue ID to apply fix for')
|
|
133
|
-
.option('-l, --lang <language>', 'Language for AI explanation')
|
|
134
|
-
.option('--native', 'Force native script')
|
|
135
|
-
.action(async (promptParts, options) => {
|
|
136
|
-
const promptStr = Array.isArray(promptParts) && promptParts.length > 0 ? promptParts.join(' ') : undefined;
|
|
137
|
-
await handleFix({ ...options, prompt: promptStr });
|
|
138
|
-
outro(chalk.green('Fix workflow complete.'));
|
|
139
|
-
});
|
|
140
|
-
program
|
|
141
|
-
.command('run <command...>')
|
|
142
|
-
.alias('exec')
|
|
143
|
-
.description('Execute terminal/shell command with automated AI failure diagnosis and auto-fix prompt')
|
|
144
|
-
.option('-l, --lang <language>', 'Language for AI diagnosis')
|
|
104
|
+
.command('agent [goal...]')
|
|
105
|
+
.alias('task')
|
|
106
|
+
.alias('goal')
|
|
107
|
+
.description('Autonomous AI agent: analyzes goals, creates/fixes code, executes commands, scans issues, & plans features')
|
|
108
|
+
.option('-c, --create <filePath>', 'Generate and create a new source code file at target relative path')
|
|
109
|
+
.option('-f, --file <file>', 'Specific file path to modify or fix')
|
|
110
|
+
.option('-i, --issue <id>', 'Specific issue ID from scan report to apply fix for')
|
|
111
|
+
.option('-r, --run <command...>', 'Execute shell command with automated AI failure diagnosis and auto-fix prompt')
|
|
112
|
+
.option('-s, --scan', 'Perform read-only bug & vulnerability scan across codebase')
|
|
113
|
+
.option('-a, --add <idea>', 'Evaluate feasibility & generate step-by-step roadmap for a feature idea')
|
|
114
|
+
.option('-v, --verify <cmd>', 'Custom verification command (e.g. "npm test" or "npm run build")')
|
|
115
|
+
.option('-m, --max-retries <number>', 'Maximum self-healing attempt iterations (default 3)')
|
|
116
|
+
.option('-y, --yes', 'Automatically retain changes without prompting for review')
|
|
117
|
+
.option('-l, --lang <language>', 'Language for AI teardowns, explanations, and summaries')
|
|
145
118
|
.option('--native', 'Force native script')
|
|
146
|
-
.action(async (
|
|
147
|
-
|
|
148
|
-
|
|
119
|
+
.action(async (goalParts, options) => {
|
|
120
|
+
const goalStr = Array.isArray(goalParts) && goalParts.length > 0 ? goalParts.join(' ') : undefined;
|
|
121
|
+
const runStr = Array.isArray(options.run) ? options.run.join(' ') : options.run;
|
|
122
|
+
await handleAgent(goalStr, {
|
|
123
|
+
...options,
|
|
124
|
+
run: runStr,
|
|
125
|
+
verifyCmd: options.verify,
|
|
126
|
+
maxRetries: options.maxRetries ? Number(options.maxRetries) : undefined,
|
|
127
|
+
});
|
|
128
|
+
outro(chalk.green('Agent workflow complete.'));
|
|
149
129
|
});
|
|
150
130
|
program
|
|
151
131
|
.command('recommend')
|
|
@@ -156,15 +136,6 @@ program
|
|
|
156
136
|
await handleRecommend(options);
|
|
157
137
|
outro(chalk.cyan('Recommendations complete.'));
|
|
158
138
|
});
|
|
159
|
-
program
|
|
160
|
-
.command('add <idea>')
|
|
161
|
-
.description('Feasibility + step-by-step plan for a new feature')
|
|
162
|
-
.option('-l, --lang <language>', 'Language for feature roadmap')
|
|
163
|
-
.option('--native', 'Force native script')
|
|
164
|
-
.action(async (idea, options) => {
|
|
165
|
-
await handleAdd(idea, options);
|
|
166
|
-
outro(chalk.cyan('Feature roadmap complete.'));
|
|
167
|
-
});
|
|
168
139
|
program
|
|
169
140
|
.command('audit')
|
|
170
141
|
.description('Security & dependency/supply-chain scan')
|
|
@@ -196,16 +167,6 @@ program
|
|
|
196
167
|
await handleConfig(options);
|
|
197
168
|
outro(chalk.cyan('Configuration updated.'));
|
|
198
169
|
});
|
|
199
|
-
program
|
|
200
|
-
.command('chat')
|
|
201
|
-
.description('Interactive AI chat session with codebase co-pilot (Press Ctrl+C to exit)')
|
|
202
|
-
.option('-w, --web', 'Allow scout to access internet for web search & live web context')
|
|
203
|
-
.option('-l, --lang <language>', 'Language for AI responses')
|
|
204
|
-
.option('--native', 'Force native script')
|
|
205
|
-
.action(async (options) => {
|
|
206
|
-
await handleChat(options);
|
|
207
|
-
outro(chalk.cyan('Chat session ended.'));
|
|
208
|
-
});
|
|
209
170
|
program
|
|
210
171
|
.command('search <query>')
|
|
211
172
|
.alias('web')
|
|
@@ -221,7 +182,7 @@ program
|
|
|
221
182
|
.command('upgrade')
|
|
222
183
|
.description('Check for updates and auto-upgrade Scout to the latest version')
|
|
223
184
|
.action(async () => {
|
|
224
|
-
await checkForUpdates('3.0.
|
|
185
|
+
await checkForUpdates('3.0.7', true);
|
|
225
186
|
outro(chalk.cyan('Upgrade check complete.'));
|
|
226
187
|
});
|
|
227
188
|
program.parse(process.argv);
|
package/bin/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import chalk from 'chalk';
|
|
2
|
-
export function renderBranding(version = '3.0.
|
|
2
|
+
export function renderBranding(version = '3.0.7') {
|
|
3
3
|
const logo = chalk.cyan.bold(' ███████╗████████╗') + ' ' + chalk.white.bold('███████╗██████╗ ██████╗ ██╗ ██╗████████╗') + '\n' +
|
|
4
4
|
chalk.cyan.bold(' ██╔════╝╚══██╔══╝') + ' ' + chalk.white.bold('██╔════╝██╔════╝██╔═══██╗██║ ██║╚══██╔══╝') + '\n' +
|
|
5
5
|
chalk.cyan.bold(' █████╗ ██║ ') + ' ' + chalk.white.bold('███████╗██║ ██║ ██║██║ ██║ ██║ ') + '\n' +
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["config.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC/B;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,aAAa,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IACrC,cAAc,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,OAAO,CAAC,EAAE,UAAU,EAAE,GAAG,SAAS,CAAC;CACpC;AAED,MAAM,WAAW,QAAQ;IACvB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAaD,wBAAgB,WAAW,CAAC,IAAI,EAAE,WAAW,QAG5C;AAED,wBAAgB,WAAW,IAAI,WAAW,GAAG,IAAI,CAOhD;AAED,wBAAgB,WAAW,IAAI,WAAW,EAAE,CAO3C;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,GAAG,WAAW,CAAC,GAAG,WAAW,CAW9F;AAED,wBAAgB,oBAAoB,IAAI,WAAW,GAAG,IAAI,CAGzD;AAED,wBAAgB,oBAAoB,IAAI,WAAW,GAAG,IAAI,CAOzD;AAED,wBAAgB,YAAY,IAAI,QAAQ,CASvC;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,QAAQ,QAGzC"}
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["config.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC/B;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,aAAa,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IACrC,cAAc,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,OAAO,CAAC,EAAE,UAAU,EAAE,GAAG,SAAS,CAAC;CACpC;AAED,MAAM,WAAW,QAAQ;IACvB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAaD,wBAAgB,cAAc,CAAC,MAAM,EAAE,GAAG,EAAE,QAI3C;AAED,wBAAgB,cAAc,IAAI,GAAG,EAAE,CAQtC;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,MAAY,EAAE,QAAQ,GAAE,MAAa,GAAG,MAAM,EAAE,CAoBvG;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,WAAW,QAG5C;AAED,wBAAgB,WAAW,IAAI,WAAW,GAAG,IAAI,CAOhD;AAED,wBAAgB,WAAW,IAAI,WAAW,EAAE,CAO3C;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,GAAG,WAAW,CAAC,GAAG,WAAW,CAW9F;AAED,wBAAgB,oBAAoB,IAAI,WAAW,GAAG,IAAI,CAGzD;AAED,wBAAgB,oBAAoB,IAAI,WAAW,GAAG,IAAI,CAOzD;AAED,wBAAgB,YAAY,IAAI,QAAQ,CASvC;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,QAAQ,QAGzC"}
|
package/bin/src/utils/config.js
CHANGED
|
@@ -9,6 +9,47 @@ function ensureFtDir() {
|
|
|
9
9
|
fs.mkdirSync(FT_DIR, { recursive: true });
|
|
10
10
|
}
|
|
11
11
|
}
|
|
12
|
+
export function saveScanReport(report) {
|
|
13
|
+
ensureFtDir();
|
|
14
|
+
const reportPath = path.join(FT_DIR, 'scan-report.json');
|
|
15
|
+
fs.writeFileSync(reportPath, JSON.stringify(report, null, 2));
|
|
16
|
+
}
|
|
17
|
+
export function loadScanReport() {
|
|
18
|
+
const reportPath = path.join(FT_DIR, 'scan-report.json');
|
|
19
|
+
if (!fs.existsSync(reportPath))
|
|
20
|
+
return [];
|
|
21
|
+
try {
|
|
22
|
+
return JSON.parse(fs.readFileSync(reportPath, 'utf-8'));
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
return [];
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
export function getDirectoryFiles(dir, baseDir = dir, maxFiles = 1000) {
|
|
29
|
+
let results = [];
|
|
30
|
+
try {
|
|
31
|
+
const list = fs.readdirSync(dir);
|
|
32
|
+
for (const file of list) {
|
|
33
|
+
if (results.length >= maxFiles)
|
|
34
|
+
break;
|
|
35
|
+
if (['node_modules', '.git', '.ft', 'dist', 'build', '.next', 'coverage'].includes(file))
|
|
36
|
+
continue;
|
|
37
|
+
if (file.endsWith('.d.ts') || file.endsWith('.d.ts.map') || file.endsWith('.js.map'))
|
|
38
|
+
continue;
|
|
39
|
+
const filePath = path.join(dir, file);
|
|
40
|
+
const stat = fs.statSync(filePath);
|
|
41
|
+
if (stat && stat.isDirectory()) {
|
|
42
|
+
results = results.concat(getDirectoryFiles(filePath, baseDir, maxFiles - results.length));
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
const relativePath = path.relative(baseDir, filePath).replace(/\\/g, '/');
|
|
46
|
+
results.push(relativePath);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
catch { }
|
|
51
|
+
return results;
|
|
52
|
+
}
|
|
12
53
|
export function saveContext(data) {
|
|
13
54
|
ensureFtDir();
|
|
14
55
|
fs.writeFileSync(CONTEXT_FILE, JSON.stringify(data, null, 2));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["config.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["config.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,48 +1 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "ft-scout",
|
|
3
|
-
"version": "3.0.5",
|
|
4
|
-
"type": "module",
|
|
5
|
-
"description": "FrontTerrain — The Onboarding Co-Pilot for New Codebases",
|
|
6
|
-
"main": "index.js",
|
|
7
|
-
"bin": {
|
|
8
|
-
"ft": "bin/ft.js",
|
|
9
|
-
"scout": "bin/ft.js"
|
|
10
|
-
},
|
|
11
|
-
"scripts": {
|
|
12
|
-
"test": "echo \"Tests passing\" && exit 0",
|
|
13
|
-
"build": "tsc"
|
|
14
|
-
},
|
|
15
|
-
"keywords": [
|
|
16
|
-
"cli",
|
|
17
|
-
"onboarding",
|
|
18
|
-
"git",
|
|
19
|
-
"llm",
|
|
20
|
-
"ai"
|
|
21
|
-
],
|
|
22
|
-
"author": "Front Terrain",
|
|
23
|
-
"license": "ISC",
|
|
24
|
-
"repository": {
|
|
25
|
-
"type": "git",
|
|
26
|
-
"url": "git+https://github.com/Front-Terrain/FT-Check.git"
|
|
27
|
-
},
|
|
28
|
-
"bugs": {
|
|
29
|
-
"url": "https://github.com/Front-Terrain/FT-Check/issues"
|
|
30
|
-
},
|
|
31
|
-
"homepage": "https://github.com/Front-Terrain/FT-Check#readme",
|
|
32
|
-
"engines": {
|
|
33
|
-
"node": ">=18.0.0"
|
|
34
|
-
},
|
|
35
|
-
"dependencies": {
|
|
36
|
-
"@clack/prompts": "^1.7.0",
|
|
37
|
-
"chalk": "^6.0.0",
|
|
38
|
-
"commander": "^15.0.0",
|
|
39
|
-
"dotenv": "^17.4.2",
|
|
40
|
-
"openai": "^7.1.0",
|
|
41
|
-
"simple-git": "^3.36.0"
|
|
42
|
-
},
|
|
43
|
-
"devDependencies": {
|
|
44
|
-
"@types/node": "^26.1.2",
|
|
45
|
-
"tsx": "^4.23.1",
|
|
46
|
-
"typescript": "^7.0.2"
|
|
47
|
-
}
|
|
48
|
-
}
|
|
1
|
+
{"name":"ft-scout","version":"3.0.7","type":"module","description":"FrontTerrain — The Onboarding Co-Pilot for New Codebases","main":"index.js","bin":{"ft":"bin/ft.js","scout":"bin/ft.js"},"scripts":{"test":"echo \"Tests passing\" && exit 0","build":"tsc"},"keywords":["cli","onboarding","git","llm","ai"],"author":"Front Terrain","license":"ISC","repository":{"type":"git","url":"git+https://github.com/Front-Terrain/FT-Check.git"},"bugs":{"url":"https://github.com/Front-Terrain/FT-Check/issues"},"homepage":"https://github.com/Front-Terrain/FT-Check#readme","engines":{"node":">=18.0.0"},"dependencies":{"@clack/prompts":"^1.7.0","chalk":"^6.0.0","commander":"^15.0.0","dotenv":"^17.4.2","openai":"^7.1.0","simple-git":"^3.36.0"},"devDependencies":{"@types/node":"^26.1.2","tsx":"^4.23.1","typescript":"^7.0.2"}}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"add.d.ts","sourceRoot":"","sources":["add.ts"],"names":[],"mappings":"AAQA,wBAAsB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,iBAgD1F"}
|
package/bin/src/commands/add.js
DELETED
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
import fs from 'fs';
|
|
2
|
-
import path from 'path';
|
|
3
|
-
import chalk from 'chalk';
|
|
4
|
-
import { spinner } from '@clack/prompts';
|
|
5
|
-
import { generateFeaturePlan } from '../engine/llm.js';
|
|
6
|
-
import { renderMarkdown, safeNote } from '../utils/markdown.js';
|
|
7
|
-
import { loadContext } from '../utils/config.js';
|
|
8
|
-
export async function handleAdd(idea, options) {
|
|
9
|
-
if (!idea || !idea.trim()) {
|
|
10
|
-
safeNote(chalk.red('Please provide a feature description. Example: `ft add "add webhook retry queue"`'), '❌ Missing Feature Description');
|
|
11
|
-
return;
|
|
12
|
-
}
|
|
13
|
-
const s = spinner();
|
|
14
|
-
s.start(`Evaluating feasibility & generating implementation plan for: "${chalk.cyan(idea)}"...`);
|
|
15
|
-
const cwd = process.cwd();
|
|
16
|
-
const context = loadContext();
|
|
17
|
-
const projectName = context?.projectName || path.basename(cwd);
|
|
18
|
-
const getFiles = (dir, depth = 2) => {
|
|
19
|
-
let results = [];
|
|
20
|
-
try {
|
|
21
|
-
const list = fs.readdirSync(dir);
|
|
22
|
-
for (const file of list) {
|
|
23
|
-
if (['node_modules', '.git', 'dist', 'build', '.ft'].includes(file))
|
|
24
|
-
continue;
|
|
25
|
-
const fullPath = path.join(dir, file);
|
|
26
|
-
const relPath = path.relative(cwd, fullPath);
|
|
27
|
-
const stat = fs.statSync(fullPath);
|
|
28
|
-
if (stat.isDirectory()) {
|
|
29
|
-
if (depth > 1)
|
|
30
|
-
results = results.concat(getFiles(fullPath, depth - 1));
|
|
31
|
-
}
|
|
32
|
-
else {
|
|
33
|
-
results.push(relPath);
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
catch { }
|
|
38
|
-
return results;
|
|
39
|
-
};
|
|
40
|
-
const filesList = getFiles(cwd, 2);
|
|
41
|
-
const plan = await generateFeaturePlan(idea, projectName, filesList, options?.lang || context?.language, options?.native);
|
|
42
|
-
s.stop('Feasibility assessment & roadmap complete.');
|
|
43
|
-
safeNote(renderMarkdown(plan), `🚀 Feature Implementation Roadmap: "${idea}"`);
|
|
44
|
-
}
|
|
45
|
-
//# sourceMappingURL=add.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"add.js","sourceRoot":"","sources":["add.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACzC,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,IAAY,EAAE,OAA6C;IACzF,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;QAC1B,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,mFAAmF,CAAC,EAAE,+BAA+B,CAAC,CAAC;QAC1I,OAAO;IACT,CAAC;IAED,MAAM,CAAC,GAAG,OAAO,EAAE,CAAC;IACpB,CAAC,CAAC,KAAK,CAAC,iEAAiE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAEjG,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC1B,MAAM,OAAO,GAAG,WAAW,EAAE,CAAC;IAC9B,MAAM,WAAW,GAAG,OAAO,EAAE,WAAW,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IAE/D,MAAM,QAAQ,GAAG,CAAC,GAAW,EAAE,KAAK,GAAG,CAAC,EAAY,EAAE;QACpD,IAAI,OAAO,GAAa,EAAE,CAAC;QAC3B,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;YACjC,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE,CAAC;gBACxB,IAAI,CAAC,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;oBAAE,SAAS;gBAC9E,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;gBACtC,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;gBAC7C,MAAM,IAAI,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;gBACnC,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;oBACvB,IAAI,KAAK,GAAG,CAAC;wBAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;gBACzE,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBACxB,CAAC;YACH,CAAC;QACH,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;QACV,OAAO,OAAO,CAAC;IACjB,CAAC,CAAC;IAEF,MAAM,SAAS,GAAG,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IAEnC,MAAM,IAAI,GAAG,MAAM,mBAAmB,CACpC,IAAI,EACJ,WAAW,EACX,SAAS,EACT,OAAO,EAAE,IAAI,IAAI,OAAO,EAAE,QAAQ,EAClC,OAAO,EAAE,MAAM,CAChB,CAAC;IAEF,CAAC,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC;IAErD,QAAQ,CACN,cAAc,CAAC,IAAI,CAAC,EACpB,uCAAuC,IAAI,GAAG,CAC/C,CAAC;AACJ,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"chat.d.ts","sourceRoot":"","sources":["chat.ts"],"names":[],"mappings":"AAkCA,wBAAsB,UAAU,CAAC,OAAO,CAAC,EAAE;IAAE,GAAG,CAAC,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,iBA2L5F"}
|
package/bin/src/commands/chat.js
DELETED
|
@@ -1,191 +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 { handleScan } from './scan.js';
|
|
13
|
-
import { handleUndo } from './undo.js';
|
|
14
|
-
function getDirectoryFiles(dir, baseDir = dir, maxFiles = 150) {
|
|
15
|
-
let results = [];
|
|
16
|
-
try {
|
|
17
|
-
const list = fs.readdirSync(dir);
|
|
18
|
-
for (const file of list) {
|
|
19
|
-
if (results.length >= maxFiles)
|
|
20
|
-
break;
|
|
21
|
-
if (['node_modules', '.git', '.ft', 'dist', 'build', '.next', 'coverage'].includes(file))
|
|
22
|
-
continue;
|
|
23
|
-
const filePath = path.join(dir, file);
|
|
24
|
-
const stat = fs.statSync(filePath);
|
|
25
|
-
if (stat && stat.isDirectory()) {
|
|
26
|
-
results = results.concat(getDirectoryFiles(filePath, baseDir, maxFiles - results.length));
|
|
27
|
-
}
|
|
28
|
-
else {
|
|
29
|
-
const relativePath = path.relative(baseDir, filePath).replace(/\\/g, '/');
|
|
30
|
-
results.push(relativePath);
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
catch { }
|
|
35
|
-
return results;
|
|
36
|
-
}
|
|
37
|
-
export async function handleChat(options) {
|
|
38
|
-
const existingContext = loadContext();
|
|
39
|
-
const targetLang = normalizeLanguage(options?.lang) || normalizeLanguage(existingContext?.language);
|
|
40
|
-
const cwd = process.cwd();
|
|
41
|
-
const filesList = getDirectoryFiles(cwd);
|
|
42
|
-
const projectName = existingContext?.projectName || path.basename(cwd) || 'Codebase';
|
|
43
|
-
let manifestContent = '';
|
|
44
|
-
const pkgPath = path.join(cwd, 'package.json');
|
|
45
|
-
if (fs.existsSync(pkgPath)) {
|
|
46
|
-
try {
|
|
47
|
-
manifestContent = fs.readFileSync(pkgPath, 'utf-8');
|
|
48
|
-
}
|
|
49
|
-
catch {
|
|
50
|
-
manifestContent = '{}';
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
const welcomeBanner = `
|
|
54
|
-
${chalk.bold.cyan('Interactive Agentic AI Chat Session Active')} ${targetLang ? `(${targetLang})` : ''}
|
|
55
|
-
|
|
56
|
-
${chalk.bold('Slash Commands Available:')}
|
|
57
|
-
${chalk.cyan('/create <file> <prompt>')} - Create a new source file
|
|
58
|
-
${chalk.cyan('/fix [file] [prompt]')} - Auto-fix code in file or codebase
|
|
59
|
-
${chalk.cyan('/run <command>')} - Execute terminal/shell command
|
|
60
|
-
${chalk.cyan('/read <file>')} - Read and display file contents
|
|
61
|
-
${chalk.cyan('/scan')} - Scan codebase for bugs
|
|
62
|
-
${chalk.cyan('/undo')} - Revert Scout's last action
|
|
63
|
-
${chalk.cyan('/help')} - Show slash commands help
|
|
64
|
-
${chalk.cyan('exit / quit')} - Quit chat session
|
|
65
|
-
`.trim();
|
|
66
|
-
safeNote(welcomeBanner, '🤖 Scout Agentic Copilot Chat');
|
|
67
|
-
const chatHistory = [];
|
|
68
|
-
while (true) {
|
|
69
|
-
const query = await text({
|
|
70
|
-
message: chalk.bold('You:'),
|
|
71
|
-
placeholder: 'Ask question, run slash command (/create, /fix, /run...), or request code generation...',
|
|
72
|
-
validate: (value) => (!value || !value.trim() ? 'Message cannot be empty' : undefined),
|
|
73
|
-
});
|
|
74
|
-
if (isCancel(query)) {
|
|
75
|
-
safeNote(chalk.yellow('Exiting interactive chat session. Goodbye!'), '👋 Chat Ended');
|
|
76
|
-
break;
|
|
77
|
-
}
|
|
78
|
-
const qText = query.trim();
|
|
79
|
-
if (['exit', 'quit', 'q', ':q'].includes(qText.toLowerCase())) {
|
|
80
|
-
safeNote(chalk.yellow('Exiting interactive chat session. Goodbye!'), '👋 Chat Ended');
|
|
81
|
-
break;
|
|
82
|
-
}
|
|
83
|
-
// Slash command processing
|
|
84
|
-
if (qText.startsWith('/')) {
|
|
85
|
-
const parts = qText.split(' ');
|
|
86
|
-
const slashCmd = parts[0]?.toLowerCase();
|
|
87
|
-
const restArg = parts.slice(1).join(' ').trim();
|
|
88
|
-
if (slashCmd === '/help') {
|
|
89
|
-
safeNote(welcomeBanner, '🤖 Slash Command Help');
|
|
90
|
-
continue;
|
|
91
|
-
}
|
|
92
|
-
if (slashCmd === '/create') {
|
|
93
|
-
const fileParts = restArg.split(' ');
|
|
94
|
-
const targetPath = fileParts[0];
|
|
95
|
-
const promptStr = fileParts.slice(1).join(' ');
|
|
96
|
-
await handleCreate(targetPath, { prompt: promptStr, lang: targetLang, native: options?.native });
|
|
97
|
-
continue;
|
|
98
|
-
}
|
|
99
|
-
if (slashCmd === '/fix') {
|
|
100
|
-
await handleFix({ prompt: restArg, lang: targetLang, native: options?.native });
|
|
101
|
-
continue;
|
|
102
|
-
}
|
|
103
|
-
if (slashCmd === '/run' || slashCmd === '/exec') {
|
|
104
|
-
await handleRunCommand(restArg, { lang: targetLang, native: options?.native });
|
|
105
|
-
continue;
|
|
106
|
-
}
|
|
107
|
-
if (slashCmd === '/read') {
|
|
108
|
-
if (!restArg) {
|
|
109
|
-
safeNote(chalk.yellow('Please specify a file path to read (e.g. /read src/index.ts)'), '⚠️ Read Command');
|
|
110
|
-
continue;
|
|
111
|
-
}
|
|
112
|
-
const fullP = path.resolve(cwd, restArg);
|
|
113
|
-
if (fs.existsSync(fullP)) {
|
|
114
|
-
const content = fs.readFileSync(fullP, 'utf-8');
|
|
115
|
-
safeNote(renderMarkdown(`### 📄 \`${restArg}\`\n\`\`\`\n${content.slice(0, 5000)}\n\`\`\``), '📖 File Contents');
|
|
116
|
-
}
|
|
117
|
-
else {
|
|
118
|
-
safeNote(chalk.yellow(`File \`${restArg}\` not found in workspace.`), '⚠️ File Not Found');
|
|
119
|
-
}
|
|
120
|
-
continue;
|
|
121
|
-
}
|
|
122
|
-
if (slashCmd === '/scan') {
|
|
123
|
-
await handleScan();
|
|
124
|
-
continue;
|
|
125
|
-
}
|
|
126
|
-
if (slashCmd === '/undo') {
|
|
127
|
-
await handleUndo();
|
|
128
|
-
continue;
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
// Regular AI Q&A Synthesis
|
|
132
|
-
const askSpinner = spinner();
|
|
133
|
-
const isWebNeeded = options?.web ||
|
|
134
|
-
/^\/(web|internet|search)\b/i.test(qText) ||
|
|
135
|
-
/\b(search the web|internet|online docs|latest docs|web search)\b/i.test(qText);
|
|
136
|
-
if (isWebNeeded) {
|
|
137
|
-
askSpinner.start('Searching internet & analyzing context...');
|
|
138
|
-
}
|
|
139
|
-
else {
|
|
140
|
-
askSpinner.start('Analyzing context & generating response...');
|
|
141
|
-
}
|
|
142
|
-
const answer = await askRepoQuestion(qText, projectName, filesList, manifestContent, chatHistory, { useWeb: options?.web, language: targetLang, native: options?.native });
|
|
143
|
-
askSpinner.stop('Scout:');
|
|
144
|
-
const formattedAnswer = renderMarkdown(answer);
|
|
145
|
-
safeNote(formattedAnswer, '💡 AI Response');
|
|
146
|
-
chatHistory.push({ role: 'user', content: qText });
|
|
147
|
-
chatHistory.push({ role: 'assistant', content: answer });
|
|
148
|
-
// Agentic Intent Detection for File Creation, Code Fix, or Shell Execution
|
|
149
|
-
const lowerQ = qText.toLowerCase();
|
|
150
|
-
// Intent 1: Create File
|
|
151
|
-
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);
|
|
152
|
-
if (createMatch && createMatch[1] && !createMatch[1].includes('package.json')) {
|
|
153
|
-
const targetFile = createMatch[1];
|
|
154
|
-
const shouldCreate = await confirm({
|
|
155
|
-
message: chalk.bold(`Would you like Scout to create file ${chalk.cyan(targetFile)} now?`),
|
|
156
|
-
initialValue: true,
|
|
157
|
-
});
|
|
158
|
-
if (!isCancel(shouldCreate) && shouldCreate) {
|
|
159
|
-
await handleCreate(targetFile, { prompt: qText, lang: targetLang, native: options?.native });
|
|
160
|
-
continue;
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
// Intent 2: Run Command
|
|
164
|
-
const runMatch = qText.match(/(?:run|execute|test|build)\s+(?:command\s+)?`(npm|npx|tsc|git|python|node|cargo|go|make|yarn|pnpm)[^`]+`/i) ||
|
|
165
|
-
qText.match(/^(?:run|execute|run command)\s+["']?([^"']+)["']?$/i);
|
|
166
|
-
if (runMatch && runMatch[1]) {
|
|
167
|
-
const targetCmd = runMatch[1];
|
|
168
|
-
const shouldRun = await confirm({
|
|
169
|
-
message: chalk.bold(`Would you like Scout to run command \`${chalk.cyan(targetCmd)}\` now?`),
|
|
170
|
-
initialValue: true,
|
|
171
|
-
});
|
|
172
|
-
if (!isCancel(shouldRun) && shouldRun) {
|
|
173
|
-
await handleRunCommand(targetCmd, { lang: targetLang, native: options?.native });
|
|
174
|
-
continue;
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
// Intent 3: Auto-fix Code
|
|
178
|
-
const fixMatch = lowerQ.includes('fix bug') || lowerQ.includes('auto-fix') || lowerQ.includes('refactor file') || lowerQ.includes('fix code');
|
|
179
|
-
if (fixMatch) {
|
|
180
|
-
const shouldFix = await confirm({
|
|
181
|
-
message: chalk.bold('Would you like Scout to apply this auto-fix to your codebase now?'),
|
|
182
|
-
initialValue: true,
|
|
183
|
-
});
|
|
184
|
-
if (!isCancel(shouldFix) && shouldFix) {
|
|
185
|
-
await handleFix({ prompt: qText, lang: targetLang, native: options?.native });
|
|
186
|
-
continue;
|
|
187
|
-
}
|
|
188
|
-
}
|
|
189
|
-
}
|
|
190
|
-
}
|
|
191
|
-
//# sourceMappingURL=chat.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"chat.js","sourceRoot":"","sources":["chat.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAClE,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AACrC,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAEvC,SAAS,iBAAiB,CAAC,GAAW,EAAE,OAAO,GAAW,GAAG,EAAE,QAAQ,GAAW,GAAG;IACnF,IAAI,OAAO,GAAa,EAAE,CAAC;IAC3B,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QACjC,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE,CAAC;YACxB,IAAI,OAAO,CAAC,MAAM,IAAI,QAAQ;gBAAE,MAAM;YACtC,IAAI,CAAC,cAAc,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;gBAAE,SAAS;YACnG,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YACtC,MAAM,IAAI,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;YACnC,IAAI,IAAI,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;gBAC/B,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAC,QAAQ,EAAE,OAAO,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;YAC5F,CAAC;iBAAM,CAAC;gBACN,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC1E,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAC7B,CAAC;QACH,CAAC;IACH,CAAC;IAAC,MAAM,CAAC,CAAA,CAAC;IACV,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,OAA4D;IAC3F,MAAM,eAAe,GAAG,WAAW,EAAE,CAAC;IACtC,MAAM,UAAU,GAAG,iBAAiB,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,iBAAiB,CAAC,eAAe,EAAE,QAAQ,CAAC,CAAC;IAEpG,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC1B,MAAM,SAAS,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;IACzC,MAAM,WAAW,GAAG,eAAe,EAAE,WAAW,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,UAAU,CAAC;IAErF,IAAI,eAAe,GAAG,EAAE,CAAC;IACzB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;IAC/C,IAAI,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3B,IAAI,CAAC;YACH,eAAe,GAAG,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACtD,CAAC;QAAC,MAAM,CAAC;YACP,eAAe,GAAG,IAAI,CAAC;QACzB,CAAC;IACH,CAAC;IAED,MAAM,aAAa,GAAG;EACtB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,4CAA4C,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,IAAI,UAAU,GAAG,CAAC,CAAC,CAAC,EAAE;;EAEpG,KAAK,CAAC,IAAI,CAAC,2BAA2B,CAAC;IACrC,KAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC;IACrC,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC;IAClC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC;IAC5B,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC;IAC1B,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC;IACnB,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC;IACnB,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC;IACnB,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC;GAC1B,CAAC,IAAI,EAAE,CAAC;IAET,QAAQ,CAAC,aAAa,EAAE,+BAA+B,CAAC,CAAC;IAEzD,MAAM,WAAW,GAA2D,EAAE,CAAC;IAE/E,OAAO,IAAI,EAAE,CAAC;QACZ,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC;YACvB,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC;YAC3B,WAAW,EAAE,yFAAyF;YACtG,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,SAAS,CAAC;SACvF,CAAC,CAAC;QAEH,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YACpB,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,4CAA4C,CAAC,EAAE,eAAe,CAAC,CAAC;YACtF,MAAM;QACR,CAAC;QAED,MAAM,KAAK,GAAI,KAAgB,CAAC,IAAI,EAAE,CAAC;QACvC,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;YAC9D,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,4CAA4C,CAAC,EAAE,eAAe,CAAC,CAAC;YACtF,MAAM;QACR,CAAC;QAED,2BAA2B;QAC3B,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAC1B,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC/B,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC;YACzC,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;YAEhD,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;gBACzB,QAAQ,CAAC,aAAa,EAAE,uBAAuB,CAAC,CAAC;gBACjD,SAAS;YACX,CAAC;YAED,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;gBAC3B,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBACrC,MAAM,UAAU,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;gBAChC,MAAM,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAC/C,MAAM,YAAY,CAAC,UAAU,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;gBACjG,SAAS;YACX,CAAC;YAED,IAAI,QAAQ,KAAK,MAAM,EAAE,CAAC;gBACxB,MAAM,SAAS,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;gBAChF,SAAS;YACX,CAAC;YAED,IAAI,QAAQ,KAAK,MAAM,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;gBAChD,MAAM,gBAAgB,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;gBAC/E,SAAS;YACX,CAAC;YAED,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;gBACzB,IAAI,CAAC,OAAO,EAAE,CAAC;oBACb,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,8DAA8D,CAAC,EAAE,iBAAiB,CAAC,CAAC;oBAC1G,SAAS;gBACX,CAAC;gBACD,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;gBACzC,IAAI,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;oBACzB,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;oBAChD,QAAQ,CAAC,cAAc,CAAC,YAAY,OAAO,eAAe,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,EAAE,kBAAkB,CAAC,CAAC;gBACnH,CAAC;qBAAM,CAAC;oBACN,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,OAAO,4BAA4B,CAAC,EAAE,mBAAmB,CAAC,CAAC;gBAC7F,CAAC;gBACD,SAAS;YACX,CAAC;YAED,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;gBACzB,MAAM,UAAU,EAAE,CAAC;gBACnB,SAAS;YACX,CAAC;YAED,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;gBACzB,MAAM,UAAU,EAAE,CAAC;gBACnB,SAAS;YACX,CAAC;QACH,CAAC;QAED,2BAA2B;QAC3B,MAAM,UAAU,GAAG,OAAO,EAAE,CAAC;QAC7B,MAAM,WAAW,GACf,OAAO,EAAE,GAAG;YACZ,6BAA6B,CAAC,IAAI,CAAC,KAAK,CAAC;YACzC,mEAAmE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAElF,IAAI,WAAW,EAAE,CAAC;YAChB,UAAU,CAAC,KAAK,CAAC,2CAA2C,CAAC,CAAC;QAChE,CAAC;aAAM,CAAC;YACN,UAAU,CAAC,KAAK,CAAC,4CAA4C,CAAC,CAAC;QACjE,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,eAAe,CAClC,KAAK,EACL,WAAW,EACX,SAAS,EACT,eAAe,EACf,WAAW,EACX,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CACxE,CAAC;QAEF,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAE1B,MAAM,eAAe,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;QAC/C,QAAQ,CAAC,eAAe,EAAE,gBAAgB,CAAC,CAAC;QAE5C,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;QACnD,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;QAEzD,2EAA2E;QAC3E,MAAM,MAAM,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;QAEnC,wBAAwB;QACxB,MAAM,WAAW,GAAG,KAAK,CAAC,KAAK,CAAC,qGAAqG,CAAC,CAAC;QACvI,IAAI,WAAW,IAAI,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;YAC9E,MAAM,UAAU,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;YAClC,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC;gBACjC,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,uCAAuC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;gBACzF,YAAY,EAAE,IAAI;aACnB,CAAC,CAAC;YAEH,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,YAAY,EAAE,CAAC;gBAC5C,MAAM,YAAY,CAAC,UAAU,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;gBAC7F,SAAS;YACX,CAAC;QACH,CAAC;QAED,wBAAwB;QACxB,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,2GAA2G,CAAC;YACxH,KAAK,CAAC,KAAK,CAAC,qDAAqD,CAAC,CAAC;QACpF,IAAI,QAAQ,IAAI,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;YAC5B,MAAM,SAAS,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;YAC9B,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC;gBAC9B,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,yCAAyC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC;gBAC5F,YAAY,EAAE,IAAI;aACnB,CAAC,CAAC;YAEH,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,SAAS,EAAE,CAAC;gBACtC,MAAM,gBAAgB,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;gBACjF,SAAS;YACX,CAAC;QACH,CAAC;QAED,0BAA0B;QAC1B,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QAC9I,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC;gBAC9B,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,mEAAmE,CAAC;gBACxF,YAAY,EAAE,IAAI;aACnB,CAAC,CAAC;YAEH,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,SAAS,EAAE,CAAC;gBACtC,MAAM,SAAS,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;gBAC9E,SAAS;YACX,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -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"}
|