@agent-native/core 0.121.2 → 0.122.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 (588) hide show
  1. package/README.md +4 -12
  2. package/corpus/README.md +2 -2
  3. package/corpus/core/CHANGELOG.md +148 -0
  4. package/corpus/core/docs/content/actions.mdx +2 -2
  5. package/corpus/core/docs/content/agent-surfaces.mdx +1 -1
  6. package/corpus/core/docs/content/authentication.mdx +2 -0
  7. package/corpus/core/docs/content/deployment.mdx +36 -0
  8. package/corpus/core/docs/content/http-api.mdx +266 -0
  9. package/corpus/core/docs/content/syncing-template-changes.mdx +159 -0
  10. package/corpus/core/package.json +2 -1
  11. package/corpus/core/src/a2a/activity.ts +38 -27
  12. package/corpus/core/src/a2a/client.ts +57 -4
  13. package/corpus/core/src/agent/engine/builder-engine.ts +35 -4
  14. package/corpus/core/src/agent/run-manager.ts +20 -1
  15. package/corpus/core/src/agent/run-store.ts +4 -1
  16. package/corpus/core/src/agent/types.ts +28 -8
  17. package/corpus/core/src/chat-threads/store.ts +45 -0
  18. package/corpus/core/src/checkpoints/index.ts +2 -0
  19. package/corpus/core/src/checkpoints/route-match.ts +13 -0
  20. package/corpus/core/src/cli/create.ts +105 -17
  21. package/corpus/core/src/cli/index.ts +20 -0
  22. package/corpus/core/src/cli/template-baseline.ts +410 -0
  23. package/corpus/core/src/cli/template-sync.ts +1004 -0
  24. package/corpus/core/src/cli/templates-meta.ts +1 -0
  25. package/corpus/core/src/client/AssistantChat.tsx +38 -12
  26. package/corpus/core/src/client/NewWorkspaceAppFlow.tsx +75 -10
  27. package/corpus/core/src/client/chat/message-components.tsx +127 -66
  28. package/corpus/core/src/client/chat/tool-call-display.tsx +29 -5
  29. package/corpus/core/src/client/error-format.ts +18 -0
  30. package/corpus/core/src/client/org/OrgSwitcher.tsx +30 -8
  31. package/corpus/core/src/client/org/TeamPage.tsx +7 -6
  32. package/corpus/core/src/client/settings/SettingsPanel.tsx +9 -9
  33. package/corpus/core/src/client/settings/SettingsTabsPage.tsx +12 -2
  34. package/corpus/core/src/client/sse-event-processor.ts +3 -0
  35. package/corpus/core/src/data-widgets/index.ts +41 -0
  36. package/corpus/core/src/deploy/build.ts +11 -9
  37. package/corpus/core/src/extensions/url-safety.ts +67 -4
  38. package/corpus/core/src/integrations/webhook-handler.ts +63 -9
  39. package/corpus/core/src/org/auto-join-domain.ts +4 -3
  40. package/corpus/core/src/org/context.ts +108 -39
  41. package/corpus/core/src/org/index.ts +5 -0
  42. package/corpus/core/src/org/service-identity.ts +60 -0
  43. package/corpus/core/src/provider-api/index.ts +22 -1
  44. package/corpus/core/src/scripts/docs/search.ts +12 -1
  45. package/corpus/core/src/server/agent-chat/context-tools.ts +9 -4
  46. package/corpus/core/src/server/agent-chat/framework-prompts.ts +38 -66
  47. package/corpus/core/src/server/agent-chat-plugin.ts +17 -10
  48. package/corpus/core/src/server/agents-bundle.ts +84 -5
  49. package/corpus/core/src/server/auth.ts +4 -3
  50. package/corpus/core/src/server/builder-browser.ts +47 -19
  51. package/corpus/core/src/server/core-routes-plugin.ts +2 -2
  52. package/corpus/core/src/server/credential-provider.ts +209 -68
  53. package/corpus/core/src/server/index.ts +3 -0
  54. package/corpus/core/src/server/prompts/framework-core-compact.ts +6 -13
  55. package/corpus/core/src/server/prompts/framework-core.ts +9 -21
  56. package/corpus/core/src/server/prompts/index.ts +0 -1
  57. package/corpus/core/src/server/prompts/shared-rules.ts +19 -11
  58. package/corpus/core/src/server/ssr-handler.ts +13 -2
  59. package/corpus/core/src/settings/user-settings.ts +13 -1
  60. package/corpus/core/src/shared/cache-control.ts +141 -0
  61. package/corpus/core/src/templates/chat/.agents/skills/upgrade-agent-native/SKILL.md +24 -2
  62. package/corpus/core/src/templates/chat/_gitignore +1 -0
  63. package/corpus/core/src/templates/chat/app/components/layout/Sidebar.tsx +0 -7
  64. package/corpus/core/src/templates/default/.agents/skills/upgrade-agent-native/SKILL.md +24 -2
  65. package/corpus/core/src/templates/default/app/root.tsx +1 -1
  66. package/corpus/core/src/templates/default/public/manifest.json +2 -2
  67. package/corpus/core/src/templates/headless/.agents/skills/upgrade-agent-native/SKILL.md +24 -2
  68. package/corpus/core/src/templates/workspace-core/.agents/skills/performance/SKILL.md +19 -0
  69. package/corpus/core/src/templates/workspace-core/.agents/skills/upgrade-agent-native/SKILL.md +24 -2
  70. package/corpus/core/src/templates/workspace-core/.agents/skills/visual-answer/SKILL.md +1 -0
  71. package/corpus/core/src/vite/agents-bundle-plugin.ts +7 -6
  72. package/corpus/core/src/vite/client.ts +69 -3
  73. package/corpus/templates/analytics/.agents/skills/adhoc-analysis/SKILL.md +4 -5
  74. package/corpus/templates/analytics/.agents/skills/admin-surfaces/SKILL.md +55 -0
  75. package/corpus/templates/analytics/.agents/skills/dashboard-management/SKILL.md +10 -0
  76. package/corpus/templates/analytics/.agents/skills/dashboard-management/references/template-catalog-and-demo.md +62 -0
  77. package/corpus/templates/analytics/.agents/skills/dashboard-ops/SKILL.md +85 -0
  78. package/corpus/templates/analytics/.agents/skills/data-querying/SKILL.md +27 -2
  79. package/corpus/templates/analytics/.agents/skills/data-querying/references/inline-chart-embeds.md +139 -0
  80. package/corpus/templates/analytics/.agents/skills/monitoring/SKILL.md +77 -0
  81. package/corpus/templates/analytics/.agents/skills/upgrade-agent-native/SKILL.md +24 -2
  82. package/corpus/templates/analytics/AGENTS.md +91 -563
  83. package/corpus/templates/analytics/_gitignore +1 -0
  84. package/corpus/templates/analytics/actions/bigquery.ts +12 -4
  85. package/corpus/templates/analytics/actions/generate-chart.ts +5 -5
  86. package/corpus/templates/analytics/app/components/dashboard/SqlChart.tsx +30 -1
  87. package/corpus/templates/analytics/app/components/layout/Sidebar.tsx +1 -23
  88. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/DashboardFilterBar.tsx +3 -0
  89. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/SqlChartCard.tsx +1 -1
  90. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/index.tsx +1 -0
  91. package/corpus/templates/analytics/app/routes/_index.tsx +1 -1
  92. package/corpus/templates/analytics/changelog/2026-07-24-analytics-finds-saved-dashboards-and-queries-far-more-reliab.md +6 -0
  93. package/corpus/templates/analytics/changelog/2026-07-24-notion-access-errors-now-explain-that-a-page-needs-sharing-w.md +6 -0
  94. package/corpus/templates/analytics/changelog/2026-07-25-app-branding-now-uses-the-product-name-without-the-agent-nat.md +6 -0
  95. package/corpus/templates/analytics/changelog/2026-07-25-settings-navigation-now-keeps-manage-agent-as-a-dedicated-li.md +6 -0
  96. package/corpus/templates/analytics/package.json +1 -1
  97. package/corpus/templates/analytics/public/manifest.json +1 -1
  98. package/corpus/templates/analytics/server/lib/agent-chat-plan-mode.ts +7 -0
  99. package/corpus/templates/analytics/server/lib/analytics-query-catalog.ts +191 -30
  100. package/corpus/templates/analytics/server/lib/bigquery.ts +11 -1
  101. package/corpus/templates/analytics/server/lib/notion.ts +15 -4
  102. package/corpus/templates/analytics/server/plugins/agent-chat.ts +10 -0
  103. package/corpus/templates/analytics/server/plugins/auth.ts +1 -1
  104. package/corpus/templates/assets/.agents/skills/upgrade-agent-native/SKILL.md +24 -2
  105. package/corpus/templates/assets/app/components/layout/Sidebar.tsx +0 -2
  106. package/corpus/templates/assets/app/routes/_index.tsx +1 -1
  107. package/corpus/templates/assets/changelog/2026-07-25-app-branding-now-uses-the-product-name-without-the-agent-nat.md +6 -0
  108. package/corpus/templates/assets/changelog/2026-07-25-settings-navigation-now-keeps-manage-agent-as-a-dedicated-li.md +6 -0
  109. package/corpus/templates/assets/server/plugins/auth.ts +1 -1
  110. package/corpus/templates/brain/.agents/skills/upgrade-agent-native/SKILL.md +24 -2
  111. package/corpus/templates/brain/_gitignore +1 -0
  112. package/corpus/templates/brain/app/lib/brain.ts +0 -7
  113. package/corpus/templates/brain/app/routes/_index.tsx +1 -2
  114. package/corpus/templates/brain/changelog/2026-07-25-app-branding-now-uses-the-product-name-without-the-agent-nat.md +6 -0
  115. package/corpus/templates/brain/changelog/2026-07-25-settings-navigation-now-keeps-manage-agent-as-a-dedicated-li.md +6 -0
  116. package/corpus/templates/brain/package.json +1 -1
  117. package/corpus/templates/brain/public/manifest.json +1 -1
  118. package/corpus/templates/brain/server/plugins/auth.ts +1 -1
  119. package/corpus/templates/calendar/.agents/skills/upgrade-agent-native/SKILL.md +24 -2
  120. package/corpus/templates/calendar/_gitignore +1 -0
  121. package/corpus/templates/calendar/app/components/layout/Sidebar.tsx +0 -6
  122. package/corpus/templates/calendar/app/routes/_app._index.tsx +1 -1
  123. package/corpus/templates/calendar/changelog/2026-07-25-app-branding-now-uses-the-product-name-without-the-agent-nat.md +6 -0
  124. package/corpus/templates/calendar/changelog/2026-07-25-settings-navigation-now-keeps-manage-agent-as-a-dedicated-li.md +6 -0
  125. package/corpus/templates/calendar/package.json +1 -1
  126. package/corpus/templates/calendar/public/manifest.json +1 -1
  127. package/corpus/templates/calendar/server/plugins/auth.ts +1 -1
  128. package/corpus/templates/chat/.agents/skills/upgrade-agent-native/SKILL.md +24 -2
  129. package/corpus/templates/chat/_gitignore +1 -0
  130. package/corpus/templates/chat/app/components/layout/Sidebar.tsx +0 -7
  131. package/corpus/templates/chat/changelog/2026-07-25-settings-navigation-now-keeps-manage-agent-as-a-dedicated-li.md +6 -0
  132. package/corpus/templates/clips/.agents/skills/upgrade-agent-native/SKILL.md +24 -2
  133. package/corpus/templates/clips/.agents/skills/video-sharing/SKILL.md +34 -0
  134. package/corpus/templates/clips/AGENTS.md +5 -4
  135. package/corpus/templates/clips/_gitignore +1 -0
  136. package/corpus/templates/clips/actions/cleanup-transcript.ts +5 -0
  137. package/corpus/templates/clips/actions/get-recording-insights.ts +44 -8
  138. package/corpus/templates/clips/actions/get-recording-player-data.ts +39 -70
  139. package/corpus/templates/clips/actions/import-loom-recording.ts +53 -98
  140. package/corpus/templates/clips/actions/lib/loom-import-job.ts +260 -0
  141. package/corpus/templates/clips/actions/list-clip-views.ts +2 -4
  142. package/corpus/templates/clips/actions/list-recordings.ts +69 -19
  143. package/corpus/templates/clips/actions/list-viewers.ts +5 -2
  144. package/corpus/templates/clips/actions/regenerate-summary.ts +5 -1
  145. package/corpus/templates/clips/actions/request-transcript.ts +28 -1
  146. package/corpus/templates/clips/app/components/editor/stitch-manager.tsx +21 -1
  147. package/corpus/templates/clips/app/components/library/library-layout.tsx +0 -7
  148. package/corpus/templates/clips/app/components/meetings/quick-ask-sidebar.tsx +14 -1
  149. package/corpus/templates/clips/app/components/player/insights-panel.tsx +8 -20
  150. package/corpus/templates/clips/app/components/player/recording-views-badge.tsx +335 -0
  151. package/corpus/templates/clips/app/components/player/video-player.tsx +13 -8
  152. package/corpus/templates/clips/app/components/sharing/share-ui.tsx +2 -1
  153. package/corpus/templates/clips/app/i18n/en-US.ts +13 -2
  154. package/corpus/templates/clips/app/lib/capture-permissions.ts +110 -0
  155. package/corpus/templates/clips/app/lib/recording-link.ts +32 -0
  156. package/corpus/templates/clips/app/routes/_app.library._index.tsx +1 -1
  157. package/corpus/templates/clips/app/routes/_app.meetings.$meetingId.tsx +27 -0
  158. package/corpus/templates/clips/app/routes/_index.tsx +1 -1
  159. package/corpus/templates/clips/app/routes/r.$recordingId.tsx +52 -15
  160. package/corpus/templates/clips/app/routes/record.tsx +82 -31
  161. package/corpus/templates/clips/app/routes/share.$shareId.tsx +42 -31
  162. package/corpus/templates/clips/changelog/2026-07-24-clip-pages-now-show-a-view-count-with-viewer-avatars-next-to.md +6 -0
  163. package/corpus/templates/clips/changelog/2026-07-24-clip-summaries-read-like-a-description-you-d-write-yourself-.md +6 -0
  164. package/corpus/templates/clips/changelog/2026-07-24-clip-view-counts-now-separate-human-views-from-agent-views-s.md +6 -0
  165. package/corpus/templates/clips/changelog/2026-07-24-clips-actions-can-now-be-called-by-org-service-tokens-so-ext.md +6 -0
  166. package/corpus/templates/clips/changelog/2026-07-24-clips-no-longer-briefly-shows-a-dock-icon-while-launching.md +6 -0
  167. package/corpus/templates/clips/changelog/2026-07-24-fixed-owner-and-editor-share-links-redirecting-to-the-record.md +6 -0
  168. package/corpus/templates/clips/changelog/2026-07-24-meeting-and-note-recordings-now-start-as-a-compact-pill-on-t.md +6 -0
  169. package/corpus/templates/clips/changelog/2026-07-24-new-clips-now-copy-a-shareable-link-instead-of-the-owner-onl.md +6 -0
  170. package/corpus/templates/clips/changelog/2026-07-24-opening-a-share-link-as-the-clip-s-owner-now-goes-straight-t.md +6 -0
  171. package/corpus/templates/clips/changelog/2026-07-24-permissions-and-rewind-controls-now-use-compact-consistent-h.md +6 -0
  172. package/corpus/templates/clips/changelog/2026-07-24-quitting-the-desktop-app-no-longer-shows-a-false-macos-crash.md +6 -0
  173. package/corpus/templates/clips/changelog/2026-07-24-screen-recording-permission-errors-now-name-the-exact-app-to.md +6 -0
  174. package/corpus/templates/clips/changelog/2026-07-24-the-desktop-app-now-copies-a-new-clip-s-share-link-to-your-c.md +6 -0
  175. package/corpus/templates/clips/changelog/2026-07-24-the-recording-toolbar-now-stays-above-other-apps-including-o.md +6 -0
  176. package/corpus/templates/clips/changelog/2026-07-24-transcript-captions-now-use-real-speech-timings-instead-of-a.md +6 -0
  177. package/corpus/templates/clips/changelog/2026-07-24-video-playback-no-longer-stutters-and-replays-the-last-momen.md +6 -0
  178. package/corpus/templates/clips/changelog/2026-07-25-app-branding-now-uses-the-product-name-without-the-agent-nat.md +6 -0
  179. package/corpus/templates/clips/changelog/2026-07-25-settings-navigation-now-keeps-manage-agent-as-a-dedicated-li.md +6 -0
  180. package/corpus/templates/clips/chrome-extension/src/background.ts +17 -1
  181. package/corpus/templates/clips/desktop/package.json +2 -0
  182. package/corpus/templates/clips/desktop/src/app.tsx +89 -0
  183. package/corpus/templates/clips/desktop/src/hooks/useMeetingTranscription.ts +9 -3
  184. package/corpus/templates/clips/desktop/src/lib/audio-meter.ts +51 -0
  185. package/corpus/templates/clips/desktop/src/lib/native-notification.ts +44 -0
  186. package/corpus/templates/clips/desktop/src/lib/recording-link.ts +67 -0
  187. package/corpus/templates/clips/desktop/src/overlays/live-audio-bars.tsx +35 -35
  188. package/corpus/templates/clips/desktop/src/overlays/live-transcript.tsx +3 -2
  189. package/corpus/templates/clips/desktop/src/overlays/recording-pill.tsx +47 -46
  190. package/corpus/templates/clips/desktop/src/styles.css +127 -78
  191. package/corpus/templates/clips/desktop/src-tauri/Cargo.toml +7 -0
  192. package/corpus/templates/clips/desktop/src-tauri/Info.plist +6 -0
  193. package/corpus/templates/clips/desktop/src-tauri/capabilities/default.json +1 -0
  194. package/corpus/templates/clips/desktop/src-tauri/src/clips/mod.rs +7 -3
  195. package/corpus/templates/clips/desktop/src-tauri/src/lib.rs +4 -1
  196. package/corpus/templates/clips/desktop/src-tauri/src/main.rs +8 -0
  197. package/corpus/templates/clips/desktop/src-tauri/src/recording_indicator.rs +21 -10
  198. package/corpus/templates/clips/desktop/src-tauri/src/util.rs +40 -0
  199. package/corpus/templates/clips/server/db/schema.ts +27 -0
  200. package/corpus/templates/clips/server/lib/agent-views.ts +145 -0
  201. package/corpus/templates/clips/server/lib/post-finalize-dispatch.ts +2 -1
  202. package/corpus/templates/clips/server/lib/public-agent-context.ts +7 -0
  203. package/corpus/templates/clips/server/lib/recording-share-grant.ts +79 -0
  204. package/corpus/templates/clips/server/lib/recordings.ts +51 -3
  205. package/corpus/templates/clips/server/plugins/auth.ts +1 -1
  206. package/corpus/templates/clips/server/plugins/db.ts +31 -0
  207. package/corpus/templates/clips/server/routes/api/_agent-native-background/post-finalize-worker.post.ts +56 -3
  208. package/corpus/templates/clips/server/routes/api/public-recording.get.ts +49 -17
  209. package/corpus/templates/clips/shared/recording-link.ts +43 -0
  210. package/corpus/templates/clips/shared/share-attribution.ts +4 -0
  211. package/corpus/templates/clips/shared/share-dashboard-redirect.ts +42 -0
  212. package/corpus/templates/clips/shared/view-analytics.ts +26 -0
  213. package/corpus/templates/content/.agents/skills/content/SKILL.md +5 -0
  214. package/corpus/templates/content/.agents/skills/content/references/local-file-mode.md +135 -0
  215. package/corpus/templates/content/.agents/skills/document-editing/SKILL.md +12 -0
  216. package/corpus/templates/content/.agents/skills/document-editing/references/databases.md +238 -0
  217. package/corpus/templates/content/.agents/skills/document-editing/references/document-behavior.md +91 -0
  218. package/corpus/templates/content/.agents/skills/upgrade-agent-native/SKILL.md +24 -2
  219. package/corpus/templates/content/AGENTS.md +62 -583
  220. package/corpus/templates/content/_gitignore +1 -0
  221. package/corpus/templates/content/app/components/sidebar/DocumentSidebar.tsx +1 -39
  222. package/corpus/templates/content/app/routes/_app._index.tsx +1 -2
  223. package/corpus/templates/content/changelog/2026-07-25-app-branding-now-uses-the-product-name-without-the-agent-nat.md +6 -0
  224. package/corpus/templates/content/changelog/2026-07-25-settings-navigation-now-keeps-manage-agent-as-a-dedicated-li.md +6 -0
  225. package/corpus/templates/content/package.json +1 -1
  226. package/corpus/templates/content/public/manifest.json +1 -1
  227. package/corpus/templates/content/server/plugins/auth.ts +1 -1
  228. package/corpus/templates/design/.agents/skills/creative-context/SKILL.md +11 -0
  229. package/corpus/templates/design/.agents/skills/design-generation/SKILL.md +50 -8
  230. package/corpus/templates/design/.agents/skills/design-generation/references/code-layers.md +81 -0
  231. package/corpus/templates/design/.agents/skills/design-generation/references/code-workspace.md +42 -0
  232. package/corpus/templates/design/.agents/skills/design-generation/references/editor-extensions.md +34 -0
  233. package/corpus/templates/design/.agents/skills/responsive-breakpoints/SKILL.md +4 -1
  234. package/corpus/templates/design/.agents/skills/upgrade-agent-native/SKILL.md +24 -2
  235. package/corpus/templates/design/.agents/skills/visual-edit/SKILL.md +17 -0
  236. package/corpus/templates/design/.generated/bridge/editor-chrome.generated.ts +8196 -0
  237. package/corpus/templates/design/.generated/bridge/embedded-wheel.generated.ts +265 -0
  238. package/corpus/templates/design/.generated/bridge/hit-test.generated.ts +642 -0
  239. package/corpus/templates/design/.generated/bridge/motion-preview.generated.ts +571 -0
  240. package/corpus/templates/design/.generated/bridge/nav.generated.ts +91 -0
  241. package/corpus/templates/design/.generated/bridge/sample.generated.ts +23 -0
  242. package/corpus/templates/design/.generated/bridge/shader-fill-preview.generated.ts +263 -0
  243. package/corpus/templates/design/.generated/bridge/shader-runtime.generated.ts +518 -0
  244. package/corpus/templates/design/.generated/bridge/tweak.generated.ts +20 -0
  245. package/corpus/templates/design/.generated/bridge/zoom.generated.ts +32 -0
  246. package/corpus/templates/design/AGENTS.md +88 -503
  247. package/corpus/templates/design/_gitignore +1 -0
  248. package/corpus/templates/design/app/components/layout/Sidebar.tsx +0 -2
  249. package/corpus/templates/design/app/routes/_index.tsx +1 -1
  250. package/corpus/templates/design/changelog/2026-07-25-app-branding-now-uses-the-product-name-without-the-agent-nat.md +6 -0
  251. package/corpus/templates/design/changelog/2026-07-25-settings-navigation-now-keeps-manage-agent-as-a-dedicated-li.md +6 -0
  252. package/corpus/templates/design/server/plugins/auth.ts +1 -1
  253. package/corpus/templates/dispatch/.agents/skills/upgrade-agent-native/SKILL.md +24 -2
  254. package/corpus/templates/dispatch/_gitignore +1 -0
  255. package/corpus/templates/dispatch/app/dispatch-extensions.tsx +1 -10
  256. package/corpus/templates/dispatch/app/routes/overview.tsx +1 -1
  257. package/corpus/templates/dispatch/changelog/2026-07-24-signing-in-now-puts-you-in-your-companys-workspace.md +6 -0
  258. package/corpus/templates/dispatch/changelog/2026-07-25-app-branding-now-uses-the-product-name-without-the-agent-nat.md +6 -0
  259. package/corpus/templates/dispatch/changelog/2026-07-25-settings-navigation-now-keeps-manage-agent-as-a-dedicated-li.md +6 -0
  260. package/corpus/templates/dispatch/package.json +1 -1
  261. package/corpus/templates/dispatch/public/manifest.json +1 -1
  262. package/corpus/templates/forms/.agents/skills/upgrade-agent-native/SKILL.md +24 -2
  263. package/corpus/templates/forms/_gitignore +1 -0
  264. package/corpus/templates/forms/app/components/layout/Sidebar.tsx +0 -35
  265. package/corpus/templates/forms/changelog/2026-07-25-app-branding-now-uses-the-product-name-without-the-agent-nat.md +6 -0
  266. package/corpus/templates/forms/changelog/2026-07-25-settings-navigation-now-keeps-manage-agent-as-a-dedicated-li.md +6 -0
  267. package/corpus/templates/forms/package.json +1 -1
  268. package/corpus/templates/forms/public/manifest.json +1 -1
  269. package/corpus/templates/forms/server/lib/public-form-ssr.ts +2 -2
  270. package/corpus/templates/forms/server/plugins/auth.ts +1 -1
  271. package/corpus/templates/macros/.agents/skills/upgrade-agent-native/SKILL.md +24 -2
  272. package/corpus/templates/macros/_gitignore +1 -0
  273. package/corpus/templates/macros/app/components/layout/AppLayout.tsx +0 -2
  274. package/corpus/templates/macros/changelog/2026-07-25-app-branding-now-uses-the-product-name-without-the-agent-nat.md +6 -0
  275. package/corpus/templates/macros/changelog/2026-07-25-settings-navigation-now-keeps-manage-agent-as-a-dedicated-li.md +6 -0
  276. package/corpus/templates/macros/package.json +1 -1
  277. package/corpus/templates/macros/server/plugins/auth.ts +2 -2
  278. package/corpus/templates/mail/.agents/skills/upgrade-agent-native/SKILL.md +24 -2
  279. package/corpus/templates/mail/_gitignore +1 -0
  280. package/corpus/templates/mail/app/components/layout/AppLayout.tsx +0 -39
  281. package/corpus/templates/mail/app/routes/$view.$threadId.tsx +1 -1
  282. package/corpus/templates/mail/app/routes/$view.tsx +1 -1
  283. package/corpus/templates/mail/app/routes/_index.tsx +1 -1
  284. package/corpus/templates/mail/changelog/2026-07-25-app-branding-now-uses-the-product-name-without-the-agent-nat.md +6 -0
  285. package/corpus/templates/mail/changelog/2026-07-25-settings-navigation-now-keeps-manage-agent-as-a-dedicated-li.md +6 -0
  286. package/corpus/templates/mail/package.json +1 -1
  287. package/corpus/templates/mail/public/manifest.json +1 -1
  288. package/corpus/templates/mail/server/plugins/auth.ts +1 -1
  289. package/corpus/templates/plan/.agents/skills/upgrade-agent-native/SKILL.md +24 -2
  290. package/corpus/templates/plan/_gitignore +1 -0
  291. package/corpus/templates/plan/agent-native.app-skill.json +1 -1
  292. package/corpus/templates/plan/app/components/layout/Sidebar.tsx +4 -9
  293. package/corpus/templates/plan/app/lib/app-config.ts +1 -1
  294. package/corpus/templates/plan/changelog/2026-07-25-app-branding-now-uses-the-product-name-without-the-agent-nat.md +6 -0
  295. package/corpus/templates/plan/changelog/2026-07-25-settings-navigation-now-keeps-manage-agent-as-a-dedicated-li.md +6 -0
  296. package/corpus/templates/plan/package.json +1 -1
  297. package/corpus/templates/plan/public/manifest.json +1 -1
  298. package/corpus/templates/plan/server/plugins/auth.ts +1 -1
  299. package/corpus/templates/slides/.agents/skills/upgrade-agent-native/SKILL.md +24 -2
  300. package/corpus/templates/slides/_gitignore +1 -0
  301. package/corpus/templates/slides/app/components/layout/Sidebar.tsx +0 -2
  302. package/corpus/templates/slides/app/routes/_index.tsx +1 -1
  303. package/corpus/templates/slides/changelog/2026-07-25-app-branding-now-uses-the-product-name-without-the-agent-nat.md +6 -0
  304. package/corpus/templates/slides/changelog/2026-07-25-settings-navigation-now-keeps-manage-agent-as-a-dedicated-li.md +6 -0
  305. package/corpus/templates/slides/package.json +1 -1
  306. package/corpus/templates/slides/public/manifest.json +1 -1
  307. package/corpus/templates/slides/server/plugins/auth.ts +1 -1
  308. package/corpus/templates/slides/server/plugins/db.ts +4 -0
  309. package/corpus/templates/tasks/.agents/skills/upgrade-agent-native/SKILL.md +24 -2
  310. package/corpus/templates/tasks/AGENTS.md +1 -1
  311. package/corpus/templates/tasks/_gitignore +1 -0
  312. package/dist/a2a/activity.d.ts +4 -1
  313. package/dist/a2a/activity.d.ts.map +1 -1
  314. package/dist/a2a/activity.js +27 -16
  315. package/dist/a2a/activity.js.map +1 -1
  316. package/dist/a2a/client.d.ts.map +1 -1
  317. package/dist/a2a/client.js +58 -4
  318. package/dist/a2a/client.js.map +1 -1
  319. package/dist/agent/engine/builder-engine.d.ts +1 -0
  320. package/dist/agent/engine/builder-engine.d.ts.map +1 -1
  321. package/dist/agent/engine/builder-engine.js +31 -4
  322. package/dist/agent/engine/builder-engine.js.map +1 -1
  323. package/dist/agent/run-manager.d.ts.map +1 -1
  324. package/dist/agent/run-manager.js +18 -1
  325. package/dist/agent/run-manager.js.map +1 -1
  326. package/dist/agent/run-store.d.ts +1 -0
  327. package/dist/agent/run-store.d.ts.map +1 -1
  328. package/dist/agent/run-store.js +2 -1
  329. package/dist/agent/run-store.js.map +1 -1
  330. package/dist/agent/types.d.ts +12 -1
  331. package/dist/agent/types.d.ts.map +1 -1
  332. package/dist/agent/types.js +21 -1
  333. package/dist/agent/types.js.map +1 -1
  334. package/dist/chat-threads/store.d.ts +10 -0
  335. package/dist/chat-threads/store.d.ts.map +1 -1
  336. package/dist/chat-threads/store.js +41 -0
  337. package/dist/chat-threads/store.js.map +1 -1
  338. package/dist/checkpoints/index.d.ts +1 -0
  339. package/dist/checkpoints/index.d.ts.map +1 -1
  340. package/dist/checkpoints/index.js +1 -0
  341. package/dist/checkpoints/index.js.map +1 -1
  342. package/dist/checkpoints/route-match.d.ts +8 -0
  343. package/dist/checkpoints/route-match.d.ts.map +1 -0
  344. package/dist/checkpoints/route-match.js +13 -0
  345. package/dist/checkpoints/route-match.js.map +1 -0
  346. package/dist/cli/create.d.ts +35 -4
  347. package/dist/cli/create.d.ts.map +1 -1
  348. package/dist/cli/create.js +69 -19
  349. package/dist/cli/create.js.map +1 -1
  350. package/dist/cli/index.js +19 -0
  351. package/dist/cli/index.js.map +1 -1
  352. package/dist/cli/template-baseline.d.ts +54 -0
  353. package/dist/cli/template-baseline.d.ts.map +1 -0
  354. package/dist/cli/template-baseline.js +334 -0
  355. package/dist/cli/template-baseline.js.map +1 -0
  356. package/dist/cli/template-sync.d.ts +57 -0
  357. package/dist/cli/template-sync.d.ts.map +1 -0
  358. package/dist/cli/template-sync.js +787 -0
  359. package/dist/cli/template-sync.js.map +1 -0
  360. package/dist/cli/templates-meta.d.ts.map +1 -1
  361. package/dist/cli/templates-meta.js +1 -0
  362. package/dist/cli/templates-meta.js.map +1 -1
  363. package/dist/client/AssistantChat.d.ts +2 -1
  364. package/dist/client/AssistantChat.d.ts.map +1 -1
  365. package/dist/client/AssistantChat.js +38 -10
  366. package/dist/client/AssistantChat.js.map +1 -1
  367. package/dist/client/NewWorkspaceAppFlow.d.ts.map +1 -1
  368. package/dist/client/NewWorkspaceAppFlow.js +32 -2
  369. package/dist/client/NewWorkspaceAppFlow.js.map +1 -1
  370. package/dist/client/chat/message-components.d.ts +20 -0
  371. package/dist/client/chat/message-components.d.ts.map +1 -1
  372. package/dist/client/chat/message-components.js +81 -46
  373. package/dist/client/chat/message-components.js.map +1 -1
  374. package/dist/client/chat/tool-call-display.d.ts.map +1 -1
  375. package/dist/client/chat/tool-call-display.js +14 -6
  376. package/dist/client/chat/tool-call-display.js.map +1 -1
  377. package/dist/client/error-format.d.ts.map +1 -1
  378. package/dist/client/error-format.js +13 -0
  379. package/dist/client/error-format.js.map +1 -1
  380. package/dist/client/org/OrgSwitcher.d.ts +8 -1
  381. package/dist/client/org/OrgSwitcher.d.ts.map +1 -1
  382. package/dist/client/org/OrgSwitcher.js +3 -2
  383. package/dist/client/org/OrgSwitcher.js.map +1 -1
  384. package/dist/client/org/TeamPage.d.ts.map +1 -1
  385. package/dist/client/org/TeamPage.js +1 -1
  386. package/dist/client/org/TeamPage.js.map +1 -1
  387. package/dist/client/settings/SettingsPanel.js +9 -9
  388. package/dist/client/settings/SettingsPanel.js.map +1 -1
  389. package/dist/client/settings/SettingsTabsPage.d.ts.map +1 -1
  390. package/dist/client/settings/SettingsTabsPage.js +7 -4
  391. package/dist/client/settings/SettingsTabsPage.js.map +1 -1
  392. package/dist/client/sse-event-processor.d.ts.map +1 -1
  393. package/dist/client/sse-event-processor.js +3 -0
  394. package/dist/client/sse-event-processor.js.map +1 -1
  395. package/dist/collab/awareness.d.ts +2 -2
  396. package/dist/collab/awareness.d.ts.map +1 -1
  397. package/dist/collab/struct-routes.d.ts +1 -1
  398. package/dist/data-widgets/index.d.ts +3 -0
  399. package/dist/data-widgets/index.d.ts.map +1 -1
  400. package/dist/data-widgets/index.js +33 -0
  401. package/dist/data-widgets/index.js.map +1 -1
  402. package/dist/deploy/build.d.ts.map +1 -1
  403. package/dist/deploy/build.js +11 -7
  404. package/dist/deploy/build.js.map +1 -1
  405. package/dist/eject/provider-api-definitions.d.ts +1 -0
  406. package/dist/eject/provider-api-definitions.d.ts.map +1 -1
  407. package/dist/extensions/url-safety.d.ts +9 -16
  408. package/dist/extensions/url-safety.d.ts.map +1 -1
  409. package/dist/extensions/url-safety.js +48 -4
  410. package/dist/extensions/url-safety.js.map +1 -1
  411. package/dist/file-upload/actions/upload-image.d.ts +1 -1
  412. package/dist/integrations/webhook-handler.d.ts.map +1 -1
  413. package/dist/integrations/webhook-handler.js +46 -9
  414. package/dist/integrations/webhook-handler.js.map +1 -1
  415. package/dist/notifications/routes.d.ts +2 -2
  416. package/dist/observability/routes.d.ts +3 -3
  417. package/dist/org/auto-join-domain.d.ts +3 -2
  418. package/dist/org/auto-join-domain.d.ts.map +1 -1
  419. package/dist/org/auto-join-domain.js +1 -1
  420. package/dist/org/auto-join-domain.js.map +1 -1
  421. package/dist/org/context.d.ts.map +1 -1
  422. package/dist/org/context.js +84 -28
  423. package/dist/org/context.js.map +1 -1
  424. package/dist/org/index.d.ts +1 -0
  425. package/dist/org/index.d.ts.map +1 -1
  426. package/dist/org/index.js +1 -0
  427. package/dist/org/index.js.map +1 -1
  428. package/dist/org/service-identity.d.ts +43 -0
  429. package/dist/org/service-identity.d.ts.map +1 -0
  430. package/dist/org/service-identity.js +34 -0
  431. package/dist/org/service-identity.js.map +1 -0
  432. package/dist/provider-api/actions/custom-provider-registration.d.ts +14 -14
  433. package/dist/provider-api/actions/provider-api.d.ts +13 -11
  434. package/dist/provider-api/actions/provider-api.d.ts.map +1 -1
  435. package/dist/provider-api/index.d.ts +4 -0
  436. package/dist/provider-api/index.d.ts.map +1 -1
  437. package/dist/provider-api/index.js +17 -1
  438. package/dist/provider-api/index.js.map +1 -1
  439. package/dist/scripts/docs/search.d.ts.map +1 -1
  440. package/dist/scripts/docs/search.js +12 -1
  441. package/dist/scripts/docs/search.js.map +1 -1
  442. package/dist/server/agent-chat/context-tools.d.ts.map +1 -1
  443. package/dist/server/agent-chat/context-tools.js +3 -3
  444. package/dist/server/agent-chat/context-tools.js.map +1 -1
  445. package/dist/server/agent-chat/framework-prompts.d.ts +8 -3
  446. package/dist/server/agent-chat/framework-prompts.d.ts.map +1 -1
  447. package/dist/server/agent-chat/framework-prompts.js +33 -62
  448. package/dist/server/agent-chat/framework-prompts.js.map +1 -1
  449. package/dist/server/agent-chat-plugin.d.ts.map +1 -1
  450. package/dist/server/agent-chat-plugin.js +16 -10
  451. package/dist/server/agent-chat-plugin.js.map +1 -1
  452. package/dist/server/agent-engine-api-key-route.d.ts +1 -1
  453. package/dist/server/agents-bundle.d.ts +18 -0
  454. package/dist/server/agents-bundle.d.ts.map +1 -1
  455. package/dist/server/agents-bundle.js +70 -4
  456. package/dist/server/agents-bundle.js.map +1 -1
  457. package/dist/server/auth.d.ts.map +1 -1
  458. package/dist/server/auth.js +4 -3
  459. package/dist/server/auth.js.map +1 -1
  460. package/dist/server/builder-browser.d.ts.map +1 -1
  461. package/dist/server/builder-browser.js +43 -19
  462. package/dist/server/builder-browser.js.map +1 -1
  463. package/dist/server/core-routes-plugin.js +2 -2
  464. package/dist/server/core-routes-plugin.js.map +1 -1
  465. package/dist/server/credential-provider.d.ts +38 -2
  466. package/dist/server/credential-provider.d.ts.map +1 -1
  467. package/dist/server/credential-provider.js +142 -64
  468. package/dist/server/credential-provider.js.map +1 -1
  469. package/dist/server/index.d.ts +1 -1
  470. package/dist/server/index.d.ts.map +1 -1
  471. package/dist/server/index.js +1 -1
  472. package/dist/server/index.js.map +1 -1
  473. package/dist/server/prompts/framework-core-compact.d.ts +1 -1
  474. package/dist/server/prompts/framework-core-compact.d.ts.map +1 -1
  475. package/dist/server/prompts/framework-core-compact.js +7 -13
  476. package/dist/server/prompts/framework-core-compact.js.map +1 -1
  477. package/dist/server/prompts/framework-core.d.ts +1 -1
  478. package/dist/server/prompts/framework-core.d.ts.map +1 -1
  479. package/dist/server/prompts/framework-core.js +10 -21
  480. package/dist/server/prompts/framework-core.js.map +1 -1
  481. package/dist/server/prompts/index.d.ts +1 -1
  482. package/dist/server/prompts/index.d.ts.map +1 -1
  483. package/dist/server/prompts/index.js +1 -1
  484. package/dist/server/prompts/index.js.map +1 -1
  485. package/dist/server/prompts/shared-rules.d.ts +16 -10
  486. package/dist/server/prompts/shared-rules.d.ts.map +1 -1
  487. package/dist/server/prompts/shared-rules.js +19 -10
  488. package/dist/server/prompts/shared-rules.js.map +1 -1
  489. package/dist/server/ssr-handler.d.ts +1 -1
  490. package/dist/server/ssr-handler.d.ts.map +1 -1
  491. package/dist/server/ssr-handler.js +10 -3
  492. package/dist/server/ssr-handler.js.map +1 -1
  493. package/dist/server/transcribe-voice.d.ts +1 -1
  494. package/dist/settings/user-settings.d.ts.map +1 -1
  495. package/dist/settings/user-settings.js +13 -1
  496. package/dist/settings/user-settings.js.map +1 -1
  497. package/dist/shared/cache-control.d.ts +52 -0
  498. package/dist/shared/cache-control.d.ts.map +1 -1
  499. package/dist/shared/cache-control.js +107 -0
  500. package/dist/shared/cache-control.js.map +1 -1
  501. package/dist/templates/chat/.agents/skills/upgrade-agent-native/SKILL.md +24 -2
  502. package/dist/templates/chat/_gitignore +1 -0
  503. package/dist/templates/chat/app/components/layout/Sidebar.tsx +0 -7
  504. package/dist/templates/chat/changelog/2026-07-25-settings-navigation-now-keeps-manage-agent-as-a-dedicated-li.md +6 -0
  505. package/dist/templates/default/.agents/skills/upgrade-agent-native/SKILL.md +24 -2
  506. package/dist/templates/default/app/root.tsx +1 -1
  507. package/dist/templates/default/public/manifest.json +2 -2
  508. package/dist/templates/headless/.agents/skills/upgrade-agent-native/SKILL.md +24 -2
  509. package/dist/templates/workspace-core/.agents/skills/performance/SKILL.md +19 -0
  510. package/dist/templates/workspace-core/.agents/skills/upgrade-agent-native/SKILL.md +24 -2
  511. package/dist/templates/workspace-core/.agents/skills/visual-answer/SKILL.md +1 -0
  512. package/dist/vite/agents-bundle-plugin.d.ts.map +1 -1
  513. package/dist/vite/agents-bundle-plugin.js +8 -7
  514. package/dist/vite/agents-bundle-plugin.js.map +1 -1
  515. package/dist/vite/client.d.ts.map +1 -1
  516. package/dist/vite/client.js +66 -1
  517. package/dist/vite/client.js.map +1 -1
  518. package/docs/content/actions.mdx +2 -2
  519. package/docs/content/agent-surfaces.mdx +1 -1
  520. package/docs/content/authentication.mdx +2 -0
  521. package/docs/content/deployment.mdx +36 -0
  522. package/docs/content/http-api.mdx +266 -0
  523. package/docs/content/syncing-template-changes.mdx +159 -0
  524. package/package.json +4 -3
  525. package/src/a2a/activity.ts +38 -27
  526. package/src/a2a/client.ts +57 -4
  527. package/src/agent/engine/builder-engine.ts +35 -4
  528. package/src/agent/run-manager.ts +20 -1
  529. package/src/agent/run-store.ts +4 -1
  530. package/src/agent/types.ts +28 -8
  531. package/src/chat-threads/store.ts +45 -0
  532. package/src/checkpoints/index.ts +2 -0
  533. package/src/checkpoints/route-match.ts +13 -0
  534. package/src/cli/create.ts +105 -17
  535. package/src/cli/index.ts +20 -0
  536. package/src/cli/template-baseline.ts +410 -0
  537. package/src/cli/template-sync.ts +1004 -0
  538. package/src/cli/templates-meta.ts +1 -0
  539. package/src/client/AssistantChat.tsx +38 -12
  540. package/src/client/NewWorkspaceAppFlow.tsx +75 -10
  541. package/src/client/chat/message-components.tsx +127 -66
  542. package/src/client/chat/tool-call-display.tsx +29 -5
  543. package/src/client/error-format.ts +18 -0
  544. package/src/client/org/OrgSwitcher.tsx +30 -8
  545. package/src/client/org/TeamPage.tsx +7 -6
  546. package/src/client/settings/SettingsPanel.tsx +9 -9
  547. package/src/client/settings/SettingsTabsPage.tsx +12 -2
  548. package/src/client/sse-event-processor.ts +3 -0
  549. package/src/data-widgets/index.ts +41 -0
  550. package/src/deploy/build.ts +11 -9
  551. package/src/extensions/url-safety.ts +67 -4
  552. package/src/integrations/webhook-handler.ts +63 -9
  553. package/src/org/auto-join-domain.ts +4 -3
  554. package/src/org/context.ts +108 -39
  555. package/src/org/index.ts +5 -0
  556. package/src/org/service-identity.ts +60 -0
  557. package/src/provider-api/index.ts +22 -1
  558. package/src/scripts/docs/search.ts +12 -1
  559. package/src/server/__snapshots__/agent-chat-plugin.surface.spec.ts.snap +25 -36
  560. package/src/server/agent-chat/context-tools.ts +9 -4
  561. package/src/server/agent-chat/framework-prompts.ts +38 -66
  562. package/src/server/agent-chat-plugin.ts +17 -10
  563. package/src/server/agents-bundle.ts +84 -5
  564. package/src/server/auth.ts +4 -3
  565. package/src/server/builder-browser.ts +47 -19
  566. package/src/server/core-routes-plugin.ts +2 -2
  567. package/src/server/credential-provider.ts +209 -68
  568. package/src/server/index.ts +3 -0
  569. package/src/server/prompts/framework-core-compact.ts +6 -13
  570. package/src/server/prompts/framework-core.ts +9 -21
  571. package/src/server/prompts/index.ts +0 -1
  572. package/src/server/prompts/shared-rules.ts +19 -11
  573. package/src/server/ssr-handler.ts +13 -2
  574. package/src/settings/user-settings.ts +13 -1
  575. package/src/shared/cache-control.ts +141 -0
  576. package/src/templates/chat/.agents/skills/upgrade-agent-native/SKILL.md +24 -2
  577. package/src/templates/chat/_gitignore +1 -0
  578. package/src/templates/chat/app/components/layout/Sidebar.tsx +0 -7
  579. package/src/templates/chat/changelog/2026-07-25-settings-navigation-now-keeps-manage-agent-as-a-dedicated-li.md +6 -0
  580. package/src/templates/default/.agents/skills/upgrade-agent-native/SKILL.md +24 -2
  581. package/src/templates/default/app/root.tsx +1 -1
  582. package/src/templates/default/public/manifest.json +2 -2
  583. package/src/templates/headless/.agents/skills/upgrade-agent-native/SKILL.md +24 -2
  584. package/src/templates/workspace-core/.agents/skills/performance/SKILL.md +19 -0
  585. package/src/templates/workspace-core/.agents/skills/upgrade-agent-native/SKILL.md +24 -2
  586. package/src/templates/workspace-core/.agents/skills/visual-answer/SKILL.md +1 -0
  587. package/src/vite/agents-bundle-plugin.ts +7 -6
  588. package/src/vite/client.ts +69 -3
@@ -1 +1 @@
1
- {"version":3,"file":"TeamPage.js","sourceRoot":"","sources":["../../../src/client/org/TeamPage.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Button as ToolkitButton } from \"@agent-native/toolkit/ui/button\";\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"@agent-native/toolkit/ui/select\";\nimport {\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n} from \"@agent-native/toolkit/ui/table\";\nimport {\n IconUserPlus,\n IconTrash,\n IconCrown,\n IconShieldCheck,\n IconLoader2,\n IconCheck,\n IconPencil,\n IconAt,\n IconX,\n IconKey,\n IconCopy,\n IconRefresh,\n IconEye,\n IconEyeOff,\n IconCloudUpload,\n IconFileImport,\n IconPlus,\n IconAlertTriangle,\n IconUsersGroup,\n IconHelpCircle,\n} from \"@tabler/icons-react\";\nimport {\n forwardRef,\n useMemo,\n useRef,\n useState,\n type ComponentPropsWithoutRef,\n type ReactNode,\n} from \"react\";\n\nimport type { DomainMatchOrg } from \"../../org/types.js\";\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from \"../components/ui/tooltip.js\";\nimport { useT } from \"../i18n.js\";\nimport { cn } from \"../utils.js\";\nimport {\n useOrg,\n useOrgMembers,\n useOrgInvitations,\n useCreateOrg,\n useUpdateOrg,\n useBulkInviteMembers,\n useChangeMemberRole,\n useAcceptInvitation,\n useRemoveMember,\n useSwitchOrg,\n useSetOrgDomain,\n useSetA2ASecret,\n useSyncA2ASecret,\n useJoinByDomain,\n type InviteRole,\n type SyncA2ASecretResult,\n} from \"./hooks.js\";\n\nconst Button = forwardRef<\n HTMLButtonElement,\n ComponentPropsWithoutRef<typeof ToolkitButton>\n>(({ className, ...props }, ref) => (\n <ToolkitButton\n ref={ref}\n variant=\"ghost\"\n className={cn(\n \"h-auto p-0 hover:bg-transparent hover:text-inherit active:scale-100 [&_svg]:!size-auto\",\n className,\n )}\n {...props}\n />\n));\nButton.displayName = \"TeamPrimitiveButton\";\n\nexport interface TeamPageProps {\n /**\n * Optional wrapper around the page contents. Templates pass their own Layout\n * component so the Team page renders inside the template's chrome.\n */\n layout?: (children: ReactNode) => ReactNode;\n /**\n * Title shown at the top of the page. Defaults to \"Team\".\n */\n title?: string;\n /**\n * Hide the page title when this is rendered inside another titled surface,\n * such as the Settings > Team tab.\n */\n showTitle?: boolean;\n /**\n * Description shown on the \"Create an Organization\" card. Defaults to\n * \"Set up a team to collaborate with your colleagues.\"\n */\n createOrgDescription?: string;\n /**\n * Class applied to the outer max-width container. Templates can use this to\n * tweak page width.\n */\n className?: string;\n}\n\nfunction RoleIcon({ role }: { role: string }) {\n if (role === \"owner\")\n return <IconCrown className=\"h-3.5 w-3.5 text-primary\" />;\n if (role === \"admin\")\n return <IconShieldCheck className=\"h-3.5 w-3.5 text-muted-foreground\" />;\n return null;\n}\n\nfunction ErrorText({ error }: { error: unknown }) {\n if (!error) return null;\n return (\n <p className=\"text-xs text-destructive\">\n {error instanceof Error ? error.message : String(error)}\n </p>\n );\n}\n\nfunction PendingInvitationsCard() {\n const t = useT();\n const { data: org } = useOrg();\n const acceptInvitation = useAcceptInvitation();\n\n if (!org?.pendingInvitations?.length) return null;\n\n return (\n <section className=\"rounded-lg border border-border bg-card p-4 space-y-3\">\n <h3 className=\"text-sm font-medium\">{t(\"org.pendingInvitations\")}</h3>\n {org.pendingInvitations.map((inv) => (\n <div\n key={inv.id}\n className=\"flex items-center justify-between rounded-md border border-border p-3\"\n >\n <div>\n <div className=\"text-sm font-medium\">{inv.orgName}</div>\n <div className=\"text-xs text-muted-foreground\">\n {t(\"org.invitedByLabel\", { name: inv.invitedBy })}\n </div>\n </div>\n <Button\n type=\"button\"\n intent=\"primary\"\n emphasis=\"solid\"\n onClick={() => acceptInvitation.mutate(inv.id)}\n disabled={acceptInvitation.isPending}\n className=\"rounded-md bg-primary px-3 py-1.5 text-xs font-medium text-primary-foreground hover:bg-primary/90 disabled:opacity-50\"\n >\n {acceptInvitation.isPending ? (\n <IconLoader2 size={14} className=\"animate-spin\" />\n ) : (\n t(\"org.accept\")\n )}\n </Button>\n </div>\n ))}\n <ErrorText error={acceptInvitation.error} />\n </section>\n );\n}\n\nfunction JoinByDomainCard({ matches }: { matches: DomainMatchOrg[] }) {\n const t = useT();\n const joinByDomain = useJoinByDomain();\n const [pendingId, setPendingId] = useState<string | null>(null);\n\n return (\n <section className=\"rounded-lg border border-border bg-card p-4 space-y-3\">\n <h3 className=\"text-sm font-medium\">{t(\"org.joinYourTeam\")}</h3>\n <p className=\"text-sm text-muted-foreground\">\n {matches.length === 1\n ? t(\"org.joinDomainOne\")\n : t(\"org.joinDomainMany\")}\n </p>\n <div className=\"space-y-2\">\n {matches.map((m) => (\n <div\n key={m.orgId}\n className=\"flex items-center justify-between rounded-md border border-border p-3\"\n >\n <div className=\"flex items-center gap-2.5\">\n <div className=\"flex h-8 w-8 items-center justify-center rounded-md bg-primary/10\">\n <IconUsersGroup className=\"h-4 w-4 text-primary\" />\n </div>\n <div className=\"text-sm font-medium\">{m.orgName}</div>\n </div>\n <Button\n type=\"button\"\n intent=\"primary\"\n emphasis=\"solid\"\n disabled={joinByDomain.isPending && pendingId === m.orgId}\n onClick={() => {\n setPendingId(m.orgId);\n joinByDomain.mutate(m.orgId, {\n onSettled: () => setPendingId(null),\n });\n }}\n className=\"rounded-md bg-primary px-3 py-1.5 text-xs font-medium text-primary-foreground hover:bg-primary/90 disabled:opacity-50\"\n >\n {joinByDomain.isPending && pendingId === m.orgId ? (\n <IconLoader2 size={14} className=\"animate-spin\" />\n ) : (\n t(\"org.join\")\n )}\n </Button>\n </div>\n ))}\n </div>\n <ErrorText error={joinByDomain.error} />\n </section>\n );\n}\n\nfunction CreateOrgCard({ description }: { description?: string }) {\n const t = useT();\n const createOrg = useCreateOrg();\n const [name, setName] = useState(\"\");\n const [showForm, setShowForm] = useState(false);\n\n return (\n <section className=\"rounded-lg border border-border bg-card p-4 space-y-3\">\n <h3 className=\"text-sm font-medium\">{t(\"org.createOrgCardTitle\")}</h3>\n <p className=\"text-sm text-muted-foreground\">\n {description || t(\"org.createOrgCardDescription\")}\n </p>\n {!showForm ? (\n <Button\n type=\"button\"\n intent=\"primary\"\n emphasis=\"solid\"\n onClick={() => setShowForm(true)}\n className=\"rounded-md bg-primary px-3 py-1.5 text-xs font-medium text-primary-foreground hover:bg-primary/90\"\n >\n {t(\"org.createOrganization\")}\n </Button>\n ) : (\n <div className=\"space-y-2\">\n <input\n type=\"text\"\n value={name}\n onChange={(e) => setName(e.target.value)}\n placeholder=\"e.g. Acme Inc.\"\n className=\"w-full rounded-md border border-border bg-background px-3 py-2 text-sm focus:outline-none focus:ring-1 focus:ring-foreground\"\n autoFocus\n />\n <div className=\"flex gap-2\">\n <Button\n type=\"button\"\n intent=\"primary\"\n emphasis=\"solid\"\n disabled={!name.trim() || createOrg.isPending}\n onClick={() =>\n createOrg.mutate(name.trim(), {\n onSuccess: () => {\n setName(\"\");\n setShowForm(false);\n },\n })\n }\n className=\"rounded-md bg-primary px-3 py-1.5 text-xs font-medium text-primary-foreground hover:bg-primary/90 disabled:opacity-50\"\n >\n {createOrg.isPending ? (\n <IconLoader2 size={14} className=\"animate-spin\" />\n ) : (\n t(\"org.create\")\n )}\n </Button>\n <Button\n type=\"button\"\n intent=\"neutral\"\n emphasis=\"outline\"\n onClick={() => {\n setShowForm(false);\n setName(\"\");\n }}\n className=\"rounded-md border border-border px-3 py-1.5 text-xs font-medium text-muted-foreground hover:text-foreground\"\n >\n {t(\"org.cancel\")}\n </Button>\n </div>\n <ErrorText error={createOrg.error} />\n </div>\n )}\n </section>\n );\n}\n\nfunction OrgNameDisplay({ name, canEdit }: { name: string; canEdit: boolean }) {\n const [editing, setEditing] = useState(false);\n const [draft, setDraft] = useState(name);\n const updateOrg = useUpdateOrg();\n\n if (!canEdit) return <div className=\"text-sm font-medium\">{name}</div>;\n\n if (!editing) {\n return (\n <Button\n type=\"button\"\n onClick={() => {\n setDraft(name);\n setEditing(true);\n }}\n className=\"group flex items-center gap-1.5 text-sm font-medium hover:text-foreground/80\"\n >\n {name}\n <IconPencil\n size={12}\n className=\"text-muted-foreground opacity-0 group-hover:opacity-100\"\n />\n </Button>\n );\n }\n\n function save() {\n const trimmed = draft.trim();\n if (!trimmed || trimmed === name) {\n setEditing(false);\n return;\n }\n updateOrg.mutate(trimmed, { onSuccess: () => setEditing(false) });\n }\n\n return (\n <div className=\"flex items-center gap-1.5\">\n <input\n type=\"text\"\n value={draft}\n onChange={(e) => setDraft(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") save();\n if (e.key === \"Escape\") setEditing(false);\n }}\n onBlur={save}\n className=\"rounded border border-border bg-background px-1.5 py-0.5 text-sm font-medium focus:outline-none focus:ring-1 focus:ring-foreground\"\n autoFocus\n />\n <ErrorText error={updateOrg.error} />\n </div>\n );\n}\n\ninterface MemberListItem {\n email: string;\n role: string;\n}\n\ninterface PendingInviteListItem {\n id: string;\n email: string;\n role: string;\n}\n\nfunction MembersCard() {\n const t = useT();\n const { data: org } = useOrg();\n const { data: membersData, isLoading: isLoadingMembers } = useOrgMembers();\n const { data: invitationsData } = useOrgInvitations();\n const switchOrg = useSwitchOrg();\n\n if (!org?.orgId) return null;\n\n const isOwner = org.role === \"owner\";\n const isOwnerOrAdmin = isOwner || org.role === \"admin\";\n const members = membersData?.members ?? [];\n const pendingInvites = invitationsData?.invitations ?? [];\n const hasMultipleOrgs = (org.orgs?.length ?? 0) > 1;\n\n return (\n <div className=\"space-y-4\">\n <section className=\"rounded-lg border border-border bg-card p-4 space-y-4\">\n <div className=\"flex flex-col gap-3 sm:flex-row sm:items-start sm:justify-between\">\n <div className=\"flex min-w-0 items-center gap-3\">\n <div className=\"flex h-9 w-9 shrink-0 items-center justify-center rounded-lg bg-primary/10\">\n <IconUsersGroup className=\"h-5 w-5 text-primary\" />\n </div>\n <div className=\"min-w-0\">\n <OrgNameDisplay\n name={org.orgName ?? \"\"}\n canEdit={isOwnerOrAdmin}\n />\n <div className=\"text-xs text-muted-foreground\">\n {t(\"org.memberCount\", { count: members.length })} ·{\" \"}\n {t(\"org.youAreRole\", { role: org.role })}\n </div>\n </div>\n </div>\n {hasMultipleOrgs && (\n <Select\n value={org.orgId ?? \"\"}\n onValueChange={(value) => switchOrg.mutate(value || null)}\n disabled={switchOrg.isPending}\n >\n <SelectTrigger className=\"h-auto w-full rounded-md border border-border bg-background px-2.5 py-1.5 text-xs sm:w-auto\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {org.orgs.map((o) => (\n <SelectItem key={o.orgId} value={o.orgId}>\n {o.orgName}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n )}\n </div>\n\n {isOwnerOrAdmin && (\n <div className=\"grid gap-5 border-t border-border pt-4 lg:grid-cols-2\">\n <DomainSettingsSection\n domain={org.allowedDomain}\n ownerEmail={org.email}\n />\n\n {isOwner && <A2ASecretSection secret={org.a2aSecret} />}\n </div>\n )}\n\n <ErrorText error={switchOrg.error} />\n </section>\n\n <MembersTableCard\n members={members}\n pendingInvites={pendingInvites}\n isLoadingMembers={isLoadingMembers}\n currentUserEmail={org.email}\n currentUserRole={org.role ?? null}\n />\n </div>\n );\n}\n\nfunction MembersTableCard({\n members,\n pendingInvites,\n isLoadingMembers,\n currentUserEmail,\n currentUserRole,\n}: {\n members: MemberListItem[];\n pendingInvites: PendingInviteListItem[];\n isLoadingMembers: boolean;\n currentUserEmail: string;\n currentUserRole: string | null;\n}) {\n const t = useT();\n const [showInviteForm, setShowInviteForm] = useState(false);\n const canInvite = currentUserRole === \"owner\" || currentUserRole === \"admin\";\n\n return (\n <section className=\"rounded-lg border border-border bg-card\">\n <div className=\"flex flex-col gap-3 border-b border-border px-4 py-3 sm:flex-row sm:items-center sm:justify-between\">\n <div>\n <h3 className=\"text-sm font-medium\">{t(\"org.members\")}</h3>\n <p className=\"text-xs text-muted-foreground\">\n {t(\"org.memberCount\", { count: members.length })}\n </p>\n </div>\n {canInvite && !showInviteForm && (\n <Button\n type=\"button\"\n intent=\"primary\"\n emphasis=\"solid\"\n onClick={() => setShowInviteForm(true)}\n className=\"inline-flex items-center justify-center gap-1.5 rounded-md bg-primary px-3 py-1.5 text-xs font-medium text-primary-foreground hover:bg-primary/90\"\n >\n <IconUserPlus size={14} />\n {t(\"org.inviteMembers\")}\n </Button>\n )}\n </div>\n {canInvite && showInviteForm && (\n <div className=\"border-b border-border p-4\">\n <BulkInviteForm\n currentUserRole={currentUserRole}\n onClose={() => setShowInviteForm(false)}\n />\n </div>\n )}\n <Table>\n <TableHeader>\n <TableRow>\n <TableHead>{t(\"org.member\")}</TableHead>\n <TableHead>{t(\"org.role\")}</TableHead>\n <TableHead>{t(\"org.status\")}</TableHead>\n <TableHead className=\"text-end\">{t(\"org.actions\")}</TableHead>\n </TableRow>\n </TableHeader>\n <TableBody>\n {isLoadingMembers && members.length === 0 ? (\n [0, 1, 2].map((i) => (\n <TableRow key={i}>\n <TableCell colSpan={4}>\n <div\n className=\"h-3.5 rounded bg-muted animate-pulse\"\n style={{ width: `${180 + i * 48}px` }}\n />\n </TableCell>\n </TableRow>\n ))\n ) : members.length === 0 && pendingInvites.length === 0 ? (\n <TableRow>\n <TableCell\n colSpan={4}\n className=\"py-8 text-center text-sm text-muted-foreground\"\n >\n {t(\"org.noMembers\")}\n </TableCell>\n </TableRow>\n ) : (\n <>\n {members.map((m) => (\n <MemberRow\n key={m.email}\n email={m.email}\n role={m.role}\n isCurrentUser={m.email === currentUserEmail}\n currentUserRole={currentUserRole}\n />\n ))}\n {pendingInvites.map((inv) => (\n <PendingInviteRow key={inv.id} invite={inv} />\n ))}\n </>\n )}\n </TableBody>\n </Table>\n </section>\n );\n}\n\nfunction roleLabel(role: string, t: ReturnType<typeof useT>) {\n if (role === \"owner\") return t(\"org.owner\");\n if (role === \"admin\") return t(\"org.admin\");\n return t(\"org.member\");\n}\n\nfunction RoleBadge({ role }: { role: string }) {\n const t = useT();\n return (\n <span className=\"inline-flex items-center gap-1.5 rounded border border-border px-2 py-1 text-xs text-muted-foreground\">\n <RoleIcon role={role} />\n {roleLabel(role, t)}\n </span>\n );\n}\n\nfunction PendingInviteRow({ invite }: { invite: PendingInviteListItem }) {\n const t = useT();\n return (\n <TableRow className=\"opacity-70\">\n <TableCell className=\"min-w-56\">\n <span className=\"truncate text-sm\">{invite.email}</span>\n </TableCell>\n <TableCell>\n <RoleBadge role={invite.role} />\n </TableCell>\n <TableCell>\n <span className=\"rounded border border-border px-1.5 py-0.5 text-[10px] text-muted-foreground\">\n {t(\"org.invited\")}\n </span>\n </TableCell>\n <TableCell className=\"text-end text-muted-foreground\">-</TableCell>\n </TableRow>\n );\n}\n\nfunction MemberRow({\n email,\n role,\n isCurrentUser,\n currentUserRole,\n}: {\n email: string;\n role: string;\n isCurrentUser: boolean;\n currentUserRole: string | null;\n}) {\n const t = useT();\n const removeMember = useRemoveMember();\n const changeRole = useChangeMemberRole();\n const [editing, setEditing] = useState(false);\n const [confirmingRemove, setConfirmingRemove] = useState(false);\n\n // Owners can manage admins + members. Admins can only manage members.\n // Owners themselves are immutable through this UI; current user can't\n // edit their own role here.\n const canManage =\n role !== \"owner\" &&\n !isCurrentUser &&\n (currentUserRole === \"owner\" ||\n (currentUserRole === \"admin\" && role === \"member\"));\n\n return (\n <TableRow>\n <TableCell className=\"min-w-56\">\n <span className=\"truncate text-sm\">{email}</span>\n </TableCell>\n <TableCell>\n <RoleBadge role={role} />\n </TableCell>\n <TableCell>\n {isCurrentUser ? (\n <span className=\"rounded border border-border px-1.5 py-0.5 text-[10px] text-muted-foreground\">\n {t(\"org.you\")}\n </span>\n ) : (\n <span className=\"text-muted-foreground\">-</span>\n )}\n </TableCell>\n <TableCell>\n {canManage ? (\n <div className=\"flex shrink-0 items-center justify-end gap-1\">\n {editing ? (\n <Select\n defaultOpen\n value={role}\n onOpenChange={(open) => {\n if (!open) setEditing(false);\n }}\n onValueChange={(value) => {\n const next = value === \"admin\" ? \"admin\" : \"member\";\n if (next !== role) {\n changeRole.mutate(\n { email, role: next },\n { onSuccess: () => setEditing(false) },\n );\n } else {\n setEditing(false);\n }\n }}\n disabled={changeRole.isPending}\n >\n <SelectTrigger\n autoFocus\n className=\"h-auto w-auto rounded-md border border-border bg-background px-1.5 py-0.5 text-[11px]\"\n >\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"member\">{t(\"org.member\")}</SelectItem>\n <SelectItem value=\"admin\">{t(\"org.admin\")}</SelectItem>\n </SelectContent>\n </Select>\n ) : (\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n type=\"button\"\n onClick={() => setEditing(true)}\n className=\"text-muted-foreground hover:text-foreground\"\n >\n <IconPencil size={14} />\n </Button>\n </TooltipTrigger>\n <TooltipContent>{t(\"org.changeRole\")}</TooltipContent>\n </Tooltip>\n )}\n {confirmingRemove ? (\n <div className=\"flex items-center gap-1\">\n <Button\n type=\"button\"\n intent=\"neutral\"\n emphasis=\"ghost\"\n onClick={() => setConfirmingRemove(false)}\n className=\"rounded px-1.5 py-0.5 text-[11px] text-muted-foreground hover:bg-accent hover:text-foreground\"\n >\n {t(\"org.cancel\")}\n </Button>\n <Button\n type=\"button\"\n intent=\"danger\"\n emphasis=\"solid\"\n disabled={removeMember.isPending}\n onClick={() =>\n removeMember.mutate(email, {\n onSettled: () => setConfirmingRemove(false),\n })\n }\n className=\"rounded bg-destructive px-1.5 py-0.5 text-[11px] text-destructive-foreground hover:bg-destructive/90 disabled:opacity-50\"\n >\n {t(\"org.remove\")}\n </Button>\n </div>\n ) : (\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n type=\"button\"\n intent=\"danger\"\n emphasis=\"ghost\"\n disabled={removeMember.isPending}\n onClick={() => setConfirmingRemove(true)}\n className=\"text-muted-foreground hover:text-destructive disabled:opacity-50\"\n >\n <IconTrash size={14} />\n </Button>\n </TooltipTrigger>\n <TooltipContent>{t(\"org.removeMember\")}</TooltipContent>\n </Tooltip>\n )}\n </div>\n ) : (\n <div className=\"text-end text-muted-foreground\">-</div>\n )}\n </TableCell>\n </TableRow>\n );\n}\n\ninterface DraftInvite {\n email: string;\n role: InviteRole;\n}\n\nconst EMAIL_RE = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n\nfunction parseEmailList(input: string): string[] {\n return Array.from(\n new Set(\n input\n .split(/[\\s,;]+/)\n .map((s) => s.trim().toLowerCase())\n .filter(Boolean),\n ),\n );\n}\n\nfunction parseCsvEmails(text: string): string[] {\n // Tolerant CSV parse — split on lines, then on commas, take any cell\n // that looks like an email. Handles \"name,email,role\" rows or just\n // \"email\" per line. A robust full CSV parser would be overkill here.\n const cells: string[] = [];\n for (const line of text.split(/\\r?\\n/)) {\n for (const cell of line.split(\",\")) {\n const trimmed = cell.trim().replace(/^\"|\"$/g, \"\");\n if (trimmed) cells.push(trimmed);\n }\n }\n return Array.from(\n new Set(cells.filter((c) => EMAIL_RE.test(c)).map((c) => c.toLowerCase())),\n );\n}\n\nfunction BulkInviteForm({\n currentUserRole,\n onClose,\n}: {\n currentUserRole: string | null;\n onClose: () => void;\n}) {\n const bulkInvite = useBulkInviteMembers();\n const fileRef = useRef<HTMLInputElement>(null);\n const [drafts, setDrafts] = useState<DraftInvite[]>([\n { email: \"\", role: \"member\" },\n ]);\n const [pasteOpen, setPasteOpen] = useState(false);\n const [pasteValue, setPasteValue] = useState(\"\");\n const [pasteRole, setPasteRole] = useState<InviteRole>(\"member\");\n const [resultBanner, setResultBanner] = useState<{\n succeeded: number;\n failed: { email: string; error: string }[];\n } | null>(null);\n\n const canSetAdmin = currentUserRole === \"owner\";\n\n const validDrafts = useMemo(\n () =>\n drafts\n .map((d) => ({ ...d, email: d.email.trim().toLowerCase() }))\n .filter((d) => EMAIL_RE.test(d.email)),\n [drafts],\n );\n\n function setDraft(index: number, patch: Partial<DraftInvite>) {\n setDrafts((prev) =>\n prev.map((d, i) => (i === index ? { ...d, ...patch } : d)),\n );\n }\n\n function appendEmails(emails: string[], role: InviteRole) {\n if (!emails.length) return;\n setDrafts((prev) => {\n const existing = new Set(\n prev.map((d) => d.email.trim().toLowerCase()).filter(Boolean),\n );\n const fresh: DraftInvite[] = [];\n for (const e of emails) {\n if (!existing.has(e)) {\n fresh.push({ email: e, role });\n existing.add(e);\n }\n }\n // If the only existing row is an empty placeholder, drop it.\n const cleaned = prev.filter(\n (d, i) => !(i === 0 && !d.email.trim() && prev.length === 1),\n );\n return [...cleaned, ...fresh];\n });\n }\n\n function handleFile(file: File) {\n file.text().then((text) => {\n const emails = parseCsvEmails(text);\n if (emails.length) {\n appendEmails(emails, \"member\");\n } else {\n setResultBanner({\n succeeded: 0,\n failed: [{ email: file.name, error: \"No valid emails found in CSV\" }],\n });\n }\n });\n }\n\n async function submit() {\n setResultBanner(null);\n const dedup = new Map<string, DraftInvite>();\n for (const d of validDrafts) {\n // canSetAdmin guard mirrors server-side enforcement so an admin-only\n // user editing the form can't even attempt to grant admin (they'd\n // get a 403 anyway).\n const role = canSetAdmin ? d.role : \"member\";\n dedup.set(d.email, { ...d, role });\n }\n const invites = Array.from(dedup.values());\n if (invites.length === 0) return;\n\n const result = await bulkInvite.mutateAsync(invites);\n setResultBanner({\n succeeded: result.succeeded.length,\n failed: result.failed,\n });\n\n // Wipe drafts that succeeded; leave failed ones so the user can fix\n // and retry. If everything succeeded, reset to a single blank row.\n const failedEmails = new Set(result.failed.map((f) => f.email));\n setDrafts((prev) => {\n const remaining = prev.filter((d) =>\n failedEmails.has(d.email.trim().toLowerCase()),\n );\n return remaining.length > 0 ? remaining : [{ email: \"\", role: \"member\" }];\n });\n\n // Auto-close on full success.\n if (result.failed.length === 0 && result.succeeded.length > 0) {\n setTimeout(() => onClose(), 1200);\n }\n }\n\n return (\n <div className=\"space-y-3\">\n <div className=\"space-y-2\">\n {drafts.map((draft, i) => (\n <div key={i} className=\"flex items-center gap-2\">\n <input\n type=\"email\"\n value={draft.email}\n onChange={(e) => setDraft(i, { email: e.target.value })}\n placeholder=\"colleague@company.com\"\n className=\"flex-1 rounded-md border border-border bg-background px-3 py-1.5 text-sm focus:outline-none focus:ring-1 focus:ring-foreground\"\n autoFocus={i === drafts.length - 1}\n />\n <Select\n value={draft.role}\n onValueChange={(value) =>\n setDraft(i, {\n role: value === \"admin\" ? \"admin\" : \"member\",\n })\n }\n disabled={!canSetAdmin}\n >\n <SelectTrigger\n title={\n canSetAdmin\n ? undefined\n : \"Only the organization owner can invite admins\"\n }\n className=\"h-auto w-auto rounded-md border border-border bg-background px-2 py-1.5 text-xs disabled:opacity-50\"\n >\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"member\">Member</SelectItem>\n <SelectItem value=\"admin\">Admin</SelectItem>\n </SelectContent>\n </Select>\n {drafts.length > 1 && (\n <Button\n type=\"button\"\n onClick={() =>\n setDrafts((prev) => prev.filter((_, j) => j !== i))\n }\n className=\"text-muted-foreground hover:text-destructive\"\n >\n <IconX size={14} />\n </Button>\n )}\n </div>\n ))}\n </div>\n\n <div className=\"flex flex-wrap items-center gap-2\">\n <Button\n type=\"button\"\n intent=\"neutral\"\n emphasis=\"outline\"\n onClick={() =>\n setDrafts((prev) => [...prev, { email: \"\", role: \"member\" }])\n }\n className=\"inline-flex items-center gap-1 rounded-md border border-border px-2.5 py-1.5 text-xs font-medium hover:bg-accent/50\"\n >\n <IconPlus size={14} />\n Add another\n </Button>\n <Button\n type=\"button\"\n intent=\"neutral\"\n emphasis=\"outline\"\n onClick={() => setPasteOpen((v) => !v)}\n className=\"inline-flex items-center gap-1 rounded-md border border-border px-2.5 py-1.5 text-xs font-medium hover:bg-accent/50\"\n >\n <IconUserPlus size={14} />\n Paste many\n </Button>\n <Button\n type=\"button\"\n intent=\"neutral\"\n emphasis=\"outline\"\n onClick={() => fileRef.current?.click()}\n className=\"inline-flex items-center gap-1 rounded-md border border-border px-2.5 py-1.5 text-xs font-medium hover:bg-accent/50\"\n >\n <IconFileImport size={14} />\n Import CSV\n </Button>\n <input\n ref={fileRef}\n type=\"file\"\n accept=\".csv,text/csv,text/plain\"\n className=\"hidden\"\n onChange={(e) => {\n const file = e.target.files?.[0];\n if (file) handleFile(file);\n // reset so re-uploading the same file re-fires onChange\n e.target.value = \"\";\n }}\n />\n </div>\n\n {pasteOpen && (\n <div className=\"space-y-2 rounded-md border border-border p-3\">\n <div className=\"text-xs font-medium text-muted-foreground\">\n Paste emails (comma, space, or newline separated)\n </div>\n <textarea\n value={pasteValue}\n onChange={(e) => setPasteValue(e.target.value)}\n rows={4}\n placeholder=\"alice@acme.com, bob@acme.com&#10;charlie@acme.com\"\n className=\"w-full rounded-md border border-border bg-background px-3 py-2 text-sm focus:outline-none focus:ring-1 focus:ring-foreground\"\n />\n <div className=\"flex items-center gap-2\">\n <Select\n value={pasteRole}\n onValueChange={(value) =>\n setPasteRole(value === \"admin\" ? \"admin\" : \"member\")\n }\n disabled={!canSetAdmin}\n >\n <SelectTrigger className=\"h-auto w-auto rounded-md border border-border bg-background px-2 py-1.5 text-xs disabled:opacity-50\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"member\">Add as members</SelectItem>\n <SelectItem value=\"admin\">Add as admins</SelectItem>\n </SelectContent>\n </Select>\n <Button\n type=\"button\"\n intent=\"primary\"\n emphasis=\"solid\"\n onClick={() => {\n appendEmails(parseEmailList(pasteValue), pasteRole);\n setPasteValue(\"\");\n setPasteOpen(false);\n }}\n disabled={parseEmailList(pasteValue).length === 0}\n className=\"rounded-md bg-primary px-3 py-1.5 text-xs font-medium text-primary-foreground hover:bg-primary/90 disabled:opacity-50\"\n >\n Add\n </Button>\n <Button\n type=\"button\"\n intent=\"neutral\"\n emphasis=\"outline\"\n onClick={() => {\n setPasteValue(\"\");\n setPasteOpen(false);\n }}\n className=\"rounded-md border border-border px-3 py-1.5 text-xs font-medium text-muted-foreground hover:text-foreground\"\n >\n Cancel\n </Button>\n </div>\n </div>\n )}\n\n <div className=\"flex items-center gap-2\">\n <Button\n type=\"button\"\n intent=\"primary\"\n emphasis=\"solid\"\n disabled={validDrafts.length === 0 || bulkInvite.isPending}\n onClick={submit}\n className=\"rounded-md bg-primary px-3 py-1.5 text-xs font-medium text-primary-foreground hover:bg-primary/90 disabled:opacity-50\"\n >\n {bulkInvite.isPending ? (\n <IconLoader2 size={14} className=\"animate-spin\" />\n ) : (\n <span className=\"inline-flex items-center gap-1\">\n <IconCheck size={14} />\n Send {validDrafts.length || \"\"}{\" \"}\n {validDrafts.length === 1 ? \"invite\" : \"invites\"}\n </span>\n )}\n </Button>\n <Button\n type=\"button\"\n intent=\"neutral\"\n emphasis=\"outline\"\n onClick={onClose}\n className=\"rounded-md border border-border px-3 py-1.5 text-xs font-medium text-muted-foreground hover:text-foreground\"\n >\n Close\n </Button>\n </div>\n\n <p className=\"text-[11px] text-muted-foreground\">\n Each invitee signs in with this exact email to accept.\n {canSetAdmin\n ? \" Admins can manage members and workspace settings.\"\n : \" Only the organization owner can grant admin access.\"}\n </p>\n\n {resultBanner && (\n <div className=\"space-y-1 rounded-md border border-border bg-accent/30 p-2.5\">\n {resultBanner.succeeded > 0 && (\n <p className=\"text-[11px] text-primary\">\n <IconCheck className=\"inline h-3 w-3 -mt-0.5\" /> Sent{\" \"}\n {resultBanner.succeeded}{\" \"}\n {resultBanner.succeeded === 1 ? \"invite\" : \"invites\"}.\n </p>\n )}\n {resultBanner.failed.length > 0 && (\n <ul className=\"space-y-0.5 text-[11px] text-destructive\">\n {resultBanner.failed.map((f) => (\n <li key={f.email}>\n <IconAlertTriangle className=\"inline h-3 w-3 -mt-0.5 me-1\" />\n {f.email}: {f.error}\n </li>\n ))}\n </ul>\n )}\n </div>\n )}\n\n <ErrorText error={bulkInvite.error} />\n </div>\n );\n}\n\nfunction DomainSettingsSection({\n domain,\n ownerEmail,\n}: {\n domain: string | null;\n ownerEmail: string;\n}) {\n const setOrgDomain = useSetOrgDomain();\n const [editing, setEditing] = useState(false);\n const [draft, setDraft] = useState(domain ?? \"\");\n\n const ownDomain = ownerEmail.split(\"@\")[1]?.toLowerCase() ?? \"\";\n\n function save() {\n const trimmed = draft.trim().toLowerCase();\n if (trimmed === (domain ?? \"\")) {\n setEditing(false);\n return;\n }\n setOrgDomain.mutate(trimmed || null, {\n onSuccess: () => setEditing(false),\n });\n }\n\n return (\n <div className=\"space-y-2 border-t border-border pt-3 first:border-t-0 first:pt-0\">\n <div className=\"text-xs font-medium text-muted-foreground uppercase tracking-wide\">\n Email domain auto-join\n </div>\n <p className=\"text-[11px] text-muted-foreground\">\n Anyone who signs up with an email at this domain will join your\n organization automatically. You can only set your own email domain (\n {ownDomain || \"—\"}); free email providers like gmail.com or outlook.com\n aren&apos;t allowed.\n </p>\n {!editing ? (\n <div className=\"flex items-center gap-2\">\n {domain ? (\n <>\n <span className=\"inline-flex items-center gap-1.5 rounded-md border border-border bg-background px-2.5 py-1.5 text-sm\">\n <IconAt className=\"h-3.5 w-3.5 text-muted-foreground\" />\n {domain}\n </span>\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n type=\"button\"\n onClick={() => {\n setDraft(domain);\n setEditing(true);\n }}\n className=\"text-muted-foreground hover:text-foreground\"\n >\n <IconPencil size={14} />\n </Button>\n </TooltipTrigger>\n <TooltipContent>Edit domain</TooltipContent>\n </Tooltip>\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n type=\"button\"\n intent=\"danger\"\n emphasis=\"ghost\"\n disabled={setOrgDomain.isPending}\n onClick={() => setOrgDomain.mutate(null)}\n className=\"text-muted-foreground hover:text-destructive disabled:opacity-50\"\n >\n <IconX size={14} />\n </Button>\n </TooltipTrigger>\n <TooltipContent>Remove domain</TooltipContent>\n </Tooltip>\n </>\n ) : (\n <Button\n type=\"button\"\n intent=\"neutral\"\n emphasis=\"outline\"\n onClick={() => {\n setDraft(ownDomain);\n setEditing(true);\n }}\n className=\"flex items-center gap-1.5 rounded-md border border-border px-2.5 py-1.5 text-xs font-medium hover:bg-accent/50\"\n >\n <IconAt size={14} />\n Allow {ownDomain || \"your domain\"} to auto-join\n </Button>\n )}\n </div>\n ) : (\n <div className=\"flex items-center gap-2\">\n <input\n type=\"text\"\n value={draft}\n onChange={(e) => setDraft(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") save();\n if (e.key === \"Escape\") setEditing(false);\n }}\n placeholder={ownDomain || \"example.com\"}\n className=\"rounded-md border border-border bg-background px-2.5 py-1.5 text-sm focus:outline-none focus:ring-1 focus:ring-foreground\"\n autoFocus\n />\n <Button\n type=\"button\"\n intent=\"primary\"\n emphasis=\"solid\"\n disabled={setOrgDomain.isPending}\n onClick={save}\n className=\"rounded-md bg-primary px-3 py-1.5 text-xs font-medium text-primary-foreground hover:bg-primary/90 disabled:opacity-50\"\n >\n {setOrgDomain.isPending ? (\n <IconLoader2 size={14} className=\"animate-spin\" />\n ) : (\n \"Save\"\n )}\n </Button>\n <Button\n type=\"button\"\n intent=\"neutral\"\n emphasis=\"outline\"\n onClick={() => setEditing(false)}\n className=\"rounded-md border border-border px-3 py-1.5 text-xs font-medium text-muted-foreground hover:text-foreground\"\n >\n Cancel\n </Button>\n </div>\n )}\n <ErrorText error={setOrgDomain.error} />\n </div>\n );\n}\n\nfunction A2ASecretSection({ secret }: { secret: string | null | undefined }) {\n const setA2ASecret = useSetA2ASecret();\n const syncA2ASecret = useSyncA2ASecret();\n const [revealed, setRevealed] = useState(false);\n const [copied, setCopied] = useState(false);\n const [pasteMode, setPasteMode] = useState(false);\n const [pasteValue, setPasteValue] = useState(\"\");\n const [syncResult, setSyncResult] = useState<SyncA2ASecretResult | null>(\n null,\n );\n\n function copyToClipboard() {\n if (!secret) return;\n navigator.clipboard.writeText(secret).then(() => {\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n });\n }\n\n // Push the current secret to all connected apps. Optionally pass the\n // PREVIOUS secret as `signSecret` so the receiving apps (which still\n // hold the previous value) can verify the JWT.\n function syncToApps(signSecret?: string) {\n setSyncResult(null);\n syncA2ASecret.mutate(signSecret ? { signSecret } : undefined, {\n onSuccess: (result) => {\n setSyncResult(result);\n },\n });\n }\n\n function regenerate() {\n setA2ASecret.mutate(undefined, {\n onSuccess: (result) => {\n setRevealed(false);\n // Auto-sync the new secret to all connected apps. Sign with the\n // PREVIOUS secret (which peers still hold) so verification on\n // their side succeeds and they accept the new value.\n syncToApps(result.previousSecret ?? undefined);\n },\n });\n }\n\n function saveSecret() {\n const trimmed = pasteValue.trim();\n if (!trimmed) return;\n setA2ASecret.mutate(trimmed, {\n onSuccess: (result) => {\n setPasteMode(false);\n setPasteValue(\"\");\n // Same auto-sync flow as regenerate: peers verify with the\n // previous secret, then update to the new pasted value.\n syncToApps(result.previousSecret ?? undefined);\n },\n });\n }\n\n const masked = secret ? \"****\" + secret.slice(-8) : \"Not set\";\n\n return (\n <div className=\"space-y-2\">\n <div className=\"flex items-center gap-1 text-xs font-medium text-muted-foreground uppercase tracking-wide\">\n <span>Cross-app authentication</span>\n <Tooltip>\n <TooltipTrigger asChild>\n <a\n href=\"/docs/a2a-protocol#organization-secret-sync\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n aria-label=\"Read the cross-app authentication documentation\"\n className=\"inline-flex size-3.5 items-center justify-center rounded-full text-muted-foreground hover:text-foreground\"\n >\n <IconHelpCircle className=\"size-3\" />\n </a>\n </TooltipTrigger>\n <TooltipContent>\n Read the cross-app authentication documentation\n </TooltipContent>\n </Tooltip>\n </div>\n <p className=\"text-[11px] text-muted-foreground\">\n This secret authenticates cross-app delegation (e.g. Dispatch to\n Analytics). All apps in your organization need the same secret.\n </p>\n\n <div className=\"flex items-center gap-2 flex-wrap\">\n <span className=\"inline-flex items-center gap-1.5 rounded-md border border-border bg-background px-2.5 py-1.5 text-sm font-mono\">\n <IconKey className=\"h-3.5 w-3.5 text-muted-foreground\" />\n {revealed && secret ? secret : masked}\n </span>\n {secret && (\n <>\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n type=\"button\"\n onClick={() => setRevealed(!revealed)}\n className=\"text-muted-foreground hover:text-foreground\"\n >\n {revealed ? <IconEyeOff size={14} /> : <IconEye size={14} />}\n </Button>\n </TooltipTrigger>\n <TooltipContent>\n {revealed ? \"Hide secret\" : \"Reveal secret\"}\n </TooltipContent>\n </Tooltip>\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n type=\"button\"\n onClick={copyToClipboard}\n className=\"text-muted-foreground hover:text-foreground\"\n >\n {copied ? (\n <IconCheck size={14} className=\"text-primary\" />\n ) : (\n <IconCopy size={14} />\n )}\n </Button>\n </TooltipTrigger>\n <TooltipContent>Copy secret</TooltipContent>\n </Tooltip>\n </>\n )}\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n type=\"button\"\n intent=\"danger\"\n emphasis=\"outline\"\n onClick={regenerate}\n disabled={setA2ASecret.isPending || syncA2ASecret.isPending}\n className=\"inline-flex items-center gap-1 rounded-md border border-border px-2.5 py-1.5 text-xs font-medium hover:bg-accent/50 disabled:opacity-50\"\n >\n {setA2ASecret.isPending ? (\n <IconLoader2 size={14} className=\"animate-spin\" />\n ) : (\n <IconRefresh size={14} />\n )}\n Regenerate\n </Button>\n </TooltipTrigger>\n <TooltipContent>\n Regenerate secret and sync to connected apps\n </TooltipContent>\n </Tooltip>\n {secret && (\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n type=\"button\"\n intent=\"neutral\"\n emphasis=\"outline\"\n onClick={() => syncToApps()}\n disabled={setA2ASecret.isPending || syncA2ASecret.isPending}\n className=\"inline-flex items-center gap-1 rounded-md border border-border px-2.5 py-1.5 text-xs font-medium hover:bg-accent/50 disabled:opacity-50\"\n >\n {syncA2ASecret.isPending ? (\n <IconLoader2 size={14} className=\"animate-spin\" />\n ) : (\n <IconCloudUpload size={14} />\n )}\n Sync to apps\n </Button>\n </TooltipTrigger>\n <TooltipContent>\n Push this secret to every connected app\n </TooltipContent>\n </Tooltip>\n )}\n </div>\n\n {syncA2ASecret.isPending && (\n <p className=\"text-[11px] text-muted-foreground\">\n Syncing to connected apps…\n </p>\n )}\n\n {syncResult && !syncA2ASecret.isPending && (\n <div className=\"space-y-1\">\n <p className=\"text-[11px] text-muted-foreground\">\n Synced to {syncResult.succeeded}/{syncResult.total} app\n {syncResult.total === 1 ? \"\" : \"s\"}\n {syncResult.failed > 0 ? ` (${syncResult.failed} failed)` : \"\"}.\n </p>\n {syncResult.failed > 0 && (\n <ul className=\"text-[11px] text-destructive list-disc ps-5 space-y-0.5\">\n {syncResult.results\n .filter((r) => !r.ok)\n .map((r) => (\n <li key={r.id}>\n {r.name}: {r.error || `HTTP ${r.status ?? \"?\"}`}\n </li>\n ))}\n </ul>\n )}\n </div>\n )}\n\n {!pasteMode ? (\n <Button\n type=\"button\"\n intent=\"neutral\"\n emphasis=\"outline\"\n onClick={() => setPasteMode(true)}\n className=\"flex items-center gap-1.5 rounded-md border border-border px-2.5 py-1.5 text-xs font-medium hover:bg-accent/50\"\n >\n <IconKey size={14} />\n Paste secret from another app\n </Button>\n ) : (\n <div className=\"flex items-center gap-2\">\n <input\n type=\"text\"\n value={pasteValue}\n onChange={(e) => setPasteValue(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") saveSecret();\n if (e.key === \"Escape\") {\n setPasteMode(false);\n setPasteValue(\"\");\n }\n }}\n placeholder=\"Paste A2A secret\"\n className=\"flex-1 rounded-md border border-border bg-background px-2.5 py-1.5 text-sm font-mono focus:outline-none focus:ring-1 focus:ring-foreground\"\n autoFocus\n />\n <Button\n type=\"button\"\n intent=\"primary\"\n emphasis=\"solid\"\n disabled={!pasteValue.trim() || setA2ASecret.isPending}\n onClick={saveSecret}\n className=\"rounded-md bg-primary px-3 py-1.5 text-xs font-medium text-primary-foreground hover:bg-primary/90 disabled:opacity-50\"\n >\n {setA2ASecret.isPending ? (\n <IconLoader2 size={14} className=\"animate-spin\" />\n ) : (\n \"Save\"\n )}\n </Button>\n <Button\n type=\"button\"\n intent=\"neutral\"\n emphasis=\"outline\"\n onClick={() => {\n setPasteMode(false);\n setPasteValue(\"\");\n }}\n className=\"rounded-md border border-border px-3 py-1.5 text-xs font-medium text-muted-foreground hover:text-foreground\"\n >\n Cancel\n </Button>\n </div>\n )}\n\n <ErrorText error={setA2ASecret.error} />\n <ErrorText error={syncA2ASecret.error} />\n </div>\n );\n}\n\n/**\n * Default Team management page. Templates can route directly to this component\n * or wrap it with their own Layout via the `layout` prop.\n */\nexport function TeamPage({\n layout,\n title,\n showTitle = true,\n createOrgDescription,\n className,\n}: TeamPageProps) {\n const t = useT();\n const { data: org, isLoading } = useOrg();\n\n const content = (\n <div className={`space-y-6 ${className ?? \"max-w-2xl\"}`}>\n {showTitle ? (\n <h2 className=\"text-2xl font-bold tracking-tight\">\n {title ?? t(\"org.team\")}\n </h2>\n ) : null}\n\n {isLoading && (\n <section className=\"rounded-lg border border-border bg-card p-6\">\n <div className=\"text-sm text-muted-foreground\">\n {t(\"org.loading\")}\n </div>\n </section>\n )}\n\n {!isLoading && (\n <>\n <PendingInvitationsCard />\n {!org?.orgId ? (\n <>\n {org?.domainMatches && org.domainMatches.length > 0 && (\n <JoinByDomainCard matches={org.domainMatches} />\n )}\n <CreateOrgCard description={createOrgDescription} />\n </>\n ) : (\n <MembersCard />\n )}\n </>\n )}\n </div>\n );\n\n const wrapped = (\n <TooltipProvider delayDuration={200}>{content}</TooltipProvider>\n );\n\n return layout ? <>{layout(wrapped)}</> : wrapped;\n}\n"]}
1
+ {"version":3,"file":"TeamPage.js","sourceRoot":"","sources":["../../../src/client/org/TeamPage.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Button as ToolkitButton } from \"@agent-native/toolkit/ui/button\";\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"@agent-native/toolkit/ui/select\";\nimport {\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n} from \"@agent-native/toolkit/ui/table\";\nimport {\n IconUserPlus,\n IconTrash,\n IconCrown,\n IconShieldCheck,\n IconLoader2,\n IconCheck,\n IconPencil,\n IconAt,\n IconX,\n IconKey,\n IconCopy,\n IconRefresh,\n IconEye,\n IconEyeOff,\n IconCloudUpload,\n IconFileImport,\n IconPlus,\n IconAlertTriangle,\n IconUsersGroup,\n IconHelpCircle,\n} from \"@tabler/icons-react\";\nimport {\n forwardRef,\n useMemo,\n useRef,\n useState,\n type ComponentPropsWithoutRef,\n type ReactNode,\n} from \"react\";\n\nimport type { DomainMatchOrg } from \"../../org/types.js\";\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from \"../components/ui/tooltip.js\";\nimport { useT } from \"../i18n.js\";\nimport { cn } from \"../utils.js\";\nimport {\n useOrg,\n useOrgMembers,\n useOrgInvitations,\n useCreateOrg,\n useUpdateOrg,\n useBulkInviteMembers,\n useChangeMemberRole,\n useAcceptInvitation,\n useRemoveMember,\n useSwitchOrg,\n useSetOrgDomain,\n useSetA2ASecret,\n useSyncA2ASecret,\n useJoinByDomain,\n type InviteRole,\n type SyncA2ASecretResult,\n} from \"./hooks.js\";\n\nconst Button = forwardRef<\n HTMLButtonElement,\n ComponentPropsWithoutRef<typeof ToolkitButton>\n>(({ className, ...props }, ref) => (\n <ToolkitButton\n ref={ref}\n variant=\"ghost\"\n className={cn(\n \"h-auto p-0 hover:bg-transparent hover:text-inherit active:scale-100 [&_svg]:!size-auto\",\n className,\n )}\n {...props}\n />\n));\nButton.displayName = \"TeamPrimitiveButton\";\n\nexport interface TeamPageProps {\n /**\n * Optional wrapper around the page contents. Templates pass their own Layout\n * component so the Team page renders inside the template's chrome.\n */\n layout?: (children: ReactNode) => ReactNode;\n /**\n * Title shown at the top of the page. Defaults to \"Team\".\n */\n title?: string;\n /**\n * Hide the page title when this is rendered inside another titled surface,\n * such as the Settings > Team tab.\n */\n showTitle?: boolean;\n /**\n * Description shown on the \"Create an Organization\" card. Defaults to\n * \"Set up a team to collaborate with your colleagues.\"\n */\n createOrgDescription?: string;\n /**\n * Class applied to the outer max-width container. Templates can use this to\n * tweak page width.\n */\n className?: string;\n}\n\nfunction RoleIcon({ role }: { role: string }) {\n if (role === \"owner\")\n return <IconCrown className=\"h-3.5 w-3.5 text-primary\" />;\n if (role === \"admin\")\n return <IconShieldCheck className=\"h-3.5 w-3.5 text-muted-foreground\" />;\n return null;\n}\n\nfunction ErrorText({ error }: { error: unknown }) {\n if (!error) return null;\n return (\n <p className=\"text-xs text-destructive\">\n {error instanceof Error ? error.message : String(error)}\n </p>\n );\n}\n\nfunction PendingInvitationsCard() {\n const t = useT();\n const { data: org } = useOrg();\n const acceptInvitation = useAcceptInvitation();\n\n if (!org?.pendingInvitations?.length) return null;\n\n return (\n <section className=\"rounded-lg border border-border bg-card p-4 space-y-3\">\n <h3 className=\"text-sm font-medium\">{t(\"org.pendingInvitations\")}</h3>\n {org.pendingInvitations.map((inv) => (\n <div\n key={inv.id}\n className=\"flex items-center justify-between rounded-md border border-border p-3\"\n >\n <div>\n <div className=\"text-sm font-medium\">{inv.orgName}</div>\n <div className=\"text-xs text-muted-foreground\">\n {t(\"org.invitedByLabel\", { name: inv.invitedBy })}\n </div>\n </div>\n <Button\n type=\"button\"\n intent=\"primary\"\n emphasis=\"solid\"\n onClick={() => acceptInvitation.mutate(inv.id)}\n disabled={acceptInvitation.isPending}\n className=\"rounded-md bg-primary px-3 py-1.5 text-xs font-medium text-primary-foreground hover:bg-primary/90 disabled:opacity-50\"\n >\n {acceptInvitation.isPending ? (\n <IconLoader2 size={14} className=\"animate-spin\" />\n ) : (\n t(\"org.accept\")\n )}\n </Button>\n </div>\n ))}\n <ErrorText error={acceptInvitation.error} />\n </section>\n );\n}\n\nfunction JoinByDomainCard({ matches }: { matches: DomainMatchOrg[] }) {\n const t = useT();\n const joinByDomain = useJoinByDomain();\n const [pendingId, setPendingId] = useState<string | null>(null);\n\n return (\n <section className=\"rounded-lg border border-border bg-card p-4 space-y-3\">\n <h3 className=\"text-sm font-medium\">{t(\"org.joinYourTeam\")}</h3>\n <p className=\"text-sm text-muted-foreground\">\n {matches.length === 1\n ? t(\"org.joinDomainOne\")\n : t(\"org.joinDomainMany\")}\n </p>\n <div className=\"space-y-2\">\n {matches.map((m) => (\n <div\n key={m.orgId}\n className=\"flex items-center justify-between rounded-md border border-border p-3\"\n >\n <div className=\"flex items-center gap-2.5\">\n <div className=\"flex h-8 w-8 items-center justify-center rounded-md bg-primary/10\">\n <IconUsersGroup className=\"h-4 w-4 text-primary\" />\n </div>\n <div className=\"text-sm font-medium\">{m.orgName}</div>\n </div>\n <Button\n type=\"button\"\n intent=\"primary\"\n emphasis=\"solid\"\n disabled={joinByDomain.isPending && pendingId === m.orgId}\n onClick={() => {\n setPendingId(m.orgId);\n joinByDomain.mutate(m.orgId, {\n onSettled: () => setPendingId(null),\n });\n }}\n className=\"rounded-md bg-primary px-3 py-1.5 text-xs font-medium text-primary-foreground hover:bg-primary/90 disabled:opacity-50\"\n >\n {joinByDomain.isPending && pendingId === m.orgId ? (\n <IconLoader2 size={14} className=\"animate-spin\" />\n ) : (\n t(\"org.join\")\n )}\n </Button>\n </div>\n ))}\n </div>\n <ErrorText error={joinByDomain.error} />\n </section>\n );\n}\n\nfunction CreateOrgCard({ description }: { description?: string }) {\n const t = useT();\n const createOrg = useCreateOrg();\n const [name, setName] = useState(\"\");\n const [showForm, setShowForm] = useState(false);\n\n return (\n <section className=\"rounded-lg border border-border bg-card p-4 space-y-3\">\n <h3 className=\"text-sm font-medium\">{t(\"org.createOrgCardTitle\")}</h3>\n <p className=\"text-sm text-muted-foreground\">\n {description || t(\"org.createOrgCardDescription\")}\n </p>\n {!showForm ? (\n <Button\n type=\"button\"\n intent=\"primary\"\n emphasis=\"solid\"\n onClick={() => setShowForm(true)}\n className=\"rounded-md bg-primary px-3 py-1.5 text-xs font-medium text-primary-foreground hover:bg-primary/90\"\n >\n {t(\"org.createOrganization\")}\n </Button>\n ) : (\n <div className=\"space-y-2\">\n <input\n type=\"text\"\n value={name}\n onChange={(e) => setName(e.target.value)}\n placeholder=\"e.g. Acme Inc.\"\n className=\"w-full rounded-md border border-border bg-background px-3 py-2 text-sm focus:outline-none focus:ring-1 focus:ring-foreground\"\n autoFocus\n />\n <div className=\"flex gap-2\">\n <Button\n type=\"button\"\n intent=\"primary\"\n emphasis=\"solid\"\n disabled={!name.trim() || createOrg.isPending}\n onClick={() =>\n createOrg.mutate(name.trim(), {\n onSuccess: () => {\n setName(\"\");\n setShowForm(false);\n },\n })\n }\n className=\"rounded-md bg-primary px-3 py-1.5 text-xs font-medium text-primary-foreground hover:bg-primary/90 disabled:opacity-50\"\n >\n {createOrg.isPending ? (\n <IconLoader2 size={14} className=\"animate-spin\" />\n ) : (\n t(\"org.create\")\n )}\n </Button>\n <Button\n type=\"button\"\n intent=\"neutral\"\n emphasis=\"outline\"\n onClick={() => {\n setShowForm(false);\n setName(\"\");\n }}\n className=\"rounded-md border border-border px-3 py-1.5 text-xs font-medium text-muted-foreground hover:text-foreground\"\n >\n {t(\"org.cancel\")}\n </Button>\n </div>\n <ErrorText error={createOrg.error} />\n </div>\n )}\n </section>\n );\n}\n\nfunction OrgNameDisplay({ name, canEdit }: { name: string; canEdit: boolean }) {\n const [editing, setEditing] = useState(false);\n const [draft, setDraft] = useState(name);\n const updateOrg = useUpdateOrg();\n\n if (!canEdit) return <div className=\"text-sm font-medium\">{name}</div>;\n\n if (!editing) {\n return (\n <Button\n type=\"button\"\n onClick={() => {\n setDraft(name);\n setEditing(true);\n }}\n className=\"group flex items-center gap-1.5 text-sm font-medium hover:text-foreground/80\"\n >\n {name}\n <IconPencil\n size={12}\n className=\"text-muted-foreground opacity-0 group-hover:opacity-100\"\n />\n </Button>\n );\n }\n\n function save() {\n const trimmed = draft.trim();\n if (!trimmed || trimmed === name) {\n setEditing(false);\n return;\n }\n updateOrg.mutate(trimmed, { onSuccess: () => setEditing(false) });\n }\n\n return (\n <div className=\"flex items-center gap-1.5\">\n <input\n type=\"text\"\n value={draft}\n onChange={(e) => setDraft(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") save();\n if (e.key === \"Escape\") setEditing(false);\n }}\n onBlur={save}\n className=\"rounded border border-border bg-background px-1.5 py-0.5 text-sm font-medium focus:outline-none focus:ring-1 focus:ring-foreground\"\n autoFocus\n />\n <ErrorText error={updateOrg.error} />\n </div>\n );\n}\n\ninterface MemberListItem {\n email: string;\n role: string;\n}\n\ninterface PendingInviteListItem {\n id: string;\n email: string;\n role: string;\n}\n\nfunction MembersCard() {\n const t = useT();\n const { data: org } = useOrg();\n const { data: membersData, isLoading: isLoadingMembers } = useOrgMembers();\n const { data: invitationsData } = useOrgInvitations();\n const switchOrg = useSwitchOrg();\n\n if (!org?.orgId) return null;\n\n const isOwner = org.role === \"owner\";\n const isOwnerOrAdmin = isOwner || org.role === \"admin\";\n const members = membersData?.members ?? [];\n const pendingInvites = invitationsData?.invitations ?? [];\n const hasMultipleOrgs = (org.orgs?.length ?? 0) > 1;\n\n return (\n <div className=\"space-y-4\">\n <section className=\"rounded-lg border border-border bg-card p-4 space-y-4\">\n <div className=\"flex flex-col gap-3 sm:flex-row sm:items-start sm:justify-between\">\n <div className=\"flex min-w-0 items-center gap-3\">\n <div className=\"flex h-9 w-9 shrink-0 items-center justify-center rounded-lg bg-primary/10\">\n <IconUsersGroup className=\"h-5 w-5 text-primary\" />\n </div>\n <div className=\"min-w-0\">\n <OrgNameDisplay\n name={org.orgName ?? \"\"}\n canEdit={isOwnerOrAdmin}\n />\n <div className=\"text-xs text-muted-foreground\">\n {t(\"org.memberCount\", { count: members.length })} ·{\" \"}\n {t(\"org.youAreRole\", { role: org.role })}\n </div>\n </div>\n </div>\n {hasMultipleOrgs && (\n <Select\n value={org.orgId ?? \"\"}\n onValueChange={(value) => switchOrg.mutate(value || null)}\n disabled={switchOrg.isPending}\n >\n <SelectTrigger className=\"h-auto w-full rounded-md border border-border bg-background px-2.5 py-1.5 text-xs sm:w-auto\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {org.orgs.map((o) => (\n <SelectItem key={o.orgId} value={o.orgId}>\n {o.orgName}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n )}\n </div>\n\n {isOwnerOrAdmin && (\n <div className=\"grid gap-5 border-t border-border pt-4 lg:grid-cols-2\">\n <DomainSettingsSection\n domain={org.allowedDomain}\n ownerEmail={org.email}\n />\n\n {isOwner && <A2ASecretSection secret={org.a2aSecret} />}\n </div>\n )}\n\n <ErrorText error={switchOrg.error} />\n </section>\n\n <MembersTableCard\n members={members}\n pendingInvites={pendingInvites}\n isLoadingMembers={isLoadingMembers}\n currentUserEmail={org.email}\n currentUserRole={org.role ?? null}\n />\n </div>\n );\n}\n\nfunction MembersTableCard({\n members,\n pendingInvites,\n isLoadingMembers,\n currentUserEmail,\n currentUserRole,\n}: {\n members: MemberListItem[];\n pendingInvites: PendingInviteListItem[];\n isLoadingMembers: boolean;\n currentUserEmail: string;\n currentUserRole: string | null;\n}) {\n const t = useT();\n const [showInviteForm, setShowInviteForm] = useState(false);\n const canInvite = currentUserRole === \"owner\" || currentUserRole === \"admin\";\n\n return (\n <section className=\"rounded-lg border border-border bg-card\">\n <div className=\"flex flex-col gap-3 border-b border-border px-4 py-3 sm:flex-row sm:items-center sm:justify-between\">\n <div>\n <h3 className=\"text-sm font-medium\">{t(\"org.members\")}</h3>\n <p className=\"text-xs text-muted-foreground\">\n {t(\"org.memberCount\", { count: members.length })}\n </p>\n </div>\n {canInvite && !showInviteForm && (\n <Button\n type=\"button\"\n intent=\"primary\"\n emphasis=\"solid\"\n onClick={() => setShowInviteForm(true)}\n className=\"inline-flex items-center justify-center gap-1.5 rounded-md bg-primary px-3 py-1.5 text-xs font-medium text-primary-foreground hover:bg-primary/90\"\n >\n <IconUserPlus size={14} />\n {t(\"org.inviteMembers\")}\n </Button>\n )}\n </div>\n {canInvite && showInviteForm && (\n <div className=\"border-b border-border p-4\">\n <BulkInviteForm\n currentUserRole={currentUserRole}\n onClose={() => setShowInviteForm(false)}\n />\n </div>\n )}\n <Table>\n <TableHeader>\n <TableRow>\n <TableHead>{t(\"org.member\")}</TableHead>\n <TableHead>{t(\"org.role\")}</TableHead>\n <TableHead>{t(\"org.status\")}</TableHead>\n <TableHead className=\"text-end\">{t(\"org.actions\")}</TableHead>\n </TableRow>\n </TableHeader>\n <TableBody>\n {isLoadingMembers && members.length === 0 ? (\n [0, 1, 2].map((i) => (\n <TableRow key={i}>\n <TableCell colSpan={4}>\n <div\n className=\"h-3.5 rounded bg-muted animate-pulse\"\n style={{ width: `${180 + i * 48}px` }}\n />\n </TableCell>\n </TableRow>\n ))\n ) : members.length === 0 && pendingInvites.length === 0 ? (\n <TableRow>\n <TableCell\n colSpan={4}\n className=\"py-8 text-center text-sm text-muted-foreground\"\n >\n {t(\"org.noMembers\")}\n </TableCell>\n </TableRow>\n ) : (\n <>\n {members.map((m) => (\n <MemberRow\n key={m.email}\n email={m.email}\n role={m.role}\n isCurrentUser={m.email === currentUserEmail}\n currentUserRole={currentUserRole}\n />\n ))}\n {pendingInvites.map((inv) => (\n <PendingInviteRow key={inv.id} invite={inv} />\n ))}\n </>\n )}\n </TableBody>\n </Table>\n </section>\n );\n}\n\nfunction roleLabel(role: string, t: ReturnType<typeof useT>) {\n if (role === \"owner\") return t(\"org.owner\");\n if (role === \"admin\") return t(\"org.admin\");\n return t(\"org.member\");\n}\n\nfunction RoleBadge({ role }: { role: string }) {\n const t = useT();\n return (\n <span className=\"inline-flex items-center gap-1.5 rounded border border-border px-2 py-1 text-xs text-muted-foreground\">\n <RoleIcon role={role} />\n {roleLabel(role, t)}\n </span>\n );\n}\n\nfunction PendingInviteRow({ invite }: { invite: PendingInviteListItem }) {\n const t = useT();\n return (\n <TableRow className=\"opacity-70\">\n <TableCell className=\"min-w-56\">\n <span className=\"truncate text-sm\">{invite.email}</span>\n </TableCell>\n <TableCell>\n <RoleBadge role={invite.role} />\n </TableCell>\n <TableCell>\n <span className=\"rounded border border-border px-1.5 py-0.5 text-[10px] text-muted-foreground\">\n {t(\"org.invited\")}\n </span>\n </TableCell>\n <TableCell className=\"text-end text-muted-foreground\">-</TableCell>\n </TableRow>\n );\n}\n\nfunction MemberRow({\n email,\n role,\n isCurrentUser,\n currentUserRole,\n}: {\n email: string;\n role: string;\n isCurrentUser: boolean;\n currentUserRole: string | null;\n}) {\n const t = useT();\n const removeMember = useRemoveMember();\n const changeRole = useChangeMemberRole();\n const [editing, setEditing] = useState(false);\n const [confirmingRemove, setConfirmingRemove] = useState(false);\n\n // Owners can manage admins + members. Admins can only manage members.\n // Owners themselves are immutable through this UI; current user can't\n // edit their own role here.\n const canManage =\n role !== \"owner\" &&\n !isCurrentUser &&\n (currentUserRole === \"owner\" ||\n (currentUserRole === \"admin\" && role === \"member\"));\n\n return (\n <TableRow>\n <TableCell className=\"min-w-56\">\n <span className=\"truncate text-sm\">{email}</span>\n </TableCell>\n <TableCell>\n <RoleBadge role={role} />\n </TableCell>\n <TableCell>\n {isCurrentUser ? (\n <span className=\"rounded border border-border px-1.5 py-0.5 text-[10px] text-muted-foreground\">\n {t(\"org.you\")}\n </span>\n ) : (\n <span className=\"text-muted-foreground\">-</span>\n )}\n </TableCell>\n <TableCell>\n {canManage ? (\n <div className=\"flex shrink-0 items-center justify-end gap-1\">\n {editing ? (\n <Select\n defaultOpen\n value={role}\n onOpenChange={(open) => {\n if (!open) setEditing(false);\n }}\n onValueChange={(value) => {\n const next = value === \"admin\" ? \"admin\" : \"member\";\n if (next !== role) {\n changeRole.mutate(\n { email, role: next },\n { onSuccess: () => setEditing(false) },\n );\n } else {\n setEditing(false);\n }\n }}\n disabled={changeRole.isPending}\n >\n <SelectTrigger\n autoFocus\n className=\"h-auto w-auto rounded-md border border-border bg-background px-1.5 py-0.5 text-[11px]\"\n >\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"member\">{t(\"org.member\")}</SelectItem>\n <SelectItem value=\"admin\">{t(\"org.admin\")}</SelectItem>\n </SelectContent>\n </Select>\n ) : (\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n type=\"button\"\n onClick={() => setEditing(true)}\n className=\"text-muted-foreground hover:text-foreground\"\n >\n <IconPencil size={14} />\n </Button>\n </TooltipTrigger>\n <TooltipContent>{t(\"org.changeRole\")}</TooltipContent>\n </Tooltip>\n )}\n {confirmingRemove ? (\n <div className=\"flex items-center gap-1\">\n <Button\n type=\"button\"\n intent=\"neutral\"\n emphasis=\"ghost\"\n onClick={() => setConfirmingRemove(false)}\n className=\"rounded px-1.5 py-0.5 text-[11px] text-muted-foreground hover:bg-accent hover:text-foreground\"\n >\n {t(\"org.cancel\")}\n </Button>\n <Button\n type=\"button\"\n intent=\"danger\"\n emphasis=\"solid\"\n disabled={removeMember.isPending}\n onClick={() =>\n removeMember.mutate(email, {\n onSettled: () => setConfirmingRemove(false),\n })\n }\n className=\"rounded bg-destructive px-1.5 py-0.5 text-[11px] text-destructive-foreground hover:bg-destructive/90 disabled:opacity-50\"\n >\n {t(\"org.remove\")}\n </Button>\n </div>\n ) : (\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n type=\"button\"\n intent=\"danger\"\n emphasis=\"ghost\"\n disabled={removeMember.isPending}\n onClick={() => setConfirmingRemove(true)}\n className=\"text-muted-foreground hover:text-destructive disabled:opacity-50\"\n >\n <IconTrash size={14} />\n </Button>\n </TooltipTrigger>\n <TooltipContent>{t(\"org.removeMember\")}</TooltipContent>\n </Tooltip>\n )}\n </div>\n ) : (\n <div className=\"text-end text-muted-foreground\">-</div>\n )}\n </TableCell>\n </TableRow>\n );\n}\n\ninterface DraftInvite {\n email: string;\n role: InviteRole;\n}\n\nconst EMAIL_RE = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n\nfunction parseEmailList(input: string): string[] {\n return Array.from(\n new Set(\n input\n .split(/[\\s,;]+/)\n .map((s) => s.trim().toLowerCase())\n .filter(Boolean),\n ),\n );\n}\n\nfunction parseCsvEmails(text: string): string[] {\n // Tolerant CSV parse — split on lines, then on commas, take any cell\n // that looks like an email. Handles \"name,email,role\" rows or just\n // \"email\" per line. A robust full CSV parser would be overkill here.\n const cells: string[] = [];\n for (const line of text.split(/\\r?\\n/)) {\n for (const cell of line.split(\",\")) {\n const trimmed = cell.trim().replace(/^\"|\"$/g, \"\");\n if (trimmed) cells.push(trimmed);\n }\n }\n return Array.from(\n new Set(cells.filter((c) => EMAIL_RE.test(c)).map((c) => c.toLowerCase())),\n );\n}\n\nfunction BulkInviteForm({\n currentUserRole,\n onClose,\n}: {\n currentUserRole: string | null;\n onClose: () => void;\n}) {\n const bulkInvite = useBulkInviteMembers();\n const fileRef = useRef<HTMLInputElement>(null);\n const [drafts, setDrafts] = useState<DraftInvite[]>([\n { email: \"\", role: \"member\" },\n ]);\n const [pasteOpen, setPasteOpen] = useState(false);\n const [pasteValue, setPasteValue] = useState(\"\");\n const [pasteRole, setPasteRole] = useState<InviteRole>(\"member\");\n const [resultBanner, setResultBanner] = useState<{\n succeeded: number;\n failed: { email: string; error: string }[];\n } | null>(null);\n\n const canSetAdmin = currentUserRole === \"owner\";\n\n const validDrafts = useMemo(\n () =>\n drafts\n .map((d) => ({ ...d, email: d.email.trim().toLowerCase() }))\n .filter((d) => EMAIL_RE.test(d.email)),\n [drafts],\n );\n\n function setDraft(index: number, patch: Partial<DraftInvite>) {\n setDrafts((prev) =>\n prev.map((d, i) => (i === index ? { ...d, ...patch } : d)),\n );\n }\n\n function appendEmails(emails: string[], role: InviteRole) {\n if (!emails.length) return;\n setDrafts((prev) => {\n const existing = new Set(\n prev.map((d) => d.email.trim().toLowerCase()).filter(Boolean),\n );\n const fresh: DraftInvite[] = [];\n for (const e of emails) {\n if (!existing.has(e)) {\n fresh.push({ email: e, role });\n existing.add(e);\n }\n }\n // If the only existing row is an empty placeholder, drop it.\n const cleaned = prev.filter(\n (d, i) => !(i === 0 && !d.email.trim() && prev.length === 1),\n );\n return [...cleaned, ...fresh];\n });\n }\n\n function handleFile(file: File) {\n file.text().then((text) => {\n const emails = parseCsvEmails(text);\n if (emails.length) {\n appendEmails(emails, \"member\");\n } else {\n setResultBanner({\n succeeded: 0,\n failed: [{ email: file.name, error: \"No valid emails found in CSV\" }],\n });\n }\n });\n }\n\n async function submit() {\n setResultBanner(null);\n const dedup = new Map<string, DraftInvite>();\n for (const d of validDrafts) {\n // canSetAdmin guard mirrors server-side enforcement so an admin-only\n // user editing the form can't even attempt to grant admin (they'd\n // get a 403 anyway).\n const role = canSetAdmin ? d.role : \"member\";\n dedup.set(d.email, { ...d, role });\n }\n const invites = Array.from(dedup.values());\n if (invites.length === 0) return;\n\n const result = await bulkInvite.mutateAsync(invites);\n setResultBanner({\n succeeded: result.succeeded.length,\n failed: result.failed,\n });\n\n // Wipe drafts that succeeded; leave failed ones so the user can fix\n // and retry. If everything succeeded, reset to a single blank row.\n const failedEmails = new Set(result.failed.map((f) => f.email));\n setDrafts((prev) => {\n const remaining = prev.filter((d) =>\n failedEmails.has(d.email.trim().toLowerCase()),\n );\n return remaining.length > 0 ? remaining : [{ email: \"\", role: \"member\" }];\n });\n\n // Auto-close on full success.\n if (result.failed.length === 0 && result.succeeded.length > 0) {\n setTimeout(() => onClose(), 1200);\n }\n }\n\n return (\n <div className=\"space-y-3\">\n <div className=\"space-y-2\">\n {drafts.map((draft, i) => (\n <div key={i} className=\"flex items-center gap-2\">\n <input\n type=\"email\"\n value={draft.email}\n onChange={(e) => setDraft(i, { email: e.target.value })}\n placeholder=\"colleague@company.com\"\n className=\"flex-1 rounded-md border border-border bg-background px-3 py-1.5 text-sm focus:outline-none focus:ring-1 focus:ring-foreground\"\n autoFocus={i === drafts.length - 1}\n />\n <Select\n value={draft.role}\n onValueChange={(value) =>\n setDraft(i, {\n role: value === \"admin\" ? \"admin\" : \"member\",\n })\n }\n disabled={!canSetAdmin}\n >\n <SelectTrigger\n title={\n canSetAdmin\n ? undefined\n : \"Only the organization owner can invite admins\"\n }\n className=\"h-auto w-auto rounded-md border border-border bg-background px-2 py-1.5 text-xs disabled:opacity-50\"\n >\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"member\">Member</SelectItem>\n <SelectItem value=\"admin\">Admin</SelectItem>\n </SelectContent>\n </Select>\n {drafts.length > 1 && (\n <Button\n type=\"button\"\n onClick={() =>\n setDrafts((prev) => prev.filter((_, j) => j !== i))\n }\n className=\"text-muted-foreground hover:text-destructive\"\n >\n <IconX size={14} />\n </Button>\n )}\n </div>\n ))}\n </div>\n\n <div className=\"flex flex-wrap items-center gap-2\">\n <Button\n type=\"button\"\n intent=\"neutral\"\n emphasis=\"outline\"\n onClick={() =>\n setDrafts((prev) => [...prev, { email: \"\", role: \"member\" }])\n }\n className=\"inline-flex items-center gap-1 rounded-md border border-border px-2.5 py-1.5 text-xs font-medium hover:bg-accent/50\"\n >\n <IconPlus size={14} />\n Add another\n </Button>\n <Button\n type=\"button\"\n intent=\"neutral\"\n emphasis=\"outline\"\n onClick={() => setPasteOpen((v) => !v)}\n className=\"inline-flex items-center gap-1 rounded-md border border-border px-2.5 py-1.5 text-xs font-medium hover:bg-accent/50\"\n >\n <IconUserPlus size={14} />\n Paste many\n </Button>\n <Button\n type=\"button\"\n intent=\"neutral\"\n emphasis=\"outline\"\n onClick={() => fileRef.current?.click()}\n className=\"inline-flex items-center gap-1 rounded-md border border-border px-2.5 py-1.5 text-xs font-medium hover:bg-accent/50\"\n >\n <IconFileImport size={14} />\n Import CSV\n </Button>\n <input\n ref={fileRef}\n type=\"file\"\n accept=\".csv,text/csv,text/plain\"\n className=\"hidden\"\n onChange={(e) => {\n const file = e.target.files?.[0];\n if (file) handleFile(file);\n // reset so re-uploading the same file re-fires onChange\n e.target.value = \"\";\n }}\n />\n </div>\n\n {pasteOpen && (\n <div className=\"space-y-2 rounded-md border border-border p-3\">\n <div className=\"text-xs font-medium text-muted-foreground\">\n Paste emails (comma, space, or newline separated)\n </div>\n <textarea\n value={pasteValue}\n onChange={(e) => setPasteValue(e.target.value)}\n rows={4}\n placeholder=\"alice@acme.com, bob@acme.com&#10;charlie@acme.com\"\n className=\"w-full rounded-md border border-border bg-background px-3 py-2 text-sm focus:outline-none focus:ring-1 focus:ring-foreground\"\n />\n <div className=\"flex items-center gap-2\">\n <Select\n value={pasteRole}\n onValueChange={(value) =>\n setPasteRole(value === \"admin\" ? \"admin\" : \"member\")\n }\n disabled={!canSetAdmin}\n >\n <SelectTrigger className=\"h-auto w-auto rounded-md border border-border bg-background px-2 py-1.5 text-xs disabled:opacity-50\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"member\">Add as members</SelectItem>\n <SelectItem value=\"admin\">Add as admins</SelectItem>\n </SelectContent>\n </Select>\n <Button\n type=\"button\"\n intent=\"primary\"\n emphasis=\"solid\"\n onClick={() => {\n appendEmails(parseEmailList(pasteValue), pasteRole);\n setPasteValue(\"\");\n setPasteOpen(false);\n }}\n disabled={parseEmailList(pasteValue).length === 0}\n className=\"rounded-md bg-primary px-3 py-1.5 text-xs font-medium text-primary-foreground hover:bg-primary/90 disabled:opacity-50\"\n >\n Add\n </Button>\n <Button\n type=\"button\"\n intent=\"neutral\"\n emphasis=\"outline\"\n onClick={() => {\n setPasteValue(\"\");\n setPasteOpen(false);\n }}\n className=\"rounded-md border border-border px-3 py-1.5 text-xs font-medium text-muted-foreground hover:text-foreground\"\n >\n Cancel\n </Button>\n </div>\n </div>\n )}\n\n <div className=\"flex items-center gap-2\">\n <Button\n type=\"button\"\n intent=\"primary\"\n emphasis=\"solid\"\n disabled={validDrafts.length === 0 || bulkInvite.isPending}\n onClick={submit}\n className=\"rounded-md bg-primary px-3 py-1.5 text-xs font-medium text-primary-foreground hover:bg-primary/90 disabled:opacity-50\"\n >\n {bulkInvite.isPending ? (\n <IconLoader2 size={14} className=\"animate-spin\" />\n ) : (\n <span className=\"inline-flex items-center gap-1\">\n <IconCheck size={14} />\n Send {validDrafts.length || \"\"}{\" \"}\n {validDrafts.length === 1 ? \"invite\" : \"invites\"}\n </span>\n )}\n </Button>\n <Button\n type=\"button\"\n intent=\"neutral\"\n emphasis=\"outline\"\n onClick={onClose}\n className=\"rounded-md border border-border px-3 py-1.5 text-xs font-medium text-muted-foreground hover:text-foreground\"\n >\n Close\n </Button>\n </div>\n\n <p className=\"text-[11px] text-muted-foreground\">\n Each invitee signs in with this exact email to accept.\n {canSetAdmin\n ? \" Admins can manage members and workspace settings.\"\n : \" Only the organization owner can grant admin access.\"}\n </p>\n\n {resultBanner && (\n <div className=\"space-y-1 rounded-md border border-border bg-accent/30 p-2.5\">\n {resultBanner.succeeded > 0 && (\n <p className=\"text-[11px] text-primary\">\n <IconCheck className=\"inline h-3 w-3 -mt-0.5\" /> Sent{\" \"}\n {resultBanner.succeeded}{\" \"}\n {resultBanner.succeeded === 1 ? \"invite\" : \"invites\"}.\n </p>\n )}\n {resultBanner.failed.length > 0 && (\n <ul className=\"space-y-0.5 text-[11px] text-destructive\">\n {resultBanner.failed.map((f) => (\n <li key={f.email}>\n <IconAlertTriangle className=\"inline h-3 w-3 -mt-0.5 me-1\" />\n {f.email}: {f.error}\n </li>\n ))}\n </ul>\n )}\n </div>\n )}\n\n <ErrorText error={bulkInvite.error} />\n </div>\n );\n}\n\nfunction DomainSettingsSection({\n domain,\n ownerEmail,\n}: {\n domain: string | null;\n ownerEmail: string;\n}) {\n const setOrgDomain = useSetOrgDomain();\n const [editing, setEditing] = useState(false);\n const [draft, setDraft] = useState(domain ?? \"\");\n\n const ownDomain = ownerEmail.split(\"@\")[1]?.toLowerCase() ?? \"\";\n\n function save() {\n const trimmed = draft.trim().toLowerCase();\n if (trimmed === (domain ?? \"\")) {\n setEditing(false);\n return;\n }\n setOrgDomain.mutate(trimmed || null, {\n onSuccess: () => setEditing(false),\n });\n }\n\n return (\n <div className=\"space-y-2 border-t border-border pt-3 first:border-t-0 first:pt-0\">\n <div className=\"text-xs font-medium text-muted-foreground uppercase tracking-wide\">\n Email domain auto-join\n </div>\n <p className=\"text-[11px] text-muted-foreground\">\n Anyone who signs up with an email at this domain will join your\n organization automatically. You can only set your own email domain (\n {ownDomain || \"—\"}); free email providers like gmail.com or outlook.com\n aren&apos;t allowed.\n </p>\n {!editing ? (\n <div className=\"flex items-center gap-2\">\n {domain ? (\n <>\n <span className=\"inline-flex items-center gap-1.5 rounded-md border border-border bg-background px-2.5 py-1.5 text-sm\">\n <IconAt className=\"h-3.5 w-3.5 text-muted-foreground\" />\n {domain}\n </span>\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n type=\"button\"\n onClick={() => {\n setDraft(domain);\n setEditing(true);\n }}\n className=\"text-muted-foreground hover:text-foreground\"\n >\n <IconPencil size={14} />\n </Button>\n </TooltipTrigger>\n <TooltipContent>Edit domain</TooltipContent>\n </Tooltip>\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n type=\"button\"\n intent=\"danger\"\n emphasis=\"ghost\"\n disabled={setOrgDomain.isPending}\n onClick={() => setOrgDomain.mutate(null)}\n className=\"text-muted-foreground hover:text-destructive disabled:opacity-50\"\n >\n <IconX size={14} />\n </Button>\n </TooltipTrigger>\n <TooltipContent>Remove domain</TooltipContent>\n </Tooltip>\n </>\n ) : (\n <Button\n type=\"button\"\n intent=\"neutral\"\n emphasis=\"outline\"\n onClick={() => {\n setDraft(ownDomain);\n setEditing(true);\n }}\n className=\"flex items-center gap-1.5 rounded-md border border-border px-2.5 py-1.5 text-xs font-medium hover:bg-accent/50\"\n >\n <IconAt size={14} />\n Allow {ownDomain || \"your domain\"} to auto-join\n </Button>\n )}\n </div>\n ) : (\n <div className=\"flex items-center gap-2\">\n <input\n type=\"text\"\n value={draft}\n onChange={(e) => setDraft(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") save();\n if (e.key === \"Escape\") setEditing(false);\n }}\n placeholder={ownDomain || \"example.com\"}\n className=\"rounded-md border border-border bg-background px-2.5 py-1.5 text-sm focus:outline-none focus:ring-1 focus:ring-foreground\"\n autoFocus\n />\n <Button\n type=\"button\"\n intent=\"primary\"\n emphasis=\"solid\"\n disabled={setOrgDomain.isPending}\n onClick={save}\n className=\"rounded-md bg-primary px-3 py-1.5 text-xs font-medium text-primary-foreground hover:bg-primary/90 disabled:opacity-50\"\n >\n {setOrgDomain.isPending ? (\n <IconLoader2 size={14} className=\"animate-spin\" />\n ) : (\n \"Save\"\n )}\n </Button>\n <Button\n type=\"button\"\n intent=\"neutral\"\n emphasis=\"outline\"\n onClick={() => setEditing(false)}\n className=\"rounded-md border border-border px-3 py-1.5 text-xs font-medium text-muted-foreground hover:text-foreground\"\n >\n Cancel\n </Button>\n </div>\n )}\n <ErrorText error={setOrgDomain.error} />\n </div>\n );\n}\n\nfunction A2ASecretSection({ secret }: { secret: string | null | undefined }) {\n const setA2ASecret = useSetA2ASecret();\n const syncA2ASecret = useSyncA2ASecret();\n const [revealed, setRevealed] = useState(false);\n const [copied, setCopied] = useState(false);\n const [pasteMode, setPasteMode] = useState(false);\n const [pasteValue, setPasteValue] = useState(\"\");\n const [syncResult, setSyncResult] = useState<SyncA2ASecretResult | null>(\n null,\n );\n\n function copyToClipboard() {\n if (!secret) return;\n navigator.clipboard.writeText(secret).then(() => {\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n });\n }\n\n // Push the current secret to all connected apps. Optionally pass the\n // PREVIOUS secret as `signSecret` so the receiving apps (which still\n // hold the previous value) can verify the JWT.\n function syncToApps(signSecret?: string) {\n setSyncResult(null);\n syncA2ASecret.mutate(signSecret ? { signSecret } : undefined, {\n onSuccess: (result) => {\n setSyncResult(result);\n },\n });\n }\n\n function regenerate() {\n setA2ASecret.mutate(undefined, {\n onSuccess: (result) => {\n setRevealed(false);\n // Auto-sync the new secret to all connected apps. Sign with the\n // PREVIOUS secret (which peers still hold) so verification on\n // their side succeeds and they accept the new value.\n syncToApps(result.previousSecret ?? undefined);\n },\n });\n }\n\n function saveSecret() {\n const trimmed = pasteValue.trim();\n if (!trimmed) return;\n setA2ASecret.mutate(trimmed, {\n onSuccess: (result) => {\n setPasteMode(false);\n setPasteValue(\"\");\n // Same auto-sync flow as regenerate: peers verify with the\n // previous secret, then update to the new pasted value.\n syncToApps(result.previousSecret ?? undefined);\n },\n });\n }\n\n const masked = secret ? \"****\" + secret.slice(-8) : \"Not set\";\n\n return (\n <div className=\"space-y-2\">\n <div className=\"flex items-center gap-1 text-xs font-medium text-muted-foreground uppercase tracking-wide\">\n <span>Cross-app authentication</span>\n <Tooltip>\n <TooltipTrigger asChild>\n <a\n href=\"/docs/a2a-protocol#organization-secret-sync\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n aria-label=\"Read the cross-app authentication documentation\"\n className=\"inline-flex size-3.5 items-center justify-center rounded-full text-muted-foreground hover:text-foreground\"\n >\n <IconHelpCircle className=\"size-3\" />\n </a>\n </TooltipTrigger>\n <TooltipContent>\n Read the cross-app authentication documentation\n </TooltipContent>\n </Tooltip>\n </div>\n <p className=\"text-[11px] text-muted-foreground\">\n This secret authenticates cross-app delegation (e.g. Dispatch to\n Analytics). All apps in your organization need the same secret.\n </p>\n\n <div className=\"flex items-center gap-2 flex-wrap\">\n <span className=\"inline-flex items-center gap-1.5 rounded-md border border-border bg-background px-2.5 py-1.5 text-sm font-mono\">\n <IconKey className=\"h-3.5 w-3.5 text-muted-foreground\" />\n {revealed && secret ? secret : masked}\n </span>\n {secret && (\n <>\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n type=\"button\"\n onClick={() => setRevealed(!revealed)}\n className=\"text-muted-foreground hover:text-foreground\"\n >\n {revealed ? <IconEyeOff size={14} /> : <IconEye size={14} />}\n </Button>\n </TooltipTrigger>\n <TooltipContent>\n {revealed ? \"Hide secret\" : \"Reveal secret\"}\n </TooltipContent>\n </Tooltip>\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n type=\"button\"\n onClick={copyToClipboard}\n className=\"text-muted-foreground hover:text-foreground\"\n >\n {copied ? (\n <IconCheck size={14} className=\"text-primary\" />\n ) : (\n <IconCopy size={14} />\n )}\n </Button>\n </TooltipTrigger>\n <TooltipContent>Copy secret</TooltipContent>\n </Tooltip>\n </>\n )}\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n type=\"button\"\n intent=\"danger\"\n emphasis=\"outline\"\n onClick={regenerate}\n disabled={setA2ASecret.isPending || syncA2ASecret.isPending}\n className=\"inline-flex items-center gap-1 rounded-md border border-border px-2.5 py-1.5 text-xs font-medium hover:bg-accent/50 disabled:opacity-50\"\n >\n {setA2ASecret.isPending ? (\n <IconLoader2 size={14} className=\"animate-spin\" />\n ) : (\n <IconRefresh size={14} />\n )}\n Regenerate\n </Button>\n </TooltipTrigger>\n <TooltipContent>\n Regenerate secret and sync to connected apps\n </TooltipContent>\n </Tooltip>\n {secret && (\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n type=\"button\"\n intent=\"neutral\"\n emphasis=\"outline\"\n onClick={() => syncToApps()}\n disabled={setA2ASecret.isPending || syncA2ASecret.isPending}\n className=\"inline-flex items-center gap-1 rounded-md border border-border px-2.5 py-1.5 text-xs font-medium hover:bg-accent/50 disabled:opacity-50\"\n >\n {syncA2ASecret.isPending ? (\n <IconLoader2 size={14} className=\"animate-spin\" />\n ) : (\n <IconCloudUpload size={14} />\n )}\n Sync to apps\n </Button>\n </TooltipTrigger>\n <TooltipContent>\n Push this secret to every connected app\n </TooltipContent>\n </Tooltip>\n )}\n </div>\n\n {syncA2ASecret.isPending && (\n <p className=\"text-[11px] text-muted-foreground\">\n Syncing to connected apps…\n </p>\n )}\n\n {syncResult && !syncA2ASecret.isPending && (\n <div className=\"space-y-1\">\n <p className=\"text-[11px] text-muted-foreground\">\n Synced to {syncResult.succeeded}/{syncResult.total} app\n {syncResult.total === 1 ? \"\" : \"s\"}\n {syncResult.failed > 0 ? ` (${syncResult.failed} failed)` : \"\"}.\n </p>\n {syncResult.failed > 0 && (\n <ul className=\"text-[11px] text-destructive list-disc ps-5 space-y-0.5\">\n {syncResult.results\n .filter((r) => !r.ok)\n .map((r) => (\n <li key={r.id}>\n {r.name}: {r.error || `HTTP ${r.status ?? \"?\"}`}\n </li>\n ))}\n </ul>\n )}\n </div>\n )}\n\n {!pasteMode ? (\n <Button\n type=\"button\"\n intent=\"neutral\"\n emphasis=\"outline\"\n onClick={() => setPasteMode(true)}\n className=\"flex items-center gap-1.5 rounded-md border border-border px-2.5 py-1.5 text-xs font-medium hover:bg-accent/50\"\n >\n <IconKey size={14} />\n Paste secret from another app\n </Button>\n ) : (\n <div className=\"flex items-center gap-2\">\n <input\n type=\"text\"\n value={pasteValue}\n onChange={(e) => setPasteValue(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") saveSecret();\n if (e.key === \"Escape\") {\n setPasteMode(false);\n setPasteValue(\"\");\n }\n }}\n placeholder=\"Paste A2A secret\"\n className=\"flex-1 rounded-md border border-border bg-background px-2.5 py-1.5 text-sm font-mono focus:outline-none focus:ring-1 focus:ring-foreground\"\n autoFocus\n />\n <Button\n type=\"button\"\n intent=\"primary\"\n emphasis=\"solid\"\n disabled={!pasteValue.trim() || setA2ASecret.isPending}\n onClick={saveSecret}\n className=\"rounded-md bg-primary px-3 py-1.5 text-xs font-medium text-primary-foreground hover:bg-primary/90 disabled:opacity-50\"\n >\n {setA2ASecret.isPending ? (\n <IconLoader2 size={14} className=\"animate-spin\" />\n ) : (\n \"Save\"\n )}\n </Button>\n <Button\n type=\"button\"\n intent=\"neutral\"\n emphasis=\"outline\"\n onClick={() => {\n setPasteMode(false);\n setPasteValue(\"\");\n }}\n className=\"rounded-md border border-border px-3 py-1.5 text-xs font-medium text-muted-foreground hover:text-foreground\"\n >\n Cancel\n </Button>\n </div>\n )}\n\n <ErrorText error={setA2ASecret.error} />\n <ErrorText error={syncA2ASecret.error} />\n </div>\n );\n}\n\n/**\n * Default Team management page. Templates can route directly to this component\n * or wrap it with their own Layout via the `layout` prop.\n */\nexport function TeamPage({\n layout,\n title,\n showTitle = true,\n createOrgDescription,\n className,\n}: TeamPageProps) {\n const t = useT();\n const { data: org, isLoading } = useOrg();\n\n const content = (\n <div className={`space-y-6 ${className ?? \"max-w-2xl\"}`}>\n {showTitle ? (\n <h2 className=\"text-2xl font-bold tracking-tight\">\n {title ?? t(\"org.team\")}\n </h2>\n ) : null}\n\n {isLoading && (\n <section className=\"rounded-lg border border-border bg-card p-6\">\n <div className=\"text-sm text-muted-foreground\">\n {t(\"org.loading\")}\n </div>\n </section>\n )}\n\n {!isLoading && (\n <>\n <PendingInvitationsCard />\n {/* Sitting in a personal workspace still counts as having an org, so\n gating this on `!org?.orgId` hid the only in-page way to reach the\n company workspace from the people who most needed it. */}\n {org?.domainMatches && org.domainMatches.length > 0 && (\n <JoinByDomainCard matches={org.domainMatches} />\n )}\n {!org?.orgId ? (\n <CreateOrgCard description={createOrgDescription} />\n ) : (\n <MembersCard />\n )}\n </>\n )}\n </div>\n );\n\n const wrapped = (\n <TooltipProvider delayDuration={200}>{content}</TooltipProvider>\n );\n\n return layout ? <>{layout(wrapped)}</> : wrapped;\n}\n"]}
@@ -1015,18 +1015,10 @@ export function useAgentSettingsTabs() {
1015
1015
  const organization = searchTab("organization");
1016
1016
  const workspace = searchTab("workspace");
1017
1017
  return [
1018
- {
1019
- ...agent,
1020
- icon: IconHierarchy2,
1021
- group: "agent",
1022
- href: "/agent#settings",
1023
- searchEntries: undefined,
1024
- content: _jsx(Navigate, { to: "/agent#settings", replace: true }),
1025
- },
1026
1018
  {
1027
1019
  ...connections,
1028
1020
  icon: IconPlugConnected,
1029
- group: "agent",
1021
+ group: "workspace",
1030
1022
  content: _jsx(ConnectionsSettingsContent, { settingsPanelProps: baseProps }),
1031
1023
  },
1032
1024
  {
@@ -1049,6 +1041,14 @@ export function useAgentSettingsTabs() {
1049
1041
  keywords: "extensions widgets mini apps tools sandboxed apps",
1050
1042
  content: _jsx(ExtensionsSettingsContent, {}),
1051
1043
  },
1044
+ {
1045
+ ...agent,
1046
+ icon: IconHierarchy2,
1047
+ group: "manage-agent",
1048
+ href: "/agent#settings",
1049
+ searchEntries: undefined,
1050
+ content: _jsx(Navigate, { to: "/agent#settings", replace: true }),
1051
+ },
1052
1052
  ];
1053
1053
  }, [baseProps]);
1054
1054
  }