@agent-native/core 0.157.2 → 0.157.4

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 (167) hide show
  1. package/corpus/README.md +1 -1
  2. package/corpus/templates/analytics/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
  3. package/corpus/templates/analytics/.agents/skills/sharing/SKILL.md +21 -0
  4. package/corpus/templates/analytics/server/lib/first-party-analytics-backend.ts +40 -1
  5. package/corpus/templates/assets/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
  6. package/corpus/templates/assets/.agents/skills/sharing/SKILL.md +21 -0
  7. package/corpus/templates/brain/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
  8. package/corpus/templates/brain/.agents/skills/sharing/SKILL.md +21 -0
  9. package/corpus/templates/calendar/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
  10. package/corpus/templates/calendar/.agents/skills/sharing/SKILL.md +21 -0
  11. package/corpus/templates/calendar/app/components/layout/AppLayout.tsx +3 -1
  12. package/corpus/templates/chat/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
  13. package/corpus/templates/chat/.agents/skills/sharing/SKILL.md +21 -0
  14. package/corpus/templates/clips/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
  15. package/corpus/templates/clips/.agents/skills/meetings/SKILL.md +7 -7
  16. package/corpus/templates/clips/actions/approve-recording-access-request.ts +147 -0
  17. package/corpus/templates/clips/actions/request-recording-access.ts +121 -23
  18. package/corpus/templates/clips/actions/view-screen.ts +1 -1
  19. package/corpus/templates/clips/app/components/meetings/share-meeting-dialog.tsx +34 -53
  20. package/corpus/templates/clips/app/components/player/request-access-dialog.tsx +104 -0
  21. package/corpus/templates/clips/app/components/player/share-dialog.tsx +36 -45
  22. package/corpus/templates/clips/app/components/sharing/share-ui.tsx +3 -6
  23. package/corpus/templates/clips/app/i18n/en-US.ts +26 -1
  24. package/corpus/templates/clips/app/lib/public-meeting.ts +1 -1
  25. package/corpus/templates/clips/app/routes/access-request.approve.tsx +250 -0
  26. package/corpus/templates/clips/app/routes/r.$recordingId.tsx +9 -32
  27. package/corpus/templates/clips/app/routes/share.$shareId.tsx +123 -37
  28. package/corpus/templates/clips/app/routes/share.meeting.$meetingId.tsx +41 -1
  29. package/corpus/templates/clips/server/lib/calendar-event-meetings.ts +1 -0
  30. package/corpus/templates/clips/server/lib/emails.ts +40 -11
  31. package/corpus/templates/clips/shared/recording-link.ts +32 -1
  32. package/corpus/templates/clips/shared/share-attribution.ts +13 -0
  33. package/corpus/templates/content/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
  34. package/corpus/templates/content/.agents/skills/sharing/SKILL.md +21 -0
  35. package/corpus/templates/content/actions/add-database-item.ts +9 -0
  36. package/corpus/templates/content/actions/describe-content-database.ts +92 -0
  37. package/corpus/templates/content/actions/list-content-databases.ts +213 -72
  38. package/corpus/templates/content/actions/set-document-property.ts +9 -0
  39. package/corpus/templates/content/actions/submit-content-database-form.ts +9 -0
  40. package/corpus/templates/content/actions/update-document.ts +9 -0
  41. package/corpus/templates/content/app/components/editor/DocumentBlockFields.tsx +22 -10
  42. package/corpus/templates/content/app/components/editor/SlashCommandMenu.tsx +2 -1
  43. package/corpus/templates/content/app/components/editor/VisualEditor.tsx +245 -9
  44. package/corpus/templates/content/app/components/editor/database/DatabaseView.tsx +192 -134
  45. package/corpus/templates/content/app/components/editor/database/settings.tsx +7 -0
  46. package/corpus/templates/content/app/components/editor/extensions/ImageBlock.tsx +61 -45
  47. package/corpus/templates/content/app/components/editor/extensions/ImageNode.ts +6 -0
  48. package/corpus/templates/content/app/components/editor/image-upload.ts +137 -5
  49. package/corpus/templates/content/app/global.css +8 -0
  50. package/corpus/templates/content/app/hooks/use-content-database.ts +91 -11
  51. package/corpus/templates/content/changelog/2026-08-12-image-uploads-now-confirm-the-image-can-be-displayed-before-.md +6 -0
  52. package/corpus/templates/content/changelog/2026-08-14-images-fill-the-page-width-by-default-and-remain-visible-whe.md +6 -0
  53. package/corpus/templates/content/changelog/2026-08-14-images-inserted-from-the-slash-command-stay-saved-after-uplo.md +6 -0
  54. package/corpus/templates/content/changelog/2026-08-14-svg-files-can-be-selected-reliably-from-the-image-picker.md +6 -0
  55. package/corpus/templates/content/parity/matrix.md +1 -1
  56. package/corpus/templates/content/parity/matrix.ts +7 -1
  57. package/corpus/templates/content/server/plugins/agent-chat.ts +3 -0
  58. package/corpus/templates/content/shared/api.ts +9 -0
  59. package/corpus/templates/crm/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
  60. package/corpus/templates/crm/.agents/skills/sharing/SKILL.md +21 -0
  61. package/corpus/templates/design/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
  62. package/corpus/templates/design/.agents/skills/sharing/SKILL.md +21 -0
  63. package/corpus/templates/dispatch/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
  64. package/corpus/templates/dispatch/.agents/skills/sharing/SKILL.md +21 -0
  65. package/corpus/templates/factory/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
  66. package/corpus/templates/factory/.agents/skills/sharing/SKILL.md +21 -0
  67. package/corpus/templates/forms/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
  68. package/corpus/templates/forms/.agents/skills/sharing/SKILL.md +21 -0
  69. package/corpus/templates/macros/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
  70. package/corpus/templates/macros/.agents/skills/sharing/SKILL.md +21 -0
  71. package/corpus/templates/mail/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
  72. package/corpus/templates/mail/.agents/skills/sharing/SKILL.md +21 -0
  73. package/corpus/templates/mail/app/components/layout/AppLayout.tsx +6 -1
  74. package/corpus/templates/plan/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
  75. package/corpus/templates/plan/.agents/skills/sharing/SKILL.md +21 -0
  76. package/corpus/templates/plan/app/pages/PlansPage.tsx +25 -30
  77. package/corpus/templates/slides/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
  78. package/corpus/templates/slides/.agents/skills/sharing/SKILL.md +21 -0
  79. package/corpus/templates/slides/app/components/deck/SlideRenderer.tsx +2 -1
  80. package/corpus/templates/slides/app/components/editor/ShareDialog.tsx +124 -180
  81. package/corpus/templates/slides/app/components/onboarding/FirstDeckOnboardingFlow.tsx +1 -0
  82. package/corpus/templates/slides/app/global.css +99 -3
  83. package/corpus/templates/slides/app/i18n/en-US.ts +1 -0
  84. package/corpus/templates/tasks/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
  85. package/corpus/templates/tasks/.agents/skills/sharing/SKILL.md +21 -0
  86. package/dist/chat-threads/schema.d.ts +1 -1
  87. package/dist/cli/code-agent-executor.js +318 -0
  88. package/dist/client/AgentPanel.d.ts +13 -1
  89. package/dist/client/AgentPanel.js +41 -3
  90. package/dist/client/AssistantChat.d.ts +9 -1
  91. package/dist/client/AssistantChat.js +26 -13
  92. package/dist/client/MultiTabAssistantChat.js +18 -5
  93. package/dist/client/agent-chat.d.ts +8 -0
  94. package/dist/client/agent-chat.js +15 -0
  95. package/dist/client/app-chat-sidebar.d.ts +23 -0
  96. package/dist/client/app-chat-sidebar.js +53 -0
  97. package/dist/client/app-providers.js +31 -2
  98. package/dist/client/frame-protocol.d.ts +20 -2
  99. package/dist/client/hooks/index.d.ts +1 -0
  100. package/dist/client/hooks/index.js +1 -0
  101. package/dist/client/sharing/AgentShareSection.d.ts +8 -0
  102. package/dist/client/sharing/AgentShareSection.js +50 -0
  103. package/dist/client/sharing/ShareButton.js +2 -1
  104. package/dist/client/sharing/ShareDialog.d.ts +2 -2
  105. package/dist/client/sharing/ShareDialog.js +21 -29
  106. package/dist/client/sharing/index.d.ts +1 -0
  107. package/dist/client/sharing/index.js +1 -0
  108. package/dist/client/sharing/useShareButtonController.d.ts +1 -0
  109. package/dist/client/sharing/useShareDialogController.d.ts +3 -0
  110. package/dist/client/sharing/useShareDialogController.js +2 -1
  111. package/dist/client/theme.d.ts +21 -0
  112. package/dist/client/theme.js +60 -0
  113. package/dist/client/ui/index.d.ts +1 -1
  114. package/dist/client/ui/index.js +1 -1
  115. package/dist/client/use-session.js +23 -0
  116. package/dist/collab/awareness.d.ts +2 -2
  117. package/dist/collab/routes.d.ts +1 -1
  118. package/dist/collab/struct-routes.d.ts +1 -1
  119. package/dist/dashboard-storage/schema.d.ts +1 -1
  120. package/dist/data-programs/schema.d.ts +1 -1
  121. package/dist/extensions/schema.d.ts +1 -1
  122. package/dist/localization/core-messages/ar-SA.js +6 -0
  123. package/dist/localization/core-messages/de-DE.js +6 -0
  124. package/dist/localization/core-messages/en-US.d.ts +6 -0
  125. package/dist/localization/core-messages/en-US.js +6 -0
  126. package/dist/localization/core-messages/es-ES.js +6 -0
  127. package/dist/localization/core-messages/fr-FR.js +6 -0
  128. package/dist/localization/core-messages/hi-IN.js +6 -0
  129. package/dist/localization/core-messages/ja-JP.js +6 -0
  130. package/dist/localization/core-messages/ko-KR.js +6 -0
  131. package/dist/localization/core-messages/pt-BR.js +6 -0
  132. package/dist/localization/core-messages/zh-CN.js +6 -0
  133. package/dist/localization/core-messages/zh-TW.js +6 -0
  134. package/dist/localization/core-messages.d.ts +6 -0
  135. package/dist/localization/default-messages.d.ts +1 -0
  136. package/dist/localization/default-messages.js +1 -0
  137. package/dist/notifications/routes.d.ts +3 -3
  138. package/dist/observability/routes.d.ts +5 -5
  139. package/dist/provider-api/actions/custom-provider-registration.d.ts +14 -14
  140. package/dist/provider-api/actions/provider-api.d.ts +14 -14
  141. package/dist/secrets/routes.d.ts +9 -9
  142. package/dist/server/agent-engine-api-key-route.d.ts +1 -1
  143. package/dist/server/auth.js +8 -5
  144. package/dist/server/identity-sso-store.d.ts +6 -1
  145. package/dist/server/identity-sso-store.js +57 -14
  146. package/dist/server/identity-sso.d.ts +7 -8
  147. package/dist/server/identity-sso.js +15 -12
  148. package/dist/sharing/actions/list-resource-shares.d.ts +2 -0
  149. package/dist/sharing/actions/list-resource-shares.js +1 -0
  150. package/dist/sharing/schema.d.ts +1 -1
  151. package/dist/sharing/schema.js +4 -1
  152. package/dist/templates/chat/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
  153. package/dist/templates/chat/.agents/skills/sharing/SKILL.md +21 -0
  154. package/dist/templates/default/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
  155. package/dist/templates/default/.agents/skills/sharing/SKILL.md +21 -0
  156. package/dist/templates/headless/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
  157. package/dist/templates/workspace-core/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
  158. package/dist/templates/workspace-core/.agents/skills/sharing/SKILL.md +21 -0
  159. package/docs/content/cross-app-sso.mdx +24 -17
  160. package/package.json +3 -3
  161. package/src/templates/chat/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
  162. package/src/templates/chat/.agents/skills/sharing/SKILL.md +21 -0
  163. package/src/templates/default/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
  164. package/src/templates/default/.agents/skills/sharing/SKILL.md +21 -0
  165. package/src/templates/headless/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
  166. package/src/templates/workspace-core/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
  167. package/src/templates/workspace-core/.agents/skills/sharing/SKILL.md +21 -0
@@ -1,10 +1,9 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { ActionButton, Avatar as DesignSystemAvatar, Dialog as DesignSystemDialog, IconButton, Picker, Status, TextArea, } from "@agent-native/toolkit/design-system";
3
3
  import { ShareCopyRow } from "@agent-native/toolkit/sharing";
4
- import { Collapsible, CollapsibleContent, CollapsibleTrigger, } from "@agent-native/toolkit/ui";
5
- import { IconCheck, IconCode, IconCopy, IconChevronDown, IconLink, IconLock, IconMail, IconTrash, IconUsersGroup, IconWorld, } from "@tabler/icons-react";
6
- import { useState } from "react";
4
+ import { IconCheck, IconCopy, IconLock, IconTrash, IconUsersGroup, IconWorld, } from "@tabler/icons-react";
7
5
  import { cn } from "../utils.js";
6
+ import { AgentShareSection } from "./AgentShareSection.js";
8
7
  import { useShareDialogController, } from "./useShareDialogController.js";
9
8
  const BUTTON_BASE = "inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-colors active:!scale-100 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0";
10
9
  const BUTTON_OUTLINE_SM = cn(BUTTON_BASE, "!h-9 !px-3 border border-input bg-background hover:bg-accent hover:text-accent-foreground");
@@ -14,17 +13,12 @@ const VIS_ICONS = {
14
13
  org: IconUsersGroup,
15
14
  public: IconWorld,
16
15
  };
17
- const TAB_ICONS = {
18
- link: IconLink,
19
- invite: IconMail,
20
- embed: IconCode,
21
- };
22
16
  /**
23
17
  * Framework share dialog. Drop into any template via
24
18
  * `<ShareDialog open onClose resourceType resourceId />`. Passing `shareUrl`
25
19
  * lights up a Link tab with a copy field; passing `embedUrl` lights up an
26
- * Embed tab. With neither prop, renders a single Invite + general-access
27
- * panel (Google-Docs-lite).
20
+ * Embed tab. People access stays on the primary sharing surface so the same
21
+ * Google-Docs-style flow works whether or not a link or embed is available.
28
22
  */
29
23
  export function ShareDialog({ open, onClose, resourceType, resourceId, resourceTitle, shareUrl, embedUrl, embedTabContent, linkTabExtras, }) {
30
24
  const controller = useShareDialogController({
@@ -40,39 +34,37 @@ export function ShareDialog({ open, onClose, resourceType, resourceId, resourceT
40
34
  return null;
41
35
  return (_jsxs(DesignSystemDialog, { open: controller.open, onOpenChange: controller.onOpenChange, title: _jsx("span", { className: cn(controller.tabsEnabled
42
36
  ? "sr-only"
43
- : "truncate !text-base !leading-normal !tracking-normal !text-inherit"), title: controller.title, children: controller.title }), closeLabel: controller.labels.close, size: "large", className: "!top-4 !z-[2010] !block !max-h-none !w-[calc(100vw-2rem)] !max-w-lg !translate-y-0 !gap-0 !overflow-visible !rounded-xl !border-border !bg-popover !p-0 !text-popover-foreground !shadow-2xl sm:!top-1/2 sm:!-translate-y-1/2", "aria-label": controller.title, children: [!controller.tabsEnabled && controller.ownerLabel ? (_jsx("div", { className: "px-5 pt-0 pb-3", children: _jsx("div", { className: "truncate text-xs text-muted-foreground", children: controller.ownerLabel }) })) : null, controller.tabsEnabled ? (_jsx("div", { role: "tablist", "aria-label": controller.labels.shareOptions, className: "mx-5 mt-1 flex gap-1 border-b border-border", children: controller.tabs.map((tab) => {
44
- const Icon = TAB_ICONS[tab.value];
45
- return (_jsx(TabTrigger, { active: controller.activeTab === tab.value, onClick: () => controller.setActiveTab(tab.value), icon: _jsx(Icon, { size: 14, strokeWidth: 1.75 }), label: tab.label }, tab.value));
37
+ : "truncate !text-base !leading-normal !tracking-normal !text-inherit"), title: controller.title, children: controller.title }), closeLabel: controller.labels.close, size: "large", className: "!top-4 !z-[2010] !block !max-h-none !w-[calc(100vw-2rem)] !max-w-lg !translate-y-0 !gap-0 !overflow-visible !rounded-xl !border-border !bg-popover !p-0 !text-popover-foreground !shadow-2xl sm:!top-1/2 sm:!-translate-y-1/2", "aria-label": controller.title, children: [!controller.tabsEnabled && controller.ownerLabel ? (_jsx("div", { className: "px-5 pt-0 pb-3", children: _jsx("div", { className: "truncate text-xs text-muted-foreground", children: controller.ownerLabel }) })) : null, controller.tabsEnabled ? (_jsx("div", { role: "tablist", "aria-label": controller.labels.shareOptions, className: "mx-5 mt-1 flex gap-1 rounded-xl bg-muted/70 p-1", children: controller.tabs.map((tab) => {
38
+ return (_jsx(TabTrigger, { active: controller.activeTab === tab.value, onClick: () => controller.setActiveTab(tab.value), label: tab.label }, tab.value));
46
39
  }) })) : null, _jsxs("div", { className: "px-5 py-4", children: [controller.tabsEnabled && controller.activeTab === "link" ? (_jsx(LinkTab, { controller: controller, extras: linkTabExtras })) : null, !controller.tabsEnabled || controller.activeTab === "invite" ? (_jsx(InviteTab, { controller: controller, showVisibility: !controller.tabsEnabled })) : null, controller.tabsEnabled && controller.activeTab === "embed"
47
40
  ? (embedTabContent ?? _jsx(DefaultEmbedBody, { controller: controller }))
48
- : null] })] }));
41
+ : null, _jsx(AgentShareSection, { enabled: controller.agentReadable, resourceType: resourceType, resourceId: resourceId, className: "mt-4" })] })] }));
49
42
  }
50
- function TabTrigger({ active, onClick, icon, label, }) {
51
- return (_jsxs(ActionButton, { type: "button", emphasis: "ghost", "aria-pressed": active, onPress: onClick, className: cn("inline-flex !h-auto items-center gap-1.5 !rounded-none border-b-2 !px-3 !py-2 text-sm font-medium transition-colors hover:!bg-transparent active:!scale-100 focus-visible:!ring-0 focus-visible:!ring-offset-0 [&_svg]:!size-auto", active
52
- ? "border-foreground text-foreground"
53
- : "border-transparent text-muted-foreground hover:text-foreground"), children: [icon, label] }));
43
+ function TabTrigger({ active, onClick, label, }) {
44
+ return (_jsx(ActionButton, { type: "button", emphasis: "ghost", "aria-pressed": active, onPress: onClick, className: cn("min-w-0 flex-1 !rounded-lg !px-3 !py-2 text-sm font-medium transition-colors hover:!bg-background/70 active:!scale-100 focus-visible:!ring-0 focus-visible:!ring-offset-0", active
45
+ ? "bg-background text-foreground shadow-sm ring-1 ring-border"
46
+ : "text-muted-foreground hover:text-foreground"), children: _jsx("span", { className: "block truncate", children: label }) }));
54
47
  }
55
48
  function LinkTab({ controller, extras, }) {
56
49
  const Icon = VIS_ICONS[controller.visibility.value];
57
- return (_jsxs("div", { className: "space-y-3", children: [_jsx(ShareCopyRow, { label: controller.labels.shareLink, value: controller.shareUrl, copyLabel: controller.labels.copy, copiedLabel: "Copied", onCopy: (value) => controller.copy("share-link", value), className: "mb-4" }), _jsxs("div", { children: [_jsx("div", { className: "mb-2 text-xs font-medium text-muted-foreground", children: controller.labels.generalAccess }), _jsxs("div", { className: "flex items-center gap-3", children: [_jsx("span", { "aria-hidden": true, className: "inline-flex h-9 w-9 shrink-0 items-center justify-center rounded-full bg-muted text-muted-foreground", children: _jsx(Icon, { size: 16, strokeWidth: 1.75 }) }), _jsxs("div", { className: "min-w-0 flex-1", children: [_jsx(VisibilitySelect, { controller: controller }), _jsx("div", { className: "sr-only text-xs text-muted-foreground", children: controller.visibility.description })] })] })] }), extras] }));
50
+ return (_jsxs("div", { className: "space-y-3", children: [_jsx(ShareCopyRow, { label: controller.labels.shareLink, value: controller.shareUrl, copyLabel: controller.labels.copy, copiedLabel: controller.labels.copied, onCopy: (value) => controller.copy("share-link", value), className: "mb-4" }), _jsxs("div", { children: [_jsx("div", { className: "mb-2 text-xs font-medium text-muted-foreground", children: controller.labels.generalAccess }), _jsxs("div", { className: "flex items-center gap-3", children: [_jsx("span", { "aria-hidden": true, className: "inline-flex h-9 w-9 shrink-0 items-center justify-center rounded-full bg-muted text-muted-foreground", children: _jsx(Icon, { size: 16, strokeWidth: 1.75 }) }), _jsxs("div", { className: "min-w-0 flex-1", children: [_jsx(VisibilitySelect, { controller: controller }), _jsx("div", { className: "sr-only text-xs text-muted-foreground", children: controller.visibility.description })] })] })] }), _jsx(InviteTab, { controller: controller, showVisibility: false }), extras] }));
58
51
  }
59
52
  function InviteTab({ controller, showVisibility, }) {
60
53
  const Icon = VIS_ICONS[controller.visibility.value];
61
- const [advancedOpen, setAdvancedOpen] = useState(false);
62
- return (_jsxs("div", { className: "space-y-3", children: [_jsxs(Collapsible, { open: advancedOpen, onOpenChange: setAdvancedOpen, className: "overflow-hidden rounded-md border border-border", children: [_jsx(CollapsibleTrigger, { asChild: true, children: _jsxs("button", { type: "button", className: "flex min-h-10 w-full items-center justify-between gap-3 px-3 py-2 text-left text-sm font-medium transition-colors hover:bg-accent focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-inset", children: [_jsx("span", { className: "truncate", children: controller.labels.peopleWithAccess }), _jsx(IconChevronDown, { "aria-hidden": true, size: 16, strokeWidth: 1.8, className: cn("shrink-0 text-muted-foreground transition-transform", advancedOpen && "rotate-180") })] }) }), _jsx(CollapsibleContent, { className: "border-t border-border px-3 py-3", children: _jsxs("div", { className: "space-y-4", children: [controller.canManage ? (_jsxs("div", { className: "space-y-2", children: [_jsxs("div", { className: "flex items-stretch gap-2", children: [_jsx("input", { type: "email", placeholder: controller.labels.addPeopleByEmail, value: controller.invite.email, onChange: (event) => controller.invite.setEmail(event.currentTarget.value), onKeyDown: (event) => {
63
- if (event.key === "Enter")
64
- controller.invite.submit();
65
- }, autoComplete: "off", className: "h-9 min-w-0 flex-1 rounded-md border border-input bg-background px-3 text-sm text-foreground placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 focus:ring-offset-background" }), _jsx(RoleSelect, { controller: controller })] }), controller.invite.showNotifyPeople ? (_jsxs("div", { className: "flex flex-wrap items-center gap-x-3 gap-y-2 text-xs text-muted-foreground", children: [_jsxs("label", { className: "inline-flex items-center gap-2", children: [_jsx("input", { type: "checkbox", checked: controller.invite.notifyPeople, onChange: (event) => controller.invite.setNotifyPeople(event.currentTarget.checked), className: "h-4 w-4 rounded border-input accent-primary" }), controller.labels.notifyPeople] }), controller.invite.notifyPeople ? (_jsx(ActionButton, { type: "button", emphasis: "ghost", "aria-expanded": controller.invite.messageOpen, onPress: () => controller.invite.setMessageOpen(!controller.invite.messageOpen), className: "!h-auto !rounded-sm !px-1 !py-0.5 text-xs font-medium !text-foreground underline decoration-border underline-offset-2 hover:!bg-accent hover:!text-accent-foreground active:!scale-100", children: controller.invite.messageOpen
66
- ? controller.labels.hideMessage
67
- : controller.labels.addMessage })) : null] })) : null, controller.invite.showNotifyPeople &&
68
- controller.invite.notifyPeople &&
69
- controller.invite.messageOpen ? (_jsx(TextArea, { "aria-label": controller.labels.addMessage, placeholder: controller.labels.messagePlaceholder, value: controller.invite.message, onChange: (value) => controller.invite.setMessage(value), maxLength: 500, rows: 3, className: "min-h-20 resize-y text-sm" })) : null] })) : null, _jsxs("div", { children: [_jsx("div", { className: "mb-2 text-sm font-semibold", children: controller.labels.peopleWithAccess }), _jsxs("ul", { className: "m-0 flex list-none flex-col gap-1 p-0", children: [controller.people.map((person) => (_jsx(PersonRow, { person: person, canManage: controller.canManage, removeLabel: controller.labels.remove, onRemove: controller.removeShare }, person.key))), !controller.people.length ? (_jsx("li", { className: "px-1 py-1.5 text-sm text-muted-foreground", children: controller.labels.noAccess })) : null] })] })] }) })] }), showVisibility ? (_jsxs("div", { children: [_jsx("div", { className: "mb-2 text-sm font-semibold", children: controller.labels.generalAccess }), _jsxs("div", { className: "flex items-center gap-3", children: [_jsx("span", { "aria-hidden": true, className: "inline-flex h-9 w-9 shrink-0 items-center justify-center rounded-full bg-muted text-muted-foreground", children: _jsx(Icon, { size: 16, strokeWidth: 1.75 }) }), _jsxs("div", { className: "min-w-0 flex-1", children: [_jsx(VisibilitySelect, { controller: controller }), _jsx("div", { className: "sr-only text-xs text-muted-foreground", children: controller.visibility.description })] })] })] })) : null] }));
54
+ return (_jsxs("div", { className: "space-y-4", children: [showVisibility ? (_jsxs("div", { children: [_jsx("div", { className: "mb-2 text-sm font-semibold", children: controller.labels.generalAccess }), _jsxs("div", { className: "flex items-center gap-3", children: [_jsx("span", { "aria-hidden": true, className: "inline-flex h-9 w-9 shrink-0 items-center justify-center rounded-full bg-muted text-muted-foreground", children: _jsx(Icon, { size: 16, strokeWidth: 1.75 }) }), _jsxs("div", { className: "min-w-0 flex-1", children: [_jsx(VisibilitySelect, { controller: controller }), _jsx("div", { className: "sr-only text-xs text-muted-foreground", children: controller.visibility.description })] })] })] })) : null, _jsxs("div", { className: "space-y-4", children: [_jsx("div", { className: "text-sm font-semibold", children: controller.labels.peopleWithAccess }), controller.canManage ? (_jsxs("div", { className: "space-y-2", children: [_jsxs("div", { className: "flex items-stretch gap-2", children: [_jsx("input", { type: "email", placeholder: controller.labels.addPeopleByEmail, value: controller.invite.email, onChange: (event) => controller.invite.setEmail(event.currentTarget.value), onKeyDown: (event) => {
55
+ if (event.key === "Enter")
56
+ controller.invite.submit();
57
+ }, autoComplete: "off", className: "h-9 min-w-0 flex-1 rounded-md border border-input bg-background px-3 text-sm text-foreground placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 focus:ring-offset-background" }), _jsx(RoleSelect, { controller: controller })] }), controller.invite.showNotifyPeople ? (_jsxs("div", { className: "flex flex-wrap items-center gap-x-3 gap-y-2 text-xs text-muted-foreground", children: [_jsxs("label", { className: "inline-flex items-center gap-2", children: [_jsx("input", { type: "checkbox", checked: controller.invite.notifyPeople, onChange: (event) => controller.invite.setNotifyPeople(event.currentTarget.checked), className: "h-4 w-4 rounded border-input accent-primary" }), controller.labels.notifyPeople] }), controller.invite.notifyPeople ? (_jsx(ActionButton, { type: "button", emphasis: "ghost", "aria-expanded": controller.invite.messageOpen, onPress: () => controller.invite.setMessageOpen(!controller.invite.messageOpen), className: "!h-auto !rounded-sm !px-1 !py-0.5 text-xs font-medium !text-foreground underline decoration-border underline-offset-2 hover:!bg-accent hover:!text-accent-foreground active:!scale-100", children: controller.invite.messageOpen
58
+ ? controller.labels.hideMessage
59
+ : controller.labels.addMessage })) : null] })) : null, controller.invite.showNotifyPeople &&
60
+ controller.invite.notifyPeople &&
61
+ controller.invite.messageOpen ? (_jsx(TextArea, { "aria-label": controller.labels.addMessage, placeholder: controller.labels.messagePlaceholder, value: controller.invite.message, onChange: (value) => controller.invite.setMessage(value), maxLength: 500, rows: 3, className: "min-h-20 resize-y text-sm" })) : null] })) : null, _jsxs("ul", { className: "m-0 flex list-none flex-col gap-1 p-0", children: [controller.people.map((person) => (_jsx(PersonRow, { person: person, canManage: controller.canManage, removeLabel: controller.labels.remove, onRemove: controller.removeShare }, person.key))), !controller.people.length ? (_jsx("li", { className: "px-1 py-1.5 text-sm text-muted-foreground", children: controller.labels.noAccess })) : null] })] })] }));
70
62
  }
71
63
  function PersonRow({ person, canManage, removeLabel, onRemove, }) {
72
64
  return (_jsxs("li", { className: "flex items-center gap-3 px-1 py-1.5 text-sm", children: [_jsx(DesignSystemAvatar, { name: person.label, fallback: person.principalType === "org" ? (_jsx(IconUsersGroup, { size: 14, strokeWidth: 1.75 })) : (person.avatarText), size: "compact", className: "inline-flex h-7 w-7 shrink-0 text-[11px] font-semibold" }), _jsx("span", { className: "flex-1 min-w-0 truncate", children: person.label }), _jsx(Status, { tone: "neutral", size: "compact", className: "border-0 bg-transparent px-0 text-xs text-muted-foreground", children: person.roleLabel }), canManage && person.share ? (_jsx(IconButton, { intent: "danger", emphasis: "ghost", size: "compact", icon: _jsx(IconTrash, { size: 14 }), label: removeLabel, "aria-label": removeLabel, onPress: () => onRemove(person.share), className: cn(BUTTON_GHOST_ICON, "[&_svg]:!size-auto") })) : null] }));
73
65
  }
74
66
  function DefaultEmbedBody({ controller, }) {
75
- return (_jsxs("div", { className: "space-y-3", children: [_jsx(ShareCopyRow, { label: controller.labels.embedUrl, value: controller.embedUrl, copyLabel: controller.labels.copy, copiedLabel: "Copied", onCopy: (value) => controller.copy("embed-url", value) }), _jsx(CopyField, { field: "embed-code", label: controller.labels.embedCode, value: controller.embedCode, controller: controller, multiline: true })] }));
67
+ return (_jsxs("div", { className: "space-y-3", children: [_jsx(ShareCopyRow, { label: controller.labels.embedUrl, value: controller.embedUrl, copyLabel: controller.labels.copy, copiedLabel: controller.labels.copied, onCopy: (value) => controller.copy("embed-url", value) }), _jsx(CopyField, { field: "embed-code", label: controller.labels.embedCode, value: controller.embedCode, controller: controller, multiline: true })] }));
76
68
  }
77
69
  function CopyField({ field, label, value, controller, multiline, }) {
78
70
  const copied = controller.copiedField === field;
@@ -1,3 +1,4 @@
1
+ export { AgentShareSection, type AgentShareSectionProps, } from "./AgentShareSection.js";
1
2
  export { ShareDialog, type ShareDialogProps } from "./ShareDialog.js";
2
3
  export { ShareButton, type ShareButtonProps } from "./ShareButton.js";
3
4
  export { useShareButtonController, type ShareButtonController, type ShareButtonControllerOptions, type ShareButtonOrgMember, type ShareButtonOrgMemberSearch, type ShareButtonRole, type ShareButtonShare, type ShareButtonSharesResponse, type ShareButtonVisibility, } from "./useShareButtonController.js";
@@ -1,3 +1,4 @@
1
+ export { AgentShareSection, } from "./AgentShareSection.js";
1
2
  export { ShareDialog } from "./ShareDialog.js";
2
3
  export { ShareButton } from "./ShareButton.js";
3
4
  export { useShareButtonController, } from "./useShareButtonController.js";
@@ -13,6 +13,7 @@ export interface ShareButtonSharesResponse {
13
13
  orgId: string | null;
14
14
  visibility: ShareButtonVisibility | null;
15
15
  role?: "owner" | ShareButtonRole;
16
+ agentReadable?: boolean;
16
17
  shares: ShareButtonShare[];
17
18
  policy?: {
18
19
  allowPublic: boolean;
@@ -13,6 +13,7 @@ export interface ResourceSharesResponse {
13
13
  orgId: string | null;
14
14
  visibility: ShareVisibility | null;
15
15
  role?: "owner" | ShareRole;
16
+ agentReadable?: boolean;
16
17
  shares: ResourceShare[];
17
18
  policy?: {
18
19
  allowPublic: boolean;
@@ -69,6 +70,7 @@ export interface ShareDialogController {
69
70
  remove: string;
70
71
  noAccess: string;
71
72
  copy: string;
73
+ copied: string;
72
74
  embedUrl: string;
73
75
  embedCode: string;
74
76
  };
@@ -110,5 +112,6 @@ export interface ShareDialogController {
110
112
  error: unknown;
111
113
  refetch: () => unknown;
112
114
  canManage: boolean;
115
+ agentReadable: boolean;
113
116
  }
114
117
  export declare function useShareDialogController({ open, onClose, resourceType, resourceId, resourceTitle, shareUrl, embedUrl, }: ShareDialogControllerOptions): ShareDialogController;
@@ -214,7 +214,6 @@ export function useShareDialogController({ open, onClose, resourceType, resource
214
214
  ...(hasLinkTab
215
215
  ? [{ value: "link", label: t("share.link") }]
216
216
  : []),
217
- { value: "invite", label: t("share.invite") },
218
217
  ...(hasEmbedTab
219
218
  ? [{ value: "embed", label: t("share.embed") }]
220
219
  : []),
@@ -234,6 +233,7 @@ export function useShareDialogController({ open, onClose, resourceType, resource
234
233
  remove: t("share.remove"),
235
234
  noAccess: t("share.noAccess"),
236
235
  copy: t("share.copy"),
236
+ copied: t("share.copied"),
237
237
  embedUrl: t("share.embedUrl"),
238
238
  embedCode: t("share.embedCode"),
239
239
  },
@@ -275,6 +275,7 @@ export function useShareDialogController({ open, onClose, resourceType, resource
275
275
  error: sharesQuery.error ?? mutationError,
276
276
  refetch,
277
277
  canManage,
278
+ agentReadable: data?.agentReadable === true,
278
279
  };
279
280
  }
280
281
  function visibilityOption(visibility, t) {
@@ -1,3 +1,24 @@
1
1
  export type ThemePreference = "light" | "dark" | "system";
2
+ export type ResolvedTheme = "light" | "dark";
3
+ export declare const EMBEDDED_THEME_UPDATE_MESSAGE = "agent-native-theme-update";
4
+ export declare const EMBEDDED_THEME_CHANGE_EVENT = "agent-native:theme-change";
5
+ export interface EmbeddedThemeUpdate {
6
+ type: typeof EMBEDDED_THEME_UPDATE_MESSAGE;
7
+ theme?: ResolvedTheme;
8
+ isDark?: boolean;
9
+ vars?: Record<string, string>;
10
+ }
11
+ export interface NormalizedEmbeddedThemeUpdate {
12
+ theme: ResolvedTheme;
13
+ vars?: Record<string, string>;
14
+ }
15
+ /**
16
+ * Accepts both the current `theme` field and the legacy `isDark` field used by
17
+ * extension iframes. Unknown messages and untrusted CSS variable names fail
18
+ * closed so a cross-window event cannot become an arbitrary style sink.
19
+ */
20
+ export declare function parseEmbeddedThemeUpdate(value: unknown): NormalizedEmbeddedThemeUpdate | null;
21
+ export declare function buildEmbeddedThemeUpdate(theme: ResolvedTheme, vars?: Record<string, string>): EmbeddedThemeUpdate;
22
+ export declare function applyEmbeddedThemeUpdate(root: HTMLElement, update: NormalizedEmbeddedThemeUpdate): void;
2
23
  export declare function getThemeInitScript(defaultTheme?: ThemePreference, enableSystem?: boolean): string;
3
24
  export declare const themeInitScript: string;
@@ -1,4 +1,64 @@
1
+ import { THEME_VAR_NAMES } from "../extensions/theme.js";
1
2
  import { getViteDevRecoveryScript, shouldInlineViteDevRecoveryScript, } from "./vite-dev-recovery-script.js";
3
+ export const EMBEDDED_THEME_UPDATE_MESSAGE = "agent-native-theme-update";
4
+ export const EMBEDDED_THEME_CHANGE_EVENT = "agent-native:theme-change";
5
+ function isRecord(value) {
6
+ return typeof value === "object" && value !== null;
7
+ }
8
+ function readThemeVars(value) {
9
+ if (!isRecord(value))
10
+ return undefined;
11
+ const vars = {};
12
+ for (const [name, rawValue] of Object.entries(value)) {
13
+ if (!THEME_VAR_NAMES.some((candidate) => candidate === name))
14
+ continue;
15
+ if (typeof rawValue === "string")
16
+ vars[name] = rawValue;
17
+ }
18
+ return Object.keys(vars).length > 0 ? vars : undefined;
19
+ }
20
+ /**
21
+ * Accepts both the current `theme` field and the legacy `isDark` field used by
22
+ * extension iframes. Unknown messages and untrusted CSS variable names fail
23
+ * closed so a cross-window event cannot become an arbitrary style sink.
24
+ */
25
+ export function parseEmbeddedThemeUpdate(value) {
26
+ if (!isRecord(value))
27
+ return null;
28
+ if (value.type !== EMBEDDED_THEME_UPDATE_MESSAGE &&
29
+ value.type !== EMBEDDED_THEME_CHANGE_EVENT) {
30
+ return null;
31
+ }
32
+ const theme = value.theme === "light" || value.theme === "dark"
33
+ ? value.theme
34
+ : typeof value.isDark === "boolean"
35
+ ? value.isDark
36
+ ? "dark"
37
+ : "light"
38
+ : null;
39
+ if (!theme)
40
+ return null;
41
+ const vars = readThemeVars(value.vars);
42
+ return vars ? { theme, vars } : { theme };
43
+ }
44
+ export function buildEmbeddedThemeUpdate(theme, vars) {
45
+ return {
46
+ type: EMBEDDED_THEME_UPDATE_MESSAGE,
47
+ theme,
48
+ isDark: theme === "dark",
49
+ ...(vars ? { vars } : {}),
50
+ };
51
+ }
52
+ export function applyEmbeddedThemeUpdate(root, update) {
53
+ const isDark = update.theme === "dark";
54
+ root.classList.toggle("dark", isDark);
55
+ root.classList.toggle("light", !isDark);
56
+ root.setAttribute("data-theme", update.theme);
57
+ root.style.colorScheme = update.theme;
58
+ for (const [name, value] of Object.entries(update.vars ?? {})) {
59
+ root.style.setProperty(name, value);
60
+ }
61
+ }
2
62
  function normalizeDefaultTheme(theme) {
3
63
  if (theme === "light" || theme === "dark" || theme === "system") {
4
64
  return theme;
@@ -13,7 +13,7 @@ export { ClientOnly } from "../ClientOnly.js";
13
13
  export { DefaultSpinner } from "../DefaultSpinner.js";
14
14
  export { RuntimeConfigNotice } from "../RuntimeConfigNotice.js";
15
15
  export { RouteTransitionIndicator, ROUTE_TRANSITION_INDICATOR_DELAY_MS, } from "../RouteTransitionIndicator.js";
16
- export { getThemeInitScript, themeInitScript, type ThemePreference, } from "../theme.js";
16
+ export { applyEmbeddedThemeUpdate, buildEmbeddedThemeUpdate, EMBEDDED_THEME_CHANGE_EVENT, EMBEDDED_THEME_UPDATE_MESSAGE, getThemeInitScript, parseEmbeddedThemeUpdate, themeInitScript, type EmbeddedThemeUpdate, type NormalizedEmbeddedThemeUpdate, type ResolvedTheme, type ThemePreference, } from "../theme.js";
17
17
  export { APPEARANCE_PRESETS, applyAppearance, getStoredAppearance, useAppearance, useAppearanceSync, type AppearancePresetId, } from "../appearance.js";
18
18
  export { AppearancePicker, type AppearancePickerProps, } from "../AppearancePicker.js";
19
19
  export { AgentNativeIcon } from "../components/icons/AgentNativeIcon.js";
@@ -13,7 +13,7 @@ export { ClientOnly } from "../ClientOnly.js";
13
13
  export { DefaultSpinner } from "../DefaultSpinner.js";
14
14
  export { RuntimeConfigNotice } from "../RuntimeConfigNotice.js";
15
15
  export { RouteTransitionIndicator, ROUTE_TRANSITION_INDICATOR_DELAY_MS, } from "../RouteTransitionIndicator.js";
16
- export { getThemeInitScript, themeInitScript, } from "../theme.js";
16
+ export { applyEmbeddedThemeUpdate, buildEmbeddedThemeUpdate, EMBEDDED_THEME_CHANGE_EVENT, EMBEDDED_THEME_UPDATE_MESSAGE, getThemeInitScript, parseEmbeddedThemeUpdate, themeInitScript, } from "../theme.js";
17
17
  export { APPEARANCE_PRESETS, applyAppearance, getStoredAppearance, useAppearance, useAppearanceSync, } from "../appearance.js";
18
18
  export { AppearancePicker, } from "../AppearancePicker.js";
19
19
  export { AgentNativeIcon } from "../components/icons/AgentNativeIcon.js";
@@ -1,6 +1,7 @@
1
1
  import { useCallback, useEffect, useState } from "react";
2
2
  import { setSentryUser, trackSessionStatus } from "./analytics.js";
3
3
  import { fetchAuthSessionStatus, invalidateClientStatusRequest, } from "./client-status-requests.js";
4
+ import { getFrameOrigin, getFramePostMessageTargetOrigin } from "./frame.js";
4
5
  const SESSION_CACHE_TTL_MS = 30_000;
5
6
  const SESSION_RETRY_DELAY_MS = 1_000;
6
7
  const SESSION_MAX_ATTEMPTS = 4;
@@ -34,6 +35,27 @@ function publishSessionIdentity(session) {
34
35
  }
35
36
  trackSessionStatus(Boolean(session));
36
37
  }
38
+ function notifyParentAuthState(status) {
39
+ if (typeof window === "undefined" || window.parent === window)
40
+ return;
41
+ // The frame-origin handshake validates the direct parent before this state
42
+ // crosses the frame boundary. Opaque sandbox frames still require "*".
43
+ if (!getFrameOrigin())
44
+ return;
45
+ const targetOrigin = getFramePostMessageTargetOrigin();
46
+ if (!targetOrigin)
47
+ return;
48
+ try {
49
+ window.parent.postMessage({
50
+ type: "agentNative.authState",
51
+ data: { status },
52
+ }, targetOrigin);
53
+ // coercion-ok: Posting auth state is best-effort when an embedded host is being detached.
54
+ }
55
+ catch {
56
+ // A host may revoke the frame while the session request is settling.
57
+ }
58
+ }
37
59
  function invalidateSessionCache() {
38
60
  sessionGeneration += 1;
39
61
  cachedSession = undefined;
@@ -165,6 +187,7 @@ export function useSession() {
165
187
  setSession(resolved);
166
188
  setError(null);
167
189
  setStatus(resolved ? "authenticated" : "unauthenticated");
190
+ notifyParentAuthState(resolved ? "authenticated" : "unauthenticated");
168
191
  };
169
192
  void resolveSession();
170
193
  return () => {
@@ -62,11 +62,11 @@ export declare const postAwareness: import("h3").EventHandlerWithFetch<import("h
62
62
  error: string;
63
63
  states?: undefined;
64
64
  } | {
65
- error?: undefined;
66
65
  states: {
67
66
  clientId: number;
68
67
  state: string;
69
68
  }[];
69
+ error?: undefined;
70
70
  }>>;
71
71
  /**
72
72
  * GET /_agent-native/collab/:docId/users
@@ -77,9 +77,9 @@ export declare const getActiveUsers: import("h3").EventHandlerWithFetch<import("
77
77
  error: string;
78
78
  users?: undefined;
79
79
  } | {
80
- error?: undefined;
81
80
  users: {
82
81
  clientId: number;
83
82
  lastSeen: number;
84
83
  }[];
84
+ error?: undefined;
85
85
  }>>;
@@ -26,8 +26,8 @@ export declare const getCollabState: import("h3").EventHandlerWithFetch<import("
26
26
  * Body: { update: string (base64), requestSource?: string }
27
27
  */
28
28
  export declare const postCollabUpdate: import("h3").EventHandlerWithFetch<import("h3").EventHandlerRequest, Promise<{
29
- error: string;
30
29
  ok?: undefined;
30
+ error: string;
31
31
  } | {
32
32
  error?: undefined;
33
33
  ok: boolean;
@@ -13,8 +13,8 @@
13
13
  * Body: { json: any, fieldName?: string, type?: "map"|"array", requestSource?: string }
14
14
  */
15
15
  export declare const postCollabJson: import("h3").EventHandlerWithFetch<import("h3").EventHandlerRequest, Promise<{
16
- ok?: undefined;
17
16
  error: string;
17
+ ok?: undefined;
18
18
  } | {
19
19
  error?: undefined;
20
20
  ok: boolean;
@@ -524,7 +524,7 @@ export declare function createDashboardStorageSchema(options?: DashboardStorageS
524
524
  data: string;
525
525
  driverParam: string;
526
526
  notNull: true;
527
- hasDefault: false;
527
+ hasDefault: true;
528
528
  isPrimaryKey: false;
529
529
  isAutoincrement: false;
530
530
  hasRuntimeDefault: false;
@@ -471,7 +471,7 @@ export declare const dataProgramShares: import("drizzle-orm/sqlite-core").SQLite
471
471
  data: string;
472
472
  driverParam: string;
473
473
  notNull: true;
474
- hasDefault: false;
474
+ hasDefault: true;
475
475
  isPrimaryKey: false;
476
476
  isAutoincrement: false;
477
477
  hasRuntimeDefault: false;
@@ -376,7 +376,7 @@ export declare const extensionShares: import("drizzle-orm/sqlite-core").SQLiteTa
376
376
  data: string;
377
377
  driverParam: string;
378
378
  notNull: true;
379
- hasDefault: false;
379
+ hasDefault: true;
380
380
  isPrimaryKey: false;
381
381
  isAutoincrement: false;
382
382
  hasRuntimeDefault: false;
@@ -438,6 +438,12 @@ const messages = {
438
438
  "share.advancedDescription": "تحكّم في كيفية ظهور وصول المؤسسة في نتائج البحث.",
439
439
  "share.copied": "تم النسخ",
440
440
  "share.copy": "نسخ",
441
+ "share.shareWithAgents": "مشاركة مع الوكلاء",
442
+ "share.agentContext": "رابط سياق الوكيل",
443
+ "share.agentContextDescription": "سياق للقراءة فقط لوكيل خارجي.",
444
+ "share.preparingAgentLink": "جارٍ إعداد رابط الوكيل...",
445
+ "share.agentLinkUnavailable": "تعذر إنشاء رابط الوكيل.",
446
+ "share.retryAgentLink": "إعادة المحاولة",
441
447
  "share.editor": "محرر",
442
448
  "share.editorDescription": "يمكنه التعديل",
443
449
  "share.generalAccess": "الوصول العام",
@@ -473,6 +473,12 @@ const messages = {
473
473
  "share.advancedDescription": "Lege fest, wie der Organisationszugriff in der Suche angezeigt wird.",
474
474
  "share.copied": "Kopiert",
475
475
  "share.copy": "Kopieren",
476
+ "share.shareWithAgents": "Mit Agenten teilen",
477
+ "share.agentContext": "Agenten-Kontextlink",
478
+ "share.agentContextDescription": "Schreibgeschützter Kontext für einen externen Agenten.",
479
+ "share.preparingAgentLink": "Agentenlink wird vorbereitet...",
480
+ "share.agentLinkUnavailable": "Der Agentenlink konnte nicht erstellt werden.",
481
+ "share.retryAgentLink": "Erneut versuchen",
476
482
  "share.editor": "Editor",
477
483
  "share.editorDescription": "Kann bearbeiten",
478
484
  "share.generalAccess": "Allgemeiner Zugriff",
@@ -422,6 +422,12 @@ declare const messages: {
422
422
  readonly "share.advancedDescription": "Control how organization access appears in search.";
423
423
  readonly "share.copied": "Copied";
424
424
  readonly "share.copy": "Copy";
425
+ readonly "share.shareWithAgents": "Share with agents";
426
+ readonly "share.agentContext": "Agent context link";
427
+ readonly "share.agentContextDescription": "Read-only context for an external agent.";
428
+ readonly "share.preparingAgentLink": "Preparing agent link...";
429
+ readonly "share.agentLinkUnavailable": "Couldn't create the agent link.";
430
+ readonly "share.retryAgentLink": "Retry";
425
431
  readonly "share.editor": "Editor";
426
432
  readonly "share.editorDescription": "Can edit";
427
433
  readonly "share.generalAccess": "General access";
@@ -422,6 +422,12 @@ const messages = {
422
422
  "share.advancedDescription": "Control how organization access appears in search.",
423
423
  "share.copied": "Copied",
424
424
  "share.copy": "Copy",
425
+ "share.shareWithAgents": "Share with agents",
426
+ "share.agentContext": "Agent context link",
427
+ "share.agentContextDescription": "Read-only context for an external agent.",
428
+ "share.preparingAgentLink": "Preparing agent link...",
429
+ "share.agentLinkUnavailable": "Couldn't create the agent link.",
430
+ "share.retryAgentLink": "Retry",
425
431
  "share.editor": "Editor",
426
432
  "share.editorDescription": "Can edit",
427
433
  "share.generalAccess": "General access",
@@ -480,6 +480,12 @@ const messages = {
480
480
  "share.advancedDescription": "Controla cómo aparece el acceso de la organización en la búsqueda.",
481
481
  "share.copied": "Copiado",
482
482
  "share.copy": "Copiar",
483
+ "share.shareWithAgents": "Compartir con agentes",
484
+ "share.agentContext": "Enlace de contexto del agente",
485
+ "share.agentContextDescription": "Contexto de solo lectura para un agente externo.",
486
+ "share.preparingAgentLink": "Preparando el enlace del agente...",
487
+ "share.agentLinkUnavailable": "No se pudo crear el enlace del agente.",
488
+ "share.retryAgentLink": "Reintentar",
483
489
  "share.editor": "Editor",
484
490
  "share.editorDescription": "Puede editar",
485
491
  "share.generalAccess": "Acceso general",
@@ -480,6 +480,12 @@ const messages = {
480
480
  "share.advancedDescription": "Contrôlez la façon dont l’accès à l’organisation apparaît dans la recherche.",
481
481
  "share.copied": "Copié",
482
482
  "share.copy": "Copier",
483
+ "share.shareWithAgents": "Partager avec des agents",
484
+ "share.agentContext": "Lien de contexte de l'agent",
485
+ "share.agentContextDescription": "Contexte en lecture seule pour un agent externe.",
486
+ "share.preparingAgentLink": "Préparation du lien de l'agent...",
487
+ "share.agentLinkUnavailable": "Impossible de créer le lien de l'agent.",
488
+ "share.retryAgentLink": "Réessayer",
483
489
  "share.editor": "Éditeur",
484
490
  "share.editorDescription": "Peut modifier",
485
491
  "share.generalAccess": "Accès général",
@@ -422,6 +422,12 @@ const messages = {
422
422
  "share.advancedDescription": "नियंत्रित करें कि संगठन का एक्सेस खोज में कैसे दिखाई दे।",
423
423
  "share.copied": "कॉपी किया गया",
424
424
  "share.copy": "कॉपी करें",
425
+ "share.shareWithAgents": "एजेंट्स के साथ साझा करें",
426
+ "share.agentContext": "एजेंट संदर्भ लिंक",
427
+ "share.agentContextDescription": "बाहरी एजेंट के लिए केवल-पठन संदर्भ।",
428
+ "share.preparingAgentLink": "एजेंट लिंक तैयार हो रहा है...",
429
+ "share.agentLinkUnavailable": "एजेंट लिंक नहीं बनाया जा सका।",
430
+ "share.retryAgentLink": "पुनः प्रयास करें",
425
431
  "share.editor": "संपादक",
426
432
  "share.editorDescription": "संपादित कर सकता है",
427
433
  "share.generalAccess": "सामान्य एक्सेस",
@@ -418,6 +418,12 @@ const messages = {
418
418
  "share.advancedDescription": "組織のアクセス権を検索結果に表示する方法を設定します。",
419
419
  "share.copied": "コピーしました",
420
420
  "share.copy": "コピー",
421
+ "share.shareWithAgents": "エージェントと共有",
422
+ "share.agentContext": "エージェントコンテキストリンク",
423
+ "share.agentContextDescription": "外部エージェント用の読み取り専用コンテキスト。",
424
+ "share.preparingAgentLink": "エージェントリンクを準備中...",
425
+ "share.agentLinkUnavailable": "エージェントリンクを作成できませんでした。",
426
+ "share.retryAgentLink": "再試行",
421
427
  "share.editor": "編集者",
422
428
  "share.editorDescription": "編集可能",
423
429
  "share.generalAccess": "一般的なアクセス",
@@ -418,6 +418,12 @@ const messages = {
418
418
  "share.advancedDescription": "조직 접근 권한이 검색 결과에 표시되는 방식을 제어합니다.",
419
419
  "share.copied": "복사됨",
420
420
  "share.copy": "복사",
421
+ "share.shareWithAgents": "에이전트와 공유",
422
+ "share.agentContext": "에이전트 컨텍스트 링크",
423
+ "share.agentContextDescription": "외부 에이전트를 위한 읽기 전용 컨텍스트입니다.",
424
+ "share.preparingAgentLink": "에이전트 링크 준비 중...",
425
+ "share.agentLinkUnavailable": "에이전트 링크를 만들 수 없습니다.",
426
+ "share.retryAgentLink": "다시 시도",
421
427
  "share.editor": "편집자",
422
428
  "share.editorDescription": "편집 가능",
423
429
  "share.generalAccess": "일반 접근 권한",
@@ -480,6 +480,12 @@ const messages = {
480
480
  "share.advancedDescription": "Controle como o acesso à organização aparece na pesquisa.",
481
481
  "share.copied": "Copiado",
482
482
  "share.copy": "Copiar",
483
+ "share.shareWithAgents": "Compartilhar com agentes",
484
+ "share.agentContext": "Link de contexto do agente",
485
+ "share.agentContextDescription": "Contexto somente leitura para um agente externo.",
486
+ "share.preparingAgentLink": "Preparando link do agente...",
487
+ "share.agentLinkUnavailable": "Não foi possível criar o link do agente.",
488
+ "share.retryAgentLink": "Tentar novamente",
483
489
  "share.editor": "Editor",
484
490
  "share.editorDescription": "Pode editar",
485
491
  "share.generalAccess": "Acesso geral",
@@ -418,6 +418,12 @@ const messages = {
418
418
  "share.advancedDescription": "控制组织访问权限在搜索结果中的显示方式。",
419
419
  "share.copied": "已复制",
420
420
  "share.copy": "复制",
421
+ "share.shareWithAgents": "与代理共享",
422
+ "share.agentContext": "代理上下文链接",
423
+ "share.agentContextDescription": "供外部代理使用的只读上下文。",
424
+ "share.preparingAgentLink": "正在准备代理链接...",
425
+ "share.agentLinkUnavailable": "无法创建代理链接。",
426
+ "share.retryAgentLink": "重试",
421
427
  "share.editor": "编辑者",
422
428
  "share.editorDescription": "可以编辑",
423
429
  "share.generalAccess": "常规访问权限",
@@ -418,6 +418,12 @@ const messages = {
418
418
  "share.advancedDescription": "控制組織存取權在搜尋結果中的顯示方式。",
419
419
  "share.copied": "已複製",
420
420
  "share.copy": "複製",
421
+ "share.shareWithAgents": "與代理分享",
422
+ "share.agentContext": "代理上下文連結",
423
+ "share.agentContextDescription": "供外部代理使用的唯讀上下文。",
424
+ "share.preparingAgentLink": "正在準備代理連結...",
425
+ "share.agentLinkUnavailable": "無法建立代理連結。",
426
+ "share.retryAgentLink": "重試",
421
427
  "share.editor": "編輯者",
422
428
  "share.editorDescription": "可以編輯",
423
429
  "share.generalAccess": "一般存取權",
@@ -424,6 +424,12 @@ export declare const englishAgentChatMessages: {
424
424
  readonly "share.advancedDescription": "Control how organization access appears in search.";
425
425
  readonly "share.copied": "Copied";
426
426
  readonly "share.copy": "Copy";
427
+ readonly "share.shareWithAgents": "Share with agents";
428
+ readonly "share.agentContext": "Agent context link";
429
+ readonly "share.agentContextDescription": "Read-only context for an external agent.";
430
+ readonly "share.preparingAgentLink": "Preparing agent link...";
431
+ readonly "share.agentLinkUnavailable": "Couldn't create the agent link.";
432
+ readonly "share.retryAgentLink": "Retry";
427
433
  readonly "share.editor": "Editor";
428
434
  readonly "share.editorDescription": "Can edit";
429
435
  readonly "share.generalAccess": "General access";
@@ -693,6 +693,7 @@ declare const messages: {
693
693
  embedUrl: string;
694
694
  embedCode: string;
695
695
  copy: string;
696
+ copied: string;
696
697
  role: string;
697
698
  private: string;
698
699
  privateDescription: string;