ft-scout 1.0.9 → 1.1.0

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.
Files changed (240) hide show
  1. package/.firebase/hosting.d2Vi.cache +9 -0
  2. package/.firebaserc +14 -0
  3. package/AUTONOMOUS_FEATURES.md +192 -0
  4. package/README.md +482 -29
  5. package/bin/ft.js +2 -0
  6. package/bin/src/commands/agent.d.ts.map +1 -0
  7. package/bin/src/commands/agent.js +1230 -0
  8. package/bin/src/commands/agent.js.map +1 -0
  9. package/bin/src/commands/audit.d.ts.map +1 -0
  10. package/bin/src/commands/audit.js +104 -0
  11. package/bin/src/commands/audit.js.map +1 -0
  12. package/bin/src/commands/authCommand.d.ts.map +1 -0
  13. package/bin/src/commands/authCommand.js +38 -0
  14. package/bin/src/commands/authCommand.js.map +1 -0
  15. package/bin/src/commands/benchmark.d.ts.map +1 -0
  16. package/bin/src/commands/benchmark.js +135 -0
  17. package/bin/src/commands/benchmark.js.map +1 -0
  18. package/bin/src/commands/brief.d.ts.map +1 -0
  19. package/bin/src/commands/brief.js +37 -0
  20. package/bin/src/commands/brief.js.map +1 -0
  21. package/bin/src/commands/configCommand.d.ts.map +1 -0
  22. package/bin/src/commands/configCommand.js +53 -0
  23. package/bin/src/commands/configCommand.js.map +1 -0
  24. package/bin/src/commands/dashboard.d.ts.map +1 -0
  25. package/bin/src/commands/dashboard.js +41 -0
  26. package/bin/src/commands/dashboard.js.map +1 -0
  27. package/bin/src/commands/history.d.ts.map +1 -0
  28. package/bin/src/commands/history.js +20 -0
  29. package/bin/src/commands/history.js.map +1 -0
  30. package/bin/src/commands/init.d.ts.map +1 -1
  31. package/bin/src/commands/init.js +408 -79
  32. package/bin/src/commands/init.js.map +1 -1
  33. package/bin/src/commands/login.d.ts.map +1 -0
  34. package/bin/src/commands/login.js +190 -0
  35. package/bin/src/commands/login.js.map +1 -0
  36. package/bin/src/commands/logout.d.ts.map +1 -0
  37. package/bin/src/commands/logout.js +15 -0
  38. package/bin/src/commands/logout.js.map +1 -0
  39. package/bin/src/commands/mcp.d.ts.map +1 -0
  40. package/bin/src/commands/mcp.js +393 -0
  41. package/bin/src/commands/mcp.js.map +1 -0
  42. package/bin/src/commands/owners.js +6 -6
  43. package/bin/src/commands/owners.js.map +1 -1
  44. package/bin/src/commands/plan.d.ts.map +1 -0
  45. package/bin/src/commands/plan.js +152 -0
  46. package/bin/src/commands/plan.js.map +1 -0
  47. package/bin/src/commands/quota.d.ts.map +1 -0
  48. package/bin/src/commands/quota.js +32 -0
  49. package/bin/src/commands/quota.js.map +1 -0
  50. package/bin/src/commands/recommend.d.ts.map +1 -0
  51. package/bin/src/commands/recommend.js +46 -0
  52. package/bin/src/commands/recommend.js.map +1 -0
  53. package/bin/src/commands/risky.d.ts.map +1 -1
  54. package/bin/src/commands/risky.js +235 -39
  55. package/bin/src/commands/risky.js.map +1 -1
  56. package/bin/src/commands/setup.d.ts.map +1 -1
  57. package/bin/src/commands/setup.js +411 -16
  58. package/bin/src/commands/setup.js.map +1 -1
  59. package/bin/src/commands/signup.d.ts.map +1 -0
  60. package/bin/src/commands/signup.js +118 -0
  61. package/bin/src/commands/signup.js.map +1 -0
  62. package/bin/src/commands/undo.d.ts.map +1 -0
  63. package/bin/src/commands/undo.js +59 -0
  64. package/bin/src/commands/undo.js.map +1 -0
  65. package/bin/src/commands/web.d.ts.map +1 -0
  66. package/bin/src/commands/web.js +90 -0
  67. package/bin/src/commands/web.js.map +1 -0
  68. package/bin/src/discovery/config.d.ts.map +1 -0
  69. package/bin/src/discovery/config.js +41 -0
  70. package/bin/src/discovery/config.js.map +1 -0
  71. package/bin/src/discovery/display.d.ts.map +1 -0
  72. package/bin/src/discovery/display.js +57 -0
  73. package/bin/src/discovery/display.js.map +1 -0
  74. package/bin/src/discovery/messages.d.ts.map +1 -0
  75. package/bin/src/discovery/messages.js +7 -0
  76. package/bin/src/discovery/messages.js.map +1 -0
  77. package/bin/src/discovery/signals.d.ts.map +1 -0
  78. package/bin/src/discovery/signals.js +33 -0
  79. package/bin/src/discovery/signals.js.map +1 -0
  80. package/bin/src/engine/actionVerifier.d.ts.map +1 -0
  81. package/bin/src/engine/actionVerifier.js +283 -0
  82. package/bin/src/engine/actionVerifier.js.map +1 -0
  83. package/bin/src/engine/agentEngine.d.ts.map +1 -0
  84. package/bin/src/engine/agentEngine.js +2188 -0
  85. package/bin/src/engine/agentEngine.js.map +1 -0
  86. package/bin/src/engine/agentState.d.ts.map +1 -0
  87. package/bin/src/engine/agentState.js +381 -0
  88. package/bin/src/engine/agentState.js.map +1 -0
  89. package/bin/src/engine/browser/browserController.d.ts.map +1 -0
  90. package/bin/src/engine/browser/browserController.js +737 -0
  91. package/bin/src/engine/browser/browserController.js.map +1 -0
  92. package/bin/src/engine/browser/index.d.ts.map +1 -0
  93. package/bin/src/engine/browser/index.js +2 -0
  94. package/bin/src/engine/browser/index.js.map +1 -0
  95. package/bin/src/engine/computer/computerController.d.ts.map +1 -0
  96. package/bin/src/engine/computer/computerController.js +773 -0
  97. package/bin/src/engine/computer/computerController.js.map +1 -0
  98. package/bin/src/engine/computer/computerDiagnostic.d.ts.map +1 -0
  99. package/bin/src/engine/computer/computerDiagnostic.js +71 -0
  100. package/bin/src/engine/computer/computerDiagnostic.js.map +1 -0
  101. package/bin/src/engine/computer/index.d.ts.map +1 -0
  102. package/bin/src/engine/computer/index.js +4 -0
  103. package/bin/src/engine/computer/index.js.map +1 -0
  104. package/bin/src/engine/computer/mockComputer.d.ts.map +1 -0
  105. package/bin/src/engine/computer/mockComputer.js +260 -0
  106. package/bin/src/engine/computer/mockComputer.js.map +1 -0
  107. package/bin/src/engine/computer/scoutDriver.cs +1161 -0
  108. package/bin/src/engine/computer/scout_driver.exe +0 -0
  109. package/bin/src/engine/git.d.ts.map +1 -1
  110. package/bin/src/engine/git.js +71 -0
  111. package/bin/src/engine/git.js.map +1 -1
  112. package/bin/src/engine/llm.d.ts.map +1 -1
  113. package/bin/src/engine/llm.js +1264 -35
  114. package/bin/src/engine/llm.js.map +1 -1
  115. package/bin/src/engine/planner.d.ts.map +1 -0
  116. package/bin/src/engine/planner.js +321 -0
  117. package/bin/src/engine/planner.js.map +1 -0
  118. package/bin/src/engine/runtime/agentRuntime.d.ts.map +1 -0
  119. package/bin/src/engine/runtime/agentRuntime.js +1258 -0
  120. package/bin/src/engine/runtime/agentRuntime.js.map +1 -0
  121. package/bin/src/engine/runtime/index.d.ts.map +1 -0
  122. package/bin/src/engine/runtime/index.js +2 -0
  123. package/bin/src/engine/runtime/index.js.map +1 -0
  124. package/bin/src/engine/safety.d.ts.map +1 -0
  125. package/bin/src/engine/safety.js +316 -0
  126. package/bin/src/engine/safety.js.map +1 -0
  127. package/bin/src/engine/scoutAudioRecorder.cs +215 -0
  128. package/bin/src/engine/scout_audio_recorder.exe +0 -0
  129. package/bin/src/engine/toolRegistry.d.ts.map +1 -0
  130. package/bin/src/engine/toolRegistry.js +521 -0
  131. package/bin/src/engine/toolRegistry.js.map +1 -0
  132. package/bin/src/engine/verifier.d.ts.map +1 -0
  133. package/bin/src/engine/verifier.js +414 -0
  134. package/bin/src/engine/verifier.js.map +1 -0
  135. package/bin/src/engine/voiceEngine.d.ts.map +1 -0
  136. package/bin/src/engine/voiceEngine.js +474 -0
  137. package/bin/src/engine/voiceEngine.js.map +1 -0
  138. package/bin/src/engine/web.d.ts.map +1 -0
  139. package/bin/src/engine/web.js +161 -0
  140. package/bin/src/engine/web.js.map +1 -0
  141. package/bin/src/engine/workspace/agentWorkspace.d.ts.map +1 -0
  142. package/bin/src/engine/workspace/agentWorkspace.js +505 -0
  143. package/bin/src/engine/workspace/agentWorkspace.js.map +1 -0
  144. package/bin/src/engine/workspace/index.d.ts.map +1 -0
  145. package/bin/src/engine/workspace/index.js +2 -0
  146. package/bin/src/engine/workspace/index.js.map +1 -0
  147. package/bin/src/index.js +369 -19
  148. package/bin/src/index.js.map +1 -1
  149. package/bin/src/mcp/client.d.ts.map +1 -0
  150. package/bin/src/mcp/client.js +127 -0
  151. package/bin/src/mcp/client.js.map +1 -0
  152. package/bin/src/mcp/discovery.d.ts.map +1 -0
  153. package/bin/src/mcp/discovery.js +91 -0
  154. package/bin/src/mcp/discovery.js.map +1 -0
  155. package/bin/src/mcp/health.d.ts.map +1 -0
  156. package/bin/src/mcp/health.js +44 -0
  157. package/bin/src/mcp/health.js.map +1 -0
  158. package/bin/src/mcp/index.d.ts.map +1 -0
  159. package/bin/src/mcp/index.js +15 -0
  160. package/bin/src/mcp/index.js.map +1 -0
  161. package/bin/src/mcp/manager.d.ts.map +1 -0
  162. package/bin/src/mcp/manager.js +648 -0
  163. package/bin/src/mcp/manager.js.map +1 -0
  164. package/bin/src/mcp/permissions.d.ts.map +1 -0
  165. package/bin/src/mcp/permissions.js +50 -0
  166. package/bin/src/mcp/permissions.js.map +1 -0
  167. package/bin/src/mcp/persistence.d.ts.map +1 -0
  168. package/bin/src/mcp/persistence.js +171 -0
  169. package/bin/src/mcp/persistence.js.map +1 -0
  170. package/bin/src/mcp/recovery.d.ts.map +1 -0
  171. package/bin/src/mcp/recovery.js +75 -0
  172. package/bin/src/mcp/recovery.js.map +1 -0
  173. package/bin/src/mcp/telemetry.d.ts.map +1 -0
  174. package/bin/src/mcp/telemetry.js +82 -0
  175. package/bin/src/mcp/telemetry.js.map +1 -0
  176. package/bin/src/mcp/toolRouter.d.ts.map +1 -0
  177. package/bin/src/mcp/toolRouter.js +127 -0
  178. package/bin/src/mcp/toolRouter.js.map +1 -0
  179. package/bin/src/mcp/transport.d.ts.map +1 -0
  180. package/bin/src/mcp/transport.js +328 -0
  181. package/bin/src/mcp/transport.js.map +1 -0
  182. package/bin/src/mcp/types.d.ts.map +1 -0
  183. package/bin/src/mcp/types.js +6 -0
  184. package/bin/src/mcp/types.js.map +1 -0
  185. package/bin/src/server/server.d.ts.map +1 -0
  186. package/bin/src/server/server.js +989 -0
  187. package/bin/src/server/server.js.map +1 -0
  188. package/bin/src/utils/admin.d.ts.map +1 -0
  189. package/bin/src/utils/admin.js +231 -0
  190. package/bin/src/utils/admin.js.map +1 -0
  191. package/bin/src/utils/auditLogger.d.ts.map +1 -0
  192. package/bin/src/utils/auditLogger.js +70 -0
  193. package/bin/src/utils/auditLogger.js.map +1 -0
  194. package/bin/src/utils/auth.d.ts.map +1 -0
  195. package/bin/src/utils/auth.js +679 -0
  196. package/bin/src/utils/auth.js.map +1 -0
  197. package/bin/src/utils/branding.d.ts.map +1 -0
  198. package/bin/src/utils/branding.js +14 -0
  199. package/bin/src/utils/branding.js.map +1 -0
  200. package/bin/src/utils/config.d.ts.map +1 -1
  201. package/bin/src/utils/config.js +124 -3
  202. package/bin/src/utils/config.js.map +1 -1
  203. package/bin/src/utils/email.d.ts.map +1 -0
  204. package/bin/src/utils/email.js +267 -0
  205. package/bin/src/utils/email.js.map +1 -0
  206. package/bin/src/utils/firebaseAuth.d.ts.map +1 -0
  207. package/bin/src/utils/firebaseAuth.js +174 -0
  208. package/bin/src/utils/firebaseAuth.js.map +1 -0
  209. package/bin/src/utils/holoseneAuth.d.ts.map +1 -0
  210. package/bin/src/utils/holoseneAuth.js +307 -0
  211. package/bin/src/utils/holoseneAuth.js.map +1 -0
  212. package/bin/src/utils/language.d.ts.map +1 -0
  213. package/bin/src/utils/language.js +181 -0
  214. package/bin/src/utils/language.js.map +1 -0
  215. package/bin/src/utils/markdown.d.ts.map +1 -0
  216. package/bin/src/utils/markdown.js +215 -0
  217. package/bin/src/utils/markdown.js.map +1 -0
  218. package/bin/src/utils/payment.d.ts.map +1 -0
  219. package/bin/src/utils/payment.js +290 -0
  220. package/bin/src/utils/payment.js.map +1 -0
  221. package/bin/src/utils/pricing.d.ts.map +1 -0
  222. package/bin/src/utils/pricing.js +165 -0
  223. package/bin/src/utils/pricing.js.map +1 -0
  224. package/bin/src/utils/razorpay.d.ts.map +1 -0
  225. package/bin/src/utils/razorpay.js +144 -0
  226. package/bin/src/utils/razorpay.js.map +1 -0
  227. package/bin/src/utils/session.d.ts.map +1 -0
  228. package/bin/src/utils/session.js +82 -0
  229. package/bin/src/utils/session.js.map +1 -0
  230. package/bin/src/utils/updateCheck.d.ts.map +1 -0
  231. package/bin/src/utils/updateCheck.js +108 -0
  232. package/bin/src/utils/updateCheck.js.map +1 -0
  233. package/downloads/invoice-2026-03.pdf +1 -0
  234. package/firebase.json +74 -0
  235. package/package.json +49 -46
  236. package/web/ScoutFavicon.png +0 -0
  237. package/web/app.js +3944 -0
  238. package/web/styles.css +3081 -0
  239. package/.ft/context.json +0 -17
  240. package/email-template.txt +0 -44
package/bin/src/index.js CHANGED
@@ -1,41 +1,391 @@
1
+ import fs from 'fs';
2
+ import path from 'path';
1
3
  import { Command } from 'commander';
2
- import { intro, outro } from '@clack/prompts';
4
+ import { intro, outro, select, isCancel, cancel } from '@clack/prompts';
3
5
  import chalk from 'chalk';
4
6
  import { handleInit } from './commands/init.js';
5
7
  import { handleOwners } from './commands/owners.js';
6
8
  import { handleRisky } from './commands/risky.js';
7
9
  import { handleSetup } from './commands/setup.js';
10
+ import { handleWebSearch } from './commands/web.js';
11
+ import { handleBrief } from './commands/brief.js';
12
+ import { handleRecommend } from './commands/recommend.js';
13
+ import { handleAudit } from './commands/audit.js';
14
+ import { handleBenchmark } from './commands/benchmark.js';
15
+ import { handleHistory } from './commands/history.js';
16
+ import { handleUndo } from './commands/undo.js';
17
+ import { handleConfig } from './commands/configCommand.js';
18
+ import { handleAgent } from './commands/agent.js';
19
+ import { handleSignup } from './commands/signup.js';
20
+ import { handleLogin } from './commands/login.js';
21
+ import { handleLogout } from './commands/logout.js';
22
+ import { handleAuthStatus } from './commands/authCommand.js';
23
+ import { handleDashboard } from './commands/dashboard.js';
24
+ import { handleQuota } from './commands/quota.js';
25
+ import { handlePlanCommand } from './commands/plan.js';
26
+ import { handleMcpList, handleMcpAdd, handleMcpRemove, handleMcpConnect, handleMcpDisconnect, handleMcpInspect, handleMcpTools, handleMcpHealth } from './commands/mcp.js';
27
+ import { renderBranding } from './utils/branding.js';
28
+ import { checkForUpdates } from './utils/updateCheck.js';
29
+ import { maybeShowDiscoveryMessage } from './discovery/display.js';
30
+ import { loadContext } from './utils/config.js';
31
+ import { isLoggedIn } from './utils/auth.js';
8
32
  const program = new Command();
9
33
  program
10
- .command('risky')
11
- .description('Show code fragility map based on churn and hotfixes')
12
- .action(async () => handleRisky());
13
- program
14
- .command('setup')
15
- .description('Diagnose local setup, missing .env files, and runtime mismatches')
16
- .action(async () => handleSetup());
17
- program
18
- .name('ft')
19
- .description('FrontTerrain — The Onboarding Co-Pilot for New Codebases')
20
- .version('1.0.9');
21
- // Header UI on execution
22
- program.hook('preAction', () => {
23
- intro(chalk.bgCyan.black(' FrontTerrain CLI (v1.0.9) '));
34
+ .name('scout')
35
+ .alias('ft')
36
+ .description('FrontTerrain The Onboarding Co-Pilot for New Codebases')
37
+ .version('1.1.0');
38
+ // Header UI on execution with FrontTerrain proprietary logo & version auto-checker
39
+ program.hook('preAction', async (_thisCommand, actionCommand) => {
40
+ intro(renderBranding('1.1.0'));
41
+ const cmdName = actionCommand ? actionCommand.name() : '';
42
+ if (cmdName !== 'upgrade') {
43
+ await checkForUpdates('1.1.0');
44
+ }
45
+ // Auth Guard: enforce authentication for all commands except login, signup, upgrade, help, dashboard, auth, status, plan, mcp
46
+ const EXEMPT_COMMANDS = ['login', 'signin', 'signup', 'register', 'upgrade', 'help', 'dashboard', 'web-ui', 'gui', 'auth', 'status', 'quota', 'usage', 'credits', 'plan', 'pricing', 'subscribe', 'mcp'];
47
+ if (!EXEMPT_COMMANDS.includes(cmdName)) {
48
+ if (!isLoggedIn()) {
49
+ const choice = await select({
50
+ message: 'Authentication Required: You must be logged in to use FrontTerrain Scout.',
51
+ options: [
52
+ { label: 'Log in to existing account', value: 'login' },
53
+ { label: 'Sign up for a new account', value: 'signup' },
54
+ { label: 'Exit', value: 'exit' },
55
+ ],
56
+ });
57
+ if (isCancel(choice) || choice === 'exit') {
58
+ cancel('Operation cancelled. Login or sign up required.');
59
+ process.exit(1);
60
+ }
61
+ if (choice === 'login') {
62
+ await handleLogin();
63
+ }
64
+ else if (choice === 'signup') {
65
+ await handleSignup();
66
+ }
67
+ if (!isLoggedIn()) {
68
+ cancel('Authentication failed. You must log in to run scout commands.');
69
+ process.exit(1);
70
+ }
71
+ }
72
+ }
73
+ });
74
+ // PostAction hook for Discovery Layer (runs on successful command completion)
75
+ program.hook('postAction', async (_thisCommand, actionCommand) => {
76
+ if (actionCommand) {
77
+ let repoContext;
78
+ try {
79
+ const context = loadContext();
80
+ const ftDir = path.join(process.cwd(), '.ft');
81
+ const scanFile = path.join(ftDir, 'scan-report.json');
82
+ let riskyFiles = [];
83
+ if (fs.existsSync(scanFile)) {
84
+ try {
85
+ const scanData = JSON.parse(fs.readFileSync(scanFile, 'utf-8'));
86
+ if (Array.isArray(scanData)) {
87
+ riskyFiles = scanData.map((s) => s.file);
88
+ }
89
+ }
90
+ catch { }
91
+ }
92
+ repoContext = {
93
+ riskyFiles,
94
+ testCoverageEstimate: context ? 0.7 : 0.5,
95
+ highRiskFileCount: riskyFiles.length,
96
+ };
97
+ }
98
+ catch { }
99
+ maybeShowDiscoveryMessage(repoContext);
100
+ }
24
101
  });
25
102
  // Command definitions
26
103
  program
27
104
  .command('init [repoUrl]')
28
- .description('Build local understanding map of the repository')
29
- .action(async (repoUrl) => {
30
- await handleInit(repoUrl);
105
+ .description('Clone + build local understanding map of the repository')
106
+ .option('-a, --ask', 'Interactive Q&A mode after repository initialization')
107
+ .option('-w, --web', 'Allow scout to access internet for web search & live web context')
108
+ .option('-l, --lang <language>', 'Language for AI teardowns, summaries, and Q&A responses')
109
+ .option('--native', 'Force native script instead of Romanized terminal script')
110
+ .action(async (repoUrl, options) => {
111
+ await handleInit(repoUrl, options);
31
112
  outro(chalk.green('Initialization complete!'));
32
113
  });
114
+ program
115
+ .command('brief')
116
+ .description('Human-readable onboarding summary (the "week-one explainer")')
117
+ .action(async () => {
118
+ await handleBrief();
119
+ outro(chalk.cyan('Brief overview complete.'));
120
+ });
33
121
  program
34
122
  .command('owners <path>')
35
- .description('Show actual file knowledge holders based on git history')
123
+ .description('Who actually knows this file (from git history, not guesses)')
36
124
  .action(async (path) => {
37
125
  await handleOwners(path);
38
126
  outro(chalk.cyan('File ownership analysis complete.'));
39
127
  });
128
+ program
129
+ .command('setup')
130
+ .description('Diagnoses and fixes local environment/run failures')
131
+ .action(async () => {
132
+ await handleSetup();
133
+ outro(chalk.cyan('Environment setup check complete.'));
134
+ });
135
+ program
136
+ .command('risky [targetRepo]')
137
+ .description('Fragility map: high-churn files, untested code, hotfix magnets, logical coupling, & knowledge silos')
138
+ .option('-e, --explain', 'AI root-cause diagnosis & refactoring strategy for high-risk files')
139
+ .option('-f, --fix', 'Trigger AI agent to auto-fix and add tests for top fragile hotspot')
140
+ .option('-l, --lang <language>', 'Language for AI risk analysis')
141
+ .option('--native', 'Force native script')
142
+ .action(async (targetRepo, options) => {
143
+ await handleRisky(targetRepo, options);
144
+ outro(chalk.cyan('Fragility scan complete.'));
145
+ });
146
+ program
147
+ .command('agent [goal...]')
148
+ .alias('task')
149
+ .alias('goal')
150
+ .description('Autonomous AI agent: analyzes goals, creates/fixes code, executes commands, scans issues, & plans features')
151
+ .option('-c, --create <filePath>', 'Generate and create a new source code file at target relative path')
152
+ .option('-f, --file <file>', 'Specific file path to modify or fix')
153
+ .option('-i, --issue <id>', 'Specific issue ID from scan report to apply fix for')
154
+ .option('-r, --run <command...>', 'Execute shell command with automated AI failure diagnosis and auto-fix prompt')
155
+ .option('-s, --scan', 'Perform read-only bug & vulnerability scan across codebase')
156
+ .option('-a, --add <idea>', 'Evaluate feasibility & generate step-by-step roadmap for a feature idea')
157
+ .option('-v, --verify <cmd>', 'Custom verification command (e.g. "npm test" or "npm run build")')
158
+ .option('-m, --max-retries <number>', 'Maximum self-healing attempt iterations (default 3)')
159
+ .option('--steps <number>', 'Maximum autonomous execution steps (default 30)')
160
+ .option('-y, --yes', 'Automatically retain changes without prompting for review')
161
+ .option('-l, --lang <language>', 'Language for AI teardowns, explanations, and summaries')
162
+ .option('-V, --voice', 'Enable Text-to-Speech (TTS) & Speech-to-Text (STT) voice mode')
163
+ .option('--resume <taskId>', 'Resume an existing autonomous task by ID from .ft/tasks/')
164
+ .option('--native', 'Force native script')
165
+ .action(async (goalParts, options) => {
166
+ const goalStr = Array.isArray(goalParts) && goalParts.length > 0 ? goalParts.join(' ') : undefined;
167
+ const runStr = Array.isArray(options.run) ? options.run.join(' ') : options.run;
168
+ await handleAgent(goalStr, {
169
+ ...options,
170
+ run: runStr,
171
+ verifyCmd: options.verify,
172
+ maxRetries: options.maxRetries ? Number(options.maxRetries) : undefined,
173
+ steps: options.steps ? Number(options.steps) : undefined,
174
+ resume: options.resume,
175
+ });
176
+ outro(chalk.green('Agent workflow complete.'));
177
+ });
178
+ program
179
+ .command('recommend')
180
+ .description('Architecture, performance, and DSA-level suggestions')
181
+ .option('-l, --lang <language>', 'Language for recommendations')
182
+ .option('--native', 'Force native script')
183
+ .action(async (options) => {
184
+ await handleRecommend(options);
185
+ outro(chalk.cyan('Recommendations complete.'));
186
+ });
187
+ program
188
+ .command('audit')
189
+ .description('Security & dependency/supply-chain scan')
190
+ .action(async () => {
191
+ await handleAudit();
192
+ outro(chalk.cyan('Security audit complete.'));
193
+ });
194
+ program
195
+ .command('benchmark')
196
+ .description('Measure LLM latency and tokens/sec across all configured models (Nemotron, Qwen, Gemini, GPT)')
197
+ .action(async () => {
198
+ await handleBenchmark();
199
+ outro(chalk.cyan('Benchmark complete.'));
200
+ });
201
+ program
202
+ .command('history')
203
+ .description('Log of everything FT has done in this repo')
204
+ .action(async () => {
205
+ await handleHistory();
206
+ outro(chalk.cyan('History view complete.'));
207
+ });
208
+ program
209
+ .command('undo')
210
+ .description("Revert FT's last change")
211
+ .action(async () => {
212
+ await handleUndo();
213
+ outro(chalk.cyan('Undo complete.'));
214
+ });
215
+ program
216
+ .command('config')
217
+ .description('Manage permissions and confidential-data access')
218
+ .option('-c, --confidential', 'Allow access to confidential data / schemas')
219
+ .option('-d, --deny', 'Deny access to confidential data')
220
+ .option('-t, --tips <mode>', 'Toggle or check discovery tips (on | off | status)')
221
+ .action(async (options) => {
222
+ await handleConfig(options);
223
+ outro(chalk.cyan('Configuration updated.'));
224
+ });
225
+ program
226
+ .command('search <query>')
227
+ .alias('web')
228
+ .description('Allow scout to search the internet for live web context, docs, & technical solutions')
229
+ .option('-a, --ask', 'Synthesize an AI answer using live internet search results')
230
+ .option('-l, --lang <language>', 'Language for AI search synthesis')
231
+ .option('--native', 'Force native script')
232
+ .action(async (query, options) => {
233
+ await handleWebSearch(query, options);
234
+ outro(chalk.cyan('Internet search complete.'));
235
+ });
236
+ program
237
+ .command('upgrade')
238
+ .description('Check for updates and auto-upgrade Scout to the latest version')
239
+ .action(async () => {
240
+ await checkForUpdates('1.1.0', true);
241
+ outro(chalk.cyan('Upgrade check complete.'));
242
+ });
243
+ program
244
+ .command('signup')
245
+ .alias('register')
246
+ .description('Create a new Scout developer account')
247
+ .option('-n, --name <name>', 'Full name')
248
+ .option('-e, --email <email>', 'Email address')
249
+ .option('-p, --password <password>', 'Password')
250
+ .option('-h, --holosene', 'Sign up via Holosene Account (holosene.frontterrain.com)')
251
+ .action(async (options) => {
252
+ await handleSignup(options);
253
+ outro(chalk.cyan('Sign up flow finished.'));
254
+ });
255
+ program
256
+ .command('login')
257
+ .alias('signin')
258
+ .description('Log into your FrontTerrain / Holosene account')
259
+ .option('-e, --email <email>', 'Email or username')
260
+ .option('-p, --password <password>', 'Password')
261
+ .option('-t, --token <token>', 'API Personal Access Token')
262
+ .option('-h, --holosene', 'Authenticate using Holosene account credentials')
263
+ .option('--holosene-token <token>', 'Authenticate with direct Holosene access token')
264
+ .action(async (options) => {
265
+ await handleLogin(options);
266
+ outro(chalk.cyan('Login flow finished.'));
267
+ process.exit(0);
268
+ });
269
+ program
270
+ .command('logout')
271
+ .description('Log out of your active FrontTerrain session')
272
+ .action(async () => {
273
+ await handleLogout();
274
+ outro(chalk.cyan('Logout complete.'));
275
+ });
276
+ program
277
+ .command('auth')
278
+ .alias('status')
279
+ .description('Check current authentication status and user session details')
280
+ .action(async () => {
281
+ await handleAuthStatus();
282
+ outro(chalk.cyan('Auth status check complete.'));
283
+ });
284
+ program
285
+ .command('dashboard')
286
+ .alias('web-ui')
287
+ .alias('gui')
288
+ .description('Launch interactive Scout Web Dashboard sync server')
289
+ .option('--open', 'Automatically open browser on web dashboard')
290
+ .action(async (options) => {
291
+ await handleDashboard({
292
+ open: !!options.open,
293
+ });
294
+ });
295
+ program
296
+ .command('quota')
297
+ .alias('usage')
298
+ .alias('credits')
299
+ .description('Check Scout credits, renewal status, and BYOK mode')
300
+ .action(async () => {
301
+ await handleQuota();
302
+ outro(chalk.cyan('Quota check complete.'));
303
+ });
304
+ program
305
+ .command('plan')
306
+ .alias('pricing')
307
+ .alias('subscribe')
308
+ .description('Manage Scout subscription tier, check pricing, and upgrade quota')
309
+ .action(async () => {
310
+ await handlePlanCommand();
311
+ outro(chalk.cyan('Subscription workflow complete.'));
312
+ });
313
+ const mcp = program
314
+ .command('mcp')
315
+ .description('Manage Model Context Protocol (MCP) server connections, tools, and health');
316
+ mcp
317
+ .command('list')
318
+ .description('List configured MCP servers, transport type, tool counts, and connection states')
319
+ .action(async () => {
320
+ await handleMcpList();
321
+ outro(chalk.cyan('MCP list complete.'));
322
+ });
323
+ mcp
324
+ .command('add [name]')
325
+ .description('Connect a new MCP server (HTTP or Stdio transport) with interactive wizard or flags')
326
+ .option('--name <name>', 'Server friendly name')
327
+ .option('--transport <transport>', 'Transport protocol: http or stdio')
328
+ .option('--endpoint <url>', 'Endpoint URL for HTTP transport')
329
+ .option('--command <command>', 'Executable command for Stdio transport')
330
+ .option('--args <args...>', 'Arguments for Stdio command')
331
+ .option('--auth-type <type>', 'Auth type: none, bearer, or apiKey')
332
+ .option('--token <token>', 'Bearer token or API key')
333
+ .option('--header-key <name>', 'Header name for apiKey auth (e.g. X-API-Key)')
334
+ .option('--auto-connect', 'Automatically connect and discover tools after adding')
335
+ .action(async (nameOrOpts, maybeOpts) => {
336
+ const name = typeof nameOrOpts === 'string' ? nameOrOpts : nameOrOpts?.name;
337
+ const options = typeof nameOrOpts === 'object' && !maybeOpts ? nameOrOpts : (maybeOpts || {});
338
+ if (Array.isArray(options.args)) {
339
+ options.args = options.args.join(' ');
340
+ }
341
+ await handleMcpAdd(name, options);
342
+ });
343
+ mcp
344
+ .command('remove [id]')
345
+ .alias('rm')
346
+ .description('Remove an MCP server configuration and wipe associated credentials')
347
+ .action(async (id) => {
348
+ await handleMcpRemove(id);
349
+ outro(chalk.cyan('MCP remove complete.'));
350
+ });
351
+ mcp
352
+ .command('connect [id]')
353
+ .description('Initiate connection handshake and discover tools from an MCP server')
354
+ .action(async (id) => {
355
+ await handleMcpConnect(id);
356
+ outro(chalk.cyan('MCP connect complete.'));
357
+ });
358
+ mcp
359
+ .command('disconnect [id]')
360
+ .description('Disconnect an active MCP server session')
361
+ .action(async (id) => {
362
+ await handleMcpDisconnect(id);
363
+ outro(chalk.cyan('MCP disconnect complete.'));
364
+ });
365
+ mcp
366
+ .command('inspect [id]')
367
+ .description('Display detailed server metadata, endpoint, permissions, and tool inventory')
368
+ .action(async (id) => {
369
+ await handleMcpInspect(id);
370
+ outro(chalk.cyan('MCP inspect complete.'));
371
+ });
372
+ mcp
373
+ .command('tools [id]')
374
+ .description('List all discovered tools, input schemas, and permission levels for a server')
375
+ .action(async (id) => {
376
+ await handleMcpTools(id);
377
+ outro(chalk.cyan('MCP tools inspect complete.'));
378
+ });
379
+ mcp
380
+ .command('health')
381
+ .description('Run live health checks, latency probes, and connection verifications across all servers')
382
+ .action(async () => {
383
+ await handleMcpHealth();
384
+ outro(chalk.cyan('MCP health check complete.'));
385
+ });
386
+ mcp.action(async () => {
387
+ await handleMcpList();
388
+ outro(chalk.cyan('Use "scout mcp --help" for all available commands.'));
389
+ });
40
390
  program.parse(process.argv);
41
391
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"AAAA,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;AAElD,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,qDAAqD,CAAC;KAClE,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;AAErC,OAAO;KACJ,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,kEAAkE,CAAC;KAC/E,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;AAGrC,OAAO;KACJ,IAAI,CAAC,IAAI,CAAC;KACV,WAAW,CAAC,0DAA0D,CAAC;KACvE,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,yBAAyB;AACzB,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,EAAE;IAC7B,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC,CAAC;AAC3D,CAAC,CAAC,CAAC;AAEH,sBAAsB;AACtB,OAAO;KACJ,OAAO,CAAC,gBAAgB,CAAC;KACzB,WAAW,CAAC,iDAAiD,CAAC;KAC9D,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACxB,MAAM,UAAU,CAAC,OAAO,CAAC,CAAC;IAC1B,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC,CAAC;AACjD,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,eAAe,CAAC;KACxB,WAAW,CAAC,yDAAyD,CAAC;KACtE,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;IACrB,MAAM,YAAY,CAAC,IAAI,CAAC,CAAC;IACzB,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC,CAAC;AACzD,CAAC,CAAC,CAAC;AAEL,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["client.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAExD,MAAM,WAAW,mBAAmB;IAChC,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,qBAAqB,CAAC;IACpC,UAAU,EAAE;QACR,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;KACtB,CAAC;IACF,YAAY,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,qBAAa,SAAS;IAClB,OAAO,CAAC,SAAS,CAAgB;IACjC,OAAO,CAAC,WAAW,CAAkB;IACrC,OAAO,CAAC,UAAU,CAAC,CAAoC;IACvD,OAAO,CAAC,YAAY,CAA6B;IACjD,OAAO,CAAC,eAAe,CAAwB;IAE/C,YAAY,SAAS,EAAE,aAAa,EAEnC;IAEM,WAAW,IAAI,OAAO,CAE5B;IAEM,aAAa;;cAtBV,MAAM;kBACF,MAAM;kBAuBnB;IAEM,eAAe,IAAI,qBAAqB,CAE9C;IAEM,kBAAkB,IAAI,MAAM,CAElC;IAED;;OAEG;IACU,oBAAoB,CAAC,SAAS,GAAE,MAAc,GAAG,OAAO,CAAC,mBAAmB,CAAC,CA2BzF;IAED;;OAEG;IACU,IAAI,CAAC,SAAS,GAAE,MAAa,GAAG,OAAO,CAAC,MAAM,CAAC,CAa3D;IAED;;OAEG;IACU,SAAS,CAAC,SAAS,GAAE,MAAc,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAehE;IAED;;OAEG;IACU,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAM,EAAE,SAAS,GAAE,MAAc,GAAG,OAAO,CAAC,GAAG,CAAC,CAiC3G;IAED;;OAEG;IACU,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAGvC;CACJ"}
@@ -0,0 +1,127 @@
1
+ /**
2
+ * Scout MCP Ecosystem - Protocol Client
3
+ * Implements JSON-RPC 2.0 handshake, capability negotiation, ping, tool discovery, and tool execution.
4
+ */
5
+ export class MCPClient {
6
+ transport;
7
+ initialized = false;
8
+ serverInfo;
9
+ capabilities = {};
10
+ protocolVersion = '2024-11-05';
11
+ constructor(transport) {
12
+ this.transport = transport;
13
+ }
14
+ isConnected() {
15
+ return this.transport.isConnected() && this.initialized;
16
+ }
17
+ getServerInfo() {
18
+ return this.serverInfo;
19
+ }
20
+ getCapabilities() {
21
+ return this.capabilities;
22
+ }
23
+ getProtocolVersion() {
24
+ return this.protocolVersion;
25
+ }
26
+ /**
27
+ * Connect transport and perform the MCP initialization handshake
28
+ */
29
+ async connectAndInitialize(timeoutMs = 30000) {
30
+ await this.transport.connect();
31
+ // Send initialize request per MCP specification
32
+ const initParams = {
33
+ protocolVersion: '2024-11-05',
34
+ capabilities: {
35
+ roots: { listChanged: true },
36
+ sampling: {},
37
+ },
38
+ clientInfo: {
39
+ name: 'scout',
40
+ version: '1.1.0',
41
+ },
42
+ };
43
+ const result = await this.transport.sendRequest('initialize', initParams, timeoutMs);
44
+ this.initialized = true;
45
+ this.protocolVersion = result.protocolVersion || '2024-11-05';
46
+ this.capabilities = result.capabilities || {};
47
+ this.serverInfo = result.serverInfo;
48
+ // Send initialized notification acknowledgment
49
+ await this.transport.sendNotification('notifications/initialized', {});
50
+ return result;
51
+ }
52
+ /**
53
+ * Measure ping round-trip latency in milliseconds
54
+ */
55
+ async ping(timeoutMs = 5000) {
56
+ const start = Date.now();
57
+ try {
58
+ await this.transport.sendRequest('ping', {}, timeoutMs);
59
+ }
60
+ catch (err) {
61
+ // Some servers don't implement 'ping' method explicitly; fallback to listing tools as ping
62
+ if (err?.message?.includes('Method not found') || err?.message?.includes('-32601')) {
63
+ await this.transport.sendRequest('tools/list', {}, timeoutMs);
64
+ }
65
+ else {
66
+ throw err;
67
+ }
68
+ }
69
+ return Date.now() - start;
70
+ }
71
+ /**
72
+ * Discover all tools exposed by the MCP server with automatic pagination
73
+ */
74
+ async listTools(timeoutMs = 20000) {
75
+ const allTools = [];
76
+ let cursor = undefined;
77
+ do {
78
+ const params = cursor ? { cursor } : {};
79
+ const res = await this.transport.sendRequest('tools/list', params, timeoutMs);
80
+ const tools = res?.tools || [];
81
+ if (Array.isArray(tools)) {
82
+ allTools.push(...tools);
83
+ }
84
+ cursor = res?.nextCursor;
85
+ } while (cursor);
86
+ return allTools;
87
+ }
88
+ /**
89
+ * Execute an MCP tool via 'tools/call'
90
+ */
91
+ async callTool(name, args = {}, timeoutMs = 60000) {
92
+ const params = {
93
+ name,
94
+ arguments: args || {},
95
+ };
96
+ const res = await this.transport.sendRequest('tools/call', params, timeoutMs);
97
+ // Check if MCP returned isError flag
98
+ if (res && res.isError) {
99
+ const contentText = Array.isArray(res.content)
100
+ ? res.content.map((c) => c.text || JSON.stringify(c)).join('\n')
101
+ : (typeof res.content === 'string' ? res.content : JSON.stringify(res));
102
+ throw new Error(`MCP Tool Error (${name}): ${contentText}`);
103
+ }
104
+ // Normalize output content into readable text or structured format
105
+ if (res && Array.isArray(res.content)) {
106
+ const textParts = res.content.filter((c) => c.type === 'text').map((c) => c.text);
107
+ const nonTextParts = res.content.filter((c) => c.type !== 'text');
108
+ if (nonTextParts.length === 0) {
109
+ return textParts.join('\n');
110
+ }
111
+ return {
112
+ text: textParts.join('\n'),
113
+ artifacts: nonTextParts,
114
+ raw: res.content,
115
+ };
116
+ }
117
+ return res;
118
+ }
119
+ /**
120
+ * Disconnect the client and close transport
121
+ */
122
+ async disconnect() {
123
+ this.initialized = false;
124
+ await this.transport.disconnect();
125
+ }
126
+ }
127
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discovery.d.ts","sourceRoot":"","sources":["discovery.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAExE,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,GAAG,GAAG;IACjD,IAAI,EAAE,QAAQ,CAAC;IACf,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAChC,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACtB,CAuBA;AAED,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,GAAE,MAAW,GAAG,kBAAkB,CAiDtG;AAED,wBAAgB,gBAAgB,CAC5B,OAAO,EAAE,GAAG,EACZ,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,GACnB,iBAAiB,CAyBnB"}