@agent-native/toolkit 0.225.2-nightly-20261106152255 → 0.226.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (174) hide show
  1. package/agent-native.eject.json +1 -0
  2. package/dist/app/agentkit/react/components.d.ts.map +1 -1
  3. package/dist/app/agentkit/react/components.js +124 -9
  4. package/dist/app/agentkit/react/components.js.map +1 -1
  5. package/dist/app/agentkit/react/context.d.ts +1 -1
  6. package/dist/app/agentkit/react/core-file-storage.d.ts +21 -0
  7. package/dist/app/agentkit/react/core-file-storage.d.ts.map +1 -0
  8. package/dist/app/agentkit/react/core-file-storage.js +3 -0
  9. package/dist/app/agentkit/react/core-file-storage.js.map +1 -0
  10. package/dist/app/auth/AuthPage.d.ts.map +1 -1
  11. package/dist/app/auth/AuthPage.js +89 -10
  12. package/dist/app/auth/AuthPage.js.map +1 -1
  13. package/dist/app/chat/AgentKitAssistantChat.d.ts.map +1 -1
  14. package/dist/app/chat/AgentKitAssistantChat.js +39 -58
  15. package/dist/app/chat/AgentKitAssistantChat.js.map +1 -1
  16. package/dist/app/chat/MultiTabAssistantChat.d.ts.map +1 -1
  17. package/dist/app/chat/MultiTabAssistantChat.js +3 -1
  18. package/dist/app/chat/MultiTabAssistantChat.js.map +1 -1
  19. package/dist/app/chat/agentkit-chat/root.d.ts.map +1 -1
  20. package/dist/app/chat/agentkit-chat/root.js +66 -2
  21. package/dist/app/chat/agentkit-chat/root.js.map +1 -1
  22. package/dist/app/chat/chat/surface-types.d.ts +1 -0
  23. package/dist/app/chat/chat/surface-types.d.ts.map +1 -1
  24. package/dist/app/chat/chat/surface-types.js.map +1 -1
  25. package/dist/app/chat/composer/runtime-adapters.d.ts.map +1 -1
  26. package/dist/app/chat/composer/runtime-adapters.js +2 -0
  27. package/dist/app/chat/composer/runtime-adapters.js.map +1 -1
  28. package/dist/app/chat/composer/use-agentkit-capabilities.d.ts +3 -1
  29. package/dist/app/chat/composer/use-agentkit-capabilities.d.ts.map +1 -1
  30. package/dist/app/chat/composer/use-agentkit-capabilities.js +11 -11
  31. package/dist/app/chat/composer/use-agentkit-capabilities.js.map +1 -1
  32. package/dist/app/chat/composer/use-workspace-composer-menu.d.ts +3 -0
  33. package/dist/app/chat/composer/use-workspace-composer-menu.d.ts.map +1 -0
  34. package/dist/app/chat/composer/use-workspace-composer-menu.js +80 -0
  35. package/dist/app/chat/composer/use-workspace-composer-menu.js.map +1 -0
  36. package/dist/app/chat/index.d.ts +1 -0
  37. package/dist/app/chat/index.d.ts.map +1 -1
  38. package/dist/app/chat/index.js +1 -0
  39. package/dist/app/chat/index.js.map +1 -1
  40. package/dist/app/chat/prepare-prompt-composer-agent-handoff.d.ts +5 -0
  41. package/dist/app/chat/prepare-prompt-composer-agent-handoff.d.ts.map +1 -0
  42. package/dist/app/chat/prepare-prompt-composer-agent-handoff.js +108 -0
  43. package/dist/app/chat/prepare-prompt-composer-agent-handoff.js.map +1 -0
  44. package/dist/app/i18n/catalogs/ar-SA.d.ts.map +1 -1
  45. package/dist/app/i18n/catalogs/ar-SA.js +6 -1
  46. package/dist/app/i18n/catalogs/ar-SA.js.map +1 -1
  47. package/dist/app/i18n/catalogs/de-DE.d.ts.map +1 -1
  48. package/dist/app/i18n/catalogs/de-DE.js +6 -1
  49. package/dist/app/i18n/catalogs/de-DE.js.map +1 -1
  50. package/dist/app/i18n/catalogs/en-US.d.ts +6 -1
  51. package/dist/app/i18n/catalogs/en-US.d.ts.map +1 -1
  52. package/dist/app/i18n/catalogs/en-US.js +6 -1
  53. package/dist/app/i18n/catalogs/en-US.js.map +1 -1
  54. package/dist/app/i18n/catalogs/es-ES.d.ts.map +1 -1
  55. package/dist/app/i18n/catalogs/es-ES.js +6 -1
  56. package/dist/app/i18n/catalogs/es-ES.js.map +1 -1
  57. package/dist/app/i18n/catalogs/fr-FR.d.ts.map +1 -1
  58. package/dist/app/i18n/catalogs/fr-FR.js +6 -1
  59. package/dist/app/i18n/catalogs/fr-FR.js.map +1 -1
  60. package/dist/app/i18n/catalogs/hi-IN.d.ts.map +1 -1
  61. package/dist/app/i18n/catalogs/hi-IN.js +6 -1
  62. package/dist/app/i18n/catalogs/hi-IN.js.map +1 -1
  63. package/dist/app/i18n/catalogs/ja-JP.d.ts.map +1 -1
  64. package/dist/app/i18n/catalogs/ja-JP.js +6 -1
  65. package/dist/app/i18n/catalogs/ja-JP.js.map +1 -1
  66. package/dist/app/i18n/catalogs/ko-KR.d.ts.map +1 -1
  67. package/dist/app/i18n/catalogs/ko-KR.js +6 -1
  68. package/dist/app/i18n/catalogs/ko-KR.js.map +1 -1
  69. package/dist/app/i18n/catalogs/pt-BR.d.ts.map +1 -1
  70. package/dist/app/i18n/catalogs/pt-BR.js +6 -1
  71. package/dist/app/i18n/catalogs/pt-BR.js.map +1 -1
  72. package/dist/app/i18n/catalogs/zh-CN.d.ts.map +1 -1
  73. package/dist/app/i18n/catalogs/zh-CN.js +6 -1
  74. package/dist/app/i18n/catalogs/zh-CN.js.map +1 -1
  75. package/dist/app/i18n/catalogs/zh-TW.d.ts.map +1 -1
  76. package/dist/app/i18n/catalogs/zh-TW.js +6 -1
  77. package/dist/app/i18n/catalogs/zh-TW.js.map +1 -1
  78. package/dist/app/resources/McpIntegrationDialog.d.ts +3 -1
  79. package/dist/app/resources/McpIntegrationDialog.d.ts.map +1 -1
  80. package/dist/app/resources/McpIntegrationDialog.js +2 -2
  81. package/dist/app/resources/McpIntegrationDialog.js.map +1 -1
  82. package/dist/app/settings/useBuilderStatus.d.ts.map +1 -1
  83. package/dist/app/settings/useBuilderStatus.js +119 -40
  84. package/dist/app/settings/useBuilderStatus.js.map +1 -1
  85. package/dist/composer/ComposerContextMenu.d.ts +36 -2
  86. package/dist/composer/ComposerContextMenu.d.ts.map +1 -1
  87. package/dist/composer/ComposerContextMenu.js +108 -40
  88. package/dist/composer/ComposerContextMenu.js.map +1 -1
  89. package/dist/composer/ComposerContextPickerDialog.d.ts.map +1 -1
  90. package/dist/composer/ComposerContextPickerDialog.js +63 -26
  91. package/dist/composer/ComposerContextPickerDialog.js.map +1 -1
  92. package/dist/composer/ComposerPlusMenu.d.ts +5 -3
  93. package/dist/composer/ComposerPlusMenu.d.ts.map +1 -1
  94. package/dist/composer/ComposerPlusMenu.js +166 -121
  95. package/dist/composer/ComposerPlusMenu.js.map +1 -1
  96. package/dist/composer/MentionItemMedia.d.ts.map +1 -1
  97. package/dist/composer/MentionItemMedia.js +3 -1
  98. package/dist/composer/MentionItemMedia.js.map +1 -1
  99. package/dist/composer/PromptComposer.d.ts +1 -0
  100. package/dist/composer/PromptComposer.d.ts.map +1 -1
  101. package/dist/composer/PromptComposer.js +1 -0
  102. package/dist/composer/PromptComposer.js.map +1 -1
  103. package/dist/composer/TiptapComposer.d.ts.map +1 -1
  104. package/dist/composer/TiptapComposer.js +117 -50
  105. package/dist/composer/TiptapComposer.js.map +1 -1
  106. package/dist/composer/index.d.ts +1 -0
  107. package/dist/composer/index.d.ts.map +1 -1
  108. package/dist/composer/runtime-adapters.d.ts +15 -0
  109. package/dist/composer/runtime-adapters.d.ts.map +1 -1
  110. package/dist/composer/runtime-adapters.js.map +1 -1
  111. package/dist/composer/use-composer-panel-placement.d.ts.map +1 -1
  112. package/dist/composer/use-composer-panel-placement.js +2 -4
  113. package/dist/composer/use-composer-panel-placement.js.map +1 -1
  114. package/dist/composer/use-mention-search.d.ts +7 -0
  115. package/dist/composer/use-mention-search.d.ts.map +1 -1
  116. package/dist/composer/use-mention-search.js +86 -19
  117. package/dist/composer/use-mention-search.js.map +1 -1
  118. package/dist/composer/useComposerContextPicker.d.ts +5 -1
  119. package/dist/composer/useComposerContextPicker.d.ts.map +1 -1
  120. package/dist/composer/useComposerContextPicker.js +18 -4
  121. package/dist/composer/useComposerContextPicker.js.map +1 -1
  122. package/package.json +4 -4
  123. package/src/app/agentkit/react/components.tsx +158 -11
  124. package/src/app/agentkit/react/composer-context.spec.tsx +180 -0
  125. package/src/app/agentkit/react/core-file-storage.tsx +14 -0
  126. package/src/app/auth/AuthPage.interaction.spec.tsx +143 -0
  127. package/src/app/auth/AuthPage.tsx +159 -13
  128. package/src/app/chat/AgentKitAssistantChat.spec.tsx +65 -3
  129. package/src/app/chat/AgentKitAssistantChat.tsx +57 -65
  130. package/src/app/chat/MultiTabAssistantChat.spec.tsx +21 -0
  131. package/src/app/chat/MultiTabAssistantChat.tsx +4 -0
  132. package/src/app/chat/agentkit-chat/root.tsx +91 -8
  133. package/src/app/chat/chat/surface-types.ts +1 -0
  134. package/src/app/chat/composer/runtime-adapters.tsx +2 -0
  135. package/src/app/chat/composer/use-agentkit-capabilities.hardening.spec.tsx +26 -1
  136. package/src/app/chat/composer/use-agentkit-capabilities.ts +11 -11
  137. package/src/app/chat/composer/use-agentkit-integration-menu.spec.tsx +2 -4
  138. package/src/app/chat/composer/use-workspace-composer-menu.spec.tsx +174 -0
  139. package/src/app/chat/composer/use-workspace-composer-menu.tsx +122 -0
  140. package/src/app/chat/index.ts +1 -0
  141. package/src/app/chat/prepare-prompt-composer-agent-handoff.spec.ts +162 -0
  142. package/src/app/chat/prepare-prompt-composer-agent-handoff.ts +134 -0
  143. package/src/app/i18n/catalogs/ar-SA.ts +6 -1
  144. package/src/app/i18n/catalogs/de-DE.ts +6 -1
  145. package/src/app/i18n/catalogs/en-US.ts +6 -1
  146. package/src/app/i18n/catalogs/es-ES.ts +6 -1
  147. package/src/app/i18n/catalogs/fr-FR.ts +6 -1
  148. package/src/app/i18n/catalogs/hi-IN.ts +6 -1
  149. package/src/app/i18n/catalogs/ja-JP.ts +6 -1
  150. package/src/app/i18n/catalogs/ko-KR.ts +6 -1
  151. package/src/app/i18n/catalogs/pt-BR.ts +6 -1
  152. package/src/app/i18n/catalogs/zh-CN.ts +6 -1
  153. package/src/app/i18n/catalogs/zh-TW.ts +6 -1
  154. package/src/app/resources/McpIntegrationDialog.tsx +5 -0
  155. package/src/app/settings/useBuilderStatus.spec.tsx +229 -13
  156. package/src/app/settings/useBuilderStatus.ts +145 -47
  157. package/src/composer/ComposerContextMenu.spec.tsx +95 -32
  158. package/src/composer/ComposerContextMenu.tsx +284 -73
  159. package/src/composer/ComposerContextPicker.spec.tsx +13 -14
  160. package/src/composer/ComposerContextPickerDialog.spec.tsx +40 -3
  161. package/src/composer/ComposerContextPickerDialog.tsx +158 -24
  162. package/src/composer/ComposerPlusMenu.parity.spec.tsx +442 -62
  163. package/src/composer/ComposerPlusMenu.tsx +322 -237
  164. package/src/composer/MentionItemMedia.tsx +3 -0
  165. package/src/composer/PromptComposer.context.spec.tsx +253 -82
  166. package/src/composer/PromptComposer.tsx +2 -0
  167. package/src/composer/TiptapComposer.spec.ts +6 -8
  168. package/src/composer/TiptapComposer.tsx +148 -55
  169. package/src/composer/index.ts +5 -0
  170. package/src/composer/runtime-adapters.tsx +18 -0
  171. package/src/composer/use-composer-panel-placement.ts +2 -4
  172. package/src/composer/use-mention-search.spec.tsx +99 -1
  173. package/src/composer/use-mention-search.ts +101 -24
  174. package/src/composer/useComposerContextPicker.ts +25 -5
@@ -565,7 +565,7 @@ export declare function useAgentKitControl(requestedThreadId?: ThreadId): {
565
565
  fork: (fromMessageId: string) => Promise<AgentThread>;
566
566
  updateThread: (patch: Parameters<AgentKitController["updateThread"]>[1]) => Promise<AgentThread>;
567
567
  deleteThread: () => Promise<void>;
568
- uploadFiles: (files: import("@agent-native/agentkit").AgentKitUploadFile[], context?: import("@agent-native/agentkit").AgentRequestContext | undefined) => Promise<import("@agent-native/agentkit").FilePart[]>;
568
+ uploadFiles: (files: import("@agent-native/agentkit").AgentUploadFile[], context?: import("@agent-native/agentkit").AgentRequestContext | undefined) => Promise<import("@agent-native/agentkit").FilePart[]>;
569
569
  invokeAction: (invocation: import("@agent-native/agentkit").AgentActionInvocation, context?: import("@agent-native/agentkit").AgentRequestContext) => Promise<import("@agent-native/agentkit").AgentActionResult>;
570
570
  };
571
571
  export {};
@@ -0,0 +1,21 @@
1
+ import { type ComponentType, type RefObject } from "react";
2
+ type SetupProps = {
3
+ open: boolean;
4
+ anchorRef: RefObject<HTMLElement | null>;
5
+ onOpenChange: (open: boolean) => void;
6
+ onConnected: () => void;
7
+ } & ({
8
+ status: "missing";
9
+ } | {
10
+ status: "unavailable";
11
+ onRetry: () => void;
12
+ });
13
+ export declare const CoreFileStorageSetupContext: import("react").Context<{
14
+ scopeKey: string;
15
+ readStatus: () => Promise<{
16
+ configured: boolean;
17
+ }>;
18
+ Setup: ComponentType<SetupProps>;
19
+ } | null>;
20
+ export {};
21
+ //# sourceMappingURL=core-file-storage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core-file-storage.d.ts","sourceRoot":"","sources":["../../../../src/app/agentkit/react/core-file-storage.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,aAAa,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAE1E,KAAK,UAAU,GAAG;IAChB,IAAI,EAAE,OAAO,CAAC;IACd,SAAS,EAAE,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;IACzC,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACtC,WAAW,EAAE,MAAM,IAAI,CAAC;CACzB,GAAG,CAAC;IAAE,MAAM,EAAE,SAAS,CAAA;CAAE,GAAG;IAAE,MAAM,EAAE,aAAa,CAAC;IAAC,OAAO,EAAE,MAAM,IAAI,CAAA;CAAE,CAAC,CAAC;AAE7E,eAAO,MAAM,2BAA2B;cAC5B,MAAM;gBACJ,MAAM,OAAO,CAAC;QAAE,UAAU,EAAE,OAAO,CAAA;KAAE,CAAC;WAC3C,aAAa,CAAC,UAAU,CAAC;SACnB,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { createContext } from "react";
2
+ export const CoreFileStorageSetupContext = createContext(null);
3
+ //# sourceMappingURL=core-file-storage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core-file-storage.js","sourceRoot":"","sources":["../../../../src/app/agentkit/react/core-file-storage.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAsC,MAAM,OAAO,CAAC;AAS1E,MAAM,CAAC,MAAM,2BAA2B,GAAG,aAAa,CAI9C,IAAI,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"AuthPage.d.ts","sourceRoot":"","sources":["../../../src/app/auth/AuthPage.tsx"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAEV,aAAa,EACb,QAAQ,EACT,MAAM,2CAA2C,CAAC;AAKnD,OAAO,EAEL,yBAAyB,EAG1B,MAAM,2CAA2C,CAAC;AAInD,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,YAAY,EACV,eAAe,EACf,gBAAgB,EAChB,kBAAkB,EAClB,aAAa,EACb,QAAQ,GACT,MAAM,2CAA2C,CAAC;AACnD,OAAO,EACL,oBAAoB,EACpB,gBAAgB,EAChB,UAAU,EACV,wBAAwB,EACxB,2BAA2B,GAC5B,MAAM,kDAAkD,CAAC;AAiB1D,OAAO,EAAE,yBAAyB,EAAE,CAAC;AAErC,wBAAgB,kCAAkC,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAY1E;AA+DD,wBAAgB,uBAAuB,CACrC,WAAW,EAAE,MAAM,EACnB,gBAAgB,EAAE,OAAO,EACzB,QAAQ,EAAE,MAAM,GACf,MAAM,CAGR;AAmDD,wBAAgB,+BAA+B,CAC7C,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,GAAG,QAAQ,CAAC,EACzC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,QAAQ,EAAE,OAAO,GAChB,OAAO,CAOT;AAED,wBAAgB,0BAA0B,CACxC,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,EAC9B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,OAAO,CAET;AA4JD,wBAAgB,6BAA6B,CAAC,KAAK,EAAE;IACnD,eAAe,EAAE,OAAO,CAAC;IACzB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,aAAa,EAAE,MAAM,CAAC;CACvB,GAAG,OAAO,CAWV;AAyDD,wBAAgB,wBAAwB,CAAC,KAAK,EAAE;IAC9C,aAAa,EAAE,MAAM,CAAC;IACtB,4BAA4B,EAAE,MAAM,CAAC;IACrC,SAAS,EAAE,MAAM,CAAC;CACnB,GAAG,MAAM,CAQT;AAED,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,MAAM,EACd,4BAA4B,EAAE,MAAM,EACpC,SAAS,SAA8D,GACtE,MAAM,CAQR;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE;IAC9C,cAAc,EAAE,OAAO,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,kBAAkB,EAAE,MAAM,CAAC;CAC5B,GAAG,MAAM,CAOT;AAED,wBAAgB,6BAA6B,CAAC,KAAK,EAAE;IACnD,oBAAoB,EAAE,OAAO,CAAC;IAC9B,aAAa,EAAE,MAAM,CAAC;CACvB,GAAG,OAAO,CAYV;AA4FD,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,QAAQ,EACd,iBAAiB,EAAE,OAAO,GACzB,OAAO,CAET;AAED,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,GACb,OAAO,CAUT;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,aAAa,qBAm8E5C"}
1
+ {"version":3,"file":"AuthPage.d.ts","sourceRoot":"","sources":["../../../src/app/auth/AuthPage.tsx"],"names":[],"mappings":"AAyBA,OAAO,KAAK,EAEV,aAAa,EACb,QAAQ,EACT,MAAM,2CAA2C,CAAC;AAKnD,OAAO,EAEL,yBAAyB,EAG1B,MAAM,2CAA2C,CAAC;AAInD,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,YAAY,EACV,eAAe,EACf,gBAAgB,EAChB,kBAAkB,EAClB,aAAa,EACb,QAAQ,GACT,MAAM,2CAA2C,CAAC;AACnD,OAAO,EACL,oBAAoB,EACpB,gBAAgB,EAChB,UAAU,EACV,wBAAwB,EACxB,2BAA2B,GAC5B,MAAM,kDAAkD,CAAC;AAiB1D,OAAO,EAAE,yBAAyB,EAAE,CAAC;AAErC,wBAAgB,kCAAkC,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAY1E;AA+DD,wBAAgB,uBAAuB,CACrC,WAAW,EAAE,MAAM,EACnB,gBAAgB,EAAE,OAAO,EACzB,QAAQ,EAAE,MAAM,GACf,MAAM,CAGR;AAmDD,wBAAgB,+BAA+B,CAC7C,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,GAAG,QAAQ,CAAC,EACzC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,QAAQ,EAAE,OAAO,GAChB,OAAO,CAOT;AAED,wBAAgB,0BAA0B,CACxC,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,EAC9B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,OAAO,CAET;AAkKD,wBAAgB,6BAA6B,CAAC,KAAK,EAAE;IACnD,eAAe,EAAE,OAAO,CAAC;IACzB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,aAAa,EAAE,MAAM,CAAC;CACvB,GAAG,OAAO,CAWV;AAyDD,wBAAgB,wBAAwB,CAAC,KAAK,EAAE;IAC9C,aAAa,EAAE,MAAM,CAAC;IACtB,4BAA4B,EAAE,MAAM,CAAC;IACrC,SAAS,EAAE,MAAM,CAAC;CACnB,GAAG,MAAM,CAQT;AAED,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,MAAM,EACd,4BAA4B,EAAE,MAAM,EACpC,SAAS,SAA8D,GACtE,MAAM,CAQR;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE;IAC9C,cAAc,EAAE,OAAO,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,kBAAkB,EAAE,MAAM,CAAC;CAC5B,GAAG,MAAM,CAOT;AAED,wBAAgB,6BAA6B,CAAC,KAAK,EAAE;IACnD,oBAAoB,EAAE,OAAO,CAAC;IAC9B,aAAa,EAAE,MAAM,CAAC;CACvB,GAAG,OAAO,CAYV;AA4FD,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,QAAQ,EACd,iBAAiB,EAAE,OAAO,GACzB,OAAO,CAET;AAED,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,GACb,OAAO,CAUT;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,aAAa,qBA0kF5C"}
@@ -2,6 +2,7 @@ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-run
2
2
  import { captureAttribution, getAnalyticsAnonymousId, getAnalyticsSessionId, } from "@agent-native/core/client/analytics";
3
3
  import { frameworkRoutePrefix } from "@agent-native/core/client/api-path";
4
4
  import { identityBootstrapCallbackHref, isAgentNativeDesktop, isBuilderDesktop, normalizeOAuthReturnPath, shouldRetryAuthSessionProbe, } from "@agent-native/core/client/auth/auth-page-helpers";
5
+ import { acceptBuilderSignupAssignment, getBuilderSignupAssignment, } from "@agent-native/core/client/auth/builder-signup";
5
6
  import { whenConsentDecided } from "@agent-native/core/client/consent";
6
7
  import { openOAuthPopup } from "@agent-native/core/client/oauth-popup";
7
8
  import { navigateForSession } from "@agent-native/core/client/use-session";
@@ -155,8 +156,9 @@ async function requestJson(url, init = {}) {
155
156
  }
156
157
  return { response, data, readable };
157
158
  }
159
+ let builderSignupTelemetry = {};
158
160
  function trackAuth(app, name, properties = {}, email) {
159
- if (!isValidEmail(email) || isTestIdentityEmail(email))
161
+ if (email && (!isValidEmail(email) || isTestIdentityEmail(email)))
160
162
  return;
161
163
  if (isSyntheticTrafficValue(window.__AGENT_NATIVE_SYNTHETIC_TRAFFIC__)) {
162
164
  return;
@@ -169,7 +171,11 @@ function trackAuth(app, name, properties = {}, email) {
169
171
  const timestamp = new Date().toISOString();
170
172
  const endpoint = resolveLaneEndpoint(config.agentNativeAnalyticsEndpoint ??
171
173
  "https://analytics.agent-native.com/track", window.location.hostname);
172
- const legacyProperties = { app, ...properties };
174
+ const legacyProperties = {
175
+ app,
176
+ ...(app === "design" ? builderSignupTelemetry : {}),
177
+ ...properties,
178
+ };
173
179
  const events = [{ name, properties: legacyProperties }];
174
180
  const canonical = canonicalTrackingEvent(name, legacyProperties);
175
181
  if (canonical)
@@ -432,12 +438,51 @@ export function shouldStartWithLocalDev(pathname, search) {
432
438
  }
433
439
  export function AuthPage(props) {
434
440
  const { authMode, googleOnly, initialPrompt, appBasePath, homePath, initialResumeHref, workspaceRuntime, trackingApp, defaultLocale, localeStorageKey, locales, localeMetadata, localeOptions, marketing, marketingLocales, brandMarkSrc, brandMarkLightSrc, githubUrl, appName, showGoogle, organizationSsoEnabled = false, googleViaIdentitySso = false, signupLegalNotice, signupLocalModeNote, docsAuthUrl, identitySsoEnabled = false, identitySsoAuto = false, publicOAuthOrigin, workspaceGatewayReturnOrigin, googleAuthMode, builderPreviewLocalDevEnabled, } = props;
441
+ const [builderSignup, setBuilderSignup] = React.useState(trackingApp === "design" ? null : { status: "disabled" });
442
+ const builderSignupRequest = React.useRef(null);
443
+ React.useEffect(() => {
444
+ if (trackingApp !== "design")
445
+ return;
446
+ builderSignupTelemetry = {};
447
+ let disposed = false;
448
+ builderSignupRequest.current ??= getBuilderSignupAssignment();
449
+ void builderSignupRequest.current.then((assignment) => {
450
+ if (disposed)
451
+ return;
452
+ setBuilderSignup(assignment);
453
+ }, () => {
454
+ if (!disposed) {
455
+ builderSignupTelemetry = {};
456
+ setBuilderSignup({ status: "unavailable" });
457
+ trackAuth(trackingApp, "auth.builder_signup_experiment_unavailable", {
458
+ stage: "assignment",
459
+ });
460
+ }
461
+ });
462
+ return () => {
463
+ disposed = true;
464
+ };
465
+ }, [trackingApp]);
435
466
  const [localePreference, setLocalePreference] = React.useState("system");
436
467
  const [locale, setLocale] = React.useState(defaultLocale);
437
468
  const [browserLocationReady, setBrowserLocationReady] = React.useState(false);
438
469
  React.useEffect(() => setBrowserLocationReady(true), []);
439
470
  const [localeMenuOpen, setLocaleMenuOpen] = React.useState(false);
440
471
  const [view, setView] = React.useState(props.initialView);
472
+ const builderSignupExposure = React.useRef(null);
473
+ React.useEffect(() => {
474
+ if (builderSignup?.status !== "assigned" ||
475
+ !["signup", "magicLink", "googleOnly"].includes(view) ||
476
+ builderSignupExposure.current === builderSignup.id)
477
+ return;
478
+ builderSignupExposure.current = builderSignup.id;
479
+ builderSignupTelemetry = {
480
+ experiment_id: "design_builder_signup_v1",
481
+ experiment_variant: builderSignup.variant,
482
+ assignment_id: builderSignup.id,
483
+ };
484
+ trackAuth(trackingApp, "auth.builder_signup_experiment_exposed", builderSignupTelemetry);
485
+ }, [builderSignup, trackingApp, view]);
441
486
  const [messages, setMessages] = React.useState({});
442
487
  const [submitting, setSubmitting] = React.useState(null);
443
488
  const [localDevAvailable, setLocalDevAvailable] = React.useState(false);
@@ -1069,11 +1114,34 @@ export function AuthPage(props) {
1069
1114
  publicOAuthOrigin,
1070
1115
  runtimeAppBasePath,
1071
1116
  }), [publicOAuthOrigin, runtimeAppBasePath]);
1117
+ const prepareBuilderSignup = React.useCallback(async (method, email, flowId = createFlowId()) => {
1118
+ if (builderSignup?.status !== "assigned" ||
1119
+ builderSignup.variant !== "automatic" ||
1120
+ view === "login")
1121
+ return undefined;
1122
+ try {
1123
+ await acceptBuilderSignupAssignment(builderSignup.id, flowId, method, email);
1124
+ return flowId;
1125
+ }
1126
+ catch {
1127
+ trackAuth(trackingApp, "auth.builder_signup_experiment_unavailable", { stage: "acceptance" }, email);
1128
+ return undefined;
1129
+ }
1130
+ }, [builderSignup, trackingApp, view]);
1072
1131
  const startGoogle = React.useCallback(async () => {
1073
- if (!showGoogle || googleBusy)
1132
+ if (!showGoogle || googleBusy || !builderSignup)
1074
1133
  return;
1075
1134
  setGoogleBusy(true);
1076
1135
  setNotice("google", null);
1136
+ const flowId = createFlowId();
1137
+ const redirectAfterAcceptance = async (url) => {
1138
+ const attemptId = await prepareBuilderSignup("google", undefined, flowId);
1139
+ const targetUrl = new URL(url, window.location.origin);
1140
+ if (attemptId)
1141
+ targetUrl.searchParams.set("builder_signup_attempt", attemptId);
1142
+ targetUrl.searchParams.set("flow_id", flowId);
1143
+ window.location.replace(targetUrl.toString());
1144
+ };
1077
1145
  try {
1078
1146
  window.sessionStorage.setItem("__an_signin", "1");
1079
1147
  }
@@ -1088,10 +1156,9 @@ export function AuthPage(props) {
1088
1156
  currentOrigin: window.location.origin,
1089
1157
  })) {
1090
1158
  const params = new URLSearchParams({ return: target });
1091
- window.location.replace(`${identityHref}?${params.toString()}`);
1159
+ await redirectAfterAcceptance(`${identityHref}?${params.toString()}`);
1092
1160
  return;
1093
1161
  }
1094
- const flowId = createFlowId();
1095
1162
  oauthFlowId.current = flowId;
1096
1163
  const flow = resolveGoogleFlow();
1097
1164
  const nativeDesktop = flow === "redirect" && isAgentNativeDesktop();
@@ -1112,7 +1179,7 @@ export function AuthPage(props) {
1112
1179
  return: oauthTarget,
1113
1180
  redirect: "1",
1114
1181
  });
1115
- window.location.replace(`${authUrl}?${params.toString()}`);
1182
+ await redirectAfterAcceptance(`${authUrl}?${params.toString()}`);
1116
1183
  return;
1117
1184
  }
1118
1185
  const verifier = createVerifier();
@@ -1143,7 +1210,7 @@ export function AuthPage(props) {
1143
1210
  return: oauthTarget,
1144
1211
  redirect: "1",
1145
1212
  });
1146
- window.location.replace(`${authUrl}?${params.toString()}`);
1213
+ await redirectAfterAcceptance(`${authUrl}?${params.toString()}`);
1147
1214
  return;
1148
1215
  }
1149
1216
  try {
@@ -1166,15 +1233,17 @@ export function AuthPage(props) {
1166
1233
  return: oauthTarget,
1167
1234
  redirect: "1",
1168
1235
  });
1169
- window.location.replace(`${authUrl}?${params.toString()}`);
1236
+ await redirectAfterAcceptance(`${authUrl}?${params.toString()}`);
1170
1237
  return;
1171
1238
  }
1172
1239
  }
1173
1240
  try {
1241
+ const attemptId = await prepareBuilderSignup("google", undefined, flowId);
1174
1242
  const params = new URLSearchParams({
1175
1243
  return: oauthTarget,
1176
1244
  desktop: "1",
1177
1245
  flow_id: flowId,
1246
+ ...(attemptId ? { builder_signup_attempt: attemptId } : {}),
1178
1247
  });
1179
1248
  const { response, data } = await requestJson(`${authUrl}?${params.toString()}`, {
1180
1249
  method: "POST",
@@ -1222,6 +1291,8 @@ export function AuthPage(props) {
1222
1291
  apiPath,
1223
1292
  googleAuthUrlPath,
1224
1293
  googleBusy,
1294
+ builderSignup,
1295
+ prepareBuilderSignup,
1225
1296
  identityHref,
1226
1297
  identityBootstrapHref,
1227
1298
  googleViaIdentitySso,
@@ -1424,11 +1495,13 @@ export function AuthPage(props) {
1424
1495
  auth_view: view,
1425
1496
  }, email);
1426
1497
  try {
1498
+ const builderSignupAttemptId = await prepareBuilderSignup("password", email);
1427
1499
  const { response, data } = await requestJson(apiPath("/_agent-native/auth/register"), {
1428
1500
  method: "POST",
1429
1501
  headers: { "Content-Type": "application/json" },
1430
1502
  body: JSON.stringify({
1431
1503
  email,
1504
+ ...(builderSignupAttemptId ? { builderSignupAttemptId } : {}),
1432
1505
  password: signupPassword,
1433
1506
  callbackURL: identityBootstrapHref(resumeHref()),
1434
1507
  }),
@@ -1483,6 +1556,7 @@ export function AuthPage(props) {
1483
1556
  signupEmail,
1484
1557
  signupPassword,
1485
1558
  signupPasswordConfirmation,
1559
+ prepareBuilderSignup,
1486
1560
  t,
1487
1561
  trackingApp,
1488
1562
  view,
@@ -1633,11 +1707,13 @@ export function AuthPage(props) {
1633
1707
  }, email);
1634
1708
  const desktop = isAgentNativeDesktop();
1635
1709
  try {
1710
+ const builderSignupAttemptId = await prepareBuilderSignup("magic-link", email);
1636
1711
  const { response, data } = await requestJson(apiPath("/_agent-native/auth/magic-link"), {
1637
1712
  method: "POST",
1638
1713
  headers: { "Content-Type": "application/json" },
1639
1714
  body: JSON.stringify({
1640
1715
  email,
1716
+ ...(builderSignupAttemptId ? { builderSignupAttemptId } : {}),
1641
1717
  callbackURL: desktop
1642
1718
  ? apiPath("/_agent-native/auth/magic-link/desktop-callback")
1643
1719
  : identityBootstrapHref(resumeHref()),
@@ -1672,6 +1748,7 @@ export function AuthPage(props) {
1672
1748
  apiPath,
1673
1749
  identityBootstrapHref,
1674
1750
  magicLinkEmail,
1751
+ prepareBuilderSignup,
1675
1752
  resumeHref,
1676
1753
  setNotice,
1677
1754
  startOAuthExchange,
@@ -1813,6 +1890,8 @@ export function AuthPage(props) {
1813
1890
  .filter(Boolean)
1814
1891
  .join(" ");
1815
1892
  const localModeNote = signupLocalModeNote ? (_jsxs("div", { className: "signup-local-mode-note", id: "signup-local-mode-note", "data-command": signupLocalModeNote.command, children: [_jsx("p", { children: signupLocalModeNote.text }), _jsx("code", { children: signupLocalModeNote.command }), _jsx("button", { type: "button", className: "copy-run-local", id: "copy-signup-local-mode", "data-copy-signup-local-mode": "true", "data-i18n": "copyCommand", onClick: () => void copySignupLocalMode(), children: copiedLocalMode ? t("copied") : t("copyCommand") })] })) : null;
1893
+ const builderLegalNote = builderSignup?.status === "assigned" &&
1894
+ builderSignup.variant === "automatic" ? (_jsxs("p", { className: "legal-note", children: [t("builderSignupDisclosure"), " ", _jsx("a", { href: "https://www.builder.io/legal/terms", target: "_blank", rel: "noopener noreferrer", children: t("legalTerms") }), " ", t("legalConnector"), " ", _jsx("a", { href: "https://www.builder.io/legal/privacy", target: "_blank", rel: "noopener noreferrer", children: t("legalPrivacy") }), t("legalSuffix")] })) : null;
1816
1895
  const legalNote = signupLegalNotice ? (_jsxs("p", { className: "legal-note", children: [_jsx("span", { "data-i18n": "legalPrefix", children: signupLegalNotice.prefix ?? t("legalPrefix") }), " ", _jsx("a", { href: signupLegalNotice.termsUrl, target: "_blank", rel: "noreferrer", "data-i18n": signupLegalNotice.termsLabel ? undefined : "legalTerms", children: signupLegalNotice.termsLabel ?? t("legalTerms") }), " ", _jsx("span", { "data-i18n": "legalConnector", children: signupLegalNotice.connector ?? t("legalConnector") }), " ", _jsx("a", { href: signupLegalNotice.privacyUrl, target: "_blank", rel: "noreferrer", "data-i18n": signupLegalNotice.privacyLabel ? undefined : "legalPrivacy", children: signupLegalNotice.privacyLabel ?? t("legalPrivacy") }), _jsx("span", { "data-i18n": "legalSuffix", children: signupLegalNotice.suffix ?? t("legalSuffix") })] })) : null;
1817
1896
  const signupForm = (_jsx(AuthForm, { id: "signup-form", className: view === "signup" ? "active" : undefined, onSubmit: handleSignup, fields: [
1818
1897
  {
@@ -1866,7 +1945,7 @@ export function AuthPage(props) {
1866
1945
  },
1867
1946
  ], submitLabel: t("createAccount"), submitProps: {
1868
1947
  "data-i18n": "createAccount",
1869
- disabled: submitting === "signup",
1948
+ disabled: submitting === "signup" || !builderSignup,
1870
1949
  }, footer: _jsxs(_Fragment, { children: [legalNote, localModeNote] }), messageId: "s-msg", messageClassName: `msg ${messages.signup ? `${messages.signup.kind} show` : ""}`, message: messages.signup?.text }));
1871
1950
  const authCard = (_jsxs("div", { className: cardClassName, children: [_jsx("h1", { id: "heading", "data-i18n": usesMarketingWelcome ? "welcomeToApp" : keys.heading, "data-auth-marketing-title": usesMarketingWelcome ? "true" : undefined, children: usesMarketingWelcome
1872
1951
  ? t("welcomeToApp").replace("{appName}", marketingAppName)
@@ -1876,7 +1955,7 @@ export function AuthPage(props) {
1876
1955
  ? "localDevHideFullOptions"
1877
1956
  : "localDevFullOptions", onClick: () => setFullAuthOptionsVisible((visible) => !visible), children: t(fullAuthOptionsVisible
1878
1957
  ? "localDevHideFullOptions"
1879
- : "localDevFullOptions") }), notice("local-dev")] }), _jsxs("div", { id: "full-auth-options", className: "full-auth-options", hidden: !fullAuthOptionsVisible, children: [googleOnly && !showGoogle ? (_jsx("p", { className: "google-error show", id: "google-err", role: "status", "data-i18n": "googleNotConfigured", children: t("googleNotConfigured") })) : null, showGoogle ? (_jsxs("div", { className: "google-signin", id: "google-signin", children: [_jsxs("button", { className: `btn-google ${view === "magicLink" && isValidEmail(magicLinkEmail) ? "magic-link-secondary" : ""}`, id: "google-btn", type: "button", disabled: googleBusy, "aria-busy": googleBusy, onClick: () => void startGoogle(), children: [googleBusy ? (_jsx(IconLoader2, { className: "animate-spin", "aria-hidden": "true" })) : (googleSvg()), _jsx("span", { "data-i18n": "googleButton", children: t("googleButton") })] }), notice("google"), _jsx("p", { className: "google-debug", id: "google-debug" })] })) : null, organizationSsoEnabled && !googleOnly ? (_jsxs("form", { id: "organization-sso-form", className: "sso-signin", onSubmit: handleOrganizationSso, children: [_jsx("label", { htmlFor: "sso-email", "data-i18n": "email", children: t("email") }), _jsx("input", { id: "sso-email", type: "email", autoComplete: "email", placeholder: t("ssoEmailPlaceholder"), required: true, value: ssoEmail, onChange: (event) => setSsoEmail(event.currentTarget.value) }), _jsx("button", { type: "submit", id: "organization-sso-submit", disabled: ssoBusy || !isValidEmail(ssoEmail), "data-i18n": "ssoButton", children: ssoBusy ? t("checking") : t("ssoButton") }), notice("sso")] })) : null, !googleOnly && showGoogle ? (_jsx("div", { className: "divider", id: "auth-divider", "data-i18n": "dividerOr", children: t("dividerOr") })) : null, !googleOnly && authMode === "magic-link" ? (_jsxs("form", { id: "magic-link-form", className: `form ${view === "magicLink" ? "active" : ""}`, onSubmit: handleMagicLink, children: [_jsx("label", { htmlFor: "m-email", "data-i18n": "email", children: t("email") }), _jsx("input", { id: "m-email", type: "email", autoComplete: "email", placeholder: t("emailPlaceholder"), required: true, value: magicLinkEmail, onChange: (event) => setMagicLinkEmail(event.currentTarget.value) }), _jsx("button", { type: "submit", id: "magic-link-submit", className: "magic-link-submit", disabled: magicLinkBusy || !isValidEmail(magicLinkEmail), "data-i18n": "sendMagicLink", children: magicLinkBusy ? t("sending") : t("sendMagicLink") }), notice("magic-link"), _jsx("p", { className: "auth-mode-switch", children: _jsx("button", { type: "button", className: "link-button auth-mode-link", id: "use-password-link", "data-i18n": "usePasswordInstead", onClick: () => setView("login"), children: t("usePasswordInstead") }) }), legalNote] })) : null, authMode === "magic-link" ? (_jsxs("div", { className: `magic-link-success ${view === "magicLinkSent" ? "is-visible" : ""}`, id: "magic-link-success", "aria-live": "polite", hidden: view !== "magicLinkSent", children: [_jsxs("p", { className: "magic-link-success-copy", children: [_jsx("span", { "data-i18n": "magicLinkSentCopy", children: t("magicLinkSentCopy") }), " ", _jsx("strong", { id: "magic-link-success-email", children: magicLinkEmail }), "."] }), _jsx("button", { type: "button", className: "link-button magic-link-back", id: "magic-link-back", "data-i18n": "back", onClick: () => {
1958
+ : "localDevFullOptions") }), notice("local-dev")] }), _jsxs("div", { id: "full-auth-options", className: "full-auth-options", hidden: !fullAuthOptionsVisible, children: [googleOnly && !showGoogle ? (_jsx("p", { className: "google-error show", id: "google-err", role: "status", "data-i18n": "googleNotConfigured", children: t("googleNotConfigured") })) : null, view !== "login" && builderLegalNote, showGoogle ? (_jsxs("div", { className: "google-signin", id: "google-signin", children: [_jsxs("button", { className: `btn-google ${view === "magicLink" && isValidEmail(magicLinkEmail) ? "magic-link-secondary" : ""}`, id: "google-btn", type: "button", disabled: googleBusy || !builderSignup, "aria-busy": googleBusy, onClick: () => void startGoogle(), children: [googleBusy ? (_jsx(IconLoader2, { className: "animate-spin", "aria-hidden": "true" })) : (googleSvg()), _jsx("span", { "data-i18n": "googleButton", children: t("googleButton") })] }), notice("google"), _jsx("p", { className: "google-debug", id: "google-debug" })] })) : null, organizationSsoEnabled && !googleOnly ? (_jsxs("form", { id: "organization-sso-form", className: "sso-signin", onSubmit: handleOrganizationSso, children: [_jsx("label", { htmlFor: "sso-email", "data-i18n": "email", children: t("email") }), _jsx("input", { id: "sso-email", type: "email", autoComplete: "email", placeholder: t("ssoEmailPlaceholder"), required: true, value: ssoEmail, onChange: (event) => setSsoEmail(event.currentTarget.value) }), _jsx("button", { type: "submit", id: "organization-sso-submit", disabled: !builderSignup || ssoBusy || !isValidEmail(ssoEmail), "data-i18n": "ssoButton", children: ssoBusy ? t("checking") : t("ssoButton") }), notice("sso")] })) : null, !googleOnly && showGoogle ? (_jsx("div", { className: "divider", id: "auth-divider", "data-i18n": "dividerOr", children: t("dividerOr") })) : null, !googleOnly && authMode === "magic-link" ? (_jsxs("form", { id: "magic-link-form", className: `form ${view === "magicLink" ? "active" : ""}`, onSubmit: handleMagicLink, children: [_jsx("label", { htmlFor: "m-email", "data-i18n": "email", children: t("email") }), _jsx("input", { id: "m-email", type: "email", autoComplete: "email", placeholder: t("emailPlaceholder"), required: true, value: magicLinkEmail, onChange: (event) => setMagicLinkEmail(event.currentTarget.value) }), _jsx("button", { type: "submit", id: "magic-link-submit", className: "magic-link-submit", disabled: !builderSignup || magicLinkBusy || !isValidEmail(magicLinkEmail), "data-i18n": "sendMagicLink", children: magicLinkBusy ? t("sending") : t("sendMagicLink") }), notice("magic-link"), _jsx("p", { className: "auth-mode-switch", children: _jsx("button", { type: "button", className: "link-button auth-mode-link", id: "use-password-link", "data-i18n": "usePasswordInstead", onClick: () => setView("login"), children: t("usePasswordInstead") }) }), legalNote] })) : null, authMode === "magic-link" ? (_jsxs("div", { className: `magic-link-success ${view === "magicLinkSent" ? "is-visible" : ""}`, id: "magic-link-success", "aria-live": "polite", hidden: view !== "magicLinkSent", children: [_jsxs("p", { className: "magic-link-success-copy", children: [_jsx("span", { "data-i18n": "magicLinkSentCopy", children: t("magicLinkSentCopy") }), " ", _jsx("strong", { id: "magic-link-success-email", children: magicLinkEmail }), "."] }), _jsx("button", { type: "button", className: "link-button magic-link-back", id: "magic-link-back", "data-i18n": "back", onClick: () => {
1880
1959
  setMagicLinkEmail("");
1881
1960
  setView("magicLink");
1882
1961
  }, children: t("back") })] })) : null, !googleOnly ? (_jsxs("div", { className: "tabs", id: "auth-tabs", hidden: view === "magicLink" ||