@agent-native/core 0.103.1 → 0.105.0

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 (568) hide show
  1. package/corpus/README.md +2 -2
  2. package/corpus/core/CHANGELOG.md +61 -0
  3. package/corpus/core/package.json +9 -2
  4. package/corpus/core/src/agent/engine/credential-errors.ts +2 -2
  5. package/corpus/core/src/agent/production-agent.ts +30 -0
  6. package/corpus/core/src/agent/run-store.ts +12 -2
  7. package/corpus/core/src/cli/create.ts +1 -0
  8. package/corpus/core/src/cli/skills-content/visual-plan-skill.ts +30 -11
  9. package/corpus/core/src/cli/templates-meta.ts +4 -3
  10. package/corpus/core/src/client/AgentAskPopover.tsx +89 -0
  11. package/corpus/core/src/client/AgentChatHome.tsx +4 -0
  12. package/corpus/core/src/client/AgentPanel.tsx +321 -223
  13. package/corpus/core/src/client/AssistantChat.tsx +6 -10
  14. package/corpus/core/src/client/MultiTabAssistantChat.tsx +53 -372
  15. package/corpus/core/src/client/agent-chat-adapter.ts +13 -1
  16. package/corpus/core/src/client/agent-page/AgentContextTab.tsx +133 -149
  17. package/corpus/core/src/client/agent-page/AgentEmptyState.tsx +44 -0
  18. package/corpus/core/src/client/agent-page/AgentJobsTab.tsx +153 -82
  19. package/corpus/core/src/client/agent-page/AgentTabFrame.tsx +39 -0
  20. package/corpus/core/src/client/agent-page/AgentTabsPage.tsx +368 -356
  21. package/corpus/core/src/client/agent-page/types.ts +1 -1
  22. package/corpus/core/src/client/analytics.ts +51 -5
  23. package/corpus/core/src/client/chat/run-recovery.tsx +12 -4
  24. package/corpus/core/src/client/composer/PromptComposer.tsx +5 -15
  25. package/corpus/core/src/client/composer/TiptapComposer.tsx +32 -3
  26. package/corpus/core/src/client/dynamic-suggestions.ts +3 -3
  27. package/corpus/core/src/client/index.ts +16 -1
  28. package/corpus/core/src/client/resources/ResourceTree.tsx +249 -38
  29. package/corpus/core/src/client/resources/ResourcesPanel.tsx +307 -140
  30. package/corpus/core/src/client/session-replay.ts +158 -5
  31. package/corpus/core/src/client/settings/AutomationsSection.tsx +30 -10
  32. package/corpus/core/src/client/settings/SettingsPanel.tsx +3 -2
  33. package/corpus/core/src/client/settings/SettingsTabsPage.tsx +2 -0
  34. package/corpus/core/src/client/settings/agent-settings-search.ts +2 -2
  35. package/corpus/core/src/client/use-chat-threads.ts +2 -0
  36. package/corpus/core/src/connections/catalog.ts +49 -7
  37. package/corpus/core/src/db/index.ts +6 -1
  38. package/corpus/core/src/deploy/build.ts +23 -0
  39. package/corpus/core/src/extensions/actions.ts +106 -16
  40. package/corpus/core/src/extensions/content-patch.ts +22 -0
  41. package/corpus/core/src/extensions/routes.ts +18 -0
  42. package/corpus/core/src/extensions/store.ts +8 -0
  43. package/corpus/core/src/index.ts +3 -0
  44. package/corpus/core/src/ingestion/docx.ts +158 -0
  45. package/corpus/core/src/ingestion/figma-node-to-html.ts +1860 -0
  46. package/corpus/core/src/ingestion/figma.ts +548 -0
  47. package/corpus/core/src/ingestion/index.ts +107 -0
  48. package/corpus/core/src/ingestion/media.ts +264 -0
  49. package/corpus/core/src/ingestion/notion.ts +121 -0
  50. package/corpus/core/src/ingestion/office.ts +214 -0
  51. package/corpus/core/src/ingestion/orchestration.ts +160 -0
  52. package/corpus/core/src/ingestion/pptx.ts +333 -0
  53. package/corpus/core/src/ingestion/selection.ts +81 -0
  54. package/corpus/core/src/ingestion/website.ts +151 -0
  55. package/corpus/core/src/integrations/plugin.ts +45 -37
  56. package/corpus/core/src/localization/default-messages.ts +35 -12
  57. package/corpus/core/src/observability/hosted-model-experiment.ts +118 -0
  58. package/corpus/core/src/observability/traces.ts +5 -3
  59. package/corpus/core/src/provider-api/index.ts +452 -8
  60. package/corpus/core/src/scripts/agent-engines/list-agent-engines.ts +18 -1
  61. package/corpus/core/src/search-utils/index.ts +112 -0
  62. package/corpus/core/src/secrets/register-framework-secrets.ts +61 -0
  63. package/corpus/core/src/server/action-discovery.ts +33 -8
  64. package/corpus/core/src/server/agent-chat/framework-prompts.ts +2 -2
  65. package/corpus/core/src/server/agent-chat/prompt-resources.ts +144 -0
  66. package/corpus/core/src/server/agent-chat-plugin.ts +6 -0
  67. package/corpus/core/src/server/core-routes-plugin.ts +12 -0
  68. package/corpus/core/src/server/index.ts +30 -0
  69. package/corpus/core/src/server/workspace-provider-oauth.ts +583 -0
  70. package/corpus/core/src/styles/agent-native.css +9 -0
  71. package/corpus/core/src/templates/default/app/i18n/en-US.ts +3 -3
  72. package/corpus/core/src/templates/workspace-core/.agents/skills/extensions/SKILL.md +14 -5
  73. package/corpus/core/src/templates/workspace-root/.env.example +12 -0
  74. package/corpus/core/src/workspace-connections/index.ts +6 -0
  75. package/corpus/core/src/workspace-connections/lifecycle.ts +43 -0
  76. package/corpus/core/src/workspace-connections/store.ts +16 -0
  77. package/corpus/templates/analytics/.agents/skills/dashboard-management/SKILL.md +46 -3
  78. package/corpus/templates/analytics/AGENTS.md +9 -0
  79. package/corpus/templates/analytics/actions/dashboard-mutation-api.ts +120 -6
  80. package/corpus/templates/analytics/actions/mutate-dashboard.ts +92 -30
  81. package/corpus/templates/analytics/actions/update-dashboard.ts +5 -5
  82. package/corpus/templates/analytics/app/components/dashboard/SqlChart.tsx +313 -220
  83. package/corpus/templates/analytics/app/components/layout/CommandPalette.tsx +2 -2
  84. package/corpus/templates/analytics/app/components/layout/Layout.tsx +9 -6
  85. package/corpus/templates/analytics/app/components/layout/Sidebar.tsx +90 -64
  86. package/corpus/templates/analytics/app/i18n-data.ts +3 -3
  87. package/corpus/templates/analytics/app/lib/dashboard-list-loading.ts +25 -0
  88. package/corpus/templates/analytics/app/lib/item-popularity.ts +13 -4
  89. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/DashboardFilterBar.tsx +1 -1
  90. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/pivot.ts +8 -3
  91. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/types.ts +1 -0
  92. package/corpus/templates/analytics/app/pages/sessions/SessionDetailPage.tsx +15 -3
  93. package/corpus/templates/analytics/changelog/2026-07-16-dashboard-filter-defaults-can-now-be-changed-reliably-withou.md +6 -0
  94. package/corpus/templates/analytics/changelog/2026-07-16-dashboard-lists-load-in-one-stable-order-without-popping-bet.md +6 -0
  95. package/corpus/templates/analytics/changelog/2026-07-16-fixed-dashboard-filter-dropdown-text-alignment.md +6 -0
  96. package/corpus/templates/analytics/changelog/2026-07-16-recurring-signed-in-users-can-now-be-viewed-as-weekly-bars-b.md +6 -0
  97. package/corpus/templates/analytics/changelog/2026-07-16-the-analytics-agent-can-now-duplicate-a-chart-and-place-the-.md +6 -0
  98. package/corpus/templates/analytics/seeds/dashboards/agent-native-templates-first-party.json +41 -1
  99. package/corpus/templates/analytics/server/lib/dashboard-catalog.ts +1 -1
  100. package/corpus/templates/analytics/server/lib/first-party-metric-catalog.ts +47 -1
  101. package/corpus/templates/analytics/server/lib/session-replay.ts +68 -0
  102. package/corpus/templates/analytics/server/plugins/agent-chat.ts +1 -0
  103. package/corpus/templates/analytics/server/routes/sessions/lookup.get.ts +47 -0
  104. package/corpus/templates/assets/.agents/skills/asset-generation/SKILL.md +16 -9
  105. package/corpus/templates/assets/.agents/skills/creative-context/SKILL.md +86 -0
  106. package/corpus/templates/assets/AGENTS.md +10 -0
  107. package/corpus/templates/assets/actions/create-generation-session.ts +59 -1
  108. package/corpus/templates/assets/actions/edit-image.ts +2 -0
  109. package/corpus/templates/assets/actions/generate-asset.ts +52 -0
  110. package/corpus/templates/assets/actions/generate-image-batch.ts +55 -0
  111. package/corpus/templates/assets/actions/generate-image.ts +219 -1
  112. package/corpus/templates/assets/actions/open-asset-picker.ts +14 -0
  113. package/corpus/templates/assets/actions/refine-image.ts +3 -0
  114. package/corpus/templates/assets/actions/restyle-image.ts +2 -0
  115. package/corpus/templates/assets/agent-native.app-skill.json +4 -0
  116. package/corpus/templates/assets/app/components/layout/Layout.tsx +2 -0
  117. package/corpus/templates/assets/app/i18n/zh-TW.ts +3 -0
  118. package/corpus/templates/assets/app/i18n-data.ts +29 -13
  119. package/corpus/templates/assets/app/routes/agent.tsx +7 -1
  120. package/corpus/templates/assets/app/routes/library.tsx +9 -0
  121. package/corpus/templates/assets/app/routes/settings.tsx +3 -0
  122. package/corpus/templates/assets/changelog/2026-07-16-creative-context-library.md +6 -0
  123. package/corpus/templates/assets/package.json +1 -0
  124. package/corpus/templates/assets/server/lib/image-processing.ts +1 -22
  125. package/corpus/templates/assets/server/plugins/creative-context.ts +205 -0
  126. package/corpus/templates/brain/app/i18n-data.ts +3 -3
  127. package/corpus/templates/brain/app/lib/brain.ts +1 -1
  128. package/corpus/templates/brain/server/lib/search.ts +17 -67
  129. package/corpus/templates/calendar/app/i18n-data.ts +3 -3
  130. package/corpus/templates/calendar/app/pages/BookingLinksPage.tsx +19 -18
  131. package/corpus/templates/chat/app/i18n/en-US.ts +3 -3
  132. package/corpus/templates/chat/app/lib/agent-page.tsx +10 -1
  133. package/corpus/templates/clips/.agents/skills/meetings/SKILL.md +1 -1
  134. package/corpus/templates/clips/AGENTS.md +4 -0
  135. package/corpus/templates/clips/actions/cleanup-transcript.ts +35 -4
  136. package/corpus/templates/clips/actions/create-meeting.ts +6 -2
  137. package/corpus/templates/clips/actions/create-organization.ts +3 -2
  138. package/corpus/templates/clips/actions/create-recording.ts +4 -1
  139. package/corpus/templates/clips/actions/finalize-recording.ts +44 -7
  140. package/corpus/templates/clips/actions/import-loom-recording.ts +4 -1
  141. package/corpus/templates/clips/actions/lib/create-recording-schema.ts +2 -2
  142. package/corpus/templates/clips/actions/list-meetings.ts +23 -5
  143. package/corpus/templates/clips/actions/list-organization-state.ts +1 -1
  144. package/corpus/templates/clips/actions/remove-silences.ts +10 -1
  145. package/corpus/templates/clips/actions/request-transcript.ts +53 -11
  146. package/corpus/templates/clips/actions/search-recordings-utils.ts +7 -0
  147. package/corpus/templates/clips/actions/search-recordings.ts +5 -8
  148. package/corpus/templates/clips/actions/set-organization-branding.ts +2 -2
  149. package/corpus/templates/clips/actions/stitch-recordings.ts +10 -5
  150. package/corpus/templates/clips/actions/update-ai-request-status.ts +38 -0
  151. package/corpus/templates/clips/app/components/editor/editor-layout.tsx +3 -4
  152. package/corpus/templates/clips/app/components/editor/editor-selection.ts +19 -0
  153. package/corpus/templates/clips/app/components/editor/stitch-manager.tsx +10 -10
  154. package/corpus/templates/clips/app/components/library/bulk-action-toolbar.tsx +1 -2
  155. package/corpus/templates/clips/app/components/library/library-grid.tsx +101 -93
  156. package/corpus/templates/clips/app/components/player/video-player.tsx +11 -0
  157. package/corpus/templates/clips/app/components/workspace/branding-editor.tsx +53 -1
  158. package/corpus/templates/clips/app/i18n/ar-SA.ts +7 -1
  159. package/corpus/templates/clips/app/i18n/de-DE.ts +7 -1
  160. package/corpus/templates/clips/app/i18n/en-US.ts +10 -4
  161. package/corpus/templates/clips/app/i18n/es-ES.ts +7 -1
  162. package/corpus/templates/clips/app/i18n/fr-FR.ts +7 -1
  163. package/corpus/templates/clips/app/i18n/hi-IN.ts +7 -1
  164. package/corpus/templates/clips/app/i18n/ja-JP.ts +7 -1
  165. package/corpus/templates/clips/app/i18n/ko-KR.ts +7 -1
  166. package/corpus/templates/clips/app/i18n/pt-BR.ts +7 -1
  167. package/corpus/templates/clips/app/i18n/zh-CN.ts +6 -1
  168. package/corpus/templates/clips/app/i18n/zh-TW.ts +6 -1
  169. package/corpus/templates/clips/app/routes/_app.settings._index.tsx +5 -9
  170. package/corpus/templates/clips/app/routes/_app.settings.organization.tsx +6 -2
  171. package/corpus/templates/clips/app/routes/r.$recordingId.tsx +129 -27
  172. package/corpus/templates/clips/app/routes/record.tsx +23 -2
  173. package/corpus/templates/clips/app/routes/share.$shareId.tsx +6 -2
  174. package/corpus/templates/clips/app/routes.ts +3 -1
  175. package/corpus/templates/clips/changelog/2026-07-16-authorized-viewers-can-open-shared-private-clips-without-a-m.md +6 -0
  176. package/corpus/templates/clips/changelog/2026-07-16-camera-bubble-hover-controls-appear-above-the-face.md +6 -0
  177. package/corpus/templates/clips/changelog/2026-07-16-chrome-extension-recovers-stale-recorder-state.md +6 -0
  178. package/corpus/templates/clips/changelog/2026-07-16-clips-agent-chat-no-longer-shows-a-separate-workspace-header.md +6 -0
  179. package/corpus/templates/clips/changelog/2026-07-16-clips-search-now-matches-recording-content-without-requiring.md +6 -0
  180. package/corpus/templates/clips/changelog/2026-07-16-declined-meetings-no-longer-show-desktop-reminders.md +6 -0
  181. package/corpus/templates/clips/changelog/2026-07-16-failed-desktop-saves-now-show-their-local-recovery-copy.md +6 -0
  182. package/corpus/templates/clips/changelog/2026-07-16-long-desktop-clips-now-preserve-complete-playback-synced-aud.md +6 -0
  183. package/corpus/templates/clips/changelog/2026-07-16-long-recording-lists-keep-stitch-and-library-actions-visible.md +6 -0
  184. package/corpus/templates/clips/changelog/2026-07-16-organization-admins-can-choose-new-recording-visibility.md +6 -0
  185. package/corpus/templates/clips/changelog/2026-07-16-remove-silences-now-shows-queued-active-completed-and-failed.md +6 -0
  186. package/corpus/templates/clips/changelog/2026-07-16-settings-no-longer-repeats-the-builder-connection-status-in-.md +6 -0
  187. package/corpus/templates/clips/changelog/2026-07-16-transcripts-now-appear-from-native-browser-speech-sooner-wit.md +6 -0
  188. package/corpus/templates/clips/chrome-extension/public/manifest.json +1 -1
  189. package/corpus/templates/clips/chrome-extension/src/background.ts +73 -1
  190. package/corpus/templates/clips/chrome-extension/src/native-recording-state.ts +32 -0
  191. package/corpus/templates/clips/chrome-extension/src/native-transcription.ts +248 -0
  192. package/corpus/templates/clips/chrome-extension/src/offscreen.ts +106 -0
  193. package/corpus/templates/clips/desktop/src/app.tsx +66 -28
  194. package/corpus/templates/clips/desktop/src/lib/recorder.ts +335 -285
  195. package/corpus/templates/clips/desktop/src/lib/single-flight.ts +7 -0
  196. package/corpus/templates/clips/desktop/src/lib/upload-verification.ts +51 -0
  197. package/corpus/templates/clips/desktop/src/overlays/bubble.tsx +2 -2
  198. package/corpus/templates/clips/desktop/src/overlays/finalizing.tsx +10 -2
  199. package/corpus/templates/clips/desktop/src/styles.css +13 -11
  200. package/corpus/templates/clips/desktop/src-tauri/src/clips/mod.rs +8 -9
  201. package/corpus/templates/clips/desktop/src-tauri/src/meetings_watcher.rs +1 -0
  202. package/corpus/templates/clips/desktop/src-tauri/src/native_screen/custom_capture.rs +88 -13
  203. package/corpus/templates/clips/desktop/src-tauri/src/native_screen/live_upload.rs +13 -2
  204. package/corpus/templates/clips/desktop/src-tauri/src/native_screen.rs +241 -6
  205. package/corpus/templates/clips/server/db/schema.ts +2 -2
  206. package/corpus/templates/clips/server/lib/builder-media-compression.ts +64 -67
  207. package/corpus/templates/clips/server/lib/calendar-event-classification.ts +19 -0
  208. package/corpus/templates/clips/server/lib/google-calendar-client.ts +1 -0
  209. package/corpus/templates/clips/server/lib/recordings.ts +40 -1
  210. package/corpus/templates/clips/server/plugins/agent-chat.ts +1 -0
  211. package/corpus/templates/clips/server/plugins/db.ts +2 -2
  212. package/corpus/templates/clips/server/routes/api/auth/google-calendar.get.ts +1 -1
  213. package/corpus/templates/clips/server/routes/api/public-recording.get.ts +14 -5
  214. package/corpus/templates/clips/server/routes/api/uploads/[recordingId]/chunk.post.ts +51 -1
  215. package/corpus/templates/clips/server/routes/api/video/[recordingId].get.ts +1 -64
  216. package/corpus/templates/clips/shared/media-worker-contract.ts +32 -15
  217. package/corpus/templates/content/.agents/skills/content/SKILL.md +16 -0
  218. package/corpus/templates/content/.agents/skills/creative-context/SKILL.md +85 -0
  219. package/corpus/templates/content/.agents/skills/notion-integration/SKILL.md +8 -0
  220. package/corpus/templates/content/AGENTS.md +9 -0
  221. package/corpus/templates/content/actions/create-document.ts +94 -0
  222. package/corpus/templates/content/actions/edit-document.ts +144 -4
  223. package/corpus/templates/content/actions/update-document.ts +138 -0
  224. package/corpus/templates/content/agent-native.app-skill.json +4 -0
  225. package/corpus/templates/content/app/components/layout/Layout.tsx +2 -0
  226. package/corpus/templates/content/app/i18n/zh-TW.ts +3 -0
  227. package/corpus/templates/content/app/i18n-data.ts +13 -4
  228. package/corpus/templates/content/app/routes/_app.agent.tsx +2 -1
  229. package/corpus/templates/content/app/routes/_app.settings.tsx +3 -0
  230. package/corpus/templates/content/changelog/2026-07-16-creative-context-library.md +6 -0
  231. package/corpus/templates/content/package.json +1 -0
  232. package/corpus/templates/content/server/plugins/creative-context.ts +31 -0
  233. package/corpus/templates/design/.agents/skills/creative-context/SKILL.md +116 -0
  234. package/corpus/templates/design/.agents/skills/design-generation/SKILL.md +16 -0
  235. package/corpus/templates/design/.agents/skills/design-systems/SKILL.md +8 -0
  236. package/corpus/templates/design/AGENTS.md +6 -0
  237. package/corpus/templates/design/actions/clone-creative-context-design.ts +176 -0
  238. package/corpus/templates/design/actions/edit-design.ts +128 -0
  239. package/corpus/templates/design/actions/generate-design.ts +278 -14
  240. package/corpus/templates/design/actions/generate-screens.ts +42 -1
  241. package/corpus/templates/design/agent-native.app-skill.json +4 -0
  242. package/corpus/templates/design/app/components/layout/Layout.tsx +7 -3
  243. package/corpus/templates/design/app/i18n/zh-TW.ts +3 -0
  244. package/corpus/templates/design/app/i18n-data.ts +10 -4
  245. package/corpus/templates/design/app/routes/agent.tsx +2 -1
  246. package/corpus/templates/design/app/routes/settings.tsx +3 -0
  247. package/corpus/templates/design/changelog/2026-07-16-creative-context-library.md +6 -0
  248. package/corpus/templates/design/changelog/2026-07-16-design-agent-chat-no-longer-shows-a-separate-workspace-header.md +6 -0
  249. package/corpus/templates/design/package.json +1 -0
  250. package/corpus/templates/design/server/lib/figma-design-context.ts +5 -335
  251. package/corpus/templates/design/server/lib/figma-node-to-html.ts +1 -1859
  252. package/corpus/templates/design/server/lib/import-design-files.ts +6 -8
  253. package/corpus/templates/design/server/plugins/creative-context.ts +31 -0
  254. package/corpus/templates/design/shared/generation-session.ts +7 -0
  255. package/corpus/templates/dispatch/app/i18n-data.ts +3 -3
  256. package/corpus/templates/forms/app/i18n/en-US.ts +3 -3
  257. package/corpus/templates/macros/app/i18n/en-US.ts +3 -3
  258. package/corpus/templates/mail/app/components/email/EmailThread.tsx +35 -5
  259. package/corpus/templates/mail/app/i18n/en-US.ts +3 -3
  260. package/corpus/templates/mail/changelog/2026-07-16-mail-previews-now-expand-to-show-the-full-message-without-an.md +6 -0
  261. package/corpus/templates/plan/.agents/skills/visual-plan/SKILL.md +30 -11
  262. package/corpus/templates/plan/AGENTS.md +21 -1
  263. package/corpus/templates/plan/actions/get-visual-plan.ts +1 -1
  264. package/corpus/templates/plan/actions/patch-visual-plan-source.ts +161 -0
  265. package/corpus/templates/plan/actions/read-visual-plan-source.ts +1 -1
  266. package/corpus/templates/plan/actions/update-visual-plan.ts +126 -10
  267. package/corpus/templates/plan/app/hooks/use-plans.ts +2 -0
  268. package/corpus/templates/plan/app/i18n/en-US.ts +3 -3
  269. package/corpus/templates/plan/app/pages/PlansPage.tsx +65 -62
  270. package/corpus/templates/plan/changelog/2026-07-16-local-plan-previews-now-load-annotations-containing-html-lik.md +6 -0
  271. package/corpus/templates/plan/changelog/2026-07-16-plan-agents-now-prevent-stale-edits-from-overwriting-newer-p.md +6 -0
  272. package/corpus/templates/plan/server/plan-mdx.ts +75 -2
  273. package/corpus/templates/slides/.agents/skills/create-deck/SKILL.md +21 -4
  274. package/corpus/templates/slides/.agents/skills/creative-context/SKILL.md +122 -0
  275. package/corpus/templates/slides/.agents/skills/design-systems/SKILL.md +11 -0
  276. package/corpus/templates/slides/.agents/skills/slide-editing/SKILL.md +12 -3
  277. package/corpus/templates/slides/AGENTS.md +6 -0
  278. package/corpus/templates/slides/actions/add-slide.ts +230 -14
  279. package/corpus/templates/slides/actions/clone-context-slide.ts +302 -0
  280. package/corpus/templates/slides/actions/create-deck.ts +130 -0
  281. package/corpus/templates/slides/actions/extract-pdf.ts +6 -2
  282. package/corpus/templates/slides/actions/import-file.ts +5 -4
  283. package/corpus/templates/slides/actions/patch-deck.ts +200 -10
  284. package/corpus/templates/slides/actions/update-slide.ts +208 -15
  285. package/corpus/templates/slides/app/components/layout/Layout.tsx +2 -0
  286. package/corpus/templates/slides/app/components/visual-editor/CanvasCommentPins.tsx +16 -1
  287. package/corpus/templates/slides/app/i18n/ar-SA.ts +3 -0
  288. package/corpus/templates/slides/app/i18n/de-DE.ts +3 -0
  289. package/corpus/templates/slides/app/i18n/en-US.ts +6 -3
  290. package/corpus/templates/slides/app/i18n/es-ES.ts +3 -0
  291. package/corpus/templates/slides/app/i18n/fr-FR.ts +3 -0
  292. package/corpus/templates/slides/app/i18n/hi-IN.ts +3 -0
  293. package/corpus/templates/slides/app/i18n/ja-JP.ts +3 -0
  294. package/corpus/templates/slides/app/i18n/ko-KR.ts +3 -0
  295. package/corpus/templates/slides/app/i18n/pt-BR.ts +3 -0
  296. package/corpus/templates/slides/app/i18n/zh-CN.ts +3 -0
  297. package/corpus/templates/slides/app/i18n/zh-TW.ts +3 -0
  298. package/corpus/templates/slides/app/lib/validate-native-slide-html.ts +176 -0
  299. package/corpus/templates/slides/app/routes/agent.tsx +7 -1
  300. package/corpus/templates/slides/app/routes/settings.tsx +3 -0
  301. package/corpus/templates/slides/changelog/2026-07-16-creative-context-library.md +6 -0
  302. package/corpus/templates/slides/changelog/2026-07-16-google-slides-native-cloning.md +6 -0
  303. package/corpus/templates/slides/package.json +1 -0
  304. package/corpus/templates/slides/server/handlers/import/docx-parser.ts +4 -85
  305. package/corpus/templates/slides/server/handlers/import/pptx-parser.ts +7 -421
  306. package/corpus/templates/slides/server/plugins/creative-context.ts +166 -0
  307. package/dist/agent/engine/credential-errors.d.ts +1 -1
  308. package/dist/agent/engine/credential-errors.d.ts.map +1 -1
  309. package/dist/agent/engine/credential-errors.js +2 -2
  310. package/dist/agent/engine/credential-errors.js.map +1 -1
  311. package/dist/agent/production-agent.d.ts.map +1 -1
  312. package/dist/agent/production-agent.js +25 -0
  313. package/dist/agent/production-agent.js.map +1 -1
  314. package/dist/agent/run-store.d.ts.map +1 -1
  315. package/dist/agent/run-store.js +12 -2
  316. package/dist/agent/run-store.js.map +1 -1
  317. package/dist/cli/create.d.ts.map +1 -1
  318. package/dist/cli/create.js +1 -0
  319. package/dist/cli/create.js.map +1 -1
  320. package/dist/cli/skills-content/visual-plan-skill.d.ts +1 -1
  321. package/dist/cli/skills-content/visual-plan-skill.d.ts.map +1 -1
  322. package/dist/cli/skills-content/visual-plan-skill.js +30 -11
  323. package/dist/cli/skills-content/visual-plan-skill.js.map +1 -1
  324. package/dist/cli/templates-meta.d.ts.map +1 -1
  325. package/dist/cli/templates-meta.js +4 -3
  326. package/dist/cli/templates-meta.js.map +1 -1
  327. package/dist/client/AgentAskPopover.d.ts +11 -0
  328. package/dist/client/AgentAskPopover.d.ts.map +1 -0
  329. package/dist/client/AgentAskPopover.js +30 -0
  330. package/dist/client/AgentAskPopover.js.map +1 -0
  331. package/dist/client/AgentChatHome.d.ts +1 -1
  332. package/dist/client/AgentChatHome.d.ts.map +1 -1
  333. package/dist/client/AgentChatHome.js +2 -2
  334. package/dist/client/AgentChatHome.js.map +1 -1
  335. package/dist/client/AgentPanel.d.ts +9 -19
  336. package/dist/client/AgentPanel.d.ts.map +1 -1
  337. package/dist/client/AgentPanel.js +119 -80
  338. package/dist/client/AgentPanel.js.map +1 -1
  339. package/dist/client/AssistantChat.d.ts.map +1 -1
  340. package/dist/client/AssistantChat.js +4 -4
  341. package/dist/client/AssistantChat.js.map +1 -1
  342. package/dist/client/MultiTabAssistantChat.d.ts +3 -9
  343. package/dist/client/MultiTabAssistantChat.d.ts.map +1 -1
  344. package/dist/client/MultiTabAssistantChat.js +49 -189
  345. package/dist/client/MultiTabAssistantChat.js.map +1 -1
  346. package/dist/client/agent-chat-adapter.d.ts.map +1 -1
  347. package/dist/client/agent-chat-adapter.js +12 -1
  348. package/dist/client/agent-chat-adapter.js.map +1 -1
  349. package/dist/client/agent-page/AgentContextTab.d.ts.map +1 -1
  350. package/dist/client/agent-page/AgentContextTab.js +26 -28
  351. package/dist/client/agent-page/AgentContextTab.js.map +1 -1
  352. package/dist/client/agent-page/AgentEmptyState.d.ts +13 -0
  353. package/dist/client/agent-page/AgentEmptyState.d.ts.map +1 -0
  354. package/dist/client/agent-page/AgentEmptyState.js +6 -0
  355. package/dist/client/agent-page/AgentEmptyState.js.map +1 -0
  356. package/dist/client/agent-page/AgentJobsTab.d.ts +1 -1
  357. package/dist/client/agent-page/AgentJobsTab.d.ts.map +1 -1
  358. package/dist/client/agent-page/AgentJobsTab.js +90 -58
  359. package/dist/client/agent-page/AgentJobsTab.js.map +1 -1
  360. package/dist/client/agent-page/AgentTabFrame.d.ts +12 -0
  361. package/dist/client/agent-page/AgentTabFrame.d.ts.map +1 -0
  362. package/dist/client/agent-page/AgentTabFrame.js +7 -0
  363. package/dist/client/agent-page/AgentTabFrame.js.map +1 -0
  364. package/dist/client/agent-page/AgentTabsPage.d.ts +9 -1
  365. package/dist/client/agent-page/AgentTabsPage.d.ts.map +1 -1
  366. package/dist/client/agent-page/AgentTabsPage.js +135 -99
  367. package/dist/client/agent-page/AgentTabsPage.js.map +1 -1
  368. package/dist/client/agent-page/types.d.ts +1 -1
  369. package/dist/client/agent-page/types.d.ts.map +1 -1
  370. package/dist/client/agent-page/types.js.map +1 -1
  371. package/dist/client/analytics.d.ts +10 -3
  372. package/dist/client/analytics.d.ts.map +1 -1
  373. package/dist/client/analytics.js +37 -2
  374. package/dist/client/analytics.js.map +1 -1
  375. package/dist/client/chat/run-recovery.d.ts.map +1 -1
  376. package/dist/client/chat/run-recovery.js +10 -3
  377. package/dist/client/chat/run-recovery.js.map +1 -1
  378. package/dist/client/composer/PromptComposer.d.ts.map +1 -1
  379. package/dist/client/composer/PromptComposer.js +2 -2
  380. package/dist/client/composer/PromptComposer.js.map +1 -1
  381. package/dist/client/composer/TiptapComposer.d.ts.map +1 -1
  382. package/dist/client/composer/TiptapComposer.js +15 -3
  383. package/dist/client/composer/TiptapComposer.js.map +1 -1
  384. package/dist/client/dynamic-suggestions.js +3 -3
  385. package/dist/client/dynamic-suggestions.js.map +1 -1
  386. package/dist/client/index.d.ts +4 -3
  387. package/dist/client/index.d.ts.map +1 -1
  388. package/dist/client/index.js +3 -2
  389. package/dist/client/index.js.map +1 -1
  390. package/dist/client/resources/ResourceTree.d.ts +5 -1
  391. package/dist/client/resources/ResourceTree.d.ts.map +1 -1
  392. package/dist/client/resources/ResourceTree.js +74 -5
  393. package/dist/client/resources/ResourceTree.js.map +1 -1
  394. package/dist/client/resources/ResourcesPanel.d.ts +11 -2
  395. package/dist/client/resources/ResourcesPanel.d.ts.map +1 -1
  396. package/dist/client/resources/ResourcesPanel.js +105 -31
  397. package/dist/client/resources/ResourcesPanel.js.map +1 -1
  398. package/dist/client/session-replay.d.ts +28 -0
  399. package/dist/client/session-replay.d.ts.map +1 -1
  400. package/dist/client/session-replay.js +122 -8
  401. package/dist/client/session-replay.js.map +1 -1
  402. package/dist/client/settings/AutomationsSection.d.ts +3 -1
  403. package/dist/client/settings/AutomationsSection.d.ts.map +1 -1
  404. package/dist/client/settings/AutomationsSection.js +16 -6
  405. package/dist/client/settings/AutomationsSection.js.map +1 -1
  406. package/dist/client/settings/SettingsPanel.d.ts.map +1 -1
  407. package/dist/client/settings/SettingsPanel.js +3 -3
  408. package/dist/client/settings/SettingsPanel.js.map +1 -1
  409. package/dist/client/settings/SettingsTabsPage.d.ts +2 -0
  410. package/dist/client/settings/SettingsTabsPage.d.ts.map +1 -1
  411. package/dist/client/settings/SettingsTabsPage.js.map +1 -1
  412. package/dist/client/settings/agent-settings-search.js +2 -2
  413. package/dist/client/settings/agent-settings-search.js.map +1 -1
  414. package/dist/client/use-chat-threads.d.ts +2 -0
  415. package/dist/client/use-chat-threads.d.ts.map +1 -1
  416. package/dist/client/use-chat-threads.js.map +1 -1
  417. package/dist/connections/catalog.d.ts +41 -7
  418. package/dist/connections/catalog.d.ts.map +1 -1
  419. package/dist/connections/catalog.js +40 -7
  420. package/dist/connections/catalog.js.map +1 -1
  421. package/dist/db/index.d.ts +2 -2
  422. package/dist/db/index.d.ts.map +1 -1
  423. package/dist/db/index.js +2 -2
  424. package/dist/db/index.js.map +1 -1
  425. package/dist/deploy/build.d.ts.map +1 -1
  426. package/dist/deploy/build.js +17 -0
  427. package/dist/deploy/build.js.map +1 -1
  428. package/dist/extensions/actions.d.ts.map +1 -1
  429. package/dist/extensions/actions.js +85 -15
  430. package/dist/extensions/actions.js.map +1 -1
  431. package/dist/extensions/content-patch.d.ts +4 -0
  432. package/dist/extensions/content-patch.d.ts.map +1 -1
  433. package/dist/extensions/content-patch.js +18 -0
  434. package/dist/extensions/content-patch.js.map +1 -1
  435. package/dist/extensions/routes.d.ts.map +1 -1
  436. package/dist/extensions/routes.js +14 -0
  437. package/dist/extensions/routes.js.map +1 -1
  438. package/dist/extensions/store.d.ts +1 -0
  439. package/dist/extensions/store.d.ts.map +1 -1
  440. package/dist/extensions/store.js +4 -1
  441. package/dist/extensions/store.js.map +1 -1
  442. package/dist/index.d.ts +1 -1
  443. package/dist/index.d.ts.map +1 -1
  444. package/dist/index.js +1 -1
  445. package/dist/index.js.map +1 -1
  446. package/dist/ingestion/docx.d.ts +16 -0
  447. package/dist/ingestion/docx.d.ts.map +1 -0
  448. package/dist/ingestion/docx.js +129 -0
  449. package/dist/ingestion/docx.js.map +1 -0
  450. package/dist/ingestion/figma-node-to-html.d.ts +304 -0
  451. package/dist/ingestion/figma-node-to-html.d.ts.map +1 -0
  452. package/dist/ingestion/figma-node-to-html.js +1292 -0
  453. package/dist/ingestion/figma-node-to-html.js.map +1 -0
  454. package/dist/ingestion/figma.d.ts +115 -0
  455. package/dist/ingestion/figma.d.ts.map +1 -0
  456. package/dist/ingestion/figma.js +399 -0
  457. package/dist/ingestion/figma.js.map +1 -0
  458. package/dist/ingestion/index.d.ts +11 -0
  459. package/dist/ingestion/index.d.ts.map +1 -0
  460. package/dist/ingestion/index.js +11 -0
  461. package/dist/ingestion/index.js.map +1 -0
  462. package/dist/ingestion/media.d.ts +36 -0
  463. package/dist/ingestion/media.d.ts.map +1 -0
  464. package/dist/ingestion/media.js +178 -0
  465. package/dist/ingestion/media.js.map +1 -0
  466. package/dist/ingestion/notion.d.ts +12 -0
  467. package/dist/ingestion/notion.d.ts.map +1 -0
  468. package/dist/ingestion/notion.js +104 -0
  469. package/dist/ingestion/notion.js.map +1 -0
  470. package/dist/ingestion/office.d.ts +45 -0
  471. package/dist/ingestion/office.d.ts.map +1 -0
  472. package/dist/ingestion/office.js +141 -0
  473. package/dist/ingestion/office.js.map +1 -0
  474. package/dist/ingestion/orchestration.d.ts +52 -0
  475. package/dist/ingestion/orchestration.d.ts.map +1 -0
  476. package/dist/ingestion/orchestration.js +89 -0
  477. package/dist/ingestion/orchestration.js.map +1 -0
  478. package/dist/ingestion/pptx.d.ts +28 -0
  479. package/dist/ingestion/pptx.d.ts.map +1 -0
  480. package/dist/ingestion/pptx.js +255 -0
  481. package/dist/ingestion/pptx.js.map +1 -0
  482. package/dist/ingestion/selection.d.ts +20 -0
  483. package/dist/ingestion/selection.d.ts.map +1 -0
  484. package/dist/ingestion/selection.js +52 -0
  485. package/dist/ingestion/selection.js.map +1 -0
  486. package/dist/ingestion/website.d.ts +27 -0
  487. package/dist/ingestion/website.d.ts.map +1 -0
  488. package/dist/ingestion/website.js +100 -0
  489. package/dist/ingestion/website.js.map +1 -0
  490. package/dist/integrations/plugin.d.ts.map +1 -1
  491. package/dist/integrations/plugin.js +32 -27
  492. package/dist/integrations/plugin.js.map +1 -1
  493. package/dist/localization/default-messages.d.ts +22 -0
  494. package/dist/localization/default-messages.d.ts.map +1 -1
  495. package/dist/localization/default-messages.js +31 -9
  496. package/dist/localization/default-messages.js.map +1 -1
  497. package/dist/notifications/routes.d.ts +2 -2
  498. package/dist/observability/hosted-model-experiment.d.ts +39 -0
  499. package/dist/observability/hosted-model-experiment.d.ts.map +1 -0
  500. package/dist/observability/hosted-model-experiment.js +90 -0
  501. package/dist/observability/hosted-model-experiment.js.map +1 -0
  502. package/dist/observability/routes.d.ts +5 -5
  503. package/dist/observability/traces.d.ts.map +1 -1
  504. package/dist/observability/traces.js +5 -3
  505. package/dist/observability/traces.js.map +1 -1
  506. package/dist/provider-api/index.d.ts +35 -4
  507. package/dist/provider-api/index.d.ts.map +1 -1
  508. package/dist/provider-api/index.js +339 -8
  509. package/dist/provider-api/index.js.map +1 -1
  510. package/dist/scripts/agent-engines/list-agent-engines.d.ts.map +1 -1
  511. package/dist/scripts/agent-engines/list-agent-engines.js +18 -1
  512. package/dist/scripts/agent-engines/list-agent-engines.js.map +1 -1
  513. package/dist/search-utils/index.d.ts +12 -0
  514. package/dist/search-utils/index.d.ts.map +1 -0
  515. package/dist/search-utils/index.js +95 -0
  516. package/dist/search-utils/index.js.map +1 -0
  517. package/dist/secrets/register-framework-secrets.d.ts.map +1 -1
  518. package/dist/secrets/register-framework-secrets.js +57 -0
  519. package/dist/secrets/register-framework-secrets.js.map +1 -1
  520. package/dist/secrets/routes.d.ts +9 -9
  521. package/dist/server/action-discovery.d.ts +8 -0
  522. package/dist/server/action-discovery.d.ts.map +1 -1
  523. package/dist/server/action-discovery.js +26 -9
  524. package/dist/server/action-discovery.js.map +1 -1
  525. package/dist/server/agent-chat/framework-prompts.js +2 -2
  526. package/dist/server/agent-chat/framework-prompts.js.map +1 -1
  527. package/dist/server/agent-chat/prompt-resources.d.ts +19 -0
  528. package/dist/server/agent-chat/prompt-resources.d.ts.map +1 -1
  529. package/dist/server/agent-chat/prompt-resources.js +95 -0
  530. package/dist/server/agent-chat/prompt-resources.js.map +1 -1
  531. package/dist/server/agent-chat-plugin.d.ts.map +1 -1
  532. package/dist/server/agent-chat-plugin.js +7 -0
  533. package/dist/server/agent-chat-plugin.js.map +1 -1
  534. package/dist/server/core-routes-plugin.d.ts.map +1 -1
  535. package/dist/server/core-routes-plugin.js +5 -0
  536. package/dist/server/core-routes-plugin.js.map +1 -1
  537. package/dist/server/index.d.ts +5 -1
  538. package/dist/server/index.d.ts.map +1 -1
  539. package/dist/server/index.js +5 -1
  540. package/dist/server/index.js.map +1 -1
  541. package/dist/server/workspace-provider-oauth.d.ts +48 -0
  542. package/dist/server/workspace-provider-oauth.d.ts.map +1 -0
  543. package/dist/server/workspace-provider-oauth.js +415 -0
  544. package/dist/server/workspace-provider-oauth.js.map +1 -0
  545. package/dist/styles/agent-native.css +9 -0
  546. package/dist/templates/chat/app/i18n/en-US.ts +3 -3
  547. package/dist/templates/chat/app/lib/agent-page.tsx +10 -1
  548. package/dist/templates/default/app/i18n/en-US.ts +3 -3
  549. package/dist/templates/workspace-core/.agents/skills/extensions/SKILL.md +14 -5
  550. package/dist/templates/workspace-root/.env.example +12 -0
  551. package/dist/workspace-connections/index.d.ts +1 -0
  552. package/dist/workspace-connections/index.d.ts.map +1 -1
  553. package/dist/workspace-connections/index.js +1 -0
  554. package/dist/workspace-connections/index.js.map +1 -1
  555. package/dist/workspace-connections/lifecycle.d.ts +16 -0
  556. package/dist/workspace-connections/lifecycle.d.ts.map +1 -0
  557. package/dist/workspace-connections/lifecycle.js +14 -0
  558. package/dist/workspace-connections/lifecycle.js.map +1 -0
  559. package/dist/workspace-connections/store.d.ts.map +1 -1
  560. package/dist/workspace-connections/store.js +16 -0
  561. package/dist/workspace-connections/store.js.map +1 -1
  562. package/package.json +10 -3
  563. package/src/templates/chat/app/i18n/en-US.ts +3 -3
  564. package/src/templates/chat/app/lib/agent-page.spec.tsx +10 -1
  565. package/src/templates/chat/app/lib/agent-page.tsx +10 -1
  566. package/src/templates/default/app/i18n/en-US.ts +3 -3
  567. package/src/templates/workspace-core/.agents/skills/extensions/SKILL.md +14 -5
  568. package/src/templates/workspace-root/.env.example +12 -0
@@ -1 +1 @@
1
- {"version":3,"file":"run-recovery.js","sourceRoot":"","sources":["../../../src/client/chat/run-recovery.tsx"],"names":[],"mappings":"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","sourcesContent":["// Owns: run-error metadata extractors, recovery helpers, RunErrorRecoveryCard,\n// LoopLimitContinueCard, BuilderConnectCta, BuilderSetupCard, ApiKeyConnect,\n// PlanModeCallout, and getLoopLimitMetadata / getRunErrorMetadata exports used\n// by AssistantChatInner.\n\nimport {\n IconLoader2,\n IconCheck,\n IconCopy,\n IconX,\n IconChevronDown,\n IconExternalLink,\n IconGitFork,\n IconGauge,\n IconSettings,\n IconArrowRight,\n IconAlertTriangle,\n IconPlayerPlay,\n IconRefresh,\n IconPlus,\n IconClipboardList,\n} from \"@tabler/icons-react\";\nimport { useState, useEffect, useCallback, useRef } from \"react\";\n\nimport {\n saveAgentEngineApiKey,\n type AgentEngineProvider,\n} from \"../agent-engine-key.js\";\nimport { agentNativePath } from \"../api-path.js\";\nimport { writeClipboardText } from \"../clipboard.js\";\nimport { useBuilderConnectFlow } from \"../settings/useBuilderStatus.js\";\nimport { cn } from \"../utils.js\";\n\n// ─── Type definitions ─────────────────────────────────────────────────────────\n\nexport type LoopLimitInfo = { maxIterations?: number };\n\nexport type RunErrorInfo = {\n message: string;\n details?: string;\n errorCode?: string;\n runId?: string;\n recoverable?: boolean;\n};\n\ninterface AgentLoopSettingsResponse {\n maxIterations: number;\n defaultMaxIterations: number;\n minMaxIterations: number;\n maxMaxIterations: number;\n scope: \"org\" | \"user\" | \"default\";\n source: \"org\" | \"user\" | \"env\" | \"default\";\n canUpdate: boolean;\n orgName?: string | null;\n role?: string | null;\n}\n\n// ─── Metadata extractors ──────────────────────────────────────────────────────\n\nexport function getLoopLimitMetadata(message: unknown): LoopLimitInfo | null {\n const meta = (message as { metadata?: unknown })?.metadata as\n | {\n custom?: { loopLimit?: LoopLimitInfo };\n loopLimit?: LoopLimitInfo;\n }\n | undefined;\n const loopLimit = meta?.custom?.loopLimit ?? meta?.loopLimit;\n if (!loopLimit || typeof loopLimit !== \"object\") return null;\n return {\n ...(typeof loopLimit.maxIterations === \"number\"\n ? { maxIterations: loopLimit.maxIterations }\n : {}),\n };\n}\n\nexport function getRunErrorMetadata(message: unknown): RunErrorInfo | null {\n const meta = (message as { metadata?: unknown })?.metadata as\n | {\n custom?: { runError?: RunErrorInfo; runId?: unknown };\n runError?: RunErrorInfo;\n runId?: unknown;\n }\n | undefined;\n const runError = meta?.custom?.runError ?? meta?.runError;\n if (!runError || typeof runError !== \"object\") return null;\n const messageText =\n typeof runError.message === \"string\" ? runError.message : \"\";\n if (!messageText) return null;\n const runId =\n typeof runError.runId === \"string\"\n ? runError.runId\n : typeof meta?.custom?.runId === \"string\"\n ? meta.custom.runId\n : typeof meta?.runId === \"string\"\n ? meta.runId\n : undefined;\n return {\n message: messageText,\n ...(typeof runError.details === \"string\"\n ? { details: runError.details }\n : {}),\n ...(typeof runError.errorCode === \"string\"\n ? { errorCode: runError.errorCode }\n : {}),\n ...(runId ? { runId } : {}),\n ...(runError.recoverable ? { recoverable: true } : {}),\n };\n}\n\nexport function getRequestModeMetadata(\n message: unknown,\n): \"act\" | \"plan\" | null {\n const meta = (message as { metadata?: unknown })?.metadata as\n | {\n custom?: { requestMode?: unknown };\n requestMode?: unknown;\n }\n | undefined;\n const requestMode = meta?.custom?.requestMode ?? meta?.requestMode;\n return requestMode === \"act\" || requestMode === \"plan\" ? requestMode : null;\n}\n\n// ─── Run error classifiers ────────────────────────────────────────────────────\n\nfunction isBuilderReconnectRunError(info: RunErrorInfo): boolean {\n const code = (info.errorCode ?? \"\").toLowerCase();\n const message = info.message.toLowerCase();\n const isAuthCode =\n code === \"authentication_error\" ||\n code === \"unauthorized\" ||\n code === \"http_401\" ||\n code === \"http_403\";\n return (\n code === \"builder_auth_error\" ||\n message.includes(\"builder authentication failed\") ||\n (isAuthCode &&\n (message.includes(\"invalid token\") ||\n message.includes(\"personal access token\")))\n );\n}\n\nfunction isProviderQueryRunError(info: RunErrorInfo): boolean {\n const text = [info.errorCode, info.message, info.details]\n .filter(Boolean)\n .join(\"\\n\")\n .toLowerCase();\n return (\n text.includes(\"bigquery\") ||\n text.includes(\"sql\") ||\n text.includes(\"query\") ||\n text.includes(\"schema\") ||\n text.includes(\"syntax\") ||\n text.includes(\"unknown column\") ||\n text.includes(\"unknown table\") ||\n text.includes(\"type mismatch\")\n );\n}\n\nfunction isConnectionRecoveryRunError(info: RunErrorInfo): boolean {\n const code = (info.errorCode ?? \"\").toLowerCase();\n const message = info.message.toLowerCase();\n return (\n code === \"connection_error\" ||\n message.includes(\"connection kept failing\") ||\n message.includes(\"automatic recovery attempts\")\n );\n}\n\n// ─── BuilderConnectCta ────────────────────────────────────────────────────────\n// Renders a single row with left-aligned copy and a right-aligned action.\n// Click opens the Builder CLI-auth popup via the shared\n// `useBuilderConnectFlow` hook (which owns the synchronous window.open,\n// the 2s status poll, and the focus-refresh). On success the hook broadcasts\n// a config-change event so the chat clears its local `missingApiKey` gate.\n//\n// Desktop note: when this component runs inside the Electron shell, the\n// window.open call is intercepted by the main process's webview popup handler,\n// which opens the flow in an Electron BrowserWindow that shares the webview's\n// session. See packages/desktop-app/src/main/index.ts.\n\nexport function BuilderConnectCta({\n variant = \"primary\",\n onConnected,\n}: {\n variant?: \"primary\" | \"compact\";\n onConnected?: () => void;\n}) {\n const { configured, orgName, connecting, error, start } =\n useBuilderConnectFlow({\n trackingSource: \"assistant_chat_builder_cta\",\n onConnected,\n });\n\n if (variant === \"compact\") {\n if (configured) {\n return (\n <span className=\"agent-builder-setup-card__builder-button inline-flex h-8 items-center gap-1.5 whitespace-nowrap rounded-md border border-border bg-background px-2.5 text-[11px] font-medium text-foreground\">\n <IconCheck size={11} className=\"text-emerald-500\" />\n {orgName ? `Connected to ${orgName}` : \"Connected\"}\n </span>\n );\n }\n\n return (\n <div className=\"agent-builder-setup-card__builder-cta flex min-w-0 flex-col items-start gap-1 sm:items-end\">\n <button\n type=\"button\"\n onClick={() => start()}\n disabled={connecting}\n className=\"agent-builder-setup-card__builder-button inline-flex h-8 shrink-0 items-center gap-1 whitespace-nowrap rounded-md bg-foreground px-3 text-[11px] font-medium text-background hover:opacity-90 disabled:cursor-wait disabled:opacity-60\"\n aria-busy={connecting}\n >\n {connecting ? (\n <>\n <IconLoader2 size={10} className=\"animate-spin\" />\n Waiting…\n </>\n ) : (\n \"Connect Builder.io\"\n )}\n </button>\n {error && (\n <p className=\"max-w-[13rem] text-[10px] leading-snug text-destructive sm:text-right\">\n {error}\n </p>\n )}\n </div>\n );\n }\n\n const containerClass =\n \"flex items-center gap-3 rounded-md border border-border px-3 py-3\";\n\n if (configured) {\n return (\n <div className={containerClass}>\n <div className=\"min-w-0 flex-1\">\n <div className=\"text-xs font-medium text-foreground\">Builder.io</div>\n <p className=\"text-[11px] text-muted-foreground mt-0.5\">\n {orgName ? `Connected — ${orgName}` : \"Connected\"}\n </p>\n </div>\n <span className=\"ml-auto inline-flex items-center gap-1 shrink-0 rounded-md bg-emerald-500/10 px-2 py-0.5 text-[10px] font-medium text-emerald-500\">\n <IconCheck size={10} />\n Connected\n </span>\n </div>\n );\n }\n\n return (\n <div className={containerClass}>\n <div className=\"min-w-0 flex-1\">\n <div className=\"text-xs font-medium text-foreground\">\n Connect Builder.io\n </div>\n <p className=\"text-[11px] text-muted-foreground mt-0.5 max-w-[220px]\">\n Free credits for LLM, hosting, and more — no API key needed\n </p>\n {error && <p className=\"mt-1 text-[10px] text-destructive\">{error}</p>}\n </div>\n <button\n type=\"button\"\n onClick={() => start()}\n disabled={connecting}\n className=\"ml-auto inline-flex items-center gap-1 shrink-0 rounded-md bg-foreground px-3 py-1.5 text-[11px] font-medium no-underline text-background hover:opacity-90 disabled:opacity-60 disabled:cursor-wait\"\n aria-busy={connecting}\n >\n {connecting ? (\n <>\n <IconLoader2 size={10} className=\"animate-spin\" />\n Waiting…\n </>\n ) : (\n <>\n Connect\n <IconExternalLink size={10} />\n </>\n )}\n </button>\n </div>\n );\n}\n\n// ─── ApiKeyConnect ────────────────────────────────────────────────────────────\n\nconst API_KEY_PROVIDERS: Array<{\n value: AgentEngineProvider;\n label: string;\n placeholder: string;\n}> = [\n { value: \"anthropic\", label: \"Anthropic\", placeholder: \"sk-ant-…\" },\n { value: \"openai\", label: \"OpenAI\", placeholder: \"sk-…\" },\n];\n\nexport function ApiKeyConnect({ onConnected }: { onConnected?: () => void }) {\n const [provider, setProvider] = useState<AgentEngineProvider>(\"anthropic\");\n const [apiKey, setApiKey] = useState(\"\");\n const [saving, setSaving] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const active = API_KEY_PROVIDERS.find((p) => p.value === provider)!;\n\n const handleSave = useCallback(async () => {\n if (!apiKey.trim() || saving) return;\n setSaving(true);\n setError(null);\n try {\n await saveAgentEngineApiKey({ provider, apiKey });\n setApiKey(\"\");\n onConnected?.();\n } catch (err) {\n setError(err instanceof Error ? err.message : \"Could not save the key.\");\n } finally {\n setSaving(false);\n }\n }, [apiKey, onConnected, provider, saving]);\n\n return (\n <div className=\"rounded-md border border-border bg-background/60 p-3\">\n <div className=\"mb-2 text-[11px] font-medium text-foreground\">\n Use your own API key\n </div>\n <p className=\"mb-2.5 text-[11px] leading-relaxed text-muted-foreground\">\n Stored securely for this app only.\n </p>\n <div\n role=\"tablist\"\n aria-label=\"API key provider\"\n className=\"mb-2 inline-flex rounded-md border border-border bg-muted/40 p-0.5\"\n >\n {API_KEY_PROVIDERS.map((option) => {\n const selected = option.value === provider;\n return (\n <button\n key={option.value}\n type=\"button\"\n role=\"tab\"\n aria-selected={selected}\n onClick={() => {\n setProvider(option.value);\n setError(null);\n }}\n className={cn(\n \"rounded px-2.5 py-1 text-[11px] font-medium transition-colors\",\n selected\n ? \"bg-background text-foreground shadow-sm\"\n : \"text-muted-foreground hover:text-foreground\",\n )}\n >\n {option.label}\n </button>\n );\n })}\n </div>\n <div className=\"flex items-center gap-2\">\n <input\n type=\"password\"\n value={apiKey}\n autoComplete=\"off\"\n spellCheck={false}\n placeholder={active.placeholder}\n onChange={(e) => {\n setApiKey(e.target.value);\n if (error) setError(null);\n }}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") {\n e.preventDefault();\n void handleSave();\n }\n }}\n className=\"h-8 min-w-0 flex-1 rounded-md border border-input bg-background px-2.5 text-[12px] text-foreground placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-1 focus:ring-offset-background\"\n />\n <button\n type=\"button\"\n onClick={handleSave}\n disabled={!apiKey.trim() || saving}\n className=\"inline-flex h-8 shrink-0 items-center gap-1 rounded-md bg-foreground px-3 text-[11px] font-medium text-background hover:opacity-90 disabled:cursor-not-allowed disabled:opacity-60\"\n >\n {saving ? (\n <>\n <IconLoader2 size={11} className=\"animate-spin\" />\n Saving…\n </>\n ) : (\n \"Save\"\n )}\n </button>\n </div>\n {error ? (\n <p className=\"mt-2 text-[11px] text-destructive\">{error}</p>\n ) : null}\n </div>\n );\n}\n\n// ─── BuilderSetupCard ─────────────────────────────────────────────────────────\n\nexport type BuilderSetupCardLayout = \"default\" | \"sidebar\";\n\nexport function BuilderSetupContent({\n onConnected,\n layout = \"default\",\n}: {\n onConnected?: () => void;\n layout?: BuilderSetupCardLayout;\n}) {\n const [keyOpen, setKeyOpen] = useState(false);\n const sidebarLayout = layout === \"sidebar\";\n\n return (\n <div\n className={cn(\n \"agent-builder-setup-content\",\n sidebarLayout && \"agent-builder-setup-card--sidebar\",\n )}\n >\n <div\n className={cn(\n \"agent-builder-setup-card__content flex flex-col sm:flex-row sm:items-center sm:justify-between\",\n sidebarLayout ? \"gap-2\" : \"gap-3\",\n )}\n >\n <div className=\"agent-builder-setup-card__copy min-w-0\">\n <h3 className=\"text-[13px] font-medium text-foreground\">\n Connect AI\n </h3>\n <p className=\"mt-0.5 text-[11px] leading-relaxed text-muted-foreground\">\n Use Builder.io (free credits), or add an Anthropic/OpenAI key.\n </p>\n </div>\n <div\n className={cn(\n \"agent-builder-setup-card__actions flex shrink-0\",\n sidebarLayout\n ? \"flex-col items-start gap-1 sm:items-center\"\n : \"flex-nowrap items-center gap-2\",\n )}\n >\n <BuilderConnectCta variant=\"compact\" onConnected={onConnected} />\n <button\n type=\"button\"\n onClick={() => setKeyOpen((open) => !open)}\n className={cn(\n \"agent-builder-setup-card__key-button inline-flex shrink-0 items-center whitespace-nowrap rounded-md text-[11px] font-medium\",\n sidebarLayout\n ? \"h-7 border-0 bg-transparent px-0 text-muted-foreground hover:bg-transparent hover:text-foreground\"\n : \"h-8 border border-border bg-background px-3 text-foreground hover:bg-accent\",\n )}\n aria-expanded={keyOpen}\n >\n Use API key\n </button>\n </div>\n </div>\n\n {keyOpen ? (\n <div className=\"mt-3\">\n <ApiKeyConnect onConnected={onConnected} />\n </div>\n ) : null}\n </div>\n );\n}\n\nexport function BuilderSetupCard({\n onConnected,\n bouncePulse,\n fullWidth,\n layout = \"default\",\n}: {\n onConnected?: () => void;\n bouncePulse?: number;\n fullWidth?: boolean;\n layout?: BuilderSetupCardLayout;\n}) {\n const sidebarLayout = layout === \"sidebar\";\n\n const cardRef = useRef<HTMLDivElement>(null);\n // Replay the bounce keyframe each time bouncePulse increments. Toggling the\n // class off-then-on (with a forced reflow) restarts the animation even when\n // the value changes back-to-back.\n useEffect(() => {\n if (!bouncePulse) return;\n const el = cardRef.current;\n if (!el) return;\n el.classList.remove(\"animate-bounce-once\");\n void el.offsetWidth;\n el.classList.add(\"animate-bounce-once\");\n }, [bouncePulse]);\n\n return (\n <div\n ref={cardRef}\n className={cn(\n \"agent-builder-setup-card\",\n sidebarLayout && \"agent-builder-setup-card--sidebar\",\n fullWidth\n ? \"w-full px-3 pb-2\"\n : sidebarLayout\n ? \"mx-auto w-full max-w-[42rem] px-3 pb-2\"\n : \"mx-auto w-full max-w-[42rem] px-3 pb-2 sm:w-fit\",\n )}\n >\n <div\n className={cn(\n \"agent-builder-setup-card__panel rounded-lg border border-border/80 bg-background/80 shadow-sm backdrop-blur\",\n sidebarLayout ? \"p-2.5\" : \"p-3\",\n )}\n >\n <BuilderSetupContent onConnected={onConnected} layout={layout} />\n </div>\n </div>\n );\n}\n\n// ─── RunErrorRecoveryCard ─────────────────────────────────────────────────────\n\nexport function RunErrorRecoveryCard({\n info,\n onContinue,\n onRetry,\n onFork,\n onDismiss,\n}: {\n info: RunErrorInfo;\n onContinue: () => void;\n onRetry: () => void;\n onFork?: () => void | boolean | Promise<void | boolean>;\n onDismiss: () => void;\n}) {\n const [detailsOpen, setDetailsOpen] = useState(false);\n const [copyState, setCopyState] = useState<\"idle\" | \"copied\" | \"failed\">(\n \"idle\",\n );\n const [forking, setForking] = useState(false);\n const [forkError, setForkError] = useState<string | null>(null);\n const builderReconnect = useBuilderConnectFlow({\n trackingSource: \"assistant_chat_reconnect_error\",\n });\n const canRecover = info.recoverable === true;\n const shouldShowBuilderReconnect = isBuilderReconnectRunError(info);\n const builderReconnectResolved =\n shouldShowBuilderReconnect &&\n builderReconnect.hasFetchedStatus &&\n builderReconnect.configured;\n const isQueryError = isProviderQueryRunError(info);\n const isConnectionRecoveryError = isConnectionRecoveryRunError(info);\n const copyLabel =\n info.runId || info.errorCode || info.details ? \"Copy debug\" : \"Copy\";\n const copyDetails = useCallback(() => {\n const text = [\n info.message,\n info.errorCode ? `Code: ${info.errorCode}` : \"\",\n info.runId ? `Run: ${info.runId}` : \"\",\n info.details ? `Details:\\n${info.details}` : \"\",\n ]\n .filter(Boolean)\n .join(\"\\n\\n\");\n void writeClipboardText(text)\n .then((ok) => {\n setCopyState(ok ? \"copied\" : \"failed\");\n setTimeout(() => setCopyState(\"idle\"), 1600);\n })\n .catch(() => {\n setCopyState(\"failed\");\n setTimeout(() => setCopyState(\"idle\"), 1600);\n });\n }, [info]);\n const startNewChat = useCallback(() => {\n window.dispatchEvent(new CustomEvent(\"agent-chat:new-chat\"));\n onDismiss();\n }, [onDismiss]);\n\n const handleFork = useCallback(async () => {\n if (!onFork || forking) return;\n setForking(true);\n setForkError(null);\n try {\n const result = await onFork();\n if (result === false) {\n setForkError(\"Could not fork this chat. Try starting a new chat.\");\n }\n } catch {\n setForkError(\"Could not fork this chat. Try starting a new chat.\");\n } finally {\n setForking(false);\n }\n }, [forking, onFork]);\n\n useEffect(() => {\n if (builderReconnectResolved) {\n onDismiss();\n }\n }, [builderReconnectResolved, onDismiss]);\n\n return (\n <div className=\"rounded-lg border border-amber-500/25 bg-amber-500/[0.06] p-3 text-sm\">\n <div className=\"flex items-start gap-2\">\n <span className=\"mt-0.5 flex h-6 w-6 shrink-0 items-center justify-center rounded-md bg-amber-500/10 text-amber-700 dark:text-amber-300\">\n <IconAlertTriangle size={14} />\n </span>\n <div className=\"min-w-0 flex-1\">\n <div className=\"font-medium text-foreground\">\n {canRecover\n ? \"The agent stopped before finishing\"\n : \"The agent hit an error\"}\n </div>\n <p className=\"mt-1 text-xs leading-relaxed text-muted-foreground\">\n {info.message}\n </p>\n {shouldShowBuilderReconnect && !builderReconnectResolved && (\n <p className=\"mt-2 text-xs leading-relaxed text-muted-foreground\">\n The current Builder.io or model-provider credential was rejected.\n Reconnect Builder.io, then retry this message.\n </p>\n )}\n {isConnectionRecoveryError && (\n <p className=\"mt-2 text-xs leading-relaxed text-muted-foreground\">\n If retry lands on the same error, start a new chat session and\n continue from what already changed.\n </p>\n )}\n {(info.runId || info.errorCode || info.details) && (\n <button\n type=\"button\"\n onClick={() => setDetailsOpen((v) => !v)}\n className=\"mt-2 inline-flex items-center gap-1 text-[11px] font-medium text-muted-foreground hover:text-foreground\"\n >\n <IconChevronDown\n size={12}\n className={cn(\n \"transition-transform\",\n detailsOpen && \"rotate-180\",\n )}\n />\n Details\n </button>\n )}\n {detailsOpen && (\n <div className=\"mt-2 rounded-md border border-border/60 bg-background/70 p-2 font-mono text-[11px] leading-relaxed text-muted-foreground\">\n {info.runId && <div>run: {info.runId}</div>}\n {info.errorCode && <div>code: {info.errorCode}</div>}\n {info.details && (\n <pre className=\"mt-2 max-h-28 overflow-auto whitespace-pre-wrap break-words font-mono\">\n {info.details}\n </pre>\n )}\n </div>\n )}\n </div>\n <button\n type=\"button\"\n onClick={onDismiss}\n aria-label=\"Dismiss\"\n className=\"flex h-6 w-6 shrink-0 items-center justify-center rounded-md text-muted-foreground hover:bg-background/80 hover:text-foreground\"\n >\n <IconX size={14} />\n </button>\n </div>\n <div className=\"mt-3 flex flex-wrap items-center gap-2\">\n {shouldShowBuilderReconnect && !builderReconnectResolved && (\n <button\n type=\"button\"\n onClick={() => builderReconnect.start()}\n disabled={builderReconnect.connecting}\n className=\"inline-flex h-8 items-center gap-1.5 rounded-md bg-foreground px-3 text-xs font-medium text-background hover:opacity-90 disabled:cursor-wait disabled:opacity-70\"\n >\n {builderReconnect.connecting ? (\n <IconLoader2 size={13} className=\"animate-spin\" />\n ) : (\n <IconExternalLink size={13} />\n )}\n {builderReconnect.connecting\n ? \"Connecting Builder.io\"\n : \"Reconnect Builder.io\"}\n </button>\n )}\n {canRecover && (\n <>\n <button\n type=\"button\"\n onClick={onContinue}\n className=\"inline-flex h-8 items-center gap-1.5 rounded-md bg-foreground px-3 text-xs font-medium text-background hover:opacity-90\"\n >\n <IconPlayerPlay size={13} />\n Continue\n </button>\n <button\n type=\"button\"\n onClick={onRetry}\n className=\"inline-flex h-8 items-center gap-1.5 rounded-md border border-border bg-background px-3 text-xs font-medium text-foreground hover:bg-accent\"\n >\n <IconRefresh size={13} />\n {isQueryError ? \"Diagnose and retry\" : \"Retry\"}\n </button>\n </>\n )}\n {canRecover && isConnectionRecoveryError && (\n <button\n type=\"button\"\n onClick={startNewChat}\n className=\"inline-flex h-8 items-center gap-1.5 rounded-md border border-border bg-background px-3 text-xs font-medium text-foreground hover:bg-accent\"\n >\n <IconPlus size={13} />\n New chat\n </button>\n )}\n {canRecover && onFork && !isConnectionRecoveryError && (\n <button\n type=\"button\"\n onClick={handleFork}\n disabled={forking}\n title=\"Fork this conversation into a separate chat thread.\"\n aria-label=\"Fork this conversation into a separate chat thread\"\n className=\"inline-flex h-8 items-center gap-1.5 rounded-md border border-border bg-background px-3 text-xs font-medium text-foreground hover:bg-accent disabled:cursor-wait disabled:opacity-70\"\n >\n {forking ? (\n <IconLoader2 size={13} className=\"animate-spin\" />\n ) : (\n <IconGitFork size={13} />\n )}\n {forking ? \"Forking...\" : \"Fork chat\"}\n </button>\n )}\n <button\n type=\"button\"\n onClick={copyDetails}\n className=\"ml-auto inline-flex h-8 items-center gap-1.5 rounded-md px-2.5 text-xs font-medium text-muted-foreground hover:bg-background/80 hover:text-foreground\"\n >\n {copyState === \"copied\" ? (\n <IconCheck size={13} />\n ) : copyState === \"failed\" ? (\n <IconX size={13} />\n ) : (\n <IconCopy size={13} />\n )}\n <span aria-live=\"polite\">\n {copyState === \"copied\"\n ? \"Copied\"\n : copyState === \"failed\"\n ? \"Copy failed\"\n : copyLabel}\n </span>\n </button>\n </div>\n {shouldShowBuilderReconnect && builderReconnect.error && (\n <p className=\"mt-2 text-xs leading-relaxed text-red-500\">\n {builderReconnect.error}\n </p>\n )}\n {forkError && (\n <p className=\"mt-2 text-xs leading-relaxed text-red-500\">{forkError}</p>\n )}\n </div>\n );\n}\n\n// ─── LoopLimitContinueCard ────────────────────────────────────────────────────\n\nexport function LoopLimitContinueCard({\n info,\n onContinue,\n}: {\n info: LoopLimitInfo;\n onContinue: () => void;\n}) {\n const [settings, setSettings] = useState<AgentLoopSettingsResponse | null>(\n null,\n );\n const [value, setValue] = useState(\"\");\n const [saving, setSaving] = useState(false);\n const [saved, setSaved] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n const load = useCallback(() => {\n let cancelled = false;\n fetch(agentNativePath(\"/_agent-native/agent-loop-settings\"))\n .then((r) => (r.ok ? r.json() : null))\n .then((data: AgentLoopSettingsResponse | null) => {\n if (cancelled || !data) return;\n setSettings(data);\n setValue(String(data.maxIterations));\n })\n .catch(() => {\n if (!cancelled) setValue(String(info.maxIterations ?? \"\"));\n });\n return () => {\n cancelled = true;\n };\n }, [info.maxIterations]);\n\n useEffect(() => load(), [load]);\n\n const currentLimit = settings?.maxIterations ?? info.maxIterations;\n const numericValue = Number(value);\n const hasPendingChange =\n !!settings &&\n settings.canUpdate &&\n Number.isInteger(numericValue) &&\n numericValue !== settings.maxIterations;\n const scopeLabel =\n settings?.scope === \"org\"\n ? settings.orgName\n ? `${settings.orgName} org`\n : \"org\"\n : \"your account\";\n\n const saveLimit = useCallback(async (): Promise<boolean> => {\n if (!settings?.canUpdate) return false;\n setSaving(true);\n setSaved(false);\n setError(null);\n try {\n const res = await fetch(\n agentNativePath(\"/_agent-native/agent-loop-settings\"),\n {\n method: \"PUT\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ maxIterations: numericValue }),\n },\n );\n const body = await res.json().catch(() => ({}));\n if (!res.ok) {\n throw new Error(body?.error ?? `Save failed (${res.status})`);\n }\n setSettings(body as AgentLoopSettingsResponse);\n setValue(String((body as AgentLoopSettingsResponse).maxIterations));\n setSaved(true);\n window.dispatchEvent(\n new CustomEvent(\"agent-loop-settings:changed\", { detail: body }),\n );\n setTimeout(() => setSaved(false), 2000);\n return true;\n } catch (err) {\n setError(err instanceof Error ? err.message : \"Save failed\");\n return false;\n } finally {\n setSaving(false);\n }\n }, [numericValue, settings?.canUpdate]);\n\n const handleContinue = useCallback(async () => {\n if (hasPendingChange) {\n const ok = await saveLimit();\n if (!ok) return;\n }\n onContinue();\n }, [hasPendingChange, onContinue, saveLimit]);\n\n const openSettings = useCallback(() => {\n try {\n window.location.hash = \"agent-limits\";\n } catch {}\n window.dispatchEvent(new CustomEvent(\"agent-panel:open-settings\"));\n }, []);\n\n return (\n <div className=\"rounded-lg border border-amber-500/25 bg-amber-500/[0.06] px-3 py-3 shadow-sm\">\n <div className=\"flex items-start gap-2.5\">\n <span className=\"mt-0.5 flex h-6 w-6 shrink-0 items-center justify-center rounded-md bg-amber-500/10 text-amber-600 dark:text-amber-400\">\n <IconGauge size={14} />\n </span>\n <div className=\"min-w-0\">\n <p className=\"text-sm font-medium text-foreground\">\n Step limit reached\n </p>\n <p className=\"mt-0.5 text-xs leading-relaxed text-muted-foreground\">\n The agent used{\" \"}\n {currentLimit\n ? `${currentLimit.toLocaleString()} steps`\n : \"all available steps\"}\n . Keep going in a fresh turn, or raise the {scopeLabel} limit first.\n </p>\n </div>\n </div>\n\n <div className=\"mt-3 flex flex-wrap items-end gap-2\">\n <label className=\"min-w-[116px] flex-1 space-y-1\">\n <span className=\"text-[10px] font-medium uppercase tracking-wide text-muted-foreground\">\n Max steps\n </span>\n <input\n type=\"number\"\n min={settings?.minMaxIterations ?? 1}\n max={settings?.maxMaxIterations ?? 1000}\n value={value}\n disabled={!settings?.canUpdate || saving}\n onChange={(e) => {\n setValue(e.target.value);\n setError(null);\n }}\n className=\"h-8 w-full rounded-md border border-border bg-background px-2 text-xs text-foreground outline-none focus:ring-1 focus:ring-ring disabled:opacity-60\"\n />\n </label>\n <button\n type=\"button\"\n onClick={saveLimit}\n disabled={!hasPendingChange || saving}\n className=\"inline-flex h-8 items-center gap-1 rounded-md border border-border px-2.5 text-xs font-medium text-foreground hover:bg-accent disabled:opacity-50\"\n >\n {saving ? (\n <IconLoader2 size={12} className=\"animate-spin\" />\n ) : saved ? (\n <IconCheck size={12} />\n ) : (\n \"Save\"\n )}\n </button>\n <button\n type=\"button\"\n onClick={openSettings}\n className=\"inline-flex h-8 items-center gap-1 rounded-md border border-border px-2.5 text-xs font-medium text-muted-foreground hover:bg-accent hover:text-foreground\"\n >\n <IconSettings size={12} />\n Settings\n </button>\n <button\n type=\"button\"\n onClick={handleContinue}\n disabled={saving}\n className=\"ml-auto inline-flex h-8 items-center gap-1 rounded-md bg-foreground px-3 text-xs font-medium text-background hover:opacity-90 disabled:opacity-60\"\n >\n {hasPendingChange ? \"Save and keep going\" : \"Keep going\"}\n <IconArrowRight size={12} />\n </button>\n </div>\n\n {settings && !settings.canUpdate && (\n <p className=\"mt-2 text-[11px] text-muted-foreground\">\n Only organization owners and admins can change this limit.\n </p>\n )}\n {error && <p className=\"mt-2 text-[11px] text-destructive\">{error}</p>}\n </div>\n );\n}\n\n// ─── PlanModeCallout ──────────────────────────────────────────────────────────\n//\n// Renders inside the same width-constrained column as the composer (see\n// `.agent-plan-mode-callout` in agent-native.css and the fullscreen rule\n// injected by AgentPanel) so the pill hugs the composer's right edge in both\n// narrow sidebar chats and wide/centered page layouts, instead of floating\n// against the full pane width.\n\nexport function PlanModeCallout({\n canImplementPlan,\n onImplementPlan,\n onSwitchToAct,\n}: {\n canImplementPlan: boolean;\n onImplementPlan: () => void;\n onSwitchToAct: () => void;\n}) {\n return (\n <div className=\"agent-plan-mode-callout shrink-0 px-3\">\n <div className=\"ml-auto flex w-fit max-w-full items-center gap-2 rounded-full border border-border/70 bg-background/95 px-2 py-1.5 text-xs text-muted-foreground shadow-sm\">\n <IconClipboardList size={13} className=\"shrink-0\" />\n <span className=\"min-w-0 truncate\">\n {canImplementPlan ? \"Plan ready\" : \"Plan mode\"}\n </span>\n {canImplementPlan ? (\n <button\n type=\"button\"\n onClick={onImplementPlan}\n className=\"inline-flex h-6 shrink-0 items-center gap-1 rounded-full bg-foreground px-2.5 text-[11px] font-medium text-background hover:opacity-90\"\n >\n <IconPlayerPlay size={12} />\n Implement\n </button>\n ) : (\n <button\n type=\"button\"\n onClick={onSwitchToAct}\n className=\"inline-flex h-6 shrink-0 items-center gap-1 rounded-full border border-border bg-background px-2.5 text-[11px] font-medium text-foreground hover:bg-accent\"\n aria-label=\"Switch to Act mode\"\n >\n Act\n <IconArrowRight size={12} />\n </button>\n )}\n </div>\n </div>\n );\n}\n"]}
1
+ {"version":3,"file":"run-recovery.js","sourceRoot":"","sources":["../../../src/client/chat/run-recovery.tsx"],"names":[],"mappings":";AAAA,+EAA+E;AAC/E,6EAA6E;AAC7E,+EAA+E;AAC/E,yBAAyB;AAEzB,OAAO,EACL,WAAW,EACX,SAAS,EACT,QAAQ,EACR,KAAK,EACL,eAAe,EACf,gBAAgB,EAChB,WAAW,EACX,SAAS,EACT,YAAY,EACZ,cAAc,EACd,iBAAiB,EACjB,cAAc,EACd,WAAW,EACX,QAAQ,EACR,iBAAiB,GAClB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAEjE,OAAO,EACL,qBAAqB,GAEtB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAClC,OAAO,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AACxE,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AA0BjC,iFAAiF;AAEjF,MAAM,UAAU,oBAAoB,CAAC,OAAgB;IACnD,MAAM,IAAI,GAAI,OAAkC,EAAE,QAKrC,CAAC;IACd,MAAM,SAAS,GAAG,IAAI,EAAE,MAAM,EAAE,SAAS,IAAI,IAAI,EAAE,SAAS,CAAC;IAC7D,IAAI,CAAC,SAAS,IAAI,OAAO,SAAS,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC7D,OAAO;QACL,GAAG,CAAC,OAAO,SAAS,CAAC,aAAa,KAAK,QAAQ;YAC7C,CAAC,CAAC,EAAE,aAAa,EAAE,SAAS,CAAC,aAAa,EAAE;YAC5C,CAAC,CAAC,EAAE,CAAC;KACR,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,OAAgB;IAClD,MAAM,IAAI,GAAI,OAAkC,EAAE,QAMrC,CAAC;IACd,MAAM,QAAQ,GAAG,IAAI,EAAE,MAAM,EAAE,QAAQ,IAAI,IAAI,EAAE,QAAQ,CAAC;IAC1D,IAAI,CAAC,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC3D,MAAM,WAAW,GACf,OAAO,QAAQ,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;IAC/D,IAAI,CAAC,WAAW;QAAE,OAAO,IAAI,CAAC;IAC9B,MAAM,KAAK,GACT,OAAO,QAAQ,CAAC,KAAK,KAAK,QAAQ;QAChC,CAAC,CAAC,QAAQ,CAAC,KAAK;QAChB,CAAC,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,KAAK,KAAK,QAAQ;YACvC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK;YACnB,CAAC,CAAC,OAAO,IAAI,EAAE,KAAK,KAAK,QAAQ;gBAC/B,CAAC,CAAC,IAAI,CAAC,KAAK;gBACZ,CAAC,CAAC,SAAS,CAAC;IACpB,OAAO;QACL,OAAO,EAAE,WAAW;QACpB,GAAG,CAAC,OAAO,QAAQ,CAAC,OAAO,KAAK,QAAQ;YACtC,CAAC,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE;YAC/B,CAAC,CAAC,EAAE,CAAC;QACP,GAAG,CAAC,OAAO,QAAQ,CAAC,SAAS,KAAK,QAAQ;YACxC,CAAC,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,SAAS,EAAE;YACnC,CAAC,CAAC,EAAE,CAAC;QACP,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3B,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACvD,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,sBAAsB,CACpC,OAAgB;IAEhB,MAAM,IAAI,GAAI,OAAkC,EAAE,QAKrC,CAAC;IACd,MAAM,WAAW,GAAG,IAAI,EAAE,MAAM,EAAE,WAAW,IAAI,IAAI,EAAE,WAAW,CAAC;IACnE,OAAO,WAAW,KAAK,KAAK,IAAI,WAAW,KAAK,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC;AAC9E,CAAC;AAED,iFAAiF;AAEjF,SAAS,0BAA0B,CAAC,IAAkB;IACpD,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IAClD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;IAC3C,MAAM,UAAU,GACd,IAAI,KAAK,sBAAsB;QAC/B,IAAI,KAAK,cAAc;QACvB,IAAI,KAAK,UAAU;QACnB,IAAI,KAAK,UAAU,CAAC;IACtB,OAAO,CACL,IAAI,KAAK,oBAAoB;QAC7B,OAAO,CAAC,QAAQ,CAAC,+BAA+B,CAAC;QACjD,CAAC,UAAU;YACT,CAAC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC;gBAChC,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAChD,CAAC;AACJ,CAAC;AAED,SAAS,uBAAuB,CAAC,IAAkB;IACjD,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC;SACtD,MAAM,CAAC,OAAO,CAAC;SACf,IAAI,CAAC,IAAI,CAAC;SACV,WAAW,EAAE,CAAC;IACjB,OAAO,CACL,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC;QACzB,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QACpB,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;QACtB,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;QACvB,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;QACvB,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC;QAC/B,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC;QAC9B,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,CAC/B,CAAC;AACJ,CAAC;AAED,SAAS,4BAA4B,CAAC,IAAkB;IACtD,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IAClD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;IAC3C,OAAO,CACL,IAAI,KAAK,kBAAkB;QAC3B,OAAO,CAAC,QAAQ,CAAC,yBAAyB,CAAC;QAC3C,OAAO,CAAC,QAAQ,CAAC,6BAA6B,CAAC,CAChD,CAAC;AACJ,CAAC;AAED,iFAAiF;AACjF,0EAA0E;AAC1E,wDAAwD;AACxD,wEAAwE;AACxE,6EAA6E;AAC7E,2EAA2E;AAC3E,EAAE;AACF,wEAAwE;AACxE,+EAA+E;AAC/E,8EAA8E;AAC9E,uDAAuD;AAEvD,MAAM,UAAU,iBAAiB,CAAC,EAChC,OAAO,GAAG,SAAS,EACnB,WAAW,GAIZ;IACC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,EAAE,GACrD,qBAAqB,CAAC;QACpB,cAAc,EAAE,4BAA4B;QAC5C,WAAW;KACZ,CAAC,CAAC;IAEL,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,IAAI,UAAU,EAAE,CAAC;YACf,OAAO,CACL,gBAAM,SAAS,EAAC,8LAA8L,aAC5M,KAAC,SAAS,IAAC,IAAI,EAAE,EAAE,EAAE,SAAS,EAAC,kBAAkB,GAAG,EACnD,OAAO,CAAC,CAAC,CAAC,gBAAgB,OAAO,EAAE,CAAC,CAAC,CAAC,WAAW,IAC7C,CACR,CAAC;QACJ,CAAC;QAED,OAAO,CACL,eAAK,SAAS,EAAC,4FAA4F,aACzG,iBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,EACtB,QAAQ,EAAE,UAAU,EACpB,SAAS,EAAC,wOAAwO,eACvO,UAAU,YAEpB,UAAU,CAAC,CAAC,CAAC,CACZ,8BACE,KAAC,WAAW,IAAC,IAAI,EAAE,EAAE,EAAE,SAAS,EAAC,cAAc,GAAG,qBAEjD,CACJ,CAAC,CAAC,CAAC,CACF,oBAAoB,CACrB,GACM,EACR,KAAK,IAAI,CACR,YAAG,SAAS,EAAC,uEAAuE,YACjF,KAAK,GACJ,CACL,IACG,CACP,CAAC;IACJ,CAAC;IAED,MAAM,cAAc,GAClB,mEAAmE,CAAC;IAEtE,IAAI,UAAU,EAAE,CAAC;QACf,OAAO,CACL,eAAK,SAAS,EAAE,cAAc,aAC5B,eAAK,SAAS,EAAC,gBAAgB,aAC7B,cAAK,SAAS,EAAC,qCAAqC,2BAAiB,EACrE,YAAG,SAAS,EAAC,0CAA0C,YACpD,OAAO,CAAC,CAAC,CAAC,eAAe,OAAO,EAAE,CAAC,CAAC,CAAC,WAAW,GAC/C,IACA,EACN,gBAAM,SAAS,EAAC,mIAAmI,aACjJ,KAAC,SAAS,IAAC,IAAI,EAAE,EAAE,GAAI,iBAElB,IACH,CACP,CAAC;IACJ,CAAC;IAED,OAAO,CACL,eAAK,SAAS,EAAE,cAAc,aAC5B,eAAK,SAAS,EAAC,gBAAgB,aAC7B,cAAK,SAAS,EAAC,qCAAqC,mCAE9C,EACN,YAAG,SAAS,EAAC,wDAAwD,iFAEjE,EACH,KAAK,IAAI,YAAG,SAAS,EAAC,mCAAmC,YAAE,KAAK,GAAK,IAClE,EACN,iBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,EACtB,QAAQ,EAAE,UAAU,EACpB,SAAS,EAAC,qMAAqM,eACpM,UAAU,YAEpB,UAAU,CAAC,CAAC,CAAC,CACZ,8BACE,KAAC,WAAW,IAAC,IAAI,EAAE,EAAE,EAAE,SAAS,EAAC,cAAc,GAAG,qBAEjD,CACJ,CAAC,CAAC,CAAC,CACF,yCAEE,KAAC,gBAAgB,IAAC,IAAI,EAAE,EAAE,GAAI,IAC7B,CACJ,GACM,IACL,CACP,CAAC;AACJ,CAAC;AAED,iFAAiF;AAEjF,MAAM,iBAAiB,GAIlB;IACH,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE;IACnE,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE;CAC1D,CAAC;AAEF,MAAM,UAAU,aAAa,CAAC,EAAE,WAAW,EAAgC;IACzE,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC;IACjB,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAsB,WAAW,CAAC,CAAC;IAC3E,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IACzC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC5C,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAC;IACxD,MAAM,MAAM,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,QAAQ,CAAE,CAAC;IAEpE,MAAM,UAAU,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;QACxC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,MAAM;YAAE,OAAO;QACrC,SAAS,CAAC,IAAI,CAAC,CAAC;QAChB,QAAQ,CAAC,IAAI,CAAC,CAAC;QACf,IAAI,CAAC;YACH,MAAM,qBAAqB,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;YAClD,SAAS,CAAC,EAAE,CAAC,CAAC;YACd,WAAW,EAAE,EAAE,CAAC;QAClB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,QAAQ,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC;QAC3E,CAAC;gBAAS,CAAC;YACT,SAAS,CAAC,KAAK,CAAC,CAAC;QACnB,CAAC;IACH,CAAC,EAAE,CAAC,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;IAE5C,OAAO,CACL,eAAK,SAAS,EAAC,sDAAsD,aACnE,cAAK,SAAS,EAAC,8CAA8C,YAC1D,CAAC,CAAC,uBAAuB,EAAE,EAAE,YAAY,EAAE,mBAAmB,EAAE,CAAC,GAC9D,EACN,YAAG,SAAS,EAAC,0DAA0D,mDAEnE,EACJ,cACE,IAAI,EAAC,SAAS,gBACH,kBAAkB,EAC7B,SAAS,EAAC,oEAAoE,YAE7E,iBAAiB,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;oBAChC,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,KAAK,QAAQ,CAAC;oBAC3C,OAAO,CACL,iBAEE,IAAI,EAAC,QAAQ,EACb,IAAI,EAAC,KAAK,mBACK,QAAQ,EACvB,OAAO,EAAE,GAAG,EAAE;4BACZ,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;4BAC1B,QAAQ,CAAC,IAAI,CAAC,CAAC;wBACjB,CAAC,EACD,SAAS,EAAE,EAAE,CACX,+DAA+D,EAC/D,QAAQ;4BACN,CAAC,CAAC,yCAAyC;4BAC3C,CAAC,CAAC,6CAA6C,CAClD,YAEA,MAAM,CAAC,KAAK,IAfR,MAAM,CAAC,KAAK,CAgBV,CACV,CAAC;gBACJ,CAAC,CAAC,GACE,EACN,eAAK,SAAS,EAAC,yBAAyB,aACtC,gBACE,IAAI,EAAC,UAAU,EACf,KAAK,EAAE,MAAM,EACb,YAAY,EAAC,KAAK,EAClB,UAAU,EAAE,KAAK,EACjB,WAAW,EAAE,MAAM,CAAC,WAAW,EAC/B,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE;4BACd,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;4BAC1B,IAAI,KAAK;gCAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;wBAC5B,CAAC,EACD,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE;4BACf,IAAI,CAAC,CAAC,GAAG,KAAK,OAAO,EAAE,CAAC;gCACtB,CAAC,CAAC,cAAc,EAAE,CAAC;gCACnB,KAAK,UAAU,EAAE,CAAC;4BACpB,CAAC;wBACH,CAAC,EACD,SAAS,EAAC,uOAAuO,GACjP,EACF,iBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,UAAU,EACnB,QAAQ,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,MAAM,EAClC,SAAS,EAAC,oLAAoL,YAE7L,MAAM,CAAC,CAAC,CAAC,CACR,8BACE,KAAC,WAAW,IAAC,IAAI,EAAE,EAAE,EAAE,SAAS,EAAC,cAAc,GAAG,oBAEjD,CACJ,CAAC,CAAC,CAAC,CACF,MAAM,CACP,GACM,IACL,EACL,KAAK,CAAC,CAAC,CAAC,CACP,YAAG,SAAS,EAAC,mCAAmC,YAAE,KAAK,GAAK,CAC7D,CAAC,CAAC,CAAC,IAAI,IACJ,CACP,CAAC;AACJ,CAAC;AAMD,MAAM,UAAU,mBAAmB,CAAC,EAClC,WAAW,EACX,MAAM,GAAG,SAAS,GAInB;IACC,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC;IACjB,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC9C,MAAM,aAAa,GAAG,MAAM,KAAK,SAAS,CAAC;IAE3C,OAAO,CACL,eACE,SAAS,EAAE,EAAE,CACX,6BAA6B,EAC7B,aAAa,IAAI,mCAAmC,CACrD,aAED,eACE,SAAS,EAAE,EAAE,CACX,gGAAgG,EAChG,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAClC,aAED,eAAK,SAAS,EAAC,wCAAwC,aACrD,aAAI,SAAS,EAAC,yCAAyC,YACpD,CAAC,CAAC,sBAAsB,EAAE,EAAE,YAAY,EAAE,YAAY,EAAE,CAAC,GACvD,EACL,YAAG,SAAS,EAAC,0DAA0D,YACpE,CAAC,CAAC,6BAA6B,EAAE;oCAChC,YAAY,EACV,+DAA+D;iCAClE,CAAC,GACA,IACA,EACN,eACE,SAAS,EAAE,EAAE,CACX,iDAAiD,EACjD,aAAa;4BACX,CAAC,CAAC,4CAA4C;4BAC9C,CAAC,CAAC,gCAAgC,CACrC,aAED,KAAC,iBAAiB,IAAC,OAAO,EAAC,SAAS,EAAC,WAAW,EAAE,WAAW,GAAI,EACjE,iBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,EAC1C,SAAS,EAAE,EAAE,CACX,6HAA6H,EAC7H,aAAa;oCACX,CAAC,CAAC,mGAAmG;oCACrG,CAAC,CAAC,6EAA6E,CAClF,mBACc,OAAO,YAErB,CAAC,CAAC,uBAAuB,EAAE;oCAC1B,YAAY,EAAE,mBAAmB;iCAClC,CAAC,GACK,IACL,IACF,EAEL,OAAO,CAAC,CAAC,CAAC,CACT,cAAK,SAAS,EAAC,MAAM,YACnB,KAAC,aAAa,IAAC,WAAW,EAAE,WAAW,GAAI,GACvC,CACP,CAAC,CAAC,CAAC,IAAI,IACJ,CACP,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,EAC/B,WAAW,EACX,WAAW,EACX,SAAS,EACT,MAAM,GAAG,SAAS,GAMnB;IACC,MAAM,aAAa,GAAG,MAAM,KAAK,SAAS,CAAC;IAE3C,MAAM,OAAO,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAC;IAC7C,4EAA4E;IAC5E,4EAA4E;IAC5E,kCAAkC;IAClC,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,WAAW;YAAE,OAAO;QACzB,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;QAC3B,IAAI,CAAC,EAAE;YAAE,OAAO;QAChB,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC;QAC3C,KAAK,EAAE,CAAC,WAAW,CAAC;QACpB,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;IAC1C,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;IAElB,OAAO,CACL,cACE,GAAG,EAAE,OAAO,EACZ,SAAS,EAAE,EAAE,CACX,0BAA0B,EAC1B,aAAa,IAAI,mCAAmC,EACpD,SAAS;YACP,CAAC,CAAC,kBAAkB;YACpB,CAAC,CAAC,aAAa;gBACb,CAAC,CAAC,wCAAwC;gBAC1C,CAAC,CAAC,iDAAiD,CACxD,YAED,cACE,SAAS,EAAE,EAAE,CACX,6GAA6G,EAC7G,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAChC,YAED,KAAC,mBAAmB,IAAC,WAAW,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,GAAI,GAC7D,GACF,CACP,CAAC;AACJ,CAAC;AAED,iFAAiF;AAEjF,MAAM,UAAU,oBAAoB,CAAC,EACnC,IAAI,EACJ,UAAU,EACV,OAAO,EACP,MAAM,EACN,SAAS,GAOV;IACC,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IACtD,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CACxC,MAAM,CACP,CAAC;IACF,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC9C,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAC;IAChE,MAAM,gBAAgB,GAAG,qBAAqB,CAAC;QAC7C,cAAc,EAAE,gCAAgC;KACjD,CAAC,CAAC;IACH,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,KAAK,IAAI,CAAC;IAC7C,MAAM,0BAA0B,GAAG,0BAA0B,CAAC,IAAI,CAAC,CAAC;IACpE,MAAM,wBAAwB,GAC5B,0BAA0B;QAC1B,gBAAgB,CAAC,gBAAgB;QACjC,gBAAgB,CAAC,UAAU,CAAC;IAC9B,MAAM,YAAY,GAAG,uBAAuB,CAAC,IAAI,CAAC,CAAC;IACnD,MAAM,yBAAyB,GAAG,4BAA4B,CAAC,IAAI,CAAC,CAAC;IACrE,MAAM,SAAS,GACb,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC;IACvE,MAAM,WAAW,GAAG,WAAW,CAAC,GAAG,EAAE;QACnC,MAAM,IAAI,GAAG;YACX,IAAI,CAAC,OAAO;YACZ,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE;YAC/C,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE;YACtC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,aAAa,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE;SAChD;aACE,MAAM,CAAC,OAAO,CAAC;aACf,IAAI,CAAC,MAAM,CAAC,CAAC;QAChB,KAAK,kBAAkB,CAAC,IAAI,CAAC;aAC1B,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE;YACX,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;YACvC,UAAU,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC;QAC/C,CAAC,CAAC;aACD,KAAK,CAAC,GAAG,EAAE;YACV,YAAY,CAAC,QAAQ,CAAC,CAAC;YACvB,UAAU,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC;QAC/C,CAAC,CAAC,CAAC;IACP,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IACX,MAAM,YAAY,GAAG,WAAW,CAAC,GAAG,EAAE;QACpC,MAAM,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,qBAAqB,CAAC,CAAC,CAAC;QAC7D,SAAS,EAAE,CAAC;IACd,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;IAEhB,MAAM,UAAU,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;QACxC,IAAI,CAAC,MAAM,IAAI,OAAO;YAAE,OAAO;QAC/B,UAAU,CAAC,IAAI,CAAC,CAAC;QACjB,YAAY,CAAC,IAAI,CAAC,CAAC;QACnB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,MAAM,EAAE,CAAC;YAC9B,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;gBACrB,YAAY,CAAC,oDAAoD,CAAC,CAAC;YACrE,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,YAAY,CAAC,oDAAoD,CAAC,CAAC;QACrE,CAAC;gBAAS,CAAC;YACT,UAAU,CAAC,KAAK,CAAC,CAAC;QACpB,CAAC;IACH,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;IAEtB,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,wBAAwB,EAAE,CAAC;YAC7B,SAAS,EAAE,CAAC;QACd,CAAC;IACH,CAAC,EAAE,CAAC,wBAAwB,EAAE,SAAS,CAAC,CAAC,CAAC;IAE1C,OAAO,CACL,eAAK,SAAS,EAAC,uEAAuE,aACpF,eAAK,SAAS,EAAC,wBAAwB,aACrC,eAAM,SAAS,EAAC,wHAAwH,YACtI,KAAC,iBAAiB,IAAC,IAAI,EAAE,EAAE,GAAI,GAC1B,EACP,eAAK,SAAS,EAAC,gBAAgB,aAC7B,cAAK,SAAS,EAAC,6BAA6B,YACzC,UAAU;oCACT,CAAC,CAAC,oCAAoC;oCACtC,CAAC,CAAC,wBAAwB,GACxB,EACN,YAAG,SAAS,EAAC,oDAAoD,YAC9D,IAAI,CAAC,OAAO,GACX,EACH,0BAA0B,IAAI,CAAC,wBAAwB,IAAI,CAC1D,YAAG,SAAS,EAAC,oDAAoD,iIAG7D,CACL,EACA,yBAAyB,IAAI,CAC5B,YAAG,SAAS,EAAC,oDAAoD,mHAG7D,CACL,EACA,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CACjD,kBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,GAAG,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EACxC,SAAS,EAAC,yGAAyG,aAEnH,KAAC,eAAe,IACd,IAAI,EAAE,EAAE,EACR,SAAS,EAAE,EAAE,CACX,sBAAsB,EACtB,WAAW,IAAI,YAAY,CAC5B,GACD,eAEK,CACV,EACA,WAAW,IAAI,CACd,eAAK,SAAS,EAAC,0HAA0H,aACtI,IAAI,CAAC,KAAK,IAAI,mCAAW,IAAI,CAAC,KAAK,IAAO,EAC1C,IAAI,CAAC,SAAS,IAAI,oCAAY,IAAI,CAAC,SAAS,IAAO,EACnD,IAAI,CAAC,OAAO,IAAI,CACf,cAAK,SAAS,EAAC,uEAAuE,YACnF,IAAI,CAAC,OAAO,GACT,CACP,IACG,CACP,IACG,EACN,iBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,SAAS,gBACP,SAAS,EACpB,SAAS,EAAC,iIAAiI,YAE3I,KAAC,KAAK,IAAC,IAAI,EAAE,EAAE,GAAI,GACZ,IACL,EACN,eAAK,SAAS,EAAC,wCAAwC,aACpD,0BAA0B,IAAI,CAAC,wBAAwB,IAAI,CAC1D,kBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,GAAG,EAAE,CAAC,gBAAgB,CAAC,KAAK,EAAE,EACvC,QAAQ,EAAE,gBAAgB,CAAC,UAAU,EACrC,SAAS,EAAC,kKAAkK,aAE3K,gBAAgB,CAAC,UAAU,CAAC,CAAC,CAAC,CAC7B,KAAC,WAAW,IAAC,IAAI,EAAE,EAAE,EAAE,SAAS,EAAC,cAAc,GAAG,CACnD,CAAC,CAAC,CAAC,CACF,KAAC,gBAAgB,IAAC,IAAI,EAAE,EAAE,GAAI,CAC/B,EACA,gBAAgB,CAAC,UAAU;gCAC1B,CAAC,CAAC,uBAAuB;gCACzB,CAAC,CAAC,sBAAsB,IACnB,CACV,EACA,UAAU,IAAI,CACb,8BACE,kBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,UAAU,EACnB,SAAS,EAAC,yHAAyH,aAEnI,KAAC,cAAc,IAAC,IAAI,EAAE,EAAE,GAAI,gBAErB,EACT,kBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,OAAO,EAChB,SAAS,EAAC,6IAA6I,aAEvJ,KAAC,WAAW,IAAC,IAAI,EAAE,EAAE,GAAI,EACxB,YAAY,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,OAAO,IACvC,IACR,CACJ,EACA,UAAU,IAAI,yBAAyB,IAAI,CAC1C,kBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,YAAY,EACrB,SAAS,EAAC,6IAA6I,aAEvJ,KAAC,QAAQ,IAAC,IAAI,EAAE,EAAE,GAAI,gBAEf,CACV,EACA,UAAU,IAAI,MAAM,IAAI,CAAC,yBAAyB,IAAI,CACrD,kBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,UAAU,EACnB,QAAQ,EAAE,OAAO,EACjB,KAAK,EAAC,qDAAqD,gBAChD,oDAAoD,EAC/D,SAAS,EAAC,sLAAsL,aAE/L,OAAO,CAAC,CAAC,CAAC,CACT,KAAC,WAAW,IAAC,IAAI,EAAE,EAAE,EAAE,SAAS,EAAC,cAAc,GAAG,CACnD,CAAC,CAAC,CAAC,CACF,KAAC,WAAW,IAAC,IAAI,EAAE,EAAE,GAAI,CAC1B,EACA,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,WAAW,IAC9B,CACV,EACD,kBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,WAAW,EACpB,SAAS,EAAC,uJAAuJ,aAEhK,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,CACxB,KAAC,SAAS,IAAC,IAAI,EAAE,EAAE,GAAI,CACxB,CAAC,CAAC,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,CAC3B,KAAC,KAAK,IAAC,IAAI,EAAE,EAAE,GAAI,CACpB,CAAC,CAAC,CAAC,CACF,KAAC,QAAQ,IAAC,IAAI,EAAE,EAAE,GAAI,CACvB,EACD,4BAAgB,QAAQ,YACrB,SAAS,KAAK,QAAQ;oCACrB,CAAC,CAAC,QAAQ;oCACV,CAAC,CAAC,SAAS,KAAK,QAAQ;wCACtB,CAAC,CAAC,aAAa;wCACf,CAAC,CAAC,SAAS,GACV,IACA,IACL,EACL,0BAA0B,IAAI,gBAAgB,CAAC,KAAK,IAAI,CACvD,YAAG,SAAS,EAAC,2CAA2C,YACrD,gBAAgB,CAAC,KAAK,GACrB,CACL,EACA,SAAS,IAAI,CACZ,YAAG,SAAS,EAAC,2CAA2C,YAAE,SAAS,GAAK,CACzE,IACG,CACP,CAAC;AACJ,CAAC;AAED,iFAAiF;AAEjF,MAAM,UAAU,qBAAqB,CAAC,EACpC,IAAI,EACJ,UAAU,GAIX;IACC,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CACtC,IAAI,CACL,CAAC;IACF,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IACvC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC5C,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC1C,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAC;IAExD,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,EAAE;QAC5B,IAAI,SAAS,GAAG,KAAK,CAAC;QACtB,KAAK,CAAC,eAAe,CAAC,oCAAoC,CAAC,CAAC;aACzD,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;aACrC,IAAI,CAAC,CAAC,IAAsC,EAAE,EAAE;YAC/C,IAAI,SAAS,IAAI,CAAC,IAAI;gBAAE,OAAO;YAC/B,WAAW,CAAC,IAAI,CAAC,CAAC;YAClB,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;QACvC,CAAC,CAAC;aACD,KAAK,CAAC,GAAG,EAAE;YACV,IAAI,CAAC,SAAS;gBAAE,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,IAAI,EAAE,CAAC,CAAC,CAAC;QAC7D,CAAC,CAAC,CAAC;QACL,OAAO,GAAG,EAAE;YACV,SAAS,GAAG,IAAI,CAAC;QACnB,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;IAEzB,SAAS,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IAEhC,MAAM,YAAY,GAAG,QAAQ,EAAE,aAAa,IAAI,IAAI,CAAC,aAAa,CAAC;IACnE,MAAM,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IACnC,MAAM,gBAAgB,GACpB,CAAC,CAAC,QAAQ;QACV,QAAQ,CAAC,SAAS;QAClB,MAAM,CAAC,SAAS,CAAC,YAAY,CAAC;QAC9B,YAAY,KAAK,QAAQ,CAAC,aAAa,CAAC;IAC1C,MAAM,UAAU,GACd,QAAQ,EAAE,KAAK,KAAK,KAAK;QACvB,CAAC,CAAC,QAAQ,CAAC,OAAO;YAChB,CAAC,CAAC,GAAG,QAAQ,CAAC,OAAO,MAAM;YAC3B,CAAC,CAAC,KAAK;QACT,CAAC,CAAC,cAAc,CAAC;IAErB,MAAM,SAAS,GAAG,WAAW,CAAC,KAAK,IAAsB,EAAE;QACzD,IAAI,CAAC,QAAQ,EAAE,SAAS;YAAE,OAAO,KAAK,CAAC;QACvC,SAAS,CAAC,IAAI,CAAC,CAAC;QAChB,QAAQ,CAAC,KAAK,CAAC,CAAC;QAChB,QAAQ,CAAC,IAAI,CAAC,CAAC;QACf,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,KAAK,CACrB,eAAe,CAAC,oCAAoC,CAAC,EACrD;gBACE,MAAM,EAAE,KAAK;gBACb,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;gBAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,aAAa,EAAE,YAAY,EAAE,CAAC;aACtD,CACF,CAAC;YACF,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAChD,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;gBACZ,MAAM,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,IAAI,gBAAgB,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;YAChE,CAAC;YACD,WAAW,CAAC,IAAiC,CAAC,CAAC;YAC/C,QAAQ,CAAC,MAAM,CAAE,IAAkC,CAAC,aAAa,CAAC,CAAC,CAAC;YACpE,QAAQ,CAAC,IAAI,CAAC,CAAC;YACf,MAAM,CAAC,aAAa,CAClB,IAAI,WAAW,CAAC,6BAA6B,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CACjE,CAAC;YACF,UAAU,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC;YACxC,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,QAAQ,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC;YAC7D,OAAO,KAAK,CAAC;QACf,CAAC;gBAAS,CAAC;YACT,SAAS,CAAC,KAAK,CAAC,CAAC;QACnB,CAAC;IACH,CAAC,EAAE,CAAC,YAAY,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC;IAExC,MAAM,cAAc,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;QAC5C,IAAI,gBAAgB,EAAE,CAAC;YACrB,MAAM,EAAE,GAAG,MAAM,SAAS,EAAE,CAAC;YAC7B,IAAI,CAAC,EAAE;gBAAE,OAAO;QAClB,CAAC;QACD,UAAU,EAAE,CAAC;IACf,CAAC,EAAE,CAAC,gBAAgB,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC,CAAC;IAE9C,MAAM,YAAY,GAAG,WAAW,CAAC,GAAG,EAAE;QACpC,IAAI,CAAC;YACH,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,cAAc,CAAC;QACxC,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;QACV,MAAM,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,2BAA2B,CAAC,CAAC,CAAC;IACrE,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,CACL,eAAK,SAAS,EAAC,+EAA+E,aAC5F,eAAK,SAAS,EAAC,0BAA0B,aACvC,eAAM,SAAS,EAAC,wHAAwH,YACtI,KAAC,SAAS,IAAC,IAAI,EAAE,EAAE,GAAI,GAClB,EACP,eAAK,SAAS,EAAC,SAAS,aACtB,YAAG,SAAS,EAAC,qCAAqC,mCAE9C,EACJ,aAAG,SAAS,EAAC,sDAAsD,+BAClD,GAAG,EACjB,YAAY;wCACX,CAAC,CAAC,GAAG,YAAY,CAAC,cAAc,EAAE,QAAQ;wCAC1C,CAAC,CAAC,qBAAqB,iDACmB,UAAU,qBACpD,IACA,IACF,EAEN,eAAK,SAAS,EAAC,qCAAqC,aAClD,iBAAO,SAAS,EAAC,gCAAgC,aAC/C,eAAM,SAAS,EAAC,uEAAuE,0BAEhF,EACP,gBACE,IAAI,EAAC,QAAQ,EACb,GAAG,EAAE,QAAQ,EAAE,gBAAgB,IAAI,CAAC,EACpC,GAAG,EAAE,QAAQ,EAAE,gBAAgB,IAAI,IAAI,EACvC,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,CAAC,QAAQ,EAAE,SAAS,IAAI,MAAM,EACxC,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE;oCACd,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;oCACzB,QAAQ,CAAC,IAAI,CAAC,CAAC;gCACjB,CAAC,EACD,SAAS,EAAC,qJAAqJ,GAC/J,IACI,EACR,iBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,SAAS,EAClB,QAAQ,EAAE,CAAC,gBAAgB,IAAI,MAAM,EACrC,SAAS,EAAC,mJAAmJ,YAE5J,MAAM,CAAC,CAAC,CAAC,CACR,KAAC,WAAW,IAAC,IAAI,EAAE,EAAE,EAAE,SAAS,EAAC,cAAc,GAAG,CACnD,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CACV,KAAC,SAAS,IAAC,IAAI,EAAE,EAAE,GAAI,CACxB,CAAC,CAAC,CAAC,CACF,MAAM,CACP,GACM,EACT,kBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,YAAY,EACrB,SAAS,EAAC,2JAA2J,aAErK,KAAC,YAAY,IAAC,IAAI,EAAE,EAAE,GAAI,gBAEnB,EACT,kBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,cAAc,EACvB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAC,mJAAmJ,aAE5J,gBAAgB,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,YAAY,EACxD,KAAC,cAAc,IAAC,IAAI,EAAE,EAAE,GAAI,IACrB,IACL,EAEL,QAAQ,IAAI,CAAC,QAAQ,CAAC,SAAS,IAAI,CAClC,YAAG,SAAS,EAAC,wCAAwC,2EAEjD,CACL,EACA,KAAK,IAAI,YAAG,SAAS,EAAC,mCAAmC,YAAE,KAAK,GAAK,IAClE,CACP,CAAC;AACJ,CAAC;AAED,iFAAiF;AACjF,EAAE;AACF,wEAAwE;AACxE,yEAAyE;AACzE,6EAA6E;AAC7E,2EAA2E;AAC3E,+BAA+B;AAE/B,MAAM,UAAU,eAAe,CAAC,EAC9B,gBAAgB,EAChB,eAAe,EACf,aAAa,GAKd;IACC,OAAO,CACL,cAAK,SAAS,EAAC,uCAAuC,YACpD,eAAK,SAAS,EAAC,4JAA4J,aACzK,KAAC,iBAAiB,IAAC,IAAI,EAAE,EAAE,EAAE,SAAS,EAAC,UAAU,GAAG,EACpD,eAAM,SAAS,EAAC,kBAAkB,YAC/B,gBAAgB,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,WAAW,GACzC,EACN,gBAAgB,CAAC,CAAC,CAAC,CAClB,kBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,eAAe,EACxB,SAAS,EAAC,wIAAwI,aAElJ,KAAC,cAAc,IAAC,IAAI,EAAE,EAAE,GAAI,iBAErB,CACV,CAAC,CAAC,CAAC,CACF,kBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,aAAa,EACtB,SAAS,EAAC,4JAA4J,gBAC3J,oBAAoB,oBAG/B,KAAC,cAAc,IAAC,IAAI,EAAE,EAAE,GAAI,IACrB,CACV,IACG,GACF,CACP,CAAC;AACJ,CAAC","sourcesContent":["// Owns: run-error metadata extractors, recovery helpers, RunErrorRecoveryCard,\n// LoopLimitContinueCard, BuilderConnectCta, BuilderSetupCard, ApiKeyConnect,\n// PlanModeCallout, and getLoopLimitMetadata / getRunErrorMetadata exports used\n// by AssistantChatInner.\n\nimport {\n IconLoader2,\n IconCheck,\n IconCopy,\n IconX,\n IconChevronDown,\n IconExternalLink,\n IconGitFork,\n IconGauge,\n IconSettings,\n IconArrowRight,\n IconAlertTriangle,\n IconPlayerPlay,\n IconRefresh,\n IconPlus,\n IconClipboardList,\n} from \"@tabler/icons-react\";\nimport { useState, useEffect, useCallback, useRef } from \"react\";\n\nimport {\n saveAgentEngineApiKey,\n type AgentEngineProvider,\n} from \"../agent-engine-key.js\";\nimport { agentNativePath } from \"../api-path.js\";\nimport { writeClipboardText } from \"../clipboard.js\";\nimport { useT } from \"../i18n.js\";\nimport { useBuilderConnectFlow } from \"../settings/useBuilderStatus.js\";\nimport { cn } from \"../utils.js\";\n\n// ─── Type definitions ─────────────────────────────────────────────────────────\n\nexport type LoopLimitInfo = { maxIterations?: number };\n\nexport type RunErrorInfo = {\n message: string;\n details?: string;\n errorCode?: string;\n runId?: string;\n recoverable?: boolean;\n};\n\ninterface AgentLoopSettingsResponse {\n maxIterations: number;\n defaultMaxIterations: number;\n minMaxIterations: number;\n maxMaxIterations: number;\n scope: \"org\" | \"user\" | \"default\";\n source: \"org\" | \"user\" | \"env\" | \"default\";\n canUpdate: boolean;\n orgName?: string | null;\n role?: string | null;\n}\n\n// ─── Metadata extractors ──────────────────────────────────────────────────────\n\nexport function getLoopLimitMetadata(message: unknown): LoopLimitInfo | null {\n const meta = (message as { metadata?: unknown })?.metadata as\n | {\n custom?: { loopLimit?: LoopLimitInfo };\n loopLimit?: LoopLimitInfo;\n }\n | undefined;\n const loopLimit = meta?.custom?.loopLimit ?? meta?.loopLimit;\n if (!loopLimit || typeof loopLimit !== \"object\") return null;\n return {\n ...(typeof loopLimit.maxIterations === \"number\"\n ? { maxIterations: loopLimit.maxIterations }\n : {}),\n };\n}\n\nexport function getRunErrorMetadata(message: unknown): RunErrorInfo | null {\n const meta = (message as { metadata?: unknown })?.metadata as\n | {\n custom?: { runError?: RunErrorInfo; runId?: unknown };\n runError?: RunErrorInfo;\n runId?: unknown;\n }\n | undefined;\n const runError = meta?.custom?.runError ?? meta?.runError;\n if (!runError || typeof runError !== \"object\") return null;\n const messageText =\n typeof runError.message === \"string\" ? runError.message : \"\";\n if (!messageText) return null;\n const runId =\n typeof runError.runId === \"string\"\n ? runError.runId\n : typeof meta?.custom?.runId === \"string\"\n ? meta.custom.runId\n : typeof meta?.runId === \"string\"\n ? meta.runId\n : undefined;\n return {\n message: messageText,\n ...(typeof runError.details === \"string\"\n ? { details: runError.details }\n : {}),\n ...(typeof runError.errorCode === \"string\"\n ? { errorCode: runError.errorCode }\n : {}),\n ...(runId ? { runId } : {}),\n ...(runError.recoverable ? { recoverable: true } : {}),\n };\n}\n\nexport function getRequestModeMetadata(\n message: unknown,\n): \"act\" | \"plan\" | null {\n const meta = (message as { metadata?: unknown })?.metadata as\n | {\n custom?: { requestMode?: unknown };\n requestMode?: unknown;\n }\n | undefined;\n const requestMode = meta?.custom?.requestMode ?? meta?.requestMode;\n return requestMode === \"act\" || requestMode === \"plan\" ? requestMode : null;\n}\n\n// ─── Run error classifiers ────────────────────────────────────────────────────\n\nfunction isBuilderReconnectRunError(info: RunErrorInfo): boolean {\n const code = (info.errorCode ?? \"\").toLowerCase();\n const message = info.message.toLowerCase();\n const isAuthCode =\n code === \"authentication_error\" ||\n code === \"unauthorized\" ||\n code === \"http_401\" ||\n code === \"http_403\";\n return (\n code === \"builder_auth_error\" ||\n message.includes(\"builder authentication failed\") ||\n (isAuthCode &&\n (message.includes(\"invalid token\") ||\n message.includes(\"personal access token\")))\n );\n}\n\nfunction isProviderQueryRunError(info: RunErrorInfo): boolean {\n const text = [info.errorCode, info.message, info.details]\n .filter(Boolean)\n .join(\"\\n\")\n .toLowerCase();\n return (\n text.includes(\"bigquery\") ||\n text.includes(\"sql\") ||\n text.includes(\"query\") ||\n text.includes(\"schema\") ||\n text.includes(\"syntax\") ||\n text.includes(\"unknown column\") ||\n text.includes(\"unknown table\") ||\n text.includes(\"type mismatch\")\n );\n}\n\nfunction isConnectionRecoveryRunError(info: RunErrorInfo): boolean {\n const code = (info.errorCode ?? \"\").toLowerCase();\n const message = info.message.toLowerCase();\n return (\n code === \"connection_error\" ||\n message.includes(\"connection kept failing\") ||\n message.includes(\"automatic recovery attempts\")\n );\n}\n\n// ─── BuilderConnectCta ────────────────────────────────────────────────────────\n// Renders a single row with left-aligned copy and a right-aligned action.\n// Click opens the Builder CLI-auth popup via the shared\n// `useBuilderConnectFlow` hook (which owns the synchronous window.open,\n// the 2s status poll, and the focus-refresh). On success the hook broadcasts\n// a config-change event so the chat clears its local `missingApiKey` gate.\n//\n// Desktop note: when this component runs inside the Electron shell, the\n// window.open call is intercepted by the main process's webview popup handler,\n// which opens the flow in an Electron BrowserWindow that shares the webview's\n// session. See packages/desktop-app/src/main/index.ts.\n\nexport function BuilderConnectCta({\n variant = \"primary\",\n onConnected,\n}: {\n variant?: \"primary\" | \"compact\";\n onConnected?: () => void;\n}) {\n const { configured, orgName, connecting, error, start } =\n useBuilderConnectFlow({\n trackingSource: \"assistant_chat_builder_cta\",\n onConnected,\n });\n\n if (variant === \"compact\") {\n if (configured) {\n return (\n <span className=\"agent-builder-setup-card__builder-button inline-flex h-8 items-center gap-1.5 whitespace-nowrap rounded-md border border-border bg-background px-2.5 text-[11px] font-medium text-foreground\">\n <IconCheck size={11} className=\"text-emerald-500\" />\n {orgName ? `Connected to ${orgName}` : \"Connected\"}\n </span>\n );\n }\n\n return (\n <div className=\"agent-builder-setup-card__builder-cta flex min-w-0 flex-col items-start gap-1 sm:items-end\">\n <button\n type=\"button\"\n onClick={() => start()}\n disabled={connecting}\n className=\"agent-builder-setup-card__builder-button inline-flex h-8 shrink-0 items-center gap-1 whitespace-nowrap rounded-md bg-foreground px-3 text-[11px] font-medium text-background hover:opacity-90 disabled:cursor-wait disabled:opacity-60\"\n aria-busy={connecting}\n >\n {connecting ? (\n <>\n <IconLoader2 size={10} className=\"animate-spin\" />\n Waiting…\n </>\n ) : (\n \"Connect Builder.io\"\n )}\n </button>\n {error && (\n <p className=\"max-w-[13rem] text-[10px] leading-snug text-destructive sm:text-right\">\n {error}\n </p>\n )}\n </div>\n );\n }\n\n const containerClass =\n \"flex items-center gap-3 rounded-md border border-border px-3 py-3\";\n\n if (configured) {\n return (\n <div className={containerClass}>\n <div className=\"min-w-0 flex-1\">\n <div className=\"text-xs font-medium text-foreground\">Builder.io</div>\n <p className=\"text-[11px] text-muted-foreground mt-0.5\">\n {orgName ? `Connected — ${orgName}` : \"Connected\"}\n </p>\n </div>\n <span className=\"ml-auto inline-flex items-center gap-1 shrink-0 rounded-md bg-emerald-500/10 px-2 py-0.5 text-[10px] font-medium text-emerald-500\">\n <IconCheck size={10} />\n Connected\n </span>\n </div>\n );\n }\n\n return (\n <div className={containerClass}>\n <div className=\"min-w-0 flex-1\">\n <div className=\"text-xs font-medium text-foreground\">\n Connect Builder.io\n </div>\n <p className=\"text-[11px] text-muted-foreground mt-0.5 max-w-[220px]\">\n Free credits for LLM, hosting, and more — no API key needed\n </p>\n {error && <p className=\"mt-1 text-[10px] text-destructive\">{error}</p>}\n </div>\n <button\n type=\"button\"\n onClick={() => start()}\n disabled={connecting}\n className=\"ml-auto inline-flex items-center gap-1 shrink-0 rounded-md bg-foreground px-3 py-1.5 text-[11px] font-medium no-underline text-background hover:opacity-90 disabled:opacity-60 disabled:cursor-wait\"\n aria-busy={connecting}\n >\n {connecting ? (\n <>\n <IconLoader2 size={10} className=\"animate-spin\" />\n Waiting…\n </>\n ) : (\n <>\n Connect\n <IconExternalLink size={10} />\n </>\n )}\n </button>\n </div>\n );\n}\n\n// ─── ApiKeyConnect ────────────────────────────────────────────────────────────\n\nconst API_KEY_PROVIDERS: Array<{\n value: AgentEngineProvider;\n label: string;\n placeholder: string;\n}> = [\n { value: \"anthropic\", label: \"Anthropic\", placeholder: \"sk-ant-…\" },\n { value: \"openai\", label: \"OpenAI\", placeholder: \"sk-…\" },\n];\n\nexport function ApiKeyConnect({ onConnected }: { onConnected?: () => void }) {\n const t = useT();\n const [provider, setProvider] = useState<AgentEngineProvider>(\"anthropic\");\n const [apiKey, setApiKey] = useState(\"\");\n const [saving, setSaving] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const active = API_KEY_PROVIDERS.find((p) => p.value === provider)!;\n\n const handleSave = useCallback(async () => {\n if (!apiKey.trim() || saving) return;\n setSaving(true);\n setError(null);\n try {\n await saveAgentEngineApiKey({ provider, apiKey });\n setApiKey(\"\");\n onConnected?.();\n } catch (err) {\n setError(err instanceof Error ? err.message : \"Could not save the key.\");\n } finally {\n setSaving(false);\n }\n }, [apiKey, onConnected, provider, saving]);\n\n return (\n <div className=\"rounded-md border border-border bg-background/60 p-3\">\n <div className=\"mb-2 text-[11px] font-medium text-foreground\">\n {t(\"agentPanel.addOwnKeys\", { defaultValue: \"Add your own keys\" })}\n </div>\n <p className=\"mb-2.5 text-[11px] leading-relaxed text-muted-foreground\">\n Stored securely for this app only.\n </p>\n <div\n role=\"tablist\"\n aria-label=\"API key provider\"\n className=\"mb-2 inline-flex rounded-md border border-border bg-muted/40 p-0.5\"\n >\n {API_KEY_PROVIDERS.map((option) => {\n const selected = option.value === provider;\n return (\n <button\n key={option.value}\n type=\"button\"\n role=\"tab\"\n aria-selected={selected}\n onClick={() => {\n setProvider(option.value);\n setError(null);\n }}\n className={cn(\n \"rounded px-2.5 py-1 text-[11px] font-medium transition-colors\",\n selected\n ? \"bg-background text-foreground shadow-sm\"\n : \"text-muted-foreground hover:text-foreground\",\n )}\n >\n {option.label}\n </button>\n );\n })}\n </div>\n <div className=\"flex items-center gap-2\">\n <input\n type=\"password\"\n value={apiKey}\n autoComplete=\"off\"\n spellCheck={false}\n placeholder={active.placeholder}\n onChange={(e) => {\n setApiKey(e.target.value);\n if (error) setError(null);\n }}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") {\n e.preventDefault();\n void handleSave();\n }\n }}\n className=\"h-8 min-w-0 flex-1 rounded-md border border-input bg-background px-2.5 text-[12px] text-foreground placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-1 focus:ring-offset-background\"\n />\n <button\n type=\"button\"\n onClick={handleSave}\n disabled={!apiKey.trim() || saving}\n className=\"inline-flex h-8 shrink-0 items-center gap-1 rounded-md bg-foreground px-3 text-[11px] font-medium text-background hover:opacity-90 disabled:cursor-not-allowed disabled:opacity-60\"\n >\n {saving ? (\n <>\n <IconLoader2 size={11} className=\"animate-spin\" />\n Saving…\n </>\n ) : (\n \"Save\"\n )}\n </button>\n </div>\n {error ? (\n <p className=\"mt-2 text-[11px] text-destructive\">{error}</p>\n ) : null}\n </div>\n );\n}\n\n// ─── BuilderSetupCard ─────────────────────────────────────────────────────────\n\nexport type BuilderSetupCardLayout = \"default\" | \"sidebar\";\n\nexport function BuilderSetupContent({\n onConnected,\n layout = \"default\",\n}: {\n onConnected?: () => void;\n layout?: BuilderSetupCardLayout;\n}) {\n const t = useT();\n const [keyOpen, setKeyOpen] = useState(false);\n const sidebarLayout = layout === \"sidebar\";\n\n return (\n <div\n className={cn(\n \"agent-builder-setup-content\",\n sidebarLayout && \"agent-builder-setup-card--sidebar\",\n )}\n >\n <div\n className={cn(\n \"agent-builder-setup-card__content flex flex-col sm:flex-row sm:items-center sm:justify-between\",\n sidebarLayout ? \"gap-2\" : \"gap-3\",\n )}\n >\n <div className=\"agent-builder-setup-card__copy min-w-0\">\n <h3 className=\"text-[13px] font-medium text-foreground\">\n {t(\"agentPanel.connectAi\", { defaultValue: \"Connect AI\" })}\n </h3>\n <p className=\"mt-0.5 text-[11px] leading-relaxed text-muted-foreground\">\n {t(\"agentPanel.builderOrOwnKeys\", {\n defaultValue:\n \"Use Builder.io (free credits), or add your own provider keys.\",\n })}\n </p>\n </div>\n <div\n className={cn(\n \"agent-builder-setup-card__actions flex shrink-0\",\n sidebarLayout\n ? \"flex-col items-start gap-1 sm:items-center\"\n : \"flex-nowrap items-center gap-2\",\n )}\n >\n <BuilderConnectCta variant=\"compact\" onConnected={onConnected} />\n <button\n type=\"button\"\n onClick={() => setKeyOpen((open) => !open)}\n className={cn(\n \"agent-builder-setup-card__key-button inline-flex shrink-0 items-center whitespace-nowrap rounded-md text-[11px] font-medium\",\n sidebarLayout\n ? \"h-7 border-0 bg-transparent px-0 text-muted-foreground hover:bg-transparent hover:text-foreground\"\n : \"h-8 border border-border bg-background px-3 text-foreground hover:bg-accent\",\n )}\n aria-expanded={keyOpen}\n >\n {t(\"agentPanel.addOwnKeys\", {\n defaultValue: \"Add your own keys\",\n })}\n </button>\n </div>\n </div>\n\n {keyOpen ? (\n <div className=\"mt-3\">\n <ApiKeyConnect onConnected={onConnected} />\n </div>\n ) : null}\n </div>\n );\n}\n\nexport function BuilderSetupCard({\n onConnected,\n bouncePulse,\n fullWidth,\n layout = \"default\",\n}: {\n onConnected?: () => void;\n bouncePulse?: number;\n fullWidth?: boolean;\n layout?: BuilderSetupCardLayout;\n}) {\n const sidebarLayout = layout === \"sidebar\";\n\n const cardRef = useRef<HTMLDivElement>(null);\n // Replay the bounce keyframe each time bouncePulse increments. Toggling the\n // class off-then-on (with a forced reflow) restarts the animation even when\n // the value changes back-to-back.\n useEffect(() => {\n if (!bouncePulse) return;\n const el = cardRef.current;\n if (!el) return;\n el.classList.remove(\"animate-bounce-once\");\n void el.offsetWidth;\n el.classList.add(\"animate-bounce-once\");\n }, [bouncePulse]);\n\n return (\n <div\n ref={cardRef}\n className={cn(\n \"agent-builder-setup-card\",\n sidebarLayout && \"agent-builder-setup-card--sidebar\",\n fullWidth\n ? \"w-full px-3 pb-2\"\n : sidebarLayout\n ? \"mx-auto w-full max-w-[42rem] px-3 pb-2\"\n : \"mx-auto w-full max-w-[42rem] px-3 pb-2 sm:w-fit\",\n )}\n >\n <div\n className={cn(\n \"agent-builder-setup-card__panel rounded-lg border border-border/80 bg-background/80 shadow-sm backdrop-blur\",\n sidebarLayout ? \"p-2.5\" : \"p-3\",\n )}\n >\n <BuilderSetupContent onConnected={onConnected} layout={layout} />\n </div>\n </div>\n );\n}\n\n// ─── RunErrorRecoveryCard ─────────────────────────────────────────────────────\n\nexport function RunErrorRecoveryCard({\n info,\n onContinue,\n onRetry,\n onFork,\n onDismiss,\n}: {\n info: RunErrorInfo;\n onContinue: () => void;\n onRetry: () => void;\n onFork?: () => void | boolean | Promise<void | boolean>;\n onDismiss: () => void;\n}) {\n const [detailsOpen, setDetailsOpen] = useState(false);\n const [copyState, setCopyState] = useState<\"idle\" | \"copied\" | \"failed\">(\n \"idle\",\n );\n const [forking, setForking] = useState(false);\n const [forkError, setForkError] = useState<string | null>(null);\n const builderReconnect = useBuilderConnectFlow({\n trackingSource: \"assistant_chat_reconnect_error\",\n });\n const canRecover = info.recoverable === true;\n const shouldShowBuilderReconnect = isBuilderReconnectRunError(info);\n const builderReconnectResolved =\n shouldShowBuilderReconnect &&\n builderReconnect.hasFetchedStatus &&\n builderReconnect.configured;\n const isQueryError = isProviderQueryRunError(info);\n const isConnectionRecoveryError = isConnectionRecoveryRunError(info);\n const copyLabel =\n info.runId || info.errorCode || info.details ? \"Copy debug\" : \"Copy\";\n const copyDetails = useCallback(() => {\n const text = [\n info.message,\n info.errorCode ? `Code: ${info.errorCode}` : \"\",\n info.runId ? `Run: ${info.runId}` : \"\",\n info.details ? `Details:\\n${info.details}` : \"\",\n ]\n .filter(Boolean)\n .join(\"\\n\\n\");\n void writeClipboardText(text)\n .then((ok) => {\n setCopyState(ok ? \"copied\" : \"failed\");\n setTimeout(() => setCopyState(\"idle\"), 1600);\n })\n .catch(() => {\n setCopyState(\"failed\");\n setTimeout(() => setCopyState(\"idle\"), 1600);\n });\n }, [info]);\n const startNewChat = useCallback(() => {\n window.dispatchEvent(new CustomEvent(\"agent-chat:new-chat\"));\n onDismiss();\n }, [onDismiss]);\n\n const handleFork = useCallback(async () => {\n if (!onFork || forking) return;\n setForking(true);\n setForkError(null);\n try {\n const result = await onFork();\n if (result === false) {\n setForkError(\"Could not fork this chat. Try starting a new chat.\");\n }\n } catch {\n setForkError(\"Could not fork this chat. Try starting a new chat.\");\n } finally {\n setForking(false);\n }\n }, [forking, onFork]);\n\n useEffect(() => {\n if (builderReconnectResolved) {\n onDismiss();\n }\n }, [builderReconnectResolved, onDismiss]);\n\n return (\n <div className=\"rounded-lg border border-amber-500/25 bg-amber-500/[0.06] p-3 text-sm\">\n <div className=\"flex items-start gap-2\">\n <span className=\"mt-0.5 flex h-6 w-6 shrink-0 items-center justify-center rounded-md bg-amber-500/10 text-amber-700 dark:text-amber-300\">\n <IconAlertTriangle size={14} />\n </span>\n <div className=\"min-w-0 flex-1\">\n <div className=\"font-medium text-foreground\">\n {canRecover\n ? \"The agent stopped before finishing\"\n : \"The agent hit an error\"}\n </div>\n <p className=\"mt-1 text-xs leading-relaxed text-muted-foreground\">\n {info.message}\n </p>\n {shouldShowBuilderReconnect && !builderReconnectResolved && (\n <p className=\"mt-2 text-xs leading-relaxed text-muted-foreground\">\n The current Builder.io or model-provider credential was rejected.\n Reconnect Builder.io, then retry this message.\n </p>\n )}\n {isConnectionRecoveryError && (\n <p className=\"mt-2 text-xs leading-relaxed text-muted-foreground\">\n If retry lands on the same error, start a new chat session and\n continue from what already changed.\n </p>\n )}\n {(info.runId || info.errorCode || info.details) && (\n <button\n type=\"button\"\n onClick={() => setDetailsOpen((v) => !v)}\n className=\"mt-2 inline-flex items-center gap-1 text-[11px] font-medium text-muted-foreground hover:text-foreground\"\n >\n <IconChevronDown\n size={12}\n className={cn(\n \"transition-transform\",\n detailsOpen && \"rotate-180\",\n )}\n />\n Details\n </button>\n )}\n {detailsOpen && (\n <div className=\"mt-2 rounded-md border border-border/60 bg-background/70 p-2 font-mono text-[11px] leading-relaxed text-muted-foreground\">\n {info.runId && <div>run: {info.runId}</div>}\n {info.errorCode && <div>code: {info.errorCode}</div>}\n {info.details && (\n <pre className=\"mt-2 max-h-28 overflow-auto whitespace-pre-wrap break-words font-mono\">\n {info.details}\n </pre>\n )}\n </div>\n )}\n </div>\n <button\n type=\"button\"\n onClick={onDismiss}\n aria-label=\"Dismiss\"\n className=\"flex h-6 w-6 shrink-0 items-center justify-center rounded-md text-muted-foreground hover:bg-background/80 hover:text-foreground\"\n >\n <IconX size={14} />\n </button>\n </div>\n <div className=\"mt-3 flex flex-wrap items-center gap-2\">\n {shouldShowBuilderReconnect && !builderReconnectResolved && (\n <button\n type=\"button\"\n onClick={() => builderReconnect.start()}\n disabled={builderReconnect.connecting}\n className=\"inline-flex h-8 items-center gap-1.5 rounded-md bg-foreground px-3 text-xs font-medium text-background hover:opacity-90 disabled:cursor-wait disabled:opacity-70\"\n >\n {builderReconnect.connecting ? (\n <IconLoader2 size={13} className=\"animate-spin\" />\n ) : (\n <IconExternalLink size={13} />\n )}\n {builderReconnect.connecting\n ? \"Connecting Builder.io\"\n : \"Reconnect Builder.io\"}\n </button>\n )}\n {canRecover && (\n <>\n <button\n type=\"button\"\n onClick={onContinue}\n className=\"inline-flex h-8 items-center gap-1.5 rounded-md bg-foreground px-3 text-xs font-medium text-background hover:opacity-90\"\n >\n <IconPlayerPlay size={13} />\n Continue\n </button>\n <button\n type=\"button\"\n onClick={onRetry}\n className=\"inline-flex h-8 items-center gap-1.5 rounded-md border border-border bg-background px-3 text-xs font-medium text-foreground hover:bg-accent\"\n >\n <IconRefresh size={13} />\n {isQueryError ? \"Diagnose and retry\" : \"Retry\"}\n </button>\n </>\n )}\n {canRecover && isConnectionRecoveryError && (\n <button\n type=\"button\"\n onClick={startNewChat}\n className=\"inline-flex h-8 items-center gap-1.5 rounded-md border border-border bg-background px-3 text-xs font-medium text-foreground hover:bg-accent\"\n >\n <IconPlus size={13} />\n New chat\n </button>\n )}\n {canRecover && onFork && !isConnectionRecoveryError && (\n <button\n type=\"button\"\n onClick={handleFork}\n disabled={forking}\n title=\"Fork this conversation into a separate chat thread.\"\n aria-label=\"Fork this conversation into a separate chat thread\"\n className=\"inline-flex h-8 items-center gap-1.5 rounded-md border border-border bg-background px-3 text-xs font-medium text-foreground hover:bg-accent disabled:cursor-wait disabled:opacity-70\"\n >\n {forking ? (\n <IconLoader2 size={13} className=\"animate-spin\" />\n ) : (\n <IconGitFork size={13} />\n )}\n {forking ? \"Forking...\" : \"Fork chat\"}\n </button>\n )}\n <button\n type=\"button\"\n onClick={copyDetails}\n className=\"ml-auto inline-flex h-8 items-center gap-1.5 rounded-md px-2.5 text-xs font-medium text-muted-foreground hover:bg-background/80 hover:text-foreground\"\n >\n {copyState === \"copied\" ? (\n <IconCheck size={13} />\n ) : copyState === \"failed\" ? (\n <IconX size={13} />\n ) : (\n <IconCopy size={13} />\n )}\n <span aria-live=\"polite\">\n {copyState === \"copied\"\n ? \"Copied\"\n : copyState === \"failed\"\n ? \"Copy failed\"\n : copyLabel}\n </span>\n </button>\n </div>\n {shouldShowBuilderReconnect && builderReconnect.error && (\n <p className=\"mt-2 text-xs leading-relaxed text-red-500\">\n {builderReconnect.error}\n </p>\n )}\n {forkError && (\n <p className=\"mt-2 text-xs leading-relaxed text-red-500\">{forkError}</p>\n )}\n </div>\n );\n}\n\n// ─── LoopLimitContinueCard ────────────────────────────────────────────────────\n\nexport function LoopLimitContinueCard({\n info,\n onContinue,\n}: {\n info: LoopLimitInfo;\n onContinue: () => void;\n}) {\n const [settings, setSettings] = useState<AgentLoopSettingsResponse | null>(\n null,\n );\n const [value, setValue] = useState(\"\");\n const [saving, setSaving] = useState(false);\n const [saved, setSaved] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n const load = useCallback(() => {\n let cancelled = false;\n fetch(agentNativePath(\"/_agent-native/agent-loop-settings\"))\n .then((r) => (r.ok ? r.json() : null))\n .then((data: AgentLoopSettingsResponse | null) => {\n if (cancelled || !data) return;\n setSettings(data);\n setValue(String(data.maxIterations));\n })\n .catch(() => {\n if (!cancelled) setValue(String(info.maxIterations ?? \"\"));\n });\n return () => {\n cancelled = true;\n };\n }, [info.maxIterations]);\n\n useEffect(() => load(), [load]);\n\n const currentLimit = settings?.maxIterations ?? info.maxIterations;\n const numericValue = Number(value);\n const hasPendingChange =\n !!settings &&\n settings.canUpdate &&\n Number.isInteger(numericValue) &&\n numericValue !== settings.maxIterations;\n const scopeLabel =\n settings?.scope === \"org\"\n ? settings.orgName\n ? `${settings.orgName} org`\n : \"org\"\n : \"your account\";\n\n const saveLimit = useCallback(async (): Promise<boolean> => {\n if (!settings?.canUpdate) return false;\n setSaving(true);\n setSaved(false);\n setError(null);\n try {\n const res = await fetch(\n agentNativePath(\"/_agent-native/agent-loop-settings\"),\n {\n method: \"PUT\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ maxIterations: numericValue }),\n },\n );\n const body = await res.json().catch(() => ({}));\n if (!res.ok) {\n throw new Error(body?.error ?? `Save failed (${res.status})`);\n }\n setSettings(body as AgentLoopSettingsResponse);\n setValue(String((body as AgentLoopSettingsResponse).maxIterations));\n setSaved(true);\n window.dispatchEvent(\n new CustomEvent(\"agent-loop-settings:changed\", { detail: body }),\n );\n setTimeout(() => setSaved(false), 2000);\n return true;\n } catch (err) {\n setError(err instanceof Error ? err.message : \"Save failed\");\n return false;\n } finally {\n setSaving(false);\n }\n }, [numericValue, settings?.canUpdate]);\n\n const handleContinue = useCallback(async () => {\n if (hasPendingChange) {\n const ok = await saveLimit();\n if (!ok) return;\n }\n onContinue();\n }, [hasPendingChange, onContinue, saveLimit]);\n\n const openSettings = useCallback(() => {\n try {\n window.location.hash = \"agent-limits\";\n } catch {}\n window.dispatchEvent(new CustomEvent(\"agent-panel:open-settings\"));\n }, []);\n\n return (\n <div className=\"rounded-lg border border-amber-500/25 bg-amber-500/[0.06] px-3 py-3 shadow-sm\">\n <div className=\"flex items-start gap-2.5\">\n <span className=\"mt-0.5 flex h-6 w-6 shrink-0 items-center justify-center rounded-md bg-amber-500/10 text-amber-600 dark:text-amber-400\">\n <IconGauge size={14} />\n </span>\n <div className=\"min-w-0\">\n <p className=\"text-sm font-medium text-foreground\">\n Step limit reached\n </p>\n <p className=\"mt-0.5 text-xs leading-relaxed text-muted-foreground\">\n The agent used{\" \"}\n {currentLimit\n ? `${currentLimit.toLocaleString()} steps`\n : \"all available steps\"}\n . Keep going in a fresh turn, or raise the {scopeLabel} limit first.\n </p>\n </div>\n </div>\n\n <div className=\"mt-3 flex flex-wrap items-end gap-2\">\n <label className=\"min-w-[116px] flex-1 space-y-1\">\n <span className=\"text-[10px] font-medium uppercase tracking-wide text-muted-foreground\">\n Max steps\n </span>\n <input\n type=\"number\"\n min={settings?.minMaxIterations ?? 1}\n max={settings?.maxMaxIterations ?? 1000}\n value={value}\n disabled={!settings?.canUpdate || saving}\n onChange={(e) => {\n setValue(e.target.value);\n setError(null);\n }}\n className=\"h-8 w-full rounded-md border border-border bg-background px-2 text-xs text-foreground outline-none focus:ring-1 focus:ring-ring disabled:opacity-60\"\n />\n </label>\n <button\n type=\"button\"\n onClick={saveLimit}\n disabled={!hasPendingChange || saving}\n className=\"inline-flex h-8 items-center gap-1 rounded-md border border-border px-2.5 text-xs font-medium text-foreground hover:bg-accent disabled:opacity-50\"\n >\n {saving ? (\n <IconLoader2 size={12} className=\"animate-spin\" />\n ) : saved ? (\n <IconCheck size={12} />\n ) : (\n \"Save\"\n )}\n </button>\n <button\n type=\"button\"\n onClick={openSettings}\n className=\"inline-flex h-8 items-center gap-1 rounded-md border border-border px-2.5 text-xs font-medium text-muted-foreground hover:bg-accent hover:text-foreground\"\n >\n <IconSettings size={12} />\n Settings\n </button>\n <button\n type=\"button\"\n onClick={handleContinue}\n disabled={saving}\n className=\"ml-auto inline-flex h-8 items-center gap-1 rounded-md bg-foreground px-3 text-xs font-medium text-background hover:opacity-90 disabled:opacity-60\"\n >\n {hasPendingChange ? \"Save and keep going\" : \"Keep going\"}\n <IconArrowRight size={12} />\n </button>\n </div>\n\n {settings && !settings.canUpdate && (\n <p className=\"mt-2 text-[11px] text-muted-foreground\">\n Only organization owners and admins can change this limit.\n </p>\n )}\n {error && <p className=\"mt-2 text-[11px] text-destructive\">{error}</p>}\n </div>\n );\n}\n\n// ─── PlanModeCallout ──────────────────────────────────────────────────────────\n//\n// Renders inside the same width-constrained column as the composer (see\n// `.agent-plan-mode-callout` in agent-native.css and the fullscreen rule\n// injected by AgentPanel) so the pill hugs the composer's right edge in both\n// narrow sidebar chats and wide/centered page layouts, instead of floating\n// against the full pane width.\n\nexport function PlanModeCallout({\n canImplementPlan,\n onImplementPlan,\n onSwitchToAct,\n}: {\n canImplementPlan: boolean;\n onImplementPlan: () => void;\n onSwitchToAct: () => void;\n}) {\n return (\n <div className=\"agent-plan-mode-callout shrink-0 px-3\">\n <div className=\"ml-auto flex w-fit max-w-full items-center gap-2 rounded-full border border-border/70 bg-background/95 px-2 py-1.5 text-xs text-muted-foreground shadow-sm\">\n <IconClipboardList size={13} className=\"shrink-0\" />\n <span className=\"min-w-0 truncate\">\n {canImplementPlan ? \"Plan ready\" : \"Plan mode\"}\n </span>\n {canImplementPlan ? (\n <button\n type=\"button\"\n onClick={onImplementPlan}\n className=\"inline-flex h-6 shrink-0 items-center gap-1 rounded-full bg-foreground px-2.5 text-[11px] font-medium text-background hover:opacity-90\"\n >\n <IconPlayerPlay size={12} />\n Implement\n </button>\n ) : (\n <button\n type=\"button\"\n onClick={onSwitchToAct}\n className=\"inline-flex h-6 shrink-0 items-center gap-1 rounded-full border border-border bg-background px-2.5 text-[11px] font-medium text-foreground hover:bg-accent\"\n aria-label=\"Switch to Act mode\"\n >\n Act\n <IconArrowRight size={12} />\n </button>\n )}\n </div>\n </div>\n );\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"PromptComposer.d.ts","sourceRoot":"","sources":["../../../src/client/composer/PromptComposer.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"PromptComposer.d.ts","sourceRoot":"","sources":["../../../src/client/composer/PromptComposer.tsx"],"names":[],"mappings":"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"}
@@ -4,7 +4,7 @@ import { CompositeAttachmentAdapter, SimpleImageAttachmentAdapter, } from "@assi
4
4
  import { IconX } from "@tabler/icons-react";
5
5
  import { useCallback, useEffect, useMemo, useRef, useState, } from "react";
6
6
  import { AssistantUiStaleIndexErrorBoundary } from "../assistant-ui-recovery.js";
7
- import { BuilderConnectCta, BuilderSetupCard } from "../chat/run-recovery.js";
7
+ import { BuilderSetupCard, BuilderSetupContent } from "../chat/run-recovery.js";
8
8
  import { TooltipProvider } from "../components/ui/tooltip.js";
9
9
  import { fetchAgentEngineConfiguredState, useAgentEngineConfigured, } from "../use-agent-engine-configured.js";
10
10
  import { useChatModels } from "../use-chat-models.js";
@@ -264,7 +264,7 @@ function PromptComposerInner({ onSubmit, placeholder, disabled, autoFocus, class
264
264
  });
265
265
  }, [composerEffort, composerEngine, composerModel, onSubmit]);
266
266
  const useInlineMissingKeySetup = layoutVariant === "compact";
267
- return (_jsxs(_Fragment, { children: [missingApiKey && !useInlineMissingKeySetup ? (_jsx(BuilderSetupCard, { onConnected: handleBuilderConnected, bouncePulse: missingKeyBouncePulse, fullWidth: true, layout: "sidebar" })) : null, missingApiKey && useInlineMissingKeySetup ? (_jsx("div", { className: "mb-2 rounded-md border border-border/80 bg-background/80 p-2.5 text-start shadow-sm", children: _jsxs("div", { className: "flex flex-col gap-2", children: [_jsxs("div", { className: "min-w-0", children: [_jsx("p", { className: "text-[12px] font-medium text-foreground", children: "Connect AI" }), _jsx("p", { className: "mt-0.5 text-[11px] leading-4 text-muted-foreground", children: "Connect Builder.io before sending." })] }), _jsx(BuilderConnectCta, { variant: "compact", onConnected: handleBuilderConnected })] }) })) : null, _jsxs(AgentComposerFrame, { className: cn("text-start", missingApiKey && "cursor-pointer", className), rootClassName: rootClassName, style: style, rootStyle: rootStyle, layoutVariant: layoutVariant, onClick: missingApiKey ? bounceMissingKeySetup : undefined, children: [_jsx(PromptAttachmentStrip, {}), _jsx(TiptapComposer, { focusRef: handleRef, disabled: disabled || missingApiKey, placeholder: missingApiKey ? "Connect AI above to continue..." : placeholder, initialText: initialText, initialTextKey: initialTextKey, onSubmit: handleSubmit, onBeforeSubmit: ensureAgentEngineReadyForSubmit, clearOnSubmit: !preserveDraftOnSubmit, plusMenuMode: plusMenuMode ?? (attachmentsEnabled ? "upload-only" : "hidden"), attachButton: attachButton, modeControl: modeControl, toolbarSlot: toolbarSlot, actionButton: actionButton, extraActionButton: extraActionButton, layoutVariant: layoutVariant, slashCommands: slashCommands, slashSkills: slashSkills, includeDefaultSlashCommands: includeDefaultSlashCommands, includeDefaultSlashSkills: includeDefaultSlashSkills, onSlashCommand: onSlashCommand, voiceEnabled: voiceEnabled, onTextChange: onTextChange, draftScope: draftScope, selectedModel: composerModel, selectedEffort: composerEffort, availableModels: composerModelGroups, onModelChange: handleModelChange, onEffortChange: handleEffortChange, providerConnectStatusEnabled: resolvedModelStatusChecksEnabled, onConnectProvider: onConnectProvider, onConnectLocalRuntime: onConnectLocalRuntime })] })] }));
267
+ return (_jsxs(_Fragment, { children: [missingApiKey && !useInlineMissingKeySetup ? (_jsx(BuilderSetupCard, { onConnected: handleBuilderConnected, bouncePulse: missingKeyBouncePulse, fullWidth: true, layout: "sidebar" })) : null, missingApiKey && useInlineMissingKeySetup ? (_jsx("div", { className: "mb-2 rounded-md border border-border/80 bg-background/80 p-2.5 text-start shadow-sm", children: _jsx(BuilderSetupContent, { onConnected: handleBuilderConnected, layout: "sidebar" }) })) : null, _jsxs(AgentComposerFrame, { className: cn("text-start", missingApiKey && "cursor-pointer", className), rootClassName: rootClassName, style: style, rootStyle: rootStyle, layoutVariant: layoutVariant, onClick: missingApiKey ? bounceMissingKeySetup : undefined, children: [_jsx(PromptAttachmentStrip, {}), _jsx(TiptapComposer, { focusRef: handleRef, disabled: disabled || missingApiKey, placeholder: missingApiKey ? "Connect AI above to continue..." : placeholder, initialText: initialText, initialTextKey: initialTextKey, onSubmit: handleSubmit, onBeforeSubmit: ensureAgentEngineReadyForSubmit, clearOnSubmit: !preserveDraftOnSubmit, plusMenuMode: plusMenuMode ?? (attachmentsEnabled ? "upload-only" : "hidden"), attachButton: attachButton, modeControl: modeControl, toolbarSlot: toolbarSlot, actionButton: actionButton, extraActionButton: extraActionButton, layoutVariant: layoutVariant, slashCommands: slashCommands, slashSkills: slashSkills, includeDefaultSlashCommands: includeDefaultSlashCommands, includeDefaultSlashSkills: includeDefaultSlashSkills, onSlashCommand: onSlashCommand, voiceEnabled: voiceEnabled, onTextChange: onTextChange, draftScope: draftScope, selectedModel: composerModel, selectedEffort: composerEffort, availableModels: composerModelGroups, onModelChange: handleModelChange, onEffortChange: handleEffortChange, providerConnectStatusEnabled: resolvedModelStatusChecksEnabled, onConnectProvider: onConnectProvider, onConnectLocalRuntime: onConnectLocalRuntime })] })] }));
268
268
  }
269
269
  /**
270
270
  * Standalone composer that mirrors the agent sidebar's input experience —
@@ -1 +1 @@
1
- {"version":3,"file":"PromptComposer.js","sourceRoot":"","sources":["../../../src/client/composer/PromptComposer.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n AssistantRuntimeProvider,\n ThreadPrimitive,\n useAui,\n useComposer,\n useLocalRuntime,\n} from \"@assistant-ui/react\";\nimport type {\n Attachment,\n AttachmentAdapter,\n ChatModelAdapter,\n CompleteAttachment,\n PendingAttachment,\n} from \"@assistant-ui/react\";\nimport {\n CompositeAttachmentAdapter,\n SimpleImageAttachmentAdapter,\n} from \"@assistant-ui/react\";\nimport { IconX } from \"@tabler/icons-react\";\nimport {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n type CSSProperties,\n type Ref,\n type ReactNode,\n} from \"react\";\n\nimport type { ReasoningEffort } from \"../../shared/reasoning-effort.js\";\nimport { AssistantUiStaleIndexErrorBoundary } from \"../assistant-ui-recovery.js\";\nimport { BuilderConnectCta, BuilderSetupCard } from \"../chat/run-recovery.js\";\nimport { TooltipProvider } from \"../components/ui/tooltip.js\";\nimport {\n fetchAgentEngineConfiguredState,\n useAgentEngineConfigured,\n} from \"../use-agent-engine-configured.js\";\nimport { useChatModels, type EngineModelGroup } from \"../use-chat-models.js\";\nimport { cn } from \"../utils.js\";\nimport { AgentComposerFrame } from \"./AgentComposerFrame.js\";\nimport { IMAGE_ATTACHMENT_ACCEPT } from \"./attachment-accept.js\";\nimport {\n PROMPT_DOCUMENT_ATTACHMENT_ACCEPT,\n TextAttachmentAdapter,\n} from \"./attachment-accept.js\";\nimport { isPastedTextAttachmentName } from \"./pasted-text.js\";\nimport { PastedTextChip } from \"./PastedTextChip.js\";\nimport { escapePromptAttachmentAttribute } from \"./prompt-attachments.js\";\nimport {\n DEFAULT_VOICE_DICTATION_ENABLED,\n TiptapComposer,\n type ComposerSubmitIntent,\n type TiptapComposerHandle,\n type TiptapComposerSubmitOptions,\n} from \"./TiptapComposer.js\";\nimport type {\n AgentComposerLayoutVariant,\n Reference,\n SkillResult,\n SlashCommand,\n} from \"./types.js\";\n\nconst MAX_INLINE_TEXT_FILE_CHARS = 60_000;\nconst SUBMIT_ENGINE_STATUS_TIMEOUT_MS = 1000;\n\n/**\n * Files the user attached via the \"+\" button in PromptComposer. The host owns\n * what to do with them — typically POST to a per-app upload endpoint and pass\n * the resulting URLs/paths into the prompt that gets sent to the agent.\n */\nexport type PromptComposerFile = File;\n\nexport interface PromptComposerSubmitOptions {\n intent?: ComposerSubmitIntent;\n model?: string;\n engine?: string;\n effort?: ReasoningEffort;\n}\n\nexport interface PromptComposerProps {\n /** Called when the user submits the composer. */\n onSubmit: (\n text: string,\n files: PromptComposerFile[],\n references: Reference[],\n options: PromptComposerSubmitOptions,\n ) => void;\n placeholder?: string;\n disabled?: boolean;\n autoFocus?: boolean;\n className?: string;\n style?: CSSProperties;\n rootClassName?: string;\n rootStyle?: CSSProperties;\n /** Forwarded to TiptapComposer for draft persistence. */\n draftScope?: string;\n /** Keep the submitted prompt in the editor. Default: false. */\n preserveDraftOnSubmit?: boolean;\n /** Show the model selector (default: true). */\n showModelSelector?: boolean;\n /** Show the voice dictation button. Defaults to DEFAULT_VOICE_DICTATION_ENABLED. */\n voiceEnabled?: boolean;\n /** Show file upload controls and pass submitted files to onSubmit (default: true). */\n attachmentsEnabled?: boolean;\n /**\n * Controls the shared \"+\" affordance. Defaults to upload-only for standalone\n * prompt forms; chat surfaces can opt into the full sidebar menu.\n */\n plusMenuMode?: \"full\" | \"upload-only\" | \"hidden\";\n /** Programmatically seed the composer with plain text. */\n initialText?: string;\n /** Stable key used to re-apply `initialText` when the host picks a preset. */\n initialTextKey?: string | number;\n /** Optional host-owned control rendered directly after the \"+\" button. */\n modeControl?: ReactNode;\n /** Explicit host-owned toolbar slot rendered directly after the \"+\" button. */\n toolbarSlot?: ReactNode;\n /** Custom attachment button to render instead of the default \"+\" affordance. */\n attachButton?: ReactNode;\n /** Custom action button to render instead of the default send button. */\n actionButton?: ReactNode;\n /** Extra button rendered alongside the default send button. */\n extraActionButton?: ReactNode;\n /** Shared sizing/layout variant for host surfaces. Default keeps sidebar behavior. */\n layoutVariant?: AgentComposerLayoutVariant;\n /** Additional slash commands surfaced in the shared / menu. */\n slashCommands?: SlashCommand[];\n /** Additional slash skills surfaced in the shared / menu. */\n slashSkills?: SkillResult[];\n /** Include built-in sidebar slash commands like /clear and /help. Default true. */\n includeDefaultSlashCommands?: boolean;\n /** Include app-discovered skills from the default agent endpoint. Default true. */\n includeDefaultSlashSkills?: boolean;\n /** Called when a slash command from the shared / menu is executed. */\n onSlashCommand?: (command: string) => void;\n /** External model list for hosts that already resolve models outside the app. */\n availableModels?: EngineModelGroup[];\n selectedModel?: string;\n selectedEngine?: string;\n selectedEffort?: ReasoningEffort;\n onModelChange?: (model: string, engine: string) => void;\n onEffortChange?: (effort: ReasoningEffort) => void;\n /**\n * Enable server-backed model/provider status checks. Defaults off when the\n * host supplies model state and callbacks, otherwise on.\n */\n modelStatusChecksEnabled?: boolean;\n /** Called whenever the plain editor text changes. */\n onTextChange?: (text: string) => void;\n /**\n * Override the Builder.io connect action in the model picker. When provided,\n * clicking \"Connect Builder.io\" calls this instead of opening a browser popup.\n * Used by the Electron desktop app to route through the native IPC handler.\n */\n onConnectProvider?: () => void;\n /** Called when a local runtime needs its native sign-in/setup flow. */\n onConnectLocalRuntime?: (engine: string) => void;\n /** Imperative handle for focusing the composer. */\n composerRef?: Ref<TiptapComposerHandle>;\n}\n\n// Minimal pass-through adapter. PromptComposer always submits through\n// onSubmitOverride, so the runtime never actually calls this — but\n// `useLocalRuntime` needs *something* shaped like a ChatModelAdapter.\nconst NOOP_ADAPTER: ChatModelAdapter = {\n async *run() {\n return;\n },\n};\n\n/**\n * Local binary document adapter so reference PDFs, decks, and docs can be\n * attached without dragging the whole assistant chat module into bundles that\n * just want a prompt popover.\n */\nclass BinaryDocumentAttachmentAdapter implements AttachmentAdapter {\n public accept = PROMPT_DOCUMENT_ATTACHMENT_ACCEPT;\n\n public async add(state: { file: File }): Promise<PendingAttachment> {\n return {\n id: state.file.name,\n type: \"document\",\n name: state.file.name,\n contentType: state.file.type || \"application/octet-stream\",\n file: state.file,\n status: { type: \"requires-action\", reason: \"composer-send\" },\n };\n }\n\n public async send(\n attachment: PendingAttachment,\n ): Promise<CompleteAttachment> {\n return {\n ...attachment,\n status: { type: \"complete\" },\n content: [],\n };\n }\n\n public async remove() {\n /* noop */\n }\n}\n\nclass RasterImageAttachmentAdapter extends SimpleImageAttachmentAdapter {\n public accept = IMAGE_ATTACHMENT_ACCEPT;\n}\n\nfunction isInlineableTextFile(file: File): boolean {\n if (file.type.startsWith(\"text/\")) return true;\n if (file.type === \"application/json\") return true;\n return /\\.(txt|md|markdown|csv|json|yaml|yml|html?|css|xml)$/i.test(\n file.name,\n );\n}\n\nfunction formatInlineTextFile(name: string, text: string): string {\n const truncated = text.length > MAX_INLINE_TEXT_FILE_CHARS;\n const body = truncated ? text.slice(0, MAX_INLINE_TEXT_FILE_CHARS) : text;\n return [\n `<uploaded-text-file name=\"${escapePromptAttachmentAttribute(name)}\">`,\n body,\n truncated\n ? `[Truncated after ${MAX_INLINE_TEXT_FILE_CHARS} characters.]`\n : \"\",\n \"</uploaded-text-file>\",\n ]\n .filter(Boolean)\n .join(\"\\n\");\n}\n\nexport async function buildPromptComposerSubmission(options: {\n text: string;\n attachments?: ReadonlyArray<unknown>;\n}): Promise<{ text: string; files: File[] }> {\n const files: File[] = [];\n const pastedTextBlocks: string[] = [];\n const rawText = options.text;\n\n for (const att of options.attachments ?? []) {\n const a = att as Attachment;\n if (\"file\" in a && a.file instanceof File) {\n const file = a.file;\n if (isPastedTextAttachmentName(file.name)) {\n try {\n pastedTextBlocks.push(await file.text());\n } catch {\n files.push(file);\n }\n } else {\n if (isInlineableTextFile(file)) {\n try {\n pastedTextBlocks.push(\n formatInlineTextFile(file.name, await file.text()),\n );\n } catch {\n // Keep the upload path fallback below.\n }\n }\n // Note: images are NOT inlined into the prompt text even when small.\n // Inlining a base64 data-URL into a text string consumes an enormous\n // number of tokens (≈ 700 K per MB) and most hosts handle images via\n // proper attachment channels. The `files` array below carries the image\n // for the host to process through a dedicated attachment pipeline.\n files.push(file);\n }\n }\n }\n\n return {\n text: pastedTextBlocks.length\n ? [rawText.trim(), ...pastedTextBlocks].filter(Boolean).join(\"\\n\\n\")\n : rawText,\n files,\n };\n}\n\nfunction getImageSrc(attachment: Attachment): string | null {\n if (attachment.type !== \"image\") return null;\n if (\"file\" in attachment && attachment.file) {\n return URL.createObjectURL(attachment.file);\n }\n const imagePart = attachment.content?.find((part) => part.type === \"image\");\n return imagePart && \"image\" in imagePart ? imagePart.image : null;\n}\n\nfunction ImagePreviewLightbox({\n src,\n alt,\n onClose,\n}: {\n src: string;\n alt: string;\n onClose: () => void;\n}) {\n useEffect(() => {\n const handler = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") onClose();\n };\n document.addEventListener(\"keydown\", handler);\n document.body.style.overflow = \"hidden\";\n return () => {\n document.removeEventListener(\"keydown\", handler);\n document.body.style.overflow = \"\";\n };\n }, [onClose]);\n\n return (\n <div\n role=\"dialog\"\n aria-label=\"Image preview\"\n onClick={onClose}\n className=\"fixed inset-0 z-[300] flex items-center justify-center bg-black/80 p-6 cursor-zoom-out\"\n >\n <img\n src={src}\n alt={alt}\n onClick={(e) => e.stopPropagation()}\n className=\"max-h-full max-w-full object-contain rounded-md shadow-2xl cursor-default\"\n />\n <button\n type=\"button\"\n onClick={onClose}\n aria-label=\"Close preview\"\n className=\"absolute end-4 top-4 flex h-8 w-8 cursor-pointer items-center justify-center rounded-full border border-white/30 bg-black/40 text-white hover:bg-black/60\"\n >\n <IconX className=\"h-4 w-4\" />\n </button>\n </div>\n );\n}\n\nfunction AttachmentChip({\n attachment,\n onRemove,\n}: {\n attachment: Attachment;\n onRemove: (id: string) => void;\n}) {\n const src = useMemo(() => getImageSrc(attachment), [attachment]);\n const [previewOpen, setPreviewOpen] = useState(false);\n useEffect(\n () => () => {\n if (src?.startsWith(\"blob:\")) URL.revokeObjectURL(src);\n },\n [src],\n );\n\n if (isPastedTextAttachmentName(attachment.name)) {\n return <PastedTextChip attachment={attachment} onRemove={onRemove} />;\n }\n\n if (src) {\n return (\n <>\n <button\n type=\"button\"\n onClick={() => setPreviewOpen(true)}\n aria-label={`Preview ${attachment.name}`}\n className=\"agent-composer-attachment-image group relative flex h-16 min-w-16 max-w-28 cursor-zoom-in items-center justify-center overflow-hidden rounded-lg border border-border/70 bg-muted/50\"\n >\n <img\n src={src}\n alt={attachment.name}\n className=\"max-h-full max-w-full object-contain p-1\"\n />\n <span\n role=\"button\"\n tabIndex={0}\n onClick={(e) => {\n e.stopPropagation();\n onRemove(attachment.id);\n }}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n e.stopPropagation();\n onRemove(attachment.id);\n }\n }}\n aria-label={`Remove ${attachment.name}`}\n className=\"absolute end-1 top-1 flex h-5 w-5 cursor-pointer items-center justify-center rounded-full border border-border/60 bg-background/90 text-muted-foreground hover:text-foreground\"\n >\n <IconX className=\"h-3 w-3\" />\n </span>\n </button>\n {previewOpen ? (\n <ImagePreviewLightbox\n src={src}\n alt={attachment.name}\n onClose={() => setPreviewOpen(false)}\n />\n ) : null}\n </>\n );\n }\n\n return (\n <div className=\"agent-composer-attachment-chip group relative inline-flex max-w-[200px] items-center gap-2 rounded-md border border-border/70 bg-muted/50 px-2 py-1.5 text-xs\">\n <div className=\"flex h-6 w-6 shrink-0 items-center justify-center rounded bg-background text-[9px] font-semibold uppercase text-muted-foreground\">\n {attachment.name.split(\".\").pop() || \"file\"}\n </div>\n <span className=\"min-w-0 truncate font-medium\">{attachment.name}</span>\n <button\n type=\"button\"\n onClick={() => onRemove(attachment.id)}\n aria-label={`Remove ${attachment.name}`}\n className=\"flex h-5 w-5 shrink-0 cursor-pointer items-center justify-center rounded text-muted-foreground hover:text-foreground\"\n >\n <IconX className=\"h-3 w-3\" />\n </button>\n </div>\n );\n}\n\nfunction PromptAttachmentStrip() {\n const attachments = useComposer((state) => state.attachments);\n const aui = useAui();\n\n const handleRemove = useCallback(\n (id: string) => {\n void aui.composer().attachment({ id }).remove();\n },\n [aui],\n );\n\n if (attachments.length === 0) return null;\n return (\n <div className=\"agent-composer-attachment-strip flex flex-wrap gap-2 px-2 pt-2\">\n {attachments.map((attachment) => (\n <AttachmentChip\n key={attachment.id}\n attachment={attachment}\n onRemove={handleRemove}\n />\n ))}\n </div>\n );\n}\n\nfunction PromptComposerInner({\n onSubmit,\n placeholder,\n disabled,\n autoFocus,\n className,\n style,\n rootClassName,\n rootStyle,\n draftScope,\n preserveDraftOnSubmit = false,\n showModelSelector = true,\n voiceEnabled = DEFAULT_VOICE_DICTATION_ENABLED,\n attachmentsEnabled = true,\n plusMenuMode,\n initialText,\n initialTextKey,\n modeControl,\n toolbarSlot,\n attachButton,\n actionButton,\n extraActionButton,\n layoutVariant,\n slashCommands,\n slashSkills,\n includeDefaultSlashCommands,\n includeDefaultSlashSkills,\n onSlashCommand,\n availableModels,\n selectedModel,\n selectedEngine,\n selectedEffort,\n onModelChange,\n onEffortChange,\n modelStatusChecksEnabled,\n onTextChange,\n onConnectProvider,\n onConnectLocalRuntime,\n composerRef,\n}: PromptComposerProps) {\n const localRef = useRef<TiptapComposerHandle>(null);\n const handleRef = composerRef ?? localRef;\n const hostManagedModels = Boolean(\n availableModels && selectedModel && onModelChange,\n );\n const resolvedModelStatusChecksEnabled =\n modelStatusChecksEnabled ?? !hostManagedModels;\n const models = useChatModels({\n enabled: showModelSelector && resolvedModelStatusChecksEnabled,\n });\n const composerModel = showModelSelector\n ? (selectedModel ?? models.selectedModel)\n : undefined;\n const composerEngine = showModelSelector\n ? (selectedEngine ?? models.selectedEngine)\n : undefined;\n const composerEffort = showModelSelector\n ? (selectedEffort ?? models.selectedEffort)\n : undefined;\n const composerModelGroups = showModelSelector\n ? (availableModels ?? models.availableModels)\n : undefined;\n const handleModelChange = showModelSelector\n ? (onModelChange ?? models.onModelChange)\n : undefined;\n const handleEffortChange = showModelSelector\n ? (onEffortChange ?? models.onEffortChange)\n : undefined;\n const agentEngineConfigured = useAgentEngineConfigured(\n resolvedModelStatusChecksEnabled,\n );\n const missingApiKey = agentEngineConfigured.missing;\n const [missingKeyBouncePulse, setMissingKeyBouncePulse] = useState(0);\n const bounceMissingKeySetup = useCallback(() => {\n setMissingKeyBouncePulse((pulse) => pulse + 1);\n if (typeof window !== \"undefined\") {\n window.dispatchEvent(new Event(\"agent-chat:missing-api-key\"));\n }\n }, []);\n const handleBuilderConnected = useCallback(() => {\n if (typeof window !== \"undefined\") {\n window.dispatchEvent(new Event(\"agent-engine:configured-changed\"));\n }\n }, []);\n const ensureAgentEngineReadyForSubmit = useCallback(async () => {\n if (!resolvedModelStatusChecksEnabled) return true;\n const state =\n agentEngineConfigured.state === \"missing\"\n ? \"missing\"\n : await fetchAgentEngineConfiguredState(\n resolvedModelStatusChecksEnabled,\n {\n timeoutMs: SUBMIT_ENGINE_STATUS_TIMEOUT_MS,\n },\n );\n if (state !== \"missing\") return true;\n bounceMissingKeySetup();\n return false;\n }, [\n agentEngineConfigured.state,\n bounceMissingKeySetup,\n resolvedModelStatusChecksEnabled,\n ]);\n\n useEffect(() => {\n if (!autoFocus) return;\n const id = window.setTimeout(() => {\n const target =\n typeof handleRef === \"object\" && handleRef && \"current\" in handleRef\n ? handleRef.current\n : null;\n target?.focus();\n }, 50);\n return () => window.clearTimeout(id);\n }, [autoFocus, handleRef]);\n\n const handleSubmit = useCallback(\n async (\n text: string,\n references: Reference[],\n attachments?: ReadonlyArray<unknown>,\n submitOptions?: TiptapComposerSubmitOptions,\n ) => {\n // PromptComposer hosts (NewWorkspaceAppFlow, create-extension, create-deck,\n // …) submit a single string prompt — they don't run the assistant-ui\n // attachment send pipeline. TiptapComposer auto-converts large pastes\n // into a \"Pasted text\" chip, which would otherwise disappear into an\n // unprocessed File. Inline the chip body back into the prompt text so\n // newlines and full content survive the round-trip.\n const { text: finalText, files } = await buildPromptComposerSubmission({\n text,\n attachments,\n });\n onSubmit(finalText, files, references, {\n intent: submitOptions?.intent ?? \"immediate\",\n model: composerModel,\n engine: composerEngine,\n effort: composerEffort,\n });\n },\n [composerEffort, composerEngine, composerModel, onSubmit],\n );\n const useInlineMissingKeySetup = layoutVariant === \"compact\";\n\n return (\n <>\n {missingApiKey && !useInlineMissingKeySetup ? (\n <BuilderSetupCard\n onConnected={handleBuilderConnected}\n bouncePulse={missingKeyBouncePulse}\n fullWidth\n layout=\"sidebar\"\n />\n ) : null}\n {missingApiKey && useInlineMissingKeySetup ? (\n <div className=\"mb-2 rounded-md border border-border/80 bg-background/80 p-2.5 text-start shadow-sm\">\n <div className=\"flex flex-col gap-2\">\n <div className=\"min-w-0\">\n <p className=\"text-[12px] font-medium text-foreground\">\n Connect AI\n </p>\n <p className=\"mt-0.5 text-[11px] leading-4 text-muted-foreground\">\n Connect Builder.io before sending.\n </p>\n </div>\n <BuilderConnectCta\n variant=\"compact\"\n onConnected={handleBuilderConnected}\n />\n </div>\n </div>\n ) : null}\n <AgentComposerFrame\n className={cn(\n \"text-start\",\n missingApiKey && \"cursor-pointer\",\n className,\n )}\n rootClassName={rootClassName}\n style={style}\n rootStyle={rootStyle}\n layoutVariant={layoutVariant}\n onClick={missingApiKey ? bounceMissingKeySetup : undefined}\n >\n <PromptAttachmentStrip />\n <TiptapComposer\n focusRef={handleRef}\n disabled={disabled || missingApiKey}\n placeholder={\n missingApiKey ? \"Connect AI above to continue...\" : placeholder\n }\n initialText={initialText}\n initialTextKey={initialTextKey}\n onSubmit={handleSubmit}\n onBeforeSubmit={ensureAgentEngineReadyForSubmit}\n clearOnSubmit={!preserveDraftOnSubmit}\n plusMenuMode={\n plusMenuMode ?? (attachmentsEnabled ? \"upload-only\" : \"hidden\")\n }\n attachButton={attachButton}\n modeControl={modeControl}\n toolbarSlot={toolbarSlot}\n actionButton={actionButton}\n extraActionButton={extraActionButton}\n layoutVariant={layoutVariant}\n slashCommands={slashCommands}\n slashSkills={slashSkills}\n includeDefaultSlashCommands={includeDefaultSlashCommands}\n includeDefaultSlashSkills={includeDefaultSlashSkills}\n onSlashCommand={onSlashCommand}\n voiceEnabled={voiceEnabled}\n onTextChange={onTextChange}\n draftScope={draftScope}\n selectedModel={composerModel}\n selectedEffort={composerEffort}\n availableModels={composerModelGroups}\n onModelChange={handleModelChange}\n onEffortChange={handleEffortChange}\n providerConnectStatusEnabled={resolvedModelStatusChecksEnabled}\n onConnectProvider={onConnectProvider}\n onConnectLocalRuntime={onConnectLocalRuntime}\n />\n </AgentComposerFrame>\n </>\n );\n}\n\n/**\n * Standalone composer that mirrors the agent sidebar's input experience —\n * voice dictation, file upload, model selector, submit-on-Enter — for use in\n * popovers and inline prompt forms (create tool, create deck, create dashboard,\n * the Dispatch new-app flow, etc.).\n *\n * The host owns submission: when the user presses Enter or clicks submit,\n * `onSubmit(text, files, references, options)` is called. PromptComposer runs\n * its own minimal assistant-ui runtime so it can be dropped into any subtree\n * without needing the outer chat to be mounted.\n */\nexport function PromptComposer(props: PromptComposerProps) {\n const attachmentAdapter = useMemo(\n () =>\n new CompositeAttachmentAdapter([\n new RasterImageAttachmentAdapter(),\n new BinaryDocumentAttachmentAdapter(),\n new TextAttachmentAdapter(),\n ]),\n [],\n );\n const runtime = useLocalRuntime(NOOP_ADAPTER, {\n adapters: { attachments: attachmentAdapter },\n });\n const resetKey = [\n props.draftScope ?? \"\",\n props.initialTextKey ?? \"\",\n props.initialText ?? \"\",\n ].join(\":\");\n\n return (\n <TooltipProvider delayDuration={200}>\n <AssistantRuntimeProvider runtime={runtime}>\n <ThreadPrimitive.Root\n className=\"contents\"\n style={{ display: \"contents\" }}\n >\n <AssistantUiStaleIndexErrorBoundary\n resetKey={resetKey}\n componentName=\"PromptComposer\"\n >\n <PromptComposerInner {...props} />\n </AssistantUiStaleIndexErrorBoundary>\n </ThreadPrimitive.Root>\n </AssistantRuntimeProvider>\n </TooltipProvider>\n );\n}\n"]}
1
+ {"version":3,"file":"PromptComposer.js","sourceRoot":"","sources":["../../../src/client/composer/PromptComposer.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n AssistantRuntimeProvider,\n ThreadPrimitive,\n useAui,\n useComposer,\n useLocalRuntime,\n} from \"@assistant-ui/react\";\nimport type {\n Attachment,\n AttachmentAdapter,\n ChatModelAdapter,\n CompleteAttachment,\n PendingAttachment,\n} from \"@assistant-ui/react\";\nimport {\n CompositeAttachmentAdapter,\n SimpleImageAttachmentAdapter,\n} from \"@assistant-ui/react\";\nimport { IconX } from \"@tabler/icons-react\";\nimport {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n type CSSProperties,\n type Ref,\n type ReactNode,\n} from \"react\";\n\nimport type { ReasoningEffort } from \"../../shared/reasoning-effort.js\";\nimport { AssistantUiStaleIndexErrorBoundary } from \"../assistant-ui-recovery.js\";\nimport { BuilderSetupCard, BuilderSetupContent } from \"../chat/run-recovery.js\";\nimport { TooltipProvider } from \"../components/ui/tooltip.js\";\nimport {\n fetchAgentEngineConfiguredState,\n useAgentEngineConfigured,\n} from \"../use-agent-engine-configured.js\";\nimport { useChatModels, type EngineModelGroup } from \"../use-chat-models.js\";\nimport { cn } from \"../utils.js\";\nimport { AgentComposerFrame } from \"./AgentComposerFrame.js\";\nimport { IMAGE_ATTACHMENT_ACCEPT } from \"./attachment-accept.js\";\nimport {\n PROMPT_DOCUMENT_ATTACHMENT_ACCEPT,\n TextAttachmentAdapter,\n} from \"./attachment-accept.js\";\nimport { isPastedTextAttachmentName } from \"./pasted-text.js\";\nimport { PastedTextChip } from \"./PastedTextChip.js\";\nimport { escapePromptAttachmentAttribute } from \"./prompt-attachments.js\";\nimport {\n DEFAULT_VOICE_DICTATION_ENABLED,\n TiptapComposer,\n type ComposerSubmitIntent,\n type TiptapComposerHandle,\n type TiptapComposerSubmitOptions,\n} from \"./TiptapComposer.js\";\nimport type {\n AgentComposerLayoutVariant,\n Reference,\n SkillResult,\n SlashCommand,\n} from \"./types.js\";\n\nconst MAX_INLINE_TEXT_FILE_CHARS = 60_000;\nconst SUBMIT_ENGINE_STATUS_TIMEOUT_MS = 1000;\n\n/**\n * Files the user attached via the \"+\" button in PromptComposer. The host owns\n * what to do with them — typically POST to a per-app upload endpoint and pass\n * the resulting URLs/paths into the prompt that gets sent to the agent.\n */\nexport type PromptComposerFile = File;\n\nexport interface PromptComposerSubmitOptions {\n intent?: ComposerSubmitIntent;\n model?: string;\n engine?: string;\n effort?: ReasoningEffort;\n}\n\nexport interface PromptComposerProps {\n /** Called when the user submits the composer. */\n onSubmit: (\n text: string,\n files: PromptComposerFile[],\n references: Reference[],\n options: PromptComposerSubmitOptions,\n ) => void;\n placeholder?: string;\n disabled?: boolean;\n autoFocus?: boolean;\n className?: string;\n style?: CSSProperties;\n rootClassName?: string;\n rootStyle?: CSSProperties;\n /** Forwarded to TiptapComposer for draft persistence. */\n draftScope?: string;\n /** Keep the submitted prompt in the editor. Default: false. */\n preserveDraftOnSubmit?: boolean;\n /** Show the model selector (default: true). */\n showModelSelector?: boolean;\n /** Show the voice dictation button. Defaults to DEFAULT_VOICE_DICTATION_ENABLED. */\n voiceEnabled?: boolean;\n /** Show file upload controls and pass submitted files to onSubmit (default: true). */\n attachmentsEnabled?: boolean;\n /**\n * Controls the shared \"+\" affordance. Defaults to upload-only for standalone\n * prompt forms; chat surfaces can opt into the full sidebar menu.\n */\n plusMenuMode?: \"full\" | \"upload-only\" | \"hidden\";\n /** Programmatically seed the composer with plain text. */\n initialText?: string;\n /** Stable key used to re-apply `initialText` when the host picks a preset. */\n initialTextKey?: string | number;\n /** Optional host-owned control rendered directly after the \"+\" button. */\n modeControl?: ReactNode;\n /** Explicit host-owned toolbar slot rendered directly after the \"+\" button. */\n toolbarSlot?: ReactNode;\n /** Custom attachment button to render instead of the default \"+\" affordance. */\n attachButton?: ReactNode;\n /** Custom action button to render instead of the default send button. */\n actionButton?: ReactNode;\n /** Extra button rendered alongside the default send button. */\n extraActionButton?: ReactNode;\n /** Shared sizing/layout variant for host surfaces. Default keeps sidebar behavior. */\n layoutVariant?: AgentComposerLayoutVariant;\n /** Additional slash commands surfaced in the shared / menu. */\n slashCommands?: SlashCommand[];\n /** Additional slash skills surfaced in the shared / menu. */\n slashSkills?: SkillResult[];\n /** Include built-in sidebar slash commands like /clear and /help. Default true. */\n includeDefaultSlashCommands?: boolean;\n /** Include app-discovered skills from the default agent endpoint. Default true. */\n includeDefaultSlashSkills?: boolean;\n /** Called when a slash command from the shared / menu is executed. */\n onSlashCommand?: (command: string) => void;\n /** External model list for hosts that already resolve models outside the app. */\n availableModels?: EngineModelGroup[];\n selectedModel?: string;\n selectedEngine?: string;\n selectedEffort?: ReasoningEffort;\n onModelChange?: (model: string, engine: string) => void;\n onEffortChange?: (effort: ReasoningEffort) => void;\n /**\n * Enable server-backed model/provider status checks. Defaults off when the\n * host supplies model state and callbacks, otherwise on.\n */\n modelStatusChecksEnabled?: boolean;\n /** Called whenever the plain editor text changes. */\n onTextChange?: (text: string) => void;\n /**\n * Override the Builder.io connect action in the model picker. When provided,\n * clicking \"Connect Builder.io\" calls this instead of opening a browser popup.\n * Used by the Electron desktop app to route through the native IPC handler.\n */\n onConnectProvider?: () => void;\n /** Called when a local runtime needs its native sign-in/setup flow. */\n onConnectLocalRuntime?: (engine: string) => void;\n /** Imperative handle for focusing the composer. */\n composerRef?: Ref<TiptapComposerHandle>;\n}\n\n// Minimal pass-through adapter. PromptComposer always submits through\n// onSubmitOverride, so the runtime never actually calls this — but\n// `useLocalRuntime` needs *something* shaped like a ChatModelAdapter.\nconst NOOP_ADAPTER: ChatModelAdapter = {\n async *run() {\n return;\n },\n};\n\n/**\n * Local binary document adapter so reference PDFs, decks, and docs can be\n * attached without dragging the whole assistant chat module into bundles that\n * just want a prompt popover.\n */\nclass BinaryDocumentAttachmentAdapter implements AttachmentAdapter {\n public accept = PROMPT_DOCUMENT_ATTACHMENT_ACCEPT;\n\n public async add(state: { file: File }): Promise<PendingAttachment> {\n return {\n id: state.file.name,\n type: \"document\",\n name: state.file.name,\n contentType: state.file.type || \"application/octet-stream\",\n file: state.file,\n status: { type: \"requires-action\", reason: \"composer-send\" },\n };\n }\n\n public async send(\n attachment: PendingAttachment,\n ): Promise<CompleteAttachment> {\n return {\n ...attachment,\n status: { type: \"complete\" },\n content: [],\n };\n }\n\n public async remove() {\n /* noop */\n }\n}\n\nclass RasterImageAttachmentAdapter extends SimpleImageAttachmentAdapter {\n public accept = IMAGE_ATTACHMENT_ACCEPT;\n}\n\nfunction isInlineableTextFile(file: File): boolean {\n if (file.type.startsWith(\"text/\")) return true;\n if (file.type === \"application/json\") return true;\n return /\\.(txt|md|markdown|csv|json|yaml|yml|html?|css|xml)$/i.test(\n file.name,\n );\n}\n\nfunction formatInlineTextFile(name: string, text: string): string {\n const truncated = text.length > MAX_INLINE_TEXT_FILE_CHARS;\n const body = truncated ? text.slice(0, MAX_INLINE_TEXT_FILE_CHARS) : text;\n return [\n `<uploaded-text-file name=\"${escapePromptAttachmentAttribute(name)}\">`,\n body,\n truncated\n ? `[Truncated after ${MAX_INLINE_TEXT_FILE_CHARS} characters.]`\n : \"\",\n \"</uploaded-text-file>\",\n ]\n .filter(Boolean)\n .join(\"\\n\");\n}\n\nexport async function buildPromptComposerSubmission(options: {\n text: string;\n attachments?: ReadonlyArray<unknown>;\n}): Promise<{ text: string; files: File[] }> {\n const files: File[] = [];\n const pastedTextBlocks: string[] = [];\n const rawText = options.text;\n\n for (const att of options.attachments ?? []) {\n const a = att as Attachment;\n if (\"file\" in a && a.file instanceof File) {\n const file = a.file;\n if (isPastedTextAttachmentName(file.name)) {\n try {\n pastedTextBlocks.push(await file.text());\n } catch {\n files.push(file);\n }\n } else {\n if (isInlineableTextFile(file)) {\n try {\n pastedTextBlocks.push(\n formatInlineTextFile(file.name, await file.text()),\n );\n } catch {\n // Keep the upload path fallback below.\n }\n }\n // Note: images are NOT inlined into the prompt text even when small.\n // Inlining a base64 data-URL into a text string consumes an enormous\n // number of tokens (≈ 700 K per MB) and most hosts handle images via\n // proper attachment channels. The `files` array below carries the image\n // for the host to process through a dedicated attachment pipeline.\n files.push(file);\n }\n }\n }\n\n return {\n text: pastedTextBlocks.length\n ? [rawText.trim(), ...pastedTextBlocks].filter(Boolean).join(\"\\n\\n\")\n : rawText,\n files,\n };\n}\n\nfunction getImageSrc(attachment: Attachment): string | null {\n if (attachment.type !== \"image\") return null;\n if (\"file\" in attachment && attachment.file) {\n return URL.createObjectURL(attachment.file);\n }\n const imagePart = attachment.content?.find((part) => part.type === \"image\");\n return imagePart && \"image\" in imagePart ? imagePart.image : null;\n}\n\nfunction ImagePreviewLightbox({\n src,\n alt,\n onClose,\n}: {\n src: string;\n alt: string;\n onClose: () => void;\n}) {\n useEffect(() => {\n const handler = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") onClose();\n };\n document.addEventListener(\"keydown\", handler);\n document.body.style.overflow = \"hidden\";\n return () => {\n document.removeEventListener(\"keydown\", handler);\n document.body.style.overflow = \"\";\n };\n }, [onClose]);\n\n return (\n <div\n role=\"dialog\"\n aria-label=\"Image preview\"\n onClick={onClose}\n className=\"fixed inset-0 z-[300] flex items-center justify-center bg-black/80 p-6 cursor-zoom-out\"\n >\n <img\n src={src}\n alt={alt}\n onClick={(e) => e.stopPropagation()}\n className=\"max-h-full max-w-full object-contain rounded-md shadow-2xl cursor-default\"\n />\n <button\n type=\"button\"\n onClick={onClose}\n aria-label=\"Close preview\"\n className=\"absolute end-4 top-4 flex h-8 w-8 cursor-pointer items-center justify-center rounded-full border border-white/30 bg-black/40 text-white hover:bg-black/60\"\n >\n <IconX className=\"h-4 w-4\" />\n </button>\n </div>\n );\n}\n\nfunction AttachmentChip({\n attachment,\n onRemove,\n}: {\n attachment: Attachment;\n onRemove: (id: string) => void;\n}) {\n const src = useMemo(() => getImageSrc(attachment), [attachment]);\n const [previewOpen, setPreviewOpen] = useState(false);\n useEffect(\n () => () => {\n if (src?.startsWith(\"blob:\")) URL.revokeObjectURL(src);\n },\n [src],\n );\n\n if (isPastedTextAttachmentName(attachment.name)) {\n return <PastedTextChip attachment={attachment} onRemove={onRemove} />;\n }\n\n if (src) {\n return (\n <>\n <button\n type=\"button\"\n onClick={() => setPreviewOpen(true)}\n aria-label={`Preview ${attachment.name}`}\n className=\"agent-composer-attachment-image group relative flex h-16 min-w-16 max-w-28 cursor-zoom-in items-center justify-center overflow-hidden rounded-lg border border-border/70 bg-muted/50\"\n >\n <img\n src={src}\n alt={attachment.name}\n className=\"max-h-full max-w-full object-contain p-1\"\n />\n <span\n role=\"button\"\n tabIndex={0}\n onClick={(e) => {\n e.stopPropagation();\n onRemove(attachment.id);\n }}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n e.stopPropagation();\n onRemove(attachment.id);\n }\n }}\n aria-label={`Remove ${attachment.name}`}\n className=\"absolute end-1 top-1 flex h-5 w-5 cursor-pointer items-center justify-center rounded-full border border-border/60 bg-background/90 text-muted-foreground hover:text-foreground\"\n >\n <IconX className=\"h-3 w-3\" />\n </span>\n </button>\n {previewOpen ? (\n <ImagePreviewLightbox\n src={src}\n alt={attachment.name}\n onClose={() => setPreviewOpen(false)}\n />\n ) : null}\n </>\n );\n }\n\n return (\n <div className=\"agent-composer-attachment-chip group relative inline-flex max-w-[200px] items-center gap-2 rounded-md border border-border/70 bg-muted/50 px-2 py-1.5 text-xs\">\n <div className=\"flex h-6 w-6 shrink-0 items-center justify-center rounded bg-background text-[9px] font-semibold uppercase text-muted-foreground\">\n {attachment.name.split(\".\").pop() || \"file\"}\n </div>\n <span className=\"min-w-0 truncate font-medium\">{attachment.name}</span>\n <button\n type=\"button\"\n onClick={() => onRemove(attachment.id)}\n aria-label={`Remove ${attachment.name}`}\n className=\"flex h-5 w-5 shrink-0 cursor-pointer items-center justify-center rounded text-muted-foreground hover:text-foreground\"\n >\n <IconX className=\"h-3 w-3\" />\n </button>\n </div>\n );\n}\n\nfunction PromptAttachmentStrip() {\n const attachments = useComposer((state) => state.attachments);\n const aui = useAui();\n\n const handleRemove = useCallback(\n (id: string) => {\n void aui.composer().attachment({ id }).remove();\n },\n [aui],\n );\n\n if (attachments.length === 0) return null;\n return (\n <div className=\"agent-composer-attachment-strip flex flex-wrap gap-2 px-2 pt-2\">\n {attachments.map((attachment) => (\n <AttachmentChip\n key={attachment.id}\n attachment={attachment}\n onRemove={handleRemove}\n />\n ))}\n </div>\n );\n}\n\nfunction PromptComposerInner({\n onSubmit,\n placeholder,\n disabled,\n autoFocus,\n className,\n style,\n rootClassName,\n rootStyle,\n draftScope,\n preserveDraftOnSubmit = false,\n showModelSelector = true,\n voiceEnabled = DEFAULT_VOICE_DICTATION_ENABLED,\n attachmentsEnabled = true,\n plusMenuMode,\n initialText,\n initialTextKey,\n modeControl,\n toolbarSlot,\n attachButton,\n actionButton,\n extraActionButton,\n layoutVariant,\n slashCommands,\n slashSkills,\n includeDefaultSlashCommands,\n includeDefaultSlashSkills,\n onSlashCommand,\n availableModels,\n selectedModel,\n selectedEngine,\n selectedEffort,\n onModelChange,\n onEffortChange,\n modelStatusChecksEnabled,\n onTextChange,\n onConnectProvider,\n onConnectLocalRuntime,\n composerRef,\n}: PromptComposerProps) {\n const localRef = useRef<TiptapComposerHandle>(null);\n const handleRef = composerRef ?? localRef;\n const hostManagedModels = Boolean(\n availableModels && selectedModel && onModelChange,\n );\n const resolvedModelStatusChecksEnabled =\n modelStatusChecksEnabled ?? !hostManagedModels;\n const models = useChatModels({\n enabled: showModelSelector && resolvedModelStatusChecksEnabled,\n });\n const composerModel = showModelSelector\n ? (selectedModel ?? models.selectedModel)\n : undefined;\n const composerEngine = showModelSelector\n ? (selectedEngine ?? models.selectedEngine)\n : undefined;\n const composerEffort = showModelSelector\n ? (selectedEffort ?? models.selectedEffort)\n : undefined;\n const composerModelGroups = showModelSelector\n ? (availableModels ?? models.availableModels)\n : undefined;\n const handleModelChange = showModelSelector\n ? (onModelChange ?? models.onModelChange)\n : undefined;\n const handleEffortChange = showModelSelector\n ? (onEffortChange ?? models.onEffortChange)\n : undefined;\n const agentEngineConfigured = useAgentEngineConfigured(\n resolvedModelStatusChecksEnabled,\n );\n const missingApiKey = agentEngineConfigured.missing;\n const [missingKeyBouncePulse, setMissingKeyBouncePulse] = useState(0);\n const bounceMissingKeySetup = useCallback(() => {\n setMissingKeyBouncePulse((pulse) => pulse + 1);\n if (typeof window !== \"undefined\") {\n window.dispatchEvent(new Event(\"agent-chat:missing-api-key\"));\n }\n }, []);\n const handleBuilderConnected = useCallback(() => {\n if (typeof window !== \"undefined\") {\n window.dispatchEvent(new Event(\"agent-engine:configured-changed\"));\n }\n }, []);\n const ensureAgentEngineReadyForSubmit = useCallback(async () => {\n if (!resolvedModelStatusChecksEnabled) return true;\n const state =\n agentEngineConfigured.state === \"missing\"\n ? \"missing\"\n : await fetchAgentEngineConfiguredState(\n resolvedModelStatusChecksEnabled,\n {\n timeoutMs: SUBMIT_ENGINE_STATUS_TIMEOUT_MS,\n },\n );\n if (state !== \"missing\") return true;\n bounceMissingKeySetup();\n return false;\n }, [\n agentEngineConfigured.state,\n bounceMissingKeySetup,\n resolvedModelStatusChecksEnabled,\n ]);\n\n useEffect(() => {\n if (!autoFocus) return;\n const id = window.setTimeout(() => {\n const target =\n typeof handleRef === \"object\" && handleRef && \"current\" in handleRef\n ? handleRef.current\n : null;\n target?.focus();\n }, 50);\n return () => window.clearTimeout(id);\n }, [autoFocus, handleRef]);\n\n const handleSubmit = useCallback(\n async (\n text: string,\n references: Reference[],\n attachments?: ReadonlyArray<unknown>,\n submitOptions?: TiptapComposerSubmitOptions,\n ) => {\n // PromptComposer hosts (NewWorkspaceAppFlow, create-extension, create-deck,\n // …) submit a single string prompt — they don't run the assistant-ui\n // attachment send pipeline. TiptapComposer auto-converts large pastes\n // into a \"Pasted text\" chip, which would otherwise disappear into an\n // unprocessed File. Inline the chip body back into the prompt text so\n // newlines and full content survive the round-trip.\n const { text: finalText, files } = await buildPromptComposerSubmission({\n text,\n attachments,\n });\n onSubmit(finalText, files, references, {\n intent: submitOptions?.intent ?? \"immediate\",\n model: composerModel,\n engine: composerEngine,\n effort: composerEffort,\n });\n },\n [composerEffort, composerEngine, composerModel, onSubmit],\n );\n const useInlineMissingKeySetup = layoutVariant === \"compact\";\n\n return (\n <>\n {missingApiKey && !useInlineMissingKeySetup ? (\n <BuilderSetupCard\n onConnected={handleBuilderConnected}\n bouncePulse={missingKeyBouncePulse}\n fullWidth\n layout=\"sidebar\"\n />\n ) : null}\n {missingApiKey && useInlineMissingKeySetup ? (\n <div className=\"mb-2 rounded-md border border-border/80 bg-background/80 p-2.5 text-start shadow-sm\">\n <BuilderSetupContent\n onConnected={handleBuilderConnected}\n layout=\"sidebar\"\n />\n </div>\n ) : null}\n <AgentComposerFrame\n className={cn(\n \"text-start\",\n missingApiKey && \"cursor-pointer\",\n className,\n )}\n rootClassName={rootClassName}\n style={style}\n rootStyle={rootStyle}\n layoutVariant={layoutVariant}\n onClick={missingApiKey ? bounceMissingKeySetup : undefined}\n >\n <PromptAttachmentStrip />\n <TiptapComposer\n focusRef={handleRef}\n disabled={disabled || missingApiKey}\n placeholder={\n missingApiKey ? \"Connect AI above to continue...\" : placeholder\n }\n initialText={initialText}\n initialTextKey={initialTextKey}\n onSubmit={handleSubmit}\n onBeforeSubmit={ensureAgentEngineReadyForSubmit}\n clearOnSubmit={!preserveDraftOnSubmit}\n plusMenuMode={\n plusMenuMode ?? (attachmentsEnabled ? \"upload-only\" : \"hidden\")\n }\n attachButton={attachButton}\n modeControl={modeControl}\n toolbarSlot={toolbarSlot}\n actionButton={actionButton}\n extraActionButton={extraActionButton}\n layoutVariant={layoutVariant}\n slashCommands={slashCommands}\n slashSkills={slashSkills}\n includeDefaultSlashCommands={includeDefaultSlashCommands}\n includeDefaultSlashSkills={includeDefaultSlashSkills}\n onSlashCommand={onSlashCommand}\n voiceEnabled={voiceEnabled}\n onTextChange={onTextChange}\n draftScope={draftScope}\n selectedModel={composerModel}\n selectedEffort={composerEffort}\n availableModels={composerModelGroups}\n onModelChange={handleModelChange}\n onEffortChange={handleEffortChange}\n providerConnectStatusEnabled={resolvedModelStatusChecksEnabled}\n onConnectProvider={onConnectProvider}\n onConnectLocalRuntime={onConnectLocalRuntime}\n />\n </AgentComposerFrame>\n </>\n );\n}\n\n/**\n * Standalone composer that mirrors the agent sidebar's input experience —\n * voice dictation, file upload, model selector, submit-on-Enter — for use in\n * popovers and inline prompt forms (create tool, create deck, create dashboard,\n * the Dispatch new-app flow, etc.).\n *\n * The host owns submission: when the user presses Enter or clicks submit,\n * `onSubmit(text, files, references, options)` is called. PromptComposer runs\n * its own minimal assistant-ui runtime so it can be dropped into any subtree\n * without needing the outer chat to be mounted.\n */\nexport function PromptComposer(props: PromptComposerProps) {\n const attachmentAdapter = useMemo(\n () =>\n new CompositeAttachmentAdapter([\n new RasterImageAttachmentAdapter(),\n new BinaryDocumentAttachmentAdapter(),\n new TextAttachmentAdapter(),\n ]),\n [],\n );\n const runtime = useLocalRuntime(NOOP_ADAPTER, {\n adapters: { attachments: attachmentAdapter },\n });\n const resetKey = [\n props.draftScope ?? \"\",\n props.initialTextKey ?? \"\",\n props.initialText ?? \"\",\n ].join(\":\");\n\n return (\n <TooltipProvider delayDuration={200}>\n <AssistantRuntimeProvider runtime={runtime}>\n <ThreadPrimitive.Root\n className=\"contents\"\n style={{ display: \"contents\" }}\n >\n <AssistantUiStaleIndexErrorBoundary\n resetKey={resetKey}\n componentName=\"PromptComposer\"\n >\n <PromptComposerInner {...props} />\n </AssistantUiStaleIndexErrorBoundary>\n </ThreadPrimitive.Root>\n </AssistantRuntimeProvider>\n </TooltipProvider>\n );\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"TiptapComposer.d.ts","sourceRoot":"","sources":["../../../src/client/composer/TiptapComposer.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"TiptapComposer.d.ts","sourceRoot":"","sources":["../../../src/client/composer/TiptapComposer.tsx"],"names":[],"mappings":"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"}