@agent-native/core 0.76.9 → 0.76.11

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 (137) hide show
  1. package/corpus/README.md +1 -1
  2. package/corpus/core/CHANGELOG.md +39 -0
  3. package/corpus/core/docs/content/locales/ar-SA/actions.md +7 -7
  4. package/corpus/core/docs/content/locales/ar-SA/template-plan.md +6 -4
  5. package/corpus/core/docs/content/locales/de-DE/actions.md +9 -9
  6. package/corpus/core/docs/content/locales/de-DE/template-plan.md +6 -4
  7. package/corpus/core/docs/content/locales/es-ES/actions.md +9 -9
  8. package/corpus/core/docs/content/locales/es-ES/template-plan.md +6 -4
  9. package/corpus/core/docs/content/locales/fr-FR/actions.md +9 -9
  10. package/corpus/core/docs/content/locales/fr-FR/template-plan.md +6 -4
  11. package/corpus/core/docs/content/locales/hi-IN/actions.md +9 -9
  12. package/corpus/core/docs/content/locales/hi-IN/template-plan.md +4 -4
  13. package/corpus/core/docs/content/locales/ja-JP/actions.md +9 -9
  14. package/corpus/core/docs/content/locales/ja-JP/template-plan.md +4 -4
  15. package/corpus/core/docs/content/locales/ko-KR/actions.md +9 -9
  16. package/corpus/core/docs/content/locales/ko-KR/template-plan.md +4 -4
  17. package/corpus/core/docs/content/locales/pt-BR/actions.md +9 -9
  18. package/corpus/core/docs/content/locales/pt-BR/template-plan.md +6 -4
  19. package/corpus/core/docs/content/locales/zh-CN/actions.md +9 -9
  20. package/corpus/core/docs/content/locales/zh-CN/template-plan.md +4 -4
  21. package/corpus/core/package.json +1 -1
  22. package/corpus/core/scripts/generate-og-font-data.mjs +9 -5
  23. package/corpus/core/src/client/AgentPanel.tsx +70 -1
  24. package/corpus/core/src/client/AssistantChat.tsx +1 -3
  25. package/corpus/core/src/client/ErrorBoundary.tsx +151 -10
  26. package/corpus/core/src/client/MultiTabAssistantChat.tsx +0 -62
  27. package/corpus/core/src/client/composer/TiptapComposer.tsx +6 -13
  28. package/corpus/core/src/server/og-fonts-data.ts +7 -4
  29. package/corpus/core/src/server/og-fonts.ts +10 -3
  30. package/corpus/core/src/server/social-og-image.ts +45 -6
  31. package/corpus/templates/analytics/app/components/dashboard/SqlChart.tsx +199 -19
  32. package/corpus/templates/analytics/app/components/layout/CommandPalette.tsx +51 -31
  33. package/corpus/templates/analytics/app/components/layout/DashboardHeader.tsx +26 -16
  34. package/corpus/templates/analytics/app/components/layout/Header.tsx +1 -2
  35. package/corpus/templates/analytics/app/components/layout/HeaderActions.tsx +8 -1
  36. package/corpus/templates/analytics/app/components/layout/Layout.tsx +2 -5
  37. package/corpus/templates/analytics/app/components/layout/Sidebar.tsx +172 -107
  38. package/corpus/templates/analytics/app/i18n-data.ts +1076 -5
  39. package/corpus/templates/analytics/app/pages/Settings.tsx +2 -2
  40. package/corpus/templates/analytics/app/pages/adhoc/AdhocRouter.tsx +1 -21
  41. package/corpus/templates/analytics/app/pages/adhoc/DashboardSkeleton.tsx +35 -0
  42. package/corpus/templates/analytics/app/pages/adhoc/explorer-dashboard/index.tsx +3 -23
  43. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/index.tsx +3 -26
  44. package/corpus/templates/analytics/changelog/2026-06-24-analytics-navigation-command-palette-and-settings-now-honor-.md +6 -0
  45. package/corpus/templates/analytics/changelog/2026-06-24-daily-dashboard-charts-now-use-local-day-buckets-and-show-th.md +6 -0
  46. package/corpus/templates/analytics/changelog/2026-06-24-dashboard-loading-placeholders-now-span-the-available-page-w.md +6 -0
  47. package/corpus/templates/analytics/changelog/2026-06-24-first-party-dashboard-dates-now-align-to-pacific-time-for-da.md +6 -0
  48. package/corpus/templates/analytics/server/lib/first-party-metric-catalog.ts +19 -7
  49. package/corpus/templates/assets/app/components/layout/Header.tsx +0 -2
  50. package/corpus/templates/calendar/app/components/layout/AppLayout.tsx +0 -2
  51. package/corpus/templates/calendar/app/pages/CalendarView.tsx +0 -2
  52. package/corpus/templates/chat/app/components/layout/Header.tsx +1 -6
  53. package/corpus/templates/clips/app/components/layout/Header.tsx +1 -6
  54. package/corpus/templates/clips/app/hooks/use-library.ts +2 -0
  55. package/corpus/templates/clips/app/routes/_app.settings._index.tsx +3 -1
  56. package/corpus/templates/clips/changelog/2026-06-24-archive-and-spaces-navigation-is-more-resilient-when-sidebar.md +6 -0
  57. package/corpus/templates/content/app/components/layout/Header.tsx +0 -2
  58. package/corpus/templates/design/app/components/layout/Header.tsx +1 -6
  59. package/corpus/templates/forms/app/components/layout/Header.tsx +1 -6
  60. package/corpus/templates/macros/app/components/layout/Header.tsx +1 -6
  61. package/corpus/templates/mail/app/components/email/CodeBlockLangPicker.tsx +4 -2
  62. package/corpus/templates/mail/app/components/email/ComposeBubbleToolbar.tsx +18 -12
  63. package/corpus/templates/mail/app/components/email/ComposeEditor.tsx +9 -5
  64. package/corpus/templates/mail/app/components/email/ComposeModal.tsx +36 -19
  65. package/corpus/templates/mail/app/components/email/EmailList.tsx +59 -55
  66. package/corpus/templates/mail/app/components/email/EmailListItem.tsx +7 -3
  67. package/corpus/templates/mail/app/components/email/EmailThread.tsx +25 -16
  68. package/corpus/templates/mail/app/components/email/InlineReplyComposer.tsx +25 -19
  69. package/corpus/templates/mail/app/components/email/IntegrationsSidebar.tsx +32 -17
  70. package/corpus/templates/mail/app/components/email/RecipientInput.tsx +26 -10
  71. package/corpus/templates/mail/app/components/email/SendLaterButton.tsx +5 -3
  72. package/corpus/templates/mail/app/components/email/SnoozeModal.tsx +4 -2
  73. package/corpus/templates/mail/app/components/email/SnoozePopover.tsx +9 -5
  74. package/corpus/templates/mail/app/components/email/extensions/ComposeImageBlock.tsx +4 -2
  75. package/corpus/templates/mail/app/components/layout/AppLayout.tsx +168 -86
  76. package/corpus/templates/mail/app/components/layout/SearchBar.tsx +4 -2
  77. package/corpus/templates/mail/app/i18n/ar-SA.ts +212 -0
  78. package/corpus/templates/mail/app/i18n/de-DE.ts +212 -0
  79. package/corpus/templates/mail/app/i18n/en-US.ts +212 -0
  80. package/corpus/templates/mail/app/i18n/es-ES.ts +212 -0
  81. package/corpus/templates/mail/app/i18n/fr-FR.ts +212 -0
  82. package/corpus/templates/mail/app/i18n/hi-IN.ts +212 -0
  83. package/corpus/templates/mail/app/i18n/ja-JP.ts +212 -0
  84. package/corpus/templates/mail/app/i18n/ko-KR.ts +212 -0
  85. package/corpus/templates/mail/app/i18n/pt-BR.ts +212 -0
  86. package/corpus/templates/mail/app/i18n/zh-CN.ts +211 -0
  87. package/corpus/templates/mail/changelog/2026-06-24-interface-language-support-now-covers-more-mail-controls-and.md +6 -0
  88. package/corpus/templates/plan/app/components/layout/Header.tsx +1 -6
  89. package/corpus/templates/slides/app/components/layout/Header.tsx +1 -6
  90. package/corpus/templates/videos/app/components/layout/Header.tsx +1 -6
  91. package/dist/client/AgentPanel.d.ts +5 -1
  92. package/dist/client/AgentPanel.d.ts.map +1 -1
  93. package/dist/client/AgentPanel.js +23 -4
  94. package/dist/client/AgentPanel.js.map +1 -1
  95. package/dist/client/AssistantChat.d.ts +1 -3
  96. package/dist/client/AssistantChat.d.ts.map +1 -1
  97. package/dist/client/AssistantChat.js.map +1 -1
  98. package/dist/client/ErrorBoundary.d.ts.map +1 -1
  99. package/dist/client/ErrorBoundary.js +128 -7
  100. package/dist/client/ErrorBoundary.js.map +1 -1
  101. package/dist/client/MultiTabAssistantChat.d.ts.map +1 -1
  102. package/dist/client/MultiTabAssistantChat.js +1 -17
  103. package/dist/client/MultiTabAssistantChat.js.map +1 -1
  104. package/dist/client/composer/TiptapComposer.d.ts +4 -0
  105. package/dist/client/composer/TiptapComposer.d.ts.map +1 -1
  106. package/dist/client/composer/TiptapComposer.js +5 -9
  107. package/dist/client/composer/TiptapComposer.js.map +1 -1
  108. package/dist/server/og-fonts-data.d.ts +1 -0
  109. package/dist/server/og-fonts-data.d.ts.map +1 -1
  110. package/dist/server/og-fonts-data.js +5 -4
  111. package/dist/server/og-fonts-data.js.map +1 -1
  112. package/dist/server/og-fonts.d.ts +1 -0
  113. package/dist/server/og-fonts.d.ts.map +1 -1
  114. package/dist/server/og-fonts.js +10 -4
  115. package/dist/server/og-fonts.js.map +1 -1
  116. package/dist/server/social-og-image.d.ts.map +1 -1
  117. package/dist/server/social-og-image.js +33 -6
  118. package/dist/server/social-og-image.js.map +1 -1
  119. package/docs/content/locales/ar-SA/actions.md +7 -7
  120. package/docs/content/locales/ar-SA/template-plan.md +6 -4
  121. package/docs/content/locales/de-DE/actions.md +9 -9
  122. package/docs/content/locales/de-DE/template-plan.md +6 -4
  123. package/docs/content/locales/es-ES/actions.md +9 -9
  124. package/docs/content/locales/es-ES/template-plan.md +6 -4
  125. package/docs/content/locales/fr-FR/actions.md +9 -9
  126. package/docs/content/locales/fr-FR/template-plan.md +6 -4
  127. package/docs/content/locales/hi-IN/actions.md +9 -9
  128. package/docs/content/locales/hi-IN/template-plan.md +4 -4
  129. package/docs/content/locales/ja-JP/actions.md +9 -9
  130. package/docs/content/locales/ja-JP/template-plan.md +4 -4
  131. package/docs/content/locales/ko-KR/actions.md +9 -9
  132. package/docs/content/locales/ko-KR/template-plan.md +4 -4
  133. package/docs/content/locales/pt-BR/actions.md +9 -9
  134. package/docs/content/locales/pt-BR/template-plan.md +6 -4
  135. package/docs/content/locales/zh-CN/actions.md +9 -9
  136. package/docs/content/locales/zh-CN/template-plan.md +4 -4
  137. package/package.json +1 -1
@@ -1,4 +1,215 @@
1
1
  const messages = {
2
+ mail: {
3
+ appName: "邮件",
4
+ pages: {
5
+ team: "团队",
6
+ },
7
+ views: {
8
+ inbox: "收件箱",
9
+ unread: "未读",
10
+ starred: "已加星标",
11
+ snoozed: "已稍后提醒",
12
+ sent: "已发送",
13
+ draftQueue: "草稿队列",
14
+ scheduled: "已计划",
15
+ drafts: "草稿",
16
+ archive: "归档",
17
+ trash: "垃圾箱",
18
+ other: "其他",
19
+ labels: "标签",
20
+ extensions: "扩展",
21
+ },
22
+ toolbar: {
23
+ toggleMenu: "切换菜单",
24
+ menu: "菜单",
25
+ configureTabs: "配置标签页",
26
+ refreshInbox: "刷新收件箱",
27
+ composeEmail: "撰写邮件",
28
+ compose: "撰写",
29
+ composeShortcut: "撰写 (C)",
30
+ accounts: "账号",
31
+ pinSidebar: "固定侧边栏",
32
+ unpinSidebar: "取消固定侧边栏",
33
+ settings: "设置",
34
+ },
35
+ search: {
36
+ label: "搜索",
37
+ placeholder: "搜索...",
38
+ clear: "清除搜索 (Esc)",
39
+ noMatches: "没有匹配项",
40
+ },
41
+ tabSettings: {
42
+ views: "视图",
43
+ categories: "分类",
44
+ rename: "重命名",
45
+ renameTab: "重命名标签页",
46
+ help: "勾选的项目会显示为标签页。标签邮件会从收件箱中分离。",
47
+ },
48
+ accounts: {
49
+ remove: "移除",
50
+ connecting: "正在连接...",
51
+ addAccount: "添加账号",
52
+ },
53
+ actions: {
54
+ undo: "撤销",
55
+ archive: "归档",
56
+ markRead: "标为已读",
57
+ markUnread: "标为未读",
58
+ moveTo: "移动到",
59
+ moveToTrash: "移到垃圾箱",
60
+ },
61
+ compose: {
62
+ addImage: "Add an image",
63
+ agentPromptLabel: "What should the agent write?",
64
+ agentPromptPlaceholder: "e.g. Write a polite follow-up...",
65
+ aiAssist: "AI Assist",
66
+ aiAssistPlaceholder: "e.g. make more formal...",
67
+ apply: "Apply",
68
+ attachFile: "Attach file",
69
+ bold: "Bold",
70
+ cancel: "Cancel",
71
+ code: "Code",
72
+ deleteDraft: "Delete draft",
73
+ discardDraft: "Discard draft",
74
+ enterLinkUrl: "Enter the URL for the link.",
75
+ forward: "Forward",
76
+ fullScreen: "Full screen",
77
+ fullScreenCompose: "Full screen compose",
78
+ generate: "Generate",
79
+ generateShortcut: "Generate ({{shortcut}})",
80
+ generating: "Generating...",
81
+ insertLink: "Insert link",
82
+ italic: "Italic",
83
+ link: "Link",
84
+ minimize: "Minimize",
85
+ minimizeCompose: "Minimize compose",
86
+ newDraft: "New draft",
87
+ pasteLink: "Paste link...",
88
+ plainText: "Plain text",
89
+ popOut: "Pop out to compose window",
90
+ reply: "Reply",
91
+ replyTo: "to {{recipient}}",
92
+ restore: "Restore",
93
+ restoreCompose: "Restore compose",
94
+ restoreComposeSize: "Restore compose size",
95
+ restoreSize: "Restore size",
96
+ send: "Send",
97
+ sending: "Sending...",
98
+ strikethrough: "Strikethrough",
99
+ subject: "Subject",
100
+ toSubmit: "to submit",
101
+ uploading: "Uploading...",
102
+ writeMessagePlaceholder: "Write your message...",
103
+ },
104
+ integrations: {
105
+ addIntegration: "Add integration",
106
+ checking: "Checking...",
107
+ connect: "Connect",
108
+ disconnect: "Disconnect",
109
+ getApiKey: "To get your API key:",
110
+ newIntegration: "New integration",
111
+ newIntegrationPlaceholder:
112
+ "e.g. Salesforce CRM — show deal stage and recent activity for the contact",
113
+ openProviderSettings: "Open {{provider}} Settings",
114
+ save: "Save",
115
+ submit: "Submit",
116
+ submitShortcut: "Submit ({{shortcut}})",
117
+ updateKey: "Update key",
118
+ },
119
+ recipients: {
120
+ aliasName: "Alias name",
121
+ createReusableGroup: "Create a reusable group of {{count}} recipients",
122
+ editAlias: "Edit alias",
123
+ expandToIndividualEmails: "Expand to individual emails",
124
+ peopleCount: "{{count}} people",
125
+ recipientCount: "{{count}} recipients",
126
+ saveAsAlias: "Save as alias",
127
+ saving: "Saving...",
128
+ },
129
+ sendLater: {
130
+ cancelScheduledSend: "Cancel scheduled send",
131
+ pickDateTime: "Pick date & time...",
132
+ scheduleSend: "Schedule send",
133
+ sendNow: "Send now",
134
+ },
135
+ snooze: {
136
+ modalPlaceholder: "Try: 8 am, 3 days, aug 7",
137
+ parsing: "Parsing...",
138
+ snooze: "Snooze",
139
+ snoozeUntil: "Snooze until",
140
+ snoozeUntilDate: "Snooze until {{date}}",
141
+ snoozing: "Snoozing...",
142
+ tryPlaceholder: "or try: friday 5pm, in 2 weeks...",
143
+ },
144
+ thread: {
145
+ alwaysFrom: "Always from {{domain}}",
146
+ downloadAll: "Download all",
147
+ emailContent: "Email content",
148
+ hideQuotedText: "Hide quoted text",
149
+ imagesBlocked: "Images blocked.",
150
+ remoteImagesHidden: "Remote images hidden in this embed.",
151
+ searchConversation: "Search in conversation...",
152
+ showImages: "Show images",
153
+ showQuotedText: "Show quoted text",
154
+ showSignature: "Show signature",
155
+ unsubscribe: "Unsubscribe",
156
+ unsubscribeTooltip: "Unsubscribe from this mailing list",
157
+ unsubscribing: "Unsubscribing...",
158
+ viewPullRequest: "View Pull Request",
159
+ },
160
+ selection: {
161
+ clear: "清除选择",
162
+ actions: "选择操作",
163
+ selected: "已选择 {{count}} 项",
164
+ select: "选择",
165
+ all: "全部",
166
+ none: "无",
167
+ read: "已读",
168
+ unstarred: "未加星标",
169
+ },
170
+ empty: {
171
+ inboxZeroTitle: "你已清空收件箱",
172
+ inboxZeroSubtitle: "所有邮件都处理完了",
173
+ snoozed: "当前没有稍后提醒的邮件。",
174
+ drafts: "保存的草稿会显示在这里。",
175
+ starred: "给邮件加星标后会显示在这里。",
176
+ sent: "你发送的邮件会显示在这里。",
177
+ scheduled: "定时发送的邮件会显示在这里。",
178
+ archive: "归档邮件会显示在这里。",
179
+ trash: "垃圾箱邮件会在这里保留 30 天。",
180
+ spam: "Gmail 标记的垃圾邮件会显示在这里。",
181
+ all: "所有邮件会显示在这里。",
182
+ unread: "你已处理完毕,没有未读邮件。",
183
+ default: "匹配此视图的邮件会显示在这里。",
184
+ noSearchResults: "没有找到“{{query}}”的结果",
185
+ tryDifferentKeywords: "试试其他关键词",
186
+ nothingHere: "这里还没有内容",
187
+ loadingMore: "Loading more...",
188
+ },
189
+ toasts: {
190
+ noEmailSelected: "未选择邮件。",
191
+ reportedSpam: "已举报为垃圾邮件。",
192
+ reportedSpamBlocked: "已举报为垃圾邮件并屏蔽 {{email}}。",
193
+ noThreadSelected: "未选择会话。",
194
+ threadMuted: "会话已静音。",
195
+ archived: "已归档。",
196
+ archivedMany: "已归档 {{count}} 个会话。",
197
+ trashed: "已移到垃圾箱。",
198
+ trashedMany: "已将 {{count}} 个会话移到垃圾箱。",
199
+ scheduledSent: "定时邮件已发送。",
200
+ scheduledSendFailed: "发送定时邮件失败",
201
+ scheduledCancelled: "定时邮件已取消。",
202
+ scheduledCancelFailed: "取消定时邮件失败",
203
+ },
204
+ error: {
205
+ retrying: "正在重试...",
206
+ tryAgainIn: "{{seconds}} 秒后重试",
207
+ tryAgain: "重试",
208
+ rateLimitTitle: "触发 Gmail 速率限制",
209
+ loadTitle: "无法加载邮件",
210
+ rateLimitDescription: "最近对 Google 的请求过多。稍等片刻后会重试。",
211
+ },
212
+ },
2
213
  agent: {
3
214
  emptyState: "可以问我任何关于邮件的问题",
4
215
  suggestionSummarize: "总结我的未读邮件",
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: improved
3
+ date: 2026-06-24
4
+ ---
5
+
6
+ Interface language support now covers more Mail controls and email workflows.
@@ -1,11 +1,7 @@
1
1
  import { useLocation } from "react-router";
2
2
  import { IconMenu2 } from "@tabler/icons-react";
3
3
  import { useHeaderTitle, useHeaderActions } from "./HeaderActions";
4
- import {
5
- AgentToggleButton,
6
- LanguagePicker,
7
- useT,
8
- } from "@agent-native/core/client";
4
+ import { AgentToggleButton, useT } from "@agent-native/core/client";
9
5
  import { APP_TITLE } from "@/lib/app-config";
10
6
 
11
7
  const pageTitleKeys: Record<string, string> = {
@@ -54,7 +50,6 @@ export function Header({ onOpenMobileSidebar }: HeaderProps) {
54
50
  </div>
55
51
  <div className="flex items-center gap-2 shrink-0">
56
52
  {actions}
57
- <LanguagePicker variant="icon" />
58
53
  <AgentToggleButton />
59
54
  </div>
60
55
  </header>
@@ -1,11 +1,7 @@
1
1
  import { useLocation } from "react-router";
2
2
  import { useDecks } from "@/context/DeckContext";
3
3
  import { useHeaderTitle, useHeaderActions } from "./HeaderActions";
4
- import {
5
- AgentToggleButton,
6
- LanguagePicker,
7
- useT,
8
- } from "@agent-native/core/client";
4
+ import { AgentToggleButton, useT } from "@agent-native/core/client";
9
5
  import { RunsTray } from "@agent-native/core/client/progress";
10
6
 
11
7
  const pageTitleKeys: Record<string, string> = {
@@ -67,7 +63,6 @@ export function Header() {
67
63
  </div>
68
64
  <div className="flex items-center gap-2 shrink-0">
69
65
  {actions}
70
- <LanguagePicker variant="icon" />
71
66
  <RunsTray pollMs={1500} />
72
67
  <AgentToggleButton />
73
68
  </div>
@@ -1,11 +1,7 @@
1
1
  import { useLocation } from "react-router";
2
2
  import { IconMenu2 } from "@tabler/icons-react";
3
3
  import { useHeaderTitle, useHeaderActions } from "./HeaderActions";
4
- import {
5
- AgentToggleButton,
6
- LanguagePicker,
7
- useT,
8
- } from "@agent-native/core/client";
4
+ import { AgentToggleButton, useT } from "@agent-native/core/client";
9
5
  import { compositions } from "@/remotion/registry";
10
6
 
11
7
  const pageTitleKeys: Record<string, string> = {
@@ -60,7 +56,6 @@ export function Header({ onOpenMobileSidebar }: HeaderProps) {
60
56
  </div>
61
57
  <div className="flex items-center gap-2 shrink-0">
62
58
  {actions}
63
- <LanguagePicker variant="icon" />
64
59
  <AgentToggleButton />
65
60
  </div>
66
61
  </header>
@@ -31,6 +31,7 @@ export declare function getAgentPanelChatTabGroups(tabs: MultiTabAssistantChatHe
31
31
  mainTabs: import("./MultiTabAssistantChat.js").ChatTab[];
32
32
  };
33
33
  export declare function shouldShowAgentPanelChatTabBar(tabs: MultiTabAssistantChatHeaderProps["tabs"], activeTabId: string): boolean;
34
+ export declare function shouldShowAgentPanelPageNewChatButton(tabs: MultiTabAssistantChatHeaderProps["tabs"], activeTabId: string, activeTabMessageCount: number): boolean;
34
35
  export declare function shouldShowAgentPanelCliTabBar(cliTabs: string[]): boolean;
35
36
  export interface AgentPanelCodeAccess {
36
37
  /** Whether this surface can safely edit source and run shell commands. */
@@ -86,6 +87,8 @@ export interface AgentPanelProps extends Omit<AssistantChatProps, "onSwitchToCli
86
87
  chatNotice?: React.ReactNode;
87
88
  /** Show the chat thread tab row when the panel header is hidden. Default: true. */
88
89
  showTabBar?: boolean;
90
+ /** Show a compact New chat action in page chat when the main header is hidden. */
91
+ showPageNewChatButton?: boolean;
89
92
  /** Capability gate for source edits and CLI access. */
90
93
  codeAccess?: AgentPanelCodeAccess;
91
94
  }
@@ -105,6 +108,7 @@ export interface AgentChatSurfaceProps extends AgentPanelProps {
105
108
  */
106
109
  chatViewTransition?: boolean;
107
110
  }
111
+ export declare function shouldDefaultAgentChatSurfacePageNewChatButton(mode: AgentChatSurfaceMode | undefined, showTabBar: boolean | undefined): boolean;
108
112
  /**
109
113
  * Reusable chat surface backed by AgentPanel internals.
110
114
  *
@@ -112,7 +116,7 @@ export interface AgentChatSurfaceProps extends AgentPanelProps {
112
116
  * model controls, scoped chat behavior, and recovery boundary used by the
113
117
  * sidebar without introducing a second chat implementation.
114
118
  */
115
- export declare function AgentChatSurface({ mode, className, defaultMode, isFullscreen, style, chatViewTransition, ...props }: AgentChatSurfaceProps): import("react/jsx-runtime").JSX.Element;
119
+ export declare function AgentChatSurface({ mode, className, defaultMode, isFullscreen, style, chatViewTransition, showPageNewChatButton, ...props }: AgentChatSurfaceProps): import("react/jsx-runtime").JSX.Element;
116
120
  export interface AgentSidebarProps {
117
121
  children: React.ReactNode;
118
122
  /** Placeholder text for the empty chat state */
@@ -1 +1 @@
1
- {"version":3,"file":"AgentPanel.d.ts","sourceRoot":"","sources":["../../src/client/AgentPanel.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"AgentPanel.d.ts","sourceRoot":"","sources":["../../src/client/AgentPanel.tsx"],"names":[],"mappings":"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"}
@@ -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.