ft-scout 1.0.8 → 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 (243) 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 -32
  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 -1
  19. package/bin/src/commands/brief.js +28 -19
  20. package/bin/src/commands/brief.js.map +1 -1
  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 +411 -78
  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 +1272 -23
  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 +365 -23
  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 -18
  240. package/email-template.html +0 -223
  241. package/email-template.txt +0 -45
  242. package/scripts/send-brevo-campaign.cjs +0 -167
  243. package/scripts/send-email.js +0 -77
@@ -0,0 +1,414 @@
1
+ import fs from 'fs';
2
+ import path from 'path';
3
+ import { exec } from 'child_process';
4
+ import { promisify } from 'util';
5
+ import chalk from 'chalk';
6
+ import { spinner } from '@clack/prompts';
7
+ import { generateCodeFix } from './llm.js';
8
+ const execAsync = promisify(exec);
9
+ /**
10
+ * Parses raw compiler/terminal output to extract key error blocks and referenced file paths
11
+ */
12
+ export function extractErrorDiagnostics(output) {
13
+ if (!output)
14
+ return { keyErrors: [], referencedFiles: [] };
15
+ const lines = output.split('\n');
16
+ const keyErrors = [];
17
+ const referencedFiles = new Set();
18
+ const fileLineRegex = /([a-zA-Z0-9_\-./\\]+\.[a-zA-Z0-9]+)[:,\s]+(?:line\s+)?(\d+)/gi;
19
+ for (let i = 0; i < lines.length; i++) {
20
+ const line = lines[i];
21
+ const normLine = line.trim();
22
+ const isErrorLine = /\b(?:error|err|failed|failure|syntaxerror|typeerror|referenceerror|exception|uncaught|cannot find|invalid)\b/i.test(normLine);
23
+ if (isErrorLine) {
24
+ const contextBlock = lines.slice(Math.max(0, i - 1), Math.min(lines.length, i + 3)).join('\n').trim();
25
+ if (contextBlock && !keyErrors.includes(contextBlock)) {
26
+ keyErrors.push(contextBlock);
27
+ }
28
+ }
29
+ let match;
30
+ while ((match = fileLineRegex.exec(line)) !== null) {
31
+ if (match[1] && match[1].includes('.')) {
32
+ const f = match[1].replace(/\\/g, '/').replace(/^\.\//, '');
33
+ if (!['node_modules', 'dist', 'bin'].some((ignored) => f.includes(ignored))) {
34
+ referencedFiles.add(f);
35
+ }
36
+ }
37
+ }
38
+ }
39
+ return {
40
+ keyErrors: keyErrors.slice(0, 5),
41
+ referencedFiles: Array.from(referencedFiles).slice(0, 5),
42
+ };
43
+ }
44
+ /**
45
+ * Perform automated syntax, type, and compilation check on a target file
46
+ */
47
+ export async function checkFileSyntax(filePath, cwd) {
48
+ const fullPath = path.isAbsolute(filePath) ? filePath : path.resolve(cwd, filePath);
49
+ if (!fs.existsSync(fullPath) || !fs.statSync(fullPath).isFile()) {
50
+ return { valid: false, errors: [`File not found: ${filePath}`], output: `File not found: ${filePath}` };
51
+ }
52
+ const ext = path.extname(filePath).toLowerCase();
53
+ // 1. JSON Syntax Check
54
+ if (ext === '.json') {
55
+ try {
56
+ const content = fs.readFileSync(fullPath, 'utf-8');
57
+ JSON.parse(content);
58
+ return { valid: true, errors: [], output: 'Valid JSON syntax.' };
59
+ }
60
+ catch (err) {
61
+ return { valid: false, errors: [`JSON Syntax Error: ${err?.message || String(err)}`], output: err?.message || String(err) };
62
+ }
63
+ }
64
+ // 2. JavaScript / TypeScript Check
65
+ if (['.js', '.mjs', '.cjs', '.ts', '.tsx', '.jsx'].includes(ext)) {
66
+ const hasTsConfig = fs.existsSync(path.join(cwd, 'tsconfig.json'));
67
+ if (hasTsConfig && ['.ts', '.tsx'].includes(ext)) {
68
+ try {
69
+ const { stdout, stderr } = await execAsync('npx tsc --noEmit', { cwd, maxBuffer: 10 * 1024 * 1024 });
70
+ return { valid: true, errors: [], output: stdout || 'TypeScript compilation clean.' };
71
+ }
72
+ catch (err) {
73
+ const errOut = (err.stdout || '') + '\n' + (err.stderr || '') + '\n' + (err.message || '');
74
+ const diagnostics = extractErrorDiagnostics(errOut);
75
+ const normPath = filePath.replace(/\\/g, '/');
76
+ const baseName = path.basename(filePath);
77
+ const fileErrorBlocks = diagnostics.keyErrors.filter((block) => {
78
+ const normBlock = block.replace(/\\/g, '/');
79
+ return normBlock.includes(normPath) || normBlock.includes(baseName);
80
+ });
81
+ if (fileErrorBlocks.length > 0) {
82
+ return {
83
+ valid: false,
84
+ errors: fileErrorBlocks,
85
+ output: errOut.slice(0, 4000),
86
+ referencedFiles: diagnostics.referencedFiles,
87
+ };
88
+ }
89
+ // If tsc failed with error output, don't mark as clean if there are errors
90
+ if (diagnostics.keyErrors.length > 0) {
91
+ return {
92
+ valid: false,
93
+ errors: [`Workspace TypeScript compilation error:\n${diagnostics.keyErrors.join('\n\n')}`],
94
+ output: errOut.slice(0, 4000),
95
+ referencedFiles: diagnostics.referencedFiles,
96
+ };
97
+ }
98
+ return { valid: true, errors: [], output: 'TypeScript file compilation clean.' };
99
+ }
100
+ }
101
+ try {
102
+ const { stderr } = await execAsync(`node --check "${fullPath}"`, { cwd });
103
+ if (stderr && stderr.includes('SyntaxError')) {
104
+ return { valid: false, errors: [stderr], output: stderr };
105
+ }
106
+ return { valid: true, errors: [], output: 'Node syntax check passed.' };
107
+ }
108
+ catch (err) {
109
+ const errOut = (err.stderr || '') || (err.stdout || '') || err.message || String(err);
110
+ const diagnostics = extractErrorDiagnostics(errOut);
111
+ return {
112
+ valid: false,
113
+ errors: diagnostics.keyErrors.length > 0 ? diagnostics.keyErrors : [errOut],
114
+ output: errOut,
115
+ referencedFiles: diagnostics.referencedFiles,
116
+ };
117
+ }
118
+ }
119
+ // 3. Python Syntax Check
120
+ if (ext === '.py') {
121
+ try {
122
+ const pyCmd = process.platform === 'win32' ? 'python' : 'python3';
123
+ const { stdout, stderr } = await execAsync(`${pyCmd} -m py_compile "${fullPath}"`, { cwd });
124
+ return { valid: true, errors: [], output: stdout || 'Python syntax clean.' };
125
+ }
126
+ catch (err) {
127
+ const errOut = (err.stderr || '') || (err.stdout || '') || err.message || String(err);
128
+ return { valid: false, errors: [errOut], output: errOut };
129
+ }
130
+ }
131
+ // 4. Go Syntax Check
132
+ if (ext === '.go') {
133
+ try {
134
+ const { stdout, stderr } = await execAsync(`go vet "${fullPath}"`, { cwd });
135
+ return { valid: true, errors: [], output: stdout || 'Go check clean.' };
136
+ }
137
+ catch (err) {
138
+ const errOut = (err.stderr || '') || (err.stdout || '') || err.message || String(err);
139
+ return { valid: false, errors: [errOut], output: errOut };
140
+ }
141
+ }
142
+ // 5. Rust Syntax Check
143
+ if (ext === '.rs') {
144
+ try {
145
+ const { stdout, stderr } = await execAsync(`cargo check`, { cwd });
146
+ return { valid: true, errors: [], output: stdout || 'Cargo check clean.' };
147
+ }
148
+ catch (err) {
149
+ const errOut = (err.stderr || '') || (err.stdout || '') || err.message || String(err);
150
+ return { valid: false, errors: [errOut], output: errOut };
151
+ }
152
+ }
153
+ // 6. HTML Syntax & Embedded JavaScript Check
154
+ if (['.html', '.htm'].includes(ext)) {
155
+ try {
156
+ const content = fs.readFileSync(fullPath, 'utf-8');
157
+ const scriptRegex = /<script\b[^>]*>([\s\S]*?)<\/script>/gi;
158
+ let match;
159
+ const scriptErrors = [];
160
+ let scriptCount = 0;
161
+ while ((match = scriptRegex.exec(content)) !== null) {
162
+ const scriptBody = match[1];
163
+ if (scriptBody && scriptBody.trim()) {
164
+ scriptCount++;
165
+ const tempPath = path.join(cwd, `.ft-temp-check-${scriptCount}.js`);
166
+ try {
167
+ fs.writeFileSync(tempPath, scriptBody, 'utf-8');
168
+ try {
169
+ const { stderr } = await execAsync(`node --check "${tempPath}"`, { cwd });
170
+ if (stderr && stderr.includes('SyntaxError')) {
171
+ scriptErrors.push(`HTML <script> #${scriptCount} Syntax Error: ${stderr}`);
172
+ }
173
+ }
174
+ catch (err) {
175
+ const errOut = (err.stderr || '') || (err.stdout || '') || err.message || String(err);
176
+ scriptErrors.push(`HTML <script> #${scriptCount} Syntax Error: ${errOut}`);
177
+ }
178
+ }
179
+ finally {
180
+ if (fs.existsSync(tempPath))
181
+ fs.unlinkSync(tempPath);
182
+ }
183
+ }
184
+ }
185
+ if (scriptErrors.length > 0) {
186
+ return { valid: false, errors: scriptErrors, output: scriptErrors.join('\n') };
187
+ }
188
+ return { valid: true, errors: [], output: 'HTML syntax & embedded scripts clean.' };
189
+ }
190
+ catch { }
191
+ }
192
+ return { valid: true, errors: [], output: 'File extension has no standalone compiler check.' };
193
+ }
194
+ /**
195
+ * Execute custom verification command, project test suite, or package build check
196
+ */
197
+ export async function runProjectVerification(cwd, verifyCmd) {
198
+ if (verifyCmd && verifyCmd.trim()) {
199
+ try {
200
+ const { stdout, stderr } = await execAsync(verifyCmd.trim(), { cwd, maxBuffer: 10 * 1024 * 1024 });
201
+ return { valid: true, errors: [], output: (stdout || '') + (stderr ? `\n${stderr}` : '') };
202
+ }
203
+ catch (err) {
204
+ const combined = (err.stdout || '') + '\n' + (err.stderr || '') + '\n' + (err.message || '');
205
+ return { valid: false, errors: [combined.slice(0, 4000)], output: combined.slice(0, 8000) };
206
+ }
207
+ }
208
+ const pkgPath = path.join(cwd, 'package.json');
209
+ if (fs.existsSync(pkgPath)) {
210
+ try {
211
+ const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf-8'));
212
+ // Execute npm test if test script exists and is defined
213
+ if (pkg.scripts && pkg.scripts.test && !pkg.scripts.test.includes('no test specified')) {
214
+ try {
215
+ const { stdout, stderr } = await execAsync('npm test', { cwd, maxBuffer: 10 * 1024 * 1024 });
216
+ return { valid: true, errors: [], output: stdout || stderr || 'npm test passed cleanly.' };
217
+ }
218
+ catch (err) {
219
+ const combined = (err.stdout || '') + '\n' + (err.stderr || '') + '\n' + (err.message || '');
220
+ return { valid: false, errors: [`Test Suite Execution Failed (npm test):\n${combined.slice(0, 3000)}`], output: combined.slice(0, 8000) };
221
+ }
222
+ }
223
+ // Execute npm run build if defined
224
+ if (pkg.scripts && pkg.scripts.build) {
225
+ try {
226
+ const { stdout, stderr } = await execAsync('npm run build', { cwd, maxBuffer: 10 * 1024 * 1024 });
227
+ return { valid: true, errors: [], output: stdout || 'npm run build clean.' };
228
+ }
229
+ catch (err) {
230
+ const combined = (err.stdout || '') + '\n' + (err.stderr || '') + '\n' + (err.message || '');
231
+ return { valid: false, errors: [`Build Verification Failed (npm run build):\n${combined.slice(0, 3000)}`], output: combined.slice(0, 8000) };
232
+ }
233
+ }
234
+ }
235
+ catch { }
236
+ }
237
+ // Cargo test for Rust
238
+ if (fs.existsSync(path.join(cwd, 'Cargo.toml'))) {
239
+ try {
240
+ const { stdout, stderr } = await execAsync('cargo test', { cwd, maxBuffer: 10 * 1024 * 1024 });
241
+ return { valid: true, errors: [], output: stdout || stderr || 'Cargo test clean.' };
242
+ }
243
+ catch (err) {
244
+ const combined = (err.stdout || '') + '\n' + (err.stderr || '') + '\n' + (err.message || '');
245
+ return { valid: false, errors: [`Cargo Test Failed:\n${combined.slice(0, 3000)}`], output: combined.slice(0, 8000) };
246
+ }
247
+ }
248
+ // Go test for Go
249
+ if (fs.existsSync(path.join(cwd, 'go.mod'))) {
250
+ try {
251
+ const { stdout, stderr } = await execAsync('go test ./...', { cwd, maxBuffer: 10 * 1024 * 1024 });
252
+ return { valid: true, errors: [], output: stdout || stderr || 'Go test clean.' };
253
+ }
254
+ catch (err) {
255
+ const combined = (err.stdout || '') + '\n' + (err.stderr || '') + '\n' + (err.message || '');
256
+ return { valid: false, errors: [`Go Test Failed:\n${combined.slice(0, 3000)}`], output: combined.slice(0, 8000) };
257
+ }
258
+ }
259
+ return { valid: true, errors: [], output: 'No project build/test verification command executed.' };
260
+ }
261
+ /**
262
+ * Auto-fix and recheck files iteratively until errors are resolved or max retries reached
263
+ */
264
+ export async function verifyAndSelfHealFiles(targetFiles, cwd, projectName, filesList, options) {
265
+ const maxRetries = options?.maxRetries || 3;
266
+ const verifiedFiles = [];
267
+ const remainingErrors = [];
268
+ for (const file of targetFiles) {
269
+ let attempts = 0;
270
+ let isClean = false;
271
+ while (attempts < maxRetries) {
272
+ attempts++;
273
+ const checkSpin = spinner();
274
+ checkSpin.start(chalk.cyan(` Checking for error: edited ${file}...`));
275
+ const checkRes = await checkFileSyntax(file, cwd);
276
+ if (checkRes.valid) {
277
+ checkSpin.stop(chalk.green(` Checking for error: edited ${file} Syntax & build clean.`));
278
+ isClean = true;
279
+ break;
280
+ }
281
+ checkSpin.stop(chalk.yellow(`️ Checking for error: edited ${file} Error detected.`));
282
+ // Error detected! Auto-fix and recheck!
283
+ const vSpin = spinner();
284
+ vSpin.start(chalk.yellow(` Running auto-fix on ${file} (Attempt ${attempts}/${maxRetries})...`));
285
+ const fullPath = path.isAbsolute(file) ? file : path.resolve(cwd, file);
286
+ let currentContent = '';
287
+ try {
288
+ currentContent = fs.readFileSync(fullPath, 'utf-8');
289
+ }
290
+ catch {
291
+ remainingErrors.push(`Could not read file ${file} for auto-fix.`);
292
+ break;
293
+ }
294
+ try {
295
+ const fixResult = await generateCodeFix(`Fix syntax, runtime, or logical error in file "${file}":\n${checkRes.errors.join('\n')}`, projectName, filesList, file, currentContent, options?.language, options?.native);
296
+ if (fixResult.fixedCode && fixResult.fixedCode.trim()) {
297
+ fs.writeFileSync(fullPath, fixResult.fixedCode, 'utf-8');
298
+ }
299
+ // Recheck file after applying fix!
300
+ const recheck = await checkFileSyntax(file, cwd);
301
+ if (recheck.valid) {
302
+ vSpin.stop(chalk.green(` Fix confirmed! ${file} is now error-free (Verified on attempt ${attempts}).`));
303
+ isClean = true;
304
+ break;
305
+ }
306
+ else {
307
+ vSpin.stop(chalk.yellow(`️ Fix applied to ${file}, but recheck found remaining error. Retrying (${attempts}/${maxRetries})...`));
308
+ }
309
+ }
310
+ catch (fixErr) {
311
+ vSpin.stop(chalk.red(`Failed fix attempt on ${file}: ${fixErr?.message || String(fixErr)}`));
312
+ }
313
+ }
314
+ if (isClean) {
315
+ verifiedFiles.push(file);
316
+ }
317
+ else {
318
+ remainingErrors.push(`File ${file} failed verification after ${maxRetries} self-healing attempt(s).`);
319
+ }
320
+ }
321
+ // Check overall project build verification if custom verifyCmd or tsconfig exists
322
+ if (options?.verifyCmd || fs.existsSync(path.join(cwd, 'tsconfig.json'))) {
323
+ const projCheck = await runProjectVerification(cwd, options?.verifyCmd);
324
+ if (!projCheck.valid) {
325
+ remainingErrors.push(`Project build/test verification failed:\n${projCheck.errors.join('\n')}`);
326
+ }
327
+ }
328
+ return {
329
+ success: remainingErrors.length === 0,
330
+ verifiedFiles,
331
+ remainingErrors,
332
+ };
333
+ }
334
+ /**
335
+ * Executes a shell command smartly: fast commands return exit code immediately,
336
+ * while persistent server/daemon processes (e.g. node server.js, npm start) are left running in background
337
+ * so Scout Agent does not hang.
338
+ */
339
+ export function executeSmartCommand(cmd, cwd, initialWaitMs = 3000, maxWaitMs = 20000) {
340
+ return new Promise((resolve) => {
341
+ const proc = exec(cmd, { cwd, maxBuffer: 10 * 1024 * 1024 });
342
+ const outputBuffers = [];
343
+ let hasResolved = false;
344
+ const isLikelyServer = /\b(?:node|nodemon|python|python3|flask|uvicorn|vite|next|http-server|live-server|serve|pm2|npm\s+(?:start|run\s+dev|run\s+server))\b/i.test(cmd) ||
345
+ /\b(?:server|app|main|index|dev|watch)\.(?:js|ts|py|go)\b/i.test(cmd) ||
346
+ /\b(?:--watch|-w|watch)\b/i.test(cmd);
347
+ proc.stdout?.on('data', (data) => {
348
+ outputBuffers.push(data.toString());
349
+ });
350
+ proc.stderr?.on('data', (data) => {
351
+ outputBuffers.push(data.toString());
352
+ });
353
+ proc.on('close', (code) => {
354
+ if (!hasResolved) {
355
+ hasResolved = true;
356
+ clearTimeout(timer);
357
+ resolve({
358
+ exitCode: code ?? 0,
359
+ output: outputBuffers.join(''),
360
+ isBackgroundServer: false,
361
+ pid: proc.pid,
362
+ });
363
+ }
364
+ });
365
+ proc.on('error', (err) => {
366
+ if (!hasResolved) {
367
+ hasResolved = true;
368
+ clearTimeout(timer);
369
+ resolve({
370
+ exitCode: 1,
371
+ output: `Process Error: ${err.message}`,
372
+ isBackgroundServer: false,
373
+ });
374
+ }
375
+ });
376
+ const timer = setTimeout(() => {
377
+ if (hasResolved)
378
+ return;
379
+ const currentOutput = outputBuffers.join('');
380
+ const hasServerKeywords = /\b(?:listening|running|started|connected|ready|port|http:\/\/|https:\/\/)\b/i.test(currentOutput);
381
+ if (isLikelyServer || hasServerKeywords) {
382
+ hasResolved = true;
383
+ try {
384
+ proc.unref();
385
+ }
386
+ catch { }
387
+ resolve({
388
+ exitCode: 0,
389
+ output: (currentOutput || 'Server process started successfully.') + `\n[Process is running continuously in background (PID ${proc.pid})].`,
390
+ isBackgroundServer: true,
391
+ pid: proc.pid,
392
+ });
393
+ }
394
+ else {
395
+ setTimeout(() => {
396
+ if (!hasResolved) {
397
+ hasResolved = true;
398
+ try {
399
+ proc.unref();
400
+ }
401
+ catch { }
402
+ resolve({
403
+ exitCode: 0,
404
+ output: outputBuffers.join('') + `\n[Command took over ${maxWaitMs / 1000}s, continuing in background (PID ${proc.pid})].`,
405
+ isBackgroundServer: true,
406
+ pid: proc.pid,
407
+ });
408
+ }
409
+ }, Math.max(1000, maxWaitMs - initialWaitMs));
410
+ }
411
+ }, initialWaitMs);
412
+ });
413
+ }
414
+ //# sourceMappingURL=verifier.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verifier.js","sourceRoot":"","sources":["verifier.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"voiceEngine.d.ts","sourceRoot":"","sources":["voiceEngine.ts"],"names":[],"mappings":"AAgBA,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,CAcvE;AAED,MAAM,WAAW,YAAY;IACzB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CASvD;AAoHD;;;;GAIG;AACH,wBAAsB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAyDnF;AA0ND;;;;GAIG;AACH,wBAAsB,kBAAkB,CAAC,OAAO,CAAC,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAsC1F"}