ft-scout 2.0.7 → 2.0.9
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 +13 -13
- package/bin/src/commands/setup.d.ts.map +1 -1
- package/bin/src/commands/setup.js +397 -15
- package/bin/src/commands/setup.js.map +1 -1
- package/bin/src/index.js +4 -4
- package/bin/src/utils/branding.js +1 -1
- package/package.json +1 -1
- package/.ft/config.json +0 -3
- package/.ft/context.json +0 -18
package/README.md
CHANGED
|
@@ -7,40 +7,40 @@ FrontTerrain — The Onboarding Co-Pilot for New Codebases.
|
|
|
7
7
|
Install globally using npm:
|
|
8
8
|
|
|
9
9
|
```bash
|
|
10
|
-
npm install -g ft-scout
|
|
10
|
+
npm install -g ft-scout@latest
|
|
11
11
|
```
|
|
12
12
|
|
|
13
13
|
## Usage
|
|
14
14
|
|
|
15
|
-
Once installed, you can use the `ft` or `scout` commands.
|
|
15
|
+
Once installed, you can use the `ft.cmd` or `scout` commands.
|
|
16
16
|
|
|
17
17
|
```bash
|
|
18
18
|
# Initialize learning on a local or remote repository
|
|
19
|
-
|
|
19
|
+
scout init [repoUrl]
|
|
20
20
|
|
|
21
21
|
# Multilingual AI teardowns & onboarding summaries (e.g. spanish, hindi, french, japanese, german, etc.)
|
|
22
|
-
|
|
23
|
-
|
|
22
|
+
scout init [repoUrl] --lang spanish
|
|
23
|
+
scout init [repoUrl] -l hi
|
|
24
24
|
|
|
25
25
|
# Interactive Q&A mode after indexing (with optional web search and custom language)
|
|
26
|
-
|
|
26
|
+
scout init --ask --web --lang ja
|
|
27
27
|
|
|
28
28
|
# Live interactive AI chat co-pilot (until Ctrl+C is pressed)
|
|
29
|
-
|
|
30
|
-
|
|
29
|
+
scout chat
|
|
30
|
+
scout chat --web --lang spanish
|
|
31
31
|
|
|
32
32
|
# Live internet search for live web context & up-to-date documentation
|
|
33
|
-
|
|
34
|
-
|
|
33
|
+
scout search "Next.js 15 App Router"
|
|
34
|
+
scout web "Tailwind CSS v4" --ask --lang french
|
|
35
35
|
|
|
36
36
|
# Show knowledge holders of a specific directory or file
|
|
37
|
-
|
|
37
|
+
scout owners <path>
|
|
38
38
|
|
|
39
39
|
# Show a code fragility map based on churn and hotfixes
|
|
40
|
-
|
|
40
|
+
scout risky
|
|
41
41
|
|
|
42
42
|
# Diagnose local setup, missing .env files, and internet connection
|
|
43
|
-
|
|
43
|
+
scout setup
|
|
44
44
|
|
|
45
45
|
# Check for updates and auto-upgrade Scout to the latest version
|
|
46
46
|
scout upgrade
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["setup.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["setup.ts"],"names":[],"mappings":"AAaA,wBAAsB,WAAW,kBAuZhC"}
|
|
@@ -1,29 +1,58 @@
|
|
|
1
|
-
import { spinner
|
|
1
|
+
import { spinner } from '@clack/prompts';
|
|
2
2
|
import chalk from 'chalk';
|
|
3
3
|
import fs from 'fs';
|
|
4
4
|
import path from 'path';
|
|
5
|
+
import { execSync } from 'child_process';
|
|
6
|
+
import { safeNote } from '../utils/markdown.js';
|
|
5
7
|
export async function handleSetup() {
|
|
6
8
|
const s = spinner();
|
|
7
|
-
s.start('Diagnosing local runtime environment...');
|
|
8
|
-
const
|
|
9
|
+
s.start('Diagnosing local runtime environment & dependencies...');
|
|
10
|
+
const cwd = process.cwd();
|
|
9
11
|
const passes = [];
|
|
12
|
+
const issues = [];
|
|
13
|
+
const manualDependencies = [];
|
|
14
|
+
// Helper to check if a command executable exists on system PATH
|
|
15
|
+
function commandExists(cmd) {
|
|
16
|
+
try {
|
|
17
|
+
const checkCmd = process.platform === 'win32' ? `where ${cmd}` : `command -v ${cmd}`;
|
|
18
|
+
execSync(checkCmd, { stdio: 'ignore', cwd });
|
|
19
|
+
return true;
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
try {
|
|
23
|
+
execSync(`${cmd} --version`, { stdio: 'ignore', cwd });
|
|
24
|
+
return true;
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
return false;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}
|
|
10
31
|
// Check 1: .env vs .env.example
|
|
11
|
-
const cwd = process.cwd();
|
|
12
32
|
const hasEnv = fs.existsSync(path.join(cwd, '.env'));
|
|
13
33
|
const hasExample = fs.existsSync(path.join(cwd, '.env.example'));
|
|
14
34
|
if (!hasEnv && hasExample) {
|
|
15
|
-
|
|
35
|
+
try {
|
|
36
|
+
fs.copyFileSync(path.join(cwd, '.env.example'), path.join(cwd, '.env'));
|
|
37
|
+
passes.push(`${chalk.green('✓')} Auto-created ${chalk.cyan('.env')} file from ${chalk.cyan('.env.example')}.`);
|
|
38
|
+
}
|
|
39
|
+
catch {
|
|
40
|
+
issues.push(`Found .env.example but failed to copy to .env.`);
|
|
41
|
+
}
|
|
16
42
|
}
|
|
17
43
|
else if (hasEnv) {
|
|
18
44
|
passes.push(`${chalk.green('✓')} Environment file .env present.`);
|
|
19
45
|
}
|
|
20
|
-
// Check 2: Node version check
|
|
46
|
+
// Check 2: Node version check
|
|
21
47
|
const pkgPath = path.join(cwd, 'package.json');
|
|
22
48
|
if (fs.existsSync(pkgPath)) {
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
49
|
+
try {
|
|
50
|
+
const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf-8'));
|
|
51
|
+
if (pkg.engines?.node) {
|
|
52
|
+
passes.push(`${chalk.green('✓')} Expected Node engine: ${pkg.engines.node} (Current: ${process.version})`);
|
|
53
|
+
}
|
|
26
54
|
}
|
|
55
|
+
catch { }
|
|
27
56
|
}
|
|
28
57
|
// Check 3: Internet & Web Access check
|
|
29
58
|
try {
|
|
@@ -38,11 +67,364 @@ export async function handleSetup() {
|
|
|
38
67
|
catch {
|
|
39
68
|
issues.push(`No active internet access detected. Scout web search & remote git cloning will be disabled.`);
|
|
40
69
|
}
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
70
|
+
// Step 2: Auto-Install Repository Dependencies
|
|
71
|
+
s.message('Scanning project manifests & installing dependencies...');
|
|
72
|
+
// 1. Node.js / JavaScript / TypeScript Ecosystem
|
|
73
|
+
if (fs.existsSync(pkgPath)) {
|
|
74
|
+
const hasBunLock = fs.existsSync(path.join(cwd, 'bun.lockb')) || fs.existsSync(path.join(cwd, 'bun.lock'));
|
|
75
|
+
const hasPnpmLock = fs.existsSync(path.join(cwd, 'pnpm-lock.yaml'));
|
|
76
|
+
const hasYarnLock = fs.existsSync(path.join(cwd, 'yarn.lock'));
|
|
77
|
+
if (hasBunLock) {
|
|
78
|
+
if (commandExists('bun')) {
|
|
79
|
+
s.message('Installing dependencies with Bun (bun install)...');
|
|
80
|
+
try {
|
|
81
|
+
execSync('bun install', { cwd, stdio: 'pipe', timeout: 300000 });
|
|
82
|
+
passes.push(`${chalk.green('✓')} Installed Bun dependencies (bun install).`);
|
|
83
|
+
}
|
|
84
|
+
catch {
|
|
85
|
+
manualDependencies.push({
|
|
86
|
+
name: 'Bun Dependencies (`bun install`)',
|
|
87
|
+
url: 'https://bun.sh',
|
|
88
|
+
reason: '`bun install` command failed during execution.'
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
manualDependencies.push({
|
|
94
|
+
name: 'Bun CLI runtime',
|
|
95
|
+
url: 'https://bun.sh',
|
|
96
|
+
reason: 'Project requires Bun (`bun.lock` found) but `bun` is not installed on PATH.'
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
else if (hasPnpmLock) {
|
|
101
|
+
if (commandExists('pnpm')) {
|
|
102
|
+
s.message('Installing dependencies with pnpm (pnpm install)...');
|
|
103
|
+
try {
|
|
104
|
+
execSync('pnpm install', { cwd, stdio: 'pipe', timeout: 300000 });
|
|
105
|
+
passes.push(`${chalk.green('✓')} Installed pnpm dependencies (pnpm install).`);
|
|
106
|
+
}
|
|
107
|
+
catch {
|
|
108
|
+
manualDependencies.push({
|
|
109
|
+
name: 'pnpm Dependencies (`pnpm install`)',
|
|
110
|
+
url: 'https://pnpm.io/installation',
|
|
111
|
+
reason: '`pnpm install` command failed.'
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
else {
|
|
116
|
+
manualDependencies.push({
|
|
117
|
+
name: 'pnpm Package Manager',
|
|
118
|
+
url: 'https://pnpm.io/installation',
|
|
119
|
+
reason: 'Project uses pnpm (`pnpm-lock.yaml` found) but `pnpm` is not installed on PATH.'
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
else if (hasYarnLock) {
|
|
124
|
+
if (commandExists('yarn')) {
|
|
125
|
+
s.message('Installing dependencies with Yarn (yarn install)...');
|
|
126
|
+
try {
|
|
127
|
+
execSync('yarn install', { cwd, stdio: 'pipe', timeout: 300000 });
|
|
128
|
+
passes.push(`${chalk.green('✓')} Installed Yarn dependencies (yarn install).`);
|
|
129
|
+
}
|
|
130
|
+
catch {
|
|
131
|
+
manualDependencies.push({
|
|
132
|
+
name: 'Yarn Dependencies (`yarn install`)',
|
|
133
|
+
url: 'https://yarnpkg.com/getting-started/install',
|
|
134
|
+
reason: '`yarn install` command failed.'
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
else {
|
|
139
|
+
manualDependencies.push({
|
|
140
|
+
name: 'Yarn Package Manager',
|
|
141
|
+
url: 'https://yarnpkg.com/getting-started/install',
|
|
142
|
+
reason: 'Project uses Yarn (`yarn.lock` found) but `yarn` is not installed on PATH.'
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
else {
|
|
147
|
+
// Standard npm project
|
|
148
|
+
if (commandExists('npm')) {
|
|
149
|
+
s.message('Installing dependencies with npm (npm install)...');
|
|
150
|
+
try {
|
|
151
|
+
execSync('npm install', { cwd, stdio: 'pipe', timeout: 300000 });
|
|
152
|
+
passes.push(`${chalk.green('✓')} Installed Node dependencies (npm install).`);
|
|
153
|
+
}
|
|
154
|
+
catch {
|
|
155
|
+
manualDependencies.push({
|
|
156
|
+
name: 'npm Dependencies (`npm install`)',
|
|
157
|
+
url: 'https://nodejs.org/',
|
|
158
|
+
reason: '`npm install` command failed.'
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
else {
|
|
163
|
+
manualDependencies.push({
|
|
164
|
+
name: 'Node.js / npm',
|
|
165
|
+
url: 'https://nodejs.org/',
|
|
166
|
+
reason: '`package.json` present but `npm` is not installed on PATH.'
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
// 2. Python Ecosystem
|
|
172
|
+
const hasPipfile = fs.existsSync(path.join(cwd, 'Pipfile'));
|
|
173
|
+
const hasPoetry = fs.existsSync(path.join(cwd, 'poetry.lock')) || fs.existsSync(path.join(cwd, 'pyproject.toml'));
|
|
174
|
+
const hasReqs = fs.existsSync(path.join(cwd, 'requirements.txt'));
|
|
175
|
+
if (hasPipfile) {
|
|
176
|
+
if (commandExists('pipenv')) {
|
|
177
|
+
s.message('Installing Python dependencies with Pipenv...');
|
|
178
|
+
try {
|
|
179
|
+
execSync('pipenv install', { cwd, stdio: 'pipe', timeout: 300000 });
|
|
180
|
+
passes.push(`${chalk.green('✓')} Installed Python dependencies (pipenv install).`);
|
|
181
|
+
}
|
|
182
|
+
catch {
|
|
183
|
+
manualDependencies.push({
|
|
184
|
+
name: 'Pipenv Dependencies',
|
|
185
|
+
url: 'https://pipenv.pypa.io/',
|
|
186
|
+
reason: '`pipenv install` command failed.'
|
|
187
|
+
});
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
else {
|
|
191
|
+
manualDependencies.push({
|
|
192
|
+
name: 'Pipenv CLI Tool',
|
|
193
|
+
url: 'https://pipenv.pypa.io/',
|
|
194
|
+
reason: '`Pipfile` found but `pipenv` is not installed.'
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
else if (hasPoetry) {
|
|
199
|
+
if (commandExists('poetry')) {
|
|
200
|
+
s.message('Installing Python dependencies with Poetry...');
|
|
201
|
+
try {
|
|
202
|
+
execSync('poetry install', { cwd, stdio: 'pipe', timeout: 300000 });
|
|
203
|
+
passes.push(`${chalk.green('✓')} Installed Python dependencies (poetry install).`);
|
|
204
|
+
}
|
|
205
|
+
catch {
|
|
206
|
+
manualDependencies.push({
|
|
207
|
+
name: 'Poetry Dependencies',
|
|
208
|
+
url: 'https://python-poetry.org/docs/#installation',
|
|
209
|
+
reason: '`poetry install` command failed.'
|
|
210
|
+
});
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
else if (fs.existsSync(path.join(cwd, 'poetry.lock'))) {
|
|
214
|
+
manualDependencies.push({
|
|
215
|
+
name: 'Poetry Dependency Manager',
|
|
216
|
+
url: 'https://python-poetry.org/docs/#installation',
|
|
217
|
+
reason: '`poetry.lock` found but `poetry` is not installed on PATH.'
|
|
218
|
+
});
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
else if (hasReqs) {
|
|
222
|
+
const pyCmd = commandExists('python3') ? 'python3' : commandExists('python') ? 'python' : null;
|
|
223
|
+
if (pyCmd) {
|
|
224
|
+
s.message('Installing Python dependencies (pip install -r requirements.txt)...');
|
|
225
|
+
try {
|
|
226
|
+
execSync(`${pyCmd} -m pip install -r requirements.txt`, { cwd, stdio: 'pipe', timeout: 300000 });
|
|
227
|
+
passes.push(`${chalk.green('✓')} Installed Python requirements (pip install -r requirements.txt).`);
|
|
228
|
+
}
|
|
229
|
+
catch {
|
|
230
|
+
manualDependencies.push({
|
|
231
|
+
name: 'Python Dependencies (`requirements.txt`)',
|
|
232
|
+
url: 'https://pip.pypa.io/',
|
|
233
|
+
reason: '`pip install -r requirements.txt` command failed.'
|
|
234
|
+
});
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
else {
|
|
238
|
+
manualDependencies.push({
|
|
239
|
+
name: 'Python 3 Environment',
|
|
240
|
+
url: 'https://www.python.org/downloads/',
|
|
241
|
+
reason: '`requirements.txt` found but Python is not installed on PATH.'
|
|
242
|
+
});
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
// 3. Rust Ecosystem
|
|
246
|
+
if (fs.existsSync(path.join(cwd, 'Cargo.toml'))) {
|
|
247
|
+
if (commandExists('cargo')) {
|
|
248
|
+
s.message('Fetching Rust crate dependencies (cargo fetch)...');
|
|
249
|
+
try {
|
|
250
|
+
execSync('cargo fetch', { cwd, stdio: 'pipe', timeout: 300000 });
|
|
251
|
+
passes.push(`${chalk.green('✓')} Fetched Rust crate dependencies (cargo fetch).`);
|
|
252
|
+
}
|
|
253
|
+
catch {
|
|
254
|
+
manualDependencies.push({
|
|
255
|
+
name: 'Rust Crate Dependencies (`cargo fetch`)',
|
|
256
|
+
url: 'https://rustup.rs/',
|
|
257
|
+
reason: '`cargo fetch` command failed.'
|
|
258
|
+
});
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
else {
|
|
262
|
+
manualDependencies.push({
|
|
263
|
+
name: 'Rust / Cargo toolchain',
|
|
264
|
+
url: 'https://rustup.rs/',
|
|
265
|
+
reason: '`Cargo.toml` found but `cargo` is not installed on PATH.'
|
|
266
|
+
});
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
// 4. Go Ecosystem
|
|
270
|
+
if (fs.existsSync(path.join(cwd, 'go.mod'))) {
|
|
271
|
+
if (commandExists('go')) {
|
|
272
|
+
s.message('Downloading Go module dependencies (go mod download)...');
|
|
273
|
+
try {
|
|
274
|
+
execSync('go mod download', { cwd, stdio: 'pipe', timeout: 300000 });
|
|
275
|
+
passes.push(`${chalk.green('✓')} Downloaded Go module dependencies (go mod download).`);
|
|
276
|
+
}
|
|
277
|
+
catch {
|
|
278
|
+
manualDependencies.push({
|
|
279
|
+
name: 'Go Module Dependencies (`go mod download`)',
|
|
280
|
+
url: 'https://go.dev/doc/install',
|
|
281
|
+
reason: '`go mod download` command failed.'
|
|
282
|
+
});
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
else {
|
|
286
|
+
manualDependencies.push({
|
|
287
|
+
name: 'Go Programming Language SDK',
|
|
288
|
+
url: 'https://go.dev/doc/install',
|
|
289
|
+
reason: '`go.mod` found but `go` compiler is not installed on PATH.'
|
|
290
|
+
});
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
// 5. Ruby Ecosystem
|
|
294
|
+
if (fs.existsSync(path.join(cwd, 'Gemfile'))) {
|
|
295
|
+
if (commandExists('bundle')) {
|
|
296
|
+
s.message('Installing Ruby gems (bundle install)...');
|
|
297
|
+
try {
|
|
298
|
+
execSync('bundle install', { cwd, stdio: 'pipe', timeout: 300000 });
|
|
299
|
+
passes.push(`${chalk.green('✓')} Installed Ruby gems (bundle install).`);
|
|
300
|
+
}
|
|
301
|
+
catch {
|
|
302
|
+
manualDependencies.push({
|
|
303
|
+
name: 'Ruby Gems (`bundle install`)',
|
|
304
|
+
url: 'https://bundler.io/',
|
|
305
|
+
reason: '`bundle install` command failed.'
|
|
306
|
+
});
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
else {
|
|
310
|
+
manualDependencies.push({
|
|
311
|
+
name: 'Bundler / Ruby',
|
|
312
|
+
url: 'https://bundler.io/',
|
|
313
|
+
reason: '`Gemfile` found but `bundle` is not installed on PATH.'
|
|
314
|
+
});
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
// 6. PHP Ecosystem
|
|
318
|
+
if (fs.existsSync(path.join(cwd, 'composer.json'))) {
|
|
319
|
+
if (commandExists('composer')) {
|
|
320
|
+
s.message('Installing PHP Composer dependencies (composer install)...');
|
|
321
|
+
try {
|
|
322
|
+
execSync('composer install', { cwd, stdio: 'pipe', timeout: 300000 });
|
|
323
|
+
passes.push(`${chalk.green('✓')} Installed PHP Composer packages (composer install).`);
|
|
324
|
+
}
|
|
325
|
+
catch {
|
|
326
|
+
manualDependencies.push({
|
|
327
|
+
name: 'Composer Dependencies (`composer install`)',
|
|
328
|
+
url: 'https://getcomposer.org/',
|
|
329
|
+
reason: '`composer install` command failed.'
|
|
330
|
+
});
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
else {
|
|
334
|
+
manualDependencies.push({
|
|
335
|
+
name: 'Composer PHP Package Manager',
|
|
336
|
+
url: 'https://getcomposer.org/',
|
|
337
|
+
reason: '`composer.json` found but `composer` is not installed on PATH.'
|
|
338
|
+
});
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
// 7. Java / Gradle / Maven
|
|
342
|
+
const hasGradlew = fs.existsSync(path.join(cwd, 'gradlew')) || fs.existsSync(path.join(cwd, 'gradlew.bat'));
|
|
343
|
+
const hasGradle = fs.existsSync(path.join(cwd, 'build.gradle')) || fs.existsSync(path.join(cwd, 'build.gradle.kts'));
|
|
344
|
+
const hasMvnw = fs.existsSync(path.join(cwd, 'mvnw')) || fs.existsSync(path.join(cwd, 'mvnw.cmd'));
|
|
345
|
+
const hasMaven = fs.existsSync(path.join(cwd, 'pom.xml'));
|
|
346
|
+
if (hasGradlew || hasGradle) {
|
|
347
|
+
const gradleExecutable = hasGradlew ? (process.platform === 'win32' ? '.\\gradlew.bat' : './gradlew') : 'gradle';
|
|
348
|
+
if (hasGradlew || commandExists('gradle')) {
|
|
349
|
+
s.message('Resolving Gradle dependencies...');
|
|
350
|
+
try {
|
|
351
|
+
execSync(`${gradleExecutable} dependencies`, { cwd, stdio: 'pipe', timeout: 300000 });
|
|
352
|
+
passes.push(`${chalk.green('✓')} Resolved Gradle dependencies.`);
|
|
353
|
+
}
|
|
354
|
+
catch {
|
|
355
|
+
manualDependencies.push({
|
|
356
|
+
name: 'Gradle Dependencies',
|
|
357
|
+
url: 'https://gradle.org/install/',
|
|
358
|
+
reason: 'Gradle dependencies resolution command failed.'
|
|
359
|
+
});
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
else {
|
|
363
|
+
manualDependencies.push({
|
|
364
|
+
name: 'Gradle Build Tool',
|
|
365
|
+
url: 'https://gradle.org/install/',
|
|
366
|
+
reason: 'Gradle build file found but `gradle` is not installed on PATH.'
|
|
367
|
+
});
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
else if (hasMvnw || hasMaven) {
|
|
371
|
+
const mvnExecutable = hasMvnw ? (process.platform === 'win32' ? '.\\mvnw.cmd' : './mvnw') : 'mvn';
|
|
372
|
+
if (hasMvnw || commandExists('mvn')) {
|
|
373
|
+
s.message('Resolving Maven dependencies (dependency:resolve)...');
|
|
374
|
+
try {
|
|
375
|
+
execSync(`${mvnExecutable} dependency:resolve`, { cwd, stdio: 'pipe', timeout: 300000 });
|
|
376
|
+
passes.push(`${chalk.green('✓')} Resolved Maven dependencies.`);
|
|
377
|
+
}
|
|
378
|
+
catch {
|
|
379
|
+
manualDependencies.push({
|
|
380
|
+
name: 'Maven Dependencies',
|
|
381
|
+
url: 'https://maven.apache.org/install.html',
|
|
382
|
+
reason: 'Maven `dependency:resolve` command failed.'
|
|
383
|
+
});
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
else {
|
|
387
|
+
manualDependencies.push({
|
|
388
|
+
name: 'Apache Maven',
|
|
389
|
+
url: 'https://maven.apache.org/install.html',
|
|
390
|
+
reason: '`pom.xml` found but `mvn` is not installed on PATH.'
|
|
391
|
+
});
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
// 8. Docker / Container check
|
|
395
|
+
if (fs.existsSync(path.join(cwd, 'Dockerfile')) || fs.existsSync(path.join(cwd, 'docker-compose.yml')) || fs.existsSync(path.join(cwd, 'compose.yaml'))) {
|
|
396
|
+
if (commandExists('docker')) {
|
|
397
|
+
passes.push(`${chalk.green('✓')} Docker CLI detected on PATH.`);
|
|
398
|
+
}
|
|
399
|
+
else {
|
|
400
|
+
manualDependencies.push({
|
|
401
|
+
name: 'Docker Desktop / Engine',
|
|
402
|
+
url: 'https://docs.docker.com/get-docker/',
|
|
403
|
+
reason: '`Dockerfile` or `docker-compose.yml` present, but `docker` CLI was not found.'
|
|
404
|
+
});
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
s.stop('Setup & dependency configuration complete.');
|
|
408
|
+
// Build final report
|
|
409
|
+
const reportLines = [];
|
|
410
|
+
for (const pass of passes) {
|
|
411
|
+
reportLines.push(`${pass}`);
|
|
412
|
+
}
|
|
413
|
+
for (const issue of issues) {
|
|
414
|
+
reportLines.push(`${chalk.yellow('⚠️')} ${issue}`);
|
|
415
|
+
}
|
|
416
|
+
if (manualDependencies.length > 0) {
|
|
417
|
+
reportLines.push('');
|
|
418
|
+
reportLines.push(`${chalk.bold.red('❌ Uninstalled Dependencies / Missing Tools:')}`);
|
|
419
|
+
reportLines.push(chalk.dim('Please install the required tools using the URLs below:'));
|
|
420
|
+
reportLines.push('');
|
|
421
|
+
for (const dep of manualDependencies) {
|
|
422
|
+
reportLines.push(` • ${chalk.bold.yellow(dep.name)}`);
|
|
423
|
+
reportLines.push(` Reason: ${dep.reason}`);
|
|
424
|
+
reportLines.push(` Download/Install URL: ${chalk.cyan.underline(dep.url)}`);
|
|
425
|
+
reportLines.push('');
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
safeNote(reportLines.join('\n'), '🛠️ Setup Doctor & Dependency Manager');
|
|
47
429
|
}
|
|
48
430
|
//# sourceMappingURL=setup.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup.js","sourceRoot":"","sources":["setup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,MAAM,CAAC,KAAK,UAAU,WAAW;IAC/B,MAAM,CAAC,GAAG,OAAO,EAAE,CAAC;IACpB,CAAC,CAAC,KAAK,CAAC,yCAAyC,CAAC,CAAC;IAEnD,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,gCAAgC;IAChC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC1B,MAAM,MAAM,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC;IACrD,MAAM,UAAU,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC,CAAC;IAEjE,IAAI,CAAC,MAAM,IAAI,UAAU,EAAE,CAAC;QAC1B,MAAM,CAAC,IAAI,CAAC,WAAW,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,6BAA6B,CAAC,CAAC;IAC5E,CAAC;SAAM,IAAI,MAAM,EAAE,CAAC;QAClB,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;IACpE,CAAC;IAED,+DAA+D;IAC/D,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;IAC/C,IAAI,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3B,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;QAC1D,IAAI,GAAG,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC;YACtB,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,0BAA0B,GAAG,CAAC,OAAO,CAAC,IAAI,cAAc,OAAO,CAAC,OAAO,GAAG,CAAC,CAAC;QAC7G,CAAC;IACH,CAAC;IAED,uCAAuC;IACvC,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,6BAA6B,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACnH,IAAI,QAAQ,CAAC,EAAE,EAAE,CAAC;YAChB,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,qEAAqE,CAAC,CAAC;QACxG,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,IAAI,CAAC,6CAA6C,QAAQ,CAAC,MAAM,sCAAsC,CAAC,CAAC;QAClH,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,CAAC,IAAI,CAAC,6FAA6F,CAAC,CAAC;IAC7G,CAAC;IAED,CAAC,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;IAEpC,MAAM,MAAM,GAAG;QACb,GAAG,MAAM;QACT,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;KACjD,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEb,IAAI,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;AACnC,CAAC"}
|
|
1
|
+
{"version":3,"file":"setup.js","sourceRoot":"","sources":["setup.ts"],"names":[],"mappings":"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"}
|
package/bin/src/index.js
CHANGED
|
@@ -23,12 +23,12 @@ program
|
|
|
23
23
|
.name('scout')
|
|
24
24
|
.alias('ft')
|
|
25
25
|
.description('FrontTerrain — The Onboarding Co-Pilot for New Codebases')
|
|
26
|
-
.version('2.0.
|
|
26
|
+
.version('2.0.9');
|
|
27
27
|
// Header UI on execution with FrontTerrain proprietary logo & version auto-checker
|
|
28
28
|
program.hook('preAction', async (_thisCommand, actionCommand) => {
|
|
29
|
-
intro(renderBranding('2.0.
|
|
29
|
+
intro(renderBranding('2.0.9'));
|
|
30
30
|
if (actionCommand && actionCommand.name() !== 'upgrade') {
|
|
31
|
-
await checkForUpdates('2.0.
|
|
31
|
+
await checkForUpdates('2.0.9');
|
|
32
32
|
}
|
|
33
33
|
});
|
|
34
34
|
// Command definitions
|
|
@@ -159,7 +159,7 @@ program
|
|
|
159
159
|
.command('upgrade')
|
|
160
160
|
.description('Check for updates and auto-upgrade Scout to the latest version')
|
|
161
161
|
.action(async () => {
|
|
162
|
-
await checkForUpdates('2.0.
|
|
162
|
+
await checkForUpdates('2.0.9', true);
|
|
163
163
|
outro(chalk.cyan('Upgrade check complete.'));
|
|
164
164
|
});
|
|
165
165
|
program.parse(process.argv);
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import chalk from 'chalk';
|
|
2
|
-
export function renderBranding(version = '2.0.
|
|
2
|
+
export function renderBranding(version = '2.0.9') {
|
|
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
package/.ft/config.json
DELETED
package/.ft/context.json
DELETED
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"projectName": "FT-CLI",
|
|
3
|
-
"targetDir": "C:\\Users\\rishi\\FT-CLI",
|
|
4
|
-
"stack": "- **Core Capability**: Ye project ek aisa platform provide karta hai jo naye codebases ke onboarding ko asaan banata hai, aur developers ko unke projects ke andar navigate karne mein madad karta hai. Iska core capability hai AI-powered git integration jo code review aur analysis ko automate karta hai. \n- **Architecture & Stack**: Is project ki architecture node.js par based hai, aur isme commander, chalk, aur openai jaise libraries ka use kiya gaya hai. Iska tech stack bahut robust hai aur scalable design pattern follow karta hai. \n- **Architectural Moat**: Is project ki unique advantage hai uska AI-powered git integration, jo developers ko real-time code review aur analysis provide karta hai, jisse unki productivity badh jati hai. Iska design pattern bahut modular hai, jisse new features ko easily integrate kiya ja sakta hai.",
|
|
5
|
-
"entryPoint": "bin/ft.js",
|
|
6
|
-
"painPoints": [
|
|
7
|
-
"⚡ [Dependency Management]: Is project ke dependencies bahut hain, jisse dependency management ek bada challenge ban sakta hai. Isse project ke maintenance aur scalability par bura asar pad sakta hai, aur iska solution hai ki dependencies ko regularly update karna chahiye aur redundant dependencies ko remove karna chahiye.",
|
|
8
|
-
"⚡ [Scalability]: Is project ki scalability ek bada challenge ho sakta hai, kyunki isme bahut saare complex operations hain, jaise ki AI-powered code review. Isse project ke performance par bura asar pad sakta hai, aur iska solution hai ki project ke architecture ko optimize karna chahiye aur cache layer implement karna chahiye.",
|
|
9
|
-
"⚡ [Security]: Is project ke security ek bada concern ho sakta hai, kyunki isme sensitive data jaise ki API keys aur database credentials hain. Isse project ke security par bura asar pad sakta hai, aur iska solution hai ki project ke security ko regularly audit karna chahiye aur secure protocols implement karna chahiye."
|
|
10
|
-
],
|
|
11
|
-
"readOrder": [
|
|
12
|
-
".env -> Ye file project ke environment variables ko store karta hai, jaise ki API keys aur database credentials, jo project ke execution ke liye zaroori hain. Is file ko pehle read karna chahiye taaki project ke context ko samajh sakein.",
|
|
13
|
-
"package.json -> Ye file project ke metadata ko store karta hai, jaise ki project ka naam, version, aur dependencies, jo project ke build aur deployment ke liye zaroori hain. Is file ko doosre number par read karna chahiye taaki project ke dependencies ko samajh sakein.",
|
|
14
|
-
"src/index.ts -> Ye file project ke core business logic ko store karta hai, jaise ki git integration aur AI-powered code review, jo project ke primary function ko define karta hai. Is file ko teesre number par read karna chahiye taaki project ke core logic ko samajh sakein."
|
|
15
|
-
],
|
|
16
|
-
"createdAt": "2026-08-03T15:08:19.224Z",
|
|
17
|
-
"language": "Hindi"
|
|
18
|
-
}
|