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.
- package/LICENSE +21 -0
- package/README.md +2 -0
- package/package.json +8 -4
- package/packages/cli/dist/audio-adapter.d.ts +60 -0
- package/packages/cli/dist/audio-adapter.d.ts.map +1 -0
- package/packages/cli/dist/audio-adapter.js +198 -0
- package/packages/cli/dist/audio-adapter.js.map +1 -0
- package/packages/cli/dist/audio-capture.d.ts +1 -0
- package/packages/cli/dist/audio-capture.d.ts.map +1 -1
- package/packages/cli/dist/audio-capture.js +42 -34
- package/packages/cli/dist/audio-capture.js.map +1 -1
- package/packages/cli/dist/audio-playback.d.ts +1 -0
- package/packages/cli/dist/audio-playback.d.ts.map +1 -1
- package/packages/cli/dist/audio-playback.js +88 -62
- package/packages/cli/dist/audio-playback.js.map +1 -1
- package/packages/cli/dist/audio-utils.d.ts +2 -0
- package/packages/cli/dist/audio-utils.d.ts.map +1 -1
- package/packages/cli/dist/audio-utils.js +72 -52
- package/packages/cli/dist/audio-utils.js.map +1 -1
- package/packages/cli/dist/echo-canceller.js +26 -49
- package/packages/cli/dist/environment-detector.d.ts +59 -0
- package/packages/cli/dist/environment-detector.d.ts.map +1 -0
- package/packages/cli/dist/environment-detector.js +505 -0
- package/packages/cli/dist/environment-detector.js.map +1 -0
- package/packages/cli/dist/gui-server.d.ts.map +1 -1
- package/packages/cli/dist/gui-server.js +27 -30
- package/packages/cli/dist/gui-server.js.map +1 -1
- package/packages/cli/dist/index.js +14 -18
- package/packages/cli/dist/particle-ui.js +46 -88
- package/packages/cli/dist/setup.d.ts +1 -1
- package/packages/cli/dist/setup.d.ts.map +1 -1
- package/packages/cli/dist/setup.js +62 -47
- package/packages/cli/dist/setup.js.map +1 -1
- package/packages/cli/dist/tools/codebase-analyzer.js +24 -43
- package/packages/cli/dist/tools/codebase-context.js +29 -54
- package/packages/cli/dist/tools/tool-executor.d.ts +5 -0
- package/packages/cli/dist/tools/tool-executor.d.ts.map +1 -1
- package/packages/cli/dist/tools/tool-executor.js +72 -48
- package/packages/cli/dist/tools/tool-executor.js.map +1 -1
- package/packages/cli/dist/tools/web-search.js +14 -30
- package/packages/cli/dist/voice-conversation.d.ts +5 -0
- package/packages/cli/dist/voice-conversation.d.ts.map +1 -1
- package/packages/cli/dist/voice-conversation.js +111 -112
- package/packages/cli/dist/voice-conversation.js.map +1 -1
- package/packages/ide-bridge/README.md +88 -0
- package/packages/realtime/dist/index.js +1 -4
- package/packages/realtime/dist/session.d.ts +1 -0
- package/packages/realtime/dist/session.d.ts.map +1 -1
- package/packages/realtime/dist/session.js +28 -54
- package/packages/realtime/dist/session.js.map +1 -1
- package/packages/shared/dist/config.js +36 -40
- package/packages/shared/dist/constants.js +16 -19
- package/packages/shared/dist/index.js +1 -4
- package/packages/shared/dist/types.js +7 -11
- package/packages/audio/package.json +0 -16
- package/packages/cache/package.json +0 -22
- package/packages/cli/package.json +0 -31
- package/packages/indexer/package.json +0 -22
- package/packages/realtime/package.json +0 -22
- package/packages/shared/package.json +0 -22
- 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
|
+
"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
|
-
"
|
|
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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"}
|
|
@@ -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;
|
|
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
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
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
|
-
|
|
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
|
-
|
|
57
|
-
|
|
58
|
-
stderrOutput.includes('
|
|
59
|
-
stderrOutput.includes('
|
|
60
|
-
stderrOutput.includes('
|
|
61
|
-
|
|
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
|
-
|
|
79
|
+
|
|
68
80
|
if (error.code === 'ENOENT') {
|
|
69
|
-
|
|
81
|
+
|
|
70
82
|
if (!this.isRecording) {
|
|
71
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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":";AAAA;;;GAGG;;;AAEH,iDAAoD;AACpD,mCAAsC;
|
|
1
|
+
{"version":3,"file":"audio-capture.js","sourceRoot":"","sources":["../src/audio-capture.ts"],"names":[],"mappings":"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"}
|
|
@@ -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;
|
|
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"}
|