@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.
Files changed (63) hide show
  1. package/README.md +32 -0
  2. package/dist/cli.js +44 -7
  3. package/dist/cli.js.map +1 -1
  4. package/dist/config.d.ts +15 -1
  5. package/dist/config.d.ts.map +1 -1
  6. package/dist/config.js +15 -1
  7. package/dist/config.js.map +1 -1
  8. package/dist/drivers/claude.d.ts +8 -0
  9. package/dist/drivers/claude.d.ts.map +1 -1
  10. package/dist/drivers/claude.js +105 -32
  11. package/dist/drivers/claude.js.map +1 -1
  12. package/dist/drivers/codex.js +1 -1
  13. package/dist/drivers/codex.js.map +1 -1
  14. package/dist/drivers/inbox.d.ts +26 -0
  15. package/dist/drivers/inbox.d.ts.map +1 -0
  16. package/dist/drivers/inbox.js +53 -0
  17. package/dist/drivers/inbox.js.map +1 -0
  18. package/dist/drivers/types.d.ts +9 -0
  19. package/dist/drivers/types.d.ts.map +1 -1
  20. package/dist/history.d.ts +31 -0
  21. package/dist/history.d.ts.map +1 -0
  22. package/dist/history.js +170 -0
  23. package/dist/history.js.map +1 -0
  24. package/dist/live/frontend.d.ts +136 -0
  25. package/dist/live/frontend.d.ts.map +1 -0
  26. package/dist/live/frontend.js +529 -0
  27. package/dist/live/frontend.js.map +1 -0
  28. package/dist/live/mixer.d.ts +38 -0
  29. package/dist/live/mixer.d.ts.map +1 -0
  30. package/dist/live/mixer.js +113 -0
  31. package/dist/live/mixer.js.map +1 -0
  32. package/dist/live/pcm.d.ts +34 -0
  33. package/dist/live/pcm.d.ts.map +1 -0
  34. package/dist/live/pcm.js +66 -0
  35. package/dist/live/pcm.js.map +1 -0
  36. package/dist/live/prompts.d.ts +65 -0
  37. package/dist/live/prompts.d.ts.map +1 -0
  38. package/dist/live/prompts.js +148 -0
  39. package/dist/live/prompts.js.map +1 -0
  40. package/dist/live/session.d.ts +132 -0
  41. package/dist/live/session.d.ts.map +1 -0
  42. package/dist/live/session.js +300 -0
  43. package/dist/live/session.js.map +1 -0
  44. package/dist/live/speakers.d.ts +54 -0
  45. package/dist/live/speakers.d.ts.map +1 -0
  46. package/dist/live/speakers.js +138 -0
  47. package/dist/live/speakers.js.map +1 -0
  48. package/dist/live/transcript.d.ts +40 -0
  49. package/dist/live/transcript.d.ts.map +1 -0
  50. package/dist/live/transcript.js +72 -0
  51. package/dist/live/transcript.js.map +1 -0
  52. package/dist/protocol.d.ts +63 -4
  53. package/dist/protocol.d.ts.map +1 -1
  54. package/dist/protocol.js.map +1 -1
  55. package/dist/room.d.ts +25 -0
  56. package/dist/room.d.ts.map +1 -1
  57. package/dist/room.js +218 -5
  58. package/dist/room.js.map +1 -1
  59. package/dist/version.d.ts +8 -0
  60. package/dist/version.d.ts.map +1 -0
  61. package/dist/version.js +19 -0
  62. package/dist/version.js.map +1 -0
  63. 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
- trigger: preConfig.triggerMode ?? 'legacy (browser wake regex)',
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
- capabilities.ttsProvider = preConfig.ttsProvider;
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.triggerMode)
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', { trigger: config.triggerMode ?? 'legacy (browser wake regex)' });
259
- if (config.triggerMode === 'regex' && !config.typesafeApiKey && flags.trigger !== 'regex') {
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
  */
@@ -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;AAC/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,WAAW,GAAG,IAAI,CAAC;IAChC,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;;;;;OAKG;IACH,UAAU,EAAE,OAAO,CAAC;CACrB;AAiBD,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;CACpB;AAgCD;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,YAAY,CAMhD;AAoCD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,QAAQ,GAAG,YAAY,CAwE/D"}
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
- triggerMode: resolveTriggerMode(flags.trigger ?? process.env.VOXAGENT_TRIGGER, typesafeApiKey !== null),
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
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
@@ -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;;;;;;;;;;;;;;;;GAgBG;AAQH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAiB3E,qBAAa,YAAa,YAAW,WAAW;IASlC,OAAO,CAAC,QAAQ,CAAC,OAAO;IARpC,QAAQ,CAAC,OAAO,EAAG,QAAQ,CAAU;IAErC,kFAAkF;IAClF,OAAO,CAAC,SAAS,CAAuB;IAExC,6DAA6D;IAC7D,OAAO,CAAC,WAAW,CAAsB;gBAEZ,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;IA+N5E,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;YAWd,cAAc;YA4Bd,eAAe;YAiBf,kBAAkB;CAajC"}
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"}
@@ -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
- const BRIDGE_VERSION = '0.1.0';
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: input.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
- const reason = undefined;
177
- let resultReason = 'completed';
178
- let resultMessage;
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
- finalText = message.result;
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
- // We normalize to integers and zero-fill so the cloud doesn't
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
- const inputTokens = Number(usage.input_tokens ?? 0) || 0;
207
- const outputTokens = Number(usage.output_tokens ?? 0) || 0;
208
- const cachedInputTokens = Number(usage.cache_read_input_tokens ?? 0) || 0;
209
- yield {
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
- yield {
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