ft-scout 6.0.0 → 6.0.1
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/src/index.js +63 -63
- package/bin/src/utils/branding.js +1 -1
- package/package.json +2 -2
package/bin/src/index.js
CHANGED
|
@@ -30,13 +30,13 @@ program
|
|
|
30
30
|
.name('scout')
|
|
31
31
|
.alias('ft')
|
|
32
32
|
.description('FrontTerrain — The Onboarding Co-Pilot for New Codebases')
|
|
33
|
-
.version('6.0.
|
|
33
|
+
.version('6.0.1');
|
|
34
34
|
// Header UI on execution with FrontTerrain proprietary logo & version auto-checker
|
|
35
35
|
program.hook('preAction', async (_thisCommand, actionCommand) => {
|
|
36
|
-
intro(renderBranding('6.0.
|
|
36
|
+
intro(renderBranding('6.0.1'));
|
|
37
37
|
const cmdName = actionCommand ? actionCommand.name() : '';
|
|
38
38
|
if (cmdName !== 'upgrade') {
|
|
39
|
-
await checkForUpdates('6.0.
|
|
39
|
+
await checkForUpdates('6.0.1');
|
|
40
40
|
}
|
|
41
41
|
// Auth Guard: enforce authentication for all commands except login, signup, upgrade, help, dashboard, auth, status
|
|
42
42
|
const EXEMPT_COMMANDS = ['login', 'signin', 'signup', 'register', 'upgrade', 'help', 'dashboard', 'web-ui', 'gui', 'auth', 'status'];
|
|
@@ -104,30 +104,30 @@ program
|
|
|
104
104
|
.option('-l, --lang <language>', 'Language for AI teardowns, summaries, and Q&A responses')
|
|
105
105
|
.option('--native', 'Force native script instead of Romanized terminal script')
|
|
106
106
|
.action(async (repoUrl, options) => {
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
107
|
+
await handleInit(repoUrl, options);
|
|
108
|
+
outro(chalk.green('Initialization complete!'));
|
|
109
|
+
});
|
|
110
110
|
program
|
|
111
111
|
.command('brief')
|
|
112
112
|
.description('Human-readable onboarding summary (the "week-one explainer")')
|
|
113
113
|
.action(async () => {
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
114
|
+
await handleBrief();
|
|
115
|
+
outro(chalk.cyan('Brief overview complete.'));
|
|
116
|
+
});
|
|
117
117
|
program
|
|
118
118
|
.command('owners <path>')
|
|
119
119
|
.description('Who actually knows this file (from git history, not guesses)')
|
|
120
120
|
.action(async (path) => {
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
121
|
+
await handleOwners(path);
|
|
122
|
+
outro(chalk.cyan('File ownership analysis complete.'));
|
|
123
|
+
});
|
|
124
124
|
program
|
|
125
125
|
.command('setup')
|
|
126
126
|
.description('Diagnoses and fixes local environment/run failures')
|
|
127
127
|
.action(async () => {
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
128
|
+
await handleSetup();
|
|
129
|
+
outro(chalk.cyan('Environment setup check complete.'));
|
|
130
|
+
});
|
|
131
131
|
program
|
|
132
132
|
.command('risky [targetRepo]')
|
|
133
133
|
.description('Fragility map: high-churn files, untested code, hotfix magnets, logical coupling, & knowledge silos')
|
|
@@ -136,9 +136,9 @@ program
|
|
|
136
136
|
.option('-l, --lang <language>', 'Language for AI risk analysis')
|
|
137
137
|
.option('--native', 'Force native script')
|
|
138
138
|
.action(async (targetRepo, options) => {
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
139
|
+
await handleRisky(targetRepo, options);
|
|
140
|
+
outro(chalk.cyan('Fragility scan complete.'));
|
|
141
|
+
});
|
|
142
142
|
program
|
|
143
143
|
.command('agent [goal...]')
|
|
144
144
|
.alias('task')
|
|
@@ -156,46 +156,46 @@ program
|
|
|
156
156
|
.option('-l, --lang <language>', 'Language for AI teardowns, explanations, and summaries')
|
|
157
157
|
.option('--native', 'Force native script')
|
|
158
158
|
.action(async (goalParts, options) => {
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
});
|
|
167
|
-
outro(chalk.green('Agent workflow complete.'));
|
|
159
|
+
const goalStr = Array.isArray(goalParts) && goalParts.length > 0 ? goalParts.join(' ') : undefined;
|
|
160
|
+
const runStr = Array.isArray(options.run) ? options.run.join(' ') : options.run;
|
|
161
|
+
await handleAgent(goalStr, {
|
|
162
|
+
...options,
|
|
163
|
+
run: runStr,
|
|
164
|
+
verifyCmd: options.verify,
|
|
165
|
+
maxRetries: options.maxRetries ? Number(options.maxRetries) : undefined,
|
|
168
166
|
});
|
|
167
|
+
outro(chalk.green('Agent workflow complete.'));
|
|
168
|
+
});
|
|
169
169
|
program
|
|
170
170
|
.command('recommend')
|
|
171
171
|
.description('Architecture, performance, and DSA-level suggestions')
|
|
172
172
|
.option('-l, --lang <language>', 'Language for recommendations')
|
|
173
173
|
.option('--native', 'Force native script')
|
|
174
174
|
.action(async (options) => {
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
175
|
+
await handleRecommend(options);
|
|
176
|
+
outro(chalk.cyan('Recommendations complete.'));
|
|
177
|
+
});
|
|
178
178
|
program
|
|
179
179
|
.command('audit')
|
|
180
180
|
.description('Security & dependency/supply-chain scan')
|
|
181
181
|
.action(async () => {
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
182
|
+
await handleAudit();
|
|
183
|
+
outro(chalk.cyan('Security audit complete.'));
|
|
184
|
+
});
|
|
185
185
|
program
|
|
186
186
|
.command('history')
|
|
187
187
|
.description('Log of everything FT has done in this repo')
|
|
188
188
|
.action(async () => {
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
189
|
+
await handleHistory();
|
|
190
|
+
outro(chalk.cyan('History view complete.'));
|
|
191
|
+
});
|
|
192
192
|
program
|
|
193
193
|
.command('undo')
|
|
194
194
|
.description("Revert FT's last change")
|
|
195
195
|
.action(async () => {
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
196
|
+
await handleUndo();
|
|
197
|
+
outro(chalk.cyan('Undo complete.'));
|
|
198
|
+
});
|
|
199
199
|
program
|
|
200
200
|
.command('config')
|
|
201
201
|
.description('Manage permissions and confidential-data access')
|
|
@@ -203,9 +203,9 @@ program
|
|
|
203
203
|
.option('-d, --deny', 'Deny access to confidential data')
|
|
204
204
|
.option('-t, --tips <mode>', 'Toggle or check discovery tips (on | off | status)')
|
|
205
205
|
.action(async (options) => {
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
206
|
+
await handleConfig(options);
|
|
207
|
+
outro(chalk.cyan('Configuration updated.'));
|
|
208
|
+
});
|
|
209
209
|
program
|
|
210
210
|
.command('search <query>')
|
|
211
211
|
.alias('web')
|
|
@@ -214,16 +214,16 @@ program
|
|
|
214
214
|
.option('-l, --lang <language>', 'Language for AI search synthesis')
|
|
215
215
|
.option('--native', 'Force native script')
|
|
216
216
|
.action(async (query, options) => {
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
217
|
+
await handleWebSearch(query, options);
|
|
218
|
+
outro(chalk.cyan('Internet search complete.'));
|
|
219
|
+
});
|
|
220
220
|
program
|
|
221
221
|
.command('upgrade')
|
|
222
222
|
.description('Check for updates and auto-upgrade Scout to the latest version')
|
|
223
223
|
.action(async () => {
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
224
|
+
await checkForUpdates('6.0.1', true);
|
|
225
|
+
outro(chalk.cyan('Upgrade check complete.'));
|
|
226
|
+
});
|
|
227
227
|
program
|
|
228
228
|
.command('signup')
|
|
229
229
|
.alias('register')
|
|
@@ -233,9 +233,9 @@ program
|
|
|
233
233
|
.option('-p, --password <password>', 'Password')
|
|
234
234
|
.option('-h, --holosene', 'Sign up via Holosene Account (holosene.frontterrain.com)')
|
|
235
235
|
.action(async (options) => {
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
236
|
+
await handleSignup(options);
|
|
237
|
+
outro(chalk.cyan('Sign up flow finished.'));
|
|
238
|
+
});
|
|
239
239
|
program
|
|
240
240
|
.command('login')
|
|
241
241
|
.alias('signin')
|
|
@@ -246,24 +246,24 @@ program
|
|
|
246
246
|
.option('-h, --holosene', 'Authenticate using Holosene account credentials')
|
|
247
247
|
.option('--holosene-token <token>', 'Authenticate with direct Holosene access token')
|
|
248
248
|
.action(async (options) => {
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
249
|
+
await handleLogin(options);
|
|
250
|
+
outro(chalk.cyan('Login flow finished.'));
|
|
251
|
+
});
|
|
252
252
|
program
|
|
253
253
|
.command('logout')
|
|
254
254
|
.description('Log out of your active FrontTerrain session')
|
|
255
255
|
.action(async () => {
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
256
|
+
await handleLogout();
|
|
257
|
+
outro(chalk.cyan('Logout complete.'));
|
|
258
|
+
});
|
|
259
259
|
program
|
|
260
260
|
.command('auth')
|
|
261
261
|
.alias('status')
|
|
262
262
|
.description('Check current authentication status and user session details')
|
|
263
263
|
.action(async () => {
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
264
|
+
await handleAuthStatus();
|
|
265
|
+
outro(chalk.cyan('Auth status check complete.'));
|
|
266
|
+
});
|
|
267
267
|
program
|
|
268
268
|
.command('dashboard')
|
|
269
269
|
.alias('web-ui')
|
|
@@ -271,9 +271,9 @@ program
|
|
|
271
271
|
.description('Launch interactive Scout Web Dashboard sync server')
|
|
272
272
|
.option('--open', 'Automatically open browser on localhost')
|
|
273
273
|
.action(async (options) => {
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
});
|
|
274
|
+
await handleDashboard({
|
|
275
|
+
open: !!options.open,
|
|
277
276
|
});
|
|
277
|
+
});
|
|
278
278
|
program.parse(process.argv);
|
|
279
279
|
//# sourceMappingURL=index.js.map
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import chalk from 'chalk';
|
|
2
|
-
export function renderBranding(version = '6.0.
|
|
2
|
+
export function renderBranding(version = '6.0.1') {
|
|
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' +
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ft-scout",
|
|
3
|
-
"version": "6.0.
|
|
3
|
+
"version": "6.0.1",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "FrontTerrain — The Onboarding Co-Pilot for New Codebases",
|
|
6
6
|
"main": "index.js",
|
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
"@clack/prompts": "^1.7.0",
|
|
37
37
|
"@types/nodemailer": "^8.0.1",
|
|
38
38
|
"chalk": "^6.0.0",
|
|
39
|
-
"commander": "^
|
|
39
|
+
"commander": "^13.1.0",
|
|
40
40
|
"dotenv": "^17.4.2",
|
|
41
41
|
"nodemailer": "^9.0.4",
|
|
42
42
|
"openai": "^7.1.0",
|