ft-scout 9.0.6 → 9.0.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,7 +1,15 @@
1
+ import fs from 'fs';
2
+ import path from 'path';
3
+ import os from 'os';
1
4
  import { exec, spawn } from 'child_process';
2
5
  import { promisify } from 'util';
6
+ import { fileURLToPath } from 'url';
3
7
  import chalk from 'chalk';
4
8
  import { select, isCancel, spinner } from '@clack/prompts';
9
+ import { OpenAI } from 'openai';
10
+ import { isProOrHigher } from '../utils/auth.js';
11
+ const __filename = fileURLToPath(import.meta.url);
12
+ const __dirname = path.dirname(__filename);
5
13
  const execAsync = promisify(exec);
6
14
  export async function promptInteractionMode() {
7
15
  try {
@@ -35,14 +43,157 @@ export function cleanTextForSpeech(text) {
35
43
  .trim();
36
44
  }
37
45
  /**
38
- * Native Text-to-Speech (TTS) using OS speech synthesis engine.
46
+ * Packs raw 16-bit Mono PCM audio into a standard WAV container buffer.
47
+ */
48
+ function pcmToWavBuffer(pcmBuffer, sampleRate = 24000) {
49
+ const header = Buffer.alloc(44);
50
+ const numChannels = 1;
51
+ const bitsPerSample = 16;
52
+ const byteRate = sampleRate * numChannels * (bitsPerSample / 8);
53
+ const blockAlign = numChannels * (bitsPerSample / 8);
54
+ const dataLength = pcmBuffer.length;
55
+ header.write('RIFF', 0);
56
+ header.writeUInt32LE(36 + dataLength, 4);
57
+ header.write('WAVE', 8);
58
+ header.write('fmt ', 12);
59
+ header.writeUInt32LE(16, 16);
60
+ header.writeUInt16LE(1, 20); // PCM format
61
+ header.writeUInt16LE(numChannels, 22);
62
+ header.writeUInt32LE(sampleRate, 24);
63
+ header.writeUInt32LE(byteRate, 28);
64
+ header.writeUInt16LE(blockAlign, 32);
65
+ header.writeUInt16LE(bitsPerSample, 34);
66
+ header.write('data', 36);
67
+ header.writeUInt32LE(dataLength, 40);
68
+ return Buffer.concat([header, pcmBuffer]);
69
+ }
70
+ /**
71
+ * Synthesizes hyper-realistic human voice using ElevenLabs AI for PRO & ENTERPRISE tier users.
72
+ */
73
+ async function speakWithElevenLabs(text, options) {
74
+ const apiKey = process.env.ELEVENLABS_API_KEY;
75
+ if (!apiKey)
76
+ return false;
77
+ // Default: Adam (Authoritative & natural tech narrator: pNInz6obpgDQGcFmaJgB)
78
+ const voiceId = options?.voiceId || process.env.ELEVENLABS_VOICE_ID || 'pNInz6obpgDQGcFmaJgB';
79
+ try {
80
+ const url = `https://api.elevenlabs.io/v1/text-to-speech/${voiceId}?output_format=pcm_24000`;
81
+ const response = await fetch(url, {
82
+ method: 'POST',
83
+ headers: {
84
+ 'xi-api-key': apiKey,
85
+ 'Content-Type': 'application/json',
86
+ },
87
+ body: JSON.stringify({
88
+ text,
89
+ model_id: 'eleven_turbo_v2_5',
90
+ voice_settings: {
91
+ stability: 0.5,
92
+ similarity_boost: 0.8,
93
+ },
94
+ }),
95
+ });
96
+ if (!response.ok) {
97
+ return false;
98
+ }
99
+ const arrayBuffer = await response.arrayBuffer();
100
+ const pcmBuffer = Buffer.from(arrayBuffer);
101
+ if (pcmBuffer.length < 100)
102
+ return false;
103
+ const wavBuffer = pcmToWavBuffer(pcmBuffer, 24000);
104
+ const tempWav = path.join(os.tmpdir(), `scout_tts_${Date.now()}.wav`);
105
+ fs.writeFileSync(tempWav, wavBuffer);
106
+ const platform = process.platform;
107
+ if (platform === 'win32') {
108
+ const escapedPath = tempWav.replace(/'/g, "''");
109
+ const psScript = `$player = New-Object System.Media.SoundPlayer '${escapedPath}'; $player.PlaySync();`;
110
+ if (options?.async) {
111
+ const child = spawn('powershell', ['-NoProfile', '-ExecutionPolicy', 'Bypass', '-Command', `${psScript} Remove-Item -Force '${escapedPath}'`], {
112
+ detached: true,
113
+ stdio: 'ignore',
114
+ });
115
+ child.unref();
116
+ }
117
+ else {
118
+ await new Promise((resolve) => {
119
+ const child = spawn('powershell', ['-NoProfile', '-ExecutionPolicy', 'Bypass', '-Command', psScript]);
120
+ child.on('close', () => {
121
+ try {
122
+ if (fs.existsSync(tempWav))
123
+ fs.unlinkSync(tempWav);
124
+ }
125
+ catch { }
126
+ resolve();
127
+ });
128
+ child.on('error', () => {
129
+ try {
130
+ if (fs.existsSync(tempWav))
131
+ fs.unlinkSync(tempWav);
132
+ }
133
+ catch { }
134
+ resolve();
135
+ });
136
+ });
137
+ }
138
+ }
139
+ else if (platform === 'darwin') {
140
+ if (options?.async) {
141
+ exec(`afplay "${tempWav}" && rm -f "${tempWav}"`);
142
+ }
143
+ else {
144
+ await execAsync(`afplay "${tempWav}"`);
145
+ try {
146
+ if (fs.existsSync(tempWav))
147
+ fs.unlinkSync(tempWav);
148
+ }
149
+ catch { }
150
+ }
151
+ }
152
+ else {
153
+ // Linux
154
+ if (options?.async) {
155
+ exec(`(aplay "${tempWav}" || paplay "${tempWav}") && rm -f "${tempWav}"`);
156
+ }
157
+ else {
158
+ await execAsync(`aplay "${tempWav}" || paplay "${tempWav}"`);
159
+ try {
160
+ if (fs.existsSync(tempWav))
161
+ fs.unlinkSync(tempWav);
162
+ }
163
+ catch { }
164
+ }
165
+ }
166
+ return true;
167
+ }
168
+ catch {
169
+ return false;
170
+ }
171
+ }
172
+ /**
173
+ * Text-to-Speech (TTS) Engine:
174
+ * - PRO / ENTERPRISE: Uses ElevenLabs AI for hyper-realistic human voice (covers API cost).
175
+ * - FREE TIER / OFFLINE: Uses native OS TTS (SAPI5 on Windows, say on macOS, spd-say on Linux) with zero API cost.
39
176
  */
40
177
  export async function speakText(text, options) {
41
178
  const cleanStr = cleanTextForSpeech(text);
42
179
  if (!cleanStr)
43
180
  return;
44
- const platform = process.platform;
45
181
  const truncatedText = cleanStr.length > 500 ? cleanStr.slice(0, 500) + '...' : cleanStr;
182
+ // 🎙️ PRO/ENTERPRISE TIER ROUTING: ElevenLabs Human Voice
183
+ const isPro = isProOrHigher(options?.tierOverride);
184
+ const elevenKey = process.env.ELEVENLABS_API_KEY;
185
+ if (isPro && elevenKey) {
186
+ try {
187
+ const spoken = await speakWithElevenLabs(truncatedText, options);
188
+ if (spoken)
189
+ return;
190
+ }
191
+ catch {
192
+ // Fall back to native OS TTS if quota or network issue
193
+ }
194
+ }
195
+ // 🤖 FREE TIER / OFFLINE FALLBACK: Native SAPI5 / say / spd-say
196
+ const platform = process.platform;
46
197
  try {
47
198
  if (platform === 'win32') {
48
199
  const escaped = truncatedText.replace(/"/g, '`"').replace(/'/g, "''");
@@ -86,12 +237,142 @@ export async function speakText(text, options) {
86
237
  }
87
238
  }
88
239
  /**
89
- * Native Speech-to-Text (STT) directly inside the terminal (no browser webpage).
240
+ * Ensures the native Windows audio recorder executable is compiled and available.
90
241
  */
91
- export function listenSpeechToText(options) {
92
- const timeoutSecs = Math.max(5, Math.round((options?.timeoutMs || 15000) / 1000));
93
- const s = spinner();
94
- s.start(chalk.cyan(` Listening to your microphone in terminal (${timeoutSecs}s timeout)... Speak now!`));
242
+ async function ensureWindowsAudioRecorder() {
243
+ if (process.platform !== 'win32')
244
+ return null;
245
+ const candidateExes = [
246
+ path.join(__dirname, 'scout_audio_recorder.exe'),
247
+ path.join(os.tmpdir(), 'scout_audio_recorder.exe'),
248
+ ];
249
+ const csSourceCandidates = [
250
+ path.join(__dirname, 'scoutAudioRecorder.cs'),
251
+ path.join(process.cwd(), 'bin', 'src', 'engine', 'scoutAudioRecorder.cs'),
252
+ ];
253
+ const csSource = csSourceCandidates.find((p) => fs.existsSync(p));
254
+ const cscExe = 'C:\\Windows\\Microsoft.NET\\Framework64\\v4.0.30319\\csc.exe';
255
+ for (const exePath of candidateExes) {
256
+ if (fs.existsSync(exePath)) {
257
+ if (csSource && fs.existsSync(cscExe)) {
258
+ try {
259
+ const srcMtime = fs.statSync(csSource).mtimeMs;
260
+ const exeMtime = fs.statSync(exePath).mtimeMs;
261
+ if (srcMtime > exeMtime) {
262
+ await execAsync(`"${cscExe}" /nologo /optimize /t:exe /out:"${exePath}" "${csSource}"`);
263
+ }
264
+ }
265
+ catch { }
266
+ }
267
+ return exePath;
268
+ }
269
+ }
270
+ if (csSource && fs.existsSync(cscExe)) {
271
+ const targetExe = candidateExes[0] ?? path.join(__dirname, 'scout_audio_recorder.exe');
272
+ try {
273
+ await execAsync(`"${cscExe}" /nologo /optimize /t:exe /out:"${targetExe}" "${csSource}"`);
274
+ if (fs.existsSync(targetExe)) {
275
+ return targetExe;
276
+ }
277
+ }
278
+ catch {
279
+ // Try in temp dir if targetExe write failed
280
+ const tempExe = candidateExes[1] ?? path.join(os.tmpdir(), 'scout_audio_recorder.exe');
281
+ try {
282
+ await execAsync(`"${cscExe}" /nologo /optimize /t:exe /out:"${tempExe}" "${csSource}"`);
283
+ if (fs.existsSync(tempExe)) {
284
+ return tempExe;
285
+ }
286
+ }
287
+ catch { }
288
+ }
289
+ }
290
+ return null;
291
+ }
292
+ /**
293
+ * Records audio using the native audio recorder binary with automatic Voice Activity Detection (VAD).
294
+ */
295
+ async function recordAudioToWav(recorderExe, wavPath, maxDurationSecs, silenceCutoffMs, s) {
296
+ return new Promise((resolve) => {
297
+ const child = spawn(recorderExe, [wavPath, String(maxDurationSecs), String(silenceCutoffMs)], {
298
+ windowsHide: true,
299
+ });
300
+ child.stdout?.on('data', (data) => {
301
+ const str = data.toString();
302
+ if (str.includes('SPEECH_DETECTED')) {
303
+ s.message(chalk.cyan(' Voice detected! Listening... (will auto-submit when you stop speaking)'));
304
+ }
305
+ });
306
+ child.on('close', (code) => {
307
+ if (code === 0 && fs.existsSync(wavPath)) {
308
+ const stat = fs.statSync(wavPath);
309
+ resolve(stat.size > 1000);
310
+ }
311
+ else {
312
+ resolve(false);
313
+ }
314
+ });
315
+ child.on('error', () => {
316
+ resolve(false);
317
+ });
318
+ });
319
+ }
320
+ /**
321
+ * Transcribes recorded audio using Groq Whisper (lightning fast) or OpenAI Whisper (fallback).
322
+ */
323
+ async function transcribeAudioWithWhisper(wavPath) {
324
+ const groqKey = process.env.GROQ_API_KEY;
325
+ const openaiKey = process.env.OPENAI_API_KEY;
326
+ const technicalPrompt = 'Developer terminal command: open chrome, create file, run test, fix bug, inspect git diff, build project, start server, deploy';
327
+ // 1. Try Groq Whisper (ultra-fast, ~250ms)
328
+ if (groqKey) {
329
+ try {
330
+ const groqClient = new OpenAI({
331
+ apiKey: groqKey,
332
+ baseURL: 'https://api.groq.com/openai/v1',
333
+ timeout: 12000,
334
+ });
335
+ const transcription = await groqClient.audio.transcriptions.create({
336
+ file: fs.createReadStream(wavPath),
337
+ model: 'whisper-large-v3-turbo',
338
+ prompt: technicalPrompt,
339
+ temperature: 0.0,
340
+ });
341
+ if (transcription && transcription.text && transcription.text.trim()) {
342
+ return transcription.text.trim();
343
+ }
344
+ }
345
+ catch {
346
+ // Groq Whisper failed or timed out, attempt OpenAI fallback below
347
+ }
348
+ }
349
+ // 2. Try OpenAI Whisper (whisper-1)
350
+ if (openaiKey) {
351
+ try {
352
+ const openaiClient = new OpenAI({
353
+ apiKey: openaiKey,
354
+ timeout: 15000,
355
+ });
356
+ const transcription = await openaiClient.audio.transcriptions.create({
357
+ file: fs.createReadStream(wavPath),
358
+ model: 'whisper-1',
359
+ prompt: technicalPrompt,
360
+ temperature: 0.0,
361
+ });
362
+ if (transcription && transcription.text && transcription.text.trim()) {
363
+ return transcription.text.trim();
364
+ }
365
+ }
366
+ catch {
367
+ // OpenAI Whisper failed
368
+ }
369
+ }
370
+ return null;
371
+ }
372
+ /**
373
+ * Legacy offline fallback using Windows SAPI System.Speech.
374
+ */
375
+ function listenSpeechToTextLegacy(timeoutSecs, s) {
95
376
  const platform = process.platform;
96
377
  if (platform === 'win32') {
97
378
  return new Promise((resolve) => {
@@ -129,12 +410,7 @@ try {
129
410
  break;
130
411
  }
131
412
  }
132
- if (transcript) {
133
- resolve(transcript);
134
- }
135
- else {
136
- resolve('');
137
- }
413
+ resolve(transcript || '');
138
414
  });
139
415
  child.on('error', () => {
140
416
  s.stop(chalk.yellow('Terminal microphone listener ended.'));
@@ -151,4 +427,48 @@ try {
151
427
  });
152
428
  }
153
429
  }
430
+ /**
431
+ * Native Speech-to-Text (STT) directly inside the terminal.
432
+ * Automatically utilizes neural Whisper (Groq/OpenAI) for 99.9% accuracy on tech commands,
433
+ * with automatic Voice Activity Detection (VAD) and graceful legacy fallback.
434
+ */
435
+ export async function listenSpeechToText(options) {
436
+ const timeoutSecs = Math.max(10, Math.min(60, Math.round((options?.timeoutMs || 20000) / 1000)));
437
+ const silenceCutoffMs = 2500; // 2.5 seconds natural pause debounce
438
+ const s = spinner();
439
+ s.start(chalk.cyan(` Listening (${timeoutSecs}s max)...`));
440
+ const groqKey = process.env.GROQ_API_KEY;
441
+ const openaiKey = process.env.OPENAI_API_KEY;
442
+ const hasWhisperKey = Boolean(groqKey || openaiKey);
443
+ if (process.platform === 'win32' && hasWhisperKey) {
444
+ const recorderExe = await ensureWindowsAudioRecorder();
445
+ if (recorderExe) {
446
+ const tempWav = path.join(os.tmpdir(), `scout_mic_${Date.now()}.wav`);
447
+ try {
448
+ const recorded = await recordAudioToWav(recorderExe, tempWav, timeoutSecs, silenceCutoffMs, s);
449
+ if (recorded) {
450
+ s.message(chalk.magenta(' Transcribing with Neural Whisper STT...'));
451
+ const transcript = await transcribeAudioWithWhisper(tempWav);
452
+ if (transcript) {
453
+ s.stop(chalk.green(' Speech recognized via Neural Whisper.'));
454
+ return transcript;
455
+ }
456
+ }
457
+ }
458
+ catch {
459
+ // Fall through to legacy
460
+ }
461
+ finally {
462
+ if (fs.existsSync(tempWav)) {
463
+ try {
464
+ fs.unlinkSync(tempWav);
465
+ }
466
+ catch { }
467
+ }
468
+ }
469
+ }
470
+ }
471
+ // Fallback to legacy System.Speech if no recorder or offline
472
+ return listenSpeechToTextLegacy(timeoutSecs, s);
473
+ }
154
474
  //# sourceMappingURL=voiceEngine.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"voiceEngine.js","sourceRoot":"","sources":["voiceEngine.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"voiceEngine.js","sourceRoot":"","sources":["voiceEngine.ts"],"names":[],"mappings":"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"}
package/bin/src/index.js CHANGED
@@ -33,13 +33,13 @@ program
33
33
  .name('scout')
34
34
  .alias('ft')
35
35
  .description('FrontTerrain — The Onboarding Co-Pilot for New Codebases')
36
- .version('9.0.6');
36
+ .version('9.0.7');
37
37
  // Header UI on execution with FrontTerrain proprietary logo & version auto-checker
38
38
  program.hook('preAction', async (_thisCommand, actionCommand) => {
39
- intro(renderBranding('9.0.6'));
39
+ intro(renderBranding('9.0.7'));
40
40
  const cmdName = actionCommand ? actionCommand.name() : '';
41
41
  if (cmdName !== 'upgrade') {
42
- await checkForUpdates('9.0.6');
42
+ await checkForUpdates('9.0.7');
43
43
  }
44
44
  // Auth Guard: enforce authentication for all commands except login, signup, upgrade, help, dashboard, auth, status, plan
45
45
  const EXEMPT_COMMANDS = ['login', 'signin', 'signup', 'register', 'upgrade', 'help', 'dashboard', 'web-ui', 'gui', 'auth', 'status', 'quota', 'usage', 'credits', 'plan', 'pricing', 'subscribe'];
@@ -236,7 +236,7 @@ program
236
236
  .command('upgrade')
237
237
  .description('Check for updates and auto-upgrade Scout to the latest version')
238
238
  .action(async () => {
239
- await checkForUpdates('9.0.6', true);
239
+ await checkForUpdates('9.0.7', true);
240
240
  outro(chalk.cyan('Upgrade check complete.'));
241
241
  });
242
242
  program
@@ -1,5 +1,5 @@
1
1
  import chalk from 'chalk';
2
- export function renderBranding(version = '9.0.6') {
2
+ export function renderBranding(version = '9.0.7') {
3
3
  const logo = chalk.cyan.bold(' ███████╗████████╗') + ' ' + chalk.cyan.bold('███████╗ ██████╗ ██████╗ ██╗ ██╗████████╗') + '\n' +
4
4
  chalk.cyan.bold(' ██╔════╝╚══██╔══╝') + ' ' + chalk.cyan.bold('██╔════╝ ██╔════╝██╔═══██╗ ██║ ██║╚══██╔══╝') + '\n' +
5
5
  chalk.cyan.bold(' █████╗ ██║ ') + ' ' + chalk.cyan.bold(' ███████╗ ██║ ██║ ██║ ██║ ██║ ██║ ') + '\n' +
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ft-scout",
3
- "version": "9.0.6",
3
+ "version": "9.0.7",
4
4
  "type": "module",
5
5
  "description": "FrontTerrain — The Onboarding Co-Pilot for New Codebases",
6
6
  "main": "index.js",
package/web/app.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /* ==========================================================================
2
- FrontTerrain Scout — Multi-Page Application Engine v9.0.6
2
+ FrontTerrain Scout — Multi-Page Application Engine v9.0.7
3
3
  ========================================================================== */
4
4
 
5
5
  const FIREBASE_CONFIG = {
@@ -1037,7 +1037,7 @@ function initTerminalSimulator() {
1037
1037
  `;
1038
1038
  } else if (lower.includes('status')) {
1039
1039
  response.innerHTML = `
1040
- <span class="term-green">✔ Scout CLI Engine: v9.0.6 Online</span><br>
1040
+ <span class="term-green">✔ Scout CLI Engine: v9.0.7 Online</span><br>
1041
1041
  ↳ User: <strong>${escapeHtml(state.user ? state.user.name : 'Guest Session')}</strong><br>
1042
1042
  ↳ Active Subscription: <strong>${escapeHtml(TIER_DETAILS[state.currentTier].name)}</strong><br>
1043
1043
  ↳ Credit Quota: <strong>${state.byokEnabled ? 'BYOK Mode (Unlimited)' : `${state.creditsUsed} / ${state.creditsTotal} Credits Used`}</strong><br>
package/web/styles.css CHANGED
@@ -1,5 +1,5 @@
1
1
  /* ==========================================================================
2
- FrontTerrain Scout — Design System & Visual Engine v9.0.6
2
+ FrontTerrain Scout — Design System & Visual Engine v9.0.7
3
3
  Inspired by HappyRobot, Linear.app & Vercel aesthetics
4
4
  ========================================================================== */
5
5
 
@@ -1063,7 +1063,7 @@ h1, h2, h3, h4, h5, h6 {
1063
1063
  .footer-links a:hover { color: var(--hr-rust); }
1064
1064
 
1065
1065
  /* ==========================================================================
1066
- Visual Perception & Automation Engine v9.0.6
1066
+ Visual Perception & Automation Engine v9.0.7
1067
1067
  ========================================================================== */
1068
1068
  .vision-banner {
1069
1069
  margin-bottom: 28px;