@voxagent/bridge 0.4.1 → 0.6.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.
- package/README.md +32 -0
- package/dist/cli.js +44 -7
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +15 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +15 -1
- package/dist/config.js.map +1 -1
- package/dist/drivers/claude.d.ts +8 -0
- package/dist/drivers/claude.d.ts.map +1 -1
- package/dist/drivers/claude.js +105 -32
- package/dist/drivers/claude.js.map +1 -1
- package/dist/drivers/codex.js +1 -1
- package/dist/drivers/codex.js.map +1 -1
- package/dist/drivers/inbox.d.ts +26 -0
- package/dist/drivers/inbox.d.ts.map +1 -0
- package/dist/drivers/inbox.js +53 -0
- package/dist/drivers/inbox.js.map +1 -0
- package/dist/drivers/types.d.ts +9 -0
- package/dist/drivers/types.d.ts.map +1 -1
- package/dist/history.d.ts +31 -0
- package/dist/history.d.ts.map +1 -0
- package/dist/history.js +170 -0
- package/dist/history.js.map +1 -0
- package/dist/live/frontend.d.ts +136 -0
- package/dist/live/frontend.d.ts.map +1 -0
- package/dist/live/frontend.js +529 -0
- package/dist/live/frontend.js.map +1 -0
- package/dist/live/mixer.d.ts +38 -0
- package/dist/live/mixer.d.ts.map +1 -0
- package/dist/live/mixer.js +113 -0
- package/dist/live/mixer.js.map +1 -0
- package/dist/live/pcm.d.ts +34 -0
- package/dist/live/pcm.d.ts.map +1 -0
- package/dist/live/pcm.js +66 -0
- package/dist/live/pcm.js.map +1 -0
- package/dist/live/prompts.d.ts +65 -0
- package/dist/live/prompts.d.ts.map +1 -0
- package/dist/live/prompts.js +148 -0
- package/dist/live/prompts.js.map +1 -0
- package/dist/live/session.d.ts +132 -0
- package/dist/live/session.d.ts.map +1 -0
- package/dist/live/session.js +300 -0
- package/dist/live/session.js.map +1 -0
- package/dist/live/speakers.d.ts +54 -0
- package/dist/live/speakers.d.ts.map +1 -0
- package/dist/live/speakers.js +138 -0
- package/dist/live/speakers.js.map +1 -0
- package/dist/live/transcript.d.ts +40 -0
- package/dist/live/transcript.d.ts.map +1 -0
- package/dist/live/transcript.js +72 -0
- package/dist/live/transcript.js.map +1 -0
- package/dist/protocol.d.ts +63 -4
- package/dist/protocol.d.ts.map +1 -1
- package/dist/protocol.js.map +1 -1
- package/dist/room.d.ts +25 -0
- package/dist/room.d.ts.map +1 -1
- package/dist/room.js +218 -5
- package/dist/room.js.map +1 -1
- package/dist/version.d.ts +8 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +19 -0
- package/dist/version.js.map +1 -0
- package/package.json +5 -2
package/README.md
CHANGED
|
@@ -83,6 +83,8 @@ node packages/bridge/dist/cli.js --code 123456 --agent claude
|
|
|
83
83
|
| `--llm-model <ID>` | `VOXAGENT_LLM_MODEL` | backend default | Agent model, or `auto` to route each turn by effort (needs a TypeSafe key) |
|
|
84
84
|
| `--trigger <MODE>` | `VOXAGENT_TRIGGER` | `auto` | Who decides an utterance is for the agent: `auto` \| `jev` \| `regex` \| `shadow` \| `legacy` |
|
|
85
85
|
| `--proactive <MODE>` | `VOXAGENT_PROACTIVE` | `nudge` | `nudge`: silently offer help on open requests nobody addressed to the agent. `off` to disable |
|
|
86
|
+
| `--voice-mode <MODE>` | `VOXAGENT_VOICE_MODE` | `tts` | `live`: GPT-Live is the agent's ears and voice (see below). Replaces TTS and `--trigger` |
|
|
87
|
+
| `--live-voice <VOICE>` | `VOXAGENT_LIVE_VOICE` | `marin` | GPT-Live voice for `--voice-mode live`, e.g. `cedar`, `gleam`, `meridian`, `vesper`, `willow` |
|
|
86
88
|
|
|
87
89
|
`VOXAGENT_ELEVENLABS_API_KEY` (or `ELEVENLABS_API_KEY`) is required unless `--text-only` is set.
|
|
88
90
|
|
|
@@ -112,6 +114,36 @@ the text of every utterance in the room is sent to TypeSafe.
|
|
|
112
114
|
Design, thresholds and the decision table: [`docs/jev-trigger-plan.md`](../../docs/jev-trigger-plan.md).
|
|
113
115
|
Check judgment against the real API with `pnpm --filter @voxagent/bridge trigger:eval`.
|
|
114
116
|
|
|
117
|
+
### Live voice mode (GPT-Live)
|
|
118
|
+
|
|
119
|
+
`--voice-mode live` makes OpenAI's GPT-Live (`gpt-live-1`) the agent's voice.
|
|
120
|
+
The bridge subscribes to every human's microphone, mixes them into one stream,
|
|
121
|
+
and sends it to GPT-Live over a WebSocket from this machine. GPT-Live decides
|
|
122
|
+
when to talk, handles interruptions, and hands tasks to Claude Code / Codex
|
|
123
|
+
(client delegation). The agent's result goes back to GPT-Live, which says it
|
|
124
|
+
in its own words. jev, the wake phrase and TTS are all off in this mode.
|
|
125
|
+
|
|
126
|
+
- **Who is talking:** the bridge hears each mic separately before mixing, so it
|
|
127
|
+
sends GPT-Live "Now speaking: David" hints and labels the transcript that
|
|
128
|
+
becomes the agent's prompt.
|
|
129
|
+
- **Key:** an OpenAI key with GPT-Live access — the one saved in
|
|
130
|
+
`/settings/integrations` arrives at pairing, or set `OPENAI_API_KEY`.
|
|
131
|
+
- **Cost:** $0.05 per minute of session (about $3 per meeting hour), plus the
|
|
132
|
+
agent's own usage. Sessions last up to 2 hours; the bridge reconnects and
|
|
133
|
+
reseeds the conversation.
|
|
134
|
+
- **Web app:** needs a VoxAgent server that knows the `live` trigger mode
|
|
135
|
+
(this repo, after the GPT-Live change). Older servers reject the pairing.
|
|
136
|
+
- **Mute:** the room-wide agent mute stops GPT-Live listening and speaking.
|
|
137
|
+
|
|
138
|
+
| Env | Default | Purpose |
|
|
139
|
+
|-----|---------|---------|
|
|
140
|
+
| `VOXAGENT_LIVE_MODEL` | `gpt-live-1` | GPT-Live model |
|
|
141
|
+
|
|
142
|
+
Check it against the real API with `pnpm --filter @voxagent/bridge live:smoke`
|
|
143
|
+
(about 5¢): two synthetic people talk to each other, then one addresses Vox.
|
|
144
|
+
It fails if GPT-Live speaks up during human conversation, misses the request,
|
|
145
|
+
blames the wrong person, or doesn't relay the result.
|
|
146
|
+
|
|
115
147
|
## Architecture
|
|
116
148
|
|
|
117
149
|
See [`/docs/learning-reviews/`](../../docs/learning-reviews) and the refactor plan at `/Users/tanmay/.claude/plans/ok-i-want-you-refactored-wadler.md` for full background.
|
package/dist/cli.js
CHANGED
|
@@ -15,7 +15,7 @@ import { existsSync, readFileSync } from 'node:fs';
|
|
|
15
15
|
import { dirname, join } from 'node:path';
|
|
16
16
|
import { stdin as input, stdout as output } from 'node:process';
|
|
17
17
|
import { createInterface } from 'node:readline/promises';
|
|
18
|
-
import { buildBridgeConfig } from './config.js';
|
|
18
|
+
import { buildBridgeConfig, resolveVoiceMode } from './config.js';
|
|
19
19
|
import { createDriver } from './drivers/index.js';
|
|
20
20
|
import { exchangePairCode } from './pair.js';
|
|
21
21
|
import { PermissionBroker } from './permissions.js';
|
|
@@ -89,7 +89,21 @@ function applyPairOverrides(pair, flags) {
|
|
|
89
89
|
return;
|
|
90
90
|
process.env[key] = value;
|
|
91
91
|
};
|
|
92
|
-
if (pair.tts) {
|
|
92
|
+
if (pair.tts && flags.voiceMode === 'live') {
|
|
93
|
+
// GPT-Live only needs the OpenAI key. The saved TTS voice/model are
|
|
94
|
+
// `/v1/audio/speech` names and mean nothing to GPT-Live.
|
|
95
|
+
if (pair.tts.provider === 'openai') {
|
|
96
|
+
setIfMissing('VOXAGENT_OPENAI_API_KEY', pair.tts.apiKey);
|
|
97
|
+
log.info('bridge_pair_openai_applied', { for: 'gpt-live' });
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
log.warn('bridge_pair_no_openai_key', {
|
|
101
|
+
payloadProvider: pair.tts.provider,
|
|
102
|
+
hint: 'GPT-Live needs an OpenAI key: save one in /settings/integrations or set OPENAI_API_KEY.',
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
else if (pair.tts) {
|
|
93
107
|
// Resolve which provider the bridge will actually run with — same
|
|
94
108
|
// precedence buildBridgeConfig uses (CLI flag > env > default).
|
|
95
109
|
// If the cloud picked a different provider's payload than what we
|
|
@@ -171,12 +185,16 @@ async function main() {
|
|
|
171
185
|
.option('--llm-model <ID>', 'Agent LLM model (e.g. claude-opus-4-7, gpt-5.4), or "auto" to route each turn by effort (needs TYPESAFE_API_KEY)')
|
|
172
186
|
.option('--trigger <MODE>', 'Who decides an utterance is for the agent: auto (default: jev if TYPESAFE_API_KEY is set, else wake phrase) | jev | regex | shadow | legacy')
|
|
173
187
|
.option('--proactive <MODE>', 'nudge (default): silently offer help on open requests nobody addressed to the agent | off')
|
|
188
|
+
.option('--voice-mode <MODE>', 'tts (default): speech-to-text + TTS voice | live: GPT-Live hears the room, talks, and hands tasks to the agent (uses OPENAI_API_KEY)')
|
|
189
|
+
.option('--live-voice <VOICE>', 'GPT-Live voice for --voice-mode live (default: marin; e.g. cedar, gleam, meridian, vesper, willow)')
|
|
174
190
|
.option('--full-access', 'Disable the workspace sandbox so the agent can read/write anywhere on this machine')
|
|
175
191
|
.option('-v, --verbose', 'Enable debug logging')
|
|
176
192
|
.parse(cleanedArgv);
|
|
177
193
|
const flags = program.opts();
|
|
178
194
|
if (flags.verbose)
|
|
179
195
|
setLogLevel('debug');
|
|
196
|
+
// Normalised once so applyPairOverrides can branch on it before config.
|
|
197
|
+
flags.voiceMode = resolveVoiceMode(flags.voiceMode ?? process.env.VOXAGENT_VOICE_MODE);
|
|
180
198
|
if (!flags.code) {
|
|
181
199
|
const envCode = process.env.VOXAGENT_PAIR_CODE;
|
|
182
200
|
if (!envCode) {
|
|
@@ -198,7 +216,10 @@ async function main() {
|
|
|
198
216
|
llmModel: preConfig.autoModel ? 'auto' : preConfig.llmModel,
|
|
199
217
|
fullAccess: preConfig.fullAccess,
|
|
200
218
|
textOnly: preConfig.textOnly,
|
|
201
|
-
|
|
219
|
+
voiceMode: preConfig.voiceMode,
|
|
220
|
+
trigger: preConfig.voiceMode === 'live'
|
|
221
|
+
? 'live (GPT-Live decides)'
|
|
222
|
+
: preConfig.triggerMode ?? 'legacy (browser wake regex)',
|
|
202
223
|
proactive: preConfig.proactive,
|
|
203
224
|
});
|
|
204
225
|
const permissionBroker = new PermissionBroker({
|
|
@@ -216,11 +237,14 @@ async function main() {
|
|
|
216
237
|
// saved. Without this, the cloud's default precedence wins and the
|
|
217
238
|
// chosen provider's voice ID leaks into the wrong slot — OpenAI
|
|
218
239
|
// rejects long ElevenLabs voice strings as enum-invalid.
|
|
219
|
-
|
|
240
|
+
// Live mode asks for the OpenAI payload: GPT-Live runs on that key.
|
|
241
|
+
capabilities.ttsProvider = preConfig.voiceMode === 'live' ? 'openai' : preConfig.ttsProvider;
|
|
220
242
|
// Advertised BEFORE pairing: the cloud copies it into our participant
|
|
221
243
|
// metadata, which is how a refreshed browser learns to send us every final
|
|
222
244
|
// instead of running the wake regex itself.
|
|
223
|
-
if (preConfig.
|
|
245
|
+
if (preConfig.voiceMode === 'live')
|
|
246
|
+
capabilities.trigger = { mode: 'live' };
|
|
247
|
+
else if (preConfig.triggerMode)
|
|
224
248
|
capabilities.trigger = { mode: preConfig.triggerMode };
|
|
225
249
|
log.info('bridge_capabilities', {
|
|
226
250
|
backend: capabilities.backend,
|
|
@@ -250,13 +274,26 @@ async function main() {
|
|
|
250
274
|
hasOpenAiKey: Boolean(config.openAiApiKey),
|
|
251
275
|
});
|
|
252
276
|
}
|
|
277
|
+
if (config.voiceMode === 'live') {
|
|
278
|
+
if (!config.openAiApiKey) {
|
|
279
|
+
throw new Error('GPT-Live (--voice-mode live) needs an OpenAI API key. Save one in /settings/integrations, or set OPENAI_API_KEY / VOXAGENT_OPENAI_API_KEY.');
|
|
280
|
+
}
|
|
281
|
+
log.info('bridge_voice_live', { model: config.liveModel, voice: config.liveVoice });
|
|
282
|
+
}
|
|
253
283
|
// The TypeSafe key can arrive with the pair payload, so the trigger mode is
|
|
254
284
|
// only final now. Capabilities went to the cloud before pairing (browsers
|
|
255
285
|
// only test for `trigger` being present); `bridge.hello` carries the real mode.
|
|
256
286
|
if (config.triggerMode)
|
|
257
287
|
capabilities.trigger = { mode: config.triggerMode };
|
|
258
|
-
log.info('bridge_trigger_resolved', {
|
|
259
|
-
|
|
288
|
+
log.info('bridge_trigger_resolved', {
|
|
289
|
+
trigger: config.voiceMode === 'live'
|
|
290
|
+
? 'live (GPT-Live decides)'
|
|
291
|
+
: config.triggerMode ?? 'legacy (browser wake regex)',
|
|
292
|
+
});
|
|
293
|
+
if (config.voiceMode !== 'live' &&
|
|
294
|
+
config.triggerMode === 'regex' &&
|
|
295
|
+
!config.typesafeApiKey &&
|
|
296
|
+
flags.trigger !== 'regex') {
|
|
260
297
|
log.warn('trigger_no_typesafe_key', {
|
|
261
298
|
hint: 'No TypeSafe key locally or from the cloud. Set TYPESAFE_API_KEY (or VOXAGENT_TYPESAFE_API_KEY) ' +
|
|
262
299
|
'to let jev decide when the agent is being addressed. Until then only "hey Vox" / "Vox, ..." wakes it.',
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/config.d.ts
CHANGED
|
@@ -45,7 +45,7 @@ export interface BridgeConfig {
|
|
|
45
45
|
* `shadow` run in the bridge; `null` (`--trigger legacy`) leaves the wake
|
|
46
46
|
* regex in the browser, exactly as bridges < 0.4.0 behaved.
|
|
47
47
|
*/
|
|
48
|
-
triggerMode: TriggerMode | null;
|
|
48
|
+
triggerMode: Exclude<TriggerMode, 'live'> | null;
|
|
49
49
|
/** TypeSafe API key for jev. Host-side only; never sent to the cloud. */
|
|
50
50
|
typesafeApiKey: string | null;
|
|
51
51
|
jevModel: string;
|
|
@@ -54,6 +54,16 @@ export interface BridgeConfig {
|
|
|
54
54
|
proactive: 'off' | 'nudge';
|
|
55
55
|
/** Speak a canned "On it." before high-effort runs. */
|
|
56
56
|
triggerAck: boolean;
|
|
57
|
+
/**
|
|
58
|
+
* `tts` (default): browser STT → trigger → agent → TTS. `live`: GPT-Live
|
|
59
|
+
* hears the room, talks, and hands tasks to the agent. Live mode replaces
|
|
60
|
+
* TTS and the trigger layer, and needs an OpenAI key.
|
|
61
|
+
*/
|
|
62
|
+
voiceMode: VoiceMode;
|
|
63
|
+
/** GPT-Live model for `voiceMode: 'live'`. */
|
|
64
|
+
liveModel: string;
|
|
65
|
+
/** GPT-Live voice (fixed per session). */
|
|
66
|
+
liveVoice: string;
|
|
57
67
|
/**
|
|
58
68
|
* When true, the agent runs without its native workspace sandbox
|
|
59
69
|
* (Codex `--dangerously-bypass-approvals-and-sandbox`, Claude
|
|
@@ -62,6 +72,7 @@ export interface BridgeConfig {
|
|
|
62
72
|
*/
|
|
63
73
|
fullAccess: boolean;
|
|
64
74
|
}
|
|
75
|
+
export type VoiceMode = 'tts' | 'live';
|
|
65
76
|
interface CliFlags {
|
|
66
77
|
code?: string;
|
|
67
78
|
apiUrl?: string;
|
|
@@ -76,7 +87,10 @@ interface CliFlags {
|
|
|
76
87
|
tts?: string;
|
|
77
88
|
trigger?: string;
|
|
78
89
|
proactive?: string;
|
|
90
|
+
voiceMode?: string;
|
|
91
|
+
liveVoice?: string;
|
|
79
92
|
}
|
|
93
|
+
export declare function resolveVoiceMode(raw: string | undefined): VoiceMode;
|
|
80
94
|
/**
|
|
81
95
|
* Detects which CLI agent is available on PATH so `--agent` can default sensibly.
|
|
82
96
|
*/
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE/D,OAAO,KAAK,EAAE,qBAAqB,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAIzE,MAAM,WAAW,YAAY;IAC3B,iEAAiE;IACjE,UAAU,EAAE,MAAM,CAAC;IACnB,0DAA0D;IAC1D,QAAQ,EAAE,MAAM,CAAC;IACjB,sCAAsC;IACtC,OAAO,EAAE,YAAY,CAAC;IACtB,uDAAuD;IACvD,GAAG,EAAE,MAAM,CAAC;IACZ,8BAA8B;IAC9B,WAAW,EAAE,WAAW,CAAC;IACzB,6DAA6D;IAC7D,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,qDAAqD;IACrD,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,+EAA+E;IAC/E,UAAU,EAAE,MAAM,CAAC;IACnB,6FAA6F;IAC7F,UAAU,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,qBAAqB,EAAE,qBAAqB,CAAC;IAC7C,oDAAoD;IACpD,QAAQ,EAAE,OAAO,CAAC;IAClB,iFAAiF;IACjF,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB;;;;OAIG;IACH,SAAS,EAAE,OAAO,CAAC;IACnB,4EAA4E;IAC5E,UAAU,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAC5B;;;;OAIG;IACH,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC;IACjD,yEAAyE;IACzE,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,0EAA0E;IAC1E,SAAS,EAAE,KAAK,GAAG,OAAO,CAAC;IAC3B,uDAAuD;IACvD,UAAU,EAAE,OAAO,CAAC;IACpB;;;;OAIG;IACH,SAAS,EAAE,SAAS,CAAC;IACrB,8CAA8C;IAC9C,SAAS,EAAE,MAAM,CAAC;IAClB,0CAA0C;IAC1C,SAAS,EAAE,MAAM,CAAC;IAClB;;;;;OAKG;IACH,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,MAAM,SAAS,GAAG,KAAK,GAAG,MAAM,CAAC;AAiBvC,UAAU,QAAQ;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AA6BD,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAInE;AAQD;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,YAAY,CAMhD;AAoCD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,QAAQ,GAAG,YAAY,CA8E/D"}
|
package/dist/config.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @file Bridge runtime configuration resolved from CLI args + environment.
|
|
3
3
|
*/
|
|
4
|
+
import { DEFAULT_LIVE_MODEL, DEFAULT_LIVE_VOICE } from './live/session.js';
|
|
4
5
|
import { parseAutoModels } from './trigger/effort.js';
|
|
5
6
|
import { DEFAULT_JEV_MODEL, DEFAULT_JEV_TIMEOUT_MS } from './trigger/jev.js';
|
|
6
7
|
const DEFAULT_API_BASE_URL = 'http://localhost:3000';
|
|
@@ -42,6 +43,12 @@ function resolveTriggerMode(raw, hasKey) {
|
|
|
42
43
|
return 'regex';
|
|
43
44
|
return normalized === 'shadow' ? 'shadow' : 'jev';
|
|
44
45
|
}
|
|
46
|
+
export function resolveVoiceMode(raw) {
|
|
47
|
+
const normalized = (raw ?? 'tts').trim().toLowerCase();
|
|
48
|
+
if (normalized === 'tts' || normalized === 'live')
|
|
49
|
+
return normalized;
|
|
50
|
+
throw new Error(`Unknown --voice-mode "${raw}". Use "tts" or "live".`);
|
|
51
|
+
}
|
|
45
52
|
function resolveProactive(raw) {
|
|
46
53
|
const normalized = (raw ?? 'nudge').trim().toLowerCase();
|
|
47
54
|
if (normalized === 'off' || normalized === 'nudge')
|
|
@@ -120,6 +127,7 @@ export function buildBridgeConfig(flags) {
|
|
|
120
127
|
const autoModel = rawLlmModel.toLowerCase() === 'auto';
|
|
121
128
|
const typesafeApiKey = (process.env.VOXAGENT_TYPESAFE_API_KEY ?? process.env.TYPESAFE_API_KEY ?? '').trim() || null;
|
|
122
129
|
const jevTimeoutMs = Number(process.env.VOXAGENT_TRIGGER_TIMEOUT_MS);
|
|
130
|
+
const voiceMode = resolveVoiceMode(flags.voiceMode ?? process.env.VOXAGENT_VOICE_MODE);
|
|
123
131
|
return {
|
|
124
132
|
apiBaseUrl,
|
|
125
133
|
pairCode,
|
|
@@ -135,13 +143,19 @@ export function buildBridgeConfig(flags) {
|
|
|
135
143
|
llmModel: autoModel ? null : rawLlmModel || null,
|
|
136
144
|
autoModel,
|
|
137
145
|
autoModels: parseAutoModels(process.env.VOXAGENT_AUTO_MODELS),
|
|
138
|
-
|
|
146
|
+
// GPT-Live hears the room and decides for itself; no trigger layer.
|
|
147
|
+
triggerMode: voiceMode === 'live'
|
|
148
|
+
? null
|
|
149
|
+
: resolveTriggerMode(flags.trigger ?? process.env.VOXAGENT_TRIGGER, typesafeApiKey !== null),
|
|
139
150
|
typesafeApiKey,
|
|
140
151
|
jevModel: (process.env.VOXAGENT_JEV_MODEL ?? '').trim() || DEFAULT_JEV_MODEL,
|
|
141
152
|
jevTimeoutMs: Number.isFinite(jevTimeoutMs) && jevTimeoutMs > 0 ? jevTimeoutMs : DEFAULT_JEV_TIMEOUT_MS,
|
|
142
153
|
proactive: resolveProactive(flags.proactive ?? process.env.VOXAGENT_PROACTIVE),
|
|
143
154
|
triggerAck: process.env.VOXAGENT_TRIGGER_ACK !== '0',
|
|
144
155
|
fullAccess: flags.fullAccess === true || process.env.VOXAGENT_FULL_ACCESS === '1',
|
|
156
|
+
voiceMode,
|
|
157
|
+
liveModel: (process.env.VOXAGENT_LIVE_MODEL ?? '').trim() || DEFAULT_LIVE_MODEL,
|
|
158
|
+
liveVoice: (flags.liveVoice ?? process.env.VOXAGENT_LIVE_VOICE ?? '').trim() || DEFAULT_LIVE_VOICE,
|
|
145
159
|
};
|
|
146
160
|
}
|
|
147
161
|
//# sourceMappingURL=config.js.map
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/dist/drivers/claude.d.ts
CHANGED
|
@@ -14,6 +14,11 @@
|
|
|
14
14
|
* - Tool results / progress: surface via `user` messages with tool_result
|
|
15
15
|
* blocks (post-execution); we use these to flag success/error + payload.
|
|
16
16
|
* - Run end: `result` SDKMessage; subtype `success` / `error_*` / `interrupted`.
|
|
17
|
+
*
|
|
18
|
+
* Input is a stream (RunInbox), not one string, so `addToActiveRun` can
|
|
19
|
+
* hand the agent more messages mid-task. The inbox closes at the first
|
|
20
|
+
* `result`; a message that slipped in just before it gets its own turn in
|
|
21
|
+
* the same query, and the run ends when the query does.
|
|
17
22
|
*/
|
|
18
23
|
import type { CapabilitiesInfo } from '../protocol.js';
|
|
19
24
|
import type { DriverOptions } from './index.js';
|
|
@@ -25,9 +30,12 @@ export declare class ClaudeDriver implements AgentDriver {
|
|
|
25
30
|
private sessionId;
|
|
26
31
|
/** Currently active query handle, used for `interrupt()`. */
|
|
27
32
|
private activeQuery;
|
|
33
|
+
/** Input for the run in progress; null when none can take more messages. */
|
|
34
|
+
private inbox;
|
|
28
35
|
constructor(options?: DriverOptions);
|
|
29
36
|
capabilities(cwd: string): Promise<CapabilitiesInfo>;
|
|
30
37
|
run(input: DriverRunInput, signal: AbortSignal): AsyncIterable<DriverEvent>;
|
|
38
|
+
addToActiveRun(text: string): boolean;
|
|
31
39
|
close(): Promise<void>;
|
|
32
40
|
private discoverSkills;
|
|
33
41
|
private discoverPlugins;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude.d.ts","sourceRoot":"","sources":["../../src/drivers/claude.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"claude.d.ts","sourceRoot":"","sources":["../../src/drivers/claude.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAQH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAoB3E,qBAAa,YAAa,YAAW,WAAW;IAYlC,OAAO,CAAC,QAAQ,CAAC,OAAO;IAXpC,QAAQ,CAAC,OAAO,EAAG,QAAQ,CAAU;IAErC,kFAAkF;IAClF,OAAO,CAAC,SAAS,CAAuB;IAExC,6DAA6D;IAC7D,OAAO,CAAC,WAAW,CAAsB;IAEzC,4EAA4E;IAC5E,OAAO,CAAC,KAAK,CAAyC;gBAEzB,OAAO,GAAE,aAAkB;IAElD,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAiBnD,GAAG,CAAC,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE,WAAW,GAAG,aAAa,CAAC,WAAW,CAAC;IAwQlF,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAM/B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;YAad,cAAc;YA4Bd,eAAe;YAiBf,kBAAkB;CAajC"}
|
package/dist/drivers/claude.js
CHANGED
|
@@ -14,6 +14,11 @@
|
|
|
14
14
|
* - Tool results / progress: surface via `user` messages with tool_result
|
|
15
15
|
* blocks (post-execution); we use these to flag success/error + payload.
|
|
16
16
|
* - Run end: `result` SDKMessage; subtype `success` / `error_*` / `interrupted`.
|
|
17
|
+
*
|
|
18
|
+
* Input is a stream (RunInbox), not one string, so `addToActiveRun` can
|
|
19
|
+
* hand the agent more messages mid-task. The inbox closes at the first
|
|
20
|
+
* `result`; a message that slipped in just before it gets its own turn in
|
|
21
|
+
* the same query, and the run ends when the query does.
|
|
17
22
|
*/
|
|
18
23
|
import { query } from '@anthropic-ai/claude-agent-sdk';
|
|
19
24
|
import { homedir } from 'node:os';
|
|
@@ -21,7 +26,10 @@ import { readdir, readFile, stat } from 'node:fs/promises';
|
|
|
21
26
|
import { join } from 'node:path';
|
|
22
27
|
import { randomUUID } from 'node:crypto';
|
|
23
28
|
import { log } from '../logging.js';
|
|
24
|
-
|
|
29
|
+
import { RunInbox } from './inbox.js';
|
|
30
|
+
import { BRIDGE_VERSION } from '../version.js';
|
|
31
|
+
/** How long a finished query may idle before the run stops waiting for it. */
|
|
32
|
+
const QUERY_SETTLE_TIMEOUT_MS = 15_000;
|
|
25
33
|
export class ClaudeDriver {
|
|
26
34
|
options;
|
|
27
35
|
backend = 'claude';
|
|
@@ -29,6 +37,8 @@ export class ClaudeDriver {
|
|
|
29
37
|
sessionId = null;
|
|
30
38
|
/** Currently active query handle, used for `interrupt()`. */
|
|
31
39
|
activeQuery = null;
|
|
40
|
+
/** Input for the run in progress; null when none can take more messages. */
|
|
41
|
+
inbox = null;
|
|
32
42
|
constructor(options = {}) {
|
|
33
43
|
this.options = options;
|
|
34
44
|
}
|
|
@@ -55,6 +65,30 @@ export class ClaudeDriver {
|
|
|
55
65
|
const openTextBlocks = new Set();
|
|
56
66
|
let finalText = '';
|
|
57
67
|
let runEnded = false;
|
|
68
|
+
let results = 0;
|
|
69
|
+
let resultReason = 'completed';
|
|
70
|
+
let resultMessage;
|
|
71
|
+
const resultTexts = [];
|
|
72
|
+
const usageTotals = { inputTokens: 0, outputTokens: 0, cachedInputTokens: 0, reported: false };
|
|
73
|
+
/**
|
|
74
|
+
* After the reply, the query normally ends within a second of the inbox
|
|
75
|
+
* closing. If it idles instead (a background task, a stuck subprocess),
|
|
76
|
+
* don't hold the run open forever.
|
|
77
|
+
*/
|
|
78
|
+
let settleTimer = null;
|
|
79
|
+
const armSettleTimer = () => {
|
|
80
|
+
if (settleTimer)
|
|
81
|
+
clearTimeout(settleTimer);
|
|
82
|
+
settleTimer = setTimeout(() => {
|
|
83
|
+
log.warn('claude_query_did_not_settle', { runId, afterMs: QUERY_SETTLE_TIMEOUT_MS });
|
|
84
|
+
try {
|
|
85
|
+
iter.close();
|
|
86
|
+
}
|
|
87
|
+
catch {
|
|
88
|
+
// already closed
|
|
89
|
+
}
|
|
90
|
+
}, QUERY_SETTLE_TIMEOUT_MS);
|
|
91
|
+
};
|
|
58
92
|
// Permission strategy:
|
|
59
93
|
// - fullAccess=true → bypassPermissions, no broker is consulted.
|
|
60
94
|
// - fullAccess=false + a resolver → permissionMode 'default' so every
|
|
@@ -102,14 +136,20 @@ export class ClaudeDriver {
|
|
|
102
136
|
}
|
|
103
137
|
: {}),
|
|
104
138
|
};
|
|
139
|
+
const inbox = new RunInbox();
|
|
140
|
+
inbox.push(userMessage(input.prompt));
|
|
141
|
+
this.inbox = inbox;
|
|
105
142
|
let iter;
|
|
106
143
|
try {
|
|
107
144
|
iter = query({
|
|
108
|
-
prompt:
|
|
145
|
+
prompt: inbox.messages(),
|
|
109
146
|
options: queryOptions,
|
|
110
147
|
});
|
|
111
148
|
}
|
|
112
149
|
catch (error) {
|
|
150
|
+
inbox.close();
|
|
151
|
+
if (this.inbox === inbox)
|
|
152
|
+
this.inbox = null;
|
|
113
153
|
yield {
|
|
114
154
|
type: 'run_end',
|
|
115
155
|
runId,
|
|
@@ -121,6 +161,7 @@ export class ClaudeDriver {
|
|
|
121
161
|
}
|
|
122
162
|
this.activeQuery = iter;
|
|
123
163
|
const onAbort = () => {
|
|
164
|
+
inbox.close();
|
|
124
165
|
iter.interrupt().catch((error) => {
|
|
125
166
|
log.warn('claude_query_interrupt_failed', {
|
|
126
167
|
message: error instanceof Error ? error.message : String(error),
|
|
@@ -133,6 +174,9 @@ export class ClaudeDriver {
|
|
|
133
174
|
signal.addEventListener('abort', onAbort, { once: true });
|
|
134
175
|
try {
|
|
135
176
|
for await (const message of iter) {
|
|
177
|
+
// Anything after the first reply is a follow-up turn at work.
|
|
178
|
+
if (results > 0)
|
|
179
|
+
armSettleTimer();
|
|
136
180
|
if (message.type === 'system' && message.subtype === 'init') {
|
|
137
181
|
this.sessionId = message.session_id ?? this.sessionId;
|
|
138
182
|
continue;
|
|
@@ -173,13 +217,18 @@ export class ClaudeDriver {
|
|
|
173
217
|
continue;
|
|
174
218
|
}
|
|
175
219
|
if (message.type === 'result') {
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
220
|
+
// The run is wrapping up: no more follow-ups. Keep reading — a
|
|
221
|
+
// message pushed just before this gets a turn of its own, and
|
|
222
|
+
// the query ends by itself once the closed inbox drains.
|
|
223
|
+
inbox.close();
|
|
224
|
+
if (this.inbox === inbox)
|
|
225
|
+
this.inbox = null;
|
|
226
|
+
results += 1;
|
|
227
|
+
armSettleTimer();
|
|
179
228
|
if (message.subtype === 'success') {
|
|
180
229
|
resultReason = 'completed';
|
|
181
230
|
if (message.result)
|
|
182
|
-
|
|
231
|
+
resultTexts.push(message.result);
|
|
183
232
|
}
|
|
184
233
|
else if (message.subtype === 'error_max_turns') {
|
|
185
234
|
resultReason = 'error';
|
|
@@ -193,38 +242,18 @@ export class ClaudeDriver {
|
|
|
193
242
|
resultReason = signal.aborted ? 'interrupted' : 'error';
|
|
194
243
|
}
|
|
195
244
|
this.sessionId = message.session_id ?? this.sessionId;
|
|
196
|
-
// Emit text_done before run_end if we have buffered text.
|
|
197
|
-
if (finalText) {
|
|
198
|
-
yield { type: 'text_done', runId, text: finalText };
|
|
199
|
-
}
|
|
200
245
|
// The SDK reports usage on the `result` message. Shape:
|
|
201
246
|
// usage: { input_tokens, output_tokens, cache_creation_input_tokens?, cache_read_input_tokens? }
|
|
202
|
-
//
|
|
247
|
+
// Summed across turns; integers, zero-filled so the cloud doesn't
|
|
203
248
|
// need to special-case partial reports.
|
|
204
249
|
const usage = message.usage;
|
|
205
250
|
if (usage && typeof usage === 'object') {
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
type: 'usage',
|
|
211
|
-
runId,
|
|
212
|
-
inputTokens,
|
|
213
|
-
outputTokens,
|
|
214
|
-
...(cachedInputTokens > 0 ? { cachedInputTokens } : {}),
|
|
215
|
-
};
|
|
251
|
+
usageTotals.inputTokens += Number(usage.input_tokens ?? 0) || 0;
|
|
252
|
+
usageTotals.outputTokens += Number(usage.output_tokens ?? 0) || 0;
|
|
253
|
+
usageTotals.cachedInputTokens += Number(usage.cache_read_input_tokens ?? 0) || 0;
|
|
254
|
+
usageTotals.reported = true;
|
|
216
255
|
}
|
|
217
|
-
|
|
218
|
-
type: 'run_end',
|
|
219
|
-
runId,
|
|
220
|
-
reason: resultReason,
|
|
221
|
-
...(resultMessage ? { message: resultMessage } : {}),
|
|
222
|
-
totalLatencyMs: Date.now() - startedAtMs,
|
|
223
|
-
};
|
|
224
|
-
runEnded = true;
|
|
225
|
-
// Avoid unused tag.
|
|
226
|
-
void reason;
|
|
227
|
-
break;
|
|
256
|
+
continue;
|
|
228
257
|
}
|
|
229
258
|
}
|
|
230
259
|
}
|
|
@@ -254,9 +283,38 @@ export class ClaudeDriver {
|
|
|
254
283
|
}
|
|
255
284
|
}
|
|
256
285
|
finally {
|
|
286
|
+
if (settleTimer)
|
|
287
|
+
clearTimeout(settleTimer);
|
|
257
288
|
signal.removeEventListener('abort', onAbort);
|
|
289
|
+
inbox.close();
|
|
290
|
+
if (this.inbox === inbox)
|
|
291
|
+
this.inbox = null;
|
|
258
292
|
this.activeQuery = null;
|
|
259
293
|
}
|
|
294
|
+
if (!runEnded && results > 0) {
|
|
295
|
+
// One reply covering every turn (usually one: follow-ups normally
|
|
296
|
+
// join the turn in progress).
|
|
297
|
+
const text = resultTexts.length > 0 ? resultTexts.join('\n\n') : finalText;
|
|
298
|
+
if (text)
|
|
299
|
+
yield { type: 'text_done', runId, text };
|
|
300
|
+
if (usageTotals.reported) {
|
|
301
|
+
yield {
|
|
302
|
+
type: 'usage',
|
|
303
|
+
runId,
|
|
304
|
+
inputTokens: usageTotals.inputTokens,
|
|
305
|
+
outputTokens: usageTotals.outputTokens,
|
|
306
|
+
...(usageTotals.cachedInputTokens > 0 ? { cachedInputTokens: usageTotals.cachedInputTokens } : {}),
|
|
307
|
+
};
|
|
308
|
+
}
|
|
309
|
+
yield {
|
|
310
|
+
type: 'run_end',
|
|
311
|
+
runId,
|
|
312
|
+
reason: signal.aborted ? 'interrupted' : resultReason,
|
|
313
|
+
...(resultMessage ? { message: resultMessage } : {}),
|
|
314
|
+
totalLatencyMs: Date.now() - startedAtMs,
|
|
315
|
+
};
|
|
316
|
+
runEnded = true;
|
|
317
|
+
}
|
|
260
318
|
if (!runEnded) {
|
|
261
319
|
// Defensive: ensure we always emit run_end even if the SDK exited without `result`.
|
|
262
320
|
if (finalText)
|
|
@@ -269,7 +327,15 @@ export class ClaudeDriver {
|
|
|
269
327
|
};
|
|
270
328
|
}
|
|
271
329
|
}
|
|
330
|
+
addToActiveRun(text) {
|
|
331
|
+
const inbox = this.inbox;
|
|
332
|
+
if (!inbox?.isOpen)
|
|
333
|
+
return false;
|
|
334
|
+
return inbox.push(userMessage(text));
|
|
335
|
+
}
|
|
272
336
|
async close() {
|
|
337
|
+
this.inbox?.close();
|
|
338
|
+
this.inbox = null;
|
|
273
339
|
if (this.activeQuery) {
|
|
274
340
|
try {
|
|
275
341
|
await this.activeQuery.interrupt();
|
|
@@ -490,4 +556,11 @@ openTextBlocks) {
|
|
|
490
556
|
}
|
|
491
557
|
return [];
|
|
492
558
|
}
|
|
559
|
+
function userMessage(text) {
|
|
560
|
+
return {
|
|
561
|
+
type: 'user',
|
|
562
|
+
message: { role: 'user', content: text },
|
|
563
|
+
parent_tool_use_id: null,
|
|
564
|
+
};
|
|
565
|
+
}
|
|
493
566
|
//# sourceMappingURL=claude.js.map
|