sona-ai-voice 0.2.3 → 0.2.6

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 (61) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +2 -0
  3. package/package.json +8 -4
  4. package/packages/cli/dist/audio-adapter.d.ts +60 -0
  5. package/packages/cli/dist/audio-adapter.d.ts.map +1 -0
  6. package/packages/cli/dist/audio-adapter.js +198 -0
  7. package/packages/cli/dist/audio-adapter.js.map +1 -0
  8. package/packages/cli/dist/audio-capture.d.ts +1 -0
  9. package/packages/cli/dist/audio-capture.d.ts.map +1 -1
  10. package/packages/cli/dist/audio-capture.js +42 -34
  11. package/packages/cli/dist/audio-capture.js.map +1 -1
  12. package/packages/cli/dist/audio-playback.d.ts +1 -0
  13. package/packages/cli/dist/audio-playback.d.ts.map +1 -1
  14. package/packages/cli/dist/audio-playback.js +88 -62
  15. package/packages/cli/dist/audio-playback.js.map +1 -1
  16. package/packages/cli/dist/audio-utils.d.ts +2 -0
  17. package/packages/cli/dist/audio-utils.d.ts.map +1 -1
  18. package/packages/cli/dist/audio-utils.js +72 -52
  19. package/packages/cli/dist/audio-utils.js.map +1 -1
  20. package/packages/cli/dist/echo-canceller.js +26 -49
  21. package/packages/cli/dist/environment-detector.d.ts +59 -0
  22. package/packages/cli/dist/environment-detector.d.ts.map +1 -0
  23. package/packages/cli/dist/environment-detector.js +505 -0
  24. package/packages/cli/dist/environment-detector.js.map +1 -0
  25. package/packages/cli/dist/gui-server.d.ts.map +1 -1
  26. package/packages/cli/dist/gui-server.js +27 -30
  27. package/packages/cli/dist/gui-server.js.map +1 -1
  28. package/packages/cli/dist/index.js +14 -18
  29. package/packages/cli/dist/particle-ui.js +46 -88
  30. package/packages/cli/dist/setup.d.ts +1 -1
  31. package/packages/cli/dist/setup.d.ts.map +1 -1
  32. package/packages/cli/dist/setup.js +62 -47
  33. package/packages/cli/dist/setup.js.map +1 -1
  34. package/packages/cli/dist/tools/codebase-analyzer.js +24 -43
  35. package/packages/cli/dist/tools/codebase-context.js +29 -54
  36. package/packages/cli/dist/tools/tool-executor.d.ts +5 -0
  37. package/packages/cli/dist/tools/tool-executor.d.ts.map +1 -1
  38. package/packages/cli/dist/tools/tool-executor.js +72 -48
  39. package/packages/cli/dist/tools/tool-executor.js.map +1 -1
  40. package/packages/cli/dist/tools/web-search.js +14 -30
  41. package/packages/cli/dist/voice-conversation.d.ts +5 -0
  42. package/packages/cli/dist/voice-conversation.d.ts.map +1 -1
  43. package/packages/cli/dist/voice-conversation.js +111 -112
  44. package/packages/cli/dist/voice-conversation.js.map +1 -1
  45. package/packages/ide-bridge/README.md +88 -0
  46. package/packages/realtime/dist/index.js +1 -4
  47. package/packages/realtime/dist/session.d.ts +1 -0
  48. package/packages/realtime/dist/session.d.ts.map +1 -1
  49. package/packages/realtime/dist/session.js +28 -54
  50. package/packages/realtime/dist/session.js.map +1 -1
  51. package/packages/shared/dist/config.js +36 -40
  52. package/packages/shared/dist/constants.js +16 -19
  53. package/packages/shared/dist/index.js +1 -4
  54. package/packages/shared/dist/types.js +7 -11
  55. package/packages/audio/package.json +0 -16
  56. package/packages/cache/package.json +0 -22
  57. package/packages/cli/package.json +0 -31
  58. package/packages/indexer/package.json +0 -22
  59. package/packages/realtime/package.json +0 -22
  60. package/packages/shared/package.json +0 -22
  61. package/packages/terminal/package.json +0 -19
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Zeradam Fantaye
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -2,6 +2,8 @@
2
2
 
3
3
  Sona is an intelligent CLI AI agent that i am working on at ShadowLabs. I am building sona to be a great companion with a large context window and do multiple useful tasks with in the CLI using a highly effective conversational user interface.
4
4
 
5
+ - Visit our website for future updates: [trysona.dev](https://trysona.dev)
6
+
5
7
  ## Description
6
8
 
7
9
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sona-ai-voice",
3
- "version": "0.2.3",
3
+ "version": "0.2.6",
4
4
  "description": "Voice-to-voice AI CLI companion powered by OpenAI Realtime API",
5
5
  "author": "zerish",
6
6
  "license": "MIT",
@@ -21,13 +21,14 @@
21
21
  "sona": "packages/cli/dist/index.js"
22
22
  },
23
23
  "files": [
24
+ "README.md",
24
25
  "packages/*/dist/**/*",
25
- "packages/*/package.json",
26
26
  "packages/cli/src/gui/**/*",
27
27
  "bin/**/*"
28
28
  ],
29
29
  "workspaces": [
30
- "packages/*"
30
+ "packages/*",
31
+ "vscode-extension"
31
32
  ],
32
33
  "scripts": {
33
34
  "build": "bash scripts/build-for-publish.sh",
@@ -38,7 +39,10 @@
38
39
  "lint": "eslint packages --ext .ts,.tsx",
39
40
  "format": "prettier --write \"packages/**/*.{ts,tsx,json,md}\"",
40
41
  "cache:clear": "rm -rf node_modules/.cache .sona-cache",
41
- "prepublishOnly": "npm run build"
42
+ "prepack": "node scripts/prepack.js",
43
+ "postpack": "node scripts/postpack.js",
44
+ "prepublishOnly": "npm run build",
45
+ "postinstall": "node scripts/postinstall.js"
42
46
  },
43
47
  "dependencies": {
44
48
  "chalk": "^4.1.2",
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Audio Adapter
3
+ * Switches between native CLI audio and IDE bridge based on availability
4
+ *
5
+ * CRITICAL: On Windows/Linux, CLI cannot access audio directly.
6
+ * Must use IDE bridge (VS Code extension) for audio to work.
7
+ */
8
+ import { EventEmitter } from 'events';
9
+ export interface AudioAdapterConfig {
10
+ sampleRate: number;
11
+ channels: number;
12
+ bitDepth: number;
13
+ }
14
+ export interface AudioAdapterEvents {
15
+ 'data': (buffer: Buffer) => void;
16
+ 'error': (error: Error) => void;
17
+ 'started': () => void;
18
+ 'stopped': () => void;
19
+ 'finished': () => void;
20
+ }
21
+ /**
22
+ * Audio adapter that automatically chooses the best audio method:
23
+ *
24
+ * Windows/Linux:
25
+ * 1. IDE Bridge (VS Code extension) - REQUIRED, only option
26
+ * 2. Error if bridge not available
27
+ *
28
+ * macOS:
29
+ * 1. IDE Bridge (VS Code extension) - Preferred
30
+ * 2. Native CLI audio (sox/ffmpeg) - Fallback
31
+ */
32
+ export declare class AudioAdapter extends EventEmitter {
33
+ private mode;
34
+ private nativeCapture;
35
+ private nativePlayback;
36
+ private bridgeClient;
37
+ private config;
38
+ private env;
39
+ constructor(config: AudioAdapterConfig);
40
+ /**
41
+ * Initialize audio adapter - detects best available method
42
+ *
43
+ * IMPORTANT: On Windows/Linux, CLI cannot access audio directly.
44
+ * Must use IDE bridge (VS Code extension) for audio to work.
45
+ */
46
+ initialize(): Promise<void>;
47
+ private checkBridgeConnection;
48
+ private setupNativeMode;
49
+ private setupBridgeMode;
50
+ start(): void;
51
+ stop(): void;
52
+ pause(): void;
53
+ resume(): void;
54
+ play(buffer: Buffer): void;
55
+ finishPlayback(): void;
56
+ get recording(): boolean;
57
+ get playing(): boolean;
58
+ get currentMode(): string;
59
+ }
60
+ //# sourceMappingURL=audio-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audio-adapter.d.ts","sourceRoot":"","sources":["../src/audio-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAQtC,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IAChC,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,UAAU,EAAE,MAAM,IAAI,CAAC;CACxB;AAED;;;;;;;;;;GAUG;AACH,qBAAa,YAAa,SAAQ,YAAY;IAC5C,OAAO,CAAC,IAAI,CAAiC;IAC7C,OAAO,CAAC,aAAa,CAA6B;IAClD,OAAO,CAAC,cAAc,CAA8B;IACpD,OAAO,CAAC,YAAY,CAA6B;IACjD,OAAO,CAAC,MAAM,CAAqB;IACnC,OAAO,CAAC,GAAG,CAAuB;gBAEtB,MAAM,EAAE,kBAAkB;IAKtC;;;;;OAKG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;YA0DnB,qBAAqB;IA0BnC,OAAO,CAAC,eAAe;YAqBT,eAAe;IAsC7B,KAAK,IAAI,IAAI;IAUb,IAAI,IAAI,IAAI;IAUZ,KAAK,IAAI,IAAI;IAMb,MAAM,IAAI,IAAI;IAMd,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAQ1B,cAAc,IAAI,IAAI;IAOtB,IAAI,SAAS,IAAI,OAAO,CAKvB;IAED,IAAI,OAAO,IAAI,OAAO,CAKrB;IAED,IAAI,WAAW,IAAI,MAAM,CAExB;CACF"}
@@ -0,0 +1,198 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.AudioAdapter = void 0;
5
+ const events_1 = require("events");
6
+ const audio_capture_1 = require("./audio-capture");
7
+ const audio_playback_1 = require("./audio-playback");
8
+ const index_js_1 = require("../../ide-bridge/dist/index.js");
9
+ const environment_detector_1 = require("./environment-detector");
10
+ const audio_utils_1 = require("./audio-utils");
11
+
12
+ class AudioAdapter extends events_1.EventEmitter {
13
+ mode = 'native';
14
+ nativeCapture = null;
15
+ nativePlayback = null;
16
+ bridgeClient = null;
17
+ config;
18
+ env = (0, environment_detector_1.detectEnvironment)();
19
+ constructor(config) {
20
+ super();
21
+ this.config = config;
22
+ }
23
+
24
+ async initialize() {
25
+ const isWindows = this.env.isWindowsNative || this.env.isGitBash;
26
+ const isLinux = this.env.environment === 'linux-native' || this.env.isWSL;
27
+ const isMacOS = this.env.environment === 'darwin-native';
28
+
29
+ if (isWindows || isLinux) {
30
+ const bridgeAvailable = await this.checkBridgeConnection(3848);
31
+ if (bridgeAvailable) {
32
+ this.mode = 'bridge';
33
+ this.bridgeClient = new index_js_1.BridgeClient(3848);
34
+ await this.setupBridgeMode();
35
+ return;
36
+ }
37
+
38
+ throw new Error(`Audio not available from CLI on ${isWindows ? 'Windows' : 'Linux'}.\n` +
39
+ `Please install and activate the Sona VS Code extension:\n` +
40
+ `1. Install: code --install-extension sona-voice-assistant\n` +
41
+ `2. Activate: Press Cmd/Ctrl+Shift+P → "Sona: Start Voice Assistant"\n` +
42
+ `3. Then run: sona talk\n\n` +
43
+ `The extension handles audio using IDE permissions, which work on Windows/Linux.`);
44
+ }
45
+
46
+ if (isMacOS) {
47
+ const bridgeAvailable = await this.checkBridgeConnection(3848);
48
+ if (bridgeAvailable) {
49
+ this.mode = 'bridge';
50
+ this.bridgeClient = new index_js_1.BridgeClient(3848);
51
+ await this.setupBridgeMode();
52
+ return;
53
+ }
54
+
55
+ const audioCommands = (0, audio_utils_1.detectAudioCommands)();
56
+ if (audioCommands.available) {
57
+ this.mode = 'native';
58
+ this.setupNativeMode();
59
+ return;
60
+ }
61
+
62
+ throw new Error(`Audio tools not found on macOS.\n` +
63
+ `Install sox: brew install sox\n` +
64
+ `Or use the VS Code extension for better cross-platform support.`);
65
+ }
66
+
67
+ throw new Error(`Unsupported platform: ${process.platform}`);
68
+ }
69
+ async checkBridgeConnection(port) {
70
+ return new Promise((resolve) => {
71
+ const client = new index_js_1.BridgeClient(port);
72
+ const timeout = setTimeout(() => {
73
+ client.disconnect();
74
+ resolve(false);
75
+ }, 1000);
76
+ client.on('connected', () => {
77
+ clearTimeout(timeout);
78
+ client.disconnect();
79
+ resolve(true);
80
+ });
81
+ client.on('error', () => {
82
+ clearTimeout(timeout);
83
+ resolve(false);
84
+ });
85
+ client.connect().catch(() => {
86
+ clearTimeout(timeout);
87
+ resolve(false);
88
+ });
89
+ });
90
+ }
91
+ setupNativeMode() {
92
+ this.nativeCapture = new audio_capture_1.AudioCapture(this.config);
93
+ this.nativePlayback = new audio_playback_1.AudioPlayback(this.config);
94
+ this.nativeCapture.on('data', (buffer) => {
95
+ this.emit('data', buffer);
96
+ });
97
+ this.nativeCapture.on('error', (error) => {
98
+ this.emit('error', error);
99
+ });
100
+ this.nativePlayback.on('error', (error) => {
101
+ this.emit('error', error);
102
+ });
103
+ this.nativePlayback.on('finished', () => {
104
+ this.emit('finished');
105
+ });
106
+ }
107
+ async setupBridgeMode() {
108
+ if (!this.bridgeClient)
109
+ return;
110
+ await this.bridgeClient.connect();
111
+ this.bridgeClient.on('audio-data', (buffer) => {
112
+ this.emit('data', buffer);
113
+ });
114
+ this.bridgeClient.on('error', (error) => {
115
+ this.emit('error', error);
116
+ });
117
+ this.bridgeClient.on('disconnected', () => {
118
+
119
+ const isWindows = this.env.isWindowsNative || this.env.isGitBash;
120
+ const isLinux = this.env.environment === 'linux-native' || this.env.isWSL;
121
+ if (isWindows || isLinux) {
122
+ this.emit('error', new Error('IDE bridge disconnected. Audio unavailable on Windows/Linux without bridge.\n' +
123
+ 'Please restart the VS Code extension: Cmd/Ctrl+Shift+P → "Sona: Start Voice Assistant"'));
124
+ return;
125
+ }
126
+
127
+ const audioCommands = (0, audio_utils_1.detectAudioCommands)();
128
+ if (audioCommands.available) {
129
+ this.mode = 'native';
130
+ this.setupNativeMode();
131
+ this.emit('error', new Error('Bridge disconnected, falling back to native audio'));
132
+ }
133
+ else {
134
+ this.emit('error', new Error('Bridge disconnected and no native audio available'));
135
+ }
136
+ });
137
+ }
138
+ start() {
139
+ if (this.mode === 'bridge' && this.bridgeClient) {
140
+ this.bridgeClient.sendStartAudio();
141
+ this.emit('started');
142
+ }
143
+ else if (this.mode === 'native' && this.nativeCapture) {
144
+ this.nativeCapture.start();
145
+ this.emit('started');
146
+ }
147
+ }
148
+ stop() {
149
+ if (this.mode === 'bridge' && this.bridgeClient) {
150
+ this.bridgeClient.sendStopAudio();
151
+ this.emit('stopped');
152
+ }
153
+ else if (this.mode === 'native' && this.nativeCapture) {
154
+ this.nativeCapture.stop();
155
+ this.emit('stopped');
156
+ }
157
+ }
158
+ pause() {
159
+ if (this.mode === 'native' && this.nativeCapture) {
160
+ this.nativeCapture.pause();
161
+ }
162
+ }
163
+ resume() {
164
+ if (this.mode === 'native' && this.nativeCapture) {
165
+ this.nativeCapture.resume();
166
+ }
167
+ }
168
+ play(buffer) {
169
+ if (this.mode === 'bridge' && this.bridgeClient) {
170
+ this.bridgeClient.sendAudioData(buffer);
171
+ }
172
+ else if (this.mode === 'native' && this.nativePlayback) {
173
+ this.nativePlayback.play(buffer);
174
+ }
175
+ }
176
+ finishPlayback() {
177
+ if (this.mode === 'native' && this.nativePlayback) {
178
+ this.nativePlayback.finishPlayback();
179
+ }
180
+
181
+ }
182
+ get recording() {
183
+ if (this.mode === 'bridge') {
184
+ return this.bridgeClient?.isConnected ?? false;
185
+ }
186
+ return this.nativeCapture?.recording ?? false;
187
+ }
188
+ get playing() {
189
+ if (this.mode === 'native' && this.nativePlayback) {
190
+ return this.nativePlayback.playing;
191
+ }
192
+ return false;
193
+ }
194
+ get currentMode() {
195
+ return this.mode;
196
+ }
197
+ }
198
+ exports.AudioAdapter = AudioAdapter;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audio-adapter.js","sourceRoot":"","sources":["../src/audio-adapter.ts"],"names":[],"mappings":"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"}
@@ -19,6 +19,7 @@ export declare class AudioCapture extends EventEmitter {
19
19
  private isRecording;
20
20
  private isPaused;
21
21
  private config;
22
+ private env;
22
23
  constructor(config: AudioCaptureConfig);
23
24
  start(): void;
24
25
  private spawnMic;
@@ -1 +1 @@
1
- {"version":3,"file":"audio-capture.d.ts","sourceRoot":"","sources":["../src/audio-capture.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAEtC,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IAChC,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,SAAS,EAAE,MAAM,IAAI,CAAC;CACvB;AAED,qBAAa,YAAa,SAAQ,YAAY;IAC5C,OAAO,CAAC,UAAU,CAA6B;IAC/C,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,MAAM,CAAqB;gBAEvB,MAAM,EAAE,kBAAkB;IAKtC,KAAK,IAAI,IAAI;IAKb,OAAO,CAAC,QAAQ;IAiEhB;;;OAGG;IACH,KAAK,IAAI,IAAI;IAWb;;OAEG;IACH,MAAM,IAAI,IAAI;IAQd,IAAI,IAAI,IAAI;IAYZ,IAAI,SAAS,IAAI,OAAO,CAEvB;IAED,IAAI,MAAM,IAAI,OAAO,CAEpB;IAEQ,EAAE,CAAC,CAAC,SAAS,MAAM,kBAAkB,EAC5C,KAAK,EAAE,CAAC,EACR,QAAQ,EAAE,kBAAkB,CAAC,CAAC,CAAC,GAC9B,IAAI;IAIE,IAAI,CAAC,CAAC,SAAS,MAAM,kBAAkB,EAC9C,KAAK,EAAE,CAAC,EACR,GAAG,IAAI,EAAE,UAAU,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,GACzC,OAAO;CAGX"}
1
+ {"version":3,"file":"audio-capture.d.ts","sourceRoot":"","sources":["../src/audio-capture.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAItC,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IAChC,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,SAAS,EAAE,MAAM,IAAI,CAAC;CACvB;AAED,qBAAa,YAAa,SAAQ,YAAY;IAC5C,OAAO,CAAC,UAAU,CAA6B;IAC/C,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,MAAM,CAAqB;IACnC,OAAO,CAAC,GAAG,CAAuB;gBAEtB,MAAM,EAAE,kBAAkB;IAKtC,KAAK,IAAI,IAAI;IAKb,OAAO,CAAC,QAAQ;IAmFhB;;;OAGG;IACH,KAAK,IAAI,IAAI;IAWb;;OAEG;IACH,MAAM,IAAI,IAAI;IAQd,IAAI,IAAI,IAAI;IAYZ,IAAI,SAAS,IAAI,OAAO,CAEvB;IAED,IAAI,MAAM,IAAI,OAAO,CAEpB;IAEQ,EAAE,CAAC,CAAC,SAAS,MAAM,kBAAkB,EAC5C,KAAK,EAAE,CAAC,EACR,QAAQ,EAAE,kBAAkB,CAAC,CAAC,CAAC,GAC9B,IAAI;IAIE,IAAI,CAAC,CAAC,SAAS,MAAM,kBAAkB,EAC9C,KAAK,EAAE,CAAC,EACR,GAAG,IAAI,EAAE,UAAU,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,GACzC,OAAO;CAGX"}
@@ -1,17 +1,17 @@
1
1
  "use strict";
2
- /**
3
- * Audio Capture Module
4
- * Mic capture with pause/resume for echo cancellation
5
- */
2
+
6
3
  Object.defineProperty(exports, "__esModule", { value: true });
7
4
  exports.AudioCapture = void 0;
8
5
  const child_process_1 = require("child_process");
9
6
  const events_1 = require("events");
7
+ const environment_detector_1 = require("./environment-detector");
8
+ const audio_utils_1 = require("./audio-utils");
10
9
  class AudioCapture extends events_1.EventEmitter {
11
10
  micProcess = null;
12
11
  isRecording = false;
13
12
  isPaused = false;
14
13
  config;
14
+ env = (0, environment_detector_1.detectEnvironment)();
15
15
  constructor(config) {
16
16
  super();
17
17
  this.config = config;
@@ -29,16 +29,23 @@ class AudioCapture extends events_1.EventEmitter {
29
29
  catch { }
30
30
  this.micProcess = null;
31
31
  }
32
- this.micProcess = (0, child_process_1.spawn)('sox', [
33
- '-d', // Default audio device
34
- '-t', 'raw', // Raw PCM output
35
- '-b', '16', // 16-bit
36
- '-e', 'signed-integer', // Signed integer
37
- '-r', '24000', // 24kHz (required by OpenAI)
38
- '-c', '1', // Mono
39
- '-q', // Quiet mode
40
- '-', // Output to stdout
41
- ]);
32
+
33
+ const audioCommands = (0, audio_utils_1.detectAudioCommands)();
34
+ const command = audioCommands.record;
35
+
36
+ let args;
37
+ if (command === 'ffmpeg') {
38
+ args = (0, environment_detector_1.getFfmpegCaptureArgs)(this.env, this.config.sampleRate);
39
+ }
40
+ else {
41
+ args = (0, environment_detector_1.getSoxCaptureArgs)(this.env, this.config.sampleRate);
42
+ }
43
+
44
+ const spawnOpts = (0, environment_detector_1.getSpawnOptions)(this.env);
45
+ this.micProcess = (0, child_process_1.spawn)(command, args, {
46
+ stdio: ['ignore', 'pipe', 'pipe'],
47
+ ...spawnOpts,
48
+ });
42
49
  if (!this.micProcess.stdout) {
43
50
  this.emit('error', new Error('Failed to start microphone'));
44
51
  return;
@@ -48,27 +55,34 @@ class AudioCapture extends events_1.EventEmitter {
48
55
  this.emit('data', chunk);
49
56
  }
50
57
  });
51
- // Capture stderr to detect ALSA/audio device errors
58
+
52
59
  let stderrOutput = '';
53
60
  if (this.micProcess.stderr) {
54
61
  this.micProcess.stderr.on('data', (chunk) => {
55
62
  stderrOutput += chunk.toString();
56
- // Check for ALSA/audio device errors
57
- if (stderrOutput.includes('ALSA') ||
58
- stderrOutput.includes('no default audio device') ||
59
- stderrOutput.includes('Unknown PCM') ||
60
- stderrOutput.includes('FAIL sox')) {
61
- this.emit('error', new Error('Audio device not available. WSL does not support direct audio access. Use Windows native terminal or configure PulseAudio.'));
63
+
64
+ const hasError = stderrOutput.includes('FAIL sox') ||
65
+ stderrOutput.includes('error:') ||
66
+ stderrOutput.includes('cannot') ||
67
+ stderrOutput.includes('failed') ||
68
+ (stderrOutput.includes('ALSA') && this.env.isWSL) ||
69
+ (stderrOutput.includes('no default audio device') && this.env.isWSL);
70
+ if (hasError) {
71
+
72
+ const errorMsg = (0, environment_detector_1.getAudioErrorMessage)(this.env, stderrOutput);
73
+ this.emit('error', new Error(errorMsg));
62
74
  this.micProcess?.kill();
63
75
  }
64
76
  });
65
77
  }
66
78
  this.micProcess.on('error', (error) => {
67
- // ENOENT means command not found - don't spam errors
79
+
68
80
  if (error.code === 'ENOENT') {
69
- // Error already handled at startup, just emit once
81
+
70
82
  if (!this.isRecording) {
71
- this.emit('error', new Error('Audio capture tool (sox) not found. Please install sox.'));
83
+ const audioCommands = (0, audio_utils_1.detectAudioCommands)();
84
+ const toolName = audioCommands.platform === 'darwin' ? 'sox' : 'ffmpeg';
85
+ this.emit('error', new Error(`Audio capture tool (${toolName}) not found. Please install ${toolName}.`));
72
86
  }
73
87
  return;
74
88
  }
@@ -81,15 +95,12 @@ class AudioCapture extends events_1.EventEmitter {
81
95
  this.isPaused = false;
82
96
  this.emit('started');
83
97
  }
84
- /**
85
- * Pause audio capture (for echo cancellation during playback)
86
- * Kills the mic process to ensure no audio leaks through
87
- */
98
+
88
99
  pause() {
89
100
  if (!this.isRecording || this.isPaused)
90
101
  return;
91
102
  this.isPaused = true;
92
- // Kill the mic process to ensure complete silence
103
+
93
104
  if (this.micProcess) {
94
105
  try {
95
106
  this.micProcess.kill('SIGKILL');
@@ -98,14 +109,12 @@ class AudioCapture extends events_1.EventEmitter {
98
109
  this.micProcess = null;
99
110
  }
100
111
  }
101
- /**
102
- * Resume audio capture after playback ends
103
- */
112
+
104
113
  resume() {
105
114
  if (!this.isPaused)
106
115
  return;
107
116
  this.isPaused = false;
108
- // Restart the mic process
117
+
109
118
  this.spawnMic();
110
119
  }
111
120
  stop() {
@@ -136,4 +145,3 @@ class AudioCapture extends events_1.EventEmitter {
136
145
  }
137
146
  }
138
147
  exports.AudioCapture = AudioCapture;
139
- //# sourceMappingURL=audio-capture.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"audio-capture.js","sourceRoot":"","sources":["../src/audio-capture.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"audio-capture.js","sourceRoot":"","sources":["../src/audio-capture.ts"],"names":[],"mappings":"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"}
@@ -18,6 +18,7 @@ export declare class AudioPlayback extends EventEmitter {
18
18
  private playProcess;
19
19
  private isWritable;
20
20
  private config;
21
+ private env;
21
22
  private audioBuffer;
22
23
  private isPlaying;
23
24
  private totalBytesQueued;
@@ -1 +1 @@
1
- {"version":3,"file":"audio-playback.d.ts","sourceRoot":"","sources":["../src/audio-playback.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAEtC,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CACjC;AAED,qBAAa,aAAc,SAAQ,YAAY;IAC7C,OAAO,CAAC,WAAW,CAA6B;IAChD,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,MAAM,CAAsB;IAGpC,OAAO,CAAC,WAAW,CAAgB;IACnC,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,gBAAgB,CAAK;IAC7B,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,YAAY,CAA+B;gBAEvC,MAAM,EAAE,mBAAmB;IAKvC,KAAK,IAAI,IAAI;IAIb,OAAO,CAAC,YAAY;IA+EpB;;OAEG;IACH,IAAI,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAoB/B;;;OAGG;IACH,cAAc,IAAI,IAAI;IAwCtB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAU5B;;OAEG;IACH,IAAI,IAAI,IAAI;IA4BZ,IAAI,OAAO,IAAI,OAAO,CAErB;IAEQ,EAAE,CAAC,CAAC,SAAS,MAAM,mBAAmB,EAC7C,KAAK,EAAE,CAAC,EACR,QAAQ,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAC/B,IAAI;IAIE,IAAI,CAAC,CAAC,SAAS,MAAM,mBAAmB,EAC/C,KAAK,EAAE,CAAC,EACR,GAAG,IAAI,EAAE,UAAU,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,GAC1C,OAAO;CAGX"}
1
+ {"version":3,"file":"audio-playback.d.ts","sourceRoot":"","sources":["../src/audio-playback.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAItC,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CACjC;AAED,qBAAa,aAAc,SAAQ,YAAY;IAC7C,OAAO,CAAC,WAAW,CAA6B;IAChD,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,MAAM,CAAsB;IACpC,OAAO,CAAC,GAAG,CAAuB;IAGlC,OAAO,CAAC,WAAW,CAAgB;IACnC,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,gBAAgB,CAAK;IAC7B,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,YAAY,CAA+B;gBAEvC,MAAM,EAAE,mBAAmB;IAKvC,KAAK,IAAI,IAAI;IAIb,OAAO,CAAC,YAAY;IAuHpB;;OAEG;IACH,IAAI,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAoB/B;;;OAGG;IACH,cAAc,IAAI,IAAI;IAwCtB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAU5B;;OAEG;IACH,IAAI,IAAI,IAAI;IA4BZ,IAAI,OAAO,IAAI,OAAO,CAErB;IAEQ,EAAE,CAAC,CAAC,SAAS,MAAM,mBAAmB,EAC7C,KAAK,EAAE,CAAC,EACR,QAAQ,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAC/B,IAAI;IAIE,IAAI,CAAC,CAAC,SAAS,MAAM,mBAAmB,EAC/C,KAAK,EAAE,CAAC,EACR,GAAG,IAAI,EAAE,UAAU,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,GAC1C,OAAO;CAGX"}