@8wave/ai-elements 0.101.0-beta.5 → 0.102.0-beta.1

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 (78) hide show
  1. package/dist/_chunks/{Agent-DMCeO6o-.js → Agent-Cq-9OZHI.js} +77 -65
  2. package/dist/_chunks/Agent-Cq-9OZHI.js.map +1 -0
  3. package/dist/_chunks/{Document-C1Fp99qu.js → Document-s7Ct8xXa.js} +2 -2
  4. package/dist/_chunks/{Document-C1Fp99qu.js.map → Document-s7Ct8xXa.js.map} +1 -1
  5. package/dist/_chunks/{Media-c-RubI3_.js → Media-CMWDdtLL.js} +2 -2
  6. package/dist/_chunks/Media-CMWDdtLL.js.map +1 -0
  7. package/dist/_chunks/{PkToolRequestGeolocation-OZYwTIls.js → PkToolRequestGeolocation-hAaQJW-t.js} +2 -2
  8. package/dist/_chunks/{PkToolRequestGeolocation-OZYwTIls.js.map → PkToolRequestGeolocation-hAaQJW-t.js.map} +1 -1
  9. package/dist/_chunks/{PkToolRequestOAuthConnection-HmWtu2b3.js → PkToolRequestOAuthConnection-Bf_zoT2r.js} +2 -2
  10. package/dist/_chunks/{PkToolRequestOAuthConnection-HmWtu2b3.js.map → PkToolRequestOAuthConnection-Bf_zoT2r.js.map} +1 -1
  11. package/dist/_chunks/{PkToolShowForm-BzopoW7z.js → PkToolShowForm-CdUUAjPc.js} +2 -2
  12. package/dist/_chunks/{PkToolShowForm-BzopoW7z.js.map → PkToolShowForm-CdUUAjPc.js.map} +1 -1
  13. package/dist/_chunks/{PkToolShowSources-Blw5XOA7.js → PkToolShowSources-U7etupUP.js} +2 -2
  14. package/dist/_chunks/{PkToolShowSources-Blw5XOA7.js.map → PkToolShowSources-U7etupUP.js.map} +1 -1
  15. package/dist/_chunks/{PkToolShowSuggestedReply-nsXsvLUW.js → PkToolShowSuggestedReply-BvHgjMQ4.js} +2 -2
  16. package/dist/_chunks/{PkToolShowSuggestedReply-nsXsvLUW.js.map → PkToolShowSuggestedReply-BvHgjMQ4.js.map} +1 -1
  17. package/dist/ai-elements.es.js +6006 -5923
  18. package/dist/ai-elements.es.js.map +1 -1
  19. package/dist-vue/PkChatbot.js +1 -1
  20. package/dist-vue/PkChatbotMessages.js +1 -1
  21. package/dist-vue/PkChatbotViewChat.js +1 -1
  22. package/dist-vue/PkChatbotViewConversations.js +1 -1
  23. package/dist-vue/PkChatbotViewFiles.js +1 -1
  24. package/dist-vue/PkChatbotViewProfile.js +1 -1
  25. package/dist-vue/_chunks/{Agent-WEwgRwnY.js → Agent-Cy-XE9N1.js} +77 -66
  26. package/dist-vue/_chunks/Agent-Cy-XE9N1.js.map +1 -0
  27. package/dist-vue/_chunks/{Document-Vx3oKWp3.js → Document-B6xVkCfQ.js} +8 -8
  28. package/dist-vue/_chunks/{Document-Vx3oKWp3.js.map → Document-B6xVkCfQ.js.map} +1 -1
  29. package/dist-vue/_chunks/{PkChatbot-1Y7fGR-C.js → PkChatbot-CHe6t-LR.js} +6 -6
  30. package/dist-vue/_chunks/{PkChatbot-1Y7fGR-C.js.map → PkChatbot-CHe6t-LR.js.map} +1 -1
  31. package/dist-vue/_chunks/{PkChatbotMessages-C6X92Igt.js → PkChatbotMessages-CWPSx2ce.js} +8 -8
  32. package/dist-vue/_chunks/{PkChatbotMessages-C6X92Igt.js.map → PkChatbotMessages-CWPSx2ce.js.map} +1 -1
  33. package/dist-vue/_chunks/{PkChatbotViewChat-CBvcSg0J.js → PkChatbotViewChat-DeeGCFJf.js} +2674 -2651
  34. package/dist-vue/_chunks/PkChatbotViewChat-DeeGCFJf.js.map +1 -0
  35. package/dist-vue/_chunks/{PkChatbotViewConversations-BT5ojZEm.js → PkChatbotViewConversations-DXwqumyn.js} +2 -2
  36. package/dist-vue/_chunks/{PkChatbotViewConversations-BT5ojZEm.js.map → PkChatbotViewConversations-DXwqumyn.js.map} +1 -1
  37. package/dist-vue/_chunks/{PkChatbotViewFiles-DHzFAQZP.js → PkChatbotViewFiles-B4u87oH6.js} +3 -3
  38. package/dist-vue/_chunks/{PkChatbotViewFiles-DHzFAQZP.js.map → PkChatbotViewFiles-B4u87oH6.js.map} +1 -1
  39. package/dist-vue/_chunks/{PkChatbotViewProfile-DgN0Pydw.js → PkChatbotViewProfile-C_A0AP8x.js} +2 -2
  40. package/dist-vue/_chunks/{PkChatbotViewProfile-DgN0Pydw.js.map → PkChatbotViewProfile-C_A0AP8x.js.map} +1 -1
  41. package/dist-vue/_chunks/{PkToolRequestGeolocation-B1K2fN7U.js → PkToolRequestGeolocation-CaHo_418.js} +2 -2
  42. package/dist-vue/_chunks/{PkToolRequestGeolocation-B1K2fN7U.js.map → PkToolRequestGeolocation-CaHo_418.js.map} +1 -1
  43. package/dist-vue/_chunks/{PkToolRequestOAuthConnection-D-qoxuPc.js → PkToolRequestOAuthConnection-URjYDFhm.js} +2 -2
  44. package/dist-vue/_chunks/{PkToolRequestOAuthConnection-D-qoxuPc.js.map → PkToolRequestOAuthConnection-URjYDFhm.js.map} +1 -1
  45. package/dist-vue/_chunks/{PkToolShowDiagram-BvOy4aeQ.js → PkToolShowDiagram-CuQyY0uv.js} +2 -2
  46. package/dist-vue/_chunks/{PkToolShowDiagram-BvOy4aeQ.js.map → PkToolShowDiagram-CuQyY0uv.js.map} +1 -1
  47. package/dist-vue/_chunks/{PkToolShowForm-BzzeoKss.js → PkToolShowForm-vXgu3bZO.js} +2 -2
  48. package/dist-vue/_chunks/{PkToolShowForm-BzzeoKss.js.map → PkToolShowForm-vXgu3bZO.js.map} +1 -1
  49. package/dist-vue/_chunks/{PkToolShowSources-DdfHFaPA.js → PkToolShowSources-Die_j1bn.js} +2 -2
  50. package/dist-vue/_chunks/{PkToolShowSources-DdfHFaPA.js.map → PkToolShowSources-Die_j1bn.js.map} +1 -1
  51. package/dist-vue/_chunks/{PkToolShowSuggestedReply-DSd1dnZM.js → PkToolShowSuggestedReply-CryAdy6t.js} +2 -2
  52. package/dist-vue/_chunks/{PkToolShowSuggestedReply-DSd1dnZM.js.map → PkToolShowSuggestedReply-CryAdy6t.js.map} +1 -1
  53. package/dist-vue/_chunks/{createChatbotApiClient-xbpuy6e1.js → createChatbotApiClient-CoTSUkuj.js} +107 -99
  54. package/dist-vue/_chunks/createChatbotApiClient-CoTSUkuj.js.map +1 -0
  55. package/dist-vue/_chunks/{useChatbotStore-DWLLr7sg.js → useChatbotStore-BcLvyaIV.js} +1043 -1014
  56. package/dist-vue/_chunks/{useChatbotStore-DWLLr7sg.js.map → useChatbotStore-BcLvyaIV.js.map} +1 -1
  57. package/dist-vue/api.js +1 -1
  58. package/dist-vue/composables.js +2 -2
  59. package/dist-vue/index.js +61 -61
  60. package/dist-vue/index.js.map +1 -1
  61. package/dist-vue/locales.js +2 -0
  62. package/dist-vue/packages/components/src/chat/PkAgentSettingsPanel.d.ts +2 -2
  63. package/dist-vue/packages/components/src/chat/PkReasoningSettings.d.ts +2 -2
  64. package/dist-vue/packages/components/src/chat/PkVoiceSession.d.ts +12 -0
  65. package/dist-vue/packages/components/src/chat/useVoiceSession.d.ts +7 -0
  66. package/dist-vue/packages/composable/src/chatbot/useChatbotStore.d.ts +40 -10
  67. package/dist-vue/packages/models/src/schema/Agent.d.ts +39 -7
  68. package/dist-vue/packages/models/src/schema/AgentChatStatistics.d.ts +42 -0
  69. package/dist-vue/packages/models/src/schema/Chat.d.ts +46 -1
  70. package/dist-vue/packages/models/src/schema/ReasoningChat.d.ts +2 -2
  71. package/dist-vue/packages/models/src/schema/SubAgent.d.ts +2 -2
  72. package/dist-vue/packages/models/src/schema/constants.d.ts +7 -3
  73. package/package.json +1 -1
  74. package/dist/_chunks/Agent-DMCeO6o-.js.map +0 -1
  75. package/dist/_chunks/Media-c-RubI3_.js.map +0 -1
  76. package/dist-vue/_chunks/Agent-WEwgRwnY.js.map +0 -1
  77. package/dist-vue/_chunks/PkChatbotViewChat-CBvcSg0J.js.map +0 -1
  78. package/dist-vue/_chunks/createChatbotApiClient-xbpuy6e1.js.map +0 -1
@@ -109,6 +109,7 @@ var e = {
109
109
  feedbackSubmittedMessage: "Your feedback has been submitted successfully.",
110
110
  fileLimitPerChat: "You have reached the limit of {max} files for this conversation.",
111
111
  fileLimitPerMessage: "You can attach at most {max} files per message.",
112
+ voiceTookTooLong: "The answer took too long for the call. Try again, or continue in writing: the answer will appear here as soon as it is ready.",
112
113
  voiceConfirmed: "I confirm.",
113
114
  voiceCancelled: "I have cancelled.",
114
115
  voiceLocationRefused: "I would rather not share my location.",
@@ -644,6 +645,7 @@ var e = {
644
645
  feedbackSubmittedMessage: "Il tuo feedback è stato inviato con successo.",
645
646
  fileLimitPerChat: "Hai raggiunto il limite di {max} file per questa conversazione.",
646
647
  fileLimitPerMessage: "Puoi allegare al massimo {max} file per messaggio.",
648
+ voiceTookTooLong: "La risposta ha impiegato troppo tempo per la chiamata. Riprova, oppure continua per iscritto: la risposta comparirà qui appena pronta.",
647
649
  voiceConfirmed: "Confermo.",
648
650
  voiceCancelled: "Ho annullato.",
649
651
  voiceLocationRefused: "Preferisco non condividere la mia posizione.",
@@ -142,7 +142,7 @@ declare const __VLS_base: DefineComponent<__VLS_PublicProps, {}, {}, {}, {}, Com
142
142
  moonshotai?: {
143
143
  reasoningEffort?: "none" | "low" | "medium" | "high" | "xhigh" | "minimal" | undefined;
144
144
  } | undefined;
145
- xai?: {
145
+ spacexai?: {
146
146
  reasoningEffort?: "none" | "low" | "medium" | "high" | "xhigh" | "minimal" | undefined;
147
147
  } | undefined;
148
148
  zai?: {
@@ -379,7 +379,7 @@ declare const __VLS_base: DefineComponent<__VLS_PublicProps, {}, {}, {}, {}, Com
379
379
  moonshotai?: {
380
380
  reasoningEffort?: "none" | "low" | "medium" | "high" | "xhigh" | "minimal" | undefined;
381
381
  } | undefined;
382
- xai?: {
382
+ spacexai?: {
383
383
  reasoningEffort?: "none" | "low" | "medium" | "high" | "xhigh" | "minimal" | undefined;
384
384
  } | undefined;
385
385
  zai?: {
@@ -36,7 +36,7 @@ declare const __VLS_export: DefineComponent<__VLS_PublicProps, {}, {}, {}, {}, C
36
36
  moonshotai?: {
37
37
  reasoningEffort?: "none" | "low" | "medium" | "high" | "xhigh" | "minimal" | undefined;
38
38
  } | undefined;
39
- xai?: {
39
+ spacexai?: {
40
40
  reasoningEffort?: "none" | "low" | "medium" | "high" | "xhigh" | "minimal" | undefined;
41
41
  } | undefined;
42
42
  zai?: {
@@ -72,7 +72,7 @@ declare const __VLS_export: DefineComponent<__VLS_PublicProps, {}, {}, {}, {}, C
72
72
  moonshotai?: {
73
73
  reasoningEffort?: "none" | "low" | "medium" | "high" | "xhigh" | "minimal" | undefined;
74
74
  } | undefined;
75
- xai?: {
75
+ spacexai?: {
76
76
  reasoningEffort?: "none" | "low" | "medium" | "high" | "xhigh" | "minimal" | undefined;
77
77
  } | undefined;
78
78
  zai?: {
@@ -13,6 +13,18 @@ type __VLS_Props = {
13
13
  remainingSeconds?: number;
14
14
  muted?: boolean;
15
15
  error?: string;
16
+ /**
17
+ * The provider's own words for the failure, kept for the tooltip when
18
+ * `error` is our localized copy for it.
19
+ */
20
+ rawError?: string;
21
+ /**
22
+ * The socket is still open. The state collapses to 'error' whatever
23
+ * the line is doing, and which actions make sense depends on the line:
24
+ * a live failure is still billing and must offer the hang-up, a dead
25
+ * one has nothing left to hang up.
26
+ */
27
+ live?: boolean;
16
28
  };
17
29
  declare const __VLS_export: DefineComponent<__VLS_Props, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {
18
30
  retry: () => any;
@@ -7,6 +7,13 @@ export type VoiceSessionGrant = {
7
7
  /** Conversation the spoken turns are persisted into. */
8
8
  chatId: string;
9
9
  maxSessionSeconds: number;
10
+ /**
11
+ * Sentences the voice speaks that never persist (fillers, refusals, the
12
+ * greeting): a transcript line made only of these is stage noise, not a
13
+ * message. Absent on an older backend, which changes nothing but the
14
+ * cleanup.
15
+ */
16
+ providerSpokenSentences?: string[];
10
17
  };
11
18
  export type VoiceTranscriptEntry = {
12
19
  role: 'user' | 'agent';
@@ -13,6 +13,33 @@ export type { JSONObject } from '@ai-sdk/provider';
13
13
  * them (see {@link unpersistedVoiceLines}).
14
14
  */
15
15
  export declare const VOICE_LINE_ID_PREFIX = "voice-";
16
+ /**
17
+ * True when a spoken agent line is nothing but provider-only sentences
18
+ * (fillers, refusals, the greeting: the list travels with the session grant).
19
+ * Such a line is stage sound, not a message: no reload will ever have a
20
+ * persisted counterpart for it, so the chat view keeps it out entirely.
21
+ */
22
+ export declare const isVoiceProviderNoise: (text: string, providerOnlySentences: string[]) => boolean;
23
+ /**
24
+ * True when the last assistant step carries a client tool the user has
25
+ * answered, and nothing left in it for the user to answer.
26
+ *
27
+ * Replaces the SDK's `lastAssistantMessageIsCompleteWithToolCalls`, which asks
28
+ * for an output from EVERY tool part of the step. Most client tools never get
29
+ * one: they render from the call input and there is nothing to send back (see
30
+ * USER_ANSWERED_TOOLS). So a step that shows a form NEXT TO another widget
31
+ * never satisfied that condition, the submitted answers stayed in the browser
32
+ * and the turn was never resumed: the user filled the form and the agent went
33
+ * silent. Reported on 2026-08-27 for showForm + showSources, the routine
34
+ * pairing on a knowledge-base turn, where the sources closure is synthesized
35
+ * server-side into the same step.
36
+ *
37
+ * At least one answered tool is required, so a turn ending on display-only
38
+ * widgets still sends nothing.
39
+ */
40
+ export declare const lastAssistantMessageIsCompleteWithAnsweredClientTools: ({ messages, }: {
41
+ messages: UIChatMessage[];
42
+ }) => boolean;
16
43
  type ChatbotView = 'chat' | 'conversations' | 'profile' | 'auth' | 'files';
17
44
  export declare function useChatbotStore(agentId: string): Store<`chatbot-${string}`, Pick<{
18
45
  apiClient: globalThis.ComputedRef< ChatbotApiClient>;
@@ -261,7 +288,7 @@ export declare function useChatbotStore(agentId: string): Store<`chatbot-${strin
261
288
  moonshotai?: {
262
289
  reasoningEffort?: "none" | "low" | "medium" | "high" | "xhigh" | "minimal" | undefined;
263
290
  } | undefined;
264
- xai?: {
291
+ spacexai?: {
265
292
  reasoningEffort?: "none" | "low" | "medium" | "high" | "xhigh" | "minimal" | undefined;
266
293
  } | undefined;
267
294
  zai?: {
@@ -320,7 +347,7 @@ export declare function useChatbotStore(agentId: string): Store<`chatbot-${strin
320
347
  moonshotai?: {
321
348
  reasoningEffort?: "none" | "low" | "medium" | "high" | "xhigh" | "minimal" | undefined;
322
349
  } | undefined;
323
- xai?: {
350
+ spacexai?: {
324
351
  reasoningEffort?: "none" | "low" | "medium" | "high" | "xhigh" | "minimal" | undefined;
325
352
  } | undefined;
326
353
  zai?: {
@@ -1591,8 +1618,9 @@ export declare function useChatbotStore(agentId: string): Store<`chatbot-${strin
1591
1618
  initialize: (id: string, chatId: string) => Promise<void>;
1592
1619
  loadConversations: (id: string) => Promise<void>;
1593
1620
  loadChatFiles: () => Promise<void>;
1594
- refreshMessages: () => Promise<boolean>;
1621
+ refreshMessages: () => Promise<"pending" | "caught-up" | "indeterminate">;
1595
1622
  appendMessage: (message: UIChatMessage) => void;
1623
+ voiceProviderSentences: globalThis.Ref<string[], string[]>;
1596
1624
  getChatFileUrl: (documentId: string, inline?: boolean) => string;
1597
1625
  getChatFilePreviewUrl: (documentId: string) => string;
1598
1626
  deleteChatFile: (documentId: string) => Promise<void>;
@@ -1624,7 +1652,7 @@ export declare function useChatbotStore(agentId: string): Store<`chatbot-${strin
1624
1652
  navigate: (view: ChatbotView) => void;
1625
1653
  renameChatTitle: (chatId: string, title: string) => Promise<void>;
1626
1654
  deleteChat: (chatId: string) => Promise<void>;
1627
- }, "name" | "input" | "externalContext" | "model" | "gatewayOptions" | "fallbackModels" | "agentId" | "headers" | "conversations" | "userId" | "agentModel" | "agentType" | "baseUrl" | "basePath" | "agentInterface" | "agentTools" | "revisedAnswers" | "actionsInput" | "agentFileUpload" | "agentVoice" | "systemTheme" | "hideWelcomeMessage" | "isLoadingConversations" | "chatFiles" | "isLoadingChatFiles" | "pendingAttachments" | "fileLimitError" | "isConversationBlocked" | "chatError" | "activeView" | "messageFeedbacks" | "feedbackDialogMessage" | "isFeedbackSubmitting" | "isFeedbackSubmitted" | "feedbackSubmitError" | "isLeadSubmitted" | "isLoadingSubmitLead" | "submitLeadError">, Pick<{
1655
+ }, "name" | "input" | "externalContext" | "model" | "gatewayOptions" | "fallbackModels" | "agentId" | "headers" | "userId" | "conversations" | "agentModel" | "agentType" | "baseUrl" | "basePath" | "agentInterface" | "agentTools" | "revisedAnswers" | "actionsInput" | "agentFileUpload" | "agentVoice" | "systemTheme" | "hideWelcomeMessage" | "isLoadingConversations" | "chatFiles" | "isLoadingChatFiles" | "pendingAttachments" | "fileLimitError" | "isConversationBlocked" | "chatError" | "activeView" | "messageFeedbacks" | "feedbackDialogMessage" | "isFeedbackSubmitting" | "isFeedbackSubmitted" | "feedbackSubmitError" | "isLeadSubmitted" | "isLoadingSubmitLead" | "submitLeadError" | "voiceProviderSentences">, Pick<{
1628
1656
  apiClient: globalThis.ComputedRef< ChatbotApiClient>;
1629
1657
  baseUrl: globalThis.Ref<string, string>;
1630
1658
  basePath: globalThis.Ref<string | undefined, string | undefined>;
@@ -1871,7 +1899,7 @@ export declare function useChatbotStore(agentId: string): Store<`chatbot-${strin
1871
1899
  moonshotai?: {
1872
1900
  reasoningEffort?: "none" | "low" | "medium" | "high" | "xhigh" | "minimal" | undefined;
1873
1901
  } | undefined;
1874
- xai?: {
1902
+ spacexai?: {
1875
1903
  reasoningEffort?: "none" | "low" | "medium" | "high" | "xhigh" | "minimal" | undefined;
1876
1904
  } | undefined;
1877
1905
  zai?: {
@@ -1930,7 +1958,7 @@ export declare function useChatbotStore(agentId: string): Store<`chatbot-${strin
1930
1958
  moonshotai?: {
1931
1959
  reasoningEffort?: "none" | "low" | "medium" | "high" | "xhigh" | "minimal" | undefined;
1932
1960
  } | undefined;
1933
- xai?: {
1961
+ spacexai?: {
1934
1962
  reasoningEffort?: "none" | "low" | "medium" | "high" | "xhigh" | "minimal" | undefined;
1935
1963
  } | undefined;
1936
1964
  zai?: {
@@ -3201,8 +3229,9 @@ export declare function useChatbotStore(agentId: string): Store<`chatbot-${strin
3201
3229
  initialize: (id: string, chatId: string) => Promise<void>;
3202
3230
  loadConversations: (id: string) => Promise<void>;
3203
3231
  loadChatFiles: () => Promise<void>;
3204
- refreshMessages: () => Promise<boolean>;
3232
+ refreshMessages: () => Promise<"pending" | "caught-up" | "indeterminate">;
3205
3233
  appendMessage: (message: UIChatMessage) => void;
3234
+ voiceProviderSentences: globalThis.Ref<string[], string[]>;
3206
3235
  getChatFileUrl: (documentId: string, inline?: boolean) => string;
3207
3236
  getChatFilePreviewUrl: (documentId: string) => string;
3208
3237
  deleteChatFile: (documentId: string) => Promise<void>;
@@ -3481,7 +3510,7 @@ export declare function useChatbotStore(agentId: string): Store<`chatbot-${strin
3481
3510
  moonshotai?: {
3482
3511
  reasoningEffort?: "none" | "low" | "medium" | "high" | "xhigh" | "minimal" | undefined;
3483
3512
  } | undefined;
3484
- xai?: {
3513
+ spacexai?: {
3485
3514
  reasoningEffort?: "none" | "low" | "medium" | "high" | "xhigh" | "minimal" | undefined;
3486
3515
  } | undefined;
3487
3516
  zai?: {
@@ -3540,7 +3569,7 @@ export declare function useChatbotStore(agentId: string): Store<`chatbot-${strin
3540
3569
  moonshotai?: {
3541
3570
  reasoningEffort?: "none" | "low" | "medium" | "high" | "xhigh" | "minimal" | undefined;
3542
3571
  } | undefined;
3543
- xai?: {
3572
+ spacexai?: {
3544
3573
  reasoningEffort?: "none" | "low" | "medium" | "high" | "xhigh" | "minimal" | undefined;
3545
3574
  } | undefined;
3546
3575
  zai?: {
@@ -4811,8 +4840,9 @@ export declare function useChatbotStore(agentId: string): Store<`chatbot-${strin
4811
4840
  initialize: (id: string, chatId: string) => Promise<void>;
4812
4841
  loadConversations: (id: string) => Promise<void>;
4813
4842
  loadChatFiles: () => Promise<void>;
4814
- refreshMessages: () => Promise<boolean>;
4843
+ refreshMessages: () => Promise<"pending" | "caught-up" | "indeterminate">;
4815
4844
  appendMessage: (message: UIChatMessage) => void;
4845
+ voiceProviderSentences: globalThis.Ref<string[], string[]>;
4816
4846
  getChatFileUrl: (documentId: string, inline?: boolean) => string;
4817
4847
  getChatFilePreviewUrl: (documentId: string) => string;
4818
4848
  deleteChatFile: (documentId: string) => Promise<void>;
@@ -112,7 +112,7 @@ export type DeepSeekReasoning = z.infer<typeof DeepSeekReasoningSchema>;
112
112
  * `high`/`xhigh` clamps a lower level instead of rejecting the request, and
113
113
  * `none` does bring reasoning tokens to zero.
114
114
  */
115
- export declare const GENERIC_REASONING_PROVIDERS: readonly ["alibaba", "meta", "moonshotai", "xai", "zai"];
115
+ export declare const GENERIC_REASONING_PROVIDERS: readonly ["alibaba", "meta", "moonshotai", "spacexai", "zai"];
116
116
  export type GenericReasoningProvider = (typeof GENERIC_REASONING_PROVIDERS)[number];
117
117
  export declare function isGenericReasoningProvider(provider: string): provider is GenericReasoningProvider;
118
118
  /**
@@ -213,7 +213,7 @@ export declare const AgentReasoningSchema: z.ZodOptional<z.ZodCodec<z.ZodUnknown
213
213
  minimal: "minimal";
214
214
  }>>;
215
215
  }, z.core.$strip>>;
216
- xai: z.ZodOptional<z.ZodObject<{
216
+ spacexai: z.ZodOptional<z.ZodObject<{
217
217
  reasoningEffort: z.ZodOptional<z.ZodEnum<{
218
218
  none: "none";
219
219
  low: "low";
@@ -251,7 +251,7 @@ export declare function modelProvider(model: string): string;
251
251
  * it would buy.
252
252
  *
253
253
  * The single-level providers are here for the same reason, and it is measured
254
- * on them too: on 2026-08-25 a one-token `hi` sent to `xai/grok-4.6` with no
254
+ * on them too: on 2026-08-25 a one-token `hi` sent to `spacexai/grok-4.6` with no
255
255
  * directive came back having spent 37 reasoning tokens, and 0 with an explicit
256
256
  * `none`. They accept the level (out-of-range clamps, it does not 400), so
257
257
  * there is no reason to leave them on a default nobody chose.
@@ -336,10 +336,13 @@ export declare enum AgentBuiltInTool {
336
336
  */
337
337
  export declare const MCP_TOOL_PREFIX = "mcp-";
338
338
  export declare const API_TOOL_PREFIX = "api-";
339
+ export declare const SUBAGENT_TOOL_PREFIX = "subagent-";
339
340
  /** Tool-set key of an MCP tool, from the name the server advertises. */
340
341
  export declare const mcpToolKey: (toolName: string) => string;
341
342
  /** Tool-set key of an agent API tool, from its configured name. */
342
343
  export declare const apiToolKey: (toolName: string) => string;
344
+ /** Tool-set key of a sub-agent, from its camel-cased name. */
345
+ export declare const subAgentToolKey: (subAgentName: string) => string;
343
346
  /**
344
347
  * Returns true if the tool can be put behind the user-approval gate
345
348
  * (`settings.tools.approval.tools`, see docs/specs/tool-approval-interface.md).
@@ -363,6 +366,34 @@ export declare function isPresentationTool(toolName: string): boolean;
363
366
  export declare const PLATFORM_RENDERED_TOOLS: Set<string>;
364
367
  /** True if the tool renders natively on Teams/WhatsApp (not just web). */
365
368
  export declare function isPlatformRenderedTool(toolName: string): boolean;
369
+ /**
370
+ * Client tools whose CALL waits for the person to answer it: until they do,
371
+ * the tool loop is suspended and the turn has not said its last word.
372
+ *
373
+ * Every other client tool renders from the call input and is never answered: a
374
+ * sources list, an artifact, a product list have nothing to send back, and the
375
+ * contact form posts its lead through its own endpoint. Two places need that
376
+ * distinction, and both got it wrong before (reported 2026-08-27 on a
377
+ * knowledge-base turn, whose forced sources closure lands in the same step as
378
+ * a form):
379
+ * - the web resume condition (`sendAutomaticallyWhen` in `useChatbotStore`),
380
+ * which must require a tool OUTPUT from these and from nothing else, or the
381
+ * answers the user just submitted stay in the browser;
382
+ * - `computeRequiredClosures` server-side, which owes no closure to a turn left
383
+ * waiting on one of them: the sources of an answer that is still a question.
384
+ *
385
+ * Membership is about what the CALL waits for, not about the surface that
386
+ * renders it: whether the answer comes back as a browser tool output or as a
387
+ * Teams dialog submit makes no difference here, and a spoken turn resolves
388
+ * these tools server-side with a render acknowledgement (`withRenderAck`), so
389
+ * it is never left waiting in the first place.
390
+ *
391
+ * `requestOAuthConnection` is not an `AgentBuiltInTool`: it is injected by the
392
+ * MCP layer, not configured on the agent.
393
+ */
394
+ export declare const USER_ANSWERED_TOOLS: ReadonlySet<string>;
395
+ /** True if this tool's call waits for an answer from the person on the other side. */
396
+ export declare function isUserAnsweredTool(toolName: string): boolean;
366
397
  /**
367
398
  * Transport a turn arrived through. Recorded on the chat metadata and on the
368
399
  * latency histograms, and it is what decides {@link ClientToolSurface}: the
@@ -865,7 +896,7 @@ export declare const AgentModelSchema: z.ZodObject<{
865
896
  minimal: "minimal";
866
897
  }>>;
867
898
  }, z.core.$strip>>;
868
- xai: z.ZodOptional<z.ZodObject<{
899
+ spacexai: z.ZodOptional<z.ZodObject<{
869
900
  reasoningEffort: z.ZodOptional<z.ZodEnum<{
870
901
  none: "none";
871
902
  low: "low";
@@ -1160,6 +1191,7 @@ export declare const VoiceSessionSchema: z.ZodObject<{
1160
1191
  providerAgentId: z.ZodString;
1161
1192
  chatId: z.ZodString;
1162
1193
  maxSessionSeconds: z.ZodNumber;
1194
+ providerSpokenSentences: z.ZodDefault<z.ZodArray<z.ZodString>>;
1163
1195
  }, z.core.$strip>;
1164
1196
  export type VoiceSession = z.infer<typeof VoiceSessionSchema>;
1165
1197
  /** A provider voice, as offered in the agent configuration. */
@@ -1269,7 +1301,7 @@ export declare const AgentSettingsSchema: z.ZodObject<{
1269
1301
  minimal: "minimal";
1270
1302
  }>>;
1271
1303
  }, z.core.$strip>>;
1272
- xai: z.ZodOptional<z.ZodObject<{
1304
+ spacexai: z.ZodOptional<z.ZodObject<{
1273
1305
  reasoningEffort: z.ZodOptional<z.ZodEnum<{
1274
1306
  none: "none";
1275
1307
  low: "low";
@@ -1663,7 +1695,7 @@ export declare const AgentDtoSchema: z.ZodObject<{
1663
1695
  minimal: "minimal";
1664
1696
  }>>;
1665
1697
  }, z.core.$strip>>;
1666
- xai: z.ZodOptional<z.ZodObject<{
1698
+ spacexai: z.ZodOptional<z.ZodObject<{
1667
1699
  reasoningEffort: z.ZodOptional<z.ZodEnum<{
1668
1700
  none: "none";
1669
1701
  low: "low";
@@ -2058,7 +2090,7 @@ export declare const AgentSchema: z.ZodLazy<z.ZodObject<{
2058
2090
  minimal: "minimal";
2059
2091
  }>>;
2060
2092
  }, z.core.$strip>>;
2061
- xai: z.ZodOptional<z.ZodObject<{
2093
+ spacexai: z.ZodOptional<z.ZodObject<{
2062
2094
  reasoningEffort: z.ZodOptional<z.ZodEnum<{
2063
2095
  none: "none";
2064
2096
  low: "low";
@@ -1,3 +1,4 @@
1
+ import { ChatChannel } from './Chat';
1
2
  import * as z from 'zod';
2
3
  export declare const AgentChatStatisticsQuerystringSchema: z.ZodObject<{
3
4
  agentIds: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>>;
@@ -8,6 +9,7 @@ export declare const AgentChatStatisticsQuerystringSchema: z.ZodObject<{
8
9
  month: "month";
9
10
  hour: "hour";
10
11
  }>>;
12
+ channels: z.ZodOptional<z.ZodUnion<readonly [z.ZodEnum< ChatChannel>, z.ZodArray<z.ZodEnum< ChatChannel>>]>>;
11
13
  }, z.core.$strip>;
12
14
  export type AgentChatStatisticsQuerystring = z.infer<typeof AgentChatStatisticsQuerystringSchema>;
13
15
  export declare const AgentChatStatisticsSummarySchema: z.ZodObject<{
@@ -20,6 +22,21 @@ export declare const AgentChatStatisticsSummarySchema: z.ZodObject<{
20
22
  blockedChats: z.ZodNumber;
21
23
  goalCompletionRate: z.ZodNullable<z.ZodNumber>;
22
24
  abuseRate: z.ZodNullable<z.ZodNumber>;
25
+ channels: z.ZodArray<z.ZodObject<{
26
+ label: z.ZodString;
27
+ count: z.ZodNumber;
28
+ pct: z.ZodNumber;
29
+ }, z.core.$strip>>;
30
+ costByChannel: z.ZodArray<z.ZodObject<{
31
+ label: z.ZodString;
32
+ count: z.ZodNumber;
33
+ pct: z.ZodNumber;
34
+ }, z.core.$strip>>;
35
+ chatTypes: z.ZodArray<z.ZodObject<{
36
+ label: z.ZodString;
37
+ count: z.ZodNumber;
38
+ pct: z.ZodNumber;
39
+ }, z.core.$strip>>;
23
40
  origins: z.ZodArray<z.ZodObject<{
24
41
  label: z.ZodString;
25
42
  count: z.ZodNumber;
@@ -56,6 +73,11 @@ export declare const AgentChatStatisticsSummarySchema: z.ZodObject<{
56
73
  agentId: z.ZodString;
57
74
  agentName: z.ZodString;
58
75
  }, z.core.$strip>>;
76
+ peakHoursByChannel: z.ZodArray<z.ZodObject<{
77
+ hour: z.ZodNumber;
78
+ count: z.ZodNumber;
79
+ channel: z.ZodString;
80
+ }, z.core.$strip>>;
59
81
  deviceTypes: z.ZodArray<z.ZodObject<{
60
82
  label: z.ZodString;
61
83
  count: z.ZodNumber;
@@ -157,6 +179,21 @@ export declare const AgentChatStatisticsResponseSchema: z.ZodObject<{
157
179
  blockedChats: z.ZodNumber;
158
180
  goalCompletionRate: z.ZodNullable<z.ZodNumber>;
159
181
  abuseRate: z.ZodNullable<z.ZodNumber>;
182
+ channels: z.ZodArray<z.ZodObject<{
183
+ label: z.ZodString;
184
+ count: z.ZodNumber;
185
+ pct: z.ZodNumber;
186
+ }, z.core.$strip>>;
187
+ costByChannel: z.ZodArray<z.ZodObject<{
188
+ label: z.ZodString;
189
+ count: z.ZodNumber;
190
+ pct: z.ZodNumber;
191
+ }, z.core.$strip>>;
192
+ chatTypes: z.ZodArray<z.ZodObject<{
193
+ label: z.ZodString;
194
+ count: z.ZodNumber;
195
+ pct: z.ZodNumber;
196
+ }, z.core.$strip>>;
160
197
  origins: z.ZodArray<z.ZodObject<{
161
198
  label: z.ZodString;
162
199
  count: z.ZodNumber;
@@ -193,6 +230,11 @@ export declare const AgentChatStatisticsResponseSchema: z.ZodObject<{
193
230
  agentId: z.ZodString;
194
231
  agentName: z.ZodString;
195
232
  }, z.core.$strip>>;
233
+ peakHoursByChannel: z.ZodArray<z.ZodObject<{
234
+ hour: z.ZodNumber;
235
+ count: z.ZodNumber;
236
+ channel: z.ZodString;
237
+ }, z.core.$strip>>;
196
238
  deviceTypes: z.ZodArray<z.ZodObject<{
197
239
  label: z.ZodString;
198
240
  count: z.ZodNumber;
@@ -130,7 +130,7 @@ export declare const ChatRequestSchema: z.ZodObject<{
130
130
  minimal: "minimal";
131
131
  }>>;
132
132
  }, z.core.$strip>>;
133
- xai: z.ZodOptional<z.ZodObject<{
133
+ spacexai: z.ZodOptional<z.ZodObject<{
134
134
  reasoningEffort: z.ZodOptional<z.ZodEnum<{
135
135
  none: "none";
136
136
  low: "low";
@@ -264,6 +264,41 @@ export type ChatMetadata = {
264
264
  */
265
265
  transport?: string;
266
266
  };
267
+ /**
268
+ * Channel a conversation arrived through, as the analytics slice it.
269
+ *
270
+ * Derived at read time and never stored: a platform conversation is identified
271
+ * by `chats.metadata.platform` ({@link PlatformType}), every other non-web
272
+ * surface by `chats.metadata.transport` ({@link ChatTransport}), and a chat
273
+ * carrying neither marker is the web chat or the widget (the historical
274
+ * default, which is why those rows have nothing to read). `reasoning_chats`
275
+ * and `agent_endpoint_logs` have no metadata at all, so each of those tables
276
+ * is a channel by itself.
277
+ *
278
+ * Not to be confused with {@link AgentChannel}, which says where an agent is
279
+ * published (frontoffice, app, widget): this says where a conversation came
280
+ * from.
281
+ *
282
+ * Only the platforms we actually run are listed. `PlatformType` declares five
283
+ * more, and one of those appearing in the data is reported under its own raw
284
+ * value rather than folded into a bucket, so a channel nobody expected shows
285
+ * up in the dashboard instead of hiding inside `other`.
286
+ */
287
+ export declare enum ChatChannel {
288
+ /** Web chat and embeddable widget: no marker on the row. */
289
+ Web = "web",
290
+ WhatsApp = "whatsapp",
291
+ Teams = "teams",
292
+ /** Spoken session opened by us, `transport = voice`. */
293
+ Voice = "voice",
294
+ /** OpenAI-compatible REST surface, `transport = openai-api`. */
295
+ Api = "api",
296
+ /** Every row of `reasoning_chats`: the reasoning endpoint. */
297
+ Reasoning = "reasoning",
298
+ /** Every row of `agent_endpoint_logs`: the custom agent endpoints. */
299
+ Endpoint = "endpoint"
300
+ }
301
+ export declare const ChatChannelSchema: z.ZodEnum<typeof ChatChannel>;
267
302
  export type ChatMessageActions = 'show-info' | 'revise' | 'regenerate' | 'upvote' | 'downvote' | 'feedback';
268
303
  export type Chat = z.infer<typeof ChatSchema>;
269
304
  export type ChatsQuerystring = z.infer<typeof ChatsQuerystringSchema>;
@@ -316,6 +351,16 @@ export type UIChatMessageMetadata = {
316
351
  export type UIChatMessage = UIMessage & {
317
352
  metadata?: UIChatMessageMetadata;
318
353
  };
354
+ /**
355
+ * States in which a tool invocation part waits for nothing more.
356
+ *
357
+ * Two readers, one meaning: the backend leaves such a part alone instead of
358
+ * forcing it to a terminal state (`completeUnresolvedToolInvocations`), and the
359
+ * web client counts it as answered when deciding whether to resume a suspended
360
+ * turn (`sendAutomaticallyWhen` in `useChatbotStore`). They used to keep a copy
361
+ * each, with different membership.
362
+ */
363
+ export declare const TOOL_TERMINAL_STATES: ReadonlySet<string>;
319
364
  export declare const ChatSchema: z.ZodObject<{
320
365
  id: z.ZodString;
321
366
  messages: z.ZodType<UIChatMessage[]>;
@@ -118,7 +118,7 @@ export declare const ReasoningChatSchema: z.ZodObject<{
118
118
  minimal: "minimal";
119
119
  }>>;
120
120
  }, z.core.$strip>>;
121
- xai: z.ZodOptional<z.ZodObject<{
121
+ spacexai: z.ZodOptional<z.ZodObject<{
122
122
  reasoningEffort: z.ZodOptional<z.ZodEnum<{
123
123
  none: "none";
124
124
  low: "low";
@@ -564,7 +564,7 @@ export declare const ReasoningChatSchema: z.ZodObject<{
564
564
  minimal: "minimal";
565
565
  }>>;
566
566
  }, z.core.$strip>>;
567
- xai: z.ZodOptional<z.ZodObject<{
567
+ spacexai: z.ZodOptional<z.ZodObject<{
568
568
  reasoningEffort: z.ZodOptional<z.ZodEnum<{
569
569
  none: "none";
570
570
  low: "low";
@@ -118,7 +118,7 @@ export declare const SubAgentSchema: z.ZodObject<{
118
118
  minimal: "minimal";
119
119
  }>>;
120
120
  }, z.core.$strip>>;
121
- xai: z.ZodOptional<z.ZodObject<{
121
+ spacexai: z.ZodOptional<z.ZodObject<{
122
122
  reasoningEffort: z.ZodOptional<z.ZodEnum<{
123
123
  none: "none";
124
124
  low: "low";
@@ -522,7 +522,7 @@ export declare const SubAgentSchema: z.ZodObject<{
522
522
  minimal: "minimal";
523
523
  }>>;
524
524
  }, z.core.$strip>>;
525
- xai: z.ZodOptional<z.ZodObject<{
525
+ spacexai: z.ZodOptional<z.ZodObject<{
526
526
  reasoningEffort: z.ZodOptional<z.ZodEnum<{
527
527
  none: "none";
528
528
  low: "low";
@@ -25,6 +25,9 @@ export declare enum LanguageModel {
25
25
  gpt56Luna = "openai/gpt-5.6-luna",
26
26
  gpt56Terra = "openai/gpt-5.6-terra",
27
27
  gpt56Sol = "openai/gpt-5.6-sol",
28
+ gpt56LunaFast = "openai/gpt-5.6-luna-fast",
29
+ gpt56TerraFast = "openai/gpt-5.6-terra-fast",
30
+ gpt56SolFast = "openai/gpt-5.6-sol-fast",
28
31
  gemini25FlashLite = "google/gemini-2.5-flash-lite",
29
32
  gemini25Flash = "google/gemini-2.5-flash",
30
33
  gemini25Pro = "google/gemini-2.5-pro",
@@ -52,11 +55,12 @@ export declare enum LanguageModel {
52
55
  alibabaQwen37Flash = "alibaba/qwen3.7-flash",
53
56
  alibabaQwen38Max = "alibaba/qwen3.8-max",
54
57
  alibabaQwen3827b = "alibaba/qwen3.8-27b",
55
- xaiGrok43 = "xai/grok-4.3",
56
- xaiGrok46 = "xai/grok-4.6",
58
+ spacexaiGrok43 = "spacexai/grok-4.3",
59
+ spacexaiGrok46 = "spacexai/grok-4.6",
57
60
  zaiGlm52 = "zai/glm-5.2",
58
61
  zaiGlm52Fast = "zai/glm-5.2-fast",
59
62
  zaiGlm53 = "zai/glm-5.3",
63
+ zaiGlm53Flash = "zai/glm-5.3-flash",
60
64
  metaMuseSpark11 = "meta/muse-spark-1.1",
61
65
  metaMuseSpark12 = "meta/muse-spark-1.2",
62
66
  moonshotaiKimiK3 = "moonshotai/kimi-k3",
@@ -77,7 +81,7 @@ export declare enum LanguageModelBrand {
77
81
  google = "google",
78
82
  anthropic = "anthropic",
79
83
  deepseek = "deepseek",
80
- xai = "xai",
84
+ spacexai = "spacexai",
81
85
  zai = "zai",
82
86
  meta = "meta",
83
87
  alibaba = "alibaba",
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@8wave/ai-elements",
3
3
  "private": false,
4
- "version": "0.101.0-beta.5",
4
+ "version": "0.102.0-beta.1",
5
5
  "type": "module",
6
6
  "scripts": {
7
7
  "dev": "vite --port 8082 --open --host",