@agent-native/core 0.10.0 → 0.11.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 (129) hide show
  1. package/dist/a2a/caller-auth.d.ts +12 -0
  2. package/dist/a2a/caller-auth.d.ts.map +1 -0
  3. package/dist/a2a/caller-auth.js +54 -0
  4. package/dist/a2a/caller-auth.js.map +1 -0
  5. package/dist/action.d.ts +17 -0
  6. package/dist/action.d.ts.map +1 -1
  7. package/dist/action.js +22 -0
  8. package/dist/action.js.map +1 -1
  9. package/dist/agent/production-agent.d.ts.map +1 -1
  10. package/dist/agent/production-agent.js +32 -19
  11. package/dist/agent/production-agent.js.map +1 -1
  12. package/dist/client/AgentPanel.d.ts.map +1 -1
  13. package/dist/client/AgentPanel.js +9 -46
  14. package/dist/client/AgentPanel.js.map +1 -1
  15. package/dist/client/AssistantChat.d.ts.map +1 -1
  16. package/dist/client/AssistantChat.js +25 -19
  17. package/dist/client/AssistantChat.js.map +1 -1
  18. package/dist/client/builder-frame.d.ts.map +1 -1
  19. package/dist/client/builder-frame.js +10 -3
  20. package/dist/client/builder-frame.js.map +1 -1
  21. package/dist/client/components/ui/dropdown-menu.d.ts +28 -0
  22. package/dist/client/components/ui/dropdown-menu.d.ts.map +1 -0
  23. package/dist/client/components/ui/dropdown-menu.js +34 -0
  24. package/dist/client/components/ui/dropdown-menu.js.map +1 -0
  25. package/dist/client/composer/TiptapComposer.js +1 -1
  26. package/dist/client/composer/TiptapComposer.js.map +1 -1
  27. package/dist/client/extensions/EmbeddedExtension.d.ts.map +1 -1
  28. package/dist/client/extensions/EmbeddedExtension.js +2 -0
  29. package/dist/client/extensions/EmbeddedExtension.js.map +1 -1
  30. package/dist/client/extensions/ExtensionSlot.js +14 -1
  31. package/dist/client/extensions/ExtensionSlot.js.map +1 -1
  32. package/dist/client/extensions/ExtensionViewer.d.ts.map +1 -1
  33. package/dist/client/extensions/ExtensionViewer.js +2 -0
  34. package/dist/client/extensions/ExtensionViewer.js.map +1 -1
  35. package/dist/client/extensions/ExtensionsListPage.d.ts.map +1 -1
  36. package/dist/client/extensions/ExtensionsListPage.js +2 -2
  37. package/dist/client/extensions/ExtensionsListPage.js.map +1 -1
  38. package/dist/client/extensions/ExtensionsSidebarSection.d.ts.map +1 -1
  39. package/dist/client/extensions/ExtensionsSidebarSection.js +6 -17
  40. package/dist/client/extensions/ExtensionsSidebarSection.js.map +1 -1
  41. package/dist/client/extensions/iframe-bridge.d.ts.map +1 -1
  42. package/dist/client/extensions/iframe-bridge.js +5 -8
  43. package/dist/client/extensions/iframe-bridge.js.map +1 -1
  44. package/dist/client/org/OrgSwitcher.d.ts +7 -1
  45. package/dist/client/org/OrgSwitcher.d.ts.map +1 -1
  46. package/dist/client/org/OrgSwitcher.js +8 -3
  47. package/dist/client/org/OrgSwitcher.js.map +1 -1
  48. package/dist/client/org/TeamPage.d.ts.map +1 -1
  49. package/dist/client/org/TeamPage.js +153 -20
  50. package/dist/client/org/TeamPage.js.map +1 -1
  51. package/dist/client/org/hooks.d.ts +29 -1
  52. package/dist/client/org/hooks.d.ts.map +1 -1
  53. package/dist/client/org/hooks.js +39 -2
  54. package/dist/client/org/hooks.js.map +1 -1
  55. package/dist/client/org/index.d.ts +2 -1
  56. package/dist/client/org/index.d.ts.map +1 -1
  57. package/dist/client/org/index.js +1 -1
  58. package/dist/client/org/index.js.map +1 -1
  59. package/dist/client/resources/ResourceTree.d.ts.map +1 -1
  60. package/dist/client/resources/ResourceTree.js +11 -3
  61. package/dist/client/resources/ResourceTree.js.map +1 -1
  62. package/dist/client/resources/ResourcesPanel.d.ts.map +1 -1
  63. package/dist/client/resources/ResourcesPanel.js +21 -5
  64. package/dist/client/resources/ResourcesPanel.js.map +1 -1
  65. package/dist/client/settings/SettingsPanel.d.ts.map +1 -1
  66. package/dist/client/settings/SettingsPanel.js +39 -3
  67. package/dist/client/settings/SettingsPanel.js.map +1 -1
  68. package/dist/client/sharing/ShareButton.d.ts.map +1 -1
  69. package/dist/client/sharing/ShareButton.js +58 -21
  70. package/dist/client/sharing/ShareButton.js.map +1 -1
  71. package/dist/client/use-action.d.ts.map +1 -1
  72. package/dist/client/use-action.js +1 -0
  73. package/dist/client/use-action.js.map +1 -1
  74. package/dist/deploy/build.d.ts.map +1 -1
  75. package/dist/deploy/build.js +20 -49
  76. package/dist/deploy/build.js.map +1 -1
  77. package/dist/index.browser.d.ts +1 -1
  78. package/dist/index.browser.d.ts.map +1 -1
  79. package/dist/index.browser.js +1 -1
  80. package/dist/index.browser.js.map +1 -1
  81. package/dist/index.d.ts +1 -1
  82. package/dist/index.d.ts.map +1 -1
  83. package/dist/index.js +1 -1
  84. package/dist/index.js.map +1 -1
  85. package/dist/org/accept-pending.d.ts.map +1 -1
  86. package/dist/org/accept-pending.js +5 -3
  87. package/dist/org/accept-pending.js.map +1 -1
  88. package/dist/org/free-email-providers.d.ts +18 -0
  89. package/dist/org/free-email-providers.d.ts.map +1 -0
  90. package/dist/org/free-email-providers.js +124 -0
  91. package/dist/org/free-email-providers.js.map +1 -0
  92. package/dist/org/handlers.d.ts +29 -5
  93. package/dist/org/handlers.d.ts.map +1 -1
  94. package/dist/org/handlers.js +178 -37
  95. package/dist/org/handlers.js.map +1 -1
  96. package/dist/org/index.d.ts +2 -1
  97. package/dist/org/index.d.ts.map +1 -1
  98. package/dist/org/index.js +2 -1
  99. package/dist/org/index.js.map +1 -1
  100. package/dist/org/migrations.d.ts.map +1 -1
  101. package/dist/org/migrations.js +4 -0
  102. package/dist/org/migrations.js.map +1 -1
  103. package/dist/org/plugin.d.ts.map +1 -1
  104. package/dist/org/plugin.js +13 -4
  105. package/dist/org/plugin.js.map +1 -1
  106. package/dist/org/schema.d.ts +19 -0
  107. package/dist/org/schema.d.ts.map +1 -1
  108. package/dist/org/schema.js +1 -0
  109. package/dist/org/schema.js.map +1 -1
  110. package/dist/org/types.d.ts +1 -0
  111. package/dist/org/types.d.ts.map +1 -1
  112. package/dist/org/types.js.map +1 -1
  113. package/dist/resources/metadata.d.ts +1 -0
  114. package/dist/resources/metadata.d.ts.map +1 -1
  115. package/dist/resources/metadata.js +13 -3
  116. package/dist/resources/metadata.js.map +1 -1
  117. package/dist/resources/store.d.ts.map +1 -1
  118. package/dist/resources/store.js +44 -6
  119. package/dist/resources/store.js.map +1 -1
  120. package/dist/server/action-routes.d.ts.map +1 -1
  121. package/dist/server/action-routes.js +1 -0
  122. package/dist/server/action-routes.js.map +1 -1
  123. package/dist/server/agent-chat-plugin.d.ts.map +1 -1
  124. package/dist/server/agent-chat-plugin.js +38 -11
  125. package/dist/server/agent-chat-plugin.js.map +1 -1
  126. package/dist/server/google-oauth.d.ts.map +1 -1
  127. package/dist/server/google-oauth.js +10 -3
  128. package/dist/server/google-oauth.js.map +1 -1
  129. package/package.json +2 -1
@@ -1 +1 @@
1
- {"version":3,"file":"AssistantChat.d.ts","sourceRoot":"","sources":["../../src/client/AssistantChat.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"AssistantChat.d.ts","sourceRoot":"","sources":["../../src/client/AssistantChat.tsx"],"names":[],"mappings":"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"}
@@ -1,5 +1,4 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
- import { createPortal } from "react-dom";
3
2
  import React, { useState, useRef, useEffect, useCallback, useMemo, forwardRef, useImperativeHandle, } from "react";
4
3
  import { AssistantRuntimeProvider, useLocalRuntime, useThreadRuntime, useThread, useAui, useComposer, useMessageRuntime, ThreadPrimitive, ComposerPrimitive, MessagePrimitive, } from "@assistant-ui/react";
5
4
  import { SimpleImageAttachmentAdapter, SimpleTextAttachmentAdapter, CompositeAttachmentAdapter, } from "@assistant-ui/react";
@@ -14,6 +13,7 @@ import { AgentTaskCard } from "./AgentTaskCard.js";
14
13
  import { ConnectBuilderCard } from "./ConnectBuilderCard.js";
15
14
  import { useBuilderConnectFlow } from "./settings/useBuilderStatus.js";
16
15
  import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, } from "./components/ui/tooltip.js";
16
+ import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger, } from "./components/ui/dropdown-menu.js";
17
17
  import { IframeEmbed, parseEmbedBody } from "./IframeEmbed.js";
18
18
  import { useDevMode } from "./use-dev-mode.js";
19
19
  import { agentNativePath } from "./api-path.js";
@@ -624,11 +624,9 @@ const CheckpointContext = React.createContext(null);
624
624
  const MessageActionsContext = React.createContext(null);
625
625
  function MessageActionsMenu({ showRevert, onRevert, } = {}) {
626
626
  const [open, setOpen] = useState(false);
627
- const [menuPos, setMenuPos] = useState(null);
628
627
  const [copied, setCopied] = useState(null);
629
628
  const messageRuntime = useMessageRuntime();
630
629
  const actionsCtx = React.useContext(MessageActionsContext);
631
- const buttonRef = useRef(null);
632
630
  const handleCopyMessage = useCallback(() => {
633
631
  const m = messageRuntime.getState();
634
632
  const text = m.content
@@ -670,16 +668,13 @@ function MessageActionsMenu({ showRevert, onRevert, } = {}) {
670
668
  setOpen(false);
671
669
  onRevert?.();
672
670
  }, [onRevert]);
673
- const handleToggle = useCallback(() => {
674
- if (!open && buttonRef.current) {
675
- const rect = buttonRef.current.getBoundingClientRect();
676
- setMenuPos({ top: rect.bottom + 4, left: rect.left });
677
- }
678
- setOpen((v) => !v);
679
- }, [open]);
680
- return (_jsxs("div", { className: "relative", children: [_jsx("button", { ref: buttonRef, onClick: handleToggle, className: cn("flex h-6 w-6 items-center justify-center rounded-md text-muted-foreground/70 hover:bg-accent hover:text-foreground", open && "bg-accent text-foreground"), children: _jsx(IconDots, { className: "h-3.5 w-3.5" }) }), open &&
681
- menuPos &&
682
- createPortal(_jsxs(_Fragment, { children: [_jsx("div", { className: "fixed inset-0", style: { zIndex: 9998 }, onClick: () => setOpen(false) }), _jsxs("div", { className: "fixed w-44 rounded-md border border-border bg-popover py-1 shadow-lg", style: { top: menuPos.top, left: menuPos.left, zIndex: 9999 }, children: [actionsCtx?.onForkChat && (_jsxs("button", { className: "flex w-full items-center gap-2 px-3 py-1.5 text-xs text-foreground hover:bg-accent", onClick: handleForkChat, children: [_jsx(IconGitFork, { className: "h-3.5 w-3.5" }), "Fork Chat"] })), _jsxs("button", { className: "flex w-full items-center gap-2 px-3 py-1.5 text-xs text-foreground hover:bg-accent", onClick: handleCopyMessage, children: [copied === "message" ? (_jsx(IconCheck, { className: "h-3.5 w-3.5" })) : (_jsx(IconCopy, { className: "h-3.5 w-3.5" })), copied === "message" ? "Copied!" : "Copy Message"] }), _jsxs("button", { className: "flex w-full items-center gap-2 px-3 py-1.5 text-xs text-foreground hover:bg-accent", onClick: handleCopyRequestId, children: [copied === "id" ? (_jsx(IconCheck, { className: "h-3.5 w-3.5" })) : (_jsx(IconId, { className: "h-3.5 w-3.5" })), copied === "id" ? "Copied!" : "Copy Request ID"] }), showRevert && (_jsxs("button", { className: "flex w-full items-center gap-2 px-3 py-1.5 text-xs text-foreground hover:bg-accent", onClick: handleRevert, children: [_jsx(IconArrowBackUp, { className: "h-3.5 w-3.5" }), "Revert to here"] }))] })] }), document.body)] }));
671
+ return (_jsxs(DropdownMenu, { open: open, onOpenChange: setOpen, children: [_jsx(DropdownMenuTrigger, { asChild: true, children: _jsx("button", { className: cn("flex h-6 w-6 items-center justify-center rounded-md text-muted-foreground/70 hover:bg-accent hover:text-foreground", open && "bg-accent text-foreground"), children: _jsx(IconDots, { className: "h-3.5 w-3.5" }) }) }), _jsxs(DropdownMenuContent, { align: "start", sideOffset: 4, className: "w-44", children: [actionsCtx?.onForkChat && (_jsxs(DropdownMenuItem, { onSelect: handleForkChat, children: [_jsx(IconGitFork, { className: "h-3.5 w-3.5" }), "Fork Chat"] })), _jsxs(DropdownMenuItem, { onSelect: (e) => {
672
+ e.preventDefault();
673
+ handleCopyMessage();
674
+ }, children: [copied === "message" ? (_jsx(IconCheck, { className: "h-3.5 w-3.5" })) : (_jsx(IconCopy, { className: "h-3.5 w-3.5" })), copied === "message" ? "Copied!" : "Copy Message"] }), _jsxs(DropdownMenuItem, { onSelect: (e) => {
675
+ e.preventDefault();
676
+ handleCopyRequestId();
677
+ }, children: [copied === "id" ? (_jsx(IconCheck, { className: "h-3.5 w-3.5" })) : (_jsx(IconId, { className: "h-3.5 w-3.5" })), copied === "id" ? "Copied!" : "Copy Request ID"] }), showRevert && (_jsxs(DropdownMenuItem, { onSelect: handleRevert, children: [_jsx(IconArrowBackUp, { className: "h-3.5 w-3.5" }), "Revert to here"] }))] })] }));
683
678
  }
684
679
  function AssistantMessage() {
685
680
  const [restoreState, setRestoreState] = useState("idle");
@@ -1634,23 +1629,34 @@ const AssistantChatInner = forwardRef(function AssistantChatInner({ emptyStateTe
1634
1629
  setShowScrollToBottom(false);
1635
1630
  }
1636
1631
  }, []);
1632
+ const scrollToBottomAfterPaint = useCallback(() => {
1633
+ scrollToBottom();
1634
+ requestAnimationFrame(() => {
1635
+ scrollToBottom();
1636
+ requestAnimationFrame(scrollToBottom);
1637
+ });
1638
+ setTimeout(scrollToBottom, 80);
1639
+ }, [scrollToBottom]);
1637
1640
  // Scroll to bottom when a restored thread finishes loading
1638
1641
  const wasRestoringRef = useRef(isRestoring);
1639
1642
  useEffect(() => {
1640
1643
  if (wasRestoringRef.current && !isRestoring) {
1641
- requestAnimationFrame(() => {
1642
- scrollToBottom();
1643
- });
1644
+ scrollToBottomAfterPaint();
1644
1645
  }
1645
1646
  wasRestoringRef.current = isRestoring;
1646
- }, [isRestoring, scrollToBottom]);
1647
+ }, [isRestoring, scrollToBottomAfterPaint]);
1647
1648
  // Auto-scroll on new messages or queued messages (only if near bottom)
1648
1649
  useEffect(() => {
1649
1650
  const el = scrollRef.current;
1650
1651
  if (el && isNearBottomRef.current) {
1651
- el.scrollTop = el.scrollHeight;
1652
+ scrollToBottomAfterPaint();
1653
+ }
1654
+ }, [messages, queuedMessages, scrollToBottomAfterPaint]);
1655
+ useEffect(() => {
1656
+ if (!isRunning && isNearBottomRef.current) {
1657
+ scrollToBottomAfterPaint();
1652
1658
  }
1653
- }, [messages, queuedMessages]);
1659
+ }, [isRunning, scrollToBottomAfterPaint]);
1654
1660
  // Continuous auto-scroll while streaming (only if near bottom)
1655
1661
  useEffect(() => {
1656
1662
  if (!isRunning)