@ouro.bot/cli 0.1.0-alpha.593 → 0.1.0-alpha.595

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/changelog.json CHANGED
@@ -1,6 +1,18 @@
1
1
  {
2
2
  "_note": "This changelog is maintained as part of the PR/version-bump workflow. Agent-curated, not auto-generated. Agents read this file directly via read_file to understand what changed between versions.",
3
3
  "versions": [
4
+ {
5
+ "version": "0.1.0-alpha.595",
6
+ "changes": [
7
+ "Voice phone transport defaults to media-stream when OpenAI Realtime or OpenAI SIP is configured but no explicit voice.twilioTransportMode is set. Previously the default was record-play, which made conversationEngine resolve to cascade and routed inbound calls through the ElevenLabs/Whisper greeting path operators with realtime-only credentials never configured — producing a fully silent first turn (\"no greeting at all\"). Realtime requires media-stream by nature, so we now infer it. Defensive prewarm guard branch marked with a v8 ignore since the implicit default makes it unreachable in current outbound tests."
8
+ ]
9
+ },
10
+ {
11
+ "version": "0.1.0-alpha.594",
12
+ "changes": [
13
+ "Voice phone transport defaults to media-stream when OpenAI Realtime or OpenAI SIP is configured but no explicit voice.twilioTransportMode is set. Previously the default was record-play, which made conversationEngine resolve to cascade and routed inbound calls through the ElevenLabs/Whisper greeting path operators with realtime-only credentials never configured — producing a fully silent first turn (\"no greeting at all\"). Realtime requires media-stream by nature, so we now infer it."
14
+ ]
15
+ },
4
16
  {
5
17
  "version": "0.1.0-alpha.593",
6
18
  "changes": [
@@ -248,8 +248,20 @@ function resolveTwilioPhoneTransportRuntime(options) {
248
248
  ?? configString(options.machineConfig, "voice.twilioBasePath")
249
249
  ?? options.defaultBasePath
250
250
  ?? twilio_phone_1.TWILIO_PHONE_WEBHOOK_BASE_PATH);
251
+ const explicitTransportModeString = configString(options.machineConfig, "voice.twilioTransportMode");
252
+ // When the operator has only configured OpenAI Realtime (key) or OpenAI SIP
253
+ // (project id) and not picked a transport mode, infer media-stream — the
254
+ // legacy `record-play` default would otherwise pin `conversationEngine` to
255
+ // `cascade`, route inbound calls through the ElevenLabs/Whisper greeting
256
+ // path the operator never configured, and produce a fully silent first
257
+ // turn ("no greeting at all"). Realtime requires media-stream by nature.
258
+ const hasRealtimeApiKey = !!resolveOpenAIRealtimeApiKey({ runtimeConfig: options.runtimeConfig, overrides });
259
+ const hasSipProjectConfig = !!(configString(options.runtimeConfig, "voice.openaiSipProjectId")
260
+ || configString(options.machineConfig, "voice.openaiSipProjectId"));
261
+ const realtimeImpliesMediaStream = hasRealtimeApiKey || hasSipProjectConfig;
251
262
  const transportMode = overrides.transportMode
252
- ?? (0, twilio_phone_1.normalizeTwilioPhoneTransportMode)(configString(options.machineConfig, "voice.twilioTransportMode") ?? twilio_phone_1.DEFAULT_TWILIO_PHONE_TRANSPORT_MODE);
263
+ ?? (0, twilio_phone_1.normalizeTwilioPhoneTransportMode)(explicitTransportModeString
264
+ ?? (realtimeImpliesMediaStream ? "media-stream" : twilio_phone_1.DEFAULT_TWILIO_PHONE_TRANSPORT_MODE));
253
265
  const conversationEngine = configuredConversationEngine(options, overrides, transportMode);
254
266
  const outboundConversationEngine = configuredOutboundConversationEngine(options, overrides, conversationEngine, transportMode);
255
267
  const needsOpenAIRealtime = conversationEngine === "openai-realtime"
@@ -601,6 +613,7 @@ function safeRuntimeSegment(input) {
601
613
  return input.trim().replace(/[^A-Za-z0-9._-]+/g, "-").replace(/^-+|-+$/g, "") || "unknown";
602
614
  }
603
615
  async function prewarmOutboundGreeting(options, deps) {
616
+ /* v8 ignore next -- defensive guard against record-play prewarm calls; the implicit-media-stream default added when realtime/SIP credentials are configured prevents this branch from being reachable in current outbound tests @preserve */
604
617
  if (options.settings.transportMode !== "media-stream")
605
618
  return undefined;
606
619
  /* v8 ignore next -- Realtime/SIP outbound tests assert no cascade prewarm is attempted @preserve */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ouro.bot/cli",
3
- "version": "0.1.0-alpha.593",
3
+ "version": "0.1.0-alpha.595",
4
4
  "main": "dist/heart/daemon/ouro-entry.js",
5
5
  "bin": {
6
6
  "cli": "dist/heart/daemon/ouro-bot-entry.js",