@agent-native/core 0.76.8 → 0.76.10

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 (55) hide show
  1. package/corpus/README.md +1 -1
  2. package/corpus/core/CHANGELOG.md +48 -0
  3. package/corpus/core/package.json +1 -1
  4. package/corpus/core/scripts/generate-og-font-data.mjs +9 -5
  5. package/corpus/core/src/agent/run-store.ts +21 -0
  6. package/corpus/core/src/client/AgentPanel.tsx +70 -1
  7. package/corpus/core/src/client/AssistantChat.tsx +1 -3
  8. package/corpus/core/src/client/MultiTabAssistantChat.tsx +0 -62
  9. package/corpus/core/src/client/composer/TiptapComposer.tsx +6 -13
  10. package/corpus/core/src/server/agent-chat-plugin.ts +26 -0
  11. package/corpus/core/src/server/og-fonts-data.ts +7 -4
  12. package/corpus/core/src/server/og-fonts.ts +10 -3
  13. package/corpus/core/src/server/social-og-image.ts +45 -6
  14. package/corpus/templates/analytics/app/components/dashboard/SqlChart.tsx +199 -19
  15. package/corpus/templates/analytics/app/pages/adhoc/AdhocRouter.tsx +1 -21
  16. package/corpus/templates/analytics/app/pages/adhoc/DashboardSkeleton.tsx +35 -0
  17. package/corpus/templates/analytics/app/pages/adhoc/explorer-dashboard/index.tsx +3 -23
  18. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/index.tsx +3 -26
  19. package/corpus/templates/analytics/changelog/2026-06-24-daily-dashboard-charts-now-use-local-day-buckets-and-show-th.md +6 -0
  20. package/corpus/templates/analytics/changelog/2026-06-24-dashboard-loading-placeholders-now-span-the-available-page-w.md +6 -0
  21. package/corpus/templates/analytics/changelog/2026-06-24-first-party-dashboard-dates-now-align-to-pacific-time-for-da.md +6 -0
  22. package/corpus/templates/analytics/server/lib/first-party-metric-catalog.ts +19 -7
  23. package/dist/agent/run-store.d.ts +11 -0
  24. package/dist/agent/run-store.d.ts.map +1 -1
  25. package/dist/agent/run-store.js +20 -0
  26. package/dist/agent/run-store.js.map +1 -1
  27. package/dist/client/AgentPanel.d.ts +5 -1
  28. package/dist/client/AgentPanel.d.ts.map +1 -1
  29. package/dist/client/AgentPanel.js +23 -4
  30. package/dist/client/AgentPanel.js.map +1 -1
  31. package/dist/client/AssistantChat.d.ts +1 -3
  32. package/dist/client/AssistantChat.d.ts.map +1 -1
  33. package/dist/client/AssistantChat.js.map +1 -1
  34. package/dist/client/MultiTabAssistantChat.d.ts.map +1 -1
  35. package/dist/client/MultiTabAssistantChat.js +1 -17
  36. package/dist/client/MultiTabAssistantChat.js.map +1 -1
  37. package/dist/client/composer/TiptapComposer.d.ts +4 -0
  38. package/dist/client/composer/TiptapComposer.d.ts.map +1 -1
  39. package/dist/client/composer/TiptapComposer.js +5 -9
  40. package/dist/client/composer/TiptapComposer.js.map +1 -1
  41. package/dist/server/agent-chat-plugin.d.ts.map +1 -1
  42. package/dist/server/agent-chat-plugin.js +26 -0
  43. package/dist/server/agent-chat-plugin.js.map +1 -1
  44. package/dist/server/og-fonts-data.d.ts +1 -0
  45. package/dist/server/og-fonts-data.d.ts.map +1 -1
  46. package/dist/server/og-fonts-data.js +5 -4
  47. package/dist/server/og-fonts-data.js.map +1 -1
  48. package/dist/server/og-fonts.d.ts +1 -0
  49. package/dist/server/og-fonts.d.ts.map +1 -1
  50. package/dist/server/og-fonts.js +10 -4
  51. package/dist/server/og-fonts.js.map +1 -1
  52. package/dist/server/social-og-image.d.ts.map +1 -1
  53. package/dist/server/social-og-image.js +33 -6
  54. package/dist/server/social-og-image.js.map +1 -1
  55. package/package.json +1 -1
@@ -179,6 +179,11 @@ export function shouldShowAgentPanelChatTabBar(tabs, activeTabId) {
179
179
  const { hasSubTabs, mainTabs } = getAgentPanelChatTabGroups(tabs, activeTabId);
180
180
  return mainTabs.length > 1 || hasSubTabs;
181
181
  }
182
+ export function shouldShowAgentPanelPageNewChatButton(tabs, activeTabId, activeTabMessageCount) {
183
+ const activeTab = tabs.find((tab) => tab.id === activeTabId);
184
+ return (Boolean(activeTabId) &&
185
+ (activeTabMessageCount > 0 || activeTab?.status === "running"));
186
+ }
182
187
  export function shouldShowAgentPanelCliTabBar(cliTabs) {
183
188
  return cliTabs.length > 1;
184
189
  }
@@ -298,7 +303,7 @@ function CodeAccessUnavailablePanel({ title, description, ctaLabel, ctaHref, sec
298
303
  });
299
304
  }, className: "inline-flex items-center gap-1.5 rounded-md border border-border bg-background px-3 py-1.5 text-xs font-medium text-foreground hover:bg-accent", children: [secondaryCtaLabel, _jsx(IconExternalLink, { className: "h-3 w-3" })] })] })] }));
300
305
  }
301
- function AgentPanelInner({ defaultMode = "chat", className, style, apiUrl, emptyStateText, emptyStateAddon, suggestions, dynamicSuggestions, showHeader = true, onCollapse, isFullscreen, onToggleFullscreen, devAppUrl, storageKey, restoreActiveThread = true, scope, browserTabId, threadUrlSync, chatNotice, showTabBar = true, codeAccess, ...assistantChatProps }) {
306
+ function AgentPanelInner({ defaultMode = "chat", className, style, apiUrl, emptyStateText, emptyStateAddon, suggestions, dynamicSuggestions, showHeader = true, onCollapse, isFullscreen, onToggleFullscreen, devAppUrl, storageKey, restoreActiveThread = true, scope, browserTabId, threadUrlSync, chatNotice, showTabBar = true, showPageNewChatButton = false, codeAccess, ...assistantChatProps }) {
302
307
  const t = useT();
303
308
  const mounted = useClientOnly();
304
309
  const keyPrefix = storageKey ? `:${storageKey}` : "";
@@ -553,6 +558,14 @@ function AgentPanelInner({ defaultMode = "chat", className, style, apiUrl, empty
553
558
  switchMode,
554
559
  t,
555
560
  ]);
561
+ const renderPageChatOverlay = useCallback(({ activeTabId, activeTabMessageCount, addTab, tabs, }) => {
562
+ if (!shouldShowAgentPanelPageNewChatButton(tabs, activeTabId, activeTabMessageCount)) {
563
+ return null;
564
+ }
565
+ return (_jsx("div", { className: "pointer-events-none absolute inset-x-0 top-3 z-[60] flex justify-end px-3 sm:top-4 sm:px-4", children: _jsxs("button", { type: "button", "data-agent-page-new-chat": "", "aria-label": t("agentPanel.newChat"), onClick: () => {
566
+ addTab();
567
+ }, className: "pointer-events-auto inline-flex h-8 items-center gap-1.5 rounded-md border border-border bg-background/95 px-2.5 text-xs font-medium text-foreground shadow-sm backdrop-blur transition-colors hover:bg-accent focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring", children: [_jsx(IconPlus, { size: 14 }), _jsx("span", { children: t("agentPanel.newChat") })] }) }));
568
+ }, [t]);
556
569
  // Ref callback: scroll the active tab into view in the overflow container.
557
570
  // Uses getBoundingClientRect for reliable positioning regardless of offsetParent.
558
571
  const activeTabRefCb = useCallback((el) => {
@@ -672,7 +685,9 @@ function AgentPanelInner({ defaultMode = "chat", className, style, apiUrl, empty
672
685
  `[data-agent-fullscreen='true'] .agent-composer-area{` +
673
686
  `max-width:${FULLSCREEN_CONTENT_MAX_PX}px;` +
674
687
  `margin-left:auto;margin-right:auto;width:100%;}`,
675
- } }), SHOW_ONBOARDING && mounted && (_jsx(Suspense, { fallback: null, children: _jsx(OnboardingPanel, {}) })), _jsx("div", { className: cn("flex flex-col min-h-0", mode === "chat" ? "flex-1" : "shrink-0"), children: mounted && (_jsx(Suspense, { fallback: _jsx(ChatLoadingSkeleton, { renderHeader: showHeader ? renderChatHeader : undefined, centerComposerWhenEmpty: assistantChatProps.centerComposerWhenEmpty, composerSlot: assistantChatProps.composerSlot, composerAreaClassName: assistantChatProps.composerAreaClassName, composerLayoutVariant: assistantChatProps.composerLayoutVariant }), children: _jsx(MultiTabAssistantChatLazy, { ...assistantChatProps, apiUrl: apiUrl, showHeader: false, renderHeader: showHeader ? renderChatHeader : undefined, showTabBar: showTabBar, renderOverlay: undefined, contentHidden: mode !== "chat", emptyStateText: emptyStateText, emptyStateAddon: emptyStateAddon, suggestions: suggestions, dynamicSuggestions: dynamicSuggestions, onSwitchToCli: () => switchMode("cli"), execMode: execMode, onExecModeChange: switchExecMode, storageKey: storageKey, restoreActiveThread: restoreActiveThread, scope: scope, browserTabId: browserTabId, threadUrlSync: threadUrlSync }) })) }), canUseCodeTools
688
+ } }), SHOW_ONBOARDING && mounted && (_jsx(Suspense, { fallback: null, children: _jsx(OnboardingPanel, {}) })), _jsx("div", { className: cn("flex flex-col min-h-0", mode === "chat" ? "flex-1" : "shrink-0"), children: mounted && (_jsx(Suspense, { fallback: _jsx(ChatLoadingSkeleton, { renderHeader: showHeader ? renderChatHeader : undefined, centerComposerWhenEmpty: assistantChatProps.centerComposerWhenEmpty, composerSlot: assistantChatProps.composerSlot, composerAreaClassName: assistantChatProps.composerAreaClassName, composerLayoutVariant: assistantChatProps.composerLayoutVariant }), children: _jsx(MultiTabAssistantChatLazy, { ...assistantChatProps, apiUrl: apiUrl, showHeader: false, renderHeader: showHeader ? renderChatHeader : undefined, showTabBar: showTabBar, renderOverlay: showPageNewChatButton && !showHeader
689
+ ? renderPageChatOverlay
690
+ : undefined, contentHidden: mode !== "chat", emptyStateText: emptyStateText, emptyStateAddon: emptyStateAddon, suggestions: suggestions, dynamicSuggestions: dynamicSuggestions, onSwitchToCli: () => switchMode("cli"), execMode: execMode, onExecModeChange: switchExecMode, storageKey: storageKey, restoreActiveThread: restoreActiveThread, scope: scope, browserTabId: browserTabId, threadUrlSync: threadUrlSync }) })) }), canUseCodeTools
676
691
  ? mode === "cli" &&
677
692
  cliTabs.map((id) => (_jsx("div", { className: "min-h-0 relative flex-1", style: {
678
693
  display: id === activeCliTab ? undefined : "none",
@@ -1040,6 +1055,9 @@ export function AgentPanel(props) {
1040
1055
  }, [props.storageKey]);
1041
1056
  return (_jsx(TooltipProvider, { delayDuration: 200, children: _jsx(AgentPanelErrorBoundary, { onReset: resetPanel, children: _jsx(AgentPanelInner, { ...props }, resetKey) }) }));
1042
1057
  }
1058
+ export function shouldDefaultAgentChatSurfacePageNewChatButton(mode, showTabBar) {
1059
+ return mode === "page" && showTabBar !== false;
1060
+ }
1043
1061
  /**
1044
1062
  * Reusable chat surface backed by AgentPanel internals.
1045
1063
  *
@@ -1047,9 +1065,10 @@ export function AgentPanel(props) {
1047
1065
  * model controls, scoped chat behavior, and recovery boundary used by the
1048
1066
  * sidebar without introducing a second chat implementation.
1049
1067
  */
1050
- export function AgentChatSurface({ mode = "panel", className, defaultMode = "chat", isFullscreen, style, chatViewTransition = false, ...props }) {
1068
+ export function AgentChatSurface({ mode = "panel", className, defaultMode = "chat", isFullscreen, style, chatViewTransition = false, showPageNewChatButton, ...props }) {
1051
1069
  const pageMode = mode === "page";
1052
- return (_jsx(AgentPanel, { ...props, defaultMode: defaultMode, isFullscreen: isFullscreen ?? pageMode, className: cn(pageMode && "h-full min-h-0 w-full overflow-hidden bg-background", chatViewTransition && AGENT_CHAT_VIEW_TRANSITION_CLASS, className), style: chatViewTransition ? getAgentChatViewTransitionStyle(style) : style }));
1070
+ const defaultShowPageNewChatButton = shouldDefaultAgentChatSurfacePageNewChatButton(mode, props.showTabBar);
1071
+ return (_jsx(AgentPanel, { ...props, defaultMode: defaultMode, isFullscreen: isFullscreen ?? pageMode, showPageNewChatButton: showPageNewChatButton ?? defaultShowPageNewChatButton, className: cn(pageMode && "h-full min-h-0 w-full overflow-hidden bg-background", chatViewTransition && AGENT_CHAT_VIEW_TRANSITION_CLASS, className), style: chatViewTransition ? getAgentChatViewTransitionStyle(style) : style }));
1053
1072
  }
1054
1073
  /**
1055
1074
  * Wraps app content with a toggleable agent sidebar.