@8wave/ai-elements 0.114.0-beta.8 → 0.115.0-beta.2

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 (163) hide show
  1. package/dist/_chunks/Agent-DK76k05_.js +566 -0
  2. package/dist/_chunks/Agent-DK76k05_.js.map +1 -0
  3. package/dist/_chunks/{PkStreamingMarkdown-C1sANAr5.js → PkStreamingMarkdown-BKxA6Ntl.js} +688 -672
  4. package/dist/_chunks/PkStreamingMarkdown-BKxA6Ntl.js.map +1 -0
  5. package/dist/_chunks/{PkToolRequestGeolocation-BbxYKt-9.js → PkToolRequestGeolocation-OF1PWhMw.js} +2 -2
  6. package/{dist-vue/_chunks/PkToolRequestGeolocation-9vfYNaQo.js.map → dist/_chunks/PkToolRequestGeolocation-OF1PWhMw.js.map} +1 -1
  7. package/dist/_chunks/{PkToolRequestOAuthConnection-CTp2w60F.js → PkToolRequestOAuthConnection-CgQePKKb.js} +4 -4
  8. package/dist/_chunks/PkToolRequestOAuthConnection-CgQePKKb.js.map +1 -0
  9. package/dist/_chunks/{PkToolShowArtifact-BfTjxGOT.js → PkToolShowArtifact-CHxeuKEU.js} +2 -2
  10. package/dist/_chunks/{PkToolShowArtifact-BfTjxGOT.js.map → PkToolShowArtifact-CHxeuKEU.js.map} +1 -1
  11. package/dist/_chunks/PkToolShowComparison-8d6fAhRp.js +72 -0
  12. package/dist/_chunks/PkToolShowComparison-8d6fAhRp.js.map +1 -0
  13. package/dist/_chunks/{PkToolShowContactForm-PFpY9dIp.js → PkToolShowContactForm-DqVLVwqJ.js} +2 -2
  14. package/dist/_chunks/{PkToolShowContactForm-PFpY9dIp.js.map → PkToolShowContactForm-DqVLVwqJ.js.map} +1 -1
  15. package/dist/_chunks/{PkToolShowForm-CMtSN0oX.js → PkToolShowForm-YJQPYfEe.js} +5 -5
  16. package/dist/_chunks/{PkToolShowForm-CMtSN0oX.js.map → PkToolShowForm-YJQPYfEe.js.map} +1 -1
  17. package/dist/_chunks/{PkToolShowSources-C6cu66Ts.js → PkToolShowSources-VFoI0YS8.js} +3 -3
  18. package/dist/_chunks/{PkToolShowSources-C6cu66Ts.js.map → PkToolShowSources-VFoI0YS8.js.map} +1 -1
  19. package/dist/_chunks/{PkToolShowSuggestedReply-CFO8wV1b.js → PkToolShowSuggestedReply-Dl4x_nEJ.js} +2 -2
  20. package/dist/_chunks/{PkToolShowSuggestedReply-CFO8wV1b.js.map → PkToolShowSuggestedReply-Dl4x_nEJ.js.map} +1 -1
  21. package/dist/_chunks/{markdown-BRD-hDrH.js → markdown-BL7WANiX.js} +19 -12
  22. package/dist/_chunks/markdown-BL7WANiX.js.map +1 -0
  23. package/dist/ai-elements.es.js +3119 -2748
  24. package/dist/ai-elements.es.js.map +1 -1
  25. package/dist-vue/PkChatbot.js +1 -1
  26. package/dist-vue/PkChatbotAuth.js +1 -1
  27. package/dist-vue/PkChatbotEmptyState.js +1 -1
  28. package/dist-vue/PkChatbotInput.js +1 -1
  29. package/dist-vue/PkChatbotMessages.js +1 -1
  30. package/dist-vue/PkChatbotStepPayload.js +1 -1
  31. package/dist-vue/PkChatbotStepToolDetail.js +1 -1
  32. package/dist-vue/PkChatbotSteps.js +1 -1
  33. package/dist-vue/PkChatbotViewChat.js +1 -1
  34. package/dist-vue/PkChatbotViewConversations.js +1 -1
  35. package/dist-vue/PkChatbotViewFiles.js +1 -1
  36. package/dist-vue/PkChatbotViewProfile.js +1 -1
  37. package/dist-vue/_chunks/{Agent-BNlmK-uJ.js → Agent-tbKw8Mdt.js} +2 -2
  38. package/dist-vue/_chunks/{Agent-BNlmK-uJ.js.map → Agent-tbKw8Mdt.js.map} +1 -1
  39. package/dist-vue/_chunks/{Document-2X01-F4Z.js → Document-nCWwJC2h.js} +18 -11
  40. package/dist-vue/_chunks/Document-nCWwJC2h.js.map +1 -0
  41. package/dist-vue/_chunks/Media-_HfFLHGD.js.map +1 -1
  42. package/dist-vue/_chunks/{PkChatbot-HRayDr2d.js → PkChatbot-CdtYJ1Lf.js} +8 -8
  43. package/dist-vue/_chunks/{PkChatbot-HRayDr2d.js.map → PkChatbot-CdtYJ1Lf.js.map} +1 -1
  44. package/dist-vue/_chunks/PkChatbotAuth-jzoNJkmH.js +421 -0
  45. package/dist-vue/_chunks/PkChatbotAuth-jzoNJkmH.js.map +1 -0
  46. package/dist-vue/_chunks/{PkChatbotEmptyState-CPOcfoRC.js → PkChatbotEmptyState-Dicjr_Fv.js} +2 -2
  47. package/dist-vue/_chunks/{PkChatbotEmptyState-CPOcfoRC.js.map → PkChatbotEmptyState-Dicjr_Fv.js.map} +1 -1
  48. package/dist-vue/_chunks/{PkChatbotInput-pLJQIu7v.js → PkChatbotInput-DcLmOqA1.js} +2 -2
  49. package/dist-vue/_chunks/{PkChatbotInput-pLJQIu7v.js.map → PkChatbotInput-DcLmOqA1.js.map} +1 -1
  50. package/dist-vue/_chunks/{PkChatbotMessages-GZStJbx_.js → PkChatbotMessages-R1EsTJpM.js} +258 -256
  51. package/dist-vue/_chunks/PkChatbotMessages-R1EsTJpM.js.map +1 -0
  52. package/dist-vue/_chunks/{PkChatbotStepPayload-DU0W-eUp.js → PkChatbotStepPayload-rKaeDQDj.js} +2 -2
  53. package/dist-vue/_chunks/{PkChatbotStepPayload-DU0W-eUp.js.map → PkChatbotStepPayload-rKaeDQDj.js.map} +1 -1
  54. package/dist-vue/_chunks/{PkChatbotStepToolDetail-etlBryOg.js → PkChatbotStepToolDetail-5HdSV8Im.js} +3 -3
  55. package/dist-vue/_chunks/{PkChatbotStepToolDetail-etlBryOg.js.map → PkChatbotStepToolDetail-5HdSV8Im.js.map} +1 -1
  56. package/dist-vue/_chunks/PkChatbotSteps-CPPjwTJN.js +191 -0
  57. package/dist-vue/_chunks/PkChatbotSteps-CPPjwTJN.js.map +1 -0
  58. package/dist-vue/_chunks/{PkChatbotViewChat-DIfBWFoG.js → PkChatbotViewChat-CbqrHEC6.js} +7 -7
  59. package/dist-vue/_chunks/{PkChatbotViewChat-DIfBWFoG.js.map → PkChatbotViewChat-CbqrHEC6.js.map} +1 -1
  60. package/dist-vue/_chunks/{PkChatbotViewConversations-BCdolW0R.js → PkChatbotViewConversations-CHpN4vhm.js} +2 -2
  61. package/dist-vue/_chunks/{PkChatbotViewConversations-BCdolW0R.js.map → PkChatbotViewConversations-CHpN4vhm.js.map} +1 -1
  62. package/dist-vue/_chunks/{PkChatbotViewFiles-Cudao8ew.js → PkChatbotViewFiles-Bk9-K6Hw.js} +3 -3
  63. package/dist-vue/_chunks/{PkChatbotViewFiles-Cudao8ew.js.map → PkChatbotViewFiles-Bk9-K6Hw.js.map} +1 -1
  64. package/dist-vue/_chunks/{PkChatbotViewProfile-DDsKOkcC.js → PkChatbotViewProfile-CosaHA-g.js} +2 -2
  65. package/dist-vue/_chunks/{PkChatbotViewProfile-DDsKOkcC.js.map → PkChatbotViewProfile-CosaHA-g.js.map} +1 -1
  66. package/dist-vue/_chunks/{PkStreamingMarkdown-BloMJaIW.js → PkStreamingMarkdown-DYy79C1P.js} +214 -205
  67. package/dist-vue/_chunks/{PkStreamingMarkdown-BloMJaIW.js.map → PkStreamingMarkdown-DYy79C1P.js.map} +1 -1
  68. package/dist-vue/_chunks/{PkToolRequestGeolocation-9vfYNaQo.js → PkToolRequestGeolocation-BOVbaCzQ.js} +2 -2
  69. package/{dist/_chunks/PkToolRequestGeolocation-BbxYKt-9.js.map → dist-vue/_chunks/PkToolRequestGeolocation-BOVbaCzQ.js.map} +1 -1
  70. package/dist-vue/_chunks/{PkToolRequestOAuthConnection-BorR5NmZ.js → PkToolRequestOAuthConnection-a2LegFoE.js} +4 -4
  71. package/dist-vue/_chunks/PkToolRequestOAuthConnection-a2LegFoE.js.map +1 -0
  72. package/dist-vue/_chunks/{PkToolShowArtifact-BuMY7GNj.js → PkToolShowArtifact-DUOnFdfa.js} +2 -2
  73. package/dist-vue/_chunks/{PkToolShowArtifact-BuMY7GNj.js.map → PkToolShowArtifact-DUOnFdfa.js.map} +1 -1
  74. package/dist-vue/_chunks/PkToolShowComparison-DQs3E6-k.js +72 -0
  75. package/dist-vue/_chunks/PkToolShowComparison-DQs3E6-k.js.map +1 -0
  76. package/dist-vue/_chunks/{PkToolShowContactForm-0OQRqT8m.js → PkToolShowContactForm-1TFKvG_s.js} +2 -2
  77. package/dist-vue/_chunks/{PkToolShowContactForm-0OQRqT8m.js.map → PkToolShowContactForm-1TFKvG_s.js.map} +1 -1
  78. package/dist-vue/_chunks/{PkToolShowDiagram-BGL27iHG.js → PkToolShowDiagram-Dmtqu3th.js} +2 -2
  79. package/dist-vue/_chunks/{PkToolShowDiagram-BGL27iHG.js.map → PkToolShowDiagram-Dmtqu3th.js.map} +1 -1
  80. package/dist-vue/_chunks/{PkToolShowEmail-BJJpS69F.js → PkToolShowEmail-BDsBoETQ.js} +2 -2
  81. package/dist-vue/_chunks/{PkToolShowEmail-BJJpS69F.js.map → PkToolShowEmail-BDsBoETQ.js.map} +1 -1
  82. package/dist-vue/_chunks/{PkToolShowForm-DDcPpOZ8.js → PkToolShowForm-DwFKxMJd.js} +4 -4
  83. package/dist-vue/_chunks/{PkToolShowForm-DDcPpOZ8.js.map → PkToolShowForm-DwFKxMJd.js.map} +1 -1
  84. package/dist-vue/_chunks/{PkToolShowMessage-BFGynf3p.js → PkToolShowMessage-Dau3agUy.js} +2 -2
  85. package/dist-vue/_chunks/{PkToolShowMessage-BFGynf3p.js.map → PkToolShowMessage-Dau3agUy.js.map} +1 -1
  86. package/dist-vue/_chunks/{PkToolShowProductList-6t1Ir5CW.js → PkToolShowProductList-CsupMsuy.js} +2 -2
  87. package/dist-vue/_chunks/{PkToolShowProductList-6t1Ir5CW.js.map → PkToolShowProductList-CsupMsuy.js.map} +1 -1
  88. package/dist-vue/_chunks/{PkToolShowSources-cOF0ZxOj.js → PkToolShowSources-TzkNgwnr.js} +4 -4
  89. package/dist-vue/_chunks/{PkToolShowSources-cOF0ZxOj.js.map → PkToolShowSources-TzkNgwnr.js.map} +1 -1
  90. package/dist-vue/_chunks/{PkToolShowSuggestedReply-DA4NEjHB.js → PkToolShowSuggestedReply-qAWdCUhr.js} +2 -2
  91. package/dist-vue/_chunks/{PkToolShowSuggestedReply-DA4NEjHB.js.map → PkToolShowSuggestedReply-qAWdCUhr.js.map} +1 -1
  92. package/dist-vue/_chunks/{PkToolShowWebPages-OgaT1vYJ.js → PkToolShowWebPages-D4E3Xzg1.js} +2 -2
  93. package/dist-vue/_chunks/{PkToolShowWebPages-OgaT1vYJ.js.map → PkToolShowWebPages-D4E3Xzg1.js.map} +1 -1
  94. package/dist-vue/_chunks/{PkUrl-Cd69XP5z.js → PkUrl-Cu3qKl4G.js} +2 -2
  95. package/dist-vue/_chunks/{PkUrl-Cd69XP5z.js.map → PkUrl-Cu3qKl4G.js.map} +1 -1
  96. package/dist-vue/_chunks/{createChatbotApiClient-CaVLm5W9.js → createChatbotApiClient-BlWs282E.js} +137 -168
  97. package/dist-vue/_chunks/createChatbotApiClient-BlWs282E.js.map +1 -0
  98. package/dist-vue/_chunks/{useChatbotStore-BwrBZJCq.js → useChatbotStore-CMo47fnS.js} +3 -3
  99. package/dist-vue/_chunks/{useChatbotStore-BwrBZJCq.js.map → useChatbotStore-CMo47fnS.js.map} +1 -1
  100. package/dist-vue/_chunks/utils-B45A2ONa.js +184 -0
  101. package/dist-vue/_chunks/utils-B45A2ONa.js.map +1 -0
  102. package/dist-vue/api.js +1 -1
  103. package/dist-vue/apps/web-component/src/components/EmbeddedChatWidget.ce.d.ts +4 -4
  104. package/dist-vue/apps/web-component/src/composables/useChatbotAuth.d.ts +53 -5
  105. package/dist-vue/apps/web-component/src/composables/useChatbotAuthForm.d.ts +14 -0
  106. package/dist-vue/composables.js +466 -39
  107. package/dist-vue/composables.js.map +1 -1
  108. package/dist-vue/index.js +3361 -3237
  109. package/dist-vue/index.js.map +1 -1
  110. package/dist-vue/locales.js +44 -0
  111. package/dist-vue/packages/ability/src/index.d.ts +10 -14
  112. package/dist-vue/packages/auth/src/add-member-to-organization.d.ts +8 -2
  113. package/dist-vue/packages/auth/src/additional-fields.d.ts +48 -0
  114. package/dist-vue/packages/auth/src/organization-member-limit.d.ts +12 -0
  115. package/dist-vue/packages/auth/src/passkey-policy-client-plugin.d.ts +31 -0
  116. package/dist-vue/packages/auth/src/passkey-policy-plugin.d.ts +22 -0
  117. package/dist-vue/packages/auth/src/two-factor-admin-plugin.d.ts +2 -0
  118. package/dist-vue/packages/auth/src/two-factor-policy-client-plugin.d.ts +163 -0
  119. package/dist-vue/packages/auth/src/two-factor-policy-plugin.d.ts +106 -0
  120. package/dist-vue/packages/components/src/PkQrCode.d.ts +14 -0
  121. package/dist-vue/packages/components/src/chat/PkChatbotAuth.d.ts +19 -0
  122. package/dist-vue/packages/components/src/chat/PkChatbotMessages.d.ts +8 -4
  123. package/dist-vue/packages/components/src/chat/PkChatbotSteps.d.ts +1 -0
  124. package/dist-vue/packages/components/src/chat/PkTurnEvaluation.d.ts +8 -0
  125. package/dist-vue/packages/components/src/chat/utils.d.ts +9 -0
  126. package/dist-vue/packages/components/src/index.d.ts +2 -1
  127. package/dist-vue/packages/composable/src/chatbot/useChatbotStore.d.ts +60 -0
  128. package/dist-vue/packages/models/src/schema/Chat.d.ts +42 -0
  129. package/dist-vue/packages/models/src/schema/Document.d.ts +17 -0
  130. package/dist-vue/packages/models/src/schema/DocumentFolder.d.ts +10 -0
  131. package/dist-vue/packages/models/src/schema/DocumentSyncSource.d.ts +71 -1
  132. package/dist-vue/packages/models/src/schema/Lead.d.ts +1 -1
  133. package/dist-vue/packages/models/src/schema/McpServer.d.ts +13 -0
  134. package/dist-vue/packages/models/src/schema/Media.d.ts +0 -1
  135. package/dist-vue/packages/models/src/schema/Member.d.ts +10 -0
  136. package/dist-vue/packages/models/src/schema/Notification.d.ts +31 -0
  137. package/dist-vue/packages/models/src/schema/Organization.d.ts +20 -0
  138. package/dist-vue/packages/models/src/schema/SignInSecurity.d.ts +168 -0
  139. package/dist-vue/packages/models/src/schema/User.d.ts +1 -0
  140. package/dist-vue/packages/models/src/schema/index.d.ts +1 -0
  141. package/dist-vue/style.css +1 -1
  142. package/package.json +1 -1
  143. package/dist/_chunks/Agent-DTLrWpzX.js +0 -460
  144. package/dist/_chunks/Agent-DTLrWpzX.js.map +0 -1
  145. package/dist/_chunks/Media-Cft7Pwrh.js +0 -108
  146. package/dist/_chunks/Media-Cft7Pwrh.js.map +0 -1
  147. package/dist/_chunks/PkStreamingMarkdown-C1sANAr5.js.map +0 -1
  148. package/dist/_chunks/PkToolRequestOAuthConnection-CTp2w60F.js.map +0 -1
  149. package/dist/_chunks/PkToolShowComparison-BJ7QBXtf.js +0 -60
  150. package/dist/_chunks/PkToolShowComparison-BJ7QBXtf.js.map +0 -1
  151. package/dist/_chunks/markdown-BRD-hDrH.js.map +0 -1
  152. package/dist-vue/_chunks/Document-2X01-F4Z.js.map +0 -1
  153. package/dist-vue/_chunks/PkChatbotAuth-Bi508F1u.js +0 -349
  154. package/dist-vue/_chunks/PkChatbotAuth-Bi508F1u.js.map +0 -1
  155. package/dist-vue/_chunks/PkChatbotMessages-GZStJbx_.js.map +0 -1
  156. package/dist-vue/_chunks/PkChatbotSteps-Cl4pVtPJ.js +0 -190
  157. package/dist-vue/_chunks/PkChatbotSteps-Cl4pVtPJ.js.map +0 -1
  158. package/dist-vue/_chunks/PkToolRequestOAuthConnection-BorR5NmZ.js.map +0 -1
  159. package/dist-vue/_chunks/PkToolShowComparison-BLn4pkno.js +0 -61
  160. package/dist-vue/_chunks/PkToolShowComparison-BLn4pkno.js.map +0 -1
  161. package/dist-vue/_chunks/createChatbotApiClient-CaVLm5W9.js.map +0 -1
  162. package/dist-vue/_chunks/utils-h4C7rRcu.js +0 -177
  163. package/dist-vue/_chunks/utils-h4C7rRcu.js.map +0 -1
@@ -7,6 +7,15 @@ export { isTextPart, isFilePart, isToolPart, isReasoningPart, hasPartText, hasTe
7
7
  * that should logically be a single block of text.
8
8
  */
9
9
  export declare function mergeConsecutiveTextParts(parts: UIMessage['parts']): UIMessage['parts'];
10
+ /**
11
+ * Drops a widget call refused for its arguments when a later call of the same
12
+ * widget in the message was drawn: the turn corrected it (the backend's
13
+ * `correctableInputRefusals`), and the refusal would sit next to the working
14
+ * widget, `showForm` drawing its render error above the form. A refusal with
15
+ * nothing drawn after it stays. Only the feed reads this: the steps timeline
16
+ * keeps every call, the refused one included.
17
+ */
18
+ export declare function dropCorrectedWidgetErrors(parts: UIMessage['parts']): UIMessage['parts'];
10
19
  export declare function isStreamingPart(part: UIMessage['parts'][number] | null | undefined): part is Extract<UIMessage['parts'][number], {
11
20
  streaming?: boolean;
12
21
  }>;
@@ -22,6 +22,7 @@ import { default as PkLoader } from './PkLoader';
22
22
  import { default as PkMedia } from './PkMedia';
23
23
  import { default as PkOfflineScreen } from './PkOfflineScreen';
24
24
  import { default as PkPwaNotices } from './PkPwaNotices';
25
+ import { default as PkQrCode } from './PkQrCode';
25
26
  import { default as PkRelativeTime } from './PkRelativeTime';
26
27
  import { default as PkSkeleton } from './PkSkeleton';
27
28
  import { default as PkSvgViewer } from './PkSvgViewer';
@@ -32,4 +33,4 @@ export * from './chat';
32
33
  export * from './input';
33
34
  export * from './table';
34
35
  export * from './types';
35
- export { PkBadge, PkEditorAgentType, PkEditorDocumentType, PkEditorNotificationType, PkEditorCode, PkEditorJsonSchema, PkEditorMarkdown, PkEditorMedia, PkEditorPrompt, PkEditorRadioButtons, PkEditorCheckboxButtons, PkEditorRepeater, PkEditorWyswyg, PkCheckboxField, PkFieldset, PkInfobox, PkSchemaField, PkIntegrationProvider, PkLazyImg, PkLightbox, PkLoader, PkMedia, PkOfflineScreen, PkPwaNotices, PkRelativeTime, PkSkeleton, PkSvgViewer, PkUrl, };
36
+ export { PkBadge, PkEditorAgentType, PkEditorDocumentType, PkEditorNotificationType, PkEditorCode, PkEditorJsonSchema, PkEditorMarkdown, PkEditorMedia, PkEditorPrompt, PkEditorRadioButtons, PkEditorCheckboxButtons, PkEditorRepeater, PkEditorWyswyg, PkCheckboxField, PkFieldset, PkInfobox, PkSchemaField, PkIntegrationProvider, PkLazyImg, PkLightbox, PkLoader, PkMedia, PkOfflineScreen, PkPwaNotices, PkQrCode, PkRelativeTime, PkSkeleton, PkSvgViewer, PkUrl, };
@@ -633,6 +633,16 @@ export declare function useChatbotStore(agentId: string): Store<`chatbot-${strin
633
633
  failed?: boolean | undefined;
634
634
  } | undefined;
635
635
  } | undefined;
636
+ turnEvaluation?: {
637
+ version: number;
638
+ mode: "shadow";
639
+ probabilities: Record<string, number>;
640
+ latencyMs: number;
641
+ budgetMs: number;
642
+ cost?: number | undefined;
643
+ inputTokens?: number | undefined;
644
+ failed?: true | undefined;
645
+ } | undefined;
636
646
  } | undefined;
637
647
  parts: ({
638
648
  type: "text";
@@ -1139,6 +1149,16 @@ export declare function useChatbotStore(agentId: string): Store<`chatbot-${strin
1139
1149
  failed?: boolean | undefined;
1140
1150
  } | undefined;
1141
1151
  } | undefined;
1152
+ turnEvaluation?: {
1153
+ version: number;
1154
+ mode: "shadow";
1155
+ probabilities: Record<string, number>;
1156
+ latencyMs: number;
1157
+ budgetMs: number;
1158
+ cost?: number | undefined;
1159
+ inputTokens?: number | undefined;
1160
+ failed?: true | undefined;
1161
+ } | undefined;
1142
1162
  } | undefined;
1143
1163
  parts: ({
1144
1164
  type: "text";
@@ -2343,6 +2363,16 @@ export declare function useChatbotStore(agentId: string): Store<`chatbot-${strin
2343
2363
  failed?: boolean | undefined;
2344
2364
  } | undefined;
2345
2365
  } | undefined;
2366
+ turnEvaluation?: {
2367
+ version: number;
2368
+ mode: "shadow";
2369
+ probabilities: Record<string, number>;
2370
+ latencyMs: number;
2371
+ budgetMs: number;
2372
+ cost?: number | undefined;
2373
+ inputTokens?: number | undefined;
2374
+ failed?: true | undefined;
2375
+ } | undefined;
2346
2376
  } | undefined;
2347
2377
  parts: ({
2348
2378
  type: "text";
@@ -2849,6 +2879,16 @@ export declare function useChatbotStore(agentId: string): Store<`chatbot-${strin
2849
2879
  failed?: boolean | undefined;
2850
2880
  } | undefined;
2851
2881
  } | undefined;
2882
+ turnEvaluation?: {
2883
+ version: number;
2884
+ mode: "shadow";
2885
+ probabilities: Record<string, number>;
2886
+ latencyMs: number;
2887
+ budgetMs: number;
2888
+ cost?: number | undefined;
2889
+ inputTokens?: number | undefined;
2890
+ failed?: true | undefined;
2891
+ } | undefined;
2852
2892
  } | undefined;
2853
2893
  parts: ({
2854
2894
  type: "text";
@@ -4053,6 +4093,16 @@ export declare function useChatbotStore(agentId: string): Store<`chatbot-${strin
4053
4093
  failed?: boolean | undefined;
4054
4094
  } | undefined;
4055
4095
  } | undefined;
4096
+ turnEvaluation?: {
4097
+ version: number;
4098
+ mode: "shadow";
4099
+ probabilities: Record<string, number>;
4100
+ latencyMs: number;
4101
+ budgetMs: number;
4102
+ cost?: number | undefined;
4103
+ inputTokens?: number | undefined;
4104
+ failed?: true | undefined;
4105
+ } | undefined;
4056
4106
  } | undefined;
4057
4107
  parts: ({
4058
4108
  type: "text";
@@ -4559,6 +4609,16 @@ export declare function useChatbotStore(agentId: string): Store<`chatbot-${strin
4559
4609
  failed?: boolean | undefined;
4560
4610
  } | undefined;
4561
4611
  } | undefined;
4612
+ turnEvaluation?: {
4613
+ version: number;
4614
+ mode: "shadow";
4615
+ probabilities: Record<string, number>;
4616
+ latencyMs: number;
4617
+ budgetMs: number;
4618
+ cost?: number | undefined;
4619
+ inputTokens?: number | undefined;
4620
+ failed?: true | undefined;
4621
+ } | undefined;
4562
4622
  } | undefined;
4563
4623
  parts: ({
4564
4624
  type: "text";
@@ -492,10 +492,52 @@ export type UIChatMessageMetadata = {
492
492
  * organization ({@link withoutToolCatalogue}).
493
493
  */
494
494
  toolCatalogue?: ToolCatalogueRecord;
495
+ /**
496
+ * The evaluation of the turn after the reply (spec post-turn-evaluation):
497
+ * a probability per question. Written after the answer, and removed from
498
+ * a public read ({@link withoutTurnEvaluation}).
499
+ */
500
+ turnEvaluation?: TurnEvaluationRecord;
501
+ };
502
+ /**
503
+ * The questions of the post-turn evaluation, in the order they are asked and
504
+ * listed. The backend's questions are typed against it, so the two cannot
505
+ * drift. A reader orders by this list and not by the record: jsonb keeps the
506
+ * keys of an object sorted by length, not in the order they were written.
507
+ */
508
+ export declare const TURN_EVALUATION_QUESTION_IDS: readonly ["durableFact", "abusive", "manipulation", "asksHuman", "missingInfo", "informationGap"];
509
+ export type TurnEvaluationQuestionId = (typeof TURN_EVALUATION_QUESTION_IDS)[number];
510
+ /**
511
+ * The evaluation model's answers on a finished turn (spec
512
+ * post-turn-evaluation, F1). Recorded in shadow only: nothing reads it yet.
513
+ */
514
+ export type TurnEvaluationRecord = {
515
+ /**
516
+ * The wording of the questions: a threshold holds only for the wording
517
+ * it was measured on, so a record says which one it answered.
518
+ */
519
+ version: number;
520
+ mode: 'shadow';
521
+ /** Probability per question, two decimals. Empty when the request failed. */
522
+ probabilities: Record<string, number>;
523
+ latencyMs: number;
524
+ budgetMs: number;
525
+ /** Market cost of the request in USD. */
526
+ cost?: number;
527
+ inputTokens?: number;
528
+ /** The request failed or ran past its budget: no answer was recorded. */
529
+ failed?: true;
495
530
  };
496
531
  export type UIChatMessage = UIMessage & {
497
532
  metadata?: UIChatMessageMetadata;
498
533
  };
534
+ /**
535
+ * The history without the turn evaluations, for a public read: a probability
536
+ * of abuse on a user must not reach the widget. Kept apart from
537
+ * {@link withoutToolCatalogue}, which the data export uses too, because
538
+ * whether the export includes this judgment is still to be decided.
539
+ */
540
+ export declare function withoutTurnEvaluation(messages: UIChatMessage[]): UIChatMessage[];
499
541
  /**
500
542
  * The history without the tool catalogue records, for a reader outside the
501
543
  * organization (a public chat read, the data export): a record names every
@@ -118,6 +118,8 @@ declare const WebDocumentSourceSchema: z.ZodObject<{
118
118
  extractionInputHash: z.ZodOptional<z.ZodString>;
119
119
  finalUrl: z.ZodOptional<z.ZodString>;
120
120
  sourceId: z.ZodOptional<z.ZodUUID>;
121
+ lastSyncedAt: z.ZodOptional<z.ZodString>;
122
+ lastmod: z.ZodOptional<z.ZodString>;
121
123
  }, z.core.$strip>;
122
124
  /**
123
125
  * `metadata.source`, discriminated on `provider`.
@@ -149,6 +151,8 @@ export declare const DocumentSourceSchema: z.ZodPreprocess<z.ZodDiscriminatedUni
149
151
  extractionInputHash: z.ZodOptional<z.ZodString>;
150
152
  finalUrl: z.ZodOptional<z.ZodString>;
151
153
  sourceId: z.ZodOptional<z.ZodUUID>;
154
+ lastSyncedAt: z.ZodOptional<z.ZodString>;
155
+ lastmod: z.ZodOptional<z.ZodString>;
152
156
  }, z.core.$strip>, z.ZodObject<{
153
157
  contentHash: z.ZodOptional<z.ZodString>;
154
158
  lastRefresh: z.ZodOptional<z.ZodObject<{
@@ -424,6 +428,14 @@ export interface DocumentProcessingJob {
424
428
  * that really did get shorter, so the guard would only stand in their way.
425
429
  */
426
430
  guarded?: boolean;
431
+ /**
432
+ * The web source whose sitemap asked for this early refresh. Nobody is
433
+ * watching it either, so it enforces the shrink guard; and it is void if
434
+ * the page no longer belongs to that source, which is what editing its text
435
+ * by hand does. Not `guarded`, which also voids a page without a trigger:
436
+ * a source reads its pages whether they have one or not.
437
+ */
438
+ sourceId?: string;
427
439
  }
428
440
  /**
429
441
  * Metadata structure for document.metadata column
@@ -447,6 +459,8 @@ export declare const DocumentMetadataSchema: z.ZodObject<{
447
459
  extractionInputHash: z.ZodOptional<z.ZodString>;
448
460
  finalUrl: z.ZodOptional<z.ZodString>;
449
461
  sourceId: z.ZodOptional<z.ZodUUID>;
462
+ lastSyncedAt: z.ZodOptional<z.ZodString>;
463
+ lastmod: z.ZodOptional<z.ZodString>;
450
464
  }, z.core.$strip>, z.ZodObject<{
451
465
  contentHash: z.ZodOptional<z.ZodString>;
452
466
  lastRefresh: z.ZodOptional<z.ZodObject<{
@@ -883,6 +897,8 @@ export declare const DocumentSchema: z.ZodObject<{
883
897
  extractionInputHash: z.ZodOptional<z.ZodString>;
884
898
  finalUrl: z.ZodOptional<z.ZodString>;
885
899
  sourceId: z.ZodOptional<z.ZodUUID>;
900
+ lastSyncedAt: z.ZodOptional<z.ZodString>;
901
+ lastmod: z.ZodOptional<z.ZodString>;
886
902
  }, z.core.$strip>, z.ZodObject<{
887
903
  contentHash: z.ZodOptional<z.ZodString>;
888
904
  lastRefresh: z.ZodOptional<z.ZodObject<{
@@ -1426,6 +1442,7 @@ export declare const DocumentCreateDtoSchema: z.ZodObject<{
1426
1442
  pages: z.ZodOptional<z.ZodString>;
1427
1443
  priority: z.ZodOptional<z.ZodDefault<z.ZodNumber>>;
1428
1444
  refreshInterval: z.ZodOptional<z.ZodNullable<z.ZodEnum<typeof DocumentRefreshInterval>>>;
1445
+ syncSourceId: z.ZodOptional<z.ZodUUID>;
1429
1446
  }, z.core.$strip>;
1430
1447
  /**
1431
1448
  * Document update schema for PUT /documents/:id endpoint
@@ -39,6 +39,16 @@ export type DocumentFolder = z.infer<typeof DocumentFolderSchema>;
39
39
  * business, which is why it reads the first segment and stops.
40
40
  */
41
41
  export declare function documentFolderProvider(folder: Pick<DocumentFolder, 'externalId'>): DocumentSourceProvider | undefined;
42
+ /**
43
+ * Whether a folder is read-only because a source that owns its documents
44
+ * fills it.
45
+ *
46
+ * Not the same question as `documentFolderProvider`: a web source's folder has
47
+ * a provider, and an icon and a badge that say so, but its pages stay editable
48
+ * and anything can be added to it. The backend answers the same question with
49
+ * `owningSourceCondition`, from the same policy.
50
+ */
51
+ export declare function documentFolderIsReadOnly(folder: Pick<DocumentFolder, 'externalId'>): boolean;
42
52
  export type DocumentFolderCreateDto = z.infer<typeof DocumentFolderCreateDtoSchema>;
43
53
  export type DocumentFolderUpdateDto = z.infer<typeof DocumentFolderUpdateDtoSchema>;
44
54
  export type DocumentFolderQuerystring = z.infer<typeof DocumentFolderQuerystringSchema>;
@@ -1,5 +1,32 @@
1
- import { DocumentSourceProvider } from './Document';
1
+ import { DocumentRefreshInterval, DocumentSourceProvider } from './Document';
2
2
  import * as z from 'zod';
3
+ /**
4
+ * What a provider's sources do with the documents they bring in.
5
+ *
6
+ * - `materialize`: `download` stores the remote file in a blob and makes a
7
+ * `file` document of it; `url` makes a `url` document and leaves the reading
8
+ * to the processor, so there is nothing to download.
9
+ * - `ownsDocuments`: true makes the source's folder read-only and propagates
10
+ * remote deletions; false only discovers, and the documents stay as
11
+ * editable as anything a person imported.
12
+ *
13
+ * These two values are everything the backend, the sync function and the
14
+ * interface read to decide how a document is created and whether it can be
15
+ * touched by hand. A web source that removes the pages leaving its sitemap does
16
+ * so through an option of that source, not by owning its documents.
17
+ */
18
+ export interface DocumentSourcePolicy {
19
+ materialize: 'download' | 'url';
20
+ ownsDocuments: boolean;
21
+ }
22
+ export declare const DOCUMENT_SOURCE_POLICIES: Record<DocumentSourceProvider, DocumentSourcePolicy>;
23
+ /**
24
+ * Whether a provider's sources govern their documents.
25
+ *
26
+ * An unknown provider counts as owning: the mistake in that direction makes a
27
+ * folder read-only, the other one lets people edit what a job will overwrite.
28
+ */
29
+ export declare function sourceOwnsDocuments(provider: string): boolean;
3
30
  /**
4
31
  * How often a source is checked.
5
32
  *
@@ -96,8 +123,42 @@ export declare const DocumentSyncRunStatsSchema: z.ZodObject<{
96
123
  skippedUnsupported: z.ZodDefault<z.ZodNumber>;
97
124
  skippedTooLarge: z.ZodDefault<z.ZodNumber>;
98
125
  failed: z.ZodDefault<z.ZodNumber>;
126
+ capped: z.ZodDefault<z.ZodNumber>;
127
+ removalHeld: z.ZodDefault<z.ZodNumber>;
99
128
  }, z.core.$strip>;
100
129
  export type DocumentSyncRunStats = z.infer<typeof DocumentSyncRunStatsSchema>;
130
+ /**
131
+ * Where a web source reads its pages: a sitemap, or a walk from one page.
132
+ *
133
+ * The same fields as the crawler dialog's two modes, because the source is
134
+ * that dialog's parameters saved.
135
+ */
136
+ export declare const WebSourceRemoteSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
137
+ sitemapUrl: z.ZodURL;
138
+ kind: z.ZodLiteral<"sitemap">;
139
+ }, z.core.$strip>, z.ZodObject<{
140
+ startUrl: z.ZodURL;
141
+ maxPages: z.ZodDefault<z.ZodNumber>;
142
+ maxDepth: z.ZodDefault<z.ZodNumber>;
143
+ followExternal: z.ZodDefault<z.ZodBoolean>;
144
+ kind: z.ZodLiteral<"depth">;
145
+ }, z.core.$strip>], "kind">;
146
+ export type WebSourceRemote = z.infer<typeof WebSourceRemoteSchema>;
147
+ /**
148
+ * The keys of a web source's `options` that are about the source rather than
149
+ * about converting a page. Everything else in `options` is conversion options,
150
+ * handed to the processor as they are.
151
+ */
152
+ export declare const WebSourceOptionsSchema: z.ZodObject<{
153
+ refreshInterval: z.ZodOptional<z.ZodNullable<z.ZodEnum<typeof DocumentRefreshInterval>>>;
154
+ removeMissing: z.ZodOptional<z.ZodBoolean>;
155
+ confirmedRemovals: z.ZodOptional<z.ZodNumber>;
156
+ }, z.core.$loose>;
157
+ export type WebSourceOptions = z.infer<typeof WebSourceOptionsSchema>;
158
+ /** The `options` keys that never reach the processor as conversion options. */
159
+ export declare const WEB_SOURCE_OWN_OPTION_KEYS: readonly ["refreshInterval", "removeMissing", "confirmedRemovals"];
160
+ /** The URL a web source reads, whichever mode it is in. */
161
+ export declare function webSourceUrl(remote: Record<string, unknown>): string;
101
162
  export declare const DocumentSyncSourceSchema: z.ZodObject<{
102
163
  id: z.ZodUUID;
103
164
  organizationId: z.ZodUUID;
@@ -123,6 +184,8 @@ export declare const DocumentSyncSourceSchema: z.ZodObject<{
123
184
  skippedUnsupported: z.ZodDefault<z.ZodNumber>;
124
185
  skippedTooLarge: z.ZodDefault<z.ZodNumber>;
125
186
  failed: z.ZodDefault<z.ZodNumber>;
187
+ capped: z.ZodDefault<z.ZodNumber>;
188
+ removalHeld: z.ZodDefault<z.ZodNumber>;
126
189
  }, z.core.$strip>>;
127
190
  lastSyncAt: z.ZodNullable<z.ZodCoercedDate<unknown>>;
128
191
  lastError: z.ZodNullable<z.ZodString>;
@@ -149,13 +212,20 @@ export declare const DocumentSyncSourceCreateDtoSchema: z.ZodObject<{
149
212
  remote: z.ZodRecord<z.ZodString, z.ZodUnknown>;
150
213
  interval: z.ZodDefault<z.ZodEnum<typeof DocumentSyncInterval>>;
151
214
  options: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
215
+ deferFirstRun: z.ZodOptional<z.ZodBoolean>;
152
216
  }, z.core.$strip>;
153
217
  export type DocumentSyncSourceCreateDto = z.infer<typeof DocumentSyncSourceCreateDtoSchema>;
154
218
  export declare const DocumentSyncSourceUpdateDtoSchema: z.ZodObject<{
155
219
  interval: z.ZodOptional<z.ZodEnum<typeof DocumentSyncInterval>>;
156
220
  enabled: z.ZodOptional<z.ZodBoolean>;
221
+ removeMissing: z.ZodOptional<z.ZodBoolean>;
157
222
  }, z.core.$strip>;
158
223
  export type DocumentSyncSourceUpdateDto = z.infer<typeof DocumentSyncSourceUpdateDtoSchema>;
224
+ /** "Sync now", optionally approving the removal the last run held back. */
225
+ export declare const DocumentSyncSourceSyncDtoSchema: z.ZodObject<{
226
+ confirmRemovals: z.ZodOptional<z.ZodNumber>;
227
+ }, z.core.$strip>;
228
+ export type DocumentSyncSourceSyncDto = z.infer<typeof DocumentSyncSourceSyncDtoSchema>;
159
229
  export declare const DocumentSyncSourceQuerystringSchema: z.ZodObject<{
160
230
  agentId: z.ZodUUID;
161
231
  }, z.core.$strip>;
@@ -9,7 +9,7 @@ export declare const LeadSchema: z.ZodObject<{
9
9
  phone: z.ZodNullable<z.ZodString>;
10
10
  agentId: z.ZodString;
11
11
  organizationId: z.ZodString;
12
- chatId: z.ZodString;
12
+ chatId: z.ZodNullable<z.ZodString>;
13
13
  metadata: z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
14
14
  createdAt: z.ZodCoercedDate<unknown>;
15
15
  createdBy: z.ZodString;
@@ -134,7 +134,20 @@ export declare const McpServerInfoSchema: z.ZodObject<{
134
134
  version: z.ZodString;
135
135
  }, z.core.$strip>;
136
136
  }, z.core.$strip>;
137
+ /**
138
+ * One integration the current user has signed in to with their own account,
139
+ * as the profile lists it: across every organization, so a connection can be
140
+ * ended wherever it was made. `organizationName` is null where the user is not
141
+ * a member (a public agent of another tenant).
142
+ */
143
+ export declare const McpServerConnectionSchema: z.ZodObject<{
144
+ mcpServerId: z.ZodString;
145
+ serverName: z.ZodString;
146
+ organizationName: z.ZodNullable<z.ZodString>;
147
+ connectedAt: z.ZodCoercedDate<unknown>;
148
+ }, z.core.$strip>;
137
149
  export type McpServerInfo = z.infer<typeof McpServerInfoSchema>;
150
+ export type McpServerConnection = z.infer<typeof McpServerConnectionSchema>;
138
151
  export type McpServer = z.infer<typeof McpServerSchema>;
139
152
  export type McpServerCreate = z.infer<typeof McpServerCreateSchema>;
140
153
  export type McpServerUpdate = z.infer<typeof McpServerUpdateSchema>;
@@ -2,7 +2,6 @@ import { z } from 'zod';
2
2
  export declare const MAX_FILE_SIZE: number;
3
3
  export declare const MIME_TYPE_REGEX: RegExp;
4
4
  export declare const SUPPORTED_IMAGE_TYPES: readonly ["image/jpeg", "image/png", "image/gif", "image/webp", "image/svg+xml"];
5
- export declare const SUPPORTED_DOCUMENT_TYPES: readonly ["application/pdf", "application/msword", "application/vnd.openxmlformats-officedocument.wordprocessingml.document", "application/vnd.ms-excel", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "text/plain", "text/markdown"];
6
5
  export declare const SUPPORTED_VIDEO_TYPES: readonly ["video/mp4", "video/webm", "video/ogg"];
7
6
  export declare const SUPPORTED_AUDIO_TYPES: readonly ["audio/mpeg", "audio/wav", "audio/ogg"];
8
7
  export declare enum StoragePolicy {
@@ -119,6 +119,16 @@ export declare const MemberSchema: z.ZodObject<{
119
119
  user: "user";
120
120
  admin: "admin";
121
121
  }>;
122
+ twoFactorEnabled: z.ZodOptional<z.ZodBoolean>;
123
+ hasPassword: z.ZodOptional<z.ZodBoolean>;
124
+ hasPasskey: z.ZodOptional<z.ZodBoolean>;
125
+ signInSecurity: z.ZodOptional<z.ZodEnum<{
126
+ required: "required";
127
+ none: "none";
128
+ totp: "totp";
129
+ otp: "otp";
130
+ passkey: "passkey";
131
+ }>>;
122
132
  }, z.core.$strip>;
123
133
  }, z.core.$strip>;
124
134
  export type Member = z.infer<typeof MemberSchema>;
@@ -4,13 +4,44 @@ export declare const NotificationType: {
4
4
  readonly ApiKeyExpiring: "api_key_expiring";
5
5
  readonly Organization: "organization";
6
6
  readonly PasswordResetRequested: "password_reset_requested";
7
+ /** Two-step verification turned on, off, or reset by an administrator. */
8
+ readonly TwoFactor: "two_factor";
7
9
  /** A sync took documents out because the remote no longer has them. */
8
10
  readonly DocumentSyncRemoved: "document_sync_removed";
11
+ /** A web source took out pages its sitemap no longer lists. */
12
+ readonly WebSourcePagesRemoved: "web_source_pages_removed";
13
+ /** A web source held back a removal too large to trust without a person. */
14
+ readonly WebSourceRemovalHeld: "web_source_removal_held";
9
15
  readonly ChatWarning: "chat_warning";
10
16
  readonly ChatBlocked: "chat_blocked";
11
17
  readonly Generic: "generic";
12
18
  };
13
19
  export type NotificationType = (typeof NotificationType)[keyof typeof NotificationType];
20
+ /**
21
+ * Group key of the admins' notification about a flagged conversation: one row
22
+ * per chat and admin, bumped by every later analysis of that chat.
23
+ */
24
+ export declare const chatAnalysisNotificationGroupKey: (chatId: string) => string;
25
+ /**
26
+ * Title of the admins' notification about a flagged conversation. It tells a
27
+ * block from a warning on a stored row better than `type` does: a group bump
28
+ * rewrites the title, the body and the metadata, never the type, so a chat
29
+ * warned first and blocked later keeps `type = chat_warning`.
30
+ */
31
+ export declare const chatAnalysisNotificationTitle: (blocked: boolean) => string;
32
+ /**
33
+ * Body of the admins' notification about a flagged conversation
34
+ * (`chat_warning` or `chat_blocked`). The writer quotes the chat's title; the
35
+ * GDPR erasure (`eraseConversationRows`) rebuilds the body without it, from the
36
+ * same sentences, so the notification and its link to the chat survive with
37
+ * nothing the user wrote. Migration `erase_chat_residuals` holds a SQL copy
38
+ * of these sentences for the rows erased before it.
39
+ */
40
+ export declare function chatAnalysisNotificationBody({ blocked, riskScore, chatTitle, }: {
41
+ blocked: boolean;
42
+ riskScore?: number;
43
+ chatTitle?: string;
44
+ }): string;
14
45
  export declare const NotificationSchema: z.ZodObject<{
15
46
  id: z.ZodString;
16
47
  organizationId: z.ZodNullable<z.ZodString>;
@@ -106,6 +106,7 @@ export declare const OrganizationSchema: z.ZodObject<{
106
106
  deletedAt: z.ZodNullable<z.ZodCoercedDate<unknown>>;
107
107
  deletedBy: z.ZodNullable<z.ZodString>;
108
108
  metadata: z.ZodNullable<z.ZodString>;
109
+ requireTwoFactor: z.ZodOptional<z.ZodBoolean>;
109
110
  }, z.core.$strip>;
110
111
  export type Organization = z.infer<typeof OrganizationSchema>;
111
112
  export declare const OrganizationDtoSchema: z.ZodObject<{
@@ -221,6 +222,16 @@ export declare const OrganizationRetentionPolicySchema: z.ZodObject<{
221
222
  anonymousRetentionDays: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
222
223
  }, z.core.$strip>;
223
224
  export type OrganizationRetentionPolicy = z.infer<typeof OrganizationRetentionPolicySchema>;
225
+ /**
226
+ * Per-organization limits an operator sets from the system panel, persisted
227
+ * inside the `organization.metadata` text column. `members` counts every
228
+ * member, the ones the widget's external login brings in included; absent or
229
+ * `null` means no limit.
230
+ */
231
+ export declare const OrganizationLimitsSchema: z.ZodObject<{
232
+ members: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
233
+ }, z.core.$strip>;
234
+ export type OrganizationLimits = z.infer<typeof OrganizationLimitsSchema>;
224
235
  /**
225
236
  * Product features an operator can switch on or off per organization from the
226
237
  * system panel. A feature is listed here when a contract can plausibly exclude
@@ -357,6 +368,9 @@ export declare const OrganizationMetadataSchema: z.ZodObject<{
357
368
  utilityModel: z.ZodOptional<z.ZodString>;
358
369
  disabledGatewayModels: z.ZodCatch<z.ZodOptional<z.ZodArray<z.ZodString>>>;
359
370
  }, z.core.$strip>>>;
371
+ limits: z.ZodCatch<z.ZodOptional<z.ZodObject<{
372
+ members: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
373
+ }, z.core.$strip>>>;
360
374
  }, z.core.$loose>;
361
375
  export type OrganizationMetadata = z.infer<typeof OrganizationMetadataSchema>;
362
376
  /**
@@ -381,6 +395,12 @@ export declare function parseOrganizationMetadata(metadata: string | Record<stri
381
395
  * malformed metadata resolves to the platform defaults instead of failing.
382
396
  */
383
397
  export declare function resolveOrganizationFeatures(metadata: string | Record<string, unknown> | null | undefined): OrganizationFeatures;
398
+ /**
399
+ * The most members an organization may hold, from its raw `metadata` value,
400
+ * or `null` when it sets no limit. A malformed value reads as no limit, so a
401
+ * bad write can never lock an organization out of adding people.
402
+ */
403
+ export declare function resolveOrganizationMemberLimit(metadata: string | Record<string, unknown> | null | undefined): number | null;
384
404
  export declare const OrganizationPublicSchema: z.ZodObject<{
385
405
  id: z.ZodString;
386
406
  name: z.ZodString;