evo360-types 1.3.746 → 1.3.750

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.
@@ -63,6 +63,8 @@ export declare const zMessageMediaSchema: z.ZodObject<{
63
63
  filename: z.ZodOptional<z.ZodString>;
64
64
  caption: z.ZodOptional<z.ZodString>;
65
65
  meta_media_id: z.ZodOptional<z.ZodString>;
66
+ /** feat-303: áudio enviado como nota de voz (OGG/Opus + `voice: true` na Meta). */
67
+ voice: z.ZodOptional<z.ZodBoolean>;
66
68
  }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
67
69
  gcs_uri: z.ZodOptional<z.ZodString>;
68
70
  url: z.ZodOptional<z.ZodString>;
@@ -72,6 +74,8 @@ export declare const zMessageMediaSchema: z.ZodObject<{
72
74
  filename: z.ZodOptional<z.ZodString>;
73
75
  caption: z.ZodOptional<z.ZodString>;
74
76
  meta_media_id: z.ZodOptional<z.ZodString>;
77
+ /** feat-303: áudio enviado como nota de voz (OGG/Opus + `voice: true` na Meta). */
78
+ voice: z.ZodOptional<z.ZodBoolean>;
75
79
  }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
76
80
  gcs_uri: z.ZodOptional<z.ZodString>;
77
81
  url: z.ZodOptional<z.ZodString>;
@@ -81,6 +85,8 @@ export declare const zMessageMediaSchema: z.ZodObject<{
81
85
  filename: z.ZodOptional<z.ZodString>;
82
86
  caption: z.ZodOptional<z.ZodString>;
83
87
  meta_media_id: z.ZodOptional<z.ZodString>;
88
+ /** feat-303: áudio enviado como nota de voz (OGG/Opus + `voice: true` na Meta). */
89
+ voice: z.ZodOptional<z.ZodBoolean>;
84
90
  }, z.ZodTypeAny, "passthrough">>;
85
91
  export declare const zMessageCreatedBySchema: z.ZodObject<{
86
92
  type: z.ZodEnum<["human", "automation", "system"]>;
@@ -209,6 +215,8 @@ export declare const zThreadMessageSchema: z.ZodObject<{
209
215
  filename: z.ZodOptional<z.ZodString>;
210
216
  caption: z.ZodOptional<z.ZodString>;
211
217
  meta_media_id: z.ZodOptional<z.ZodString>;
218
+ /** feat-303: áudio enviado como nota de voz (OGG/Opus + `voice: true` na Meta). */
219
+ voice: z.ZodOptional<z.ZodBoolean>;
212
220
  }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
213
221
  gcs_uri: z.ZodOptional<z.ZodString>;
214
222
  url: z.ZodOptional<z.ZodString>;
@@ -218,6 +226,8 @@ export declare const zThreadMessageSchema: z.ZodObject<{
218
226
  filename: z.ZodOptional<z.ZodString>;
219
227
  caption: z.ZodOptional<z.ZodString>;
220
228
  meta_media_id: z.ZodOptional<z.ZodString>;
229
+ /** feat-303: áudio enviado como nota de voz (OGG/Opus + `voice: true` na Meta). */
230
+ voice: z.ZodOptional<z.ZodBoolean>;
221
231
  }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
222
232
  gcs_uri: z.ZodOptional<z.ZodString>;
223
233
  url: z.ZodOptional<z.ZodString>;
@@ -227,6 +237,8 @@ export declare const zThreadMessageSchema: z.ZodObject<{
227
237
  filename: z.ZodOptional<z.ZodString>;
228
238
  caption: z.ZodOptional<z.ZodString>;
229
239
  meta_media_id: z.ZodOptional<z.ZodString>;
240
+ /** feat-303: áudio enviado como nota de voz (OGG/Opus + `voice: true` na Meta). */
241
+ voice: z.ZodOptional<z.ZodBoolean>;
230
242
  }, z.ZodTypeAny, "passthrough">>>;
231
243
  location: z.ZodOptional<z.ZodObject<{
232
244
  latitude: z.ZodNumber;
@@ -536,6 +548,8 @@ export declare const zThreadMessageSchema: z.ZodObject<{
536
548
  filename: z.ZodOptional<z.ZodString>;
537
549
  caption: z.ZodOptional<z.ZodString>;
538
550
  meta_media_id: z.ZodOptional<z.ZodString>;
551
+ /** feat-303: áudio enviado como nota de voz (OGG/Opus + `voice: true` na Meta). */
552
+ voice: z.ZodOptional<z.ZodBoolean>;
539
553
  }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
540
554
  gcs_uri: z.ZodOptional<z.ZodString>;
541
555
  url: z.ZodOptional<z.ZodString>;
@@ -545,6 +559,8 @@ export declare const zThreadMessageSchema: z.ZodObject<{
545
559
  filename: z.ZodOptional<z.ZodString>;
546
560
  caption: z.ZodOptional<z.ZodString>;
547
561
  meta_media_id: z.ZodOptional<z.ZodString>;
562
+ /** feat-303: áudio enviado como nota de voz (OGG/Opus + `voice: true` na Meta). */
563
+ voice: z.ZodOptional<z.ZodBoolean>;
548
564
  }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
549
565
  gcs_uri: z.ZodOptional<z.ZodString>;
550
566
  url: z.ZodOptional<z.ZodString>;
@@ -554,6 +570,8 @@ export declare const zThreadMessageSchema: z.ZodObject<{
554
570
  filename: z.ZodOptional<z.ZodString>;
555
571
  caption: z.ZodOptional<z.ZodString>;
556
572
  meta_media_id: z.ZodOptional<z.ZodString>;
573
+ /** feat-303: áudio enviado como nota de voz (OGG/Opus + `voice: true` na Meta). */
574
+ voice: z.ZodOptional<z.ZodBoolean>;
557
575
  }, z.ZodTypeAny, "passthrough">>>;
558
576
  location: z.ZodOptional<z.ZodObject<{
559
577
  latitude: z.ZodNumber;
@@ -863,6 +881,8 @@ export declare const zThreadMessageSchema: z.ZodObject<{
863
881
  filename: z.ZodOptional<z.ZodString>;
864
882
  caption: z.ZodOptional<z.ZodString>;
865
883
  meta_media_id: z.ZodOptional<z.ZodString>;
884
+ /** feat-303: áudio enviado como nota de voz (OGG/Opus + `voice: true` na Meta). */
885
+ voice: z.ZodOptional<z.ZodBoolean>;
866
886
  }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
867
887
  gcs_uri: z.ZodOptional<z.ZodString>;
868
888
  url: z.ZodOptional<z.ZodString>;
@@ -872,6 +892,8 @@ export declare const zThreadMessageSchema: z.ZodObject<{
872
892
  filename: z.ZodOptional<z.ZodString>;
873
893
  caption: z.ZodOptional<z.ZodString>;
874
894
  meta_media_id: z.ZodOptional<z.ZodString>;
895
+ /** feat-303: áudio enviado como nota de voz (OGG/Opus + `voice: true` na Meta). */
896
+ voice: z.ZodOptional<z.ZodBoolean>;
875
897
  }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
876
898
  gcs_uri: z.ZodOptional<z.ZodString>;
877
899
  url: z.ZodOptional<z.ZodString>;
@@ -881,6 +903,8 @@ export declare const zThreadMessageSchema: z.ZodObject<{
881
903
  filename: z.ZodOptional<z.ZodString>;
882
904
  caption: z.ZodOptional<z.ZodString>;
883
905
  meta_media_id: z.ZodOptional<z.ZodString>;
906
+ /** feat-303: áudio enviado como nota de voz (OGG/Opus + `voice: true` na Meta). */
907
+ voice: z.ZodOptional<z.ZodBoolean>;
884
908
  }, z.ZodTypeAny, "passthrough">>>;
885
909
  location: z.ZodOptional<z.ZodObject<{
886
910
  latitude: z.ZodNumber;
@@ -23,6 +23,8 @@ exports.zMessageMediaSchema = zod_1.z.object({
23
23
  filename: zod_1.z.string().optional(),
24
24
  caption: zod_1.z.string().optional(),
25
25
  meta_media_id: zod_1.z.string().optional(),
26
+ /** feat-303: áudio enviado como nota de voz (OGG/Opus + `voice: true` na Meta). */
27
+ voice: zod_1.z.boolean().optional(),
26
28
  }).passthrough();
27
29
  exports.zMessageCreatedBySchema = zod_1.z.object({
28
30
  type: zod_1.z.enum(['human', 'automation', 'system']),
@@ -22,6 +22,8 @@ export const zMessageMediaSchema = z.object({
22
22
  filename: z.string().optional(),
23
23
  caption: z.string().optional(),
24
24
  meta_media_id: z.string().optional(),
25
+ /** feat-303: áudio enviado como nota de voz (OGG/Opus + `voice: true` na Meta). */
26
+ voice: z.boolean().optional(),
25
27
  }).passthrough();
26
28
 
27
29
  export const zMessageCreatedBySchema = z.object({
@@ -1611,6 +1611,175 @@ export declare const zHubiaRuleSchema: z.ZodEffects<z.ZodObject<{
1611
1611
  /** Aborta sequência de ações no primeiro erro. */
1612
1612
  stop_actions_on_error: z.ZodDefault<z.ZodBoolean>;
1613
1613
  }, z.ZodTypeAny, "passthrough">>;
1614
+ /** Vozes do `gpt-4o-mini-tts` oferecidas na UI. O schema aceita qualquer string
1615
+ * para o provedor poder mudar sem novo contrato. */
1616
+ export declare const HUBIA_VOICE_REPLY_OPENAI_VOICES: readonly ["alloy", "ash", "ballad", "coral", "echo", "fable", "nova", "onyx", "sage", "shimmer", "verse", "marin", "cedar"];
1617
+ export declare const HUBIA_VOICE_REPLY_DEFAULT_VOICE = "coral";
1618
+ /** feat-303 F1.1: provedores de TTS. Ausente no binding = `openai`. */
1619
+ export declare const HUBIA_VOICE_REPLY_PROVIDERS: readonly ["openai", "elevenlabs"];
1620
+ export declare const zHubiaVoiceProviderSchema: z.ZodEnum<["openai", "elevenlabs"]>;
1621
+ export type HubiaVoiceProvider = z.infer<typeof zHubiaVoiceProviderSchema>;
1622
+ /** Modelo usado quando o binding não define `model`. */
1623
+ export declare const HUBIA_VOICE_REPLY_DEFAULT_MODEL: Record<HubiaVoiceProvider, string>;
1624
+ /** Modelos da ElevenLabs oferecidos na UI (o schema aceita qualquer string). */
1625
+ export declare const HUBIA_VOICE_REPLY_ELEVENLABS_MODELS: readonly ["eleven_v4", "eleven_v3", "eleven_multilingual_v2", "eleven_flash_v2_5"];
1626
+ /** Faixa de `speed` aceita pela ElevenLabs; o runtime limita a ela. */
1627
+ export declare const HUBIA_VOICE_REPLY_ELEVENLABS_SPEED: {
1628
+ readonly min: 0.7;
1629
+ readonly max: 1.2;
1630
+ };
1631
+ /** Liga a resposta em áudio no binding. QUANDO usar áudio é regra do prompt do
1632
+ * binding (o LLM decide por turno), não deste objeto. */
1633
+ export declare const zHubiaVoiceReplySchema: z.ZodObject<{
1634
+ enabled: z.ZodDefault<z.ZodBoolean>;
1635
+ /** Ausente = `openai` (bindings gravados antes da F1.1). */
1636
+ provider: z.ZodOptional<z.ZodEnum<["openai", "elevenlabs"]>>;
1637
+ /** Ausente = `HUBIA_VOICE_REPLY_DEFAULT_MODEL[provider]`. */
1638
+ model: z.ZodOptional<z.ZodString>;
1639
+ /** OpenAI: nome da voz (`coral`). ElevenLabs: `voice_id` (`RGymW84CSmfVugnA5tvA`). */
1640
+ voice: z.ZodDefault<z.ZodString>;
1641
+ /** Tom/estilo da fala ("cordial, ritmo calmo"). Só a OpenAI usa. */
1642
+ instructions: z.ZodOptional<z.ZodString>;
1643
+ /** 1.0 = normal. Na ElevenLabs o runtime limita a 0.7–1.2. */
1644
+ speed: z.ZodOptional<z.ZodNumber>;
1645
+ /** Ajustes da voz na ElevenLabs (`voice_settings`). Ausente = os da voz. */
1646
+ elevenlabs: z.ZodOptional<z.ZodObject<{
1647
+ stability: z.ZodOptional<z.ZodNumber>;
1648
+ similarity_boost: z.ZodOptional<z.ZodNumber>;
1649
+ style: z.ZodOptional<z.ZodNumber>;
1650
+ }, "strip", z.ZodTypeAny, {
1651
+ stability?: number | undefined;
1652
+ similarity_boost?: number | undefined;
1653
+ style?: number | undefined;
1654
+ }, {
1655
+ stability?: number | undefined;
1656
+ similarity_boost?: number | undefined;
1657
+ style?: number | undefined;
1658
+ }>>;
1659
+ }, "strip", z.ZodTypeAny, {
1660
+ enabled: boolean;
1661
+ voice: string;
1662
+ provider?: "openai" | "elevenlabs" | undefined;
1663
+ model?: string | undefined;
1664
+ elevenlabs?: {
1665
+ stability?: number | undefined;
1666
+ similarity_boost?: number | undefined;
1667
+ style?: number | undefined;
1668
+ } | undefined;
1669
+ instructions?: string | undefined;
1670
+ speed?: number | undefined;
1671
+ }, {
1672
+ enabled?: boolean | undefined;
1673
+ provider?: "openai" | "elevenlabs" | undefined;
1674
+ model?: string | undefined;
1675
+ voice?: string | undefined;
1676
+ elevenlabs?: {
1677
+ stability?: number | undefined;
1678
+ similarity_boost?: number | undefined;
1679
+ style?: number | undefined;
1680
+ } | undefined;
1681
+ instructions?: string | undefined;
1682
+ speed?: number | undefined;
1683
+ }>;
1684
+ export type IHubiaVoiceReply = z.infer<typeof zHubiaVoiceReplySchema>;
1685
+ export declare const zHubiaResponseModeSchema: z.ZodEnum<["text", "audio"]>;
1686
+ export type HubiaResponseMode = z.infer<typeof zHubiaResponseModeSchema>;
1687
+ /** `conversations/{id}.pending_suggestion` (modo hybrid_assist). */
1688
+ export declare const zHubiaPendingSuggestionSchema: z.ZodObject<{
1689
+ execution_id: z.ZodString;
1690
+ messages: z.ZodArray<z.ZodString, "many">;
1691
+ created_at: z.ZodAny;
1692
+ was_used: z.ZodOptional<z.ZodBoolean>;
1693
+ /** Escolha do LLM; pré-marca "enviar como áudio" na caixa de sugestão. */
1694
+ response_mode: z.ZodOptional<z.ZodEnum<["text", "audio"]>>;
1695
+ /** Binding + canal permitiam áudio no turno da sugestão. */
1696
+ voice_available: z.ZodOptional<z.ZodBoolean>;
1697
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
1698
+ execution_id: z.ZodString;
1699
+ messages: z.ZodArray<z.ZodString, "many">;
1700
+ created_at: z.ZodAny;
1701
+ was_used: z.ZodOptional<z.ZodBoolean>;
1702
+ /** Escolha do LLM; pré-marca "enviar como áudio" na caixa de sugestão. */
1703
+ response_mode: z.ZodOptional<z.ZodEnum<["text", "audio"]>>;
1704
+ /** Binding + canal permitiam áudio no turno da sugestão. */
1705
+ voice_available: z.ZodOptional<z.ZodBoolean>;
1706
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
1707
+ execution_id: z.ZodString;
1708
+ messages: z.ZodArray<z.ZodString, "many">;
1709
+ created_at: z.ZodAny;
1710
+ was_used: z.ZodOptional<z.ZodBoolean>;
1711
+ /** Escolha do LLM; pré-marca "enviar como áudio" na caixa de sugestão. */
1712
+ response_mode: z.ZodOptional<z.ZodEnum<["text", "audio"]>>;
1713
+ /** Binding + canal permitiam áudio no turno da sugestão. */
1714
+ voice_available: z.ZodOptional<z.ZodBoolean>;
1715
+ }, z.ZodTypeAny, "passthrough">>;
1716
+ export type IHubiaPendingSuggestion = z.infer<typeof zHubiaPendingSuggestionSchema>;
1717
+ /** Gravado na mensagem enviada a partir de uma sugestão da HubIA. */
1718
+ export declare const zHubiaSuggestionMessageRefSchema: z.ZodObject<{
1719
+ execution_id: z.ZodString;
1720
+ /** O operador alterou o texto antes de enviar. */
1721
+ edited: z.ZodBoolean;
1722
+ mode: z.ZodEnum<["text", "audio"]>;
1723
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
1724
+ execution_id: z.ZodString;
1725
+ /** O operador alterou o texto antes de enviar. */
1726
+ edited: z.ZodBoolean;
1727
+ mode: z.ZodEnum<["text", "audio"]>;
1728
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
1729
+ execution_id: z.ZodString;
1730
+ /** O operador alterou o texto antes de enviar. */
1731
+ edited: z.ZodBoolean;
1732
+ mode: z.ZodEnum<["text", "audio"]>;
1733
+ }, z.ZodTypeAny, "passthrough">>;
1734
+ export type IHubiaSuggestionMessageRef = z.infer<typeof zHubiaSuggestionMessageRefSchema>;
1735
+ /** Desfecho da sugestão, gravado na execução que a gerou. */
1736
+ export declare const zHubiaSuggestionOutcomeSchema: z.ZodObject<{
1737
+ status: z.ZodEnum<["sent", "sent_edited", "discarded"]>;
1738
+ mode: z.ZodOptional<z.ZodEnum<["text", "audio"]>>;
1739
+ by_user_id: z.ZodOptional<z.ZodNullable<z.ZodString>>;
1740
+ at: z.ZodAny;
1741
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
1742
+ status: z.ZodEnum<["sent", "sent_edited", "discarded"]>;
1743
+ mode: z.ZodOptional<z.ZodEnum<["text", "audio"]>>;
1744
+ by_user_id: z.ZodOptional<z.ZodNullable<z.ZodString>>;
1745
+ at: z.ZodAny;
1746
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
1747
+ status: z.ZodEnum<["sent", "sent_edited", "discarded"]>;
1748
+ mode: z.ZodOptional<z.ZodEnum<["text", "audio"]>>;
1749
+ by_user_id: z.ZodOptional<z.ZodNullable<z.ZodString>>;
1750
+ at: z.ZodAny;
1751
+ }, z.ZodTypeAny, "passthrough">>;
1752
+ export type IHubiaSuggestionOutcome = z.infer<typeof zHubiaSuggestionOutcomeSchema>;
1753
+ /** Metadados da nota de voz gerada pela HubIA, gravados na mensagem. */
1754
+ export declare const zHubiaTtsMessageMetaSchema: z.ZodObject<{
1755
+ /** F1.1. Ausente nas mensagens gravadas antes = `openai`. */
1756
+ provider: z.ZodOptional<z.ZodEnum<["openai", "elevenlabs"]>>;
1757
+ model: z.ZodString;
1758
+ voice: z.ZodString;
1759
+ format: z.ZodEnum<["ogg", "mp3"]>;
1760
+ chars: z.ZodNumber;
1761
+ duration_seconds: z.ZodNullable<z.ZodNumber>;
1762
+ execution_id: z.ZodOptional<z.ZodString>;
1763
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
1764
+ /** F1.1. Ausente nas mensagens gravadas antes = `openai`. */
1765
+ provider: z.ZodOptional<z.ZodEnum<["openai", "elevenlabs"]>>;
1766
+ model: z.ZodString;
1767
+ voice: z.ZodString;
1768
+ format: z.ZodEnum<["ogg", "mp3"]>;
1769
+ chars: z.ZodNumber;
1770
+ duration_seconds: z.ZodNullable<z.ZodNumber>;
1771
+ execution_id: z.ZodOptional<z.ZodString>;
1772
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
1773
+ /** F1.1. Ausente nas mensagens gravadas antes = `openai`. */
1774
+ provider: z.ZodOptional<z.ZodEnum<["openai", "elevenlabs"]>>;
1775
+ model: z.ZodString;
1776
+ voice: z.ZodString;
1777
+ format: z.ZodEnum<["ogg", "mp3"]>;
1778
+ chars: z.ZodNumber;
1779
+ duration_seconds: z.ZodNullable<z.ZodNumber>;
1780
+ execution_id: z.ZodOptional<z.ZodString>;
1781
+ }, z.ZodTypeAny, "passthrough">>;
1782
+ export type IHubiaTtsMessageMeta = z.infer<typeof zHubiaTtsMessageMetaSchema>;
1614
1783
  export declare const zAiBindingSchema: z.ZodObject<{
1615
1784
  id: z.ZodString;
1616
1785
  ref: z.ZodAny;
@@ -2377,6 +2546,59 @@ export declare const zAiBindingSchema: z.ZodObject<{
2377
2546
  * com `hubia` em `usable_for`) usada neste departamento. Vence o
2378
2547
  * `llm_connection_id` do canal. `null`/ausente = herda do canal. */
2379
2548
  llm_connection_id: z.ZodOptional<z.ZodNullable<z.ZodString>>;
2549
+ /** Ausente/`enabled: false` = HubIA só responde em texto. Exige o contrato
2550
+ * estruturado (`respond_to_contact`) ligado no canal. */
2551
+ voice_reply: z.ZodOptional<z.ZodObject<{
2552
+ enabled: z.ZodDefault<z.ZodBoolean>;
2553
+ /** Ausente = `openai` (bindings gravados antes da F1.1). */
2554
+ provider: z.ZodOptional<z.ZodEnum<["openai", "elevenlabs"]>>;
2555
+ /** Ausente = `HUBIA_VOICE_REPLY_DEFAULT_MODEL[provider]`. */
2556
+ model: z.ZodOptional<z.ZodString>;
2557
+ /** OpenAI: nome da voz (`coral`). ElevenLabs: `voice_id` (`RGymW84CSmfVugnA5tvA`). */
2558
+ voice: z.ZodDefault<z.ZodString>;
2559
+ /** Tom/estilo da fala ("cordial, ritmo calmo"). Só a OpenAI usa. */
2560
+ instructions: z.ZodOptional<z.ZodString>;
2561
+ /** 1.0 = normal. Na ElevenLabs o runtime limita a 0.7–1.2. */
2562
+ speed: z.ZodOptional<z.ZodNumber>;
2563
+ /** Ajustes da voz na ElevenLabs (`voice_settings`). Ausente = os da voz. */
2564
+ elevenlabs: z.ZodOptional<z.ZodObject<{
2565
+ stability: z.ZodOptional<z.ZodNumber>;
2566
+ similarity_boost: z.ZodOptional<z.ZodNumber>;
2567
+ style: z.ZodOptional<z.ZodNumber>;
2568
+ }, "strip", z.ZodTypeAny, {
2569
+ stability?: number | undefined;
2570
+ similarity_boost?: number | undefined;
2571
+ style?: number | undefined;
2572
+ }, {
2573
+ stability?: number | undefined;
2574
+ similarity_boost?: number | undefined;
2575
+ style?: number | undefined;
2576
+ }>>;
2577
+ }, "strip", z.ZodTypeAny, {
2578
+ enabled: boolean;
2579
+ voice: string;
2580
+ provider?: "openai" | "elevenlabs" | undefined;
2581
+ model?: string | undefined;
2582
+ elevenlabs?: {
2583
+ stability?: number | undefined;
2584
+ similarity_boost?: number | undefined;
2585
+ style?: number | undefined;
2586
+ } | undefined;
2587
+ instructions?: string | undefined;
2588
+ speed?: number | undefined;
2589
+ }, {
2590
+ enabled?: boolean | undefined;
2591
+ provider?: "openai" | "elevenlabs" | undefined;
2592
+ model?: string | undefined;
2593
+ voice?: string | undefined;
2594
+ elevenlabs?: {
2595
+ stability?: number | undefined;
2596
+ similarity_boost?: number | undefined;
2597
+ style?: number | undefined;
2598
+ } | undefined;
2599
+ instructions?: string | undefined;
2600
+ speed?: number | undefined;
2601
+ }>>;
2380
2602
  }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
2381
2603
  id: z.ZodString;
2382
2604
  ref: z.ZodAny;
@@ -3143,6 +3365,59 @@ export declare const zAiBindingSchema: z.ZodObject<{
3143
3365
  * com `hubia` em `usable_for`) usada neste departamento. Vence o
3144
3366
  * `llm_connection_id` do canal. `null`/ausente = herda do canal. */
3145
3367
  llm_connection_id: z.ZodOptional<z.ZodNullable<z.ZodString>>;
3368
+ /** Ausente/`enabled: false` = HubIA só responde em texto. Exige o contrato
3369
+ * estruturado (`respond_to_contact`) ligado no canal. */
3370
+ voice_reply: z.ZodOptional<z.ZodObject<{
3371
+ enabled: z.ZodDefault<z.ZodBoolean>;
3372
+ /** Ausente = `openai` (bindings gravados antes da F1.1). */
3373
+ provider: z.ZodOptional<z.ZodEnum<["openai", "elevenlabs"]>>;
3374
+ /** Ausente = `HUBIA_VOICE_REPLY_DEFAULT_MODEL[provider]`. */
3375
+ model: z.ZodOptional<z.ZodString>;
3376
+ /** OpenAI: nome da voz (`coral`). ElevenLabs: `voice_id` (`RGymW84CSmfVugnA5tvA`). */
3377
+ voice: z.ZodDefault<z.ZodString>;
3378
+ /** Tom/estilo da fala ("cordial, ritmo calmo"). Só a OpenAI usa. */
3379
+ instructions: z.ZodOptional<z.ZodString>;
3380
+ /** 1.0 = normal. Na ElevenLabs o runtime limita a 0.7–1.2. */
3381
+ speed: z.ZodOptional<z.ZodNumber>;
3382
+ /** Ajustes da voz na ElevenLabs (`voice_settings`). Ausente = os da voz. */
3383
+ elevenlabs: z.ZodOptional<z.ZodObject<{
3384
+ stability: z.ZodOptional<z.ZodNumber>;
3385
+ similarity_boost: z.ZodOptional<z.ZodNumber>;
3386
+ style: z.ZodOptional<z.ZodNumber>;
3387
+ }, "strip", z.ZodTypeAny, {
3388
+ stability?: number | undefined;
3389
+ similarity_boost?: number | undefined;
3390
+ style?: number | undefined;
3391
+ }, {
3392
+ stability?: number | undefined;
3393
+ similarity_boost?: number | undefined;
3394
+ style?: number | undefined;
3395
+ }>>;
3396
+ }, "strip", z.ZodTypeAny, {
3397
+ enabled: boolean;
3398
+ voice: string;
3399
+ provider?: "openai" | "elevenlabs" | undefined;
3400
+ model?: string | undefined;
3401
+ elevenlabs?: {
3402
+ stability?: number | undefined;
3403
+ similarity_boost?: number | undefined;
3404
+ style?: number | undefined;
3405
+ } | undefined;
3406
+ instructions?: string | undefined;
3407
+ speed?: number | undefined;
3408
+ }, {
3409
+ enabled?: boolean | undefined;
3410
+ provider?: "openai" | "elevenlabs" | undefined;
3411
+ model?: string | undefined;
3412
+ voice?: string | undefined;
3413
+ elevenlabs?: {
3414
+ stability?: number | undefined;
3415
+ similarity_boost?: number | undefined;
3416
+ style?: number | undefined;
3417
+ } | undefined;
3418
+ instructions?: string | undefined;
3419
+ speed?: number | undefined;
3420
+ }>>;
3146
3421
  }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
3147
3422
  id: z.ZodString;
3148
3423
  ref: z.ZodAny;
@@ -3909,6 +4184,59 @@ export declare const zAiBindingSchema: z.ZodObject<{
3909
4184
  * com `hubia` em `usable_for`) usada neste departamento. Vence o
3910
4185
  * `llm_connection_id` do canal. `null`/ausente = herda do canal. */
3911
4186
  llm_connection_id: z.ZodOptional<z.ZodNullable<z.ZodString>>;
4187
+ /** Ausente/`enabled: false` = HubIA só responde em texto. Exige o contrato
4188
+ * estruturado (`respond_to_contact`) ligado no canal. */
4189
+ voice_reply: z.ZodOptional<z.ZodObject<{
4190
+ enabled: z.ZodDefault<z.ZodBoolean>;
4191
+ /** Ausente = `openai` (bindings gravados antes da F1.1). */
4192
+ provider: z.ZodOptional<z.ZodEnum<["openai", "elevenlabs"]>>;
4193
+ /** Ausente = `HUBIA_VOICE_REPLY_DEFAULT_MODEL[provider]`. */
4194
+ model: z.ZodOptional<z.ZodString>;
4195
+ /** OpenAI: nome da voz (`coral`). ElevenLabs: `voice_id` (`RGymW84CSmfVugnA5tvA`). */
4196
+ voice: z.ZodDefault<z.ZodString>;
4197
+ /** Tom/estilo da fala ("cordial, ritmo calmo"). Só a OpenAI usa. */
4198
+ instructions: z.ZodOptional<z.ZodString>;
4199
+ /** 1.0 = normal. Na ElevenLabs o runtime limita a 0.7–1.2. */
4200
+ speed: z.ZodOptional<z.ZodNumber>;
4201
+ /** Ajustes da voz na ElevenLabs (`voice_settings`). Ausente = os da voz. */
4202
+ elevenlabs: z.ZodOptional<z.ZodObject<{
4203
+ stability: z.ZodOptional<z.ZodNumber>;
4204
+ similarity_boost: z.ZodOptional<z.ZodNumber>;
4205
+ style: z.ZodOptional<z.ZodNumber>;
4206
+ }, "strip", z.ZodTypeAny, {
4207
+ stability?: number | undefined;
4208
+ similarity_boost?: number | undefined;
4209
+ style?: number | undefined;
4210
+ }, {
4211
+ stability?: number | undefined;
4212
+ similarity_boost?: number | undefined;
4213
+ style?: number | undefined;
4214
+ }>>;
4215
+ }, "strip", z.ZodTypeAny, {
4216
+ enabled: boolean;
4217
+ voice: string;
4218
+ provider?: "openai" | "elevenlabs" | undefined;
4219
+ model?: string | undefined;
4220
+ elevenlabs?: {
4221
+ stability?: number | undefined;
4222
+ similarity_boost?: number | undefined;
4223
+ style?: number | undefined;
4224
+ } | undefined;
4225
+ instructions?: string | undefined;
4226
+ speed?: number | undefined;
4227
+ }, {
4228
+ enabled?: boolean | undefined;
4229
+ provider?: "openai" | "elevenlabs" | undefined;
4230
+ model?: string | undefined;
4231
+ voice?: string | undefined;
4232
+ elevenlabs?: {
4233
+ stability?: number | undefined;
4234
+ similarity_boost?: number | undefined;
4235
+ style?: number | undefined;
4236
+ } | undefined;
4237
+ instructions?: string | undefined;
4238
+ speed?: number | undefined;
4239
+ }>>;
3912
4240
  }, z.ZodTypeAny, "passthrough">>;
3913
4241
  export type IAiBinding = z.infer<typeof zAiBindingSchema>;
3914
4242
  /** Disposição de fechamento publicada no evento. Os bridges publicam `null`
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.zHubiaTicketClosedEventSchema = exports.zHubiaTicketClosedCloseSchema = exports.zAiBindingSchema = exports.zHubiaRuleSchema = exports.zHubiaRulesModeSchema = exports.zSendQuickReplyActionInputSchema = exports.zCreateTaskActionInputSchema = exports.zHubiaRuleActionSchema = exports.zHubiaRuleScopeSchema = exports.zHubiaConditionGroupSchema = exports.zHubiaConditionSchema = exports.zHubiaScheduleSchema = exports.zHubiaScheduleWindowSchema = exports.zHubiaConditionOpSchema = exports.zHubiaOutboundSourceSchema = exports.zHubiaRuleAppliesToSchema = exports.zHubiaRuleOutcomeSchema = exports.zHubiaRuleTriggerSchema = exports.zHubiaRulePhaseSchema = exports.zHubiaConversationModeSchema = exports.zHubiaConversationMessageSchema = exports.zHubiaV1ChannelConfigSchema = exports.zHubiaAttendanceModeSchema = void 0;
3
+ exports.zHubiaTicketClosedEventSchema = exports.zHubiaTicketClosedCloseSchema = exports.zAiBindingSchema = exports.zHubiaTtsMessageMetaSchema = exports.zHubiaSuggestionOutcomeSchema = exports.zHubiaSuggestionMessageRefSchema = exports.zHubiaPendingSuggestionSchema = exports.zHubiaResponseModeSchema = exports.zHubiaVoiceReplySchema = exports.HUBIA_VOICE_REPLY_ELEVENLABS_SPEED = exports.HUBIA_VOICE_REPLY_ELEVENLABS_MODELS = exports.HUBIA_VOICE_REPLY_DEFAULT_MODEL = exports.zHubiaVoiceProviderSchema = exports.HUBIA_VOICE_REPLY_PROVIDERS = exports.HUBIA_VOICE_REPLY_DEFAULT_VOICE = exports.HUBIA_VOICE_REPLY_OPENAI_VOICES = exports.zHubiaRuleSchema = exports.zHubiaRulesModeSchema = exports.zSendQuickReplyActionInputSchema = exports.zCreateTaskActionInputSchema = exports.zHubiaRuleActionSchema = exports.zHubiaRuleScopeSchema = exports.zHubiaConditionGroupSchema = exports.zHubiaConditionSchema = exports.zHubiaScheduleSchema = exports.zHubiaScheduleWindowSchema = exports.zHubiaConditionOpSchema = exports.zHubiaOutboundSourceSchema = exports.zHubiaRuleAppliesToSchema = exports.zHubiaRuleOutcomeSchema = exports.zHubiaRuleTriggerSchema = exports.zHubiaRulePhaseSchema = exports.zHubiaConversationModeSchema = exports.zHubiaConversationMessageSchema = exports.zHubiaV1ChannelConfigSchema = exports.zHubiaAttendanceModeSchema = void 0;
4
4
  const zod_1 = require("zod");
5
5
  const zod_schemas_1 = require("../../shared/zod-schemas");
6
6
  const zod_schemas_2 = require("../../evo-csq/zod-schemas");
@@ -350,6 +350,86 @@ const zHubiaPromptOverridesSchema = zod_1.z.object({
350
350
  routing: zod_1.z.string().optional(),
351
351
  tool_usage: zod_1.z.string().optional(),
352
352
  });
353
+ // ───────── Resposta em áudio (feat-303) ─────────
354
+ /** Vozes do `gpt-4o-mini-tts` oferecidas na UI. O schema aceita qualquer string
355
+ * para o provedor poder mudar sem novo contrato. */
356
+ exports.HUBIA_VOICE_REPLY_OPENAI_VOICES = [
357
+ 'alloy', 'ash', 'ballad', 'coral', 'echo', 'fable', 'nova',
358
+ 'onyx', 'sage', 'shimmer', 'verse', 'marin', 'cedar',
359
+ ];
360
+ exports.HUBIA_VOICE_REPLY_DEFAULT_VOICE = 'coral';
361
+ /** feat-303 F1.1: provedores de TTS. Ausente no binding = `openai`. */
362
+ exports.HUBIA_VOICE_REPLY_PROVIDERS = ['openai', 'elevenlabs'];
363
+ exports.zHubiaVoiceProviderSchema = zod_1.z.enum(exports.HUBIA_VOICE_REPLY_PROVIDERS);
364
+ /** Modelo usado quando o binding não define `model`. */
365
+ exports.HUBIA_VOICE_REPLY_DEFAULT_MODEL = {
366
+ openai: 'gpt-4o-mini-tts',
367
+ elevenlabs: 'eleven_v4',
368
+ };
369
+ /** Modelos da ElevenLabs oferecidos na UI (o schema aceita qualquer string). */
370
+ exports.HUBIA_VOICE_REPLY_ELEVENLABS_MODELS = [
371
+ 'eleven_v4', 'eleven_v3', 'eleven_multilingual_v2', 'eleven_flash_v2_5',
372
+ ];
373
+ /** Faixa de `speed` aceita pela ElevenLabs; o runtime limita a ela. */
374
+ exports.HUBIA_VOICE_REPLY_ELEVENLABS_SPEED = { min: 0.7, max: 1.2 };
375
+ /** Liga a resposta em áudio no binding. QUANDO usar áudio é regra do prompt do
376
+ * binding (o LLM decide por turno), não deste objeto. */
377
+ exports.zHubiaVoiceReplySchema = zod_1.z.object({
378
+ enabled: zod_1.z.boolean().default(false),
379
+ /** Ausente = `openai` (bindings gravados antes da F1.1). */
380
+ provider: exports.zHubiaVoiceProviderSchema.optional(),
381
+ /** Ausente = `HUBIA_VOICE_REPLY_DEFAULT_MODEL[provider]`. */
382
+ model: zod_1.z.string().min(1).max(60).optional(),
383
+ /** OpenAI: nome da voz (`coral`). ElevenLabs: `voice_id` (`RGymW84CSmfVugnA5tvA`). */
384
+ voice: zod_1.z.string().min(1).max(40).default(exports.HUBIA_VOICE_REPLY_DEFAULT_VOICE),
385
+ /** Tom/estilo da fala ("cordial, ritmo calmo"). Só a OpenAI usa. */
386
+ instructions: zod_1.z.string().max(1000).optional(),
387
+ /** 1.0 = normal. Na ElevenLabs o runtime limita a 0.7–1.2. */
388
+ speed: zod_1.z.number().min(0.75).max(1.5).optional(),
389
+ /** Ajustes da voz na ElevenLabs (`voice_settings`). Ausente = os da voz. */
390
+ elevenlabs: zod_1.z.object({
391
+ stability: zod_1.z.number().min(0).max(1).optional(),
392
+ similarity_boost: zod_1.z.number().min(0).max(1).optional(),
393
+ style: zod_1.z.number().min(0).max(1).optional(),
394
+ }).optional(),
395
+ });
396
+ exports.zHubiaResponseModeSchema = zod_1.z.enum(['text', 'audio']);
397
+ /** `conversations/{id}.pending_suggestion` (modo hybrid_assist). */
398
+ exports.zHubiaPendingSuggestionSchema = zod_1.z.object({
399
+ execution_id: zod_1.z.string(),
400
+ messages: zod_1.z.array(zod_1.z.string()),
401
+ created_at: zod_1.z.any(),
402
+ was_used: zod_1.z.boolean().optional(),
403
+ /** Escolha do LLM; pré-marca "enviar como áudio" na caixa de sugestão. */
404
+ response_mode: exports.zHubiaResponseModeSchema.optional(),
405
+ /** Binding + canal permitiam áudio no turno da sugestão. */
406
+ voice_available: zod_1.z.boolean().optional(),
407
+ }).passthrough();
408
+ /** Gravado na mensagem enviada a partir de uma sugestão da HubIA. */
409
+ exports.zHubiaSuggestionMessageRefSchema = zod_1.z.object({
410
+ execution_id: zod_1.z.string(),
411
+ /** O operador alterou o texto antes de enviar. */
412
+ edited: zod_1.z.boolean(),
413
+ mode: exports.zHubiaResponseModeSchema,
414
+ }).passthrough();
415
+ /** Desfecho da sugestão, gravado na execução que a gerou. */
416
+ exports.zHubiaSuggestionOutcomeSchema = zod_1.z.object({
417
+ status: zod_1.z.enum(['sent', 'sent_edited', 'discarded']),
418
+ mode: exports.zHubiaResponseModeSchema.optional(),
419
+ by_user_id: zod_1.z.string().nullable().optional(),
420
+ at: zod_1.z.any(),
421
+ }).passthrough();
422
+ /** Metadados da nota de voz gerada pela HubIA, gravados na mensagem. */
423
+ exports.zHubiaTtsMessageMetaSchema = zod_1.z.object({
424
+ /** F1.1. Ausente nas mensagens gravadas antes = `openai`. */
425
+ provider: exports.zHubiaVoiceProviderSchema.optional(),
426
+ model: zod_1.z.string(),
427
+ voice: zod_1.z.string(),
428
+ format: zod_1.z.enum(['ogg', 'mp3']),
429
+ chars: zod_1.z.number(),
430
+ duration_seconds: zod_1.z.number().nullable(),
431
+ execution_id: zod_1.z.string().optional(),
432
+ }).passthrough();
353
433
  exports.zAiBindingSchema = zod_schemas_1.zFireDocSchema.extend({
354
434
  agent_type: zod_1.z.string(), // 'evo-hubia-v1', future: 'evo-hubia-v2', etc.
355
435
  agent_config_id: zod_1.z.string(), // ref to the agent's channel config doc
@@ -397,6 +477,10 @@ exports.zAiBindingSchema = zod_schemas_1.zFireDocSchema.extend({
397
477
  * com `hubia` em `usable_for`) usada neste departamento. Vence o
398
478
  * `llm_connection_id` do canal. `null`/ausente = herda do canal. */
399
479
  llm_connection_id: zod_1.z.string().nullable().optional(),
480
+ // ───── Resposta em áudio (feat-303) ─────
481
+ /** Ausente/`enabled: false` = HubIA só responde em texto. Exige o contrato
482
+ * estruturado (`respond_to_contact`) ligado no canal. */
483
+ voice_reply: exports.zHubiaVoiceReplySchema.optional(),
400
484
  }).passthrough();
401
485
  // ───────── Evento `hubia-ticket-closed` (payload do tópico PubSub) ─────────
402
486
  /** Disposição de fechamento publicada no evento. Os bridges publicam `null`
@@ -397,6 +397,106 @@ const zHubiaPromptOverridesSchema = z.object({
397
397
  tool_usage: z.string().optional(),
398
398
  });
399
399
 
400
+ // ───────── Resposta em áudio (feat-303) ─────────
401
+
402
+ /** Vozes do `gpt-4o-mini-tts` oferecidas na UI. O schema aceita qualquer string
403
+ * para o provedor poder mudar sem novo contrato. */
404
+ export const HUBIA_VOICE_REPLY_OPENAI_VOICES = [
405
+ 'alloy', 'ash', 'ballad', 'coral', 'echo', 'fable', 'nova',
406
+ 'onyx', 'sage', 'shimmer', 'verse', 'marin', 'cedar',
407
+ ] as const;
408
+
409
+ export const HUBIA_VOICE_REPLY_DEFAULT_VOICE = 'coral';
410
+
411
+ /** feat-303 F1.1: provedores de TTS. Ausente no binding = `openai`. */
412
+ export const HUBIA_VOICE_REPLY_PROVIDERS = ['openai', 'elevenlabs'] as const;
413
+ export const zHubiaVoiceProviderSchema = z.enum(HUBIA_VOICE_REPLY_PROVIDERS);
414
+ export type HubiaVoiceProvider = z.infer<typeof zHubiaVoiceProviderSchema>;
415
+
416
+ /** Modelo usado quando o binding não define `model`. */
417
+ export const HUBIA_VOICE_REPLY_DEFAULT_MODEL: Record<HubiaVoiceProvider, string> = {
418
+ openai: 'gpt-4o-mini-tts',
419
+ elevenlabs: 'eleven_v4',
420
+ };
421
+
422
+ /** Modelos da ElevenLabs oferecidos na UI (o schema aceita qualquer string). */
423
+ export const HUBIA_VOICE_REPLY_ELEVENLABS_MODELS = [
424
+ 'eleven_v4', 'eleven_v3', 'eleven_multilingual_v2', 'eleven_flash_v2_5',
425
+ ] as const;
426
+
427
+ /** Faixa de `speed` aceita pela ElevenLabs; o runtime limita a ela. */
428
+ export const HUBIA_VOICE_REPLY_ELEVENLABS_SPEED = { min: 0.7, max: 1.2 } as const;
429
+
430
+ /** Liga a resposta em áudio no binding. QUANDO usar áudio é regra do prompt do
431
+ * binding (o LLM decide por turno), não deste objeto. */
432
+ export const zHubiaVoiceReplySchema = z.object({
433
+ enabled: z.boolean().default(false),
434
+ /** Ausente = `openai` (bindings gravados antes da F1.1). */
435
+ provider: zHubiaVoiceProviderSchema.optional(),
436
+ /** Ausente = `HUBIA_VOICE_REPLY_DEFAULT_MODEL[provider]`. */
437
+ model: z.string().min(1).max(60).optional(),
438
+ /** OpenAI: nome da voz (`coral`). ElevenLabs: `voice_id` (`RGymW84CSmfVugnA5tvA`). */
439
+ voice: z.string().min(1).max(40).default(HUBIA_VOICE_REPLY_DEFAULT_VOICE),
440
+ /** Tom/estilo da fala ("cordial, ritmo calmo"). Só a OpenAI usa. */
441
+ instructions: z.string().max(1000).optional(),
442
+ /** 1.0 = normal. Na ElevenLabs o runtime limita a 0.7–1.2. */
443
+ speed: z.number().min(0.75).max(1.5).optional(),
444
+ /** Ajustes da voz na ElevenLabs (`voice_settings`). Ausente = os da voz. */
445
+ elevenlabs: z.object({
446
+ stability: z.number().min(0).max(1).optional(),
447
+ similarity_boost: z.number().min(0).max(1).optional(),
448
+ style: z.number().min(0).max(1).optional(),
449
+ }).optional(),
450
+ });
451
+ export type IHubiaVoiceReply = z.infer<typeof zHubiaVoiceReplySchema>;
452
+
453
+ export const zHubiaResponseModeSchema = z.enum(['text', 'audio']);
454
+ export type HubiaResponseMode = z.infer<typeof zHubiaResponseModeSchema>;
455
+
456
+ /** `conversations/{id}.pending_suggestion` (modo hybrid_assist). */
457
+ export const zHubiaPendingSuggestionSchema = z.object({
458
+ execution_id: z.string(),
459
+ messages: z.array(z.string()),
460
+ created_at: z.any(),
461
+ was_used: z.boolean().optional(),
462
+ /** Escolha do LLM; pré-marca "enviar como áudio" na caixa de sugestão. */
463
+ response_mode: zHubiaResponseModeSchema.optional(),
464
+ /** Binding + canal permitiam áudio no turno da sugestão. */
465
+ voice_available: z.boolean().optional(),
466
+ }).passthrough();
467
+ export type IHubiaPendingSuggestion = z.infer<typeof zHubiaPendingSuggestionSchema>;
468
+
469
+ /** Gravado na mensagem enviada a partir de uma sugestão da HubIA. */
470
+ export const zHubiaSuggestionMessageRefSchema = z.object({
471
+ execution_id: z.string(),
472
+ /** O operador alterou o texto antes de enviar. */
473
+ edited: z.boolean(),
474
+ mode: zHubiaResponseModeSchema,
475
+ }).passthrough();
476
+ export type IHubiaSuggestionMessageRef = z.infer<typeof zHubiaSuggestionMessageRefSchema>;
477
+
478
+ /** Desfecho da sugestão, gravado na execução que a gerou. */
479
+ export const zHubiaSuggestionOutcomeSchema = z.object({
480
+ status: z.enum(['sent', 'sent_edited', 'discarded']),
481
+ mode: zHubiaResponseModeSchema.optional(),
482
+ by_user_id: z.string().nullable().optional(),
483
+ at: z.any(),
484
+ }).passthrough();
485
+ export type IHubiaSuggestionOutcome = z.infer<typeof zHubiaSuggestionOutcomeSchema>;
486
+
487
+ /** Metadados da nota de voz gerada pela HubIA, gravados na mensagem. */
488
+ export const zHubiaTtsMessageMetaSchema = z.object({
489
+ /** F1.1. Ausente nas mensagens gravadas antes = `openai`. */
490
+ provider: zHubiaVoiceProviderSchema.optional(),
491
+ model: z.string(),
492
+ voice: z.string(),
493
+ format: z.enum(['ogg', 'mp3']),
494
+ chars: z.number(),
495
+ duration_seconds: z.number().nullable(),
496
+ execution_id: z.string().optional(),
497
+ }).passthrough();
498
+ export type IHubiaTtsMessageMeta = z.infer<typeof zHubiaTtsMessageMetaSchema>;
499
+
400
500
  export const zAiBindingSchema = zFireDocSchema.extend({
401
501
  agent_type: z.string(), // 'evo-hubia-v1', future: 'evo-hubia-v2', etc.
402
502
  agent_config_id: z.string(), // ref to the agent's channel config doc
@@ -447,6 +547,11 @@ export const zAiBindingSchema = zFireDocSchema.extend({
447
547
  * com `hubia` em `usable_for`) usada neste departamento. Vence o
448
548
  * `llm_connection_id` do canal. `null`/ausente = herda do canal. */
449
549
  llm_connection_id: z.string().nullable().optional(),
550
+
551
+ // ───── Resposta em áudio (feat-303) ─────
552
+ /** Ausente/`enabled: false` = HubIA só responde em texto. Exige o contrato
553
+ * estruturado (`respond_to_contact`) ligado no canal. */
554
+ voice_reply: zHubiaVoiceReplySchema.optional(),
450
555
  }).passthrough();
451
556
 
452
557
  export type IAiBinding = z.infer<typeof zAiBindingSchema>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "evo360-types",
3
- "version": "1.3.746",
3
+ "version": "1.3.750",
4
4
  "description": "HREVO360 Shared Types",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",