@pstdio/ui 0.26.0 → 0.35.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 (620) hide show
  1. package/dist/EquationComponent-DDd5UoIP.js +65 -0
  2. package/dist/EquationComponent-DDd5UoIP.js.map +1 -0
  3. package/dist/MermaidComponent-DGDnQ6pb.js +90 -0
  4. package/dist/MermaidComponent-DGDnQ6pb.js.map +1 -0
  5. package/dist/browser-storage-C_ipoNwP.js +37 -0
  6. package/dist/browser-storage-C_ipoNwP.js.map +1 -0
  7. package/dist/chat-ui.d.ts +688 -2
  8. package/dist/chat-ui.js +3271 -2848
  9. package/dist/chat-ui.js.map +1 -1
  10. package/dist/data-table-stats-row-DNJG8tLZ.js +415 -0
  11. package/dist/data-table-stats-row-DNJG8tLZ.js.map +1 -0
  12. package/dist/data-table.d.ts +143 -2
  13. package/dist/data-table.js +1216 -1188
  14. package/dist/data-table.js.map +1 -1
  15. package/dist/diff-bubble-DZsarmSG.js +61 -0
  16. package/dist/diff-bubble-DZsarmSG.js.map +1 -0
  17. package/dist/diff-drawer-45rpk3aq.js +776 -0
  18. package/dist/diff-drawer-45rpk3aq.js.map +1 -0
  19. package/dist/diff-editor-CGpeyoCE.js +124 -0
  20. package/dist/diff-editor-CGpeyoCE.js.map +1 -0
  21. package/dist/diff-size-Dydn_Uw5.js +61 -0
  22. package/dist/diff-size-Dydn_Uw5.js.map +1 -0
  23. package/dist/diff-viewer-hGkaF_zW.js +558 -0
  24. package/dist/diff-viewer-hGkaF_zW.js.map +1 -0
  25. package/dist/diff.d.ts +128 -2
  26. package/dist/diff.js +163 -1302
  27. package/dist/diff.js.map +1 -1
  28. package/dist/empty-state-3mVV_pV-.js +38 -0
  29. package/dist/empty-state-3mVV_pV-.js.map +1 -0
  30. package/dist/file-change-badge-0QFNv82B.js +64 -0
  31. package/dist/file-change-badge-0QFNv82B.js.map +1 -0
  32. package/dist/index-BfFLdci8.d.ts +189 -0
  33. package/dist/index-Dd6e8lU_.d.ts +61 -0
  34. package/dist/index-DlmvvQ6x.d.ts +143 -0
  35. package/dist/index.d.ts +1508 -40
  36. package/dist/index.js +3167 -2707
  37. package/dist/index.js.map +1 -1
  38. package/dist/kanban-renderer.d.ts +337 -2
  39. package/dist/kanban-renderer.js +1413 -1085
  40. package/dist/kanban-renderer.js.map +1 -1
  41. package/dist/list-row-De9R2zKU.js +1008 -0
  42. package/dist/list-row-De9R2zKU.js.map +1 -0
  43. package/dist/mermaid-renderer-DImi0fDp.js +553 -0
  44. package/dist/mermaid-renderer-DImi0fDp.js.map +1 -0
  45. package/dist/mermaid.d.ts +12 -2
  46. package/dist/mermaid.js +2 -5
  47. package/dist/monaco-browser-CLRPSE4-.js +14 -0
  48. package/dist/monaco-browser-CLRPSE4-.js.map +1 -0
  49. package/dist/param-editor-IJzw1cA2.js +225 -0
  50. package/dist/param-editor-IJzw1cA2.js.map +1 -0
  51. package/dist/param-editor-field-DscIjv8s.js +2368 -0
  52. package/dist/param-editor-field-DscIjv8s.js.map +1 -0
  53. package/dist/param-editor.d.ts +407 -2
  54. package/dist/param-editor.js +3 -47
  55. package/dist/prism-pSHJejZx.js +646 -0
  56. package/dist/prism-pSHJejZx.js.map +1 -0
  57. package/dist/radio-CiFrDN6O.js +54 -0
  58. package/dist/radio-CiFrDN6O.js.map +1 -0
  59. package/dist/resource-badge-95WPVlZf.d.ts +76 -0
  60. package/dist/rich-text-DtQpHBlX.js +7018 -0
  61. package/dist/rich-text-DtQpHBlX.js.map +1 -0
  62. package/dist/rich-text.d.ts +3 -2
  63. package/dist/rich-text.js +2 -429
  64. package/dist/rolldown-runtime-Dy4uBu1J.js +11 -0
  65. package/dist/scroll-area-Cr1lNXAr.js +100 -0
  66. package/dist/scroll-area-Cr1lNXAr.js.map +1 -0
  67. package/dist/slider-hwHYe98I.js +423 -0
  68. package/dist/slider-hwHYe98I.js.map +1 -0
  69. package/dist/style.css +2 -1
  70. package/dist/terminal.d.ts +203 -2
  71. package/dist/terminal.js +324 -360
  72. package/dist/terminal.js.map +1 -1
  73. package/dist/theme-kSkOHzbV.js +2852 -0
  74. package/dist/theme-kSkOHzbV.js.map +1 -0
  75. package/dist/theme-preference-pzfuK5cH.js +101 -0
  76. package/dist/theme-preference-pzfuK5cH.js.map +1 -0
  77. package/dist/theme.d.ts +3 -2
  78. package/dist/theme.js +2 -15
  79. package/dist/tree-list-BUfDQz3v.js +1449 -0
  80. package/dist/tree-list-BUfDQz3v.js.map +1 -0
  81. package/dist/types-yjKBk07w.d.ts +161 -0
  82. package/dist/workspace-badge-9g78pXHS.js +245 -0
  83. package/dist/workspace-badge-9g78pXHS.js.map +1 -0
  84. package/dist/workspace-badge-CkJ_jTQw.d.ts +75 -0
  85. package/dist-monaco/assets/codicon-ngg6Pgfi.ttf +0 -0
  86. package/dist-monaco/assets/css.worker-DFdt6_zu.js +89 -0
  87. package/dist-monaco/assets/editor.worker-O-CH8JUO.js +26 -0
  88. package/dist-monaco/assets/html.worker-JUzsMP-j.js +502 -0
  89. package/dist-monaco/assets/json.worker-B4dEhy0e.js +58 -0
  90. package/dist-monaco/assets/ts.worker-CmEKzkmF.js +67734 -0
  91. package/dist-monaco/monaco.css +1 -0
  92. package/dist-monaco/monaco.js +1201 -0
  93. package/package.json +26 -13
  94. package/dist/EquationComponent-DeDYHvqY.js +0 -62
  95. package/dist/EquationComponent-DeDYHvqY.js.map +0 -1
  96. package/dist/MermaidComponent-X__B6qib.js +0 -60
  97. package/dist/MermaidComponent-X__B6qib.js.map +0 -1
  98. package/dist/activity-timeline-BynMjXSB.js +0 -283
  99. package/dist/activity-timeline-BynMjXSB.js.map +0 -1
  100. package/dist/alert-ubcrW24X.js +0 -33
  101. package/dist/alert-ubcrW24X.js.map +0 -1
  102. package/dist/browser-storage-BinyFNJX.js +0 -40
  103. package/dist/browser-storage-BinyFNJX.js.map +0 -1
  104. package/dist/components/activity/activity-avatar.d.ts +0 -9
  105. package/dist/components/activity/activity-comment.d.ts +0 -27
  106. package/dist/components/activity/activity-composer.d.ts +0 -18
  107. package/dist/components/activity/activity-event.d.ts +0 -12
  108. package/dist/components/activity/activity-root.d.ts +0 -15
  109. package/dist/components/activity/activity-timeline.d.ts +0 -6
  110. package/dist/components/activity/activity.types.d.ts +0 -5
  111. package/dist/components/activity/index.d.ts +0 -25
  112. package/dist/components/chat-ui/components/ai-conversation.d.ts +0 -603
  113. package/dist/components/chat-ui/components/ai-message.d.ts +0 -91
  114. package/dist/components/chat-ui/components/ai-response.d.ts +0 -5
  115. package/dist/components/chat-ui/components/approval-prompt.d.ts +0 -8
  116. package/dist/components/chat-ui/components/attachment-list.d.ts +0 -23
  117. package/dist/components/chat-ui/components/auto-scroll.d.ts +0 -37
  118. package/dist/components/chat-ui/components/chat-history-story.d.ts +0 -14
  119. package/dist/components/chat-ui/components/chat-input-actions.d.ts +0 -13
  120. package/dist/components/chat-ui/components/chat-input-attachments.d.ts +0 -12
  121. package/dist/components/chat-ui/components/chat-input-history.d.ts +0 -6
  122. package/dist/components/chat-ui/components/chat-input-question-prompt.d.ts +0 -36
  123. package/dist/components/chat-ui/components/chat-input.d.ts +0 -33
  124. package/dist/components/chat-ui/components/chat-message-animation.d.ts +0 -22
  125. package/dist/components/chat-ui/components/chat-message-list-items.d.ts +0 -17
  126. package/dist/components/chat-ui/components/chat-message-list.d.ts +0 -12
  127. package/dist/components/chat-ui/components/chat-panel-composer.d.ts +0 -49
  128. package/dist/components/chat-ui/components/chat-panel-sticky-user-message.d.ts +0 -13
  129. package/dist/components/chat-ui/components/chat-panel.d.ts +0 -45
  130. package/dist/components/chat-ui/components/chat-skeleton.d.ts +0 -1
  131. package/dist/components/chat-ui/components/composer-constants.d.ts +0 -1
  132. package/dist/components/chat-ui/components/conversation-browse.d.ts +0 -22
  133. package/dist/components/chat-ui/components/message-action-panel.d.ts +0 -10
  134. package/dist/components/chat-ui/components/message-parts-renderer.d.ts +0 -13
  135. package/dist/components/chat-ui/components/message-types.d.ts +0 -116
  136. package/dist/components/chat-ui/components/model-swap-separator.d.ts +0 -5
  137. package/dist/components/chat-ui/components/queued-follow-up-list-state.d.ts +0 -4
  138. package/dist/components/chat-ui/components/queued-follow-up-list.d.ts +0 -11
  139. package/dist/components/chat-ui/components/send-button.d.ts +0 -7
  140. package/dist/components/chat-ui/components/timeline-title.d.ts +0 -6
  141. package/dist/components/chat-ui/components/timeline-tool-blocks.d.ts +0 -14
  142. package/dist/components/chat-ui/components/timeline.d.ts +0 -113
  143. package/dist/components/chat-ui/components/tool-invocation-timeline.d.ts +0 -8
  144. package/dist/components/chat-ui/components/use-chat-input-history.d.ts +0 -16
  145. package/dist/components/chat-ui/components/working-indicator.d.ts +0 -9
  146. package/dist/components/chat-ui/components/workspace-hub.d.ts +0 -19
  147. package/dist/components/chat-ui/index.d.ts +0 -19
  148. package/dist/components/chat-ui/mocks/library/index.d.ts +0 -10
  149. package/dist/components/chat-ui/performance/chat-mount-metrics.d.ts +0 -37
  150. package/dist/components/chat-ui/performance/chat-panel.perf.d.ts +0 -18
  151. package/dist/components/chat-ui/performance/chat-performance-fixtures.d.ts +0 -28
  152. package/dist/components/chat-ui/performance/chat-performance-panel.d.ts +0 -23
  153. package/dist/components/chat-ui/performance/chat-performance-story-utils.d.ts +0 -30
  154. package/dist/components/chat-ui/tool-rendering/apply-patch-renderer.d.ts +0 -2
  155. package/dist/components/chat-ui/tool-rendering/build-timeline.d.ts +0 -13
  156. package/dist/components/chat-ui/tool-rendering/default-renderers.d.ts +0 -13
  157. package/dist/components/chat-ui/tool-rendering/edit-renderer.d.ts +0 -2
  158. package/dist/components/chat-ui/tool-rendering/index.d.ts +0 -3
  159. package/dist/components/chat-ui/tool-rendering/question-prompt.d.ts +0 -9
  160. package/dist/components/chat-ui/tool-rendering/question-renderer.d.ts +0 -10
  161. package/dist/components/chat-ui/tool-rendering/shared.d.ts +0 -53
  162. package/dist/components/chat-ui/tool-rendering/standard-renderers.d.ts +0 -7
  163. package/dist/components/chat-ui/tool-rendering/todowrite-renderer.d.ts +0 -10
  164. package/dist/components/chat-ui/tool-rendering/types.d.ts +0 -12
  165. package/dist/components/chat-ui/utils/diff.d.ts +0 -21
  166. package/dist/components/chat-ui/utils/editor-state.d.ts +0 -1
  167. package/dist/components/chat-ui/utils/get-icon.d.ts +0 -36
  168. package/dist/components/chat-ui/utils/tool-name.d.ts +0 -2
  169. package/dist/components/command-palette/index.d.ts +0 -4
  170. package/dist/components/command-palette/palette-filter.d.ts +0 -23
  171. package/dist/components/command-palette/palette-list.d.ts +0 -11
  172. package/dist/components/command-palette/palette-shortcut.d.ts +0 -12
  173. package/dist/components/command-palette/palette.d.ts +0 -48
  174. package/dist/components/data-table/build-columns.d.ts +0 -16
  175. package/dist/components/data-table/categorical-color-cell.d.ts +0 -8
  176. package/dist/components/data-table/color-cell-style.d.ts +0 -13
  177. package/dist/components/data-table/color-scale-cell.d.ts +0 -7
  178. package/dist/components/data-table/data-table-column-menu.d.ts +0 -17
  179. package/dist/components/data-table/data-table-header.d.ts +0 -12
  180. package/dist/components/data-table/data-table-row-display.d.ts +0 -11
  181. package/dist/components/data-table/data-table-skeleton.d.ts +0 -13
  182. package/dist/components/data-table/data-table-stat-chart.d.ts +0 -21
  183. package/dist/components/data-table/data-table-state.d.ts +0 -27
  184. package/dist/components/data-table/data-table-stats-row.d.ts +0 -11
  185. package/dist/components/data-table/data-table-stats.d.ts +0 -19
  186. package/dist/components/data-table/data-table-table-parts.d.ts +0 -22
  187. package/dist/components/data-table/data-table.d.ts +0 -2
  188. package/dist/components/data-table/data-table.story-descriptions.d.ts +0 -6
  189. package/dist/components/data-table/data-table.story-fixtures.d.ts +0 -6
  190. package/dist/components/data-table/edit-mode-data-table-body.d.ts +0 -30
  191. package/dist/components/data-table/edit-mode-data-table-cell.d.ts +0 -16
  192. package/dist/components/data-table/edit-mode-data-table-editors.d.ts +0 -19
  193. package/dist/components/data-table/edit-mode-data-table-header.d.ts +0 -24
  194. package/dist/components/data-table/edit-mode-data-table-selection.d.ts +0 -12
  195. package/dist/components/data-table/edit-mode-data-table.d.ts +0 -2
  196. package/dist/components/data-table/edit-mode-story.d.ts +0 -5
  197. package/dist/components/data-table/friendly-json-display.d.ts +0 -31
  198. package/dist/components/data-table/helpers.d.ts +0 -10
  199. package/dist/components/data-table/index.d.ts +0 -7
  200. package/dist/components/data-table/json-cell.d.ts +0 -6
  201. package/dist/components/data-table/pagination-footer.d.ts +0 -11
  202. package/dist/components/data-table/selection-toolbar.d.ts +0 -11
  203. package/dist/components/data-table/types.d.ts +0 -117
  204. package/dist/components/diff-viewer/build-changed-files-tree.d.ts +0 -4
  205. package/dist/components/diff-viewer/code-editor.d.ts +0 -45
  206. package/dist/components/diff-viewer/diff-bubble.d.ts +0 -14
  207. package/dist/components/diff-viewer/diff-card-body.d.ts +0 -60
  208. package/dist/components/diff-viewer/diff-card-content.d.ts +0 -23
  209. package/dist/components/diff-viewer/diff-card-load-state.d.ts +0 -9
  210. package/dist/components/diff-viewer/diff-card.d.ts +0 -46
  211. package/dist/components/diff-viewer/diff-drawer-empty-state.d.ts +0 -1
  212. package/dist/components/diff-viewer/diff-drawer-height.d.ts +0 -10
  213. package/dist/components/diff-viewer/diff-drawer-scroll.d.ts +0 -28
  214. package/dist/components/diff-viewer/diff-drawer.d.ts +0 -29
  215. package/dist/components/diff-viewer/diff-editor.d.ts +0 -20
  216. package/dist/components/diff-viewer/diff-size.d.ts +0 -16
  217. package/dist/components/diff-viewer/diff-view-adapter.d.ts +0 -27
  218. package/dist/components/diff-viewer/diff-viewer-options-menu.d.ts +0 -16
  219. package/dist/components/diff-viewer/diff-viewer.d.ts +0 -14
  220. package/dist/components/diff-viewer/diff-viewer.store.d.ts +0 -21
  221. package/dist/components/diff-viewer/file-change-badge.d.ts +0 -3
  222. package/dist/components/diff-viewer/file-list-panel.d.ts +0 -18
  223. package/dist/components/diff-viewer/index.d.ts +0 -9
  224. package/dist/components/diff-viewer/monaco-browser.d.ts +0 -1
  225. package/dist/components/diff-viewer/types.d.ts +0 -13
  226. package/dist/components/diff-viewer/use-selected-diff-scroll.d.ts +0 -23
  227. package/dist/components/file-browser/column-file-browser.d.ts +0 -20
  228. package/dist/components/internal/performance-panel.d.ts +0 -40
  229. package/dist/components/internal/style-guide.d.ts +0 -14
  230. package/dist/components/internal/token-editor-controls.d.ts +0 -8
  231. package/dist/components/internal/token-editor-data.d.ts +0 -40
  232. package/dist/components/internal/token-editor-state.d.ts +0 -22
  233. package/dist/components/kanban-renderer/collection-badge.d.ts +0 -7
  234. package/dist/components/kanban-renderer/display-menu.d.ts +0 -16
  235. package/dist/components/kanban-renderer/filter-menu.d.ts +0 -12
  236. package/dist/components/kanban-renderer/index.d.ts +0 -19
  237. package/dist/components/kanban-renderer/kanban-renderer-attribute-badge.d.ts +0 -7
  238. package/dist/components/kanban-renderer/kanban-renderer-badge-helpers.d.ts +0 -46
  239. package/dist/components/kanban-renderer/kanban-renderer-board-column-header.d.ts +0 -8
  240. package/dist/components/kanban-renderer/kanban-renderer-board-group-section.d.ts +0 -17
  241. package/dist/components/kanban-renderer/kanban-renderer-board-move.d.ts +0 -21
  242. package/dist/components/kanban-renderer/kanban-renderer-board.d.ts +0 -49
  243. package/dist/components/kanban-renderer/kanban-renderer-card.d.ts +0 -17
  244. package/dist/components/kanban-renderer/kanban-renderer-content.d.ts +0 -27
  245. package/dist/components/kanban-renderer/kanban-renderer-create-dialog.d.ts +0 -12
  246. package/dist/components/kanban-renderer/kanban-renderer-create-field.d.ts +0 -10
  247. package/dist/components/kanban-renderer/kanban-renderer-enum-helpers.d.ts +0 -10
  248. package/dist/components/kanban-renderer/kanban-renderer-grouping.d.ts +0 -23
  249. package/dist/components/kanban-renderer/kanban-renderer-helpers.d.ts +0 -58
  250. package/dist/components/kanban-renderer/kanban-renderer-list-items.d.ts +0 -25
  251. package/dist/components/kanban-renderer/kanban-renderer-list.d.ts +0 -43
  252. package/dist/components/kanban-renderer/kanban-renderer-story-fixtures.d.ts +0 -14
  253. package/dist/components/kanban-renderer/kanban-renderer-toolbar.d.ts +0 -15
  254. package/dist/components/kanban-renderer/kanban-renderer-view-bar.d.ts +0 -14
  255. package/dist/components/kanban-renderer/kanban-renderer-views.d.ts +0 -12
  256. package/dist/components/kanban-renderer/kanban-renderer.d.ts +0 -43
  257. package/dist/components/kanban-renderer/types.d.ts +0 -159
  258. package/dist/components/kanban-renderer/use-kanban-renderer-store.d.ts +0 -78
  259. package/dist/components/kanban-renderer/use-resolved-attributes.d.ts +0 -14
  260. package/dist/components/layout/header.d.ts +0 -7
  261. package/dist/components/layout/horizontal-menu-stack.d.ts +0 -6
  262. package/dist/components/layout/index.d.ts +0 -8
  263. package/dist/components/layout/item-section.d.ts +0 -11
  264. package/dist/components/layout/panel-header.constants.d.ts +0 -3
  265. package/dist/components/layout/resizable-split-layout.d.ts +0 -22
  266. package/dist/components/layout/resizable-split-layout.geometry.d.ts +0 -56
  267. package/dist/components/layout/resizable-split-layout.handle.d.ts +0 -25
  268. package/dist/components/layout/resizable-split-layout.panels.d.ts +0 -29
  269. package/dist/components/layout/resizable-split-layout.root-size.d.ts +0 -3
  270. package/dist/components/list-row/list-row-actions.d.ts +0 -11
  271. package/dist/components/list-row/list-row-chrome.d.ts +0 -11
  272. package/dist/components/list-row/list-row-content.d.ts +0 -17
  273. package/dist/components/list-row/list-row-menu.d.ts +0 -12
  274. package/dist/components/list-row/list-row-root-props.d.ts +0 -34
  275. package/dist/components/list-row/list-row.d.ts +0 -2
  276. package/dist/components/list-row/list-row.types.d.ts +0 -109
  277. package/dist/components/list-row/searchable-action-menu.d.ts +0 -6
  278. package/dist/components/mermaid-renderer/download-png.d.ts +0 -7
  279. package/dist/components/mermaid-renderer/index.d.ts +0 -2
  280. package/dist/components/mermaid-renderer/mermaid-error-state.d.ts +0 -6
  281. package/dist/components/mermaid-renderer/mermaid-fixtures.d.ts +0 -9
  282. package/dist/components/mermaid-renderer/mermaid-fullscreen.d.ts +0 -10
  283. package/dist/components/mermaid-renderer/mermaid-renderer.d.ts +0 -8
  284. package/dist/components/mermaid-renderer/mermaid-svg-view.d.ts +0 -12
  285. package/dist/components/mermaid-renderer/mermaid-toolbar.d.ts +0 -12
  286. package/dist/components/mermaid-renderer/mermaid-zoom.d.ts +0 -6
  287. package/dist/components/mermaid-renderer/svg-data-url.d.ts +0 -6
  288. package/dist/components/mermaid-renderer/use-mermaid-render.d.ts +0 -5
  289. package/dist/components/notification-center/index.d.ts +0 -2
  290. package/dist/components/notification-center/notification-center.d.ts +0 -2
  291. package/dist/components/notification-center/notification-center.types.d.ts +0 -37
  292. package/dist/components/overlays/attached-menu.d.ts +0 -6
  293. package/dist/components/overlays/attached-panel.d.ts +0 -9
  294. package/dist/components/overlays/attachment-chip.d.ts +0 -13
  295. package/dist/components/overlays/bubble-button.d.ts +0 -10
  296. package/dist/components/overlays/bubble-panel.d.ts +0 -18
  297. package/dist/components/overlays/delete-confirmation-modal.d.ts +0 -13
  298. package/dist/components/overlays/dialog-accept-shortcut.d.ts +0 -12
  299. package/dist/components/overlays/index.d.ts +0 -17
  300. package/dist/components/overlays/repo-picker-dialog.d.ts +0 -25
  301. package/dist/components/overlays/resource-context-menu.d.ts +0 -35
  302. package/dist/components/overlays/search-modal-content.d.ts +0 -20
  303. package/dist/components/overlays/searchable-menu-input.d.ts +0 -9
  304. package/dist/components/overlays/searchable-menu.d.ts +0 -65
  305. package/dist/components/param-editor/index.d.ts +0 -31
  306. package/dist/components/param-editor/inputs/action-input.d.ts +0 -14
  307. package/dist/components/param-editor/inputs/anchor-grid-input.d.ts +0 -12
  308. package/dist/components/param-editor/inputs/anchor-grid.d.ts +0 -4
  309. package/dist/components/param-editor/inputs/boolean-input.d.ts +0 -13
  310. package/dist/components/param-editor/inputs/color-input.d.ts +0 -14
  311. package/dist/components/param-editor/inputs/date-input.d.ts +0 -16
  312. package/dist/components/param-editor/inputs/file-upload-input.d.ts +0 -15
  313. package/dist/components/param-editor/inputs/file-upload-value.d.ts +0 -7
  314. package/dist/components/param-editor/inputs/horizontal-text-input.d.ts +0 -13
  315. package/dist/components/param-editor/inputs/markdown-input.d.ts +0 -13
  316. package/dist/components/param-editor/inputs/number-input.d.ts +0 -18
  317. package/dist/components/param-editor/inputs/numeric-value.d.ts +0 -6
  318. package/dist/components/param-editor/inputs/range-input.d.ts +0 -18
  319. package/dist/components/param-editor/inputs/range-value.d.ts +0 -5
  320. package/dist/components/param-editor/inputs/resource-input-chips.d.ts +0 -15
  321. package/dist/components/param-editor/inputs/resource-input.d.ts +0 -20
  322. package/dist/components/param-editor/inputs/segmented-input.d.ts +0 -15
  323. package/dist/components/param-editor/inputs/selection-input.d.ts +0 -27
  324. package/dist/components/param-editor/inputs/selection-menu.d.ts +0 -39
  325. package/dist/components/param-editor/inputs/slider-marks.d.ts +0 -5
  326. package/dist/components/param-editor/inputs/text-input.d.ts +0 -14
  327. package/dist/components/param-editor/inputs/vector-input.d.ts +0 -17
  328. package/dist/components/param-editor/inputs/vector-value.d.ts +0 -7
  329. package/dist/components/param-editor/param-editor-advanced-field.d.ts +0 -14
  330. package/dist/components/param-editor/param-editor-control-fixtures.d.ts +0 -24
  331. package/dist/components/param-editor/param-editor-control-item.d.ts +0 -15
  332. package/dist/components/param-editor/param-editor-control-list.d.ts +0 -5
  333. package/dist/components/param-editor/param-editor-field-label.d.ts +0 -1
  334. package/dist/components/param-editor/param-editor-field.d.ts +0 -13
  335. package/dist/components/param-editor/param-editor-horizontal.d.ts +0 -11
  336. package/dist/components/param-editor/param-editor-inline-group.d.ts +0 -5
  337. package/dist/components/param-editor/param-editor-label.d.ts +0 -7
  338. package/dist/components/param-editor/param-editor-presentation.d.ts +0 -3
  339. package/dist/components/param-editor/param-editor-read-only-field.d.ts +0 -9
  340. package/dist/components/param-editor/param-editor-read-only-value.d.ts +0 -8
  341. package/dist/components/param-editor/param-editor-row.d.ts +0 -17
  342. package/dist/components/param-editor/param-editor-section.d.ts +0 -17
  343. package/dist/components/param-editor/param-editor.d.ts +0 -12
  344. package/dist/components/param-editor/param-editor.types.d.ts +0 -31
  345. package/dist/components/param-editor/resolve-param-value.d.ts +0 -2
  346. package/dist/components/primitives/alert.d.ts +0 -9
  347. package/dist/components/primitives/breadcrumb.d.ts +0 -20
  348. package/dist/components/primitives/checkbox.d.ts +0 -8
  349. package/dist/components/primitives/chip.d.ts +0 -4
  350. package/dist/components/primitives/content-placeholder.d.ts +0 -6
  351. package/dist/components/primitives/empty-state.d.ts +0 -12
  352. package/dist/components/primitives/error-boundary.d.ts +0 -26
  353. package/dist/components/primitives/glyph-icon.d.ts +0 -16
  354. package/dist/components/primitives/icon-color-picker.d.ts +0 -15
  355. package/dist/components/primitives/icon-options.d.ts +0 -301
  356. package/dist/components/primitives/index.d.ts +0 -39
  357. package/dist/components/primitives/info-card.d.ts +0 -12
  358. package/dist/components/primitives/integration-card.d.ts +0 -12
  359. package/dist/components/primitives/number-input.d.ts +0 -6
  360. package/dist/components/primitives/radio.d.ts +0 -8
  361. package/dist/components/primitives/resource-badge.d.ts +0 -64
  362. package/dist/components/primitives/scroll-area.d.ts +0 -17
  363. package/dist/components/primitives/segmented-control.d.ts +0 -20
  364. package/dist/components/primitives/session-indicator.d.ts +0 -15
  365. package/dist/components/primitives/simple-card.d.ts +0 -5
  366. package/dist/components/primitives/slider.d.ts +0 -5
  367. package/dist/components/primitives/switch.d.ts +0 -15
  368. package/dist/components/primitives/tag-swatch.d.ts +0 -10
  369. package/dist/components/primitives/toaster.d.ts +0 -3
  370. package/dist/components/primitives/tooltip.d.ts +0 -11
  371. package/dist/components/primitives/workspace-badge.d.ts +0 -23
  372. package/dist/components/rich-text/collaborative-markdown-editor/awareness-cursors.d.ts +0 -5
  373. package/dist/components/rich-text/collaborative-markdown-editor/collaborative-markdown-editor.d.ts +0 -9
  374. package/dist/components/rich-text/index.d.ts +0 -19
  375. package/dist/components/rich-text/lazy-markdown-editor.d.ts +0 -2
  376. package/dist/components/rich-text/markdown-editor/markdown-editor-scrolling.play.d.ts +0 -4
  377. package/dist/components/rich-text/markdown-editor/markdown-editor.d.ts +0 -17
  378. package/dist/components/rich-text/markdown-editor/markdown-table.story-fixture.d.ts +0 -3
  379. package/dist/components/rich-text/markdown-editor/plugins/MarkdownSectionNavigationPlugin.d.ts +0 -8
  380. package/dist/components/rich-text/markdown-editor/plugins/MarkdownSlashCommandPlugin.d.ts +0 -1
  381. package/dist/components/rich-text/markdown-editor/plugins/ReferenceLinkPlugin/ReferenceLinkNode.d.ts +0 -21
  382. package/dist/components/rich-text/markdown-editor/plugins/ReferenceLinkPlugin/ReferenceLinkTransformer.d.ts +0 -2
  383. package/dist/components/rich-text/markdown-editor/plugins/ReferenceLinkPlugin/index.d.ts +0 -2
  384. package/dist/components/rich-text/markdown-editor/plugins/markdown-history-plugin.d.ts +0 -1
  385. package/dist/components/rich-text/markdown-editor/plugins/markdown-section-navigation.d.ts +0 -20
  386. package/dist/components/rich-text/prompt-input/commands.d.ts +0 -2
  387. package/dist/components/rich-text/prompt-input/events.d.ts +0 -2
  388. package/dist/components/rich-text/prompt-input/plugins/CommentPlugin/CommentPlugin.d.ts +0 -1
  389. package/dist/components/rich-text/prompt-input/plugins/CommentPlugin/hooks/useCommentCommands.d.ts +0 -3
  390. package/dist/components/rich-text/prompt-input/plugins/CommentPlugin/hooks/useCommentSchema.d.ts +0 -1
  391. package/dist/components/rich-text/prompt-input/plugins/CommentPlugin/nodes/CommentNode/CommentNode.d.ts +0 -16
  392. package/dist/components/rich-text/prompt-input/plugins/ImperativeAPIPlugin.d.ts +0 -7
  393. package/dist/components/rich-text/prompt-input/plugins/KeyboardShortcutPlugin.d.ts +0 -6
  394. package/dist/components/rich-text/prompt-input/plugins/ReferenceMenuPlugin/ReferenceMenuOption.d.ts +0 -12
  395. package/dist/components/rich-text/prompt-input/plugins/ReferenceMenuPlugin/ReferenceMenuPlugin.d.ts +0 -11
  396. package/dist/components/rich-text/prompt-input/plugins/ReferenceMenuPlugin/components/ReferenceMenu/ReferenceMenu.d.ts +0 -9
  397. package/dist/components/rich-text/prompt-input/plugins/ReferenceMenuPlugin/components/ReferenceMenu/ReferenceMenuItem.d.ts +0 -12
  398. package/dist/components/rich-text/prompt-input/plugins/ReferenceMenuPlugin/constants.d.ts +0 -2
  399. package/dist/components/rich-text/prompt-input/plugins/ReferenceMenuPlugin/hooks/useContextLookup.d.ts +0 -14
  400. package/dist/components/rich-text/prompt-input/plugins/ReferenceMenuPlugin/utils/checkForTriggers.d.ts +0 -9
  401. package/dist/components/rich-text/prompt-input/plugins/ReferenceMenuPlugin/utils/getSortedMenuOptions.d.ts +0 -2
  402. package/dist/components/rich-text/prompt-input/plugins/ReferencePlugin/ReferencePlugin.d.ts +0 -7
  403. package/dist/components/rich-text/prompt-input/plugins/ReferencePlugin/nodes/ReferenceNode/ReferenceNode.d.ts +0 -25
  404. package/dist/components/rich-text/prompt-input/plugins/keyboard-shortcuts.d.ts +0 -11
  405. package/dist/components/rich-text/prompt-input/prompt-input.d.ts +0 -27
  406. package/dist/components/rich-text/prompt-input/theme/prompt-input-theme.d.ts +0 -3
  407. package/dist/components/rich-text/prompt-input/utils.d.ts +0 -22
  408. package/dist/components/rich-text/resource-activity-feed/resource-activity-feed.d.ts +0 -58
  409. package/dist/components/rich-text/rich-message/plugins/ReferenceLinkPlugin/ReferenceLinkNode.d.ts +0 -21
  410. package/dist/components/rich-text/rich-message/plugins/ReferenceLinkPlugin/ReferenceLinkTransformer.d.ts +0 -2
  411. package/dist/components/rich-text/rich-message/plugins/ReferenceLinkPlugin/index.d.ts +0 -2
  412. package/dist/components/rich-text/rich-message/rich-message.d.ts +0 -10
  413. package/dist/components/rich-text/shared/components/content-editable.d.ts +0 -9
  414. package/dist/components/rich-text/shared/components/default-rich-text-components.d.ts +0 -3
  415. package/dist/components/rich-text/shared/editor-config.d.ts +0 -5
  416. package/dist/components/rich-text/shared/lexical-code.d.ts +0 -2
  417. package/dist/components/rich-text/shared/markdown-ast.d.ts +0 -7
  418. package/dist/components/rich-text/shared/markdown-codec.d.ts +0 -3
  419. package/dist/components/rich-text/shared/markdown-export.d.ts +0 -2
  420. package/dist/components/rich-text/shared/markdown-import.d.ts +0 -2
  421. package/dist/components/rich-text/shared/markdown-inline.d.ts +0 -5
  422. package/dist/components/rich-text/shared/markdown-source-document.d.ts +0 -7
  423. package/dist/components/rich-text/shared/markdown-source-links.d.ts +0 -11
  424. package/dist/components/rich-text/shared/markdown-source-map.d.ts +0 -10
  425. package/dist/components/rich-text/shared/markdown-table.d.ts +0 -41
  426. package/dist/components/rich-text/shared/markdown-url-context.d.ts +0 -9
  427. package/dist/components/rich-text/shared/markdown-url.d.ts +0 -3
  428. package/dist/components/rich-text/shared/nodes/DataTableNode.d.ts +0 -24
  429. package/dist/components/rich-text/shared/nodes/MarkdownImageNode.d.ts +0 -35
  430. package/dist/components/rich-text/shared/nodes/MarkdownLinkNode.d.ts +0 -18
  431. package/dist/components/rich-text/shared/nodes/RawHtmlNode.d.ts +0 -31
  432. package/dist/components/rich-text/shared/plugins/CodePlugin/CodeBlockActionsPlugin.d.ts +0 -4
  433. package/dist/components/rich-text/shared/plugins/CodePlugin/CodeBlockPlugin.d.ts +0 -3
  434. package/dist/components/rich-text/shared/plugins/CodePlugin/CodeHighlightingPlugin.d.ts +0 -1
  435. package/dist/components/rich-text/shared/plugins/EquationPlugin/EquationComponent.d.ts +0 -6
  436. package/dist/components/rich-text/shared/plugins/EquationPlugin/EquationNode.d.ts +0 -26
  437. package/dist/components/rich-text/shared/plugins/EquationPlugin/EquationPlugin.d.ts +0 -4
  438. package/dist/components/rich-text/shared/plugins/EquationPlugin/KatexRenderer.d.ts +0 -4
  439. package/dist/components/rich-text/shared/plugins/FloatingTextFormatToolbarPlugin/FloatingTextFormatToolbarPlugin.d.ts +0 -4
  440. package/dist/components/rich-text/shared/plugins/FloatingTextFormatToolbarPlugin/floating-toolbar-buttons.d.ts +0 -18
  441. package/dist/components/rich-text/shared/plugins/FloatingTextFormatToolbarPlugin/index.d.ts +0 -1
  442. package/dist/components/rich-text/shared/plugins/FloatingTextFormatToolbarPlugin/resolve-block-type.d.ts +0 -17
  443. package/dist/components/rich-text/shared/plugins/FloatingTextFormatToolbarPlugin/should-show-floating-toolbar.d.ts +0 -12
  444. package/dist/components/rich-text/shared/plugins/HorizontalRulePlugin/HorizontalRuleNode.d.ts +0 -13
  445. package/dist/components/rich-text/shared/plugins/HorizontalRulePlugin/horizontalRule.d.ts +0 -2
  446. package/dist/components/rich-text/shared/plugins/LinkEditorPlugin/LinkEditorPlugin.d.ts +0 -4
  447. package/dist/components/rich-text/shared/plugins/LinkEditorPlugin/LinkPlugin.d.ts +0 -1
  448. package/dist/components/rich-text/shared/plugins/LinkEditorPlugin/commands.d.ts +0 -2
  449. package/dist/components/rich-text/shared/plugins/LinkEditorPlugin/index.d.ts +0 -3
  450. package/dist/components/rich-text/shared/plugins/LinkEditorPlugin/link-editor-content.d.ts +0 -18
  451. package/dist/components/rich-text/shared/plugins/LinkEditorPlugin/utils/getSelectedNode.d.ts +0 -2
  452. package/dist/components/rich-text/shared/plugins/LinkEditorPlugin/utils/link-edit-state.d.ts +0 -1
  453. package/dist/components/rich-text/shared/plugins/LinkEditorPlugin/utils/selection-link-url.d.ts +0 -2
  454. package/dist/components/rich-text/shared/plugins/LinkEditorPlugin/utils/setFloatingElemPos.d.ts +0 -1
  455. package/dist/components/rich-text/shared/plugins/LinkEditorPlugin/utils/url.d.ts +0 -2
  456. package/dist/components/rich-text/shared/plugins/MermaidPlugin/MermaidComponent.d.ts +0 -6
  457. package/dist/components/rich-text/shared/plugins/MermaidPlugin/MermaidNode.d.ts +0 -23
  458. package/dist/components/rich-text/shared/plugins/StateUpdatePlugin.d.ts +0 -6
  459. package/dist/components/rich-text/shared/plugins/ToggleEditablePlugin.d.ts +0 -3
  460. package/dist/components/rich-text/shared/plugins/TreeViewPlugin/TreeViewPlugin.d.ts +0 -1
  461. package/dist/components/rich-text/shared/prism-global.d.ts +0 -2
  462. package/dist/components/rich-text/shared/transformers/markdown-transformers-test-utils.d.ts +0 -3
  463. package/dist/components/rich-text/shared/transformers/markdown-transformers.d.ts +0 -16
  464. package/dist/components/rich-text/shared/types/rich-text-components.d.ts +0 -15
  465. package/dist/components/rich-text/theme/rich-text-theme.d.ts +0 -3
  466. package/dist/components/rich-text/types.d.ts +0 -8
  467. package/dist/components/rich-text/utils/inferResourceType.d.ts +0 -1
  468. package/dist/components/rich-text/utils/markdown.d.ts +0 -5
  469. package/dist/components/rich-text/utils/mediaType.d.ts +0 -1
  470. package/dist/components/sidenav/sidenav-footer.d.ts +0 -6
  471. package/dist/components/sidenav/sidenav-header.d.ts +0 -6
  472. package/dist/components/sidenav/sidenav.d.ts +0 -2
  473. package/dist/components/sidenav/sidenav.store.d.ts +0 -49
  474. package/dist/components/sidenav/sidenav.types.d.ts +0 -31
  475. package/dist/components/tab-strip/tab-visibility-filter.d.ts +0 -22
  476. package/dist/components/tab-strip/tab-visibility.store.d.ts +0 -41
  477. package/dist/components/tab-strip/window-tabs.d.ts +0 -15
  478. package/dist/components/tab-strip/window-title-bar.d.ts +0 -6
  479. package/dist/components/tag-editor/index.d.ts +0 -8
  480. package/dist/components/tag-editor/tag-editor-heading.d.ts +0 -11
  481. package/dist/components/tag-editor/tag-editor-row.d.ts +0 -20
  482. package/dist/components/tag-editor/tag-editor-save-bar.d.ts +0 -13
  483. package/dist/components/tag-editor/tag-editor.d.ts +0 -2
  484. package/dist/components/tag-editor/tag-editor.types.d.ts +0 -57
  485. package/dist/components/tag-editor/tag-settings-panel.d.ts +0 -30
  486. package/dist/components/terminal/bind-session.d.ts +0 -33
  487. package/dist/components/terminal/index.d.ts +0 -6
  488. package/dist/components/terminal/scripted-bridge.d.ts +0 -35
  489. package/dist/components/terminal/terminal-contract.d.ts +0 -22
  490. package/dist/components/terminal/terminal-theme.d.ts +0 -12
  491. package/dist/components/terminal/terminal.d.ts +0 -56
  492. package/dist/components/terminal/types.d.ts +0 -35
  493. package/dist/components/terminal/use-terminal-session.d.ts +0 -21
  494. package/dist/components/tree-list/tree-list-background.d.ts +0 -8
  495. package/dist/components/tree-list/tree-list-drag-provider.d.ts +0 -13
  496. package/dist/components/tree-list/tree-list-drag.d.ts +0 -7
  497. package/dist/components/tree-list/tree-list-inline-creation-story.d.ts +0 -3
  498. package/dist/components/tree-list/tree-list-inline-input.d.ts +0 -9
  499. package/dist/components/tree-list/tree-list-model.d.ts +0 -58
  500. package/dist/components/tree-list/tree-list-move-surface.d.ts +0 -7
  501. package/dist/components/tree-list/tree-list-node-row.d.ts +0 -21
  502. package/dist/components/tree-list/tree-list-order-filter.d.ts +0 -2
  503. package/dist/components/tree-list/tree-list-order.store.d.ts +0 -45
  504. package/dist/components/tree-list/tree-list-reorder.d.ts +0 -24
  505. package/dist/components/tree-list/tree-list-section-header.d.ts +0 -14
  506. package/dist/components/tree-list/tree-list-sortable.d.ts +0 -24
  507. package/dist/components/tree-list/tree-list-visibility-filter.d.ts +0 -24
  508. package/dist/components/tree-list/tree-list-visibility.store.d.ts +0 -45
  509. package/dist/components/tree-list/tree-list.d.ts +0 -41
  510. package/dist/components/tree-list/tree-list.types.d.ts +0 -63
  511. package/dist/components/tree-list/use-tree-list-keyboard-navigation.d.ts +0 -15
  512. package/dist/diff-bubble-DvUPRnfB.js +0 -183
  513. package/dist/diff-bubble-DvUPRnfB.js.map +0 -1
  514. package/dist/edit-mode-data-table-Nfmfi7bz.js +0 -847
  515. package/dist/edit-mode-data-table-Nfmfi7bz.js.map +0 -1
  516. package/dist/empty-state-Bo4HVrgr.js +0 -34
  517. package/dist/empty-state-Bo4HVrgr.js.map +0 -1
  518. package/dist/foundations/gallery/gallery-frame.d.ts +0 -21
  519. package/dist/foundations/gallery/sections/badges-section.d.ts +0 -1
  520. package/dist/foundations/gallery/sections/buttons-section.d.ts +0 -1
  521. package/dist/foundations/gallery/sections/composite-chat-section.d.ts +0 -1
  522. package/dist/foundations/gallery/sections/composites-section.d.ts +0 -1
  523. package/dist/foundations/gallery/sections/feedback-section.d.ts +0 -1
  524. package/dist/foundations/gallery/sections/input-authoring-card.d.ts +0 -1
  525. package/dist/foundations/gallery/sections/inputs-section.d.ts +0 -1
  526. package/dist/foundations/gallery/sections/layout-section.d.ts +0 -1
  527. package/dist/foundations/gallery/sections/navigation-identity-section.d.ts +0 -1
  528. package/dist/foundations/gallery/sections/overlays-section.d.ts +0 -1
  529. package/dist/foundations/gallery/sections/panels-section.d.ts +0 -1
  530. package/dist/foundations/gallery/sections/param-editor-composite-card.d.ts +0 -1
  531. package/dist/foundations/gallery/sections/settings-composite-cards.d.ts +0 -1
  532. package/dist/kanban-renderer-toolbar-Buek4icz.js +0 -1375
  533. package/dist/kanban-renderer-toolbar-Buek4icz.js.map +0 -1
  534. package/dist/lazy-markdown-editor-PzIBc9-l.js +0 -42
  535. package/dist/lazy-markdown-editor-PzIBc9-l.js.map +0 -1
  536. package/dist/list-row-DHzRa9-O.js +0 -815
  537. package/dist/list-row-DHzRa9-O.js.map +0 -1
  538. package/dist/markdown-BCfPxNpb.js +0 -1663
  539. package/dist/markdown-BCfPxNpb.js.map +0 -1
  540. package/dist/markdown-editor-CsJ4KNGu.js +0 -1034
  541. package/dist/markdown-editor-CsJ4KNGu.js.map +0 -1
  542. package/dist/mermaid-renderer-D0YP0FmJ.js +0 -425
  543. package/dist/mermaid-renderer-D0YP0FmJ.js.map +0 -1
  544. package/dist/mermaid.js.map +0 -1
  545. package/dist/monaco-browser-l82HnffN.js +0 -22
  546. package/dist/monaco-browser-l82HnffN.js.map +0 -1
  547. package/dist/param-editor-CFM2Nf3l.js +0 -161
  548. package/dist/param-editor-CFM2Nf3l.js.map +0 -1
  549. package/dist/param-editor-field-Bj-AGUY6.js +0 -1728
  550. package/dist/param-editor-field-Bj-AGUY6.js.map +0 -1
  551. package/dist/param-editor.js.map +0 -1
  552. package/dist/prism-n5gcERyD.js +0 -202
  553. package/dist/prism-n5gcERyD.js.map +0 -1
  554. package/dist/radio-BfjibByI.js +0 -51
  555. package/dist/radio-BfjibByI.js.map +0 -1
  556. package/dist/rich-message-q6Y6QJOq.js +0 -633
  557. package/dist/rich-message-q6Y6QJOq.js.map +0 -1
  558. package/dist/rich-text.js.map +0 -1
  559. package/dist/scroll-area-BMbg1WcD.js +0 -91
  560. package/dist/scroll-area-BMbg1WcD.js.map +0 -1
  561. package/dist/slider-DBHjdxsU.js +0 -1092
  562. package/dist/slider-DBHjdxsU.js.map +0 -1
  563. package/dist/test-utils/local-storage.d.ts +0 -1
  564. package/dist/theme/custom/index.d.ts +0 -2
  565. package/dist/theme/custom/vscode-theme.d.ts +0 -32
  566. package/dist/theme/global.d.ts +0 -62
  567. package/dist/theme/index.d.ts +0 -3
  568. package/dist/theme/primitives/colors.d.ts +0 -1081
  569. package/dist/theme/primitives/fonts.d.ts +0 -84
  570. package/dist/theme/primitives/sizes.d.ts +0 -207
  571. package/dist/theme/recipes/activity-comment.d.ts +0 -36
  572. package/dist/theme/recipes/alert.d.ts +0 -1
  573. package/dist/theme/recipes/badge.d.ts +0 -58
  574. package/dist/theme/recipes/button.d.ts +0 -188
  575. package/dist/theme/recipes/color-picker.d.ts +0 -18
  576. package/dist/theme/recipes/dialog.d.ts +0 -1
  577. package/dist/theme/recipes/divider.d.ts +0 -1
  578. package/dist/theme/recipes/drawer.d.ts +0 -1
  579. package/dist/theme/recipes/editable.d.ts +0 -46
  580. package/dist/theme/recipes/form.d.ts +0 -1
  581. package/dist/theme/recipes/input.d.ts +0 -94
  582. package/dist/theme/recipes/kbd.d.ts +0 -41
  583. package/dist/theme/recipes/menu.d.ts +0 -1
  584. package/dist/theme/recipes/number-input.d.ts +0 -98
  585. package/dist/theme/recipes/popover.d.ts +0 -16
  586. package/dist/theme/recipes/progress-circle.d.ts +0 -28
  587. package/dist/theme/recipes/resizable-split-layout.d.ts +0 -106
  588. package/dist/theme/recipes/segmented-control.d.ts +0 -22
  589. package/dist/theme/recipes/skeleton.d.ts +0 -1
  590. package/dist/theme/recipes/switch.d.ts +0 -18
  591. package/dist/theme/recipes/tabs.d.ts +0 -80
  592. package/dist/theme/recipes/textarea.d.ts +0 -62
  593. package/dist/theme/recipes/timeline.d.ts +0 -83
  594. package/dist/theme/recipes/tooltip.d.ts +0 -1
  595. package/dist/theme/recipes/window-title-bar.d.ts +0 -19
  596. package/dist/theme/shadowless-default-config.d.ts +0 -2
  597. package/dist/theme/theme.d.ts +0 -2
  598. package/dist/theme/tokens/borders.d.ts +0 -17
  599. package/dist/theme/tokens/colors-background.d.ts +0 -260
  600. package/dist/theme/tokens/colors-visualization.d.ts +0 -162
  601. package/dist/theme/tokens/colors.d.ts +0 -878
  602. package/dist/theme/tokens/layer-styles.d.ts +0 -1
  603. package/dist/theme/tokens/text.d.ts +0 -1
  604. package/dist/theme-AzJH4Om3.js +0 -3999
  605. package/dist/theme-AzJH4Om3.js.map +0 -1
  606. package/dist/theme-preference-DxGW1qg-.js +0 -114
  607. package/dist/theme-preference-DxGW1qg-.js.map +0 -1
  608. package/dist/theme.js.map +0 -1
  609. package/dist/tree-list-CPjbGTvs.js +0 -1348
  610. package/dist/tree-list-CPjbGTvs.js.map +0 -1
  611. package/dist/utils/apply-file-icon-theme-preference.d.ts +0 -35
  612. package/dist/utils/apply-theme-preference.d.ts +0 -22
  613. package/dist/utils/browser-storage.d.ts +0 -7
  614. package/dist/utils/file-icon-theme-preference.d.ts +0 -15
  615. package/dist/utils/get-file-type-icon.d.ts +0 -2
  616. package/dist/utils/prism.d.ts +0 -1
  617. package/dist/utils/resolve-file-icon-element.d.ts +0 -8
  618. package/dist/utils/theme-preference.d.ts +0 -20
  619. package/dist/workspace-badge-CuOcmnZc.js +0 -175
  620. package/dist/workspace-badge-CuOcmnZc.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"chat-ui.js","sources":["../src/components/chat-ui/components/ai-conversation.tsx","../src/components/chat-ui/components/ai-message.tsx","../src/components/chat-ui/components/approval-prompt.tsx","../src/components/chat-ui/components/attachment-list.tsx","../src/components/chat-ui/components/auto-scroll.tsx","../src/components/chat-ui/components/chat-input-actions.ts","../src/components/chat-ui/components/chat-input-attachments.ts","../src/components/chat-ui/components/timeline-tool-blocks.tsx","../src/components/chat-ui/components/chat-input-question-prompt.tsx","../src/components/chat-ui/components/composer-constants.ts","../src/components/chat-ui/components/send-button.tsx","../src/components/chat-ui/components/chat-input-history.ts","../src/components/chat-ui/components/use-chat-input-history.ts","../src/components/chat-ui/components/chat-input.tsx","../src/components/chat-ui/tool-rendering/question-prompt.ts","../src/components/chat-ui/components/chat-message-animation.ts","../src/components/chat-ui/components/message-action-panel.tsx","../src/components/chat-ui/components/ai-response.tsx","../src/components/chat-ui/utils/tool-name.ts","../src/components/chat-ui/utils/get-icon.ts","../src/components/chat-ui/utils/diff.ts","../src/components/chat-ui/tool-rendering/shared.ts","../src/components/chat-ui/tool-rendering/apply-patch-renderer.ts","../src/components/chat-ui/tool-rendering/edit-renderer.ts","../src/components/chat-ui/tool-rendering/question-renderer.ts","../src/components/chat-ui/tool-rendering/standard-renderers.ts","../src/components/chat-ui/tool-rendering/todowrite-renderer.ts","../src/components/chat-ui/tool-rendering/default-renderers.ts","../src/components/chat-ui/tool-rendering/build-timeline.ts","../src/components/chat-ui/components/timeline-title.tsx","../src/components/chat-ui/components/timeline.tsx","../src/components/chat-ui/components/tool-invocation-timeline.tsx","../src/components/chat-ui/components/message-parts-renderer.tsx","../src/components/chat-ui/components/message-types.ts","../src/components/chat-ui/components/chat-message-list-items.tsx","../src/components/chat-ui/components/chat-panel-sticky-user-message.ts","../src/components/chat-ui/components/chat-message-list.tsx","../src/components/chat-ui/utils/editor-state.ts","../src/components/chat-ui/components/queued-follow-up-list.tsx","../src/components/chat-ui/components/chat-panel-composer.tsx","../src/components/chat-ui/components/working-indicator.tsx","../src/components/chat-ui/components/chat-panel.tsx","../src/components/chat-ui/components/chat-skeleton.tsx","../src/components/chat-ui/components/conversation-browse.tsx","../src/components/chat-ui/components/workspace-hub.tsx"],"sourcesContent":["import type { HTMLChakraProps, IconButtonProps } from \"@chakra-ui/react\";\nimport { AbsoluteCenter, chakra, IconButton } from \"@chakra-ui/react\";\nimport { ArrowDownIcon } from \"lucide-react\";\nimport { StickToBottom as StickToBottomEl, useStickToBottomContext } from \"use-stick-to-bottom\";\nimport { ScrollArea } from \"@/components/primitives/scroll-area\";\n\nexport type ConversationRootProps = HTMLChakraProps<\"div\", React.ComponentProps<typeof StickToBottomEl>>;\n\nexport const conversationRootDefaultProps = {\n \"aria-roledescription\": \"conversation\",\n initial: \"instant\",\n resize: \"instant\",\n role: \"log\",\n} as const;\n\nexport const ConversationRoot = chakra(\n StickToBottomEl,\n {\n base: {\n position: \"relative\",\n flex: 1,\n overflow: \"hidden\",\n height: \"full\",\n },\n },\n {\n forwardProps: [\"initial\", \"resize\"],\n defaultProps: conversationRootDefaultProps,\n },\n);\n\nexport type ConversationContentProps = Omit<React.ComponentProps<typeof ScrollArea>, \"contentProps\" | \"viewportRef\">;\n\nexport const ConversationContent = (props: ConversationContentProps) => {\n const { children, ...rest } = props;\n const { contentRef, scrollRef } = useStickToBottomContext();\n\n return (\n <ScrollArea\n {...rest}\n height=\"full\"\n width=\"full\"\n showHorizontalScrollbar={false}\n viewportRef={scrollRef as React.Ref<HTMLDivElement>}\n contentRef={contentRef as React.Ref<HTMLDivElement>}\n verticalScrollbarProps={{ zIndex: 2 }}\n contentProps={{\n py: \"sm\",\n \"aria-live\": \"polite\",\n role: \"list\",\n }}\n >\n {children}\n </ScrollArea>\n );\n};\n\nexport type ConversationScrollButtonProps = IconButtonProps;\n\nexport const conversationScrollButtonContainerDefaultProps = {\n axis: \"horizontal\",\n bottom: \"md\",\n zIndex: 2,\n} as const;\n\nexport const ConversationScrollButton = (props: ConversationScrollButtonProps) => {\n const { isAtBottom, scrollToBottom } = useStickToBottomContext();\n\n return (\n !isAtBottom && (\n <AbsoluteCenter {...conversationScrollButtonContainerDefaultProps}>\n <IconButton rounded=\"full\" onClick={() => scrollToBottom()} variant=\"outline\" size=\"xs\" {...props}>\n <ArrowDownIcon size={16} />\n </IconButton>\n </AbsoluteCenter>\n )\n );\n};\n\nexport const ChatPrimitives = {\n Root: ConversationRoot,\n Viewport: ConversationContent,\n ScrollToBottom: ConversationScrollButton,\n} as const;\n","import type { HTMLChakraProps, RecipeVariantProps } from \"@chakra-ui/react\";\nimport { createSlotRecipeContext, defineSlotRecipe } from \"@chakra-ui/react\";\n\nconst recipe = defineSlotRecipe({\n className: \"ai-message\",\n slots: [\"root\", \"content\"],\n base: {\n root: {\n display: \"flex\",\n width: \"full\",\n alignItems: \"end\",\n justifyContent: \"end\",\n gap: \"sm\",\n \"&:has(+ [data-scope='ai-message'][data-part='root'])\": {\n mb: 0,\n },\n },\n content: {\n display: \"flex\",\n flexDirection: \"column\",\n gap: \"sm\",\n textStyle: \"sm\",\n overflow: \"hidden\",\n borderRadius: \"0\",\n },\n },\n variants: {\n from: {\n user: {\n root: {\n mb: \"md\",\n flexDirection: \"row\",\n },\n content: {\n borderTopWidth: \"1px\",\n borderRightWidth: \"1px\",\n borderBottomWidth: \"1px\",\n borderLeftWidth: \"1px\",\n borderColor: \"border.subtle\",\n bg: \"bg.subtle\",\n px: \"xs\",\n py: \"xs\",\n width: \"full\",\n borderRadius: \"0\",\n },\n },\n assistant: {\n root: {\n mb: \"md\",\n flexDirection: \"row\",\n justifyContent: \"start\",\n },\n content: {\n width: \"full\",\n px: \"xs\",\n },\n },\n developer: {\n root: {\n width: \"full\",\n flexDirection: \"row-reverse\",\n },\n content: {\n width: \"full\",\n },\n },\n },\n size: {\n sm: {\n root: { gap: \"xs\" },\n content: { textStyle: \"xs\" },\n },\n md: {},\n lg: {\n root: { gap: \"md\" },\n content: { textStyle: \"md\" },\n },\n },\n shape: {\n rounded: {\n content: { rounded: \"0\" },\n },\n pill: {\n content: { rounded: \"0\" },\n },\n square: {\n content: { rounded: \"0\" },\n },\n },\n },\n defaultVariants: {\n from: \"user\",\n size: \"md\",\n shape: \"rounded\",\n },\n});\n\nconst { withProvider, withContext } = createSlotRecipeContext({ recipe });\n\ntype VariantProps = RecipeVariantProps<typeof recipe>;\n\nexport interface MessageRootProps extends HTMLChakraProps<\"div\">, VariantProps {}\nexport const MessageRoot = withProvider<HTMLDivElement, MessageRootProps>(\"div\", \"root\");\n\nexport interface MessageContentProps extends HTMLChakraProps<\"div\">, VariantProps {}\nexport const MessageContent = withContext<HTMLDivElement, MessageContentProps>(\"div\", \"content\");\n\nexport const ChatMessage = {\n Root: MessageRoot,\n Content: MessageContent,\n} as const;\n","import { Box, Button, Code, Flex, HStack, Text } from \"@chakra-ui/react\";\nimport { ShieldCheck, ShieldX } from \"lucide-react\";\nimport { ScrollArea } from \"@/components/primitives/scroll-area\";\n\ninterface ApprovalPromptProps {\n toolName: string;\n toolInput?: unknown;\n onApprove: () => void;\n onDeny: () => void;\n}\n\nconst formatToolInput = (input: unknown) => {\n if (input == null) return null;\n\n const text = typeof input === \"string\" ? input : JSON.stringify(input, null, 2);\n if (text.length === 0) return null;\n\n const truncated = text.length > 200 ? `${text.slice(0, 200)}...` : text;\n return truncated;\n};\n\nexport const ApprovalPrompt = (props: ApprovalPromptProps) => {\n const { toolName, toolInput, onApprove, onDeny } = props;\n const formattedInput = formatToolInput(toolInput);\n\n return (\n <Box px=\"sm\" py=\"xs\" mx=\"sm\" borderWidth=\"1px\" borderColor=\"border.warning\" borderRadius=\"lg\" bg=\"bg.warning\">\n <Flex direction=\"column\" gap=\"xs\">\n <Text textStyle=\"label/S/medium\" color=\"fg\">\n Allow <Code size=\"sm\">{toolName}</Code>?\n </Text>\n\n {formattedInput ? (\n <ScrollArea maxH=\"6rem\">\n <Code size=\"sm\" whiteSpace=\"pre-wrap\" display=\"block\" width=\"100%\">\n {formattedInput}\n </Code>\n </ScrollArea>\n ) : null}\n\n <HStack gap=\"xs\" justifyContent=\"flex-end\">\n <Button size=\"xs\" variant=\"outline\" onClick={onDeny}>\n <ShieldX size={14} />\n Deny\n </Button>\n <Button size=\"xs\" colorPalette=\"green\" onClick={onApprove}>\n <ShieldCheck size={14} />\n Allow\n </Button>\n </HStack>\n </Flex>\n </Box>\n );\n};\n","import { Stack } from \"@chakra-ui/react\";\nimport type { ReactNode } from \"react\";\nimport { Fragment } from \"react\";\nimport type { ResourceBadgeProps } from \"@/components/primitives/resource-badge\";\nimport { ResourceBadge } from \"@/components/primitives/resource-badge\";\n\nexport type AttachmentListRenderBadge = (props: AttachmentListItemRenderProps) => ReactNode;\n\nexport interface AttachmentListItemRenderProps {\n attachmentId: string;\n onSelect?: () => void;\n onRemove?: () => void;\n size: ResourceBadgeProps[\"size\"];\n tone: ResourceBadgeProps[\"tone\"];\n}\n\nexport interface AttachmentListProps {\n attachments?: string[];\n onSelect?: (attachmentId: string) => void;\n onRemove?: (attachmentId: string) => void;\n renderBadge?: AttachmentListRenderBadge;\n size?: ResourceBadgeProps[\"size\"];\n tone?: ResourceBadgeProps[\"tone\"];\n}\n\nconst DEFAULT_SIZE: NonNullable<ResourceBadgeProps[\"size\"]> = \"md\";\nconst DEFAULT_TONE: NonNullable<ResourceBadgeProps[\"tone\"]> = \"neutral\";\n\n/**\n * Simple attachment list component that displays resource badges.\n *\n */\nexport const AttachmentList = (props: AttachmentListProps) => {\n const { attachments = [], onSelect, onRemove, renderBadge, size = DEFAULT_SIZE, tone = DEFAULT_TONE } = props;\n\n if (attachments.length === 0) return null;\n\n return (\n <Stack marginBottom=\"sm\" gap=\"1\" flexDir=\"row\" flexWrap=\"wrap\">\n {attachments.map((attachment) => {\n const select = onSelect ? () => onSelect(attachment) : undefined;\n const remove = onRemove ? () => onRemove(attachment) : undefined;\n\n if (renderBadge) {\n const rendered = renderBadge({ attachmentId: attachment, onSelect: select, onRemove: remove, size, tone });\n return <Fragment key={attachment}>{rendered}</Fragment>;\n }\n\n return (\n <ResourceBadge\n key={attachment}\n fileName={attachment}\n onSelect={select}\n onRemove={remove}\n size={size}\n tone={tone}\n />\n );\n })}\n </Stack>\n );\n};\n","import { useEffect, useRef } from \"react\";\nimport { useStickToBottomContext } from \"use-stick-to-bottom\";\n\nexport interface AutoScrollProps {\n userMessageCount: number;\n conversationKey?: string | null;\n}\n\ninterface ShouldAutoScrollArgs {\n previousUserMessageCount: number;\n userMessageCount: number;\n}\n\nexport interface AutoScrollState {\n conversationKey: string | null;\n userMessageCount: number;\n}\n\ninterface NextAutoScrollStateArgs {\n state: AutoScrollState;\n conversationKey?: string | null;\n userMessageCount: number;\n}\n\ninterface ScrollForNextAutoScrollStateArgs extends NextAutoScrollStateArgs {\n scrollToBottom: (animation?: \"instant\") => void;\n}\n\nexport const shouldAutoScroll = (args: ShouldAutoScrollArgs) => {\n const { previousUserMessageCount, userMessageCount } = args;\n\n if (previousUserMessageCount === 0) {\n return false;\n }\n\n return userMessageCount > previousUserMessageCount;\n};\n\nexport const getNextAutoScrollState = (args: NextAutoScrollStateArgs) => {\n const conversationKey = args.conversationKey ?? null;\n\n if (args.state.conversationKey !== conversationKey) {\n return {\n shouldScroll: false,\n state: {\n conversationKey,\n userMessageCount: args.userMessageCount,\n },\n };\n }\n\n return {\n shouldScroll: shouldAutoScroll({\n previousUserMessageCount: args.state.userMessageCount,\n userMessageCount: args.userMessageCount,\n }),\n state: {\n conversationKey,\n userMessageCount: Math.max(args.state.userMessageCount, args.userMessageCount),\n },\n };\n};\n\nexport const scrollForNextAutoScrollState = (args: ScrollForNextAutoScrollStateArgs) => {\n const next = getNextAutoScrollState(args);\n\n if (next.shouldScroll) {\n args.scrollToBottom(\"instant\");\n }\n\n return next;\n};\n\nexport function AutoScroll(props: AutoScrollProps) {\n const { conversationKey, userMessageCount } = props;\n const { scrollToBottom } = useStickToBottomContext();\n const stateRef = useRef<AutoScrollState>({\n conversationKey: conversationKey ?? null,\n userMessageCount,\n });\n\n useEffect(() => {\n const next = scrollForNextAutoScrollState({\n state: stateRef.current,\n conversationKey,\n userMessageCount,\n scrollToBottom,\n });\n\n stateRef.current = next.state;\n }, [conversationKey, userMessageCount, scrollToBottom]);\n\n return null;\n}\n","interface ChatInputActionState {\n canInterrupt: boolean;\n /** False while the runtime cannot accept a message, for example without a model. */\n canSubmit: boolean;\n hasQuestionPrompt: boolean;\n isDisabled: boolean;\n streaming: boolean;\n text: string;\n}\n\nexport type ChatInputAction = \"interrupt\" | \"none\" | \"submit\";\n\nconst hasMessageText = (text: string) => text.trim().length > 0;\n\nexport const resolveChatInputKeyboardAction = (state: ChatInputActionState): ChatInputAction => {\n const { canSubmit, isDisabled, text } = state;\n if (isDisabled || !canSubmit || !hasMessageText(text)) return \"none\";\n return \"submit\";\n};\n\nexport const resolveChatInputButtonAction = (state: ChatInputActionState): ChatInputAction => {\n const { canInterrupt, canSubmit, hasQuestionPrompt, isDisabled, streaming, text } = state;\n if (isDisabled) return \"none\";\n if (canSubmit && hasMessageText(text)) return \"submit\";\n if (streaming && !hasQuestionPrompt) return canInterrupt ? \"interrupt\" : \"none\";\n return \"none\";\n};\n","import type { ClipboardEvent, DragEvent } from \"react\";\n\nexport const DEFAULT_TEXT_ATTACHMENT_PASTE_LINE_THRESHOLD = 200;\n\nexport const shouldAttachPastedText = (text: string, lineThreshold = DEFAULT_TEXT_ATTACHMENT_PASTE_LINE_THRESHOLD) =>\n text.length > 0 && text.split(/\\r\\n|\\r|\\n/).length > lineThreshold;\n\nexport const createAttachmentEventHandlers = (input: {\n onAttachFiles?: (files: File[]) => void;\n onAttachText?: (text: string) => void;\n textAttachmentPasteLineThreshold: number;\n}) => {\n const { onAttachFiles, onAttachText, textAttachmentPasteLineThreshold } = input;\n\n const onPasteCapture = (event: ClipboardEvent<HTMLDivElement>) => {\n const files = Array.from(event.clipboardData.files ?? []);\n if (files.length > 0 && onAttachFiles) {\n event.preventDefault();\n onAttachFiles(files);\n return;\n }\n\n const pastedText = event.clipboardData.getData(\"text/plain\");\n if (onAttachText && shouldAttachPastedText(pastedText, textAttachmentPasteLineThreshold)) {\n event.preventDefault();\n onAttachText(pastedText);\n }\n };\n\n const onDropCapture = (event: DragEvent<HTMLDivElement>) => {\n const files = Array.from(event.dataTransfer.files ?? []);\n if (files.length === 0 || !onAttachFiles) return;\n\n event.preventDefault();\n onAttachFiles(files);\n };\n\n const onDragOver = (event: DragEvent<HTMLDivElement>) => {\n if (!onAttachFiles || !Array.from(event.dataTransfer.types).includes(\"Files\")) return;\n event.preventDefault();\n };\n\n return { onDragOver, onDropCapture, onPasteCapture };\n};\n","import { Box, Stack, Text, Textarea } from \"@chakra-ui/react\";\nimport type { FormEvent } from \"react\";\nimport { Checkbox } from \"@/components/primitives/checkbox\";\nimport { Radio, RadioGroup } from \"@/components/primitives/radio\";\nimport type { QuestionFormBlockQuestion, TodoListBlockItem } from \"./timeline\";\n\nconst preventSubmit = (event: FormEvent) => {\n event.preventDefault();\n};\n\ninterface QuestionFormBlockViewProps {\n questions: QuestionFormBlockQuestion[];\n editable?: boolean;\n selectedOptionsByQuestion?: Record<string, string[]>;\n customAnswersByQuestion?: Record<string, string>;\n onToggleOption?: (question: QuestionFormBlockQuestion, questionIndex: number, optionLabel: string) => void;\n onCustomAnswerChange?: (question: QuestionFormBlockQuestion, questionIndex: number, answer: string) => void;\n}\n\nconst QuestionOptionContent = (props: { option: QuestionFormBlockQuestion[\"options\"][number] }) => {\n const { option } = props;\n\n return (\n <Stack gap=\"0\" minWidth=\"0\">\n <Text textStyle=\"label/S/regular\" color=\"fg\">\n {option.label}\n </Text>\n {option.description ? (\n <Text textStyle=\"label/XS/regular\" color=\"fg.muted\">\n {option.description}\n </Text>\n ) : null}\n </Stack>\n );\n};\n\nconst QuestionCheckboxOptionRow = (props: {\n option: QuestionFormBlockQuestion[\"options\"][number];\n name: string;\n checked: boolean;\n editable: boolean;\n onToggle: () => void;\n}) => {\n const { option, name, checked, editable, onToggle } = props;\n\n return (\n <Checkbox\n name={name}\n checked={checked}\n readOnly={!editable}\n aria-readonly={editable ? undefined : \"true\"}\n inputProps={editable ? undefined : { tabIndex: -1 }}\n alignItems=\"flex-start\"\n onCheckedChange={editable ? onToggle : undefined}\n >\n <QuestionOptionContent option={option} />\n </Checkbox>\n );\n};\n\nconst QuestionRadioOptions = (props: {\n question: QuestionFormBlockQuestion;\n questionIndex: number;\n name: string;\n selectedOption?: string;\n editable: boolean;\n onToggleOption?: (question: QuestionFormBlockQuestion, questionIndex: number, optionLabel: string) => void;\n}) => {\n const { question, questionIndex, name, selectedOption, editable, onToggleOption } = props;\n\n return (\n <RadioGroup\n name={name}\n value={selectedOption ?? null}\n readOnly={!editable}\n aria-readonly={editable ? undefined : \"true\"}\n display=\"flex\"\n flexDirection=\"column\"\n gap=\"xs\"\n onValueChange={\n editable\n ? (details) => {\n if (details.value) onToggleOption?.(question, questionIndex, details.value);\n }\n : undefined\n }\n >\n {question.options.map((option) => (\n <Radio\n key={option.label}\n value={option.label}\n inputProps={editable ? undefined : { tabIndex: -1 }}\n alignItems=\"flex-start\"\n >\n <QuestionOptionContent option={option} />\n </Radio>\n ))}\n </RadioGroup>\n );\n};\n\nexport const TodoListBlockView = (props: { items: TodoListBlockItem[] }) => {\n const { items } = props;\n\n return (\n <Stack as=\"ul\" gap=\"0\" listStyleType=\"none\" margin=\"0\" padding=\"0\">\n {items.map((item, index) => (\n <Box as=\"li\" key={`${item.label}-${index}`}>\n <Checkbox checked={item.checked} readOnly aria-readonly=\"true\" inputProps={{ tabIndex: -1 }} size=\"xs\">\n <Text textStyle=\"label/XS/regular\" color=\"fg\">\n {item.label}\n </Text>\n </Checkbox>\n </Box>\n ))}\n </Stack>\n );\n};\n\nexport const QuestionFormBlockView = (props: QuestionFormBlockViewProps) => {\n const {\n questions,\n editable = false,\n selectedOptionsByQuestion = {},\n customAnswersByQuestion = {},\n onToggleOption,\n onCustomAnswerChange,\n } = props;\n\n return (\n <Stack as=\"form\" gap=\"sm\" onSubmit={preventSubmit} aria-label=\"Question form\">\n {questions.map((question, questionIndex) => {\n const name = question.id ?? `question-${questionIndex}`;\n const inputType = question.multiple ? \"checkbox\" : \"radio\";\n const selectedOptions = selectedOptionsByQuestion[name] ?? [];\n\n return (\n <Stack\n as=\"fieldset\"\n key={name}\n gap=\"xs\"\n borderWidth=\"1px\"\n borderColor=\"border.subtle\"\n borderRadius=\"sm\"\n padding=\"sm\"\n minWidth=\"0\"\n >\n <Text as=\"legend\" textStyle=\"label/S/medium\" color=\"fg\" paddingX=\"2xs\">\n {question.question}\n </Text>\n {inputType === \"radio\" ? (\n <QuestionRadioOptions\n question={question}\n questionIndex={questionIndex}\n name={name}\n selectedOption={selectedOptions[0]}\n editable={editable}\n onToggleOption={onToggleOption}\n />\n ) : (\n question.options.map((option) => (\n <QuestionCheckboxOptionRow\n key={option.label}\n option={option}\n name={name}\n checked={selectedOptions.includes(option.label)}\n editable={editable}\n onToggle={() => onToggleOption?.(question, questionIndex, option.label)}\n />\n ))\n )}\n {question.allowCustomAnswer ? (\n <Textarea\n readOnly={!editable}\n aria-readonly={editable ? undefined : \"true\"}\n value={customAnswersByQuestion[name] ?? \"\"}\n placeholder={editable ? \"Answer...\" : \"Custom answer\"}\n aria-label={question.question}\n rows={2}\n borderWidth=\"1px\"\n borderColor=\"border.subtle\"\n borderRadius=\"sm\"\n padding=\"xs\"\n resize={editable ? \"vertical\" : \"none\"}\n color=\"fg\"\n onChange={(event) => onCustomAnswerChange?.(question, questionIndex, event.currentTarget.value)}\n />\n ) : null}\n </Stack>\n );\n })}\n </Stack>\n );\n};\n","import { Button, HStack, Stack } from \"@chakra-ui/react\";\nimport { Check } from \"lucide-react\";\nimport { useState } from \"react\";\nimport { Tooltip } from \"@/components/primitives/tooltip\";\nimport { QuestionFormBlockView } from \"./timeline-tool-blocks\";\n\nexport interface ChatInputQuestionOption {\n label: string;\n description?: string;\n}\n\nexport interface ChatInputQuestion {\n id?: string;\n question: string;\n options: ChatInputQuestionOption[];\n multiple?: boolean;\n required?: boolean;\n allowCustomAnswer?: boolean;\n}\n\nexport interface ChatInputQuestionPrompt {\n questions: ChatInputQuestion[];\n}\n\nexport interface ChatInputQuestionResponse {\n answers: string[][];\n}\n\nexport type ChatInputQuestionCustomAnswers = Record<string, string>;\n\ninterface QuestionPromptControlsProps {\n questionPrompt: ChatInputQuestionPrompt;\n selectedOptionsByQuestion: Record<string, string[]>;\n customAnswersByQuestion: ChatInputQuestionCustomAnswers;\n onToggleOption: (question: ChatInputQuestion, questionIndex: number, optionLabel: string) => void;\n onCustomAnswerChange: (question: ChatInputQuestion, questionIndex: number, answer: string) => void;\n}\n\ninterface QuestionPromptStepperProps extends QuestionPromptControlsProps {\n questions: ReturnType<typeof toQuestionFormQuestions>;\n}\n\nexport const getQuestionSelectionKey = (question: ChatInputQuestion, index: number) =>\n question.id ?? `question-${index}`;\n\n// Single-choice questions swap the answer; multiple-choice questions toggle one option.\nexport const toggleQuestionOptionSelection = (\n selectedOptionsByQuestion: Record<string, string[]>,\n question: ChatInputQuestion,\n questionIndex: number,\n optionLabel: string,\n) => {\n const key = getQuestionSelectionKey(question, questionIndex);\n const selected = selectedOptionsByQuestion[key] ?? [];\n const alreadySelected = selected.includes(optionLabel);\n if (question.multiple) {\n return {\n ...selectedOptionsByQuestion,\n [key]: alreadySelected ? selected.filter((label) => label !== optionLabel) : [...selected, optionLabel],\n };\n }\n return { ...selectedOptionsByQuestion, [key]: alreadySelected ? [] : [optionLabel] };\n};\n\nexport const getQuestionPromptSignature = (questionPrompt: ChatInputQuestionPrompt | undefined) => {\n if (!questionPrompt) return \"\";\n\n return JSON.stringify(\n questionPrompt.questions.map((question, index) => ({\n id: getQuestionSelectionKey(question, index),\n question: question.question,\n multiple: Boolean(question.multiple),\n required: Boolean(question.required),\n allowCustomAnswer: Boolean(question.allowCustomAnswer),\n options: question.options.map((option) => ({\n label: option.label,\n description: option.description ?? \"\",\n })),\n })),\n );\n};\n\nconst getQuestionAnswerLines = (\n questionPrompt: ChatInputQuestionPrompt,\n selectedOptionsByQuestion: Record<string, string[]>,\n customAnswersByQuestion: ChatInputQuestionCustomAnswers,\n) => {\n const lines: string[] = [];\n\n for (let index = 0; index < questionPrompt.questions.length; index += 1) {\n const question = questionPrompt.questions[index];\n const key = getQuestionSelectionKey(question, index);\n const selectedLabels = selectedOptionsByQuestion[key] ?? [];\n const customAnswer = customAnswersByQuestion[key]?.trim();\n const answers = customAnswer ? [...selectedLabels, customAnswer] : selectedLabels;\n if (answers.length === 0) continue;\n\n lines.push(`${question.question}: ${answers.join(\", \")}`);\n }\n\n return lines;\n};\n\nconst isCustomAnswersByQuestion = (\n value: ChatInputQuestionCustomAnswers | string,\n): value is ChatInputQuestionCustomAnswers => typeof value !== \"string\";\n\nconst toCustomAnswersByQuestion = (\n questionPrompt: ChatInputQuestionPrompt,\n answerInput: ChatInputQuestionCustomAnswers | string,\n) => {\n if (isCustomAnswersByQuestion(answerInput)) return answerInput;\n\n const trimmed = answerInput.trim();\n if (trimmed.length === 0) return {};\n\n const answers: ChatInputQuestionCustomAnswers = {};\n for (let index = 0; index < questionPrompt.questions.length; index += 1) {\n const question = questionPrompt.questions[index];\n if (!question.allowCustomAnswer) continue;\n answers[getQuestionSelectionKey(question, index)] = trimmed;\n }\n\n return answers;\n};\n\nexport const buildQuestionResponse = (\n questionPrompt: ChatInputQuestionPrompt | undefined,\n selectedOptionsByQuestion: Record<string, string[]>,\n answerInput: ChatInputQuestionCustomAnswers | string,\n) => {\n if (!questionPrompt) return typeof answerInput === \"string\" ? answerInput.trim() : \"\";\n\n const customAnswersByQuestion = toCustomAnswersByQuestion(questionPrompt, answerInput);\n const lines = getQuestionAnswerLines(questionPrompt, selectedOptionsByQuestion, customAnswersByQuestion);\n const legacyText = typeof answerInput === \"string\" ? answerInput.trim() : \"\";\n const hasCustomQuestions = questionPrompt.questions.some((question) => question.allowCustomAnswer);\n\n if (legacyText.length > 0 && !hasCustomQuestions) {\n lines.push(`Additional response: ${legacyText}`);\n }\n\n return lines.join(\"\\n\");\n};\n\nexport const buildQuestionAnswerValues = (\n questionPrompt: ChatInputQuestionPrompt,\n selectedOptionsByQuestion: Record<string, string[]>,\n answerInput: ChatInputQuestionCustomAnswers | string,\n) => {\n const customAnswersByQuestion = toCustomAnswersByQuestion(questionPrompt, answerInput);\n\n return questionPrompt.questions.map((question, index) => {\n const key = getQuestionSelectionKey(question, index);\n const selectedLabels = selectedOptionsByQuestion[key] ?? [];\n const customAnswer = customAnswersByQuestion[key]?.trim();\n return customAnswer ? [...selectedLabels, customAnswer] : selectedLabels;\n });\n};\n\nexport const hasMissingRequiredQuestionAnswer = (\n questionPrompt: ChatInputQuestionPrompt | undefined,\n selectedOptionsByQuestion: Record<string, string[]>,\n answerInput: ChatInputQuestionCustomAnswers | string,\n) => {\n if (!questionPrompt) return false;\n\n const customAnswersByQuestion = toCustomAnswersByQuestion(questionPrompt, answerInput);\n\n for (let index = 0; index < questionPrompt.questions.length; index += 1) {\n const question = questionPrompt.questions[index];\n if (!question.required) continue;\n\n const key = getQuestionSelectionKey(question, index);\n const hasSelectedOption = (selectedOptionsByQuestion[key] ?? []).length > 0;\n if (hasSelectedOption) continue;\n if (question.allowCustomAnswer && customAnswersByQuestion[key]?.trim()) continue;\n\n return true;\n }\n\n return false;\n};\n\nconst toQuestionFormQuestions = (questionPrompt: ChatInputQuestionPrompt) =>\n questionPrompt.questions.map((question, index) => ({\n id: getQuestionSelectionKey(question, index),\n question: question.question,\n options: question.options,\n multiple: Boolean(question.multiple),\n required: Boolean(question.required),\n allowCustomAnswer: Boolean(question.allowCustomAnswer),\n }));\n\ntype QuestionFormQuestion = ReturnType<typeof toQuestionFormQuestions>[number];\n\ninterface QuestionStepTabProps {\n question: QuestionFormQuestion;\n sourceQuestion: ChatInputQuestion;\n questionIndex: number;\n isActive: boolean;\n selectedOptionsByQuestion: Record<string, string[]>;\n customAnswersByQuestion: ChatInputQuestionCustomAnswers;\n onSelectStep: (questionIndex: number) => void;\n}\n\nconst hasQuestionAnswer = (\n question: ChatInputQuestion,\n questionIndex: number,\n selectedOptionsByQuestion: Record<string, string[]>,\n customAnswersByQuestion: ChatInputQuestionCustomAnswers,\n) => {\n const key = getQuestionSelectionKey(question, questionIndex);\n return (selectedOptionsByQuestion[key] ?? []).length > 0 || Boolean(customAnswersByQuestion[key]?.trim());\n};\n\nconst QuestionStepTab = (props: QuestionStepTabProps) => {\n const {\n question,\n sourceQuestion,\n questionIndex,\n isActive,\n selectedOptionsByQuestion,\n customAnswersByQuestion,\n onSelectStep,\n } = props;\n const isAnswered = hasQuestionAnswer(\n sourceQuestion,\n questionIndex,\n selectedOptionsByQuestion,\n customAnswersByQuestion,\n );\n const stepStateLabel = isAnswered ? \"answered\" : \"not answered\";\n const tabVariant = isActive ? \"outline\" : \"ghost\";\n\n return (\n <Tooltip content={question.question}>\n <Button\n id={`question-step-tab-${question.id}`}\n role=\"tab\"\n aria-label={`${question.question} (${stepStateLabel})`}\n aria-selected={isActive}\n aria-controls={`question-step-panel-${question.id}`}\n size=\"xs\"\n variant={tabVariant}\n minW=\"8\"\n onClick={() => onSelectStep(questionIndex)}\n >\n {isAnswered ? <Check aria-hidden=\"true\" /> : questionIndex + 1}\n </Button>\n </Tooltip>\n );\n};\n\nconst QuestionPromptStepper = (props: QuestionPromptStepperProps) => {\n const { questionPrompt, selectedOptionsByQuestion, customAnswersByQuestion, onToggleOption, onCustomAnswerChange } =\n props;\n const { questions } = props;\n const [activeQuestionIndex, setActiveQuestionIndex] = useState(0);\n const renderQuestionIndex = Math.min(activeQuestionIndex, questions.length - 1);\n const activeQuestion = questions[renderQuestionIndex];\n const hasMultipleQuestions = questions.length > 1;\n\n return (\n <Stack gap=\"xs\" pb=\"sm\">\n {hasMultipleQuestions ? (\n <HStack role=\"tablist\" aria-label=\"Question steps\" gap=\"1\" minWidth=\"0\">\n {questions.map((question, questionIndex) => (\n <QuestionStepTab\n key={question.id}\n question={question}\n sourceQuestion={questionPrompt.questions[questionIndex]}\n questionIndex={questionIndex}\n isActive={questionIndex === renderQuestionIndex}\n selectedOptionsByQuestion={selectedOptionsByQuestion}\n customAnswersByQuestion={customAnswersByQuestion}\n onSelectStep={setActiveQuestionIndex}\n />\n ))}\n </HStack>\n ) : null}\n <Stack\n id={`question-step-panel-${activeQuestion.id}`}\n role={hasMultipleQuestions ? \"tabpanel\" : undefined}\n aria-labelledby={hasMultipleQuestions ? `question-step-tab-${activeQuestion.id}` : undefined}\n gap=\"0\"\n >\n <QuestionFormBlockView\n questions={[activeQuestion]}\n editable\n selectedOptionsByQuestion={selectedOptionsByQuestion}\n customAnswersByQuestion={customAnswersByQuestion}\n onToggleOption={(_question, _questionIndex, optionLabel) => {\n onToggleOption(questionPrompt.questions[renderQuestionIndex], renderQuestionIndex, optionLabel);\n }}\n onCustomAnswerChange={(_question, _questionIndex, answer) => {\n onCustomAnswerChange(questionPrompt.questions[renderQuestionIndex], renderQuestionIndex, answer);\n }}\n />\n </Stack>\n </Stack>\n );\n};\n\nexport const QuestionPromptControls = (props: QuestionPromptControlsProps) => {\n const { questionPrompt } = props;\n const questions = toQuestionFormQuestions(questionPrompt);\n const questionPromptSignature = getQuestionPromptSignature(questionPrompt);\n\n return <QuestionPromptStepper key={questionPromptSignature} {...props} questions={questions} />;\n};\n","// Shared height for every composer control row (editor, attach, model, send).\n// Maps to the design's `composer-ctl-h` (28px = Chakra sizes token `7`), so the\n// editor row and the toolbar controls line up at one height.\nexport const COMPOSER_CONTROL_HEIGHT = \"7\";\n","import { IconButton, type IconButtonProps, Kbd, Portal, Tooltip } from \"@chakra-ui/react\";\nimport { ArrowUp, Pause } from \"lucide-react\";\n\nexport interface SendButtonProps extends IconButtonProps {\n shortcut?: string;\n title?: string;\n canInterrupt: boolean;\n}\n\nexport const SendButton = (props: SendButtonProps) => {\n const { title, shortcut, canInterrupt, ...rest } = props;\n const ariaLabel = rest[\"aria-label\"] ?? title;\n\n const icon = canInterrupt ? (\n <Pause size={16} strokeWidth={2} fill=\"currentColor\" />\n ) : (\n <ArrowUp size={16} strokeWidth={2} />\n );\n\n const button = (\n <IconButton\n data-testid=\"send-message-button\"\n size=\"xs\"\n variant=\"primary\"\n aria-label={ariaLabel}\n title={title}\n {...rest}\n >\n {icon}\n </IconButton>\n );\n\n if (title) {\n const tooltipContent = shortcut ? (\n <>\n {title} <Kbd fontSize=\"xs\">{shortcut}</Kbd>\n </>\n ) : (\n title\n );\n\n return (\n <Tooltip.Root closeDelay={50} openDelay={100}>\n <Tooltip.Trigger asChild>{button}</Tooltip.Trigger>\n <Portal>\n <Tooltip.Positioner>\n <Tooltip.Content>{tooltipContent}</Tooltip.Content>\n </Tooltip.Positioner>\n </Portal>\n </Tooltip.Root>\n );\n }\n\n return button;\n};\n","import type { SessionMessage } from \"./message-types\";\n\nexport const MAX_RECENT_USER_PROMPTS = 10;\n\nexport const getRecentUserPrompts = (messages: SessionMessage[]) => {\n const prompts: string[] = [];\n for (let i = messages.length - 1; i >= 0 && prompts.length < MAX_RECENT_USER_PROMPTS; i--) {\n const message = messages[i];\n if (message.role !== \"user\") continue;\n const text = message.parts.flatMap((part) => (part.type === \"text\" ? [part.text] : [])).join(\"\");\n if (text.trim()) prompts.push(text);\n }\n return prompts;\n};\n\nexport const movePromptHistory = (\n index: number | null,\n direction: \"previous\" | \"next\",\n text: string,\n count: number,\n) => {\n if (count === 0) return null;\n if (index === null) {\n return direction === \"previous\" && text === \"\" ? { index: 0 } : null;\n }\n if (direction === \"previous\") return { index: Math.min(index + 1, count - 1) };\n return { index: index === 0 ? null : index - 1 };\n};\n","import { useEffect, useRef } from \"react\";\nimport type { PromptEditorRef } from \"../../rich-text\";\nimport { MAX_RECENT_USER_PROMPTS, movePromptHistory } from \"./chat-input-history\";\n\ninterface ChatInputHistoryOptions {\n recentUserMessages: string[];\n text: string;\n blocked: boolean;\n resetKey: string;\n onChange: (text: string) => void;\n}\n\nexport const useChatInputHistory = (options: ChatInputHistoryOptions) => {\n const { recentUserMessages, text, blocked, resetKey, onChange } = options;\n const editorRef = useRef<PromptEditorRef>(null);\n const historyIndex = useRef<number | null>(null);\n const prompts = recentUserMessages.slice(0, MAX_RECENT_USER_PROMPTS);\n const signature = JSON.stringify(prompts);\n const resetSignature = JSON.stringify([signature, resetKey, blocked]);\n const previousResetSignature = useRef(resetSignature);\n useEffect(() => {\n if (previousResetSignature.current === resetSignature) return;\n previousResetSignature.current = resetSignature;\n historyIndex.current = null;\n }, [resetSignature]);\n\n const reset = () => {\n historyIndex.current = null;\n };\n const change = (value: string) => {\n if (historyIndex.current !== null && value !== prompts[historyIndex.current]) reset();\n onChange(value);\n };\n const recall = (direction: \"previous\" | \"next\") => {\n if (blocked) return false;\n const movement = movePromptHistory(historyIndex.current, direction, text, prompts.length);\n if (!movement) return false;\n historyIndex.current = movement.index;\n const value = movement.index === null ? \"\" : prompts[movement.index];\n editorRef.current?.setEditorValue(value);\n onChange(value);\n return true;\n };\n return { editorRef, reset, change, recallPrevious: () => recall(\"previous\"), recallNext: () => recall(\"next\") };\n};\n","import { Box, Flex, HStack, Spacer, Text } from \"@chakra-ui/react\";\nimport { type ReactNode, useEffect, useRef, useState } from \"react\";\nimport { ScrollArea } from \"@/components/primitives/scroll-area\";\nimport { getTextFromSerializedEditorState, PromptEditor, type ReferenceItem } from \"../../rich-text\";\nimport {\n type ChatInputAction,\n resolveChatInputButtonAction,\n resolveChatInputKeyboardAction,\n} from \"./chat-input-actions\";\nimport { createAttachmentEventHandlers, DEFAULT_TEXT_ATTACHMENT_PASTE_LINE_THRESHOLD } from \"./chat-input-attachments\";\nimport {\n buildQuestionAnswerValues,\n buildQuestionResponse,\n type ChatInputQuestion,\n type ChatInputQuestionCustomAnswers,\n type ChatInputQuestionPrompt,\n type ChatInputQuestionResponse,\n getQuestionPromptSignature,\n getQuestionSelectionKey,\n hasMissingRequiredQuestionAnswer,\n QuestionPromptControls,\n toggleQuestionOptionSelection,\n} from \"./chat-input-question-prompt\";\nimport { COMPOSER_CONTROL_HEIGHT } from \"./composer-constants\";\nimport { SendButton } from \"./send-button\";\n\nimport { useChatInputHistory } from \"./use-chat-input-history\";\n\nexport interface ChatInputProps {\n defaultState: string;\n /** Plain-text prompts from the active conversation, newest first. */\n recentUserMessages?: string[];\n placeholder?: string;\n onSubmit?: (\n text: string,\n attachments: string[],\n questionResponse?: ChatInputQuestionResponse,\n ) => void | Promise<void>;\n onInterrupt?: () => void;\n onAttachFiles?: (files: File[]) => void;\n onAttachText?: (text: string) => void;\n textAttachmentPasteLineThreshold?: number;\n streaming?: boolean;\n attachedResources?: string[];\n onClearAttachments?: () => void;\n isDisabled?: boolean;\n /** Keeps the editor usable but blocks sending, for example while no model is selected. */\n submitDisabled?: boolean;\n onChange?: (text: string) => void;\n attachmentList?: ReactNode;\n actions?: ReactNode;\n attachedToTop?: boolean;\n /** Recede the resting border to border.subtle when nested inside a stronger shell (the workspace hub). */\n recessed?: boolean;\n questionPrompt?: ChatInputQuestionPrompt;\n autoFocus?: boolean;\n focusSignal?: number;\n submitTitle?: string;\n references?: ReferenceItem[];\n onAddReference?: (resourceId: string, resourceType: ReferenceItem[\"resourceType\"]) => void;\n}\n\nconst ChatInputPlaceholder = (props: { placeholder?: string }) => {\n const { placeholder } = props;\n if (!placeholder) return null;\n\n return (\n <Text textStyle=\"label/M/regular\" color=\"fg.subtle\" pointerEvents=\"none\" position=\"absolute\" top=\"0\">\n {placeholder}\n </Text>\n );\n};\n\nconst selectedChatInputBorderColor = \"border.accent-light\";\n\nconst focusPromptEditor = (container: HTMLDivElement | null) => {\n const editable = container?.querySelector('[contenteditable=\"true\"]');\n if (editable instanceof HTMLElement) editable.focus();\n};\n\nconst requestPromptEditorFocus = (container: HTMLDivElement | null, onFocus?: () => void) =>\n requestAnimationFrame(() => {\n focusPromptEditor(container);\n onFocus?.();\n });\n\nconst useComposerFocus = (\n containerRef: { current: HTMLDivElement | null },\n autoFocus: boolean,\n focusSignal: number,\n setIsSelected: (selected: boolean) => void,\n) => {\n useEffect(() => {\n if (!autoFocus) return;\n const handle = requestPromptEditorFocus(containerRef.current, () => setIsSelected(true));\n return () => cancelAnimationFrame(handle);\n }, [autoFocus, containerRef, setIsSelected]);\n\n useEffect(() => {\n if (focusSignal === 0) return;\n const handle = requestPromptEditorFocus(containerRef.current, () => setIsSelected(true));\n return () => cancelAnimationFrame(handle);\n }, [focusSignal, containerRef, setIsSelected]);\n};\n\nexport const ChatInput = (props: ChatInputProps) => {\n const {\n defaultState,\n recentUserMessages = [],\n onSubmit = () => {},\n onInterrupt,\n onAttachFiles,\n onAttachText,\n textAttachmentPasteLineThreshold = DEFAULT_TEXT_ATTACHMENT_PASTE_LINE_THRESHOLD,\n streaming = false,\n attachedResources = [],\n onClearAttachments,\n isDisabled = false,\n submitDisabled = false,\n onChange,\n placeholder,\n attachmentList,\n actions,\n attachedToTop = false,\n recessed = false,\n questionPrompt,\n autoFocus = false,\n focusSignal = 0,\n submitTitle,\n references = [],\n onAddReference,\n } = props;\n\n const restingBorderColor = recessed ? \"border.subtle\" : \"border\";\n const [submitting, setSubmitting] = useState(false);\n const [isSelected, setIsSelected] = useState(false);\n const [editorState, setEditorState] = useState(defaultState);\n const [editorKey, setEditorKey] = useState(0);\n const [text, setText] = useState(() => getTextFromSerializedEditorState(defaultState));\n const [selectedOptionsByQuestion, setSelectedOptionsByQuestion] = useState<Record<string, string[]>>({});\n const [customAnswersByQuestion, setCustomAnswersByQuestion] = useState<ChatInputQuestionCustomAnswers>({});\n const containerRef = useRef<HTMLDivElement | null>(null);\n const onChangeRef = useRef(onChange);\n const previousQuestionPromptSignatureRef = useRef(getQuestionPromptSignature(questionPrompt));\n\n useEffect(() => {\n onChangeRef.current = onChange;\n }, [onChange]);\n\n useEffect(() => {\n const resetText = getTextFromSerializedEditorState(defaultState);\n setEditorState(defaultState);\n setEditorKey((key) => key + 1);\n setText(resetText);\n setSelectedOptionsByQuestion({});\n setCustomAnswersByQuestion({});\n onChangeRef.current?.(resetText);\n }, [defaultState]);\n\n const questionPromptSignature = getQuestionPromptSignature(questionPrompt);\n\n useEffect(() => {\n if (previousQuestionPromptSignatureRef.current === questionPromptSignature) return;\n previousQuestionPromptSignatureRef.current = questionPromptSignature;\n setSelectedOptionsByQuestion({});\n setCustomAnswersByQuestion({});\n }, [questionPromptSignature]);\n\n useComposerFocus(containerRef, autoFocus, focusSignal, setIsSelected);\n\n const history = useChatInputHistory({\n recentUserMessages,\n text,\n blocked: isDisabled || submitting || Boolean(questionPrompt),\n resetKey: JSON.stringify([defaultState, editorKey, questionPromptSignature]),\n onChange: (value) => {\n setText(value);\n onChange?.(value);\n },\n });\n\n const handleContainerClick = () => {\n setIsSelected(true);\n focusPromptEditor(containerRef.current);\n };\n\n const resetEditor = (shouldFocus = false) => {\n setEditorKey((key) => key + 1);\n setSelectedOptionsByQuestion({});\n setCustomAnswersByQuestion({});\n history.reset();\n history.change(getTextFromSerializedEditorState(defaultState));\n\n if (shouldFocus) {\n requestAnimationFrame(() => {\n focusPromptEditor(containerRef.current);\n });\n }\n };\n\n const responseText = questionPrompt\n ? buildQuestionResponse(questionPrompt, selectedOptionsByQuestion, customAnswersByQuestion)\n : text.trim();\n const hasMissingRequiredSelection = hasMissingRequiredQuestionAnswer(\n questionPrompt,\n selectedOptionsByQuestion,\n customAnswersByQuestion,\n );\n const actionState = {\n canInterrupt: streaming && !questionPrompt && Boolean(onInterrupt),\n canSubmit: !submitDisabled,\n hasQuestionPrompt: Boolean(questionPrompt),\n isDisabled: isDisabled || submitting || hasMissingRequiredSelection,\n streaming,\n text: responseText,\n };\n const buttonAction = resolveChatInputButtonAction(actionState);\n const messageTitle = streaming && !questionPrompt ? \"Queue message\" : \"Send message\";\n const submitMessage = async () => {\n if (!responseText) return;\n\n const questionResponse = questionPrompt\n ? {\n answers: buildQuestionAnswerValues(questionPrompt, selectedOptionsByQuestion, customAnswersByQuestion),\n }\n : undefined;\n\n history.reset();\n setSubmitting(true);\n try {\n await onSubmit(responseText, attachedResources, questionResponse);\n resetEditor(true);\n onClearAttachments?.();\n } catch {\n // Keep the composer intact so failed submissions can be retried.\n } finally {\n setSubmitting(false);\n }\n };\n\n const runAction = (action: ChatInputAction) => {\n if (action === \"interrupt\") onInterrupt?.();\n if (action === \"submit\") void submitMessage();\n };\n\n const attachmentEventHandlers = createAttachmentEventHandlers({\n onAttachFiles,\n onAttachText,\n textAttachmentPasteLineThreshold,\n });\n\n const toggleQuestionOption = (question: ChatInputQuestion, questionIndex: number, optionLabel: string) => {\n setSelectedOptionsByQuestion((current) =>\n toggleQuestionOptionSelection(current, question, questionIndex, optionLabel),\n );\n };\n\n const updateQuestionCustomAnswer = (question: ChatInputQuestion, questionIndex: number, answer: string) => {\n const key = getQuestionSelectionKey(question, questionIndex);\n setCustomAnswersByQuestion((current) => ({\n ...current,\n [key]: answer,\n }));\n };\n\n return (\n <Box\n ref={containerRef}\n position=\"relative\"\n width=\"100%\"\n paddingX=\"xs\"\n paddingY=\"xs\"\n mt={attachedToTop ? \"-1px\" : undefined}\n bg=\"bg\"\n borderRadius=\"xs\"\n borderTopRadius={attachedToTop ? \"0\" : undefined}\n borderWidth=\"1px\"\n borderStyle=\"solid\"\n borderColor={isSelected ? selectedChatInputBorderColor : restingBorderColor}\n zIndex={isSelected ? 1 : 0}\n transition=\"border-color 0.2s ease-in-out\"\n _hover={{\n borderColor: isSelected ? selectedChatInputBorderColor : restingBorderColor,\n zIndex: 1,\n }}\n _focusWithin={{\n borderColor: selectedChatInputBorderColor,\n zIndex: 1,\n }}\n onPasteCapture={attachmentEventHandlers.onPasteCapture}\n onDropCapture={attachmentEventHandlers.onDropCapture}\n onDragOver={attachmentEventHandlers.onDragOver}\n onClick={handleContainerClick}\n onBlur={() => setIsSelected(false)}\n >\n <Flex direction=\"column\" color=\"fg\" gap=\"xs\">\n {attachmentList ? <Box>{attachmentList}</Box> : null}\n {questionPrompt ? (\n <QuestionPromptControls\n questionPrompt={questionPrompt}\n selectedOptionsByQuestion={selectedOptionsByQuestion}\n customAnswersByQuestion={customAnswersByQuestion}\n onToggleOption={toggleQuestionOption}\n onCustomAnswerChange={updateQuestionCustomAnswer}\n />\n ) : (\n // The editor is its own composer row: it centres a single line at the shared\n // control height and grows with content, never shrinking below it, so the row\n // aligns with the toolbar beneath it.\n <ScrollArea maxH=\"10rem\" showHorizontalScrollbar={false} contentProps={{ pr: \"2xs\" }}>\n <Flex minH={COMPOSER_CONTROL_HEIGHT} align=\"center\">\n <PromptEditor\n key={editorKey}\n ref={history.editorRef}\n onRecallPrevious={history.recallPrevious}\n onRecallNext={history.recallNext}\n defaultState={editorState}\n isEditable={!isDisabled && !submitting}\n placeholder={<ChatInputPlaceholder placeholder={placeholder} />}\n onChange={history.change}\n onSubmit={() => runAction(resolveChatInputKeyboardAction(actionState))}\n references={references}\n onAddReference={onAddReference}\n />\n </Flex>\n </ScrollArea>\n )}\n <HStack gap=\"1\" minH={COMPOSER_CONTROL_HEIGHT} align=\"center\">\n {actions}\n <Spacer />\n <SendButton\n canInterrupt={buttonAction === \"interrupt\"}\n title={buttonAction === \"interrupt\" ? \"Stop Response\" : (submitTitle ?? messageTitle)}\n shortcut={buttonAction === \"submit\" ? \"Enter\" : undefined}\n onClick={() => runAction(buttonAction)}\n disabled={buttonAction === \"none\"}\n />\n </HStack>\n </Flex>\n </Box>\n );\n};\n","import type { SessionMessage, ToolPart } from \"../components/message-types\";\nimport type { QuestionFormBlockOption, QuestionFormBlockQuestion } from \"../components/timeline\";\n\nconst isRecord = (value: unknown): value is Record<string, unknown> => {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n};\n\nconst parseJsonObjectText = (value: string) => {\n try {\n const parsed: unknown = JSON.parse(value);\n return isRecord(parsed) ? parsed : null;\n } catch {\n return null;\n }\n};\n\nconst toInputRecord = (input: unknown) => {\n if (isRecord(input)) return input;\n if (typeof input === \"string\" && input.trim().length > 0) return parseJsonObjectText(input);\n return null;\n};\n\nconst getStringValue = (value: unknown) => {\n if (typeof value === \"string\" && value.trim().length > 0) return value;\n return null;\n};\n\nexport const getQuestionResponseText = (value: unknown): string | null => {\n const stringValue = getStringValue(value);\n if (stringValue) return stringValue;\n\n if (Array.isArray(value)) {\n const lines = value.map(getQuestionResponseText).filter((line): line is string => line !== null);\n return lines.length > 0 ? lines.join(\"\\n\") : null;\n }\n\n if (!isRecord(value)) return null;\n\n return (\n getQuestionResponseText(value.response) ??\n getQuestionResponseText(value.answer) ??\n getQuestionResponseText(value.text) ??\n getQuestionResponseText(value.answers)\n );\n};\n\nconst parseQuestionOption = (value: unknown): QuestionFormBlockOption | null => {\n if (typeof value === \"string\" && value.trim().length > 0) {\n return { label: value, description: undefined };\n }\n\n if (!isRecord(value)) return null;\n const label = getStringValue(value.label);\n if (!label) return null;\n\n return {\n label,\n description: getStringValue(value.description) ?? undefined,\n };\n};\n\nconst parseQuestion = (value: unknown, index: number): QuestionFormBlockQuestion | null => {\n if (!isRecord(value)) return null;\n\n const question = getStringValue(value.question);\n if (!question) return null;\n\n const options = Array.isArray(value.options)\n ? value.options.map(parseQuestionOption).filter((option): option is QuestionFormBlockOption => option !== null)\n : [];\n const type = getStringValue(value.type);\n const allowCustomAnswer =\n typeof value.custom === \"boolean\"\n ? value.custom\n : typeof value.allowCustomAnswer === \"boolean\"\n ? value.allowCustomAnswer\n : options.length === 0 || type === \"freeform\" || type === \"text\";\n\n return {\n id: getStringValue(value.id) ?? `question-${index}`,\n question,\n options,\n multiple:\n typeof value.multiple === \"boolean\" ? value.multiple : type === \"multi_choice\" || type === \"multiple_choice\",\n required: typeof value.required === \"boolean\" ? value.required : true,\n allowCustomAnswer,\n };\n};\n\nexport const parseQuestionPrompt = (input: unknown) => {\n const record = toInputRecord(input);\n if (!record || !Array.isArray(record.questions)) return null;\n\n const questions = record.questions.map(parseQuestion).filter((question): question is QuestionFormBlockQuestion => {\n return question !== null;\n });\n if (questions.length === 0) return null;\n\n return { questions };\n};\n\nconst isQuestionTool = (part: ToolPart) => part.tool.toLowerCase() === \"question\";\n\nexport const resolveActiveQuestionPrompt = (messages: SessionMessage[]) => {\n for (let messageIndex = messages.length - 1; messageIndex >= 0; messageIndex -= 1) {\n const message = messages[messageIndex];\n if (message.role !== \"assistant\") continue;\n\n for (let partIndex = message.parts.length - 1; partIndex >= 0; partIndex -= 1) {\n const part = message.parts[partIndex];\n if (part.type !== \"tool\" || !isQuestionTool(part)) continue;\n\n const response = getQuestionResponseText(part.state?.output) ?? getQuestionResponseText(part.state?.metadata);\n if (response) return undefined;\n\n return parseQuestionPrompt(part.state?.input) ?? undefined;\n }\n }\n\n return undefined;\n};\n","import { useRef } from \"react\";\n\nexport interface MessageAnimationState {\n initialized: boolean;\n seenKeys: Set<string>;\n}\n\ninterface NextMessageAnimationStateArgs {\n itemKeys: string[];\n state: MessageAnimationState;\n}\n\nexport const messageFadeInProps = {\n animationName: \"message-fade-in\",\n animationDuration: \"200ms\",\n animationTimingFunction: \"ease-out\",\n} as const;\n\nexport const getNextMessageAnimationState = (args: NextMessageAnimationStateArgs) => {\n const animatedKeys = new Set<string>();\n const seenKeys = new Set(args.state.seenKeys);\n\n for (const key of args.itemKeys) {\n if (args.state.initialized && !seenKeys.has(key)) {\n animatedKeys.add(key);\n }\n\n seenKeys.add(key);\n }\n\n return {\n animatedKeys,\n state: {\n initialized: true,\n seenKeys,\n },\n };\n};\n\nconst itemKeysEqual = (a: string[], b: string[]) => {\n if (a.length !== b.length) return false;\n for (let index = 0; index < a.length; index += 1) if (a[index] !== b[index]) return false;\n return true;\n};\n\nexport const useMessageAnimationKeys = (itemKeys: string[]) => {\n const stateRef = useRef<MessageAnimationState>({\n initialized: false,\n seenKeys: new Set(),\n });\n // The hook mutates state during render, so React's duplicate renders (Strict\n // Mode, concurrent reconciliation) would otherwise consume the animation\n // flag on the second pass and leave the message non-animating. Cache the\n // last inputs to make repeated calls idempotent.\n const lastResultRef = useRef<{ itemKeys: string[]; animatedKeys: Set<string> } | null>(null);\n\n if (lastResultRef.current && itemKeysEqual(lastResultRef.current.itemKeys, itemKeys)) {\n return lastResultRef.current.animatedKeys;\n }\n\n const next = getNextMessageAnimationState({\n itemKeys,\n state: stateRef.current,\n });\n\n stateRef.current = next.state;\n lastResultRef.current = { itemKeys: [...itemKeys], animatedKeys: next.animatedKeys };\n\n return next.animatedKeys;\n};\n","import { Box, HStack, IconButton, Text } from \"@chakra-ui/react\";\nimport { Check, Copy } from \"lucide-react\";\nimport { useEffect, useRef, useState } from \"react\";\nimport { Tooltip } from \"@/components/primitives/tooltip\";\nimport type { ChatMessagePart, SessionMessage } from \"./message-types\";\n\ninterface MessageActionPanelProps {\n message: SessionMessage;\n alwaysVisible?: boolean;\n copyAlwaysVisible?: boolean;\n}\n\nconst isCopyablePart = (part: ChatMessagePart): part is Extract<ChatMessagePart, { type: \"text\" }> => {\n return part.type === \"text\";\n};\n\nexport const getMessageCopyText = (message: SessionMessage) => {\n return (message.parts ?? [])\n .filter(isCopyablePart)\n .map((part) => part.text.trim())\n .filter(Boolean)\n .join(\"\\n\\n\");\n};\n\nexport const getMessageTimestampLabel = (message: SessionMessage, locale?: string, timeZone?: string) => {\n if (!message.createdAt) return \"\";\n\n return new Intl.DateTimeFormat(locale, {\n hour: \"numeric\",\n minute: \"2-digit\",\n timeZone,\n }).format(new Date(message.createdAt));\n};\n\nexport const MessageActionPanel = (props: MessageActionPanelProps) => {\n const { message, alwaysVisible = false, copyAlwaysVisible = alwaysVisible } = props;\n const [isCopied, setIsCopied] = useState(false);\n const copyResetTimeoutRef = useRef<number | null>(null);\n const copyText = getMessageCopyText(message);\n const timestampLabel = getMessageTimestampLabel(message);\n\n useEffect(() => {\n return () => {\n if (copyResetTimeoutRef.current !== null) {\n window.clearTimeout(copyResetTimeoutRef.current);\n }\n };\n }, []);\n\n const copyMessage = async () => {\n if (!copyText) return;\n\n try {\n await navigator.clipboard.writeText(copyText);\n setIsCopied(true);\n if (copyResetTimeoutRef.current !== null) {\n window.clearTimeout(copyResetTimeoutRef.current);\n }\n copyResetTimeoutRef.current = window.setTimeout(() => setIsCopied(false), 1200);\n } catch {\n setIsCopied(false);\n }\n };\n\n if (!copyText && !timestampLabel) return null;\n\n return (\n <HStack\n data-chat-message-action-panel=\"true\"\n gap=\"2xs\"\n minH=\"6\"\n opacity={alwaysVisible ? \"1\" : \"0\"}\n pointerEvents={alwaysVisible ? \"auto\" : \"none\"}\n transition=\"opacity 120ms ease\"\n css={messageActionPanelHoverStyles}\n >\n {timestampLabel ? (\n <Text textStyle=\"label/XS/regular\" color=\"fg.muted\">\n {timestampLabel}\n </Text>\n ) : null}\n {copyText ? (\n <Box\n opacity={copyAlwaysVisible ? \"1\" : \"0\"}\n pointerEvents={copyAlwaysVisible ? \"auto\" : \"none\"}\n transition=\"opacity 120ms ease\"\n css={messageActionPanelHoverStyles}\n >\n <Tooltip content={isCopied ? \"Copied\" : \"Copy message\"}>\n <IconButton\n aria-label={isCopied ? \"Copied\" : \"Copy message\"}\n variant=\"ghost\"\n size=\"2xs\"\n onClick={copyMessage}\n >\n {isCopied ? <Check size={12} /> : <Copy size={12} />}\n </IconButton>\n </Tooltip>\n </Box>\n ) : null}\n </HStack>\n );\n};\n\nconst messageActionPanelHoverStyles = {\n \"[data-chat-message-with-actions]:hover &, [data-chat-message-with-actions]:focus-within &\": {\n opacity: 1,\n pointerEvents: \"auto\",\n },\n \".ai-message__root:hover &, .ai-message__root:focus-within &\": {\n opacity: 1,\n pointerEvents: \"auto\",\n },\n \"[data-scope='ai-message'][data-part='root']:hover &, [data-scope='ai-message'][data-part='root']:focus-within &\": {\n opacity: 1,\n pointerEvents: \"auto\",\n },\n};\n","import type { BoxProps } from \"@chakra-ui/react\";\nimport { Box } from \"@chakra-ui/react\";\nimport { RichMessage } from \"@/components/rich-text\";\n\nexport interface ChatRichContentProps extends Omit<BoxProps, \"children\"> {\n children: string;\n}\n\nconst ChatRichContent = (props: ChatRichContentProps) => {\n const { children, ...rest } = props;\n\n return (\n <Box {...rest}>\n <RichMessage defaultState={children} fullWidth />\n </Box>\n );\n};\n\nexport const Response = ChatRichContent;\n","export const normalizeToolName = (value: string) => {\n return value\n .replace(/^tool-/i, \"\")\n .replace(/([a-z0-9])([A-Z])/g, \"$1_$2\")\n .replace(/[\\s-]+/g, \"_\")\n .toLowerCase();\n};\n\nexport const getToolNameLookupKeys = (value: string) => {\n const normalized = normalizeToolName(value);\n const compact = normalized.replace(/_/g, \"\");\n return [...new Set([value, normalized, compact])];\n};\n","import type { LucideIcon } from \"lucide-react\";\nimport {\n AlertTriangle,\n CircleQuestionMark,\n DotIcon,\n File,\n FileDiff,\n FileDown,\n FilePen,\n FileText,\n FileUp,\n Globe,\n ListTodo,\n ListTree,\n Move,\n Search,\n Terminal,\n Trash2,\n} from \"lucide-react\";\nimport { normalizeToolName } from \"./tool-name\";\n\nconst toolIconMap = {\n shell: Terminal,\n ls: ListTree,\n read_file: FileText,\n write_file: FilePen,\n delete_file: Trash2,\n patch: FileDiff,\n upload_files: FileUp,\n download_file: FileDown,\n move_file: Move,\n} as const satisfies Record<string, LucideIcon>;\n\nconst iconMap = {\n dot: DotIcon,\n danger: AlertTriangle,\n search: Search,\n browser: Globe,\n file: File,\n question: CircleQuestionMark,\n todo: ListTodo,\n terminal: Terminal,\n ...toolIconMap,\n} as const satisfies Record<string, LucideIcon>;\n\nexport type IconName = keyof typeof iconMap;\nexport type ToolIconName = keyof typeof toolIconMap;\n\nconst DEFAULT_TOOL_ICON: IconName = \"dot\";\n\nconst isToolIconName = (value: string): value is ToolIconName => Object.hasOwn(toolIconMap, value);\n\nexport const getIconComponent = (name: IconName): LucideIcon => {\n return iconMap[name];\n};\n\nexport const toolTypeToIconName = (type?: string): IconName => {\n if (!type) return DEFAULT_TOOL_ICON;\n\n const normalized = normalizeToolName(type);\n if (isToolIconName(normalized)) return normalized;\n\n const compact = normalized.replace(/_/g, \"\");\n\n switch (normalized) {\n case \"read\":\n return \"file\";\n case \"bash\":\n return \"terminal\";\n case \"edit\":\n return \"write_file\";\n case \"apply_patch\":\n return \"patch\";\n case \"grep\":\n return \"search\";\n case \"glob\":\n return \"file\";\n case \"todowrite\":\n return \"todo\";\n case \"search\":\n return \"search\";\n case \"browser\":\n return \"browser\";\n case \"question\":\n return \"question\";\n case \"fs\":\n case \"file\":\n return \"file\";\n default:\n return compact === \"todowrite\" || compact === \"todo\" ? \"todo\" : DEFAULT_TOOL_ICON;\n }\n};\n\nexport { getFileTypeIcon } from \"../../../utils/get-file-type-icon\";\n","import type { TitleSegment } from \"../components/timeline\";\n\nexport type FileChange = { filePath: string; additions: number; deletions: number };\n\nexport function basenameSafe(path: string) {\n const idx = path.lastIndexOf(\"/\");\n return idx >= 0 ? path.slice(idx + 1) : path;\n}\n\nfunction normalizeHeaderPath(input?: string | null) {\n if (!input) return null;\n\n const token = input.split(\"\\t\")[0].trim();\n if (token === \"/dev/null\") return null;\n\n let normalized = token;\n if (normalized.startsWith(\"a/\") || normalized.startsWith(\"b/\")) {\n normalized = normalized.slice(2);\n }\n\n return normalized.replace(/^\\/+/, \"\").replace(/\\\\/g, \"/\");\n}\n\nconst isMinusHeader = (line: string) => line.startsWith(\"--- \");\nconst isPlusHeader = (line: string) => line.startsWith(\"+++ \");\nconst isHunkHeader = (line: string) => line.startsWith(\"@@\");\nconst isAddedLine = (line: string) => line.startsWith(\"+\") && !(isPlusHeader(line) || line === \"+++\");\nconst isDeletedLine = (line: string) => line.startsWith(\"-\") && !(isMinusHeader(line) || line === \"---\");\n\nconst ensureFileChange = (changes: Map<string, { additions: number; deletions: number }>, filePath: string) => {\n if (!changes.has(filePath)) {\n changes.set(filePath, { additions: 0, deletions: 0 });\n }\n};\n\nconst incrementAdditions = (changes: Map<string, { additions: number; deletions: number }>, filePath: string) => {\n const current = changes.get(filePath);\n if (!current) return;\n current.additions += 1;\n};\n\nconst incrementDeletions = (changes: Map<string, { additions: number; deletions: number }>, filePath: string) => {\n const current = changes.get(filePath);\n if (!current) return;\n current.deletions += 1;\n};\n\ntype UnifiedDiffState = {\n currentPath: string | null;\n lastMinusHeader: string | null;\n inHunk: boolean;\n};\n\nconst processUnifiedDiffLine = (\n line: string,\n state: UnifiedDiffState,\n changes: Map<string, { additions: number; deletions: number }>,\n) => {\n if (isMinusHeader(line)) {\n return { ...state, lastMinusHeader: normalizeHeaderPath(line.slice(4)), inHunk: false };\n }\n\n if (isPlusHeader(line)) {\n const plusPath = normalizeHeaderPath(line.slice(4));\n const currentPath = plusPath ?? state.lastMinusHeader;\n if (currentPath) ensureFileChange(changes, currentPath);\n return { ...state, currentPath, inHunk: false };\n }\n\n if (!state.currentPath) return state;\n\n if (isHunkHeader(line)) {\n return { ...state, inHunk: true };\n }\n\n if (!state.inHunk) return state;\n\n if (isAddedLine(line)) {\n incrementAdditions(changes, state.currentPath);\n return state;\n }\n\n if (isDeletedLine(line)) {\n incrementDeletions(changes, state.currentPath);\n }\n\n return state;\n};\n\nexport function parseUnifiedDiff(diffText?: string) {\n if (!diffText || typeof diffText !== \"string\") return [] as FileChange[];\n\n const changes = new Map<string, { additions: number; deletions: number }>();\n let state: UnifiedDiffState = {\n currentPath: null,\n lastMinusHeader: null,\n inHunk: false,\n };\n\n const lines = diffText.split(/\\r?\\n/);\n for (const line of lines) {\n state = processUnifiedDiffLine(line, state, changes);\n }\n\n return Array.from(changes.entries()).map(([filePath, { additions, deletions }]) => ({\n filePath,\n additions,\n deletions,\n }));\n}\n\nexport function buildDiffTitleSegments(diffText?: string) {\n return parseUnifiedDiff(diffText).map(\n (file) =>\n ({\n kind: \"diff\",\n fileName: basenameSafe(file.filePath),\n filePath: file.filePath,\n additions: file.additions,\n deletions: file.deletions,\n }) satisfies TitleSegment,\n );\n}\n\nexport function extractDiffFilePaths(diffText?: string) {\n return parseUnifiedDiff(diffText).map((file) => file.filePath);\n}\n\nexport type FileDiffPreview = { filePath: string; original: string; modified: string };\n\nconst isDiffFileBoundary = (line: string) => isMinusHeader(line) || line.startsWith(\"diff --git \");\n\nconst isInvalidHunkBodyLine = (line: string) => {\n if (line.startsWith(\" \")) return false;\n if (line.startsWith(\"+\")) return false;\n if (line.startsWith(\"-\")) return false;\n return line.trim() !== \"\";\n};\n\nconst appendHunkLine = (line: string, original: string[], modified: string[]) => {\n if (line.startsWith(\" \")) {\n const text = line.slice(1);\n original.push(text);\n modified.push(text);\n return;\n }\n\n if (line.startsWith(\"-\")) {\n original.push(line.slice(1));\n return;\n }\n\n if (line.startsWith(\"+\")) {\n modified.push(line.slice(1));\n }\n};\n\nconst parseHunkBody = (lines: string[], startIndex: number, original: string[], modified: string[]) => {\n let index = startIndex;\n\n while (index < lines.length) {\n const line = lines[index] || \"\";\n if (isDiffFileBoundary(line) || isHunkHeader(line) || isInvalidHunkBodyLine(line)) {\n break;\n }\n\n appendHunkLine(line, original, modified);\n index += 1;\n }\n\n if (original.length > 0 || modified.length > 0) {\n original.push(\"\");\n modified.push(\"\");\n }\n\n return index;\n};\n\nconst parsePreview = (lines: string[], startIndex: number) => {\n const oldHeader = normalizeHeaderPath((lines[startIndex] || \"\").slice(4));\n const next = lines[startIndex + 1] || \"\";\n if (!isPlusHeader(next)) return { nextIndex: startIndex + 1 } as const;\n\n const newHeader = normalizeHeaderPath(next.slice(4));\n const filePath = newHeader ?? oldHeader ?? \"\";\n const original: string[] = [];\n const modified: string[] = [];\n\n let index = startIndex + 2;\n while (index < lines.length) {\n const current = lines[index] || \"\";\n if (isDiffFileBoundary(current)) break;\n\n if (!isHunkHeader(current)) {\n index += 1;\n continue;\n }\n\n index = parseHunkBody(lines, index + 1, original, modified);\n }\n\n return {\n nextIndex: index,\n preview: { filePath, original: original.join(\"\\n\"), modified: modified.join(\"\\n\") } satisfies FileDiffPreview,\n } as const;\n};\n\nexport function buildFileDiffPreviews(diffText?: string) {\n if (!diffText || typeof diffText !== \"string\") return [] as FileDiffPreview[];\n\n const lines = diffText.split(/\\r?\\n/);\n const previews: FileDiffPreview[] = [];\n\n let i = 0;\n while (i < lines.length) {\n const line = lines[i] || \"\";\n if (!isMinusHeader(line)) {\n i += 1;\n continue;\n }\n\n const { nextIndex, preview } = parsePreview(lines, i);\n if (preview) previews.push(preview);\n i = Math.max(nextIndex, i + 1);\n }\n\n return previews;\n}\n","import type { ToolPart } from \"../components/message-types\";\nimport type { Block, TitleSegment } from \"../components/timeline\";\nimport { basenameSafe, buildDiffTitleSegments, buildFileDiffPreviews, extractDiffFilePaths } from \"../utils/diff\";\nimport { toolTypeToIconName } from \"../utils/get-icon\";\n\nconst TOOL_LABELS: Record<string, string> = {\n apply_patch: \"Apply patch\",\n bash: \"Run command\",\n edit: \"Edit file\",\n glob: \"Find files\",\n grep: \"Search files\",\n read: \"Read file\",\n skill: \"Load skill\",\n todowrite: \"Update todos\",\n};\n\nconst STATE_LABELS: Record<string, string> = {\n error: \"failed\",\n \"output-error\": \"failed\",\n input_streaming: \"running\",\n running: \"running\",\n completed: \"completed\",\n failed: \"failed\",\n};\n\nexport type ApplyPatchMetadataFile = {\n filePath: string;\n additions: number;\n deletions: number;\n diff?: string;\n before?: string;\n after?: string;\n};\n\nexport const normalizeToolType = (value: string) => value.replace(/^tool-/, \"\").toLowerCase();\n\nconst toTitleCase = (value: string) => {\n return value\n .split(\" \")\n .filter((token) => token.length > 0)\n .map((token) => token[0].toUpperCase() + token.slice(1))\n .join(\" \");\n};\n\nexport const getToolType = (invocation: ToolPart) => normalizeToolType(invocation.tool ?? \"tool\");\n\nexport const getToolLabel = (value: string) => {\n const normalized = normalizeToolType(value);\n return TOOL_LABELS[normalized] ?? toTitleCase(normalized.replace(/_/g, \" \"));\n};\n\nexport const getStateLabel = (invocation: ToolPart) => {\n const state = invocation.state?.status ?? invocation.status;\n if (!state || typeof state !== \"string\") return null;\n\n const normalized = state.replace(/-/g, \"_\");\n if (STATE_LABELS[normalized]) return STATE_LABELS[normalized];\n if (normalized.includes(\"stream\")) return \"running\";\n return null;\n};\n\nexport const isErrorState = (invocation: ToolPart) => {\n const state = invocation.state?.status ?? invocation.status;\n return state === \"error\" || state === \"output-error\" || state === \"failed\";\n};\n\nexport const buildIndicator = (invocation: ToolPart) => {\n if (isErrorState(invocation)) {\n return { type: \"icon\", icon: \"danger\" } as const;\n }\n\n return {\n type: \"icon\",\n icon: toolTypeToIconName(getToolType(invocation)),\n } as const;\n};\n\nexport const buildBaseTitle = (\n invocation: ToolPart,\n detail?: string,\n labelOverride?: string,\n detailStyle?: \"monospace\",\n) => {\n const label = labelOverride ?? getToolLabel(invocation.tool ?? \"tool\");\n const title: TitleSegment[] = [{ kind: \"text\", text: label, bold: true }];\n\n if (detail) {\n title.push({\n kind: \"text\",\n text: detail,\n muted: true,\n ...(detailStyle === \"monospace\" ? { truncate: true, monospace: true } : {}),\n });\n }\n\n const stateLabel = getStateLabel(invocation);\n if (stateLabel && stateLabel !== \"completed\") {\n title.push({ kind: \"text\", text: stateLabel, muted: true });\n }\n\n return title;\n};\n\nexport const getInputObject = (invocation: ToolPart) => {\n const input = invocation.state?.input;\n if (!input || typeof input !== \"object\" || Array.isArray(input)) return null;\n return input as Record<string, unknown>;\n};\n\nexport const getOutputObject = (invocation: ToolPart) => {\n const output = invocation.state?.output;\n if (!output || typeof output !== \"object\" || Array.isArray(output)) return null;\n return output as Record<string, unknown>;\n};\n\nexport const getStringValue = (value: unknown) => {\n if (typeof value === \"string\" && value.trim().length > 0) return value;\n return null;\n};\n\nexport const getObjectValue = (value: unknown) => {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) return null;\n return value as Record<string, unknown>;\n};\n\nexport const getStateObject = (invocation: ToolPart, key: string) => {\n const state = getObjectValue(invocation.state);\n if (!state) return null;\n return getObjectValue(state[key]);\n};\n\nconst normalizeFilePath = (value: string) => value.replace(/\\\\/g, \"/\").replace(/^\\/+/, \"\");\n\nconst isUnifiedDiff = (value: string) => value.includes(\"--- \") && value.includes(\"+++ \") && value.includes(\"@@\");\n\nconst getApplyPatchMetadataObjects = (invocation: ToolPart) => {\n const output = getOutputObject(invocation);\n return [getStateObject(invocation, \"metadata\"), getObjectValue(output?.metadata)].filter(Boolean) as Array<\n Record<string, unknown>\n >;\n};\n\nconst parseApplyPatchMetadataFile = (entry: unknown) => {\n const record = getObjectValue(entry);\n if (!record) return null;\n\n const rawPath = getStringValue(record.filePath) ?? getStringValue(record.relativePath) ?? getStringValue(record.path);\n if (!rawPath) return null;\n\n return {\n filePath: normalizeFilePath(rawPath),\n additions: typeof record.additions === \"number\" ? record.additions : 0,\n deletions: typeof record.deletions === \"number\" ? record.deletions : 0,\n diff: getStringValue(record.diff) ?? undefined,\n before: getStringValue(record.before) ?? undefined,\n after: getStringValue(record.after) ?? undefined,\n } satisfies ApplyPatchMetadataFile;\n};\n\nexport const getApplyPatchMetadataFiles = (invocation: ToolPart) => {\n const files: ApplyPatchMetadataFile[] = [];\n\n for (const metadata of getApplyPatchMetadataObjects(invocation)) {\n const entries = Array.isArray(metadata.files) ? metadata.files : [];\n\n for (const entry of entries) {\n const parsedFile = parseApplyPatchMetadataFile(entry);\n if (!parsedFile) continue;\n files.push(parsedFile);\n }\n }\n\n return files;\n};\n\nexport const getApplyPatchInputFilePaths = (invocation: ToolPart) => {\n const input = getInputObject(invocation);\n const changes = Array.isArray(input?.changes) ? input.changes : [];\n const filePaths = changes\n .map((change) => getStringValue(getObjectValue(change)?.path))\n .filter((filePath): filePath is string => Boolean(filePath))\n .map(normalizeFilePath);\n\n return Array.from(new Set(filePaths));\n};\n\nexport const getApplyPatchDiffText = (invocation: ToolPart) => {\n const input = getInputObject(invocation);\n const inputDiff = getStringValue(input?.diff);\n if (inputDiff) return inputDiff;\n\n for (const metadata of getApplyPatchMetadataObjects(invocation)) {\n const metadataDiff = getStringValue(metadata.diff);\n if (metadataDiff) return metadataDiff;\n }\n\n const fileDiffs = getApplyPatchMetadataFiles(invocation)\n .map((file) => file.diff)\n .filter((diff): diff is string => Boolean(diff));\n if (fileDiffs.length > 0) return fileDiffs.join(\"\\n\");\n\n const patchText = getStringValue(input?.patchText);\n if (patchText && isUnifiedDiff(patchText)) return patchText;\n\n return null;\n};\n\nexport const buildApplyPatchMetadataTitleSegments = (files: ApplyPatchMetadataFile[]) => {\n const seen = new Set<string>();\n const segments: TitleSegment[] = [];\n\n for (const file of files) {\n if (seen.has(file.filePath)) continue;\n seen.add(file.filePath);\n\n segments.push({\n kind: \"diff\",\n fileName: basenameSafe(file.filePath),\n filePath: file.filePath,\n additions: file.additions,\n deletions: file.deletions,\n });\n }\n\n return segments;\n};\n\nexport const getApplyPatchMetadataReferences = (files: ApplyPatchMetadataFile[]) => {\n return Array.from(new Set(files.map((file) => file.filePath)));\n};\n\nexport const getOutputText = (invocation: ToolPart) => {\n const outputObject = getOutputObject(invocation);\n\n return (\n getStringValue(invocation.state?.output) ??\n getStringValue(outputObject?.returnDisplay) ??\n getStringValue(outputObject?.preview) ??\n getStringValue(outputObject?.stdout) ??\n getStringValue(outputObject?.content)\n );\n};\n\nexport const parseSkillContentBlock = (value: string) => {\n const match = value.match(/<skill_content(?:\\s+name=\"([^\"]+)\")?>([\\s\\S]*?)<\\/skill_content>/);\n if (!match) return null;\n\n return {\n skillName: getStringValue(match[1]) ?? undefined,\n content: getStringValue(match[2]) ?? \"\",\n };\n};\n\nexport const getSkillName = (invocation: ToolPart) => {\n const input = getInputObject(invocation);\n return (\n getStringValue(input?.name) ??\n getStringValue(input?.skillName) ??\n getStringValue(input?.skill) ??\n getStringValue(input?.skill_name) ??\n undefined\n );\n};\n\nexport const buildFileLinkSegment = (filePath: string, variant?: \"default\" | \"bubble\"): TitleSegment => {\n return {\n kind: \"link\",\n text: basenameSafe(filePath),\n filePath,\n ...(variant ? { variant } : {}),\n };\n};\n\nexport const prependErrorBlock = (invocation: ToolPart, blocks: Block[]): Block[] => {\n if (!isErrorState(invocation) || !invocation.state?.errorText) return blocks;\n const errorBlock: Block = {\n type: \"comment\",\n text: invocation.state.errorText,\n };\n return [errorBlock, ...blocks];\n};\n\nexport const getDiffBlocks = (diffText?: string | null) => {\n return buildFileDiffPreviews(diffText ?? undefined).map((preview) => ({\n type: \"diff\",\n language: \"diff\",\n original: preview.original,\n modified: preview.modified,\n sideBySide: false,\n })) satisfies Block[];\n};\n\nexport const getDiffTitleSegments = (diffText?: string | null) => buildDiffTitleSegments(diffText ?? undefined);\n\nexport const getDiffReferences = (diffText?: string | null) => extractDiffFilePaths(diffText ?? undefined);\n","import type { Block, Item } from \"../components/timeline\";\nimport {\n buildApplyPatchMetadataTitleSegments,\n buildBaseTitle,\n buildFileLinkSegment,\n buildIndicator,\n getApplyPatchDiffText,\n getApplyPatchInputFilePaths,\n getApplyPatchMetadataFiles,\n getApplyPatchMetadataReferences,\n getDiffBlocks,\n getDiffReferences,\n getDiffTitleSegments,\n prependErrorBlock,\n} from \"./shared\";\nimport type { ToolRenderer } from \"./types\";\n\nexport const renderApplyPatch: ToolRenderer = (invocation) => {\n const diffText = getApplyPatchDiffText(invocation);\n const metadataFiles = getApplyPatchMetadataFiles(invocation);\n const inputFilePaths = getApplyPatchInputFilePaths(invocation);\n\n const title = buildBaseTitle(invocation, undefined, \"Apply patch\");\n const diffSegments = getDiffTitleSegments(diffText);\n if (diffSegments.length > 0) {\n title.push(...diffSegments);\n } else if (metadataFiles.length > 0) {\n title.push(...buildApplyPatchMetadataTitleSegments(metadataFiles));\n } else {\n title.push(...inputFilePaths.map((filePath) => buildFileLinkSegment(filePath, \"bubble\")));\n }\n\n const blocks: Block[] = [...getDiffBlocks(diffText)];\n\n if (blocks.length === 0) {\n for (const file of metadataFiles) {\n if (!file.before && !file.after) continue;\n blocks.push({\n type: \"diff\",\n language: \"diff\",\n original: file.before ?? \"\",\n modified: file.after ?? \"\",\n sideBySide: false,\n });\n }\n }\n\n if (blocks.length === 0) {\n const references = getDiffReferences(diffText);\n if (references.length === 0) {\n references.push(...getApplyPatchMetadataReferences(metadataFiles));\n }\n if (references.length === 0) {\n references.push(...inputFilePaths);\n }\n if (references.length > 0) {\n blocks.push({ type: \"references\", references });\n }\n }\n\n return {\n indicator: buildIndicator(invocation),\n title,\n blocks: prependErrorBlock(invocation, blocks),\n } satisfies Item;\n};\n","import type { Block, Item } from \"../components/timeline\";\nimport {\n buildBaseTitle,\n buildFileLinkSegment,\n buildIndicator,\n getDiffBlocks,\n getInputObject,\n getOutputObject,\n getStringValue,\n prependErrorBlock,\n} from \"./shared\";\nimport type { ToolRenderer } from \"./types\";\n\nconst buildEditDiff = (original: string, modified: string) => {\n return [\n {\n type: \"diff\",\n language: \"text\",\n original,\n modified,\n sideBySide: false,\n },\n ] satisfies Block[];\n};\n\nexport const renderEdit: ToolRenderer = (invocation) => {\n const input = getInputObject(invocation);\n const output = getOutputObject(invocation);\n\n const filePath =\n getStringValue(input?.filePath) ??\n getStringValue(input?.file_path) ??\n getStringValue(output?.filePath) ??\n undefined;\n\n const original = getStringValue(output?.oldString) ?? getStringValue(input?.old_string) ?? undefined;\n const modified = getStringValue(output?.newString) ?? getStringValue(input?.new_string) ?? undefined;\n\n const title = buildBaseTitle(invocation, undefined, \"Edit file\");\n if (filePath) {\n title.push(buildFileLinkSegment(filePath));\n }\n\n const diffBlocks =\n original !== undefined && modified !== undefined\n ? buildEditDiff(original, modified)\n : getDiffBlocks(getStringValue(output?.diff));\n\n return {\n indicator: buildIndicator(invocation),\n title,\n blocks: prependErrorBlock(invocation, diffBlocks),\n } satisfies Item;\n};\n","import type { ToolPart } from \"../components/message-types\";\nimport type { Block, Item, TitleSegment } from \"../components/timeline\";\nimport { getQuestionResponseText, parseQuestionPrompt } from \"./question-prompt\";\nimport type { ToolRenderer } from \"./types\";\n\ntype QuestionRendererDependencies = {\n buildBaseTitle: (invocation: ToolPart, detail?: string, labelOverride?: string) => TitleSegment[];\n buildIndicator: (invocation: ToolPart) => Item[\"indicator\"];\n prependErrorBlock: (invocation: ToolPart, blocks: Block[]) => Block[];\n};\n\nexport const createQuestionRenderer = (deps: QuestionRendererDependencies): ToolRenderer => {\n const { buildBaseTitle, buildIndicator, prependErrorBlock } = deps;\n\n return (invocation) => {\n const responseText =\n getQuestionResponseText(invocation.state?.output) ?? getQuestionResponseText(invocation.state?.metadata);\n const prompt = parseQuestionPrompt(invocation.state?.input);\n const block = prompt ? ({ type: \"question-form\", questions: prompt.questions } satisfies Block) : null;\n if (!responseText && !block) return null;\n\n const fieldLabel = block ? `${block.questions.length} field${block.questions.length === 1 ? \"\" : \"s\"}` : undefined;\n const blocks = responseText ? [] : [block!];\n\n return {\n indicator: buildIndicator(invocation),\n title: buildBaseTitle(invocation, fieldLabel, \"Question\"),\n blocks: prependErrorBlock(invocation, blocks),\n expandable: false,\n } satisfies Item;\n };\n};\n","import type { Block, Item } from \"../components/timeline\";\nimport {\n buildBaseTitle,\n buildFileLinkSegment,\n buildIndicator,\n getInputObject,\n getOutputObject,\n getOutputText,\n getSkillName,\n getStringValue,\n parseSkillContentBlock,\n prependErrorBlock,\n} from \"./shared\";\nimport type { ToolRenderer } from \"./types\";\n\nexport const renderRead: ToolRenderer = (invocation) => {\n const input = getInputObject(invocation);\n const output = getOutputObject(invocation);\n\n const filePath =\n getStringValue(input?.filePath) ??\n getStringValue(input?.file_path) ??\n getStringValue(input?.file) ??\n getStringValue(output?.filePath) ??\n getStringValue(output?.file) ??\n getStringValue(output?.path) ??\n undefined;\n\n const title = buildBaseTitle(invocation, undefined, \"Read file\");\n if (filePath) {\n title.push(buildFileLinkSegment(filePath));\n }\n\n return {\n indicator: buildIndicator(invocation),\n title,\n blocks: prependErrorBlock(invocation, []),\n } satisfies Item;\n};\n\nconst renderCommand = (invocation: Parameters<ToolRenderer>[0], label: string) => {\n const input = getInputObject(invocation);\n const output = getOutputObject(invocation);\n const command = getStringValue(input?.command) ?? undefined;\n\n const title = buildBaseTitle(invocation, command, label, \"monospace\");\n const blocks: Block[] = [];\n\n const outputText = getOutputText(invocation);\n if (outputText) {\n blocks.push({ type: \"code\", language: \"text\", code: outputText });\n }\n\n const stderr = getStringValue(output?.stderr);\n if (stderr && stderr !== outputText) {\n blocks.push({ type: \"code\", language: \"text\", code: stderr });\n }\n\n if (typeof output?.exitCode === \"number\") {\n blocks.push({ type: \"text\", text: `Exit code: ${output.exitCode}` });\n }\n\n return {\n indicator: buildIndicator(invocation),\n title,\n blocks: prependErrorBlock(invocation, blocks),\n } satisfies Item;\n};\n\nexport const renderBash: ToolRenderer = (invocation) => renderCommand(invocation, \"Run command\");\n\nexport const renderShell: ToolRenderer = (invocation) => renderCommand(invocation, \"Shell\");\n\nexport const renderGrep: ToolRenderer = (invocation) => {\n const input = getInputObject(invocation);\n const outputText = getOutputText(invocation);\n const query = getStringValue(input?.pattern) ?? undefined;\n\n const title = buildBaseTitle(invocation, query, \"Search files\");\n const blocks: Block[] = outputText ? [{ type: \"code\", language: \"text\", code: outputText }] : [];\n\n return {\n indicator: buildIndicator(invocation),\n title,\n blocks: prependErrorBlock(invocation, blocks),\n } satisfies Item;\n};\n\nexport const renderGlob: ToolRenderer = (invocation) => {\n const input = getInputObject(invocation);\n const outputText = getOutputText(invocation);\n const pattern = getStringValue(input?.pattern) ?? undefined;\n\n const title = buildBaseTitle(invocation, pattern, \"Find files\");\n const blocks: Block[] = [];\n\n if (outputText) {\n const references = outputText\n .split(/\\r?\\n/)\n .map((line) => line.trim())\n .filter((line) => line.length > 0);\n\n if (references.length > 0) {\n blocks.push({ type: \"references\", references });\n }\n }\n\n return {\n indicator: buildIndicator(invocation),\n title,\n blocks: prependErrorBlock(invocation, blocks),\n } satisfies Item;\n};\n\nexport const renderSkill: ToolRenderer = (invocation) => {\n const outputText = getOutputText(invocation);\n const parsedOutput = outputText ? parseSkillContentBlock(outputText) : null;\n\n const skillName = getSkillName(invocation) ?? parsedOutput?.skillName;\n const title = buildBaseTitle(invocation, skillName, \"Load skill\");\n\n const renderedContent = parsedOutput?.content ?? outputText;\n const blocks: Block[] = renderedContent ? [{ type: \"code\", language: \"markdown\", code: renderedContent }] : [];\n\n return {\n indicator: buildIndicator(invocation),\n title,\n blocks: prependErrorBlock(invocation, blocks),\n } satisfies Item;\n};\n","import type { ToolPart } from \"../components/message-types\";\nimport type { Block, Item, TitleSegment } from \"../components/timeline\";\nimport type { ToolRenderer } from \"./types\";\n\ntype TodoItem = {\n label: string;\n checked: boolean;\n};\n\ntype TodowriteRendererDependencies = {\n buildBaseTitle: (invocation: ToolPart, detail?: string, labelOverride?: string) => TitleSegment[];\n buildIndicator: (invocation: ToolPart) => Item[\"indicator\"];\n prependErrorBlock: (invocation: ToolPart, blocks: Block[]) => Block[];\n};\n\nconst getStringValue = (value: unknown) => {\n if (typeof value === \"string\" && value.trim().length > 0) return value;\n return null;\n};\n\nconst getObjectValue = (value: unknown) => {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) return null;\n return value as Record<string, unknown>;\n};\n\nconst parseTodoItem = (value: unknown): TodoItem | null => {\n const todo = getObjectValue(value);\n if (!todo) return null;\n\n const content = getStringValue(todo.content) ?? getStringValue(todo.title);\n if (!content) return null;\n const status = getStringValue(todo.status);\n\n return {\n label: content,\n checked: status === \"completed\",\n };\n};\n\nconst parseTodoItems = (value: unknown) => {\n if (!value) return { items: [], explicit: false };\n\n const listSource = (() => {\n if (Array.isArray(value)) return value;\n const objectValue = getObjectValue(value);\n if (!objectValue || !Array.isArray(objectValue.todos)) return null;\n return objectValue.todos;\n })();\n\n if (!listSource) return { items: [], explicit: false };\n\n return {\n items: listSource.map(parseTodoItem).filter((todo): todo is TodoItem => todo !== null),\n explicit: true,\n };\n};\n\nexport const createTodowriteRenderer = (deps: TodowriteRendererDependencies): ToolRenderer => {\n const { buildBaseTitle, buildIndicator, prependErrorBlock } = deps;\n\n return (invocation) => {\n const inputTodos = parseTodoItems(invocation.state?.input);\n const outputTodos = parseTodoItems(invocation.state?.output);\n const todoState = outputTodos.explicit ? outputTodos : inputTodos;\n if (!todoState.explicit) return null;\n\n const todos = todoState.items;\n const countLabel = `${todos.length} item${todos.length === 1 ? \"\" : \"s\"}`;\n const title = buildBaseTitle(invocation, countLabel, \"Update todos\");\n\n if (todos.length === 0) {\n return {\n indicator: buildIndicator(invocation),\n title,\n blocks: prependErrorBlock(invocation, [{ type: \"comment\", text: \"No todos\" }]),\n } satisfies Item;\n }\n\n const blocks: Block[] = [\n {\n type: \"todo-list\",\n items: todos,\n },\n ];\n\n return {\n indicator: buildIndicator(invocation),\n title,\n blocks: prependErrorBlock(invocation, blocks),\n } satisfies Item;\n };\n};\n","import { renderApplyPatch } from \"./apply-patch-renderer\";\nimport { renderEdit } from \"./edit-renderer\";\nimport { createQuestionRenderer } from \"./question-renderer\";\nimport { buildBaseTitle, buildIndicator, prependErrorBlock } from \"./shared\";\nimport { renderBash, renderGlob, renderGrep, renderRead, renderShell, renderSkill } from \"./standard-renderers\";\nimport { createTodowriteRenderer } from \"./todowrite-renderer\";\nimport type { ToolRenderersMap } from \"./types\";\n\nconst renderQuestion = createQuestionRenderer({\n buildBaseTitle,\n buildIndicator,\n prependErrorBlock,\n});\n\nconst renderTodowrite = createTodowriteRenderer({\n buildBaseTitle,\n buildIndicator,\n prependErrorBlock,\n});\n\nexport const createDefaultToolRenderers = () => {\n return {\n apply_patch: renderApplyPatch,\n bash: renderBash,\n edit: renderEdit,\n glob: renderGlob,\n grep: renderGrep,\n question: renderQuestion,\n read: renderRead,\n shell: renderShell,\n skill: renderSkill,\n todo_write: renderTodowrite,\n todowrite: renderTodowrite,\n } satisfies ToolRenderersMap;\n};\n","import type { ToolPart } from \"../components/message-types\";\nimport type { Block, Item, TitleSegment } from \"../components/timeline\";\nimport { toolTypeToIconName } from \"../utils/get-icon\";\nimport { getToolNameLookupKeys, normalizeToolName } from \"../utils/tool-name\";\nimport { createDefaultToolRenderers } from \"./default-renderers\";\nimport type { ToolRenderersMap, ToolTimelineBuilderOptions } from \"./types\";\n\nconst STATE_LABELS: Record<string, string> = {\n error: \"failed\",\n \"output-error\": \"failed\",\n \"input-streaming\": \"running\",\n};\n\nconst toTitleCase = (value: string) => {\n return value\n .split(\" \")\n .filter((token) => token.length > 0)\n .map((token) => token[0].toUpperCase() + token.slice(1))\n .join(\" \");\n};\n\nconst getToolLabel = (tool?: string) => {\n const normalized = normalizeToolName(tool ?? \"tool\").replace(/_/g, \" \");\n return toTitleCase(normalized);\n};\n\nconst isErrorState = (state?: string) => state === \"error\" || state === \"output-error\";\n\nconst buildIndicator = (invocation: ToolPart) => {\n if (isErrorState(invocation.state?.status)) {\n return { type: \"icon\", icon: \"danger\" } as const;\n }\n\n return { type: \"icon\", icon: toolTypeToIconName(invocation.tool ?? \"tool\") } as const;\n};\n\nconst getStateLabel = (state?: unknown) => {\n if (!state || typeof state !== \"string\") return null;\n if (STATE_LABELS[state]) return STATE_LABELS[state];\n if (state.includes(\"stream\")) return \"running\";\n return null;\n};\n\nconst stringifyValue = (value: unknown) => {\n if (typeof value === \"string\") return value;\n if (value === null || value === undefined) return null;\n\n try {\n return JSON.stringify(value, null, 2);\n } catch {\n return null;\n }\n};\n\nconst isBlankValue = (value: unknown): boolean => {\n if (value === null || value === undefined) return true;\n if (typeof value === \"string\") return value.trim().length === 0;\n if (Array.isArray(value)) return value.length === 0 || value.every(isBlankValue);\n if (typeof value === \"object\") {\n return Object.values(value as Record<string, unknown>).every(isBlankValue);\n }\n return false;\n};\n\nconst getRecord = (value: unknown) => {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) return null;\n return value as Record<string, unknown>;\n};\n\nconst getString = (value: unknown) => {\n if (typeof value === \"string\" && value.trim().length > 0) return value;\n return null;\n};\n\nconst getMediaType = (record: Record<string, unknown>) =>\n getString(record.mime_type) ?? getString(record.mediaType) ?? getString(record.mimeType);\n\nconst isImageMediaType = (value: string | null) => Boolean(value?.startsWith(\"image/\"));\n\nconst imageUrlPattern = /\\.(avif|bmp|gif|jpe?g|png|svg|webp)(\\?.*)?$/i;\n\nconst getImageBlock = (value: unknown, alt: string): Block | null => {\n const record = getRecord(value);\n if (!record) return null;\n\n const mediaType = getMediaType(record);\n const data = getString(record.data);\n if (data && isImageMediaType(mediaType)) {\n return { type: \"image\", src: `data:${mediaType};base64,${data}`, alt };\n }\n\n const url = getString(record.url) ?? getString(record.src);\n if (url && (isImageMediaType(mediaType) || imageUrlPattern.test(url))) {\n return { type: \"image\", src: url, alt };\n }\n\n return null;\n};\n\nconst getFileLikeOutput = (value: unknown) => {\n const record = getRecord(value);\n if (!record) return null;\n\n const filePath = getString(record.path) ?? getString(record.filePath) ?? getString(record.filename);\n const content = getString(record.content) ?? getString(record.body) ?? getString(record.text);\n if (!filePath || content === null) return null;\n\n return { filePath, content };\n};\n\nconst extensionLanguageBySuffix: Record<string, string> = {\n css: \"css\",\n html: \"html\",\n js: \"js\",\n json: \"json\",\n jsx: \"jsx\",\n md: \"markdown\",\n py: \"python\",\n ts: \"ts\",\n tsx: \"tsx\",\n yaml: \"yaml\",\n yml: \"yaml\",\n};\n\nconst getLanguageFromPath = (filePath: string) => {\n const extension = filePath.split(\".\").pop()?.toLowerCase();\n if (!extension) return \"text\";\n return extensionLanguageBySuffix[extension] ?? extension;\n};\n\nconst createLabeledBlocks = (label: string, blocks: Block[]) => {\n if (blocks.length === 0) return [];\n return [{ type: \"text\", text: label }, ...blocks] satisfies Block[];\n};\n\nconst buildBlocksForArrayValue = (value: unknown[], alt: string) => {\n const blocks: Block[] = [];\n\n for (const entry of value) {\n const entryRecord = getRecord(entry);\n const entryType = getString(entryRecord?.type);\n if (entryType === \"image\") {\n const image = getImageBlock(entry, alt);\n if (image) blocks.push(image);\n continue;\n }\n if (entryType === \"text\") {\n const text = getString(entryRecord?.text);\n if (text) blocks.push({ type: \"text\", text });\n continue;\n }\n blocks.push(...buildBlocksForValue(entry, alt));\n }\n\n return blocks;\n};\n\nconst buildBlocksForFileLikeValue = (value: unknown) => {\n const fileLikeOutput = getFileLikeOutput(value);\n if (!fileLikeOutput) return null;\n\n return [\n {\n type: \"code\",\n language: getLanguageFromPath(fileLikeOutput.filePath),\n code: fileLikeOutput.content,\n },\n ] satisfies Block[];\n};\n\nconst buildBlocksForAttachmentValue = (value: unknown) => {\n const record = getRecord(value);\n const attachmentName = getString(record?.attachment_name) ?? getString(record?.attachmentName);\n const attachmentId = getString(record?.attachment_file_id) ?? getString(record?.attachmentFileId);\n if (!attachmentName && !attachmentId) return null;\n\n return [{ type: \"text\", text: attachmentName ?? `Attachment ${attachmentId}` }] satisfies Block[];\n};\n\nconst buildBlocksForValue = (value: unknown, alt: string): Block[] => {\n if (isBlankValue(value)) return [];\n\n const imageBlock = getImageBlock(value, alt);\n if (imageBlock) return [imageBlock];\n\n if (Array.isArray(value)) return buildBlocksForArrayValue(value, alt);\n\n const fileBlocks = buildBlocksForFileLikeValue(value);\n if (fileBlocks) return fileBlocks;\n\n const attachmentBlocks = buildBlocksForAttachmentValue(value);\n if (attachmentBlocks) return attachmentBlocks;\n\n const text = stringifyValue(value);\n if (!text?.trim()) return [];\n\n return [{ type: \"code\", language: typeof value === \"string\" ? \"text\" : \"json\", code: text }] satisfies Block[];\n};\n\nconst buildGenericBlocks = (invocation: ToolPart): Block[] => {\n const blocks: Block[] = [];\n const toolLabel = getToolLabel(invocation.tool);\n\n if (isErrorState(invocation.state?.status) && invocation.state?.errorText) {\n blocks.push({ type: \"comment\", text: invocation.state.errorText });\n }\n\n blocks.push(...createLabeledBlocks(\"Input\", buildBlocksForValue(invocation.state?.input, `${toolLabel} input`)));\n blocks.push(...createLabeledBlocks(\"Output\", buildBlocksForValue(invocation.state?.output, `${toolLabel} output`)));\n\n return blocks;\n};\n\nconst createGenericItem = (invocation: ToolPart) => {\n const title: TitleSegment[] = [{ kind: \"text\", text: getToolLabel(invocation.tool), bold: true }];\n const fileLikeOutput = getFileLikeOutput(invocation.state?.output);\n if (fileLikeOutput) {\n title.push({ kind: \"link\", text: fileLikeOutput.filePath, filePath: fileLikeOutput.filePath });\n }\n const stateLabel = getStateLabel(invocation.state?.status);\n if (stateLabel) {\n title.push({ kind: \"text\", text: stateLabel, muted: true });\n }\n\n return {\n indicator: buildIndicator(invocation),\n title,\n blocks: buildGenericBlocks(invocation),\n };\n};\n\nconst isVisibleTitleSegment = (segment: TitleSegment) => {\n if (segment.kind === \"text\" || segment.kind === \"link\") return segment.text.trim().length > 0;\n if (segment.kind === \"diff\") return segment.fileName.trim().length > 0;\n return true;\n};\n\nconst isVisibleBlock = (block: Block) => {\n switch (block.type) {\n case \"comment\":\n case \"code\":\n case \"text\":\n return block.type === \"code\" ? block.code.trim().length > 0 : block.text.trim().length > 0;\n case \"diff\":\n return block.original.trim().length > 0 || block.modified.trim().length > 0;\n case \"image\":\n return block.src.trim().length > 0;\n case \"todo-list\":\n return block.items.length > 0;\n case \"question-form\":\n return block.questions.length > 0;\n case \"references\":\n return block.references.length > 0;\n case \"input\":\n case \"component\":\n return true;\n }\n};\n\nconst isVisibleItem = (item: Item) => {\n const hasTitle = item.title.some(isVisibleTitleSegment);\n const hasBlocks = (item.blocks ?? []).some(isVisibleBlock);\n return hasTitle || hasBlocks;\n};\n\nconst mergeToolRenderers = (overrides?: ToolRenderersMap) => {\n if (!overrides) return createDefaultToolRenderers();\n return { ...createDefaultToolRenderers(), ...overrides } satisfies ToolRenderersMap;\n};\n\nconst getRenderer = (invocation: ToolPart, toolRenderers: ToolRenderersMap) => {\n const rawTool = invocation.tool ?? \"tool\";\n for (const key of getToolNameLookupKeys(rawTool)) {\n const renderer = toolRenderers[key];\n if (renderer) return renderer;\n }\n\n return undefined;\n};\n\nconst renderInvocation = (\n invocation: ToolPart,\n toolRenderers: ToolRenderersMap,\n options?: ToolTimelineBuilderOptions,\n) => {\n const renderer = getRenderer(invocation, toolRenderers);\n if (renderer) {\n const rendered = renderer(invocation, options);\n if (rendered) return rendered;\n }\n\n return createGenericItem(invocation);\n};\n\nexport const buildTimelineDocFromInvocations = (invocations: ToolPart[], options?: ToolTimelineBuilderOptions) => {\n const toolRenderers = mergeToolRenderers(options?.toolRenderers);\n const items = invocations\n .map((invocation) => renderInvocation(invocation, toolRenderers, options))\n .filter(isVisibleItem);\n\n return { items };\n};\n","import { Avatar, Link, Span } from \"@chakra-ui/react\";\nimport type { MouseEvent } from \"react\";\nimport { DiffBubble } from \"@/components/diff-viewer/diff-bubble\";\nimport { Tooltip } from \"@/components/primitives/tooltip\";\nimport type { TitleSegment } from \"./timeline\";\n\nconst handleTitleLinkClick = (\n event: MouseEvent<HTMLAnchorElement>,\n seg: Extract<TitleSegment, { kind: \"link\" }>,\n onOpenFile?: (filePath: string) => void,\n stopPropagation = false,\n) => {\n if (stopPropagation) {\n event.stopPropagation();\n }\n\n if (!seg.href) {\n event.preventDefault();\n }\n if (seg.filePath) {\n onOpenFile?.(seg.filePath);\n }\n};\n\nfunction AvatarTitleSegment({ seg }: { seg: Extract<TitleSegment, { kind: \"avatar\" }> }) {\n return (\n <Avatar.Root width=\"1.5rem\" height=\"1.5rem\">\n <Avatar.Image src={seg.src} alt={seg.alt} />\n <Avatar.Fallback background=\"bg.muted\" color=\"fg.muted\" />\n </Avatar.Root>\n );\n}\n\nfunction DiffTitleSegment({\n seg,\n onOpenFile,\n}: {\n seg: Extract<TitleSegment, { kind: \"diff\" }>;\n onOpenFile?: (filePath: string) => void;\n}) {\n return (\n <DiffBubble\n fileName={seg.fileName}\n additions={seg.additions ?? 0}\n deletions={seg.deletions ?? 0}\n onClickFileLink={() => {\n const path = seg.filePath ?? seg.fileName;\n onOpenFile?.(path);\n }}\n />\n );\n}\n\nfunction BubbleLinkTitleSegment({\n seg,\n onOpenFile,\n}: {\n seg: Extract<TitleSegment, { kind: \"link\" }>;\n onOpenFile?: (filePath: string) => void;\n}) {\n const fontWeight = seg.bold ? \"medium\" : undefined;\n const isInteractive = Boolean(seg.href || seg.filePath);\n\n return (\n <Link\n href={seg.href ?? \"#\"}\n fontWeight={fontWeight}\n color={seg.muted ? \"fg.muted\" : \"fg.muted\"}\n textDecoration=\"none\"\n cursor={isInteractive ? \"pointer\" : \"default\"}\n onClick={(event) => handleTitleLinkClick(event, seg, onOpenFile, true)}\n _hover={{\n textDecoration: \"underline\",\n color: seg.muted ? \"fg.muted\" : \"fg.blue-dark\",\n }}\n >\n {seg.text}\n </Link>\n );\n}\n\nfunction DefaultLinkTitleSegment({\n seg,\n onOpenFile,\n}: {\n seg: Extract<TitleSegment, { kind: \"link\" }>;\n onOpenFile?: (filePath: string) => void;\n}) {\n const fontWeight = seg.bold ? \"medium\" : undefined;\n\n return (\n <Link\n href={seg.href ?? \"#\"}\n fontWeight={fontWeight}\n color={seg.muted ? \"fg.muted\" : \"accent.primary\"}\n textDecoration=\"underline\"\n onClick={(event) => handleTitleLinkClick(event, seg, onOpenFile)}\n _hover={{\n color: seg.muted ? \"fg.muted\" : \"accent.primary\",\n textDecoration: \"underline\",\n }}\n >\n {seg.text}\n </Link>\n );\n}\n\nfunction TextTitleSegment({\n seg,\n isClickable,\n}: {\n seg: Extract<TitleSegment, { kind: \"text\" }>;\n isClickable?: boolean;\n}) {\n const segment = (\n <Span\n fontWeight={seg.bold ? \"medium\" : undefined}\n textStyle={seg.monospace ? \"mono/XS\" : undefined}\n color=\"fg.muted\"\n minW={seg.truncate ? \"0\" : undefined}\n overflow={seg.truncate ? \"hidden\" : undefined}\n textOverflow={seg.truncate ? \"ellipsis\" : undefined}\n whiteSpace={seg.truncate ? \"nowrap\" : undefined}\n _groupHover={{\n color: isClickable && !seg.muted ? \"fg\" : \"fg.muted\",\n }}\n >\n {seg.text}\n </Span>\n );\n\n if (!seg.truncate) return segment;\n\n return <Tooltip content={seg.text}>{segment}</Tooltip>;\n}\n\nexport function TitleInline({\n seg,\n isClickable,\n onOpenFile,\n}: {\n seg: TitleSegment;\n isClickable?: boolean;\n onOpenFile?: (filePath: string) => void;\n}) {\n switch (seg.kind) {\n case \"avatar\":\n return <AvatarTitleSegment seg={seg} />;\n case \"diff\":\n return <DiffTitleSegment seg={seg} onOpenFile={onOpenFile} />;\n case \"link\":\n return seg.variant === \"bubble\" ? (\n <BubbleLinkTitleSegment seg={seg} onOpenFile={onOpenFile} />\n ) : (\n <DefaultLinkTitleSegment seg={seg} onOpenFile={onOpenFile} />\n );\n case \"text\":\n return <TextTitleSegment seg={seg} isClickable={isClickable} />;\n default:\n return null;\n }\n}\n","import { Avatar, Box, Button, Card, Timeline as ChakraTimeline, Image, Span, Stack, Text } from \"@chakra-ui/react\";\nimport { ChevronUpIcon } from \"lucide-react\";\nimport type { ReactNode } from \"react\";\nimport { useState } from \"react\";\nimport { DiffEditor } from \"@/components/diff-viewer/diff-editor\";\nimport { ResourceBadge } from \"@/components/primitives/resource-badge\";\nimport { ScrollArea } from \"@/components/primitives/scroll-area\";\nimport type { IconName } from \"../utils/get-icon\";\nimport { getIconComponent } from \"../utils/get-icon\";\nimport { TitleInline } from \"./timeline-title\";\nimport { QuestionFormBlockView, TodoListBlockView } from \"./timeline-tool-blocks\";\n\nconst Timeline = ChakraTimeline;\n\nexport type TimelineDoc = {\n items: Item[];\n};\n\nexport type Item = {\n id?: string;\n timestamp?: string;\n indicator?: Indicator;\n title: TitleSegment[];\n blocks?: Block[];\n expandable?: boolean;\n};\n\nexport type Indicator =\n | { type: \"icon\"; icon: IconName; color?: string }\n | { type: \"avatar\"; src: string; alt?: string }\n | { type: \"none\" };\n\nexport type TitleSegment =\n | {\n kind: \"text\";\n text: string;\n bold?: boolean;\n muted?: boolean;\n truncate?: boolean;\n monospace?: boolean;\n }\n | { kind: \"avatar\"; src: string; alt?: string }\n | {\n kind: \"diff\";\n fileName: string;\n filePath?: string;\n additions?: number;\n deletions?: number;\n }\n | {\n kind: \"link\";\n text: string;\n href?: string;\n filePath?: string;\n bold?: boolean;\n muted?: boolean;\n variant?: \"default\" | \"bubble\";\n };\n\nexport type TodoListBlockItem = {\n label: string;\n checked: boolean;\n};\n\nexport type QuestionFormBlockOption = {\n label: string;\n description?: string;\n};\n\nexport type QuestionFormBlockQuestion = {\n id?: string;\n question: string;\n options: QuestionFormBlockOption[];\n multiple: boolean;\n required: boolean;\n allowCustomAnswer: boolean;\n};\n\nexport type Block =\n | { type: \"comment\"; text: string; reactions?: { clap?: number } }\n | { type: \"code\"; language: string; code: string; editable?: boolean }\n | {\n type: \"diff\";\n language?: string;\n original: string;\n modified: string;\n sideBySide?: boolean;\n }\n | { type: \"input\"; placeholder?: string }\n | { type: \"text\"; text: string }\n | { type: \"todo-list\"; items: TodoListBlockItem[] }\n | { type: \"question-form\"; questions: QuestionFormBlockQuestion[] }\n | { type: \"references\"; references: string[] }\n | { type: \"image\"; src: string; alt: string; caption?: string }\n | {\n type: \"component\";\n render: (ctx: { onOpenFile?: (filePath: string) => void }) => ReactNode;\n };\n\nfunction IndicatorView({ ind }: { ind?: Indicator }) {\n if (!ind || ind.type === \"none\") return null;\n\n if (ind.type === \"icon\") {\n const IndicatorIcon = getIconComponent(ind.icon);\n return (\n <Timeline.Indicator outline=\"none\" border=\"none\" background=\"bg\" color=\"fg\">\n <Span display=\"inline-flex\" alignItems=\"center\">\n <IndicatorIcon size={14} strokeWidth={1} />\n </Span>\n </Timeline.Indicator>\n );\n }\n\n return (\n <Timeline.Indicator>\n <Avatar.Root boxSize=\"full\">\n <Avatar.Image src={ind.src} alt={ind.alt} />\n <Avatar.Fallback background=\"bg.muted\" color=\"fg.muted\" />\n </Avatar.Root>\n </Timeline.Indicator>\n );\n}\n\nfunction CodeBlock({ code, language }: { code: string; language?: string }) {\n return (\n <ScrollArea\n background=\"bg.code\"\n color=\"fg.muted\"\n borderWidth=\"1px\"\n borderColor=\"border.subtle\"\n borderRadius=\"md\"\n showHorizontalScrollbar\n showVerticalScrollbar={false}\n >\n <Box\n as=\"pre\"\n padding=\"sm\"\n textStyle=\"mono/XS\"\n whiteSpace=\"pre\"\n aria-label={language ? `${language} code block` : \"code block\"}\n >\n <Box as=\"code\">{code}</Box>\n </Box>\n </ScrollArea>\n );\n}\n\nfunction BlockView({ b, onOpenFile }: { b: Block; onOpenFile?: (filePath: string) => void }) {\n switch (b.type) {\n case \"comment\":\n return (\n <Card.Root>\n <Card.Body>{b.text}</Card.Body>\n {b.reactions?.clap ? (\n <Card.Footer>\n <Button>👏 {b.reactions.clap}</Button>\n </Card.Footer>\n ) : null}\n </Card.Root>\n );\n case \"code\":\n return (\n <Card.Root border=\"0\" padding=\"0\">\n <Card.Body padding=\"0\">\n <CodeBlock language={b.language} code={b.code} />\n </Card.Body>\n </Card.Root>\n );\n case \"diff\":\n return (\n <Card.Root border=\"0\" padding=\"0\">\n <Card.Body padding=\"0\">\n <Box height=\"240px\" minW=\"320px\" overflow=\"hidden\">\n <DiffEditor\n original={b.original}\n modified={b.modified}\n language={b.language}\n sideBySide={b.sideBySide ?? false}\n disableScroll={true}\n />\n </Box>\n </Card.Body>\n </Card.Root>\n );\n case \"text\":\n return (\n <Card.Root background=\"transparent\">\n <Card.Body padding=\"sm\">\n <Text textStyle=\"label/S/regular\">{b.text}</Text>\n </Card.Body>\n </Card.Root>\n );\n case \"todo-list\":\n return <TodoListBlockView items={b.items} />;\n case \"question-form\":\n return <QuestionFormBlockView questions={b.questions} />;\n case \"references\":\n return (\n <Stack mt=\"xs\" gap=\"xs\" flexDir=\"row\" flexWrap=\"wrap\">\n {b.references.map((ref) => (\n <ResourceBadge key={ref} fileName={ref} />\n ))}\n </Stack>\n );\n case \"image\":\n if (!b.src.trim()) return null;\n return (\n <Card.Root border=\"0\" padding=\"0\" background=\"transparent\">\n <Card.Body padding=\"0\">\n <Image\n src={b.src}\n alt={b.alt}\n maxH=\"18rem\"\n maxW=\"full\"\n objectFit=\"contain\"\n borderRadius=\"sm\"\n borderWidth=\"1px\"\n borderColor=\"border.subtle\"\n />\n {b.caption ? (\n <Text mt=\"2xs\" textStyle=\"label/XS/regular\" color=\"fg.muted\">\n {b.caption}\n </Text>\n ) : null}\n </Card.Body>\n </Card.Root>\n );\n case \"component\":\n return <>{b.render({ onOpenFile })}</>;\n }\n}\n\nfunction TimelineItemRow({\n item,\n itemKey,\n isOpen,\n canExpand,\n hasBlocks,\n onToggle,\n onOpenFile,\n}: {\n item: Item;\n itemKey: string;\n isOpen: boolean;\n canExpand: boolean;\n hasBlocks: boolean;\n onToggle: (key: string) => void;\n onOpenFile?: (filePath: string) => void;\n}) {\n return (\n <Timeline.Item gap=\"xs\" key={itemKey}>\n <Timeline.Connector>\n <Timeline.Separator />\n <IndicatorView ind={item.indicator} />\n </Timeline.Connector>\n <Timeline.Content h={isOpen ? \"auto\" : \"20px\"}>\n {item.title.length > 0 && (\n <Timeline.Title\n className=\"group\"\n fontWeight=\"normal\"\n display=\"flex\"\n alignItems=\"center\"\n minW=\"0\"\n width=\"full\"\n overflow=\"hidden\"\n cursor={canExpand ? \"pointer\" : \"default\"}\n onClick={canExpand ? () => onToggle(itemKey) : undefined}\n >\n <Span display=\"flex\" alignItems=\"center\" gap=\"sm\" flexWrap=\"nowrap\" minW=\"0\" width=\"full\">\n <Span display=\"flex\" alignItems=\"center\" gap=\"xs\" flexWrap=\"nowrap\" minW=\"0\" flex=\"1\" overflow=\"hidden\">\n {item.title.map((seg, i) => (\n <TitleInline key={i} seg={seg} isClickable={canExpand} onOpenFile={onOpenFile} />\n ))}\n </Span>\n {canExpand ? (\n <Span\n display=\"inline-flex\"\n alignItems=\"center\"\n transition=\"transform 200ms ease, color 200ms ease\"\n transform={isOpen ? \"rotate(0deg)\" : \"rotate(-180deg)\"}\n color=\"transparent\"\n flexShrink=\"0\"\n _groupHover={{ color: \"fg\" }}\n >\n <ChevronUpIcon size={12} />\n </Span>\n ) : null}\n </Span>\n </Timeline.Title>\n )}\n {hasBlocks ? (\n <Box display=\"grid\" gridTemplateRows={isOpen ? \"1fr\" : \"0fr\"} transition=\"grid-template-rows 220ms ease\">\n {isOpen ? (\n <Box\n overflow=\"hidden\"\n opacity={1}\n transform=\"translateY(0)\"\n transition=\"opacity 200ms ease, transform 200ms ease\"\n >\n {item.blocks!.map((block, i) => (\n <Box key={i}>\n <BlockView b={block} onOpenFile={onOpenFile} />\n </Box>\n ))}\n </Box>\n ) : null}\n </Box>\n ) : null}\n </Timeline.Content>\n </Timeline.Item>\n );\n}\n\nexport function TimelineFromJSON({ data, onOpenFile }: { data: TimelineDoc; onOpenFile?: (filePath: string) => void }) {\n const [expanded, setExpanded] = useState<Record<string, boolean>>({});\n\n const getKey = (it: Item, idx: number) => (it.id ? `id:${it.id}` : `idx:${idx}`);\n\n const toggle = (key: string) => {\n setExpanded((prev) => ({ ...prev, [key]: !prev[key] }));\n };\n\n return (\n <Timeline.Root variant=\"tool\">\n {data.items.map((item, idx) => {\n const key = getKey(item, idx);\n const hasBlocks = (item.blocks?.length ?? 0) > 0;\n const canExpand = (item.expandable ?? true) && hasBlocks;\n const isOpen = canExpand ? (expanded[key] ?? false) : hasBlocks;\n\n return (\n <TimelineItemRow\n key={key}\n item={item}\n itemKey={key}\n isOpen={isOpen}\n canExpand={canExpand}\n hasBlocks={hasBlocks}\n onToggle={toggle}\n onOpenFile={onOpenFile}\n />\n );\n })}\n </Timeline.Root>\n );\n}\n","import { buildTimelineDocFromInvocations } from \"../tool-rendering\";\nimport { normalizeToolName } from \"../utils/tool-name\";\nimport type { ToolPart } from \"./message-types\";\nimport { TimelineFromJSON } from \"./timeline\";\n\nexport interface ToolInvocationTimelineProps {\n invocations: ToolPart[];\n labeledBlocks?: boolean;\n hideQuestionForms?: boolean;\n onOpenFile?: (filePath: string) => void;\n}\n\nconst isQuestionTool = (invocation: ToolPart) =>\n normalizeToolName(invocation.tool ?? \"\").replace(/_/g, \"\") === \"question\";\n\nconst hasToolOutput = (invocation: ToolPart) => {\n const output = invocation.state?.output;\n if (typeof output === \"string\") return output.trim().length > 0;\n if (Array.isArray(output)) return output.length > 0;\n if (output && typeof output === \"object\") return Object.keys(output).length > 0;\n return output !== undefined && output !== null;\n};\n\nexport function ToolInvocationTimeline(props: ToolInvocationTimelineProps) {\n const { invocations, labeledBlocks, hideQuestionForms = false, onOpenFile } = props;\n const visibleInvocations = hideQuestionForms\n ? invocations.filter((invocation) => !isQuestionTool(invocation) || hasToolOutput(invocation))\n : invocations;\n\n if (visibleInvocations.length === 0) return null;\n\n const data = buildTimelineDocFromInvocations(visibleInvocations, { labeledBlocks });\n\n return <TimelineFromJSON data={data} onOpenFile={onOpenFile} />;\n}\n","import { Box, Image, Spinner } from \"@chakra-ui/react\";\nimport type { ReactNode } from \"react\";\nimport { AlertMessage } from \"@/components/primitives/alert\";\nimport { ResourceBadge } from \"@/components/primitives/resource-badge\";\nimport { RichMessage } from \"@/components/rich-text\";\nimport { Response } from \"./ai-response\";\nimport type { AlertPart, ChatMessagePart, ErrorPart, FilePart, SessionMessage, ToolPart } from \"./message-types\";\nimport { ToolInvocationTimeline, type ToolInvocationTimelineProps } from \"./tool-invocation-timeline\";\n\ntype ToolInvocationTimelineComponent = (props: ToolInvocationTimelineProps) => ReactNode;\n\nexport interface MessagePartsProps {\n message: SessionMessage;\n streaming?: boolean;\n hideQuestionForms?: boolean;\n onOpenFile?: (filePath: string) => void;\n toolInvocationTimeline?: ToolInvocationTimelineComponent;\n}\n\nconst isToolPart = (part: ChatMessagePart): part is ToolPart => {\n return part.type === \"tool\";\n};\n\nconst filePartLabel = (part: FilePart) => part.filename ?? part.url.split(\"/\").pop() ?? \"attachment\";\n\nconst imageExtensionPattern = /\\.(avif|bmp|gif|jpe?g|png|svg|webp)$/i;\n\nconst isImageFilePart = (part: FilePart) =>\n part.mediaType?.startsWith(\"image/\") || imageExtensionPattern.test(filePartLabel(part));\n\nconst filePartThumbnail = (part: FilePart) =>\n isImageFilePart(part) ? (\n <Image\n src={part.url}\n alt={`${filePartLabel(part)} preview thumbnail`}\n boxSize=\"18px\"\n borderRadius=\"xs\"\n objectFit=\"cover\"\n />\n ) : undefined;\n\nconst openFilePart = (part: FilePart, onOpenFile?: (filePath: string) => void) => {\n if (onOpenFile) {\n onOpenFile(part.url);\n return;\n }\n\n if (typeof window !== \"undefined\") {\n window.open(part.url, \"_blank\", \"noopener,noreferrer\");\n }\n};\n\nconst getErrorMessage = (part: ErrorPart) => {\n if (part.message && part.message.trim().length > 0) {\n return part.message;\n }\n\n const { errorType } = part;\n switch (errorType) {\n case \"timeout\":\n return \"Session timed out.\";\n case \"crash\":\n return \"Session crashed unexpectedly.\";\n case \"permission\":\n return \"Permission denied.\";\n default:\n return \"An error occurred.\";\n }\n};\n\nconst ALERT_COLOR_PALETTE: Record<AlertPart[\"status\"], string> = {\n info: \"blue\",\n warning: \"orange\",\n error: \"red\",\n success: \"green\",\n loading: \"blue\",\n};\n\nconst collectToolInvocations = (parts: ChatMessagePart[], startIndex: number) => {\n const invocations: ToolPart[] = [];\n let lookahead = startIndex;\n\n while (lookahead < parts.length) {\n const nextPart = parts[lookahead];\n if (!isToolPart(nextPart)) break;\n invocations.push(nextPart);\n lookahead += 1;\n }\n\n return { invocations, nextIndex: lookahead - 1 };\n};\n\nexport function MessagePartsRenderer(props: MessagePartsProps) {\n const { message, hideQuestionForms = false, onOpenFile, toolInvocationTimeline } = props;\n const RenderToolInvocationTimeline = toolInvocationTimeline ?? ToolInvocationTimeline;\n const parts = message.parts ?? [];\n const nodes: ReactNode[] = [];\n\n for (let partIndex = 0; partIndex < parts.length; partIndex += 1) {\n const part = parts[partIndex];\n const key = `${message.id}-${partIndex}`;\n\n switch (part.type) {\n case \"text\":\n nodes.push(\n <div key={key}>\n <Response>{part.text}</Response>\n </div>,\n );\n break;\n case \"reasoning\":\n nodes.push(\n <Box\n key={key}\n padding=\"0\"\n css={{\n \"& .rich-text, & .rich-text *\": {\n color: \"fg.subtle !important\",\n fontSize: \".75rem !important\",\n fontWeight: \"normal !important\",\n },\n }}\n >\n <RichMessage defaultState={part.text} fullWidth />\n </Box>,\n );\n break;\n case \"tool\": {\n const { invocations, nextIndex } = collectToolInvocations(parts, partIndex);\n partIndex = nextIndex;\n nodes.push(\n <Box key={key} width=\"full\">\n <RenderToolInvocationTimeline\n invocations={invocations}\n labeledBlocks\n hideQuestionForms={hideQuestionForms}\n onOpenFile={onOpenFile}\n />\n </Box>,\n );\n break;\n }\n case \"file\":\n nodes.push(\n <Box key={key} width=\"fit-content\">\n <ResourceBadge\n fileName={filePartLabel(part)}\n size=\"sm\"\n tone=\"neutral\"\n icon={filePartThumbnail(part)}\n onSelect={() => openFilePart(part, onOpenFile)}\n />\n </Box>,\n );\n break;\n case \"error\":\n nodes.push(\n <Box key={key} py=\"2\" width=\"full\">\n <AlertMessage borderRadius=\"xs\" status=\"error\" colorPalette=\"red\" title={getErrorMessage(part)} size=\"sm\" />\n </Box>,\n );\n break;\n case \"token_usage\":\n break;\n case \"alert\":\n nodes.push(\n <Box key={key} width=\"full\">\n <AlertMessage\n borderRadius=\"xs\"\n status={part.status === \"loading\" ? \"info\" : part.status}\n colorPalette={ALERT_COLOR_PALETTE[part.status]}\n title={part.title}\n icon={part.status === \"loading\" ? <Spinner size=\"sm\" /> : undefined}\n size=\"sm\"\n >\n {part.message}\n </AlertMessage>\n </Box>,\n );\n break;\n default:\n nodes.push(null);\n }\n }\n\n return <>{nodes}</>;\n}\n","// Keep the non-alert session parts aligned with pstdio-api-contracts/src/session-messages.ts.\n// @pstdio/ui cannot import that private package, so the public UI contract owns this copy.\nexport type SessionMessageRole = \"user\" | \"assistant\" | \"tool\" | \"system\" | \"developer\";\n\nexport type TextPart = { type: \"text\"; text: string };\n\nexport type ReasoningPart = { type: \"reasoning\"; text: string };\n\nexport type ToolPartActionType = \"read\" | \"write\" | \"execute\" | \"network\" | \"other\";\n\nexport type ToolPartStatus = \"pending\" | \"running\" | \"completed\" | \"failed\" | \"denied\";\n\nexport type ToolPart = {\n type: \"tool\";\n tool: string;\n callId?: string;\n actionType?: ToolPartActionType;\n status?: ToolPartStatus;\n state?: {\n status?: string;\n input?: unknown;\n output?: unknown;\n errorText?: string;\n metadata?: unknown;\n };\n};\n\nexport type StepStartPart = { type: \"step-start\"; snapshot?: string };\n\nexport type StepFinishPart = {\n type: \"step-finish\";\n reason?: string;\n snapshot?: string;\n cost?: number;\n tokens?: unknown;\n};\n\nexport type PatchPart = { type: \"patch\"; hash?: string; files?: unknown };\n\nexport type FilePart = {\n type: \"file\";\n fileId?: string;\n mediaType?: string;\n filename?: string;\n size?: number;\n url: string;\n};\n\nexport type LoadingPart = { type: \"loading\" };\n\nexport type ErrorPart = {\n type: \"error\";\n errorType: \"timeout\" | \"crash\" | \"permission\" | \"other\";\n message?: string;\n};\n\nexport type TokenUsagePart = {\n type: \"token_usage\";\n inputTokens: number;\n outputTokens: number;\n cacheReadTokens?: number;\n cacheWriteTokens?: number;\n};\n\nexport type AlertPart = {\n type: \"alert\";\n status: \"info\" | \"warning\" | \"error\" | \"success\" | \"loading\";\n title: string;\n message?: string;\n};\n\nexport type SessionMessagePart =\n | TextPart\n | ReasoningPart\n | ToolPart\n | StepStartPart\n | StepFinishPart\n | PatchPart\n | FilePart\n | LoadingPart\n | ErrorPart\n | TokenUsagePart;\n\nexport type ChatMessagePart = SessionMessagePart | AlertPart;\n\nexport type SessionMessage = {\n id: string;\n role: SessionMessageRole;\n parts: ChatMessagePart[];\n index?: number;\n createdAt?: number;\n modelId?: string;\n providerId?: string;\n tokens?: {\n input?: number;\n output?: number;\n reasoning?: number;\n cache?: { read?: number; write?: number };\n };\n};\n\nexport type QueuedFollowUp = {\n id: string;\n prompt: string;\n attachments?: Array<{\n id: string;\n name: string;\n mediaType?: string;\n url?: string;\n }>;\n position?: number;\n};\n\nexport type MessageOrigin = \"user\" | \"assistant\" | \"developer\";\n\nexport const getMessageOrigin = (role: string): MessageOrigin => {\n if (role === \"user\" || role === \"assistant\" || role === \"developer\") return role;\n return \"assistant\";\n};\n\nconst isReasoningToolOnlyMessage = (message: SessionMessage) => {\n const parts = message.parts ?? [];\n if (parts.length === 0) return false;\n\n const hasTextPart = parts.some((part) => part.type === \"text\" && \"text\" in part);\n if (hasTextPart) return false;\n\n return parts.some((part) => part.type === \"reasoning\" || part.type === \"tool\");\n};\n\nconst isVisibleText = (part: TextPart | ReasoningPart) => part.text.trim().length > 0;\n\nconst isVisibleAlert = (part: AlertPart) => part.title.trim().length > 0 || Boolean(part.message?.trim());\n\nconst isDisplayRenderablePart = (part: ChatMessagePart) => {\n switch (part.type) {\n case \"text\":\n case \"reasoning\":\n return isVisibleText(part);\n case \"tool\":\n case \"file\":\n case \"error\":\n return true;\n case \"alert\":\n return isVisibleAlert(part);\n default:\n return false;\n }\n};\n\nconst isActivityPart = (part: ChatMessagePart) => part.type === \"reasoning\" || part.type === \"tool\";\n\nconst isActivityOnlyMessage = (message: SessionMessage) => {\n if (message.role === \"user\") return false;\n if (message.parts.length === 0) return false;\n return message.parts.every(isActivityPart);\n};\n\nconst mergeBufferedActivity = (messages: SessionMessage[]) => {\n if (messages.length === 0) return null;\n\n const [first, ...rest] = messages;\n if (!first) return null;\n\n return {\n ...first,\n role: \"assistant\",\n parts: messages.flatMap((message) => message.parts),\n modelId: rest.at(-1)?.modelId ?? first.modelId,\n providerId: rest.at(-1)?.providerId ?? first.providerId,\n } satisfies SessionMessage;\n};\n\nexport const mergeReasoningToolOnlyMessages = (messages: SessionMessage[]) => {\n const merged: SessionMessage[] = [];\n\n for (const message of messages) {\n const previous = merged[merged.length - 1];\n\n if (previous && previous.role === message.role && isReasoningToolOnlyMessage(message)) {\n previous.parts = [...(previous.parts ?? []), ...(message.parts ?? [])];\n continue;\n }\n\n merged.push({\n ...message,\n parts: [...(message.parts ?? [])],\n });\n }\n\n return merged;\n};\n\nexport const normalizeChatMessagesForDisplay = (messages: SessionMessage[], options: { streaming?: boolean } = {}) => {\n const normalized: SessionMessage[] = [];\n let activityBuffer: SessionMessage[] = [];\n\n const clearActivityBuffer = () => {\n activityBuffer = [];\n };\n\n for (const message of messages) {\n const displayParts = (message.parts ?? []).filter(isDisplayRenderablePart);\n if (displayParts.length === 0) continue;\n\n const displayMessage = { ...message, parts: displayParts };\n\n if (displayMessage.role === \"user\") {\n clearActivityBuffer();\n normalized.push(displayMessage);\n continue;\n }\n\n if (isActivityOnlyMessage(displayMessage)) {\n activityBuffer.push(displayMessage);\n continue;\n }\n\n if (activityBuffer.length > 0) {\n normalized.push({\n ...displayMessage,\n parts: [...activityBuffer.flatMap((activity) => activity.parts), ...displayMessage.parts],\n });\n clearActivityBuffer();\n continue;\n }\n\n normalized.push(displayMessage);\n }\n\n if (options.streaming && activityBuffer.length > 0) {\n const trailingActivity = mergeBufferedActivity(activityBuffer);\n if (trailingActivity) normalized.push(trailingActivity);\n }\n\n return normalized;\n};\n\nexport interface MessageGroup {\n userMessage: SessionMessage;\n responses: SessionMessage[];\n}\n\nexport const getAssistantMessageActionTargetId = (messages: SessionMessage[]) => {\n const lastMessage = messages.at(-1);\n if (lastMessage?.role !== \"assistant\") return null;\n\n const hasVisibleText = lastMessage.parts.some((part) => part.type === \"text\" && isVisibleText(part));\n return hasVisibleText ? lastMessage.id : null;\n};\n\n// Groups messages into turns: each group starts with a user message\n// followed by all non-user messages until the next user message.\nexport const groupMessagesByTurn = (messages: SessionMessage[]) => {\n const groups: MessageGroup[] = [];\n const leadingResponses: SessionMessage[] = [];\n\n for (const message of messages) {\n if (message.role === \"user\") {\n groups.push({ userMessage: message, responses: [] });\n } else if (groups.length > 0) {\n groups[groups.length - 1].responses.push(message);\n } else {\n leadingResponses.push(message);\n }\n }\n\n return { groups, leadingResponses };\n};\n","import { Button, Flex } from \"@chakra-ui/react\";\nimport type { ReactNode } from \"react\";\nimport { ChatMessage } from \"./ai-message\";\nimport { messageFadeInProps } from \"./chat-message-animation\";\nimport { MessageActionPanel } from \"./message-action-panel\";\nimport { MessagePartsRenderer } from \"./message-parts-renderer\";\nimport { getMessageOrigin, type SessionMessage } from \"./message-types\";\n\ninterface ChatMessageListResponseProps {\n message: SessionMessage;\n streaming: boolean;\n hideQuestionForms?: boolean;\n animate?: boolean;\n showAssistantActions: boolean;\n}\n\nexport const ChatMessageListResponse = (props: ChatMessageListResponseProps) => {\n const { message, streaming, hideQuestionForms = false, animate = false, showAssistantActions } = props;\n const from = getMessageOrigin(message.role);\n const showActions = from === \"user\" || (from === \"assistant\" && showAssistantActions);\n\n return (\n <ChatMessage.Root from={from} {...(animate ? messageFadeInProps : undefined)}>\n <ChatMessage.Content from={from}>\n <MessagePartsRenderer message={message} streaming={streaming} hideQuestionForms={hideQuestionForms} />\n {showActions ? (\n <MessageActionPanel message={message} alwaysVisible={from === \"user\"} copyAlwaysVisible={from !== \"user\"} />\n ) : null}\n </ChatMessage.Content>\n </ChatMessage.Root>\n );\n};\n\ninterface StickyMessageToggleProps {\n label: string;\n onClick: () => void;\n actionPanel?: ReactNode;\n}\n\nexport const StickyMessageToggle = (props: StickyMessageToggleProps) => {\n const { label, onClick, actionPanel } = props;\n\n return (\n <Flex\n position=\"absolute\"\n bottom=\"0\"\n left=\"0\"\n right=\"0\"\n justifyContent={actionPanel ? \"space-between\" : \"flex-end\"}\n alignItems=\"flex-end\"\n px=\"xs\"\n pb=\"xs\"\n pt=\"lg\"\n bgGradient=\"to-t\"\n gradientFrom=\"bg.subtle\"\n gradientTo=\"transparent\"\n borderBottomRadius=\"xs\"\n pointerEvents=\"none\"\n >\n {actionPanel}\n <Button size=\"2xs\" variant=\"outline\" pointerEvents=\"auto\" onClick={onClick}>\n {label}\n </Button>\n </Flex>\n );\n};\n","import type { SessionMessage } from \"./message-types\";\n\nexport const STICKY_USER_MESSAGE_COLLAPSE_TEXT_THRESHOLD = 360;\nexport const STICKY_USER_MESSAGE_COLLAPSE_LINE_THRESHOLD = 4;\nexport const STICKY_USER_MESSAGE_COLLAPSED_MAX_HEIGHT = \"min(10vh, 4rem)\";\nexport const STICKY_USER_MESSAGE_EXPANDED_MAX_HEIGHT = \"min(70dvh, calc(100dvh - 12rem), 22rem)\";\n\nconst SCROLL_BOUNDARY_EPSILON = 1;\n\ninterface StickyUserMessageScrollElement {\n clientHeight: number;\n scrollHeight: number;\n scrollTop: number;\n}\n\nconst getMessageTextMetrics = (message: SessionMessage) => {\n return message.parts.reduce(\n (metrics, part) => {\n if (part.type !== \"text\") return metrics;\n\n return {\n lineCount: metrics.lineCount + part.text.split(/\\r\\n|\\r|\\n/).length,\n textLength: metrics.textLength + part.text.length,\n };\n },\n { lineCount: 0, textLength: 0 },\n );\n};\n\nexport const isStickyUserMessageCollapsible = (message: SessionMessage) => {\n if (message.role !== \"user\") return false;\n\n const { lineCount, textLength } = getMessageTextMetrics(message);\n\n return (\n textLength > STICKY_USER_MESSAGE_COLLAPSE_TEXT_THRESHOLD || lineCount > STICKY_USER_MESSAGE_COLLAPSE_LINE_THRESHOLD\n );\n};\n\nexport const shouldStopStickyUserMessageWheel = (element: StickyUserMessageScrollElement, deltaY: number) => {\n const maxScrollTop = Math.max(0, element.scrollHeight - element.clientHeight);\n\n if (deltaY === 0 || maxScrollTop <= SCROLL_BOUNDARY_EPSILON) return false;\n if (deltaY < 0) return element.scrollTop > SCROLL_BOUNDARY_EPSILON;\n\n return element.scrollTop < maxScrollTop - SCROLL_BOUNDARY_EPSILON;\n};\n","import { Box } from \"@chakra-ui/react\";\nimport { useVirtualizer } from \"@tanstack/react-virtual\";\nimport { useEffect, useRef, type WheelEvent } from \"react\";\nimport { useStickToBottomContext } from \"use-stick-to-bottom\";\nimport { ChatMessage } from \"./ai-message\";\nimport { messageFadeInProps, useMessageAnimationKeys } from \"./chat-message-animation\";\nimport { ChatMessageListResponse, StickyMessageToggle } from \"./chat-message-list-items\";\nimport {\n isStickyUserMessageCollapsible,\n STICKY_USER_MESSAGE_COLLAPSED_MAX_HEIGHT,\n STICKY_USER_MESSAGE_EXPANDED_MAX_HEIGHT,\n shouldStopStickyUserMessageWheel,\n} from \"./chat-panel-sticky-user-message\";\nimport { MessageActionPanel } from \"./message-action-panel\";\nimport { MessagePartsRenderer } from \"./message-parts-renderer\";\nimport { getAssistantMessageActionTargetId, type MessageGroup, type SessionMessage } from \"./message-types\";\n\ninterface ChatMessageListProps {\n leadingResponses: SessionMessage[];\n groups: MessageGroup[];\n streaming: boolean;\n hideActiveQuestionForms: boolean;\n expandedStickyMessageIds: Set<string>;\n onToggleStickyMessage: (messageId: string) => void;\n onReady?: () => void;\n}\n\ninterface StickyMessageGroupProps {\n group: MessageGroup;\n streaming: boolean;\n hideQuestionForms: boolean;\n isExpanded: boolean;\n animate: boolean;\n onToggleStickyMessage: (messageId: string) => void;\n}\n\ntype ChatMessageListItem =\n | {\n type: \"leading-response\";\n key: string;\n message: SessionMessage;\n showAssistantActions: boolean;\n }\n | {\n type: \"group\";\n key: string;\n group: MessageGroup;\n groupIndex: number;\n };\n\nconst ESTIMATED_TURN_HEIGHT = 720;\nconst INITIAL_TAIL_VIEWPORT_HEIGHT = 1;\nconst TAIL_READY_STABLE_FRAME_COUNT = 3;\nconst TAIL_READY_FRAME_LIMIT = 20;\nconst TAIL_READY_PIXEL_EPSILON = 1;\nconst VIRTUAL_LIST_OVERSCAN = 4;\nconst VIRTUAL_LIST_GAP = 8;\n\nconst buildMessageListItems = (leadingResponses: SessionMessage[], groups: MessageGroup[]) => {\n const leadingActionMessageId = getAssistantMessageActionTargetId(leadingResponses);\n\n return [\n ...leadingResponses.map((message) => ({\n type: \"leading-response\" as const,\n key: message.id,\n message,\n showAssistantActions: message.id === leadingActionMessageId,\n })),\n ...groups.map((group, groupIndex) => ({\n type: \"group\" as const,\n key: group.userMessage.id,\n group,\n groupIndex,\n })),\n ];\n};\n\nconst getEstimatedTailOffset = (count: number, viewportHeight: number) => {\n if (count === 0) return 0;\n\n const estimatedTotalSize = count * ESTIMATED_TURN_HEIGHT + (count - 1) * VIRTUAL_LIST_GAP;\n return Math.max(estimatedTotalSize - viewportHeight, 0);\n};\n\nconst getInitialViewportHeight = (scrollElement: HTMLElement | null) =>\n scrollElement?.clientHeight || INITIAL_TAIL_VIEWPORT_HEIGHT;\n\ninterface TailLayoutSnapshot {\n scrollTop: number;\n totalSize: number;\n}\n\nconst isTailLayoutStable = (current: TailLayoutSnapshot, previous: TailLayoutSnapshot) =>\n Math.abs(current.scrollTop - previous.scrollTop) <= TAIL_READY_PIXEL_EPSILON &&\n Math.abs(current.totalSize - previous.totalSize) <= TAIL_READY_PIXEL_EPSILON;\n\nconst readTailLayoutSnapshot = (scrollElement: HTMLElement | null, totalSize: number): TailLayoutSnapshot => ({\n scrollTop: scrollElement?.scrollTop ?? 0,\n totalSize,\n});\n\nconst useTailReady = (input: {\n itemCount: number;\n onReady?: () => void;\n scrollRef: { current: HTMLElement | null };\n totalSize: number;\n}) => {\n const { itemCount, onReady, scrollRef, totalSize } = input;\n const onReadyRef = useRef(onReady);\n\n useEffect(() => {\n onReadyRef.current = onReady;\n }, [onReady]);\n\n useEffect(() => {\n if (itemCount === 0 || typeof requestAnimationFrame === \"undefined\") {\n onReadyRef.current?.();\n return;\n }\n\n let frameId = 0;\n let checkedFrameCount = 0;\n let stableFrameCount = 0;\n let previousSnapshot: TailLayoutSnapshot | null = null;\n\n const waitForStableTail = () => {\n checkedFrameCount += 1;\n\n const nextSnapshot = readTailLayoutSnapshot(scrollRef.current, totalSize);\n stableFrameCount =\n previousSnapshot && isTailLayoutStable(nextSnapshot, previousSnapshot) ? stableFrameCount + 1 : 0;\n previousSnapshot = nextSnapshot;\n\n if (stableFrameCount >= TAIL_READY_STABLE_FRAME_COUNT || checkedFrameCount >= TAIL_READY_FRAME_LIMIT) {\n onReadyRef.current?.();\n return;\n }\n\n frameId = requestAnimationFrame(waitForStableTail);\n };\n\n frameId = requestAnimationFrame(waitForStableTail);\n\n return () => cancelAnimationFrame(frameId);\n }, [itemCount, scrollRef, totalSize]);\n};\n\nconst handleExpandedStickyMessageWheel = (event: WheelEvent<HTMLElement>) => {\n if (shouldStopStickyUserMessageWheel(event.currentTarget, event.deltaY)) {\n event.stopPropagation();\n }\n};\n\nconst getStickyMessageMaxHeight = (isCollapsible: boolean, isExpanded: boolean) => {\n if (!isCollapsible) return undefined;\n if (isExpanded) return STICKY_USER_MESSAGE_EXPANDED_MAX_HEIGHT;\n\n return STICKY_USER_MESSAGE_COLLAPSED_MAX_HEIGHT;\n};\n\nconst getStickyMessageBodyMaxHeight = (isExpandedCollapsible: boolean) => {\n if (!isExpandedCollapsible) return undefined;\n\n return STICKY_USER_MESSAGE_EXPANDED_MAX_HEIGHT;\n};\n\nconst StickyMessageGroup = (props: StickyMessageGroupProps) => {\n const { group, streaming, hideQuestionForms, isExpanded, animate, onToggleStickyMessage } = props;\n const isCollapsible = isStickyUserMessageCollapsible(group.userMessage);\n const isExpandedCollapsible = isCollapsible && isExpanded;\n const stickyMessageMaxHeight = getStickyMessageMaxHeight(isCollapsible, isExpanded);\n const toggleStickyMessage = () => onToggleStickyMessage(group.userMessage.id);\n const actionMessageId = getAssistantMessageActionTargetId(group.responses);\n\n return (\n <Box>\n <Box position=\"sticky\" top=\"0\" zIndex={1}>\n <ChatMessage.Root from=\"user\" {...(animate ? messageFadeInProps : undefined)}>\n <ChatMessage.Content\n from=\"user\"\n maxH={stickyMessageMaxHeight}\n overflow=\"hidden\"\n p={isCollapsible ? \"0\" : undefined}\n position={isCollapsible ? \"relative\" : undefined}\n >\n <Box\n data-sticky-user-message-content={isCollapsible ? (isExpanded ? \"expanded\" : \"collapsed\") : undefined}\n display=\"flex\"\n flexDirection=\"column\"\n gap=\"sm\"\n maxH={getStickyMessageBodyMaxHeight(isExpandedCollapsible)}\n minH=\"0\"\n overflowY={isExpandedCollapsible ? \"auto\" : \"visible\"}\n px={isCollapsible ? \"xs\" : undefined}\n py={isCollapsible ? \"xs\" : undefined}\n pb={isExpandedCollapsible ? \"3rem\" : undefined}\n onWheel={isExpandedCollapsible ? handleExpandedStickyMessageWheel : undefined}\n >\n <MessagePartsRenderer message={group.userMessage} streaming={streaming} />\n </Box>\n {isCollapsible ? (\n <StickyMessageToggle\n label={isExpanded ? \"Show less\" : \"Show more\"}\n onClick={toggleStickyMessage}\n actionPanel={<MessageActionPanel message={group.userMessage} alwaysVisible copyAlwaysVisible={false} />}\n />\n ) : (\n <MessageActionPanel message={group.userMessage} alwaysVisible copyAlwaysVisible={false} />\n )}\n </ChatMessage.Content>\n </ChatMessage.Root>\n </Box>\n {group.responses.map((message) => (\n <Box key={message.id}>\n <ChatMessageListResponse\n message={message}\n streaming={streaming}\n hideQuestionForms={hideQuestionForms}\n showAssistantActions={message.id === actionMessageId}\n />\n </Box>\n ))}\n </Box>\n );\n};\n\nconst renderListItem = (\n item: ChatMessageListItem,\n props: Pick<\n ChatMessageListProps,\n \"groups\" | \"streaming\" | \"hideActiveQuestionForms\" | \"expandedStickyMessageIds\" | \"onToggleStickyMessage\"\n > & { animatedItemKeys: Set<string> },\n) => {\n const {\n groups,\n streaming,\n hideActiveQuestionForms,\n expandedStickyMessageIds,\n animatedItemKeys,\n onToggleStickyMessage,\n } = props;\n\n if (item.type === \"leading-response\") {\n return (\n <ChatMessageListResponse\n message={item.message}\n streaming={streaming}\n hideQuestionForms={groups.length > 0 || hideActiveQuestionForms}\n animate={animatedItemKeys.has(item.key)}\n showAssistantActions={item.showAssistantActions}\n />\n );\n }\n\n return (\n <StickyMessageGroup\n group={item.group}\n streaming={streaming}\n hideQuestionForms={item.groupIndex < groups.length - 1 || hideActiveQuestionForms}\n isExpanded={expandedStickyMessageIds.has(item.group.userMessage.id)}\n animate={animatedItemKeys.has(item.key)}\n onToggleStickyMessage={onToggleStickyMessage}\n />\n );\n};\n\nexport const ChatMessageList = (props: ChatMessageListProps) => {\n const {\n leadingResponses,\n groups,\n streaming,\n hideActiveQuestionForms,\n expandedStickyMessageIds,\n onToggleStickyMessage,\n onReady,\n } = props;\n const { scrollRef } = useStickToBottomContext();\n const items = buildMessageListItems(leadingResponses, groups);\n const animatedItemKeys = useMessageAnimationKeys(items.map((item) => item.key));\n const initialViewportHeight = getInitialViewportHeight(scrollRef.current);\n\n const virtualizer = useVirtualizer<HTMLDivElement, HTMLDivElement>({\n count: items.length,\n getScrollElement: () => scrollRef.current as HTMLDivElement | null,\n estimateSize: () => ESTIMATED_TURN_HEIGHT,\n getItemKey: (index) => items[index]?.key ?? index,\n overscan: VIRTUAL_LIST_OVERSCAN,\n gap: VIRTUAL_LIST_GAP,\n initialRect: { width: 0, height: initialViewportHeight },\n initialOffset: () => getEstimatedTailOffset(items.length, initialViewportHeight),\n });\n const totalSize = virtualizer.getTotalSize();\n\n useTailReady({\n itemCount: items.length,\n onReady,\n scrollRef,\n totalSize,\n });\n\n return (\n <Box px=\"xs\">\n <Box position=\"relative\" width=\"100%\" style={{ height: totalSize }}>\n {virtualizer.getVirtualItems().map((virtualItem) => {\n const item = items[virtualItem.index];\n if (!item) return null;\n\n return (\n <Box\n key={virtualItem.key}\n ref={virtualizer.measureElement}\n data-index={virtualItem.index}\n data-chat-message-list-item={item.type}\n position=\"absolute\"\n top=\"0\"\n left=\"0\"\n width=\"100%\"\n style={{ top: virtualItem.start }}\n >\n {renderListItem(item, {\n groups,\n streaming,\n hideActiveQuestionForms,\n expandedStickyMessageIds,\n animatedItemKeys,\n onToggleStickyMessage,\n })}\n </Box>\n );\n })}\n </Box>\n </Box>\n );\n};\n","import { generateEditorStateFromString } from \"../../rich-text\";\n\nexport const createSerializedPromptState = (input = \"\") => {\n return JSON.stringify(generateEditorStateFromString(input));\n};\n","import { Badge, Box, Icon as ChakraIcon, HStack, IconButton, Stack, Text } from \"@chakra-ui/react\";\nimport { GripVertical, Pencil, Trash2 } from \"lucide-react\";\nimport { type DragEvent, useState } from \"react\";\nimport type { QueuedFollowUp } from \"./message-types\";\nimport type { QueuedFollowUpMoveDirection } from \"./queued-follow-up-list-state\";\n\ninterface QueuedFollowUpListProps {\n items: QueuedFollowUp[];\n editingItemId?: string | null;\n onEdit?: (item: QueuedFollowUp) => void;\n onRemove?: (itemId: string) => void;\n onMove?: (itemId: string, direction: QueuedFollowUpMoveDirection, steps?: number) => void;\n}\n\ninterface QueuedFollowUpRowProps {\n item: QueuedFollowUp;\n index: number;\n isFirst: boolean;\n isLast: boolean;\n isEditing: boolean;\n isDragTarget: boolean;\n onEdit?: (item: QueuedFollowUp) => void;\n onRemove?: (itemId: string) => void;\n onDragStart: (itemId: string) => void;\n onDragEnd: () => void;\n onDragOver: (event: DragEvent<HTMLDivElement>, itemId: string) => void;\n onDrop: (event: DragEvent<HTMLDivElement>, itemId: string) => void;\n}\n\nconst QueuedFollowUpRow = (props: QueuedFollowUpRowProps) => {\n const {\n item,\n index,\n isFirst,\n isLast,\n isEditing,\n isDragTarget,\n onEdit,\n onRemove,\n onDragStart,\n onDragEnd,\n onDragOver,\n onDrop,\n } = props;\n const canEdit = Boolean(onEdit);\n const canRemove = Boolean(onRemove);\n const canDrag = !isFirst || !isLast;\n const dragLabel = `Drag queued follow-up ${index + 1}`;\n\n return (\n <Box\n minWidth=\"0\"\n borderTopWidth={isFirst ? \"0\" : \"1px\"}\n borderColor={isDragTarget ? \"border.accent-light\" : \"border.subtle\"}\n paddingTop={isFirst ? \"0\" : \"2xs\"}\n paddingBottom=\"2xs\"\n bg={isEditing ? \"bg.muted\" : undefined}\n onDragOver={(event) => onDragOver(event, item.id)}\n onDrop={(event) => onDrop(event, item.id)}\n data-queued-follow-up-id={item.id}\n >\n <HStack gap=\"xs\" alignItems=\"flex-start\">\n <IconButton\n size=\"2xs\"\n variant=\"ghost\"\n draggable={canDrag}\n aria-label={dragLabel}\n title={dragLabel}\n color=\"fg.muted\"\n cursor={canDrag ? \"grab\" : \"default\"}\n disabled={!canDrag}\n onDragStart={(event) => {\n event.dataTransfer.effectAllowed = \"move\";\n event.dataTransfer.setData(\"text/plain\", item.id);\n onDragStart(item.id);\n }}\n onDragEnd={onDragEnd}\n >\n <ChakraIcon as={GripVertical} boxSize=\"14px\" />\n </IconButton>\n <Stack gap=\"2xs\" flex=\"1\" minWidth=\"0\">\n <Text textStyle=\"label/S/regular\" color=\"fg\" lineClamp={2} minWidth=\"0\">\n {item.prompt}\n </Text>\n {item.attachments?.length ? (\n <Badge width=\"fit-content\" size=\"sm\" variant=\"outline\" colorPalette=\"gray\">\n {item.attachments.length} attachments\n </Badge>\n ) : null}\n </Stack>\n <HStack gap=\"2xs\" flexShrink={0}>\n {canEdit ? (\n <IconButton size=\"2xs\" variant=\"ghost\" aria-label=\"Edit queued follow-up\" onClick={() => onEdit?.(item)}>\n <ChakraIcon as={Pencil} boxSize=\"14px\" />\n </IconButton>\n ) : null}\n {canRemove ? (\n <IconButton\n size=\"2xs\"\n variant=\"ghost\"\n aria-label=\"Remove queued follow-up\"\n colorPalette=\"red\"\n onClick={() => onRemove?.(item.id)}\n >\n <ChakraIcon as={Trash2} boxSize=\"14px\" />\n </IconButton>\n ) : null}\n </HStack>\n </HStack>\n </Box>\n );\n};\n\nexport const QueuedFollowUpList = (props: QueuedFollowUpListProps) => {\n const { items, editingItemId, onEdit, onRemove, onMove } = props;\n const [draggedItemId, setDraggedItemId] = useState<string | null>(null);\n const [dragTargetItemId, setDragTargetItemId] = useState<string | null>(null);\n if (items.length === 0) return null;\n\n const handleDragOver = (event: DragEvent<HTMLDivElement>, itemId: string) => {\n if (!draggedItemId || draggedItemId === itemId) return;\n event.preventDefault();\n event.dataTransfer.dropEffect = \"move\";\n setDragTargetItemId(itemId);\n };\n\n const handleDrop = (event: DragEvent<HTMLDivElement>, itemId: string) => {\n event.preventDefault();\n const sourceItemId = draggedItemId ?? event.dataTransfer.getData(\"text/plain\");\n setDraggedItemId(null);\n setDragTargetItemId(null);\n if (!sourceItemId || sourceItemId === itemId) return;\n\n const sourceIndex = items.findIndex((item) => item.id === sourceItemId);\n const targetIndex = items.findIndex((item) => item.id === itemId);\n if (sourceIndex === -1 || targetIndex === -1 || sourceIndex === targetIndex) return;\n\n const direction: QueuedFollowUpMoveDirection = targetIndex < sourceIndex ? \"up\" : \"down\";\n onMove?.(sourceItemId, direction, Math.abs(targetIndex - sourceIndex));\n };\n\n return (\n <Stack\n gap=\"2xs\"\n paddingX=\"0\"\n paddingY=\"xs\"\n borderWidth=\"1px\"\n borderBottomWidth=\"0\"\n borderColor=\"border\"\n borderTopRadius=\"xs\"\n background=\"bg\"\n >\n {items.map((item, index) => (\n <QueuedFollowUpRow\n key={item.id}\n item={item}\n index={index}\n isFirst={index === 0}\n isLast={index === items.length - 1}\n isEditing={editingItemId === item.id}\n isDragTarget={dragTargetItemId === item.id}\n onEdit={onEdit}\n onRemove={onRemove}\n onDragStart={setDraggedItemId}\n onDragEnd={() => {\n setDraggedItemId(null);\n setDragTargetItemId(null);\n }}\n onDragOver={handleDragOver}\n onDrop={handleDrop}\n />\n ))}\n </Stack>\n );\n};\n","import { Stack } from \"@chakra-ui/react\";\nimport { type ReactNode, useEffect, useState } from \"react\";\nimport type { ReferenceItem } from \"@/components/rich-text\";\nimport { createSerializedPromptState } from \"../utils/editor-state\";\nimport { ChatInput } from \"./chat-input\";\nimport type { ChatInputQuestionPrompt, ChatInputQuestionResponse } from \"./chat-input-question-prompt\";\nimport type { QueuedFollowUp } from \"./message-types\";\nimport { QueuedFollowUpList } from \"./queued-follow-up-list\";\nimport type { QueuedFollowUpMoveDirection } from \"./queued-follow-up-list-state\";\n\ninterface QueuedFollowUpComposerInput {\n queuedFollowUps: QueuedFollowUp[];\n defaultValue: string;\n onChange?: (text: string) => void;\n onSubmit?: (\n text: string,\n attachments: string[],\n questionResponse?: ChatInputQuestionResponse,\n ) => void | Promise<void>;\n onUpdate?: (itemId: string, prompt: string) => void;\n}\n\ninterface ChatPanelComposerProps {\n conversationKey?: string;\n recentUserMessages: string[];\n actions?: ReactNode;\n attachedResources?: string[];\n attachmentList?: ReactNode;\n chatInputAutoFocus: boolean;\n chatInputPlaceholder: string;\n chatInputQuestionPrompt?: ChatInputQuestionPrompt;\n chatInputReferences: ReferenceItem[];\n hasWorkspaceHub: boolean;\n inputDisabled: boolean;\n submitDisabled: boolean;\n onAttachFiles?: (files: File[]) => void;\n onAttachText?: (text: string) => void;\n onChatInputAddReference?: (resourceId: string, resourceType: ReferenceItem[\"resourceType\"]) => void;\n onClearAttachments?: () => void;\n onInterrupt?: () => void;\n onQueuedFollowUpMove?: (itemId: string, direction: QueuedFollowUpMoveDirection, steps?: number) => void;\n onQueuedFollowUpRemove?: (itemId: string) => void;\n onQueuedFollowUpUpdate?: (itemId: string, prompt: string) => void;\n queuedComposer: ReturnType<typeof useQueuedFollowUpComposer>;\n queuedFollowUps: QueuedFollowUp[];\n streaming: boolean;\n workspaceHub?: ReactNode;\n}\n\nexport const useQueuedFollowUpComposer = (input: QueuedFollowUpComposerInput) => {\n const { queuedFollowUps, defaultValue, onChange, onSubmit, onUpdate } = input;\n const [editingItemId, setEditingItemId] = useState<string | null>(null);\n const [editSeed, setEditSeed] = useState(\"\");\n const [focusSignal, setFocusSignal] = useState(0);\n const inputValue = editingItemId ? editSeed : defaultValue;\n\n useEffect(() => {\n if (!editingItemId) return;\n if (queuedFollowUps.some((item) => item.id === editingItemId)) return;\n setEditingItemId(null);\n setEditSeed(\"\");\n }, [editingItemId, queuedFollowUps]);\n\n const edit = (item: QueuedFollowUp) => {\n setEditingItemId(item.id);\n setEditSeed(item.prompt);\n setFocusSignal((signal) => signal + 1);\n };\n\n const change = (text: string) => {\n if (editingItemId) return;\n onChange?.(text);\n };\n\n const submit = (text: string, attachments: string[], questionResponse?: ChatInputQuestionResponse) => {\n if (editingItemId) {\n onUpdate?.(editingItemId, text);\n setEditingItemId(null);\n setEditSeed(\"\");\n return;\n }\n\n return onSubmit?.(text, attachments, questionResponse);\n };\n\n return { change, edit, editingItemId, focusSignal, inputValue, isEditing: Boolean(editingItemId), submit };\n};\n\nexport const ChatPanelComposer = (props: ChatPanelComposerProps) => {\n const {\n conversationKey,\n recentUserMessages,\n actions,\n attachedResources,\n attachmentList,\n chatInputAutoFocus,\n chatInputPlaceholder,\n chatInputQuestionPrompt,\n chatInputReferences,\n hasWorkspaceHub,\n inputDisabled,\n submitDisabled,\n onAttachFiles,\n onAttachText,\n onChatInputAddReference,\n onClearAttachments,\n onInterrupt,\n onQueuedFollowUpMove,\n onQueuedFollowUpRemove,\n onQueuedFollowUpUpdate,\n queuedComposer,\n queuedFollowUps,\n streaming,\n workspaceHub,\n } = props;\n const hasQueuedFollowUps = queuedFollowUps.length > 0;\n\n return (\n <Stack px={hasWorkspaceHub ? \"2xs\" : \"xs\"} gap=\"0\">\n {/* Concentric hierarchy: the hub shell owns the visible border so the session reads\n as living inside the workspace; the nested input recedes to border.subtle. */}\n <Stack\n gap={hasWorkspaceHub ? \"2xs\" : \"0\"}\n p={hasWorkspaceHub ? \"2xs\" : undefined}\n borderWidth={hasWorkspaceHub ? \"1px\" : undefined}\n borderColor={hasWorkspaceHub ? \"border\" : undefined}\n borderRadius={hasWorkspaceHub ? \"sm\" : undefined}\n bg={hasWorkspaceHub ? \"bg.subtle\" : undefined}\n >\n {workspaceHub}\n <QueuedFollowUpList\n items={queuedFollowUps}\n editingItemId={queuedComposer.editingItemId}\n onEdit={onQueuedFollowUpUpdate ? queuedComposer.edit : undefined}\n onRemove={onQueuedFollowUpRemove}\n onMove={onQueuedFollowUpMove}\n />\n <ChatInput\n key={conversationKey}\n recentUserMessages={recentUserMessages}\n placeholder={chatInputPlaceholder}\n defaultState={createSerializedPromptState(queuedComposer.inputValue)}\n streaming={streaming}\n onSubmit={queuedComposer.submit}\n onInterrupt={onInterrupt}\n onAttachFiles={onAttachFiles}\n onAttachText={onAttachText}\n onChange={queuedComposer.change}\n actions={actions}\n attachedResources={attachedResources}\n onClearAttachments={onClearAttachments}\n attachmentList={attachmentList}\n isDisabled={inputDisabled}\n submitDisabled={submitDisabled}\n attachedToTop={hasQueuedFollowUps}\n recessed={hasWorkspaceHub}\n questionPrompt={chatInputQuestionPrompt}\n autoFocus={chatInputAutoFocus}\n focusSignal={queuedComposer.focusSignal}\n submitTitle={queuedComposer.isEditing ? \"Save queued follow-up\" : undefined}\n references={chatInputReferences}\n onAddReference={onChatInputAddReference}\n />\n </Stack>\n </Stack>\n );\n};\n","import { HStack, Spinner, Text } from \"@chakra-ui/react\";\nimport { useEffect, useRef, useState } from \"react\";\n\n// Compact, unit-dropping elapsed format: \"4s\", \"48s\", \"10m 20s\", \"1h 04m\".\nconst formatElapsed = (totalSeconds: number) => {\n const seconds = Math.max(0, Math.floor(totalSeconds));\n if (seconds < 60) return `${seconds}s`;\n\n const minutes = Math.floor(seconds / 60);\n if (minutes < 60) return `${minutes}m ${String(seconds % 60).padStart(2, \"0\")}s`;\n\n const hours = Math.floor(minutes / 60);\n return `${hours}h ${String(minutes % 60).padStart(2, \"0\")}m`;\n};\n\n/**\n * Working indicator: a spinner followed by the elapsed run time in mono digits — never a\n * static \"Working…\" label. The elapsed time is the one thing a static label cannot tell you\n * and how you judge whether a run is stuck. Counts from the start of the active stream, including\n * time spent temporarily hidden while the workspace initializes.\n */\nexport const WorkingIndicator = (props: { hidden?: boolean }) => {\n const { hidden = false } = props;\n const [elapsedSeconds, setElapsedSeconds] = useState(0);\n const startedAtRef = useRef(Date.now());\n\n useEffect(() => {\n if (hidden) return;\n\n const updateElapsed = () => setElapsedSeconds((Date.now() - startedAtRef.current) / 1000);\n updateElapsed();\n const timer = setInterval(updateElapsed, 1000);\n return () => clearInterval(timer);\n }, [hidden]);\n\n if (hidden) return null;\n\n return (\n <HStack gap=\"2xs\" px=\"sm\" py=\"xs\">\n <Spinner size=\"xs\" color=\"fg.muted\" />\n <Text fontFamily=\"mono\" fontSize=\"xs\" color=\"fg.muted\" letterSpacing=\"-0.2px\">\n {formatElapsed(elapsedSeconds)}\n </Text>\n </HStack>\n );\n};\n","import { Flex } from \"@chakra-ui/react\";\nimport { MessageCircleIcon } from \"lucide-react\";\nimport { type ReactNode, useState } from \"react\";\nimport { EmptyState } from \"@/components/primitives/empty-state\";\nimport type { ReferenceItem } from \"@/components/rich-text\";\nimport { resolveActiveQuestionPrompt } from \"../tool-rendering/question-prompt\";\nimport { ChatPrimitives } from \"./ai-conversation\";\nimport { AutoScroll } from \"./auto-scroll\";\nimport { getRecentUserPrompts } from \"./chat-input-history\";\nimport type { ChatInputQuestionPrompt, ChatInputQuestionResponse } from \"./chat-input-question-prompt\";\nimport { ChatMessageList } from \"./chat-message-list\";\nimport { ChatPanelComposer, useQueuedFollowUpComposer } from \"./chat-panel-composer\";\nimport {\n groupMessagesByTurn,\n normalizeChatMessagesForDisplay,\n type QueuedFollowUp,\n type SessionMessage,\n} from \"./message-types\";\nimport type { QueuedFollowUpMoveDirection } from \"./queued-follow-up-list-state\";\nimport { WorkingIndicator } from \"./working-indicator\";\n\n/** Full conversation shell for agent sessions, including messages, input, attachments, and host-provided slots. */\nexport interface ChatPanelProps {\n /** Stable conversation identity used to reset ready state when switching sessions. */\n conversationKey?: string;\n messages: SessionMessage[];\n loading?: boolean;\n streaming?: boolean;\n emptyStateTitle: string;\n emptyStateDescription: string;\n emptyStateContent?: ReactNode;\n loaderComponent?: ReactNode;\n chatInputPlaceholder: string;\n chatInputDefaultValue?: string;\n onSubmitMessage?: (\n text: string,\n attachments: string[],\n questionResponse?: ChatInputQuestionResponse,\n ) => void | Promise<void>;\n onInterrupt?: () => void;\n onAttachFiles?: (files: File[]) => void;\n onAttachText?: (text: string) => void;\n onChatInputChange?: (text: string) => void;\n /** Extra controls rendered in the chat input toolbar (attach, model, params). */\n actions?: ReactNode;\n attachedResources?: string[];\n onClearAttachments?: () => void;\n attachmentList?: ReactNode;\n approvalPrompt?: ReactNode;\n /** Optional workspace status/control surface rendered above the conversation viewport. */\n workspaceHub?: ReactNode;\n workspaceInitializing?: boolean;\n inputDisabled?: boolean;\n /** Blocks sending while the editor stays usable, for example while no model is selected. */\n submitDisabled?: boolean;\n chatInputQuestionPrompt?: ChatInputQuestionPrompt;\n chatInputAutoFocus?: boolean;\n queuedFollowUps?: QueuedFollowUp[];\n onQueuedFollowUpUpdate?: (itemId: string, prompt: string) => void;\n onQueuedFollowUpRemove?: (itemId: string) => void;\n onQueuedFollowUpMove?: (itemId: string, direction: QueuedFollowUpMoveDirection, steps?: number) => void;\n chatInputReferences?: ReferenceItem[];\n onChatInputAddReference?: (resourceId: string, resourceType: ReferenceItem[\"resourceType\"]) => void;\n}\n\nexport const ChatPanel = (props: ChatPanelProps) => {\n const {\n conversationKey,\n messages,\n loading = false,\n streaming = false,\n emptyStateTitle,\n emptyStateDescription,\n emptyStateContent,\n loaderComponent,\n chatInputPlaceholder,\n chatInputDefaultValue = \"\",\n onSubmitMessage,\n onInterrupt,\n onAttachFiles,\n onAttachText,\n onChatInputChange,\n actions,\n attachedResources,\n onClearAttachments,\n attachmentList,\n approvalPrompt,\n workspaceHub,\n workspaceInitializing = false,\n inputDisabled = false,\n submitDisabled = false,\n chatInputQuestionPrompt,\n chatInputAutoFocus = false,\n queuedFollowUps = [],\n onQueuedFollowUpUpdate,\n onQueuedFollowUpRemove,\n onQueuedFollowUpMove,\n chatInputReferences = [],\n onChatInputAddReference,\n } = props;\n\n const merged = normalizeChatMessagesForDisplay(messages, { streaming });\n const hasMessages = merged.length > 0;\n const messageListKey = conversationKey ?? merged[0]?.id;\n const messageListIdentity = hasMessages ? (messageListKey ?? \"active-conversation\") : null;\n const userMessageCount = merged.reduce((count, message) => count + (message.role === \"user\" ? 1 : 0), 0);\n const { groups, leadingResponses } = groupMessagesByTurn(merged);\n const [expandedStickyMessageIds, setExpandedStickyMessageIds] = useState(() => new Set<string>());\n const [readyMessageListKey, setReadyMessageListKey] = useState<string | null>(null);\n const showLoadingState = !hasMessages && loading;\n const defaultEmptyContent = (\n <EmptyState\n icon={<MessageCircleIcon size={48} strokeWidth={1.5} />}\n title={emptyStateTitle}\n description={emptyStateDescription}\n />\n );\n const emptyContent = showLoadingState ? loaderComponent : (emptyStateContent ?? defaultEmptyContent);\n const hasWorkspaceHub = Boolean(workspaceHub);\n const activeQuestionPrompt = chatInputQuestionPrompt ?? resolveActiveQuestionPrompt(messages);\n const hideActiveQuestionForms = Boolean(activeQuestionPrompt);\n const showThinkingIndicator = streaming && hasMessages && !workspaceInitializing && !activeQuestionPrompt;\n const isMessageViewportReady = !messageListIdentity || readyMessageListKey === messageListIdentity;\n const queuedComposer = useQueuedFollowUpComposer({\n queuedFollowUps,\n defaultValue: chatInputDefaultValue,\n onChange: onChatInputChange,\n onSubmit: onSubmitMessage,\n onUpdate: onQueuedFollowUpUpdate,\n });\n\n const toggleStickyMessageExpanded = (messageId: string) => {\n setExpandedStickyMessageIds((current) => {\n const next = new Set(current);\n if (next.has(messageId)) {\n next.delete(messageId);\n } else {\n next.add(messageId);\n }\n\n return next;\n });\n };\n\n return (\n <Flex position=\"relative\" direction=\"column\" w=\"full\" h=\"full\" overflow=\"hidden\">\n <ChatPrimitives.Root>\n <AutoScroll conversationKey={messageListKey ?? null} userMessageCount={userMessageCount} />\n <ChatPrimitives.Viewport visibility={isMessageViewportReady ? \"visible\" : \"hidden\"}>\n {hasMessages ? (\n <ChatMessageList\n key={messageListIdentity}\n leadingResponses={leadingResponses}\n groups={groups}\n streaming={streaming}\n hideActiveQuestionForms={hideActiveQuestionForms}\n expandedStickyMessageIds={expandedStickyMessageIds}\n onToggleStickyMessage={toggleStickyMessageExpanded}\n onReady={() => setReadyMessageListKey(messageListIdentity)}\n />\n ) : (\n emptyContent\n )}\n </ChatPrimitives.Viewport>\n {isMessageViewportReady ? <ChatPrimitives.ScrollToBottom aria-label=\"Scroll to latest message\" /> : null}\n </ChatPrimitives.Root>\n {approvalPrompt}\n {streaming ? <WorkingIndicator hidden={!showThinkingIndicator} /> : null}\n <ChatPanelComposer\n conversationKey={conversationKey ?? messages[0]?.id}\n recentUserMessages={getRecentUserPrompts(messages)}\n actions={actions}\n attachedResources={attachedResources}\n attachmentList={attachmentList}\n chatInputAutoFocus={chatInputAutoFocus}\n chatInputPlaceholder={chatInputPlaceholder}\n chatInputQuestionPrompt={activeQuestionPrompt}\n chatInputReferences={chatInputReferences}\n hasWorkspaceHub={hasWorkspaceHub}\n inputDisabled={inputDisabled}\n submitDisabled={submitDisabled}\n onAttachFiles={onAttachFiles}\n onAttachText={onAttachText}\n onChatInputAddReference={onChatInputAddReference}\n onClearAttachments={onClearAttachments}\n onInterrupt={onInterrupt}\n onQueuedFollowUpMove={onQueuedFollowUpMove}\n onQueuedFollowUpRemove={onQueuedFollowUpRemove}\n onQueuedFollowUpUpdate={onQueuedFollowUpUpdate}\n queuedComposer={queuedComposer}\n queuedFollowUps={queuedFollowUps}\n streaming={streaming}\n workspaceHub={workspaceHub}\n />\n </Flex>\n );\n};\n","import { Skeleton, Stack } from \"@chakra-ui/react\";\nimport { ChatMessage } from \"./ai-message\";\n\nconst renderSkeletonLines = (widths: string[]) => (\n <Stack gap=\"xs\" w=\"full\">\n {widths.map((width, index) => (\n <Skeleton key={`${width}-${index}`} height=\"3\" width={width} borderRadius=\"xs\" />\n ))}\n </Stack>\n);\n\nexport const ChatSkeleton = () => {\n return (\n <Stack minH=\"full\" py=\"xs\" gap=\"0\">\n <ChatMessage.Root from=\"user\">\n <ChatMessage.Content from=\"user\">{renderSkeletonLines([\"72%\", \"46%\"])}</ChatMessage.Content>\n </ChatMessage.Root>\n <ChatMessage.Root from=\"assistant\">\n <ChatMessage.Content from=\"assistant\">{renderSkeletonLines([\"76%\", \"62%\", \"40%\"])}</ChatMessage.Content>\n </ChatMessage.Root>\n </Stack>\n );\n};\n","import { Box, chakra, Flex, Portal, Stack, Text } from \"@chakra-ui/react\";\nimport { type PointerEvent, useState } from \"react\";\n\nexport interface ConversationBrowseItem {\n /** Turn id used to scroll the log to this user message. */\n id: string;\n /** The user message this tick indexes (shown in the hover card). */\n message: string;\n /** Optional assistant reply preview; hidden for a turn not yet answered. */\n reply?: string;\n}\n\ninterface ConversationBrowseProps {\n items: ConversationBrowseItem[];\n onSelect?: (id: string) => void;\n /** Overlay the log's left edge with a scrim instead of reserving a gutter (panels under ~480px). */\n floating?: boolean;\n}\n\n// The rail is a lens, not a chart: tick length encodes distance from the pointer, never content.\nconst MIN_USER_MESSAGES = 3;\nconst TICK_MIN_WIDTH = 10;\nconst TICK_MAX_WIDTH = 26;\nconst LENS_RADIUS = 4;\n\ninterface BrowseCardPosition {\n left: number;\n top: number;\n}\n\n// Raised-cosine falloff over LENS_RADIUS neighbours: 1 at the pointer, 0 at the edge of the lens.\nconst lensFactor = (index: number, pointerIndex: number | null) => {\n if (pointerIndex === null) return 0;\n const distance = Math.abs(index - pointerIndex);\n if (distance >= LENS_RADIUS) return 0;\n return (1 + Math.cos((Math.PI * distance) / LENS_RADIUS)) / 2;\n};\n\nconst tickColor = (index: number, pointerIndex: number | null) => {\n if (pointerIndex === null) return \"fg.subtle\";\n const distance = Math.abs(index - pointerIndex);\n if (distance < 0.5) return \"fg\";\n if (distance < LENS_RADIUS) return \"fg.muted\";\n return \"fg.subtle\";\n};\n\nconst ConversationBrowseCard = (props: { item: ConversationBrowseItem; position: BrowseCardPosition }) => {\n const { item, position } = props;\n\n return (\n <Portal>\n <Box\n position=\"fixed\"\n left={`${position.left}px`}\n ml=\"2xs\"\n top={`${position.top}px`}\n transform=\"translateY(-50%)\"\n w=\"80\"\n maxW=\"80\"\n zIndex=\"popover\"\n pointerEvents=\"none\"\n >\n <Stack gap=\"1.5\" p=\"3\" bg=\"bg.elevated\" borderWidth=\"1px\" borderColor=\"border\" borderRadius=\"lg\">\n <Text textStyle=\"label/S/medium\" color=\"fg\" lineClamp={2}>\n {item.message}\n </Text>\n {item.reply ? (\n <Text textStyle=\"label/XS/regular\" color=\"fg.muted\" lineClamp={2}>\n {item.reply}\n </Text>\n ) : null}\n </Stack>\n </Box>\n </Portal>\n );\n};\n\n/**\n * ChatBrowse — the conversation scrubber for the chat log's left gutter. One tick per user\n * message, in order; the ticks nearest the pointer swell into a lens (growing along X only, so\n * the row you aim at never moves), and the active tick raises a preview card. Clicking a tick\n * selects that turn. Hidden below a few messages, where a gutter costs space and buys nothing.\n */\nexport const ConversationBrowse = (props: ConversationBrowseProps) => {\n const { items, onSelect, floating = false } = props;\n const [pointerIndex, setPointerIndex] = useState<number | null>(null);\n const [cardPosition, setCardPosition] = useState<BrowseCardPosition | null>(null);\n\n if (items.length < MIN_USER_MESSAGES) return null;\n\n const handlePointerMove = (event: PointerEvent<HTMLDivElement>) => {\n const rect = event.currentTarget.getBoundingClientRect();\n const fraction = (event.clientY - rect.top) / rect.height;\n const next = Math.min(items.length - 1, Math.max(0, fraction * items.length - 0.5));\n const nextActiveIndex = Math.round(next);\n setPointerIndex(next);\n setCardPosition({\n left: rect.right,\n top: rect.top + ((nextActiveIndex + 0.5) / items.length) * rect.height,\n });\n };\n\n const activeIndex = pointerIndex === null ? null : Math.round(pointerIndex);\n const activeItem = activeIndex === null ? null : items[activeIndex];\n\n return (\n <Box position=\"relative\" w=\"10\" flexShrink={0}>\n <Flex\n direction=\"column\"\n align=\"flex-start\"\n gap=\"1.5\"\n px=\"1.5\"\n py=\"2\"\n w=\"10\"\n onPointerMove={handlePointerMove}\n onPointerLeave={() => setPointerIndex(null)}\n {...(floating\n ? {\n position: \"absolute\",\n insetInlineStart: 0,\n top: 0,\n bottom: 0,\n // The scrim must be the surface the rail covers — the panel's own bg, never a lighter tone.\n bg: \"bg\",\n }\n : {})}\n >\n {items.map((item, index) => (\n <chakra.button\n type=\"button\"\n key={item.id}\n h=\"2px\"\n w={`${TICK_MIN_WIDTH + (TICK_MAX_WIDTH - TICK_MIN_WIDTH) * lensFactor(index, pointerIndex)}px`}\n bg={tickColor(index, pointerIndex)}\n borderRadius=\"1px\"\n transition=\"width 80ms linear, background-color 80ms linear\"\n aria-label={`Jump to message ${index + 1}`}\n onClick={() => onSelect?.(item.id)}\n />\n ))}\n </Flex>\n {activeItem && cardPosition ? <ConversationBrowseCard item={activeItem} position={cardPosition} /> : null}\n </Box>\n );\n};\n","import { Flex, HStack, Spinner, Text } from \"@chakra-ui/react\";\nimport { AlertTriangle } from \"lucide-react\";\nimport type { ReactNode } from \"react\";\n\ntype WorkspaceHubStatus = \"ready\" | \"loading\" | \"error\";\n\ninterface ChatWorkspaceHubProps {\n /** Workspace identity/selector shown at the start of the header (e.g. GitBranch + name). */\n workspaceControl?: ReactNode;\n additions: number;\n deletions: number;\n /** Icon-only action that opens the workspace resource. */\n action?: ReactNode;\n status?: WorkspaceHubStatus;\n statusLabel?: string;\n}\n\nconst HubStatus = (props: {\n status: WorkspaceHubStatus;\n statusLabel?: string;\n additions: number;\n deletions: number;\n}) => {\n const { status, statusLabel, additions, deletions } = props;\n\n if (status === \"loading\") {\n return (\n <HStack gap=\"2xs\" minW=\"0\">\n <Spinner size=\"xs\" color=\"fg.muted\" />\n <Text textStyle=\"label/XS/regular\" color=\"fg.muted\" truncate>\n {statusLabel ?? \"Setting up workspace...\"}\n </Text>\n </HStack>\n );\n }\n\n if (status === \"error\") {\n return (\n <HStack gap=\"2xs\" minW=\"0\">\n <AlertTriangle size={14} color=\"var(--chakra-colors-fg-error)\" />\n <Text textStyle=\"label/XS/regular\" color=\"fg.error\" truncate>\n {statusLabel ?? \"Workspace setup failed\"}\n </Text>\n </HStack>\n );\n }\n\n // Ready: the diff counts take the slot, and only when there is something to show.\n if (additions <= 0 && deletions <= 0) return null;\n\n return (\n <HStack gap=\"2xs\">\n <Text textStyle=\"label/XS/medium\" color=\"fg.success\">\n +{additions}\n </Text>\n <Text textStyle=\"label/XS/medium\" color=\"fg.error\">\n −{deletions}\n </Text>\n </HStack>\n );\n};\n\n/**\n * Workspace hub header: the frame the session sits in. The identity is always present;\n * the slot beside it carries the diff counts, or the setup status while the workspace is\n * being created or has failed. The open action recedes during setup.\n */\nexport const ChatWorkspaceHub = (props: ChatWorkspaceHubProps) => {\n const { workspaceControl, additions, deletions, action, status = \"ready\", statusLabel } = props;\n\n return (\n <Flex align=\"center\" justify=\"space-between\" gap=\"sm\" minW=\"0\" pl=\"xs\" pr=\"2xs\" py=\"2xs\">\n <HStack gap=\"sm\" minW=\"0\">\n {workspaceControl}\n <HubStatus status={status} statusLabel={statusLabel} additions={additions} deletions={deletions} />\n </HStack>\n {action ? <Flex flexShrink={0}>{action}</Flex> : null}\n </Flex>\n );\n};\n"],"names":["conversationRootDefaultProps","initial","resize","role","ConversationRoot","chakra","StickToBottomEl","base","position","flex","overflow","height","forwardProps","defaultProps","ConversationContent","props","$","_c","children","rest","contentRef","scrollRef","useStickToBottomContext","t0","t1","t2","t3","Symbol","for","zIndex","py","t4","ScrollArea","conversationScrollButtonContainerDefaultProps","axis","bottom","ConversationScrollButton","isAtBottom","scrollToBottom","jsx","AbsoluteCenter","IconButton","ArrowDownIcon","ChatPrimitives","Root","Viewport","ScrollToBottom","recipe","defineSlotRecipe","className","slots","root","display","width","alignItems","justifyContent","gap","mb","content","flexDirection","textStyle","borderRadius","variants","from","user","borderTopWidth","borderRightWidth","borderBottomWidth","borderLeftWidth","borderColor","bg","px","assistant","developer","size","sm","md","lg","shape","rounded","pill","square","defaultVariants","withProvider","withContext","createSlotRecipeContext","MessageRoot","MessageContent","ChatMessage","Content","formatToolInput","input","text","JSON","stringify","length","slice","ApprovalPrompt","toolName","toolInput","onApprove","onDeny","formattedInput","jsxs","Text","Code","ShieldX","Button","t5","ShieldCheck","t6","t7","HStack","t8","Box","Flex","DEFAULT_SIZE","DEFAULT_TONE","AttachmentList","attachments","onSelect","onRemove","renderBadge","tone","undefined","attachment","select","remove","rendered","attachmentId","Fragment","ResourceBadge","map","Stack","shouldAutoScroll","args","previousUserMessageCount","userMessageCount","getNextAutoScrollState","conversationKey","state","shouldScroll","Math","max","scrollForNextAutoScrollState","next","AutoScroll","stateRef","useRef","current","useEffect","hasMessageText","trim","resolveChatInputKeyboardAction","canSubmit","isDisabled","resolveChatInputButtonAction","canInterrupt","hasQuestionPrompt","streaming","DEFAULT_TEXT_ATTACHMENT_PASTE_LINE_THRESHOLD","shouldAttachPastedText","lineThreshold","split","createAttachmentEventHandlers","onAttachFiles","onAttachText","textAttachmentPasteLineThreshold","onDragOver","event","Array","dataTransfer","types","includes","preventDefault","onDropCapture","files","onPasteCapture","clipboardData","pastedText","getData","preventSubmit","QuestionOptionContent","option","label","description","QuestionCheckboxOptionRow","name","checked","editable","onToggle","tabIndex","Checkbox","QuestionRadioOptions","question","questionIndex","selectedOption","onToggleOption","details","value","options","Radio","RadioGroup","TodoListBlockView","items","_temp","QuestionFormBlockView","questions","selectedOptionsByQuestion","customAnswersByQuestion","onCustomAnswerChange","id","inputType","multiple","selectedOptions","allowCustomAnswer","Textarea","currentTarget","item","index","getQuestionSelectionKey","toggleQuestionOptionSelection","optionLabel","key","selected","alreadySelected","filter","getQuestionPromptSignature","questionPrompt","Boolean","required","getQuestionAnswerLines","lines","selectedLabels","customAnswer","answers","push","join","isCustomAnswersByQuestion","toCustomAnswersByQuestion","answerInput","trimmed","buildQuestionResponse","legacyText","hasCustomQuestions","some","buildQuestionAnswerValues","hasMissingRequiredQuestionAnswer","toQuestionFormQuestions","hasQuestionAnswer","QuestionStepTab","sourceQuestion","isActive","onSelectStep","isAnswered","stepStateLabel","tabVariant","Check","Tooltip","QuestionPromptStepper","activeQuestionIndex","setActiveQuestionIndex","useState","renderQuestionIndex","min","activeQuestion","hasMultipleQuestions","_question","_questionIndex","_question_0","_questionIndex_0","answer","t9","QuestionPromptControls","questionPromptSignature","COMPOSER_CONTROL_HEIGHT","SendButton","shortcut","title","ariaLabel","Pause","ArrowUp","icon","button","Kbd","tooltipContent","Portal","MAX_RECENT_USER_PROMPTS","getRecentUserPrompts","messages","prompts","i","message","parts","flatMap","part","type","movePromptHistory","direction","count","useChatInputHistory","recentUserMessages","blocked","resetKey","onChange","editorRef","historyIndex","signature","resetSignature","previousResetSignature","reset","change","movement","value_0","setEditorValue","recall","recallPrevious","recallNext","ChatInputPlaceholder","placeholder","selectedChatInputBorderColor","focusPromptEditor","container","querySelector","HTMLElement","focus","requestPromptEditorFocus","onFocus","requestAnimationFrame","useComposerFocus","containerRef","autoFocus","focusSignal","setIsSelected","handle","cancelAnimationFrame","handle_0","ChatInput","defaultState","onSubmit","onInterrupt","attachedResources","onClearAttachments","submitDisabled","attachmentList","actions","attachedToTop","recessed","submitTitle","references","onAddReference","restingBorderColor","submitting","setSubmitting","isSelected","editorState","setEditorState","editorKey","setEditorKey","setText","getTextFromSerializedEditorState","setSelectedOptionsByQuestion","setCustomAnswersByQuestion","onChangeRef","previousQuestionPromptSignatureRef","resetText","history","handleContainerClick","resetEditor","shouldFocus","responseText","hasMissingRequiredSelection","actionState","buttonAction","messageTitle","submitMessage","questionResponse","runAction","action","attachmentEventHandlers","toggleQuestionOption","updateQuestionCustomAnswer","pr","PromptEditor","Spacer","isRecord","isArray","parseJsonObjectText","parsed","parse","toInputRecord","getStringValue","getQuestionResponseText","stringValue","line","response","parseQuestionOption","parseQuestion","custom","parseQuestionPrompt","record","isQuestionTool","tool","toLowerCase","resolveActiveQuestionPrompt","messageIndex","partIndex","output","metadata","messageFadeInProps","animationName","animationDuration","animationTimingFunction","getNextMessageAnimationState","animatedKeys","Set","seenKeys","itemKeys","initialized","has","add","itemKeysEqual","a","b","useMessageAnimationKeys","lastResultRef","isCopyablePart","getMessageCopyText","getMessageTimestampLabel","locale","timeZone","createdAt","Intl","DateTimeFormat","hour","minute","format","Date","MessageActionPanel","alwaysVisible","copyAlwaysVisible","isCopied","setIsCopied","copyResetTimeoutRef","copyText","timestampLabel","window","clearTimeout","navigator","clipboard","writeText","setTimeout","copyMessage","t10","messageActionPanelHoverStyles","Copy","t11","opacity","pointerEvents","ChatRichContent","RichMessage","Response","normalizeToolName","replace","getToolNameLookupKeys","normalized","compact","toolIconMap","shell","Terminal","ls","ListTree","read_file","FileText","write_file","FilePen","delete_file","Trash2","patch","FileDiff","upload_files","FileUp","download_file","FileDown","move_file","Move","iconMap","dot","DotIcon","danger","AlertTriangle","search","Search","browser","Globe","file","File","CircleQuestionMark","todo","ListTodo","terminal","DEFAULT_TOOL_ICON","isToolIconName","Object","hasOwn","getIconComponent","toolTypeToIconName","basenameSafe","path","idx","lastIndexOf","normalizeHeaderPath","token","startsWith","isMinusHeader","isPlusHeader","isHunkHeader","isAddedLine","isDeletedLine","ensureFileChange","changes","filePath","set","additions","deletions","incrementAdditions","get","incrementDeletions","processUnifiedDiffLine","lastMinusHeader","inHunk","currentPath","parseUnifiedDiff","diffText","Map","entries","buildDiffTitleSegments","kind","fileName","extractDiffFilePaths","isDiffFileBoundary","isInvalidHunkBodyLine","appendHunkLine","original","modified","parseHunkBody","startIndex","parsePreview","oldHeader","nextIndex","preview","buildFileDiffPreviews","previews","TOOL_LABELS","apply_patch","bash","edit","glob","grep","read","skill","todowrite","STATE_LABELS","error","input_streaming","running","completed","failed","normalizeToolType","toTitleCase","toUpperCase","getToolType","invocation","getToolLabel","getStateLabel","status","isErrorState","buildIndicator","buildBaseTitle","detail","labelOverride","detailStyle","bold","muted","truncate","monospace","stateLabel","getInputObject","getOutputObject","getObjectValue","getStateObject","normalizeFilePath","isUnifiedDiff","getApplyPatchMetadataObjects","parseApplyPatchMetadataFile","entry","rawPath","relativePath","diff","before","after","getApplyPatchMetadataFiles","parsedFile","getApplyPatchInputFilePaths","filePaths","getApplyPatchDiffText","inputDiff","metadataDiff","fileDiffs","patchText","buildApplyPatchMetadataTitleSegments","seen","segments","getApplyPatchMetadataReferences","getOutputText","outputObject","returnDisplay","stdout","parseSkillContentBlock","match","skillName","getSkillName","skill_name","buildFileLinkSegment","variant","prependErrorBlock","blocks","errorText","getDiffBlocks","language","sideBySide","getDiffTitleSegments","getDiffReferences","renderApplyPatch","metadataFiles","inputFilePaths","diffSegments","indicator","buildEditDiff","renderEdit","file_path","oldString","old_string","newString","new_string","diffBlocks","createQuestionRenderer","deps","prompt","block","fieldLabel","expandable","renderRead","renderCommand","command","outputText","code","stderr","exitCode","renderBash","renderShell","renderGrep","query","pattern","renderGlob","renderSkill","parsedOutput","renderedContent","parseTodoItem","parseTodoItems","explicit","listSource","objectValue","todos","createTodowriteRenderer","inputTodos","outputTodos","todoState","countLabel","renderQuestion","renderTodowrite","createDefaultToolRenderers","todo_write","stringifyValue","isBlankValue","every","values","getRecord","getString","getMediaType","mime_type","mediaType","mimeType","isImageMediaType","imageUrlPattern","getImageBlock","alt","data","src","url","test","getFileLikeOutput","filename","body","extensionLanguageBySuffix","css","html","js","json","ts","tsx","yaml","yml","getLanguageFromPath","extension","pop","createLabeledBlocks","buildBlocksForArrayValue","entryRecord","entryType","image","buildBlocksForValue","buildBlocksForFileLikeValue","fileLikeOutput","buildBlocksForAttachmentValue","attachmentName","attachment_name","attachment_file_id","attachmentFileId","imageBlock","fileBlocks","attachmentBlocks","buildGenericBlocks","toolLabel","createGenericItem","isVisibleTitleSegment","segment","isVisibleBlock","isVisibleItem","hasTitle","hasBlocks","mergeToolRenderers","overrides","getRenderer","toolRenderers","rawTool","renderer","renderInvocation","buildTimelineDocFromInvocations","invocations","handleTitleLinkClick","seg","onOpenFile","stopPropagation","href","AvatarTitleSegment","Avatar","DiffTitleSegment","DiffBubble","BubbleLinkTitleSegment","fontWeight","isInteractive","textDecoration","color","Link","DefaultLinkTitleSegment","TextTitleSegment","isClickable","Span","TitleInline","Timeline","ChakraTimeline","IndicatorView","ind","IndicatorIcon","CodeBlock","BlockView","reactions","clap","Card","DiffEditor","Image","caption","render","ref","TimelineItemRow","itemKey","isOpen","canExpand","ChevronUpIcon","i_0","TimelineFromJSON","expanded","setExpanded","getKey","_temp2","prev","toggle","idx_0","key_0","it","hasToolOutput","keys","ToolInvocationTimeline","labeledBlocks","hideQuestionForms","bb0","visibleInvocations","isToolPart","filePartLabel","imageExtensionPattern","isImageFilePart","filePartThumbnail","openFilePart","open","getErrorMessage","errorType","ALERT_COLOR_PALETTE","info","warning","success","loading","collectToolInvocations","lookahead","nextPart","MessagePartsRenderer","toolInvocationTimeline","RenderToolInvocationTimeline","nodes","fontSize","AlertMessage","Spinner","getMessageOrigin","isVisibleText","isVisibleAlert","isDisplayRenderablePart","isActivityPart","isActivityOnlyMessage","mergeBufferedActivity","first","modelId","at","providerId","normalizeChatMessagesForDisplay","activityBuffer","clearActivityBuffer","displayParts","displayMessage","activity","trailingActivity","getAssistantMessageActionTargetId","lastMessage","groupMessagesByTurn","groups","leadingResponses","userMessage","responses","ChatMessageListResponse","animate","showAssistantActions","showActions","StickyMessageToggle","onClick","actionPanel","STICKY_USER_MESSAGE_COLLAPSE_TEXT_THRESHOLD","STICKY_USER_MESSAGE_COLLAPSE_LINE_THRESHOLD","STICKY_USER_MESSAGE_COLLAPSED_MAX_HEIGHT","STICKY_USER_MESSAGE_EXPANDED_MAX_HEIGHT","SCROLL_BOUNDARY_EPSILON","getMessageTextMetrics","reduce","metrics","lineCount","textLength","isStickyUserMessageCollapsible","shouldStopStickyUserMessageWheel","element","deltaY","maxScrollTop","scrollHeight","clientHeight","scrollTop","ESTIMATED_TURN_HEIGHT","INITIAL_TAIL_VIEWPORT_HEIGHT","TAIL_READY_STABLE_FRAME_COUNT","TAIL_READY_FRAME_LIMIT","TAIL_READY_PIXEL_EPSILON","VIRTUAL_LIST_OVERSCAN","VIRTUAL_LIST_GAP","buildMessageListItems","leadingActionMessageId","group","groupIndex","getEstimatedTailOffset","viewportHeight","estimatedTotalSize","getInitialViewportHeight","scrollElement","isTailLayoutStable","previous","abs","totalSize","readTailLayoutSnapshot","useTailReady","itemCount","onReady","onReadyRef","frameId","checkedFrameCount","stableFrameCount","previousSnapshot","waitForStableTail","nextSnapshot","handleExpandedStickyMessageWheel","getStickyMessageMaxHeight","isCollapsible","isExpanded","getStickyMessageBodyMaxHeight","isExpandedCollapsible","StickyMessageGroup","onToggleStickyMessage","stickyMessageMaxHeight","toggleStickyMessage","actionMessageId","t12","t13","t14","t15","t16","t17","t18","t19","renderListItem","hideActiveQuestionForms","expandedStickyMessageIds","animatedItemKeys","ChatMessageList","initialViewportHeight","virtualizer","useVirtualizer","getScrollElement","estimateSize","getItemKey","overscan","initialRect","initialOffset","getTotalSize","getVirtualItems","virtualItem","measureElement","top","start","createSerializedPromptState","generateEditorStateFromString","QueuedFollowUpRow","isFirst","isLast","isEditing","isDragTarget","onEdit","onDragStart","onDragEnd","onDrop","canEdit","canRemove","canDrag","dragLabel","event_0","event_1","effectAllowed","setData","ChakraIcon","GripVertical","Badge","Pencil","QueuedFollowUpList","editingItemId","onMove","draggedItemId","setDraggedItemId","dragTargetItemId","setDragTargetItemId","itemId","dropEffect","handleDragOver","itemId_0","sourceItemId","sourceIndex","findIndex","targetIndex","item_0","handleDrop","item_1","useQueuedFollowUpComposer","queuedFollowUps","defaultValue","onUpdate","setEditingItemId","editSeed","setEditSeed","setFocusSignal","inputValue","text_0","submit","ChatPanelComposer","chatInputAutoFocus","chatInputPlaceholder","chatInputQuestionPrompt","chatInputReferences","hasWorkspaceHub","inputDisabled","onChatInputAddReference","onQueuedFollowUpMove","onQueuedFollowUpRemove","onQueuedFollowUpUpdate","queuedComposer","workspaceHub","hasQueuedFollowUps","signal","formatElapsed","totalSeconds","seconds","floor","minutes","String","padStart","WorkingIndicator","hidden","elapsedSeconds","setElapsedSeconds","now","startedAtRef","updateElapsed","timer","setInterval","clearInterval","ChatPanel","emptyStateTitle","emptyStateDescription","emptyStateContent","loaderComponent","chatInputDefaultValue","onSubmitMessage","onChatInputChange","approvalPrompt","workspaceInitializing","hasMessages","messageListIdentity","messageListKey","merged","setExpandedStickyMessageIds","readyMessageListKey","setReadyMessageListKey","showLoadingState","MessageCircleIcon","EmptyState","emptyContent","activeQuestionPrompt","showThinkingIndicator","isMessageViewportReady","messageId","delete","toggleStickyMessageExpanded","t20","t21","t22","t23","t24","t25","t26","t27","t28","renderSkeletonLines","widths","Skeleton","ChatSkeleton","MIN_USER_MESSAGES","TICK_MIN_WIDTH","TICK_MAX_WIDTH","LENS_RADIUS","lensFactor","pointerIndex","distance","cos","PI","tickColor","ConversationBrowseCard","left","reply","ConversationBrowse","floating","setPointerIndex","cardPosition","setCardPosition","rect","getBoundingClientRect","fraction","clientY","nextActiveIndex","round","right","handlePointerMove","activeIndex","activeItem","insetInlineStart","HubStatus","statusLabel","ChatWorkspaceHub","workspaceControl"],"mappings":"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"}
1
+ {"version":3,"file":"chat-ui.js","names":["HTMLChakraProps","IconButtonProps","AbsoluteCenter","chakra","IconButton","ArrowDownIcon","StickToBottom","StickToBottomEl","useStickToBottomContext","ScrollArea","ConversationRootProps","React","ComponentProps","conversationRootDefaultProps","initial","resize","role","const","ConversationRoot","base","position","flex","overflow","height","forwardProps","defaultProps","ConversationContentProps","Omit","ConversationContent","props","$","_c","children","rest","contentRef","scrollRef","t0","Ref","HTMLDivElement","t1","t2","t3","Symbol","for","zIndex","py","t4","ConversationScrollButtonProps","conversationScrollButtonContainerDefaultProps","axis","bottom","ConversationScrollButton","isAtBottom","scrollToBottom","ChatPrimitives","Root","Viewport","ScrollToBottom","StickToBottomEl","_c","ScrollArea","HTMLChakraProps","RecipeVariantProps","createSlotRecipeContext","defineSlotRecipe","recipe","className","slots","base","root","display","width","alignItems","justifyContent","gap","mb","content","flexDirection","textStyle","overflow","borderRadius","variants","from","user","borderTopWidth","borderRightWidth","borderBottomWidth","borderLeftWidth","borderColor","bg","px","py","assistant","developer","size","sm","md","lg","shape","rounded","pill","square","defaultVariants","withProvider","withContext","VariantProps","MessageRootProps","MessageRoot","HTMLDivElement","MessageContentProps","MessageContent","ChatMessage","Root","Content","const","Box","Button","Code","Flex","HStack","Text","ShieldCheck","ShieldX","ScrollArea","ApprovalPromptProps","toolName","toolInput","onApprove","onDeny","formatToolInput","input","text","JSON","stringify","length","truncated","slice","ApprovalPrompt","props","$","_c","t0","formattedInput","t1","t2","t3","Symbol","for","t4","t5","t6","t7","t8","_c","ScrollArea","Stack","ReactNode","Fragment","ResourceBadgeProps","ResourceBadge","AttachmentListRenderBadge","props","AttachmentListItemRenderProps","attachmentId","onSelect","onRemove","size","tone","AttachmentListProps","attachments","renderBadge","DEFAULT_SIZE","NonNullable","DEFAULT_TONE","AttachmentList","$","_c","t0","t1","t2","t3","undefined","length","t4","t5","attachment","select","remove","rendered","map","_c","Fragment","useEffect","useRef","useStickToBottomContext","AutoScrollProps","userMessageCount","conversationKey","ShouldAutoScrollArgs","previousUserMessageCount","AutoScrollState","NextAutoScrollStateArgs","state","ScrollForNextAutoScrollStateArgs","scrollToBottom","animation","shouldAutoScroll","args","getNextAutoScrollState","shouldScroll","Math","max","scrollForNextAutoScrollState","next","AutoScroll","props","$","_c","t0","t1","stateRef","t2","t3","current","_c","ChatInputActionState","canInterrupt","canSubmit","hasQuestionPrompt","isDisabled","streaming","text","ChatInputAction","hasMessageText","trim","length","resolveChatInputKeyboardAction","state","resolveChatInputButtonAction","ClipboardEvent","DragEvent","DEFAULT_TEXT_ATTACHMENT_PASTE_LINE_THRESHOLD","shouldAttachPastedText","text","lineThreshold","length","split","createAttachmentEventHandlers","input","onAttachFiles","files","File","onAttachText","textAttachmentPasteLineThreshold","onPasteCapture","event","HTMLDivElement","Array","from","clipboardData","preventDefault","pastedText","getData","onDropCapture","dataTransfer","onDragOver","types","includes","Box","Stack","Text","Textarea","FormEvent","Checkbox","Radio","RadioGroup","QuestionFormBlockQuestion","TodoListBlockItem","preventSubmit","event","preventDefault","QuestionFormBlockViewProps","questions","editable","selectedOptionsByQuestion","Record","customAnswersByQuestion","onToggleOption","question","questionIndex","optionLabel","onCustomAnswerChange","answer","QuestionOptionContent","props","$","_c","option","t0","label","t1","description","t2","QuestionCheckboxOptionRow","name","checked","onToggle","undefined","tabIndex","t3","t4","t5","QuestionRadioOptions","selectedOption","details","value","options","map","TodoListBlockView","items","_temp","QuestionFormBlockView","t6","id","inputType","multiple","selectedOptions","includes","allowCustomAnswer","currentTarget","item","index","_c","Checkbox","RadioGroup","_temp","Button","HStack","Stack","Check","useState","Tooltip","QuestionFormBlockView","ChatInputQuestionOption","label","description","ChatInputQuestion","id","question","options","multiple","required","allowCustomAnswer","ChatInputQuestionPrompt","questions","ChatInputQuestionResponse","answers","ChatInputQuestionCustomAnswers","Record","QuestionPromptControlsProps","questionPrompt","selectedOptionsByQuestion","customAnswersByQuestion","onToggleOption","questionIndex","optionLabel","onCustomAnswerChange","answer","QuestionPromptStepperProps","ReturnType","toQuestionFormQuestions","getQuestionSelectionKey","index","toggleQuestionOptionSelection","key","selected","alreadySelected","includes","filter","getQuestionPromptSignature","JSON","stringify","map","Boolean","option","getQuestionAnswerLines","lines","length","selectedLabels","customAnswer","trim","push","join","isCustomAnswersByQuestion","value","toCustomAnswersByQuestion","answerInput","trimmed","buildQuestionResponse","legacyText","hasCustomQuestions","some","buildQuestionAnswerValues","hasMissingRequiredQuestionAnswer","hasSelectedOption","QuestionFormQuestion","QuestionStepTabProps","sourceQuestion","isActive","onSelectStep","hasQuestionAnswer","QuestionStepTab","props","$","_c","t0","isAnswered","stepStateLabel","tabVariant","t1","t2","t3","t4","t5","t6","t7","QuestionPromptStepper","activeQuestionIndex","setActiveQuestionIndex","renderQuestionIndex","Math","min","activeQuestion","hasMultipleQuestions","undefined","_question","_questionIndex","_question_0","_questionIndex_0","t8","t9","QuestionPromptControls","questionPromptSignature","_c","Tooltip","IconButton","IconButtonProps","Kbd","Portal","Tooltip","ArrowUp","Pause","SendButtonProps","shortcut","title","canInterrupt","SendButton","props","$","_c","rest","ariaLabel","t0","icon","t1","button","t2","tooltipContent","t3","t4","t5","_c","_Fragment","SessionMessage","MAX_RECENT_USER_PROMPTS","getRecentUserPrompts","messages","prompts","i","length","message","role","text","parts","flatMap","part","type","join","trim","push","movePromptHistory","index","direction","count","Math","min","useEffect","useRef","PromptEditorRef","MAX_RECENT_USER_PROMPTS","movePromptHistory","ChatInputHistoryOptions","recentUserMessages","text","blocked","resetKey","onChange","useChatInputHistory","options","$","_c","editorRef","historyIndex","prompts","t0","slice","signature","JSON","stringify","resetSignature","previousResetSignature","t1","t2","current","t3","Symbol","for","reset","t4","value","change","t5","direction","movement","length","index","value_0","setEditorValue","recall","t6","t7","t8","recallPrevious","recallNext","_c","Box","Flex","HStack","Spacer","Text","ReactNode","useEffect","useRef","useState","ScrollArea","getTextFromSerializedEditorState","PromptEditor","ReferenceItem","ChatInputAction","resolveChatInputButtonAction","resolveChatInputKeyboardAction","createAttachmentEventHandlers","DEFAULT_TEXT_ATTACHMENT_PASTE_LINE_THRESHOLD","buildQuestionAnswerValues","buildQuestionResponse","ChatInputQuestion","ChatInputQuestionCustomAnswers","ChatInputQuestionPrompt","ChatInputQuestionResponse","getQuestionPromptSignature","getQuestionSelectionKey","hasMissingRequiredQuestionAnswer","QuestionPromptControls","toggleQuestionOptionSelection","COMPOSER_CONTROL_HEIGHT","SendButton","useChatInputHistory","ChatInputProps","defaultState","recentUserMessages","placeholder","onSubmit","text","attachments","questionResponse","Promise","onInterrupt","onAttachFiles","files","File","onAttachText","textAttachmentPasteLineThreshold","streaming","attachedResources","onClearAttachments","isDisabled","submitDisabled","onChange","attachmentList","actions","attachedToTop","recessed","questionPrompt","autoFocus","focusSignal","submitTitle","references","onAddReference","resourceId","resourceType","ChatInputPlaceholder","props","$","_c","t0","selectedChatInputBorderColor","focusPromptEditor","container","HTMLDivElement","editable","querySelector","HTMLElement","focus","requestPromptEditorFocus","onFocus","requestAnimationFrame","useComposerFocus","containerRef","setIsSelected","t1","handle","current","cancelAnimationFrame","t2","t3","handle_0","ChatInput","restingBorderColor","submitting","setSubmitting","isSelected","editorState","setEditorState","editorKey","setEditorKey","setText","selectedOptionsByQuestion","setSelectedOptionsByQuestion","Record","customAnswersByQuestion","setCustomAnswersByQuestion","onChangeRef","previousQuestionPromptSignatureRef","resetText","key","questionPromptSignature","history","blocked","Boolean","resetKey","JSON","stringify","value","handleContainerClick","resetEditor","shouldFocus","reset","change","responseText","trim","hasMissingRequiredSelection","actionState","canInterrupt","canSubmit","hasQuestionPrompt","buttonAction","messageTitle","submitMessage","answers","undefined","runAction","action","attachmentEventHandlers","toggleQuestionOption","question","questionIndex","optionLabel","updateQuestionCustomAnswer","answer","borderColor","zIndex","onPasteCapture","onDropCapture","onDragOver","pr","editorRef","recallPrevious","recallNext","_c","ScrollArea","SessionMessage","ToolPart","QuestionFormBlockOption","QuestionFormBlockQuestion","isRecord","value","Record","Array","isArray","parseJsonObjectText","parsed","JSON","parse","toInputRecord","input","trim","length","getStringValue","getQuestionResponseText","stringValue","lines","map","filter","line","join","response","answer","text","answers","parseQuestionOption","label","description","undefined","parseQuestion","index","question","options","option","type","allowCustomAnswer","custom","id","multiple","required","parseQuestionPrompt","record","questions","isQuestionTool","part","tool","toLowerCase","resolveActiveQuestionPrompt","messages","messageIndex","message","role","partIndex","parts","state","output","metadata","getStringValue","isQuestionTool","useRef","MessageAnimationState","initialized","seenKeys","Set","NextMessageAnimationStateArgs","itemKeys","state","messageFadeInProps","animationName","animationDuration","animationTimingFunction","const","getNextMessageAnimationState","args","animatedKeys","key","has","add","itemKeysEqual","a","b","length","index","useMessageAnimationKeys","stateRef","lastResultRef","current","next","Box","HStack","IconButton","Text","Check","Copy","useEffect","useRef","useState","Tooltip","ChatMessagePart","SessionMessage","MessageActionPanelProps","message","alwaysVisible","copyAlwaysVisible","isCopyablePart","part","Extract","type","getMessageCopyText","parts","filter","map","text","trim","Boolean","join","getMessageTimestampLabel","locale","timeZone","createdAt","Intl","DateTimeFormat","hour","minute","format","Date","MessageActionPanel","props","$","_c","t0","t1","undefined","isCopied","setIsCopied","copyResetTimeoutRef","t2","copyText","t3","timestampLabel","t4","t5","Symbol","for","current","window","clearTimeout","t6","navigator","clipboard","writeText","setTimeout","copyMessage","t7","t8","t9","t10","messageActionPanelHoverStyles","t11","opacity","pointerEvents","_c","Tooltip","BoxProps","Box","RichMessage","ChatRichContentProps","Omit","children","ChatRichContent","props","$","_c","rest","t0","t1","Response","_c","normalizeToolName","value","replace","toLowerCase","getToolNameLookupKeys","normalized","compact","Set","LucideIcon","AlertTriangle","CircleQuestionMark","DotIcon","File","FileDiff","FileDown","FilePen","FileText","FileUp","Globe","ListTodo","ListTree","Move","Search","Terminal","Trash2","normalizeToolName","toolIconMap","shell","ls","read_file","write_file","delete_file","patch","upload_files","download_file","move_file","const","Record","iconMap","dot","danger","search","browser","file","question","todo","terminal","IconName","ToolIconName","DEFAULT_TOOL_ICON","isToolIconName","value","Object","hasOwn","getIconComponent","name","toolTypeToIconName","type","normalized","compact","replace","getFileTypeIcon","TitleSegment","FileChange","filePath","additions","deletions","basenameSafe","path","idx","lastIndexOf","slice","normalizeHeaderPath","input","token","split","trim","normalized","startsWith","replace","isMinusHeader","line","isPlusHeader","isHunkHeader","isAddedLine","isDeletedLine","ensureFileChange","changes","Map","has","set","incrementAdditions","current","get","incrementDeletions","UnifiedDiffState","currentPath","lastMinusHeader","inHunk","processUnifiedDiffLine","state","plusPath","parseUnifiedDiff","diffText","lines","Array","from","entries","map","buildDiffTitleSegments","file","kind","fileName","extractDiffFilePaths","FileDiffPreview","original","modified","isDiffFileBoundary","isInvalidHunkBodyLine","appendHunkLine","text","push","parseHunkBody","startIndex","index","length","parsePreview","oldHeader","next","nextIndex","const","newHeader","preview","join","buildFileDiffPreviews","previews","i","Math","max","ToolPart","Block","TitleSegment","basenameSafe","buildDiffTitleSegments","buildFileDiffPreviews","extractDiffFilePaths","toolTypeToIconName","TOOL_LABELS","Record","apply_patch","bash","edit","glob","grep","read","skill","todowrite","STATE_LABELS","error","input_streaming","running","completed","failed","ApplyPatchMetadataFile","filePath","additions","deletions","diff","before","after","normalizeToolType","value","replace","toLowerCase","toTitleCase","split","filter","token","length","map","toUpperCase","slice","join","getToolType","invocation","tool","getToolLabel","normalized","getStateLabel","state","status","includes","isErrorState","buildIndicator","type","icon","const","buildBaseTitle","detail","labelOverride","detailStyle","label","title","kind","text","bold","push","muted","truncate","monospace","stateLabel","getInputObject","input","Array","isArray","getOutputObject","output","getStringValue","trim","getObjectValue","getStateObject","key","normalizeFilePath","isUnifiedDiff","getApplyPatchMetadataObjects","metadata","Boolean","parseApplyPatchMetadataFile","entry","record","rawPath","relativePath","path","undefined","getApplyPatchMetadataFiles","files","entries","parsedFile","getApplyPatchInputFilePaths","changes","filePaths","change","from","Set","getApplyPatchDiffText","inputDiff","metadataDiff","fileDiffs","file","patchText","buildApplyPatchMetadataTitleSegments","seen","segments","has","add","fileName","getApplyPatchMetadataReferences","getOutputText","outputObject","returnDisplay","preview","stdout","content","parseSkillContentBlock","match","skillName","getSkillName","name","skill_name","buildFileLinkSegment","variant","prependErrorBlock","blocks","errorText","errorBlock","getDiffBlocks","diffText","language","original","modified","sideBySide","getDiffTitleSegments","getDiffReferences","STATE_LABELS","toTitleCase","getToolLabel","getStateLabel","isErrorState","buildIndicator","getStringValue","getObjectValue","Block","Item","buildApplyPatchMetadataTitleSegments","buildBaseTitle","buildFileLinkSegment","buildIndicator","getApplyPatchDiffText","getApplyPatchInputFilePaths","getApplyPatchMetadataFiles","getApplyPatchMetadataReferences","getDiffBlocks","getDiffReferences","getDiffTitleSegments","prependErrorBlock","ToolRenderer","renderApplyPatch","invocation","diffText","metadataFiles","inputFilePaths","title","undefined","diffSegments","length","push","map","filePath","blocks","file","before","after","type","language","original","modified","sideBySide","references","indicator","buildIndicator","Block","Item","buildBaseTitle","buildFileLinkSegment","buildIndicator","getDiffBlocks","getInputObject","getOutputObject","getStringValue","prependErrorBlock","ToolRenderer","buildEditDiff","original","modified","type","language","sideBySide","renderEdit","invocation","input","output","filePath","file_path","undefined","oldString","old_string","newString","new_string","title","push","diffBlocks","diff","indicator","blocks","getStringValue","buildIndicator","ToolPart","Block","Item","TitleSegment","getQuestionResponseText","parseQuestionPrompt","ToolRenderer","QuestionRendererDependencies","buildBaseTitle","invocation","detail","labelOverride","buildIndicator","prependErrorBlock","blocks","createQuestionRenderer","deps","responseText","state","output","metadata","prompt","input","block","type","questions","fieldLabel","length","undefined","indicator","title","expandable","Block","Item","buildBaseTitle","buildFileLinkSegment","buildIndicator","getInputObject","getOutputObject","getOutputText","getSkillName","getStringValue","parseSkillContentBlock","prependErrorBlock","ToolRenderer","renderRead","invocation","input","output","filePath","file_path","file","path","undefined","title","push","indicator","blocks","renderCommand","Parameters","label","command","outputText","type","language","code","stderr","exitCode","text","renderBash","renderShell","renderGrep","query","pattern","renderGlob","references","split","map","line","trim","filter","length","renderSkill","parsedOutput","skillName","renderedContent","content","getStringValue","buildIndicator","ToolPart","Block","Item","TitleSegment","ToolRenderer","TodoItem","label","checked","TodowriteRendererDependencies","buildBaseTitle","invocation","detail","labelOverride","buildIndicator","prependErrorBlock","blocks","getStringValue","value","trim","length","getObjectValue","Array","isArray","Record","parseTodoItem","todo","content","title","status","parseTodoItems","items","explicit","listSource","objectValue","todos","map","filter","createTodowriteRenderer","deps","inputTodos","state","input","outputTodos","output","todoState","countLabel","indicator","type","text","renderApplyPatch","renderEdit","createQuestionRenderer","buildBaseTitle","buildIndicator","prependErrorBlock","renderBash","renderGlob","renderGrep","renderRead","renderShell","renderSkill","createTodowriteRenderer","ToolRenderersMap","renderQuestion","renderTodowrite","createDefaultToolRenderers","apply_patch","bash","edit","glob","grep","question","read","shell","skill","todo_write","todowrite","ToolPart","Block","Item","TitleSegment","toolTypeToIconName","getToolNameLookupKeys","normalizeToolName","createDefaultToolRenderers","ToolRenderersMap","ToolTimelineBuilderOptions","STATE_LABELS","Record","error","toTitleCase","value","split","filter","token","length","map","toUpperCase","slice","join","getToolLabel","tool","normalized","replace","isErrorState","state","buildIndicator","invocation","status","type","icon","const","getStateLabel","includes","stringifyValue","undefined","JSON","stringify","isBlankValue","trim","Array","isArray","every","Object","values","getRecord","getString","getMediaType","record","mime_type","mediaType","mimeType","isImageMediaType","Boolean","startsWith","imageUrlPattern","getImageBlock","alt","data","src","url","test","getFileLikeOutput","filePath","path","filename","content","body","text","extensionLanguageBySuffix","css","html","js","json","jsx","md","py","ts","tsx","yaml","yml","getLanguageFromPath","extension","pop","toLowerCase","createLabeledBlocks","label","blocks","buildBlocksForArrayValue","entry","entryRecord","entryType","image","push","buildBlocksForValue","buildBlocksForFileLikeValue","fileLikeOutput","language","code","buildBlocksForAttachmentValue","attachmentName","attachment_name","attachmentId","attachment_file_id","attachmentFileId","imageBlock","fileBlocks","attachmentBlocks","buildGenericBlocks","toolLabel","errorText","input","output","createGenericItem","title","kind","bold","stateLabel","muted","indicator","isVisibleTitleSegment","segment","fileName","isVisibleBlock","block","original","modified","items","questions","references","isVisibleItem","item","hasTitle","some","hasBlocks","mergeToolRenderers","overrides","getRenderer","toolRenderers","rawTool","key","renderer","renderInvocation","options","rendered","buildTimelineDocFromInvocations","invocations","ComponentProps","lazy","Suspense","Editor","then","module","default","DiffEditor","props","$","_c","t0","_c","Avatar","Link","Span","MouseEvent","DiffBubble","Tooltip","TitleSegment","handleTitleLinkClick","event","HTMLAnchorElement","seg","Extract","kind","onOpenFile","filePath","stopPropagation","href","preventDefault","AvatarTitleSegment","t0","$","_c","t1","alt","src","t2","Symbol","for","t3","DiffTitleSegment","additions","deletions","fileName","path","t4","BubbleLinkTitleSegment","fontWeight","bold","undefined","isInteractive","Boolean","muted","t5","t6","textDecoration","color","t7","text","DefaultLinkTitleSegment","TextTitleSegment","isClickable","monospace","truncate","t8","t9","segment","t10","TitleInline","variant","_c","Tooltip","Avatar","Box","Button","Card","Timeline","ChakraTimeline","Image","Span","Stack","Text","ChevronUpIcon","ReactNode","useState","DiffEditor","ResourceBadge","ScrollArea","IconName","getIconComponent","TitleInline","QuestionFormBlockView","TodoListBlockView","TimelineDoc","items","Item","id","timestamp","indicator","Indicator","title","TitleSegment","blocks","Block","expandable","type","icon","color","src","alt","kind","text","bold","muted","truncate","monospace","fileName","filePath","additions","deletions","href","variant","TodoListBlockItem","label","checked","QuestionFormBlockOption","description","QuestionFormBlockQuestion","question","options","multiple","required","allowCustomAnswer","reactions","clap","language","code","editable","original","modified","sideBySide","placeholder","questions","references","caption","render","ctx","onOpenFile","IndicatorView","t0","$","_c","ind","t1","IndicatorIcon","t2","Symbol","for","t3","CodeBlock","BlockView","b","map","_temp","trim","ref","TimelineItemRow","item","itemKey","isOpen","canExpand","hasBlocks","onToggle","t4","length","undefined","seg","i","t5","block","i_0","t6","t7","TimelineFromJSON","data","expanded","setExpanded","getKey","_temp2","key","prev","toggle","idx_0","key_0","idx","it","Timeline","ChakraTimeline","_c","ScrollArea","_temp","_Fragment","_temp2","buildTimelineDocFromInvocations","normalizeToolName","ToolPart","TimelineFromJSON","ToolInvocationTimelineProps","invocations","labeledBlocks","hideQuestionForms","onOpenFile","filePath","isQuestionTool","invocation","tool","replace","hasToolOutput","output","state","trim","length","Array","isArray","Object","keys","undefined","ToolInvocationTimeline","props","$","_c","t0","t1","t2","Symbol","for","bb0","visibleInvocations","filter","_temp","data","t3","_c","_temp","Box","Image","Spinner","ReactNode","AlertMessage","ResourceBadge","RichMessage","Response","AlertPart","ChatMessagePart","ErrorPart","FilePart","SessionMessage","ToolPart","ToolInvocationTimeline","ToolInvocationTimelineProps","ToolInvocationTimelineComponent","props","MessagePartsProps","message","streaming","hideQuestionForms","onOpenFile","filePath","toolInvocationTimeline","isToolPart","part","type","filePartLabel","filename","url","split","pop","imageExtensionPattern","isImageFilePart","mediaType","startsWith","test","filePartThumbnail","undefined","openFilePart","window","open","getErrorMessage","trim","length","errorType","ALERT_COLOR_PALETTE","Record","info","warning","error","success","loading","collectToolInvocations","parts","startIndex","invocations","lookahead","nextPart","push","nextIndex","MessagePartsRenderer","$","_c","t0","RenderToolInvocationTimeline","t1","t2","id","nodes","partIndex","key","bb0","text","color","fontSize","fontWeight","status","title","_c","_Fragment","SessionMessageRole","TextPart","type","text","ReasoningPart","ToolPartActionType","ToolPartStatus","ToolPart","tool","callId","actionType","status","state","input","output","errorText","metadata","StepStartPart","snapshot","StepFinishPart","reason","cost","tokens","PatchPart","hash","files","FilePart","fileId","mediaType","filename","size","url","LoadingPart","ErrorPart","errorType","message","TokenUsagePart","inputTokens","outputTokens","cacheReadTokens","cacheWriteTokens","AlertPart","title","SessionMessagePart","ChatMessagePart","SessionMessage","id","role","parts","index","createdAt","modelId","providerId","reasoning","cache","read","write","QueuedFollowUp","prompt","attachments","Array","name","position","MessageOrigin","getMessageOrigin","isReasoningToolOnlyMessage","length","hasTextPart","some","part","isVisibleText","trim","isVisibleAlert","Boolean","isDisplayRenderablePart","isActivityPart","isActivityOnlyMessage","every","mergeBufferedActivity","messages","first","rest","flatMap","at","mergeReasoningToolOnlyMessages","merged","previous","push","normalizeChatMessagesForDisplay","options","streaming","normalized","activityBuffer","clearActivityBuffer","displayParts","filter","displayMessage","activity","trailingActivity","MessageGroup","userMessage","responses","getAssistantMessageActionTargetId","lastMessage","hasVisibleText","groupMessagesByTurn","groups","leadingResponses","Button","Flex","ReactNode","ChatMessage","messageFadeInProps","MessageActionPanel","MessagePartsRenderer","getMessageOrigin","SessionMessage","ChatMessageListResponseProps","message","streaming","hideQuestionForms","animate","showAssistantActions","ChatMessageListResponse","props","$","_c","t0","t1","undefined","t2","role","from","showActions","t3","t4","t5","t6","t7","StickyMessageToggleProps","label","onClick","actionPanel","StickyMessageToggle","_c","SessionMessage","STICKY_USER_MESSAGE_COLLAPSE_TEXT_THRESHOLD","STICKY_USER_MESSAGE_COLLAPSE_LINE_THRESHOLD","STICKY_USER_MESSAGE_COLLAPSED_MAX_HEIGHT","STICKY_USER_MESSAGE_EXPANDED_MAX_HEIGHT","SCROLL_BOUNDARY_EPSILON","StickyUserMessageScrollElement","clientHeight","scrollHeight","scrollTop","getMessageTextMetrics","message","parts","reduce","metrics","part","type","lineCount","text","split","length","textLength","isStickyUserMessageCollapsible","role","shouldStopStickyUserMessageWheel","element","deltaY","maxScrollTop","Math","max","Box","useVirtualizer","useEffect","useRef","WheelEvent","useStickToBottomContext","ChatMessage","messageFadeInProps","useMessageAnimationKeys","ChatMessageListResponse","StickyMessageToggle","isStickyUserMessageCollapsible","STICKY_USER_MESSAGE_COLLAPSED_MAX_HEIGHT","STICKY_USER_MESSAGE_EXPANDED_MAX_HEIGHT","shouldStopStickyUserMessageWheel","MessageActionPanel","MessagePartsRenderer","getAssistantMessageActionTargetId","MessageGroup","SessionMessage","ChatMessageListProps","leadingResponses","groups","streaming","hideActiveQuestionForms","expandedStickyMessageIds","Set","onToggleStickyMessage","messageId","onReady","StickyMessageGroupProps","group","hideQuestionForms","isExpanded","animate","ChatMessageListItem","type","key","message","showAssistantActions","groupIndex","ESTIMATED_TURN_HEIGHT","INITIAL_TAIL_VIEWPORT_HEIGHT","TAIL_READY_STABLE_FRAME_COUNT","TAIL_READY_FRAME_LIMIT","TAIL_READY_PIXEL_EPSILON","VIRTUAL_LIST_OVERSCAN","VIRTUAL_LIST_GAP","buildMessageListItems","leadingActionMessageId","map","const","id","userMessage","getEstimatedTailOffset","count","viewportHeight","estimatedTotalSize","Math","max","getInitialViewportHeight","scrollElement","HTMLElement","clientHeight","TailLayoutSnapshot","scrollTop","totalSize","isTailLayoutStable","current","previous","abs","readTailLayoutSnapshot","useTailReady","input","$","_c","itemCount","scrollRef","onReadyRef","t0","t1","t2","t3","requestAnimationFrame","frameId","checkedFrameCount","stableFrameCount","previousSnapshot","waitForStableTail","nextSnapshot","cancelAnimationFrame","handleExpandedStickyMessageWheel","event","currentTarget","deltaY","stopPropagation","getStickyMessageMaxHeight","isCollapsible","undefined","getStickyMessageBodyMaxHeight","isExpandedCollapsible","StickyMessageGroup","props","stickyMessageMaxHeight","toggleStickyMessage","responses","actionMessageId","t4","t5","t6","t7","t8","t9","t10","t11","t12","t13","t14","t15","t16","t17","t18","t19","renderListItem","item","Pick","animatedItemKeys","length","has","ChatMessageList","items","initialViewportHeight","virtualizer","HTMLDivElement","getScrollElement","estimateSize","getItemKey","index","overscan","gap","initialRect","width","height","initialOffset","getTotalSize","getVirtualItems","virtualItem","measureElement","top","start","_c","generateEditorStateFromString","createSerializedPromptState","input","JSON","stringify","Badge","Box","Icon","ChakraIcon","HStack","IconButton","Stack","Text","GripVertical","Pencil","Trash2","DragEvent","useState","QueuedFollowUp","QueuedFollowUpMoveDirection","QueuedFollowUpListProps","items","editingItemId","onEdit","item","onRemove","itemId","onMove","direction","steps","QueuedFollowUpRowProps","index","isFirst","isLast","isEditing","isDragTarget","onDragStart","onDragEnd","onDragOver","event","HTMLDivElement","onDrop","QueuedFollowUpRow","props","$","_c","canEdit","Boolean","canRemove","canDrag","dragLabel","t0","t1","t2","t3","undefined","t4","id","t5","event_0","t6","t7","t8","event_1","dataTransfer","effectAllowed","setData","t9","Symbol","for","t10","t11","prompt","t12","attachments","length","t13","t14","t15","t16","t17","t18","QueuedFollowUpList","draggedItemId","setDraggedItemId","dragTargetItemId","setDragTargetItemId","preventDefault","dropEffect","handleDragOver","itemId_0","sourceItemId","getData","sourceIndex","findIndex","targetIndex","item_0","Math","abs","handleDrop","item_1","map","_c","ChakraIcon","Stack","ReactNode","useEffect","useState","ReferenceItem","createSerializedPromptState","ChatInput","ChatInputQuestionPrompt","ChatInputQuestionResponse","QueuedFollowUp","QueuedFollowUpList","QueuedFollowUpMoveDirection","QueuedFollowUpComposerInput","queuedFollowUps","defaultValue","onChange","text","onSubmit","attachments","questionResponse","Promise","onUpdate","itemId","prompt","ChatPanelComposerProps","conversationKey","recentUserMessages","actions","attachedResources","attachmentList","chatInputAutoFocus","chatInputPlaceholder","chatInputQuestionPrompt","chatInputReferences","hasWorkspaceHub","inputDisabled","submitDisabled","onAttachFiles","files","File","onAttachText","onChatInputAddReference","resourceId","resourceType","onClearAttachments","onInterrupt","onQueuedFollowUpMove","direction","steps","onQueuedFollowUpRemove","onQueuedFollowUpUpdate","queuedComposer","ReturnType","useQueuedFollowUpComposer","streaming","workspaceHub","input","$","_c","editingItemId","setEditingItemId","editSeed","setEditSeed","focusSignal","setFocusSignal","inputValue","t0","t1","some","item","id","t2","Symbol","for","item_0","_temp","edit","t3","change","t4","text_0","submit","t5","Boolean","t6","isEditing","ChatPanelComposer","props","hasQueuedFollowUps","length","undefined","t7","t8","t9","t10","t11","t12","t13","signal","_c","_temp","HStack","Spinner","Text","useEffect","useRef","useState","formatElapsed","totalSeconds","seconds","Math","max","floor","minutes","String","padStart","hours","WorkingIndicator","props","$","_c","hidden","t0","undefined","elapsedSeconds","setElapsedSeconds","t1","Symbol","for","Date","now","startedAtRef","t2","t3","updateElapsed","current","timer","setInterval","clearInterval","t4","t5","t6","_c","Flex","MessageCircleIcon","ReactNode","useState","EmptyState","ReferenceItem","resolveActiveQuestionPrompt","ChatPrimitives","AutoScroll","getRecentUserPrompts","ChatInputQuestionPrompt","ChatInputQuestionResponse","ChatMessageList","ChatPanelComposer","useQueuedFollowUpComposer","groupMessagesByTurn","normalizeChatMessagesForDisplay","QueuedFollowUp","SessionMessage","QueuedFollowUpMoveDirection","WorkingIndicator","ChatPanelProps","conversationKey","messages","loading","streaming","emptyStateTitle","emptyStateDescription","emptyStateContent","loaderComponent","chatInputPlaceholder","chatInputDefaultValue","onSubmitMessage","text","attachments","questionResponse","Promise","onInterrupt","onAttachFiles","files","File","onAttachText","onChatInputChange","actions","attachedResources","onClearAttachments","attachmentList","approvalPrompt","workspaceHub","workspaceInitializing","inputDisabled","submitDisabled","chatInputQuestionPrompt","chatInputAutoFocus","queuedFollowUps","onQueuedFollowUpUpdate","itemId","prompt","onQueuedFollowUpRemove","onQueuedFollowUpMove","direction","steps","chatInputReferences","onChatInputAddReference","resourceId","resourceType","ChatPanel","props","$","_c","t0","t1","t2","t3","t4","t5","t6","t7","t8","undefined","t9","t10","hasMessages","messageListIdentity","messageListKey","t11","userMessageCount","merged","length","id","reduce","_temp","groups","leadingResponses","expandedStickyMessageIds","setExpandedStickyMessageIds","_temp2","readyMessageListKey","setReadyMessageListKey","showLoadingState","t12","Symbol","for","t13","defaultEmptyContent","emptyContent","hasWorkspaceHub","Boolean","t14","activeQuestionPrompt","hideActiveQuestionForms","showThinkingIndicator","isMessageViewportReady","t15","defaultValue","onChange","onSubmit","onUpdate","queuedComposer","t16","messageId","current","next","Set","has","delete","add","toggleStickyMessageExpanded","t17","t18","t19","t20","t21","t22","t23","t24","t25","t26","t27","t28","count","message","role","_c","EmptyState","defaultEmptyContent","Skeleton","Stack","ChatMessage","renderSkeletonLines","widths","map","width","index","ChatSkeleton","$","_c","t0","Symbol","for","t1","_c","Box","chakra","Flex","Portal","Stack","Text","PointerEvent","useState","ConversationBrowseItem","id","message","reply","ConversationBrowseProps","items","onSelect","floating","MIN_USER_MESSAGES","TICK_MIN_WIDTH","TICK_MAX_WIDTH","LENS_RADIUS","BrowseCardPosition","left","top","lensFactor","index","pointerIndex","distance","Math","abs","cos","PI","tickColor","ConversationBrowseCard","props","$","_c","item","position","t0","t1","t2","t3","t4","t5","ConversationBrowse","undefined","setPointerIndex","cardPosition","setCardPosition","length","event","rect","currentTarget","getBoundingClientRect","fraction","clientY","height","next","min","max","nextActiveIndex","round","right","handlePointerMove","activeIndex","activeItem","Symbol","for","insetInlineStart","bottom","bg","map","t6","t7","_c","Flex","HStack","Spinner","Text","AlertTriangle","ReactNode","WorkspaceHubStatus","ChatWorkspaceHubProps","workspaceControl","additions","deletions","action","status","statusLabel","HubStatus","props","$","_c","t0","Symbol","for","t1","t2","ChatWorkspaceHub","undefined","t3","t4","_c","Checkbox$1","AlertMessage","ResourceBadge","Tooltip$1","ScrollArea$1","EmptyState$1","RadioGroup$1","Radio","RichMessage","PromptEditor","DiffBubble","Fragment$1","ConversationRoot","chakra","StickToBottom","ConversationContent","$","c","children","rest","props","useStickToBottomContext","t0","scrollRef","t1","contentRef","t2","t3","t4","conversationScrollButtonContainerDefaultProps","ChatPrimitives","isAtBottom","scrollToBottom","AbsoluteCenter","IconButton","ArrowDownIcon","recipe","defineSlotRecipe","createSlotRecipeContext","ChatMessage","withProvider","withContext","formatToolInput","input","text","ApprovalPrompt","toolInput","formattedInput","toolName","Text","Code","ShieldX","onDeny","Button","t5","ShieldCheck","t6","onApprove","t7","HStack","t8","Box","Flex","DEFAULT_SIZE","DEFAULT_TONE","AttachmentList","attachments","size","tone","onRemove","onSelect","renderBadge","select","attachment","remove","rendered","Stack","shouldAutoScroll","args","previousUserMessageCount","userMessageCount","getNextAutoScrollState","conversationKey","scrollForNextAutoScrollState","next","AutoScroll","stateRef","useRef","useEffect","hasMessageText","resolveChatInputKeyboardAction","state","isDisabled","canSubmit","resolveChatInputButtonAction","streaming","hasQuestionPrompt","canInterrupt","shouldAttachPastedText","lineThreshold","createAttachmentEventHandlers","onAttachFiles","event","files","pastedText","onAttachText","textAttachmentPasteLineThreshold","preventSubmit","QuestionOptionContent","option","QuestionCheckboxOptionRow","editable","onToggle","checked","name","QuestionRadioOptions","selectedOption","onToggleOption","question","questionIndex","details","TodoListBlockView","items","_temp$4","QuestionFormBlockView","selectedOptionsByQuestion","customAnswersByQuestion","onCustomAnswerChange","questions","inputType","selectedOptions","Textarea","item","index","getQuestionSelectionKey","toggleQuestionOptionSelection","key","selected","alreadySelected","optionLabel","label","getQuestionPromptSignature","questionPrompt","getQuestionAnswerLines","lines","selectedLabels","customAnswer","answers","isCustomAnswersByQuestion","value","toCustomAnswersByQuestion","answerInput","trimmed","buildQuestionResponse","legacyText","hasCustomQuestions","buildQuestionAnswerValues","hasMissingRequiredQuestionAnswer","toQuestionFormQuestions","hasQuestionAnswer","QuestionStepTab","sourceQuestion","isAnswered","stepStateLabel","tabVariant","isActive","onSelectStep","Check","QuestionPromptStepper","activeQuestionIndex","setActiveQuestionIndex","useState","renderQuestionIndex","activeQuestion","hasMultipleQuestions","answer","t9","QuestionPromptControls","questionPromptSignature","SendButton","shortcut","title","ariaLabel","Pause","ArrowUp","icon","button","Fragment","Kbd","tooltipContent","Tooltip","Portal","getRecentUserPrompts","prompts","i","messages","message","part","movePromptHistory","count","direction","useChatInputHistory","options","editorRef","historyIndex","blocked","recentUserMessages","resetKey","signature","resetSignature","previousResetSignature","reset","onChange","change","movement","value_0","recall","ChatInputPlaceholder","placeholder","selectedChatInputBorderColor","focusPromptEditor","container","requestPromptEditorFocus","onFocus","useComposerFocus","autoFocus","containerRef","setIsSelected","handle","focusSignal","handle_0","ChatInput","restingBorderColor","recessed","submitting","setSubmitting","isSelected","editorState","setEditorState","defaultState","editorKey","setEditorKey","setText","getTextFromSerializedEditorState","setSelectedOptionsByQuestion","setCustomAnswersByQuestion","onChangeRef","previousQuestionPromptSignatureRef","resetText","history","handleContainerClick","resetEditor","key_0","shouldFocus","responseText","hasMissingRequiredSelection","actionState","onInterrupt","submitDisabled","buttonAction","messageTitle","submitMessage","questionResponse","onSubmit","attachedResources","onClearAttachments","runAction","action","attachmentEventHandlers","attachedToTop","attachmentList","current","key_1","question_0","questionIndex_0","current_0","actions","Spacer","submitTitle","isRecord","parseJsonObjectText","parsed","toInputRecord","getStringValue$2","getQuestionResponseText","stringValue","line","parseQuestionOption","parseQuestion","type","allowCustomAnswer","parseQuestionPrompt","record","isQuestionTool$1","resolveActiveQuestionPrompt","messageIndex","partIndex","messageFadeInProps","getNextMessageAnimationState","animatedKeys","seenKeys","itemKeysEqual","a","b","useMessageAnimationKeys","lastResultRef","itemKeys","isCopyablePart","getMessageCopyText","getMessageTimestampLabel","locale","MessageActionPanel","alwaysVisible","copyAlwaysVisible","isCopied","setIsCopied","copyResetTimeoutRef","copyText","timestampLabel","copyMessage","t10","messageActionPanelHoverStyles","jsx","Copy","t11","Response","normalizeToolName","getToolNameLookupKeys","normalized","compact","toolIconMap","Terminal","ListTree","FileText","FilePen","Trash2","FileDiff","FileUp","FileDown","Move","iconMap","DotIcon","AlertTriangle","Search","Globe","File","CircleQuestionMark","ListTodo","DEFAULT_TOOL_ICON","isToolIconName","getIconComponent","toolTypeToIconName","basenameSafe","idx","path","normalizeHeaderPath","token","isMinusHeader","isPlusHeader","isHunkHeader","isAddedLine","isDeletedLine","ensureFileChange","changes","filePath","incrementAdditions","incrementDeletions","processUnifiedDiffLine","currentPath","parseUnifiedDiff","diffText","buildDiffTitleSegments","file","extractDiffFilePaths","isDiffFileBoundary","isInvalidHunkBodyLine","appendHunkLine","original","modified","parseHunkBody","startIndex","parsePreview","oldHeader","buildFileDiffPreviews","previews","preview","nextIndex","TOOL_LABELS","STATE_LABELS$1","normalizeToolType","toTitleCase$1","getToolType","invocation","getToolLabel$1","getStateLabel$1","isErrorState$1","buildIndicator$1","buildBaseTitle","labelOverride","detail","detailStyle","stateLabel","getInputObject","getOutputObject","output","getStringValue$1","getObjectValue$1","getStateObject","normalizeFilePath","isUnifiedDiff","getApplyPatchMetadataObjects","parseApplyPatchMetadataFile","entry","rawPath","getApplyPatchMetadataFiles","metadata","entries","parsedFile","getApplyPatchInputFilePaths","filePaths","getApplyPatchDiffText","inputDiff","metadataDiff","fileDiffs","diff","patchText","buildApplyPatchMetadataTitleSegments","seen","segments","getApplyPatchMetadataReferences","getOutputText","outputObject","parseSkillContentBlock","match","getSkillName","buildFileLinkSegment","variant","prependErrorBlock","blocks","getDiffBlocks","getDiffTitleSegments","getDiffReferences","renderApplyPatch","metadataFiles","inputFilePaths","diffSegments","references","buildEditDiff","renderEdit","diffBlocks","createQuestionRenderer","deps","prompt","block","fieldLabel","buildIndicator","renderRead","renderCommand","outputText","stderr","renderBash","renderShell","renderGrep","renderGlob","renderSkill","parsedOutput","renderedContent","getStringValue","getObjectValue","parseTodoItem","todo","content","parseTodoItems","listSource","objectValue","createTodowriteRenderer","inputTodos","outputTodos","todoState","todos","countLabel","renderQuestion","renderTodowrite","createDefaultToolRenderers","STATE_LABELS","toTitleCase","getToolLabel","tool","isErrorState","getStateLabel","stringifyValue","isBlankValue","getRecord","getString","getMediaType","isImageMediaType","imageUrlPattern","getImageBlock","mediaType","data","url","getFileLikeOutput","extensionLanguageBySuffix","getLanguageFromPath","extension","createLabeledBlocks","buildBlocksForArrayValue","entryRecord","entryType","image","alt","buildBlocksForValue","buildBlocksForFileLikeValue","fileLikeOutput","buildBlocksForAttachmentValue","attachmentName","attachmentId","imageBlock","fileBlocks","attachmentBlocks","buildGenericBlocks","toolLabel","createGenericItem","isVisibleTitleSegment","segment","isVisibleBlock","isVisibleItem","hasTitle","hasBlocks","mergeToolRenderers","overrides","getRenderer","rawTool","renderer","toolRenderers","renderInvocation","buildTimelineDocFromInvocations","invocations","Editor","lazy","n","module","DiffEditor","Suspense","handleTitleLinkClick","stopPropagation","seg","onOpenFile","AvatarTitleSegment","Avatar","DiffTitleSegment","BubbleLinkTitleSegment","fontWeight","isInteractive","Link","DefaultLinkTitleSegment","TextTitleSegment","isClickable","Span","TitleInline","Timeline$1","Timeline","IndicatorView","ind","IndicatorIcon","CodeBlock","language","code","BlockView","Card","_temp$3","Image","ref","TimelineItemRow","isOpen","canExpand","itemKey","ChevronUpIcon","i_0","TimelineFromJSON","expanded","setExpanded","getKey","_temp2$1","prev","toggle","idx_0","it","isQuestionTool","hasToolOutput","ToolInvocationTimeline","hideQuestionForms","labeledBlocks","visibleInvocations","_temp$2","isToolPart","filePartLabel","imageExtensionPattern","isImageFilePart","filePartThumbnail","openFilePart","getErrorMessage","errorType","ALERT_COLOR_PALETTE","collectToolInvocations","lookahead","parts","nextPart","MessagePartsRenderer","RenderToolInvocationTimeline","toolInvocationTimeline","nodes","Spinner","getMessageOrigin","role","isVisibleText","isVisibleAlert","isDisplayRenderablePart","isActivityPart","isActivityOnlyMessage","mergeBufferedActivity","first","normalizeChatMessagesForDisplay","activityBuffer","clearActivityBuffer","displayParts","displayMessage","activity","trailingActivity","getAssistantMessageActionTargetId","lastMessage","groupMessagesByTurn","groups","leadingResponses","ChatMessageListResponse","animate","from","showActions","showAssistantActions","StickyMessageToggle","actionPanel","onClick","STICKY_USER_MESSAGE_COLLAPSED_MAX_HEIGHT","STICKY_USER_MESSAGE_EXPANDED_MAX_HEIGHT","SCROLL_BOUNDARY_EPSILON","getMessageTextMetrics","metrics","isStickyUserMessageCollapsible","textLength","lineCount","shouldStopStickyUserMessageWheel","maxScrollTop","element","deltaY","ESTIMATED_TURN_HEIGHT","INITIAL_TAIL_VIEWPORT_HEIGHT","TAIL_READY_STABLE_FRAME_COUNT","TAIL_READY_FRAME_LIMIT","TAIL_READY_PIXEL_EPSILON","VIRTUAL_LIST_OVERSCAN","VIRTUAL_LIST_GAP","buildMessageListItems","leadingActionMessageId","group","getEstimatedTailOffset","estimatedTotalSize","viewportHeight","getInitialViewportHeight","scrollElement","isTailLayoutStable","previous","readTailLayoutSnapshot","useTailReady","onReadyRef","onReady","itemCount","totalSize","frameId","checkedFrameCount","stableFrameCount","previousSnapshot","waitForStableTail","nextSnapshot","handleExpandedStickyMessageWheel","getStickyMessageMaxHeight","isCollapsible","isExpanded","getStickyMessageBodyMaxHeight","isExpandedCollapsible","StickyMessageGroup","stickyMessageMaxHeight","onToggleStickyMessage","toggleStickyMessage","actionMessageId","t12","t13","t14","t15","t16","t17","t18","t19","renderListItem","hideActiveQuestionForms","animatedItemKeys","expandedStickyMessageIds","ChatMessageList","initialViewportHeight","virtualizer","useVirtualizer","item_0","virtualItem","createSerializedPromptState","generateEditorStateFromString","QueuedFollowUpRow","canEdit","onEdit","canRemove","canDrag","isFirst","isLast","dragLabel","isDragTarget","isEditing","onDragOver","onDrop","event_0","onDragStart","event_1","Icon","GripVertical","onDragEnd","Badge","Pencil","QueuedFollowUpList","draggedItemId","setDraggedItemId","dragTargetItemId","setDragTargetItemId","itemId","handleDragOver","onMove","sourceItemId","itemId_0","sourceIndex","targetIndex","handleDrop","editingItemId","item_1","useQueuedFollowUpComposer","setEditingItemId","editSeed","setEditSeed","setFocusSignal","inputValue","defaultValue","queuedFollowUps","_temp$1","edit","onUpdate","text_0","submit","ChatPanelComposer","hasQueuedFollowUps","hasWorkspaceHub","onQueuedFollowUpUpdate","queuedComposer","onQueuedFollowUpMove","onQueuedFollowUpRemove","chatInputAutoFocus","chatInputPlaceholder","chatInputQuestionPrompt","chatInputReferences","inputDisabled","onChatInputAddReference","workspaceHub","signal","formatElapsed","seconds","totalSeconds","minutes","WorkingIndicator","hidden","elapsedSeconds","setElapsedSeconds","startedAtRef","updateElapsed","timer","ChatPanel","loading","chatInputDefaultValue","workspaceInitializing","hasMessages","messageListIdentity","messageListKey","merged","_temp","setExpandedStickyMessageIds","_temp2","readyMessageListKey","setReadyMessageListKey","showLoadingState","MessageCircleIcon","emptyStateDescription","emptyStateTitle","emptyContent","loaderComponent","emptyStateContent","activeQuestionPrompt","showThinkingIndicator","isMessageViewportReady","onChatInputChange","onSubmitMessage","messageId","toggleStickyMessageExpanded","t20","t21","t22","t23","t24","t25","t26","t27","t28","approvalPrompt","renderSkeletonLines","widths","Skeleton","width","ChatSkeleton","MIN_USER_MESSAGES","TICK_MIN_WIDTH","LENS_RADIUS","lensFactor","pointerIndex","distance","tickColor","ConversationBrowseCard","position","ConversationBrowse","floating","setPointerIndex","cardPosition","setCardPosition","rect","fraction","nextActiveIndex","handlePointerMove","activeIndex","activeItem","HubStatus","status","statusLabel","additions","deletions","ChatWorkspaceHub","workspaceControl"],"sources":["../src/components/chat-ui/components/ai-conversation.tsx","../src/components/chat-ui/components/ai-message.tsx","../src/components/chat-ui/components/approval-prompt.tsx","../src/components/chat-ui/components/attachment-list.tsx","../src/components/chat-ui/components/auto-scroll.tsx","../src/components/chat-ui/components/chat-input-actions.ts","../src/components/chat-ui/components/chat-input-attachments.ts","../src/components/chat-ui/components/timeline-tool-blocks.tsx","../src/components/chat-ui/components/chat-input-question-prompt.tsx","../src/components/chat-ui/components/send-button.tsx","../src/components/chat-ui/components/chat-input-history.ts","../src/components/chat-ui/components/use-chat-input-history.ts","../src/components/chat-ui/components/chat-input.tsx","../src/components/chat-ui/tool-rendering/question-prompt.ts","../src/components/chat-ui/components/chat-message-animation.ts","../src/components/chat-ui/components/message-action-panel.tsx","../src/components/chat-ui/components/ai-response.tsx","../src/components/chat-ui/utils/tool-name.ts","../src/components/chat-ui/utils/get-icon.ts","../src/components/chat-ui/utils/diff.ts","../src/components/chat-ui/tool-rendering/shared.ts","../src/components/chat-ui/tool-rendering/apply-patch-renderer.ts","../src/components/chat-ui/tool-rendering/edit-renderer.ts","../src/components/chat-ui/tool-rendering/question-renderer.ts","../src/components/chat-ui/tool-rendering/standard-renderers.ts","../src/components/chat-ui/tool-rendering/todowrite-renderer.ts","../src/components/chat-ui/tool-rendering/default-renderers.ts","../src/components/chat-ui/tool-rendering/build-timeline.ts","../src/components/diff-viewer/lazy-diff-editor.tsx","../src/components/chat-ui/components/timeline-title.tsx","../src/components/chat-ui/components/timeline.tsx","../src/components/chat-ui/components/tool-invocation-timeline.tsx","../src/components/chat-ui/components/message-parts-renderer.tsx","../src/components/chat-ui/components/message-types.ts","../src/components/chat-ui/components/chat-message-list-items.tsx","../src/components/chat-ui/components/chat-panel-sticky-user-message.ts","../src/components/chat-ui/components/chat-message-list.tsx","../src/components/chat-ui/utils/editor-state.ts","../src/components/chat-ui/components/queued-follow-up-list.tsx","../src/components/chat-ui/components/chat-panel-composer.tsx","../src/components/chat-ui/components/working-indicator.tsx","../src/components/chat-ui/components/chat-panel.tsx","../src/components/chat-ui/components/chat-skeleton.tsx","../src/components/chat-ui/components/conversation-browse.tsx","../src/components/chat-ui/components/workspace-hub.tsx"],"sourcesContent":["import type { HTMLChakraProps, IconButtonProps } from \"@chakra-ui/react\";\nimport { AbsoluteCenter, chakra, IconButton } from \"@chakra-ui/react\";\nimport { ArrowDownIcon } from \"lucide-react\";\nimport { StickToBottom as StickToBottomEl, useStickToBottomContext } from \"use-stick-to-bottom\";\nimport { ScrollArea } from \"@/components/primitives/scroll-area\";\n\nexport type ConversationRootProps = HTMLChakraProps<\"div\", React.ComponentProps<typeof StickToBottomEl>>;\n\nexport const conversationRootDefaultProps = {\n \"aria-roledescription\": \"conversation\",\n initial: \"instant\",\n resize: \"instant\",\n role: \"log\",\n} as const;\n\nexport const ConversationRoot = chakra(\n StickToBottomEl,\n {\n base: {\n position: \"relative\",\n flex: 1,\n overflow: \"hidden\",\n height: \"full\",\n },\n },\n {\n forwardProps: [\"initial\", \"resize\"],\n defaultProps: conversationRootDefaultProps,\n },\n);\n\nexport type ConversationContentProps = Omit<React.ComponentProps<typeof ScrollArea>, \"contentProps\" | \"viewportRef\">;\n\nexport const ConversationContent = (props: ConversationContentProps) => {\n const { children, ...rest } = props;\n const { contentRef, scrollRef } = useStickToBottomContext();\n\n return (\n <ScrollArea\n {...rest}\n height=\"full\"\n width=\"full\"\n showHorizontalScrollbar={false}\n viewportRef={scrollRef as React.Ref<HTMLDivElement>}\n contentRef={contentRef as React.Ref<HTMLDivElement>}\n verticalScrollbarProps={{ zIndex: 2 }}\n contentProps={{\n py: \"sm\",\n \"aria-live\": \"polite\",\n role: \"list\",\n }}\n >\n {children}\n </ScrollArea>\n );\n};\n\nexport type ConversationScrollButtonProps = IconButtonProps;\n\nexport const conversationScrollButtonContainerDefaultProps = {\n axis: \"horizontal\",\n bottom: \"md\",\n zIndex: 2,\n} as const;\n\nexport const ConversationScrollButton = (props: ConversationScrollButtonProps) => {\n const { isAtBottom, scrollToBottom } = useStickToBottomContext();\n\n return (\n !isAtBottom && (\n <AbsoluteCenter {...conversationScrollButtonContainerDefaultProps}>\n <IconButton rounded=\"full\" onClick={() => scrollToBottom()} variant=\"outline\" size=\"xs\" {...props}>\n <ArrowDownIcon size={16} />\n </IconButton>\n </AbsoluteCenter>\n )\n );\n};\n\nexport const ChatPrimitives = {\n Root: ConversationRoot,\n Viewport: ConversationContent,\n ScrollToBottom: ConversationScrollButton,\n} as const;\n","import type { HTMLChakraProps, RecipeVariantProps } from \"@chakra-ui/react\";\nimport { createSlotRecipeContext, defineSlotRecipe } from \"@chakra-ui/react\";\n\nconst recipe = defineSlotRecipe({\n className: \"ai-message\",\n slots: [\"root\", \"content\"],\n base: {\n root: {\n display: \"flex\",\n width: \"full\",\n alignItems: \"end\",\n justifyContent: \"end\",\n gap: \"sm\",\n \"&:has(+ [data-scope='ai-message'][data-part='root'])\": {\n mb: 0,\n },\n },\n content: {\n display: \"flex\",\n flexDirection: \"column\",\n gap: \"sm\",\n textStyle: \"sm\",\n overflow: \"hidden\",\n borderRadius: \"0\",\n },\n },\n variants: {\n from: {\n user: {\n root: {\n mb: \"md\",\n flexDirection: \"row\",\n },\n content: {\n borderTopWidth: \"1px\",\n borderRightWidth: \"1px\",\n borderBottomWidth: \"1px\",\n borderLeftWidth: \"1px\",\n borderColor: \"border.subtle\",\n bg: \"bg.subtle\",\n px: \"xs\",\n py: \"xs\",\n width: \"full\",\n borderRadius: \"0\",\n },\n },\n assistant: {\n root: {\n mb: \"md\",\n flexDirection: \"row\",\n justifyContent: \"start\",\n },\n content: {\n width: \"full\",\n px: \"xs\",\n },\n },\n developer: {\n root: {\n width: \"full\",\n flexDirection: \"row-reverse\",\n },\n content: {\n width: \"full\",\n },\n },\n },\n size: {\n sm: {\n root: { gap: \"xs\" },\n content: { textStyle: \"xs\" },\n },\n md: {},\n lg: {\n root: { gap: \"md\" },\n content: { textStyle: \"md\" },\n },\n },\n shape: {\n rounded: {\n content: { rounded: \"0\" },\n },\n pill: {\n content: { rounded: \"0\" },\n },\n square: {\n content: { rounded: \"0\" },\n },\n },\n },\n defaultVariants: {\n from: \"user\",\n size: \"md\",\n shape: \"rounded\",\n },\n});\n\nconst { withProvider, withContext } = createSlotRecipeContext({ recipe });\n\ntype VariantProps = RecipeVariantProps<typeof recipe>;\n\nexport interface MessageRootProps extends HTMLChakraProps<\"div\">, VariantProps {}\nexport const MessageRoot = withProvider<HTMLDivElement, MessageRootProps>(\"div\", \"root\");\n\nexport interface MessageContentProps extends HTMLChakraProps<\"div\">, VariantProps {}\nexport const MessageContent = withContext<HTMLDivElement, MessageContentProps>(\"div\", \"content\");\n\nexport const ChatMessage = {\n Root: MessageRoot,\n Content: MessageContent,\n} as const;\n","import { Box, Button, Code, Flex, HStack, Text } from \"@chakra-ui/react\";\nimport { ShieldCheck, ShieldX } from \"lucide-react\";\nimport { ScrollArea } from \"@/components/primitives/scroll-area\";\n\ninterface ApprovalPromptProps {\n toolName: string;\n toolInput?: unknown;\n onApprove: () => void;\n onDeny: () => void;\n}\n\nconst formatToolInput = (input: unknown) => {\n if (input == null) return null;\n\n const text = typeof input === \"string\" ? input : JSON.stringify(input, null, 2);\n if (text.length === 0) return null;\n\n const truncated = text.length > 200 ? `${text.slice(0, 200)}...` : text;\n return truncated;\n};\n\nexport const ApprovalPrompt = (props: ApprovalPromptProps) => {\n const { toolName, toolInput, onApprove, onDeny } = props;\n const formattedInput = formatToolInput(toolInput);\n\n return (\n <Box px=\"sm\" py=\"xs\" mx=\"sm\" borderWidth=\"1px\" borderColor=\"border.warning\" borderRadius=\"lg\" bg=\"bg.warning\">\n <Flex direction=\"column\" gap=\"xs\">\n <Text textStyle=\"label/S/medium\" color=\"fg\">\n Allow <Code size=\"sm\">{toolName}</Code>?\n </Text>\n\n {formattedInput ? (\n <ScrollArea maxH=\"6rem\">\n <Code size=\"sm\" whiteSpace=\"pre-wrap\" display=\"block\" width=\"100%\">\n {formattedInput}\n </Code>\n </ScrollArea>\n ) : null}\n\n <HStack gap=\"xs\" justifyContent=\"flex-end\">\n <Button size=\"xs\" variant=\"outline\" onClick={onDeny}>\n <ShieldX size={14} />\n Deny\n </Button>\n <Button size=\"xs\" colorPalette=\"green\" onClick={onApprove}>\n <ShieldCheck size={14} />\n Allow\n </Button>\n </HStack>\n </Flex>\n </Box>\n );\n};\n","import { Stack } from \"@chakra-ui/react\";\nimport type { ReactNode } from \"react\";\nimport { Fragment } from \"react\";\nimport type { ResourceBadgeProps } from \"@/components/primitives/resource-badge\";\nimport { ResourceBadge } from \"@/components/primitives/resource-badge\";\n\nexport type AttachmentListRenderBadge = (props: AttachmentListItemRenderProps) => ReactNode;\n\nexport interface AttachmentListItemRenderProps {\n attachmentId: string;\n onSelect?: () => void;\n onRemove?: () => void;\n size: ResourceBadgeProps[\"size\"];\n tone: ResourceBadgeProps[\"tone\"];\n}\n\nexport interface AttachmentListProps {\n attachments?: string[];\n onSelect?: (attachmentId: string) => void;\n onRemove?: (attachmentId: string) => void;\n renderBadge?: AttachmentListRenderBadge;\n size?: ResourceBadgeProps[\"size\"];\n tone?: ResourceBadgeProps[\"tone\"];\n}\n\nconst DEFAULT_SIZE: NonNullable<ResourceBadgeProps[\"size\"]> = \"md\";\nconst DEFAULT_TONE: NonNullable<ResourceBadgeProps[\"tone\"]> = \"neutral\";\n\n/**\n * Simple attachment list component that displays resource badges.\n *\n */\nexport const AttachmentList = (props: AttachmentListProps) => {\n const { attachments = [], onSelect, onRemove, renderBadge, size = DEFAULT_SIZE, tone = DEFAULT_TONE } = props;\n\n if (attachments.length === 0) return null;\n\n return (\n <Stack marginBottom=\"sm\" gap=\"1\" flexDir=\"row\" flexWrap=\"wrap\">\n {attachments.map((attachment) => {\n const select = onSelect ? () => onSelect(attachment) : undefined;\n const remove = onRemove ? () => onRemove(attachment) : undefined;\n\n if (renderBadge) {\n const rendered = renderBadge({ attachmentId: attachment, onSelect: select, onRemove: remove, size, tone });\n return <Fragment key={attachment}>{rendered}</Fragment>;\n }\n\n return (\n <ResourceBadge\n key={attachment}\n fileName={attachment}\n onSelect={select}\n onRemove={remove}\n size={size}\n tone={tone}\n />\n );\n })}\n </Stack>\n );\n};\n","import { useEffect, useRef } from \"react\";\nimport { useStickToBottomContext } from \"use-stick-to-bottom\";\n\nexport interface AutoScrollProps {\n userMessageCount: number;\n conversationKey?: string | null;\n}\n\ninterface ShouldAutoScrollArgs {\n previousUserMessageCount: number;\n userMessageCount: number;\n}\n\nexport interface AutoScrollState {\n conversationKey: string | null;\n userMessageCount: number;\n}\n\ninterface NextAutoScrollStateArgs {\n state: AutoScrollState;\n conversationKey?: string | null;\n userMessageCount: number;\n}\n\ninterface ScrollForNextAutoScrollStateArgs extends NextAutoScrollStateArgs {\n scrollToBottom: (animation?: \"instant\") => void;\n}\n\nexport const shouldAutoScroll = (args: ShouldAutoScrollArgs) => {\n const { previousUserMessageCount, userMessageCount } = args;\n\n if (previousUserMessageCount === 0) {\n return false;\n }\n\n return userMessageCount > previousUserMessageCount;\n};\n\nexport const getNextAutoScrollState = (args: NextAutoScrollStateArgs) => {\n const conversationKey = args.conversationKey ?? null;\n\n if (args.state.conversationKey !== conversationKey) {\n return {\n shouldScroll: false,\n state: {\n conversationKey,\n userMessageCount: args.userMessageCount,\n },\n };\n }\n\n return {\n shouldScroll: shouldAutoScroll({\n previousUserMessageCount: args.state.userMessageCount,\n userMessageCount: args.userMessageCount,\n }),\n state: {\n conversationKey,\n userMessageCount: Math.max(args.state.userMessageCount, args.userMessageCount),\n },\n };\n};\n\nexport const scrollForNextAutoScrollState = (args: ScrollForNextAutoScrollStateArgs) => {\n const next = getNextAutoScrollState(args);\n\n if (next.shouldScroll) {\n args.scrollToBottom(\"instant\");\n }\n\n return next;\n};\n\nexport function AutoScroll(props: AutoScrollProps) {\n const { conversationKey, userMessageCount } = props;\n const { scrollToBottom } = useStickToBottomContext();\n const stateRef = useRef<AutoScrollState>({\n conversationKey: conversationKey ?? null,\n userMessageCount,\n });\n\n useEffect(() => {\n const next = scrollForNextAutoScrollState({\n state: stateRef.current,\n conversationKey,\n userMessageCount,\n scrollToBottom,\n });\n\n stateRef.current = next.state;\n }, [conversationKey, userMessageCount, scrollToBottom]);\n\n return null;\n}\n","interface ChatInputActionState {\n canInterrupt: boolean;\n /** False while the runtime cannot accept a message, for example without a model. */\n canSubmit: boolean;\n hasQuestionPrompt: boolean;\n isDisabled: boolean;\n streaming: boolean;\n text: string;\n}\n\nexport type ChatInputAction = \"interrupt\" | \"none\" | \"submit\";\n\nconst hasMessageText = (text: string) => text.trim().length > 0;\n\nexport const resolveChatInputKeyboardAction = (state: ChatInputActionState): ChatInputAction => {\n const { canSubmit, isDisabled, text } = state;\n if (isDisabled || !canSubmit || !hasMessageText(text)) return \"none\";\n return \"submit\";\n};\n\nexport const resolveChatInputButtonAction = (state: ChatInputActionState): ChatInputAction => {\n const { canInterrupt, canSubmit, hasQuestionPrompt, isDisabled, streaming, text } = state;\n if (isDisabled) return \"none\";\n if (canSubmit && hasMessageText(text)) return \"submit\";\n if (streaming && !hasQuestionPrompt) return canInterrupt ? \"interrupt\" : \"none\";\n return \"none\";\n};\n","import type { ClipboardEvent, DragEvent } from \"react\";\n\nexport const DEFAULT_TEXT_ATTACHMENT_PASTE_LINE_THRESHOLD = 200;\n\nexport const shouldAttachPastedText = (text: string, lineThreshold = DEFAULT_TEXT_ATTACHMENT_PASTE_LINE_THRESHOLD) =>\n text.length > 0 && text.split(/\\r\\n|\\r|\\n/).length > lineThreshold;\n\nexport const createAttachmentEventHandlers = (input: {\n onAttachFiles?: (files: File[]) => void;\n onAttachText?: (text: string) => void;\n textAttachmentPasteLineThreshold: number;\n}) => {\n const { onAttachFiles, onAttachText, textAttachmentPasteLineThreshold } = input;\n\n const onPasteCapture = (event: ClipboardEvent<HTMLDivElement>) => {\n const files = Array.from(event.clipboardData.files ?? []);\n if (files.length > 0 && onAttachFiles) {\n event.preventDefault();\n onAttachFiles(files);\n return;\n }\n\n const pastedText = event.clipboardData.getData(\"text/plain\");\n if (onAttachText && shouldAttachPastedText(pastedText, textAttachmentPasteLineThreshold)) {\n event.preventDefault();\n onAttachText(pastedText);\n }\n };\n\n const onDropCapture = (event: DragEvent<HTMLDivElement>) => {\n const files = Array.from(event.dataTransfer.files ?? []);\n if (files.length === 0 || !onAttachFiles) return;\n\n event.preventDefault();\n onAttachFiles(files);\n };\n\n const onDragOver = (event: DragEvent<HTMLDivElement>) => {\n if (!onAttachFiles || !Array.from(event.dataTransfer.types).includes(\"Files\")) return;\n event.preventDefault();\n };\n\n return { onDragOver, onDropCapture, onPasteCapture };\n};\n","import { Box, Stack, Text, Textarea } from \"@chakra-ui/react\";\nimport type { FormEvent } from \"react\";\nimport { Checkbox } from \"@/components/primitives/checkbox\";\nimport { Radio, RadioGroup } from \"@/components/primitives/radio\";\nimport type { QuestionFormBlockQuestion, TodoListBlockItem } from \"./timeline\";\n\nconst preventSubmit = (event: FormEvent) => {\n event.preventDefault();\n};\n\ninterface QuestionFormBlockViewProps {\n questions: QuestionFormBlockQuestion[];\n editable?: boolean;\n selectedOptionsByQuestion?: Record<string, string[]>;\n customAnswersByQuestion?: Record<string, string>;\n onToggleOption?: (question: QuestionFormBlockQuestion, questionIndex: number, optionLabel: string) => void;\n onCustomAnswerChange?: (question: QuestionFormBlockQuestion, questionIndex: number, answer: string) => void;\n}\n\nconst QuestionOptionContent = (props: { option: QuestionFormBlockQuestion[\"options\"][number] }) => {\n const { option } = props;\n\n return (\n <Stack gap=\"0\" minWidth=\"0\">\n <Text textStyle=\"label/S/regular\" color=\"fg\">\n {option.label}\n </Text>\n {option.description ? (\n <Text textStyle=\"label/XS/regular\" color=\"fg.muted\">\n {option.description}\n </Text>\n ) : null}\n </Stack>\n );\n};\n\nconst QuestionCheckboxOptionRow = (props: {\n option: QuestionFormBlockQuestion[\"options\"][number];\n name: string;\n checked: boolean;\n editable: boolean;\n onToggle: () => void;\n}) => {\n const { option, name, checked, editable, onToggle } = props;\n\n return (\n <Checkbox\n name={name}\n checked={checked}\n readOnly={!editable}\n aria-readonly={editable ? undefined : \"true\"}\n inputProps={editable ? undefined : { tabIndex: -1 }}\n alignItems=\"flex-start\"\n onCheckedChange={editable ? onToggle : undefined}\n >\n <QuestionOptionContent option={option} />\n </Checkbox>\n );\n};\n\nconst QuestionRadioOptions = (props: {\n question: QuestionFormBlockQuestion;\n questionIndex: number;\n name: string;\n selectedOption?: string;\n editable: boolean;\n onToggleOption?: (question: QuestionFormBlockQuestion, questionIndex: number, optionLabel: string) => void;\n}) => {\n const { question, questionIndex, name, selectedOption, editable, onToggleOption } = props;\n\n return (\n <RadioGroup\n name={name}\n value={selectedOption ?? null}\n readOnly={!editable}\n aria-readonly={editable ? undefined : \"true\"}\n display=\"flex\"\n flexDirection=\"column\"\n gap=\"xs\"\n onValueChange={\n editable\n ? (details) => {\n if (details.value) onToggleOption?.(question, questionIndex, details.value);\n }\n : undefined\n }\n >\n {question.options.map((option) => (\n <Radio\n key={option.label}\n value={option.label}\n inputProps={editable ? undefined : { tabIndex: -1 }}\n alignItems=\"flex-start\"\n >\n <QuestionOptionContent option={option} />\n </Radio>\n ))}\n </RadioGroup>\n );\n};\n\nexport const TodoListBlockView = (props: { items: TodoListBlockItem[] }) => {\n const { items } = props;\n\n return (\n <Stack as=\"ul\" gap=\"0\" listStyleType=\"none\" margin=\"0\" padding=\"0\">\n {items.map((item, index) => (\n <Box as=\"li\" key={`${item.label}-${index}`}>\n <Checkbox checked={item.checked} readOnly aria-readonly=\"true\" inputProps={{ tabIndex: -1 }} size=\"xs\">\n <Text textStyle=\"label/XS/regular\" color=\"fg\">\n {item.label}\n </Text>\n </Checkbox>\n </Box>\n ))}\n </Stack>\n );\n};\n\nexport const QuestionFormBlockView = (props: QuestionFormBlockViewProps) => {\n const {\n questions,\n editable = false,\n selectedOptionsByQuestion = {},\n customAnswersByQuestion = {},\n onToggleOption,\n onCustomAnswerChange,\n } = props;\n\n return (\n <Stack as=\"form\" gap=\"sm\" onSubmit={preventSubmit} aria-label=\"Question form\">\n {questions.map((question, questionIndex) => {\n const name = question.id ?? `question-${questionIndex}`;\n const inputType = question.multiple ? \"checkbox\" : \"radio\";\n const selectedOptions = selectedOptionsByQuestion[name] ?? [];\n\n return (\n <Stack\n as=\"fieldset\"\n key={name}\n gap=\"xs\"\n borderWidth=\"1px\"\n borderColor=\"border.subtle\"\n borderRadius=\"sm\"\n padding=\"sm\"\n minWidth=\"0\"\n >\n <Text as=\"legend\" textStyle=\"label/S/medium\" color=\"fg\" paddingX=\"2xs\">\n {question.question}\n </Text>\n {inputType === \"radio\" ? (\n <QuestionRadioOptions\n question={question}\n questionIndex={questionIndex}\n name={name}\n selectedOption={selectedOptions[0]}\n editable={editable}\n onToggleOption={onToggleOption}\n />\n ) : (\n question.options.map((option) => (\n <QuestionCheckboxOptionRow\n key={option.label}\n option={option}\n name={name}\n checked={selectedOptions.includes(option.label)}\n editable={editable}\n onToggle={() => onToggleOption?.(question, questionIndex, option.label)}\n />\n ))\n )}\n {question.allowCustomAnswer ? (\n <Textarea\n readOnly={!editable}\n aria-readonly={editable ? undefined : \"true\"}\n value={customAnswersByQuestion[name] ?? \"\"}\n placeholder={editable ? \"Answer...\" : \"Custom answer\"}\n aria-label={question.question}\n rows={2}\n borderWidth=\"1px\"\n borderColor=\"border.subtle\"\n borderRadius=\"sm\"\n padding=\"xs\"\n resize={editable ? \"vertical\" : \"none\"}\n color=\"fg\"\n onChange={(event) => onCustomAnswerChange?.(question, questionIndex, event.currentTarget.value)}\n />\n ) : null}\n </Stack>\n );\n })}\n </Stack>\n );\n};\n","import { Button, HStack, Stack } from \"@chakra-ui/react\";\nimport { Check } from \"lucide-react\";\nimport { useState } from \"react\";\nimport { Tooltip } from \"@/components/primitives/tooltip\";\nimport { QuestionFormBlockView } from \"./timeline-tool-blocks\";\n\nexport interface ChatInputQuestionOption {\n label: string;\n description?: string;\n}\n\nexport interface ChatInputQuestion {\n id?: string;\n question: string;\n options: ChatInputQuestionOption[];\n multiple?: boolean;\n required?: boolean;\n allowCustomAnswer?: boolean;\n}\n\nexport interface ChatInputQuestionPrompt {\n questions: ChatInputQuestion[];\n}\n\nexport interface ChatInputQuestionResponse {\n answers: string[][];\n}\n\nexport type ChatInputQuestionCustomAnswers = Record<string, string>;\n\ninterface QuestionPromptControlsProps {\n questionPrompt: ChatInputQuestionPrompt;\n selectedOptionsByQuestion: Record<string, string[]>;\n customAnswersByQuestion: ChatInputQuestionCustomAnswers;\n onToggleOption: (question: ChatInputQuestion, questionIndex: number, optionLabel: string) => void;\n onCustomAnswerChange: (question: ChatInputQuestion, questionIndex: number, answer: string) => void;\n}\n\ninterface QuestionPromptStepperProps extends QuestionPromptControlsProps {\n questions: ReturnType<typeof toQuestionFormQuestions>;\n}\n\nexport const getQuestionSelectionKey = (question: ChatInputQuestion, index: number) =>\n question.id ?? `question-${index}`;\n\n// Single-choice questions swap the answer; multiple-choice questions toggle one option.\nexport const toggleQuestionOptionSelection = (\n selectedOptionsByQuestion: Record<string, string[]>,\n question: ChatInputQuestion,\n questionIndex: number,\n optionLabel: string,\n) => {\n const key = getQuestionSelectionKey(question, questionIndex);\n const selected = selectedOptionsByQuestion[key] ?? [];\n const alreadySelected = selected.includes(optionLabel);\n if (question.multiple) {\n return {\n ...selectedOptionsByQuestion,\n [key]: alreadySelected ? selected.filter((label) => label !== optionLabel) : [...selected, optionLabel],\n };\n }\n return { ...selectedOptionsByQuestion, [key]: alreadySelected ? [] : [optionLabel] };\n};\n\nexport const getQuestionPromptSignature = (questionPrompt: ChatInputQuestionPrompt | undefined) => {\n if (!questionPrompt) return \"\";\n\n return JSON.stringify(\n questionPrompt.questions.map((question, index) => ({\n id: getQuestionSelectionKey(question, index),\n question: question.question,\n multiple: Boolean(question.multiple),\n required: Boolean(question.required),\n allowCustomAnswer: Boolean(question.allowCustomAnswer),\n options: question.options.map((option) => ({\n label: option.label,\n description: option.description ?? \"\",\n })),\n })),\n );\n};\n\nconst getQuestionAnswerLines = (\n questionPrompt: ChatInputQuestionPrompt,\n selectedOptionsByQuestion: Record<string, string[]>,\n customAnswersByQuestion: ChatInputQuestionCustomAnswers,\n) => {\n const lines: string[] = [];\n\n for (let index = 0; index < questionPrompt.questions.length; index += 1) {\n const question = questionPrompt.questions[index];\n const key = getQuestionSelectionKey(question, index);\n const selectedLabels = selectedOptionsByQuestion[key] ?? [];\n const customAnswer = customAnswersByQuestion[key]?.trim();\n const answers = customAnswer ? [...selectedLabels, customAnswer] : selectedLabels;\n if (answers.length === 0) continue;\n\n lines.push(`${question.question}: ${answers.join(\", \")}`);\n }\n\n return lines;\n};\n\nconst isCustomAnswersByQuestion = (\n value: ChatInputQuestionCustomAnswers | string,\n): value is ChatInputQuestionCustomAnswers => typeof value !== \"string\";\n\nconst toCustomAnswersByQuestion = (\n questionPrompt: ChatInputQuestionPrompt,\n answerInput: ChatInputQuestionCustomAnswers | string,\n) => {\n if (isCustomAnswersByQuestion(answerInput)) return answerInput;\n\n const trimmed = answerInput.trim();\n if (trimmed.length === 0) return {};\n\n const answers: ChatInputQuestionCustomAnswers = {};\n for (let index = 0; index < questionPrompt.questions.length; index += 1) {\n const question = questionPrompt.questions[index];\n if (!question.allowCustomAnswer) continue;\n answers[getQuestionSelectionKey(question, index)] = trimmed;\n }\n\n return answers;\n};\n\nexport const buildQuestionResponse = (\n questionPrompt: ChatInputQuestionPrompt | undefined,\n selectedOptionsByQuestion: Record<string, string[]>,\n answerInput: ChatInputQuestionCustomAnswers | string,\n) => {\n if (!questionPrompt) return typeof answerInput === \"string\" ? answerInput.trim() : \"\";\n\n const customAnswersByQuestion = toCustomAnswersByQuestion(questionPrompt, answerInput);\n const lines = getQuestionAnswerLines(questionPrompt, selectedOptionsByQuestion, customAnswersByQuestion);\n const legacyText = typeof answerInput === \"string\" ? answerInput.trim() : \"\";\n const hasCustomQuestions = questionPrompt.questions.some((question) => question.allowCustomAnswer);\n\n if (legacyText.length > 0 && !hasCustomQuestions) {\n lines.push(`Additional response: ${legacyText}`);\n }\n\n return lines.join(\"\\n\");\n};\n\nexport const buildQuestionAnswerValues = (\n questionPrompt: ChatInputQuestionPrompt,\n selectedOptionsByQuestion: Record<string, string[]>,\n answerInput: ChatInputQuestionCustomAnswers | string,\n) => {\n const customAnswersByQuestion = toCustomAnswersByQuestion(questionPrompt, answerInput);\n\n return questionPrompt.questions.map((question, index) => {\n const key = getQuestionSelectionKey(question, index);\n const selectedLabels = selectedOptionsByQuestion[key] ?? [];\n const customAnswer = customAnswersByQuestion[key]?.trim();\n return customAnswer ? [...selectedLabels, customAnswer] : selectedLabels;\n });\n};\n\nexport const hasMissingRequiredQuestionAnswer = (\n questionPrompt: ChatInputQuestionPrompt | undefined,\n selectedOptionsByQuestion: Record<string, string[]>,\n answerInput: ChatInputQuestionCustomAnswers | string,\n) => {\n if (!questionPrompt) return false;\n\n const customAnswersByQuestion = toCustomAnswersByQuestion(questionPrompt, answerInput);\n\n for (let index = 0; index < questionPrompt.questions.length; index += 1) {\n const question = questionPrompt.questions[index];\n if (!question.required) continue;\n\n const key = getQuestionSelectionKey(question, index);\n const hasSelectedOption = (selectedOptionsByQuestion[key] ?? []).length > 0;\n if (hasSelectedOption) continue;\n if (question.allowCustomAnswer && customAnswersByQuestion[key]?.trim()) continue;\n\n return true;\n }\n\n return false;\n};\n\nconst toQuestionFormQuestions = (questionPrompt: ChatInputQuestionPrompt) =>\n questionPrompt.questions.map((question, index) => ({\n id: getQuestionSelectionKey(question, index),\n question: question.question,\n options: question.options,\n multiple: Boolean(question.multiple),\n required: Boolean(question.required),\n allowCustomAnswer: Boolean(question.allowCustomAnswer),\n }));\n\ntype QuestionFormQuestion = ReturnType<typeof toQuestionFormQuestions>[number];\n\ninterface QuestionStepTabProps {\n question: QuestionFormQuestion;\n sourceQuestion: ChatInputQuestion;\n questionIndex: number;\n isActive: boolean;\n selectedOptionsByQuestion: Record<string, string[]>;\n customAnswersByQuestion: ChatInputQuestionCustomAnswers;\n onSelectStep: (questionIndex: number) => void;\n}\n\nconst hasQuestionAnswer = (\n question: ChatInputQuestion,\n questionIndex: number,\n selectedOptionsByQuestion: Record<string, string[]>,\n customAnswersByQuestion: ChatInputQuestionCustomAnswers,\n) => {\n const key = getQuestionSelectionKey(question, questionIndex);\n return (selectedOptionsByQuestion[key] ?? []).length > 0 || Boolean(customAnswersByQuestion[key]?.trim());\n};\n\nconst QuestionStepTab = (props: QuestionStepTabProps) => {\n const {\n question,\n sourceQuestion,\n questionIndex,\n isActive,\n selectedOptionsByQuestion,\n customAnswersByQuestion,\n onSelectStep,\n } = props;\n const isAnswered = hasQuestionAnswer(\n sourceQuestion,\n questionIndex,\n selectedOptionsByQuestion,\n customAnswersByQuestion,\n );\n const stepStateLabel = isAnswered ? \"answered\" : \"not answered\";\n const tabVariant = isActive ? \"outline\" : \"ghost\";\n\n return (\n <Tooltip content={question.question}>\n <Button\n id={`question-step-tab-${question.id}`}\n role=\"tab\"\n aria-label={`${question.question} (${stepStateLabel})`}\n aria-selected={isActive}\n aria-controls={`question-step-panel-${question.id}`}\n size=\"xs\"\n variant={tabVariant}\n minW=\"8\"\n onClick={() => onSelectStep(questionIndex)}\n >\n {isAnswered ? <Check aria-hidden=\"true\" /> : questionIndex + 1}\n </Button>\n </Tooltip>\n );\n};\n\nconst QuestionPromptStepper = (props: QuestionPromptStepperProps) => {\n const { questionPrompt, selectedOptionsByQuestion, customAnswersByQuestion, onToggleOption, onCustomAnswerChange } =\n props;\n const { questions } = props;\n const [activeQuestionIndex, setActiveQuestionIndex] = useState(0);\n const renderQuestionIndex = Math.min(activeQuestionIndex, questions.length - 1);\n const activeQuestion = questions[renderQuestionIndex];\n const hasMultipleQuestions = questions.length > 1;\n\n return (\n <Stack gap=\"xs\" pb=\"sm\">\n {hasMultipleQuestions ? (\n <HStack role=\"tablist\" aria-label=\"Question steps\" gap=\"1\" minWidth=\"0\">\n {questions.map((question, questionIndex) => (\n <QuestionStepTab\n key={question.id}\n question={question}\n sourceQuestion={questionPrompt.questions[questionIndex]}\n questionIndex={questionIndex}\n isActive={questionIndex === renderQuestionIndex}\n selectedOptionsByQuestion={selectedOptionsByQuestion}\n customAnswersByQuestion={customAnswersByQuestion}\n onSelectStep={setActiveQuestionIndex}\n />\n ))}\n </HStack>\n ) : null}\n <Stack\n id={`question-step-panel-${activeQuestion.id}`}\n role={hasMultipleQuestions ? \"tabpanel\" : undefined}\n aria-labelledby={hasMultipleQuestions ? `question-step-tab-${activeQuestion.id}` : undefined}\n gap=\"0\"\n >\n <QuestionFormBlockView\n questions={[activeQuestion]}\n editable\n selectedOptionsByQuestion={selectedOptionsByQuestion}\n customAnswersByQuestion={customAnswersByQuestion}\n onToggleOption={(_question, _questionIndex, optionLabel) => {\n onToggleOption(questionPrompt.questions[renderQuestionIndex], renderQuestionIndex, optionLabel);\n }}\n onCustomAnswerChange={(_question, _questionIndex, answer) => {\n onCustomAnswerChange(questionPrompt.questions[renderQuestionIndex], renderQuestionIndex, answer);\n }}\n />\n </Stack>\n </Stack>\n );\n};\n\nexport const QuestionPromptControls = (props: QuestionPromptControlsProps) => {\n const { questionPrompt } = props;\n const questions = toQuestionFormQuestions(questionPrompt);\n const questionPromptSignature = getQuestionPromptSignature(questionPrompt);\n\n return <QuestionPromptStepper key={questionPromptSignature} {...props} questions={questions} />;\n};\n","import { IconButton, type IconButtonProps, Kbd, Portal, Tooltip } from \"@chakra-ui/react\";\nimport { ArrowUp, Pause } from \"lucide-react\";\n\nexport interface SendButtonProps extends IconButtonProps {\n shortcut?: string;\n title?: string;\n canInterrupt: boolean;\n}\n\nexport const SendButton = (props: SendButtonProps) => {\n const { title, shortcut, canInterrupt, ...rest } = props;\n const ariaLabel = rest[\"aria-label\"] ?? title;\n\n const icon = canInterrupt ? (\n <Pause size={16} strokeWidth={2} fill=\"currentColor\" />\n ) : (\n <ArrowUp size={16} strokeWidth={2} />\n );\n\n const button = (\n <IconButton\n data-testid=\"send-message-button\"\n size=\"xs\"\n variant=\"primary\"\n aria-label={ariaLabel}\n title={title}\n {...rest}\n >\n {icon}\n </IconButton>\n );\n\n if (title) {\n const tooltipContent = shortcut ? (\n <>\n {title} <Kbd fontSize=\"xs\">{shortcut}</Kbd>\n </>\n ) : (\n title\n );\n\n return (\n <Tooltip.Root closeDelay={50} openDelay={100}>\n <Tooltip.Trigger asChild>{button}</Tooltip.Trigger>\n <Portal>\n <Tooltip.Positioner>\n <Tooltip.Content>{tooltipContent}</Tooltip.Content>\n </Tooltip.Positioner>\n </Portal>\n </Tooltip.Root>\n );\n }\n\n return button;\n};\n","import type { SessionMessage } from \"./message-types\";\n\nexport const MAX_RECENT_USER_PROMPTS = 10;\n\nexport const getRecentUserPrompts = (messages: SessionMessage[]) => {\n const prompts: string[] = [];\n for (let i = messages.length - 1; i >= 0 && prompts.length < MAX_RECENT_USER_PROMPTS; i--) {\n const message = messages[i];\n if (message.role !== \"user\") continue;\n const text = message.parts.flatMap((part) => (part.type === \"text\" ? [part.text] : [])).join(\"\");\n if (text.trim()) prompts.push(text);\n }\n return prompts;\n};\n\nexport const movePromptHistory = (\n index: number | null,\n direction: \"previous\" | \"next\",\n text: string,\n count: number,\n) => {\n if (count === 0) return null;\n if (index === null) {\n return direction === \"previous\" && text === \"\" ? { index: 0 } : null;\n }\n if (direction === \"previous\") return { index: Math.min(index + 1, count - 1) };\n return { index: index === 0 ? null : index - 1 };\n};\n","import { useEffect, useRef } from \"react\";\nimport type { PromptEditorRef } from \"../../rich-text\";\nimport { MAX_RECENT_USER_PROMPTS, movePromptHistory } from \"./chat-input-history\";\n\ninterface ChatInputHistoryOptions {\n recentUserMessages: string[];\n text: string;\n blocked: boolean;\n resetKey: string;\n onChange: (text: string) => void;\n}\n\nexport const useChatInputHistory = (options: ChatInputHistoryOptions) => {\n const { recentUserMessages, text, blocked, resetKey, onChange } = options;\n const editorRef = useRef<PromptEditorRef>(null);\n const historyIndex = useRef<number | null>(null);\n const prompts = recentUserMessages.slice(0, MAX_RECENT_USER_PROMPTS);\n const signature = JSON.stringify(prompts);\n const resetSignature = JSON.stringify([signature, resetKey, blocked]);\n const previousResetSignature = useRef(resetSignature);\n useEffect(() => {\n if (previousResetSignature.current === resetSignature) return;\n previousResetSignature.current = resetSignature;\n historyIndex.current = null;\n }, [resetSignature]);\n\n const reset = () => {\n historyIndex.current = null;\n };\n const change = (value: string) => {\n if (historyIndex.current !== null && value !== prompts[historyIndex.current]) reset();\n onChange(value);\n };\n const recall = (direction: \"previous\" | \"next\") => {\n if (blocked) return false;\n const movement = movePromptHistory(historyIndex.current, direction, text, prompts.length);\n if (!movement) return false;\n historyIndex.current = movement.index;\n const value = movement.index === null ? \"\" : prompts[movement.index];\n editorRef.current?.setEditorValue(value);\n onChange(value);\n return true;\n };\n return { editorRef, reset, change, recallPrevious: () => recall(\"previous\"), recallNext: () => recall(\"next\") };\n};\n","import { Box, Flex, HStack, Spacer, Text } from \"@chakra-ui/react\";\nimport { type ReactNode, useEffect, useRef, useState } from \"react\";\nimport { ScrollArea } from \"@/components/primitives/scroll-area\";\nimport { getTextFromSerializedEditorState, PromptEditor, type ReferenceItem } from \"../../rich-text\";\nimport {\n type ChatInputAction,\n resolveChatInputButtonAction,\n resolveChatInputKeyboardAction,\n} from \"./chat-input-actions\";\nimport { createAttachmentEventHandlers, DEFAULT_TEXT_ATTACHMENT_PASTE_LINE_THRESHOLD } from \"./chat-input-attachments\";\nimport {\n buildQuestionAnswerValues,\n buildQuestionResponse,\n type ChatInputQuestion,\n type ChatInputQuestionCustomAnswers,\n type ChatInputQuestionPrompt,\n type ChatInputQuestionResponse,\n getQuestionPromptSignature,\n getQuestionSelectionKey,\n hasMissingRequiredQuestionAnswer,\n QuestionPromptControls,\n toggleQuestionOptionSelection,\n} from \"./chat-input-question-prompt\";\nimport { COMPOSER_CONTROL_HEIGHT } from \"./composer-constants\";\nimport { SendButton } from \"./send-button\";\n\nimport { useChatInputHistory } from \"./use-chat-input-history\";\n\nexport interface ChatInputProps {\n defaultState: string;\n /** Plain-text prompts from the active conversation, newest first. */\n recentUserMessages?: string[];\n placeholder?: string;\n onSubmit?: (\n text: string,\n attachments: string[],\n questionResponse?: ChatInputQuestionResponse,\n ) => void | Promise<void>;\n onInterrupt?: () => void;\n onAttachFiles?: (files: File[]) => void;\n onAttachText?: (text: string) => void;\n textAttachmentPasteLineThreshold?: number;\n streaming?: boolean;\n attachedResources?: string[];\n onClearAttachments?: () => void;\n isDisabled?: boolean;\n /** Keeps the editor usable but blocks sending, for example while no model is selected. */\n submitDisabled?: boolean;\n onChange?: (text: string) => void;\n attachmentList?: ReactNode;\n actions?: ReactNode;\n attachedToTop?: boolean;\n /** Recede the resting border to border.subtle when nested inside a stronger shell (the workspace hub). */\n recessed?: boolean;\n questionPrompt?: ChatInputQuestionPrompt;\n autoFocus?: boolean;\n focusSignal?: number;\n submitTitle?: string;\n references?: ReferenceItem[];\n onAddReference?: (resourceId: string, resourceType: ReferenceItem[\"resourceType\"]) => void;\n}\n\nconst ChatInputPlaceholder = (props: { placeholder?: string }) => {\n const { placeholder } = props;\n if (!placeholder) return null;\n\n return (\n <Text textStyle=\"label/M/regular\" color=\"fg.subtle\" pointerEvents=\"none\" position=\"absolute\" top=\"0\">\n {placeholder}\n </Text>\n );\n};\n\nconst selectedChatInputBorderColor = \"border.accent-light\";\n\nconst focusPromptEditor = (container: HTMLDivElement | null) => {\n const editable = container?.querySelector('[contenteditable=\"true\"]');\n if (editable instanceof HTMLElement) editable.focus();\n};\n\nconst requestPromptEditorFocus = (container: HTMLDivElement | null, onFocus?: () => void) =>\n requestAnimationFrame(() => {\n focusPromptEditor(container);\n onFocus?.();\n });\n\nconst useComposerFocus = (\n containerRef: { current: HTMLDivElement | null },\n autoFocus: boolean,\n focusSignal: number,\n setIsSelected: (selected: boolean) => void,\n) => {\n useEffect(() => {\n if (!autoFocus) return;\n const handle = requestPromptEditorFocus(containerRef.current, () => setIsSelected(true));\n return () => cancelAnimationFrame(handle);\n }, [autoFocus, containerRef, setIsSelected]);\n\n useEffect(() => {\n if (focusSignal === 0) return;\n const handle = requestPromptEditorFocus(containerRef.current, () => setIsSelected(true));\n return () => cancelAnimationFrame(handle);\n }, [focusSignal, containerRef, setIsSelected]);\n};\n\nexport const ChatInput = (props: ChatInputProps) => {\n const {\n defaultState,\n recentUserMessages = [],\n onSubmit = () => {},\n onInterrupt,\n onAttachFiles,\n onAttachText,\n textAttachmentPasteLineThreshold = DEFAULT_TEXT_ATTACHMENT_PASTE_LINE_THRESHOLD,\n streaming = false,\n attachedResources = [],\n onClearAttachments,\n isDisabled = false,\n submitDisabled = false,\n onChange,\n placeholder,\n attachmentList,\n actions,\n attachedToTop = false,\n recessed = false,\n questionPrompt,\n autoFocus = false,\n focusSignal = 0,\n submitTitle,\n references = [],\n onAddReference,\n } = props;\n\n const restingBorderColor = recessed ? \"border.subtle\" : \"border\";\n const [submitting, setSubmitting] = useState(false);\n const [isSelected, setIsSelected] = useState(false);\n const [editorState, setEditorState] = useState(defaultState);\n const [editorKey, setEditorKey] = useState(0);\n const [text, setText] = useState(() => getTextFromSerializedEditorState(defaultState));\n const [selectedOptionsByQuestion, setSelectedOptionsByQuestion] = useState<Record<string, string[]>>({});\n const [customAnswersByQuestion, setCustomAnswersByQuestion] = useState<ChatInputQuestionCustomAnswers>({});\n const containerRef = useRef<HTMLDivElement | null>(null);\n const onChangeRef = useRef(onChange);\n const previousQuestionPromptSignatureRef = useRef(getQuestionPromptSignature(questionPrompt));\n\n useEffect(() => {\n onChangeRef.current = onChange;\n }, [onChange]);\n\n useEffect(() => {\n const resetText = getTextFromSerializedEditorState(defaultState);\n setEditorState(defaultState);\n setEditorKey((key) => key + 1);\n setText(resetText);\n setSelectedOptionsByQuestion({});\n setCustomAnswersByQuestion({});\n onChangeRef.current?.(resetText);\n }, [defaultState]);\n\n const questionPromptSignature = getQuestionPromptSignature(questionPrompt);\n\n useEffect(() => {\n if (previousQuestionPromptSignatureRef.current === questionPromptSignature) return;\n previousQuestionPromptSignatureRef.current = questionPromptSignature;\n setSelectedOptionsByQuestion({});\n setCustomAnswersByQuestion({});\n }, [questionPromptSignature]);\n\n useComposerFocus(containerRef, autoFocus, focusSignal, setIsSelected);\n\n const history = useChatInputHistory({\n recentUserMessages,\n text,\n blocked: isDisabled || submitting || Boolean(questionPrompt),\n resetKey: JSON.stringify([defaultState, editorKey, questionPromptSignature]),\n onChange: (value) => {\n setText(value);\n onChange?.(value);\n },\n });\n\n const handleContainerClick = () => {\n setIsSelected(true);\n focusPromptEditor(containerRef.current);\n };\n\n const resetEditor = (shouldFocus = false) => {\n setEditorKey((key) => key + 1);\n setSelectedOptionsByQuestion({});\n setCustomAnswersByQuestion({});\n history.reset();\n history.change(getTextFromSerializedEditorState(defaultState));\n\n if (shouldFocus) {\n requestAnimationFrame(() => {\n focusPromptEditor(containerRef.current);\n });\n }\n };\n\n const responseText = questionPrompt\n ? buildQuestionResponse(questionPrompt, selectedOptionsByQuestion, customAnswersByQuestion)\n : text.trim();\n const hasMissingRequiredSelection = hasMissingRequiredQuestionAnswer(\n questionPrompt,\n selectedOptionsByQuestion,\n customAnswersByQuestion,\n );\n const actionState = {\n canInterrupt: streaming && !questionPrompt && Boolean(onInterrupt),\n canSubmit: !submitDisabled,\n hasQuestionPrompt: Boolean(questionPrompt),\n isDisabled: isDisabled || submitting || hasMissingRequiredSelection,\n streaming,\n text: responseText,\n };\n const buttonAction = resolveChatInputButtonAction(actionState);\n const messageTitle = streaming && !questionPrompt ? \"Queue message\" : \"Send message\";\n const submitMessage = async () => {\n if (!responseText) return;\n\n const questionResponse = questionPrompt\n ? {\n answers: buildQuestionAnswerValues(questionPrompt, selectedOptionsByQuestion, customAnswersByQuestion),\n }\n : undefined;\n\n history.reset();\n setSubmitting(true);\n try {\n await onSubmit(responseText, attachedResources, questionResponse);\n resetEditor(true);\n onClearAttachments?.();\n } catch {\n // Keep the composer intact so failed submissions can be retried.\n } finally {\n setSubmitting(false);\n }\n };\n\n const runAction = (action: ChatInputAction) => {\n if (action === \"interrupt\") onInterrupt?.();\n if (action === \"submit\") void submitMessage();\n };\n\n const attachmentEventHandlers = createAttachmentEventHandlers({\n onAttachFiles,\n onAttachText,\n textAttachmentPasteLineThreshold,\n });\n\n const toggleQuestionOption = (question: ChatInputQuestion, questionIndex: number, optionLabel: string) => {\n setSelectedOptionsByQuestion((current) =>\n toggleQuestionOptionSelection(current, question, questionIndex, optionLabel),\n );\n };\n\n const updateQuestionCustomAnswer = (question: ChatInputQuestion, questionIndex: number, answer: string) => {\n const key = getQuestionSelectionKey(question, questionIndex);\n setCustomAnswersByQuestion((current) => ({\n ...current,\n [key]: answer,\n }));\n };\n\n return (\n <Box\n ref={containerRef}\n position=\"relative\"\n width=\"100%\"\n paddingX=\"xs\"\n paddingY=\"xs\"\n mt={attachedToTop ? \"-1px\" : undefined}\n bg=\"bg\"\n borderRadius=\"xs\"\n borderTopRadius={attachedToTop ? \"0\" : undefined}\n borderWidth=\"1px\"\n borderStyle=\"solid\"\n borderColor={isSelected ? selectedChatInputBorderColor : restingBorderColor}\n zIndex={isSelected ? 1 : 0}\n transition=\"border-color 0.2s ease-in-out\"\n _hover={{\n borderColor: isSelected ? selectedChatInputBorderColor : restingBorderColor,\n zIndex: 1,\n }}\n _focusWithin={{\n borderColor: selectedChatInputBorderColor,\n zIndex: 1,\n }}\n onPasteCapture={attachmentEventHandlers.onPasteCapture}\n onDropCapture={attachmentEventHandlers.onDropCapture}\n onDragOver={attachmentEventHandlers.onDragOver}\n onClick={handleContainerClick}\n onBlur={() => setIsSelected(false)}\n >\n <Flex direction=\"column\" color=\"fg\" gap=\"xs\">\n {attachmentList ? <Box>{attachmentList}</Box> : null}\n {questionPrompt ? (\n <QuestionPromptControls\n questionPrompt={questionPrompt}\n selectedOptionsByQuestion={selectedOptionsByQuestion}\n customAnswersByQuestion={customAnswersByQuestion}\n onToggleOption={toggleQuestionOption}\n onCustomAnswerChange={updateQuestionCustomAnswer}\n />\n ) : (\n // The editor is its own composer row: it centres a single line at the shared\n // control height and grows with content, never shrinking below it, so the row\n // aligns with the toolbar beneath it.\n <ScrollArea maxH=\"10rem\" showHorizontalScrollbar={false} contentProps={{ pr: \"2xs\" }}>\n <Flex minH={COMPOSER_CONTROL_HEIGHT} align=\"center\">\n <PromptEditor\n key={editorKey}\n ref={history.editorRef}\n onRecallPrevious={history.recallPrevious}\n onRecallNext={history.recallNext}\n defaultState={editorState}\n isEditable={!isDisabled && !submitting}\n placeholder={<ChatInputPlaceholder placeholder={placeholder} />}\n onChange={history.change}\n onSubmit={() => runAction(resolveChatInputKeyboardAction(actionState))}\n references={references}\n onAddReference={onAddReference}\n />\n </Flex>\n </ScrollArea>\n )}\n <HStack gap=\"1\" minH={COMPOSER_CONTROL_HEIGHT} align=\"center\">\n {actions}\n <Spacer />\n <SendButton\n canInterrupt={buttonAction === \"interrupt\"}\n title={buttonAction === \"interrupt\" ? \"Stop Response\" : (submitTitle ?? messageTitle)}\n shortcut={buttonAction === \"submit\" ? \"Enter\" : undefined}\n onClick={() => runAction(buttonAction)}\n disabled={buttonAction === \"none\"}\n />\n </HStack>\n </Flex>\n </Box>\n );\n};\n","import type { SessionMessage, ToolPart } from \"../components/message-types\";\nimport type { QuestionFormBlockOption, QuestionFormBlockQuestion } from \"../components/timeline\";\n\nconst isRecord = (value: unknown): value is Record<string, unknown> => {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n};\n\nconst parseJsonObjectText = (value: string) => {\n try {\n const parsed: unknown = JSON.parse(value);\n return isRecord(parsed) ? parsed : null;\n } catch {\n return null;\n }\n};\n\nconst toInputRecord = (input: unknown) => {\n if (isRecord(input)) return input;\n if (typeof input === \"string\" && input.trim().length > 0) return parseJsonObjectText(input);\n return null;\n};\n\nconst getStringValue = (value: unknown) => {\n if (typeof value === \"string\" && value.trim().length > 0) return value;\n return null;\n};\n\nexport const getQuestionResponseText = (value: unknown): string | null => {\n const stringValue = getStringValue(value);\n if (stringValue) return stringValue;\n\n if (Array.isArray(value)) {\n const lines = value.map(getQuestionResponseText).filter((line): line is string => line !== null);\n return lines.length > 0 ? lines.join(\"\\n\") : null;\n }\n\n if (!isRecord(value)) return null;\n\n return (\n getQuestionResponseText(value.response) ??\n getQuestionResponseText(value.answer) ??\n getQuestionResponseText(value.text) ??\n getQuestionResponseText(value.answers)\n );\n};\n\nconst parseQuestionOption = (value: unknown): QuestionFormBlockOption | null => {\n if (typeof value === \"string\" && value.trim().length > 0) {\n return { label: value, description: undefined };\n }\n\n if (!isRecord(value)) return null;\n const label = getStringValue(value.label);\n if (!label) return null;\n\n return {\n label,\n description: getStringValue(value.description) ?? undefined,\n };\n};\n\nconst parseQuestion = (value: unknown, index: number): QuestionFormBlockQuestion | null => {\n if (!isRecord(value)) return null;\n\n const question = getStringValue(value.question);\n if (!question) return null;\n\n const options = Array.isArray(value.options)\n ? value.options.map(parseQuestionOption).filter((option): option is QuestionFormBlockOption => option !== null)\n : [];\n const type = getStringValue(value.type);\n const allowCustomAnswer =\n typeof value.custom === \"boolean\"\n ? value.custom\n : typeof value.allowCustomAnswer === \"boolean\"\n ? value.allowCustomAnswer\n : options.length === 0 || type === \"freeform\" || type === \"text\";\n\n return {\n id: getStringValue(value.id) ?? `question-${index}`,\n question,\n options,\n multiple:\n typeof value.multiple === \"boolean\" ? value.multiple : type === \"multi_choice\" || type === \"multiple_choice\",\n required: typeof value.required === \"boolean\" ? value.required : true,\n allowCustomAnswer,\n };\n};\n\nexport const parseQuestionPrompt = (input: unknown) => {\n const record = toInputRecord(input);\n if (!record || !Array.isArray(record.questions)) return null;\n\n const questions = record.questions.map(parseQuestion).filter((question): question is QuestionFormBlockQuestion => {\n return question !== null;\n });\n if (questions.length === 0) return null;\n\n return { questions };\n};\n\nconst isQuestionTool = (part: ToolPart) => part.tool.toLowerCase() === \"question\";\n\nexport const resolveActiveQuestionPrompt = (messages: SessionMessage[]) => {\n for (let messageIndex = messages.length - 1; messageIndex >= 0; messageIndex -= 1) {\n const message = messages[messageIndex];\n if (message.role !== \"assistant\") continue;\n\n for (let partIndex = message.parts.length - 1; partIndex >= 0; partIndex -= 1) {\n const part = message.parts[partIndex];\n if (part.type !== \"tool\" || !isQuestionTool(part)) continue;\n\n const response = getQuestionResponseText(part.state?.output) ?? getQuestionResponseText(part.state?.metadata);\n if (response) return undefined;\n\n return parseQuestionPrompt(part.state?.input) ?? undefined;\n }\n }\n\n return undefined;\n};\n","import { useRef } from \"react\";\n\nexport interface MessageAnimationState {\n initialized: boolean;\n seenKeys: Set<string>;\n}\n\ninterface NextMessageAnimationStateArgs {\n itemKeys: string[];\n state: MessageAnimationState;\n}\n\nexport const messageFadeInProps = {\n animationName: \"message-fade-in\",\n animationDuration: \"200ms\",\n animationTimingFunction: \"ease-out\",\n} as const;\n\nexport const getNextMessageAnimationState = (args: NextMessageAnimationStateArgs) => {\n const animatedKeys = new Set<string>();\n const seenKeys = new Set(args.state.seenKeys);\n\n for (const key of args.itemKeys) {\n if (args.state.initialized && !seenKeys.has(key)) {\n animatedKeys.add(key);\n }\n\n seenKeys.add(key);\n }\n\n return {\n animatedKeys,\n state: {\n initialized: true,\n seenKeys,\n },\n };\n};\n\nconst itemKeysEqual = (a: string[], b: string[]) => {\n if (a.length !== b.length) return false;\n for (let index = 0; index < a.length; index += 1) if (a[index] !== b[index]) return false;\n return true;\n};\n\nexport const useMessageAnimationKeys = (itemKeys: string[]) => {\n const stateRef = useRef<MessageAnimationState>({\n initialized: false,\n seenKeys: new Set(),\n });\n // The hook mutates state during render, so React's duplicate renders (Strict\n // Mode, concurrent reconciliation) would otherwise consume the animation\n // flag on the second pass and leave the message non-animating. Cache the\n // last inputs to make repeated calls idempotent.\n const lastResultRef = useRef<{ itemKeys: string[]; animatedKeys: Set<string> } | null>(null);\n\n if (lastResultRef.current && itemKeysEqual(lastResultRef.current.itemKeys, itemKeys)) {\n return lastResultRef.current.animatedKeys;\n }\n\n const next = getNextMessageAnimationState({\n itemKeys,\n state: stateRef.current,\n });\n\n stateRef.current = next.state;\n lastResultRef.current = { itemKeys: [...itemKeys], animatedKeys: next.animatedKeys };\n\n return next.animatedKeys;\n};\n","import { Box, HStack, IconButton, Text } from \"@chakra-ui/react\";\nimport { Check, Copy } from \"lucide-react\";\nimport { useEffect, useRef, useState } from \"react\";\nimport { Tooltip } from \"@/components/primitives/tooltip\";\nimport type { ChatMessagePart, SessionMessage } from \"./message-types\";\n\ninterface MessageActionPanelProps {\n message: SessionMessage;\n alwaysVisible?: boolean;\n copyAlwaysVisible?: boolean;\n}\n\nconst isCopyablePart = (part: ChatMessagePart): part is Extract<ChatMessagePart, { type: \"text\" }> => {\n return part.type === \"text\";\n};\n\nexport const getMessageCopyText = (message: SessionMessage) => {\n return (message.parts ?? [])\n .filter(isCopyablePart)\n .map((part) => part.text.trim())\n .filter(Boolean)\n .join(\"\\n\\n\");\n};\n\nexport const getMessageTimestampLabel = (message: SessionMessage, locale?: string, timeZone?: string) => {\n if (!message.createdAt) return \"\";\n\n return new Intl.DateTimeFormat(locale, {\n hour: \"numeric\",\n minute: \"2-digit\",\n timeZone,\n }).format(new Date(message.createdAt));\n};\n\nexport const MessageActionPanel = (props: MessageActionPanelProps) => {\n const { message, alwaysVisible = false, copyAlwaysVisible = alwaysVisible } = props;\n const [isCopied, setIsCopied] = useState(false);\n const copyResetTimeoutRef = useRef<number | null>(null);\n const copyText = getMessageCopyText(message);\n const timestampLabel = getMessageTimestampLabel(message);\n\n useEffect(() => {\n return () => {\n if (copyResetTimeoutRef.current !== null) {\n window.clearTimeout(copyResetTimeoutRef.current);\n }\n };\n }, []);\n\n const copyMessage = async () => {\n if (!copyText) return;\n\n try {\n await navigator.clipboard.writeText(copyText);\n setIsCopied(true);\n if (copyResetTimeoutRef.current !== null) {\n window.clearTimeout(copyResetTimeoutRef.current);\n }\n copyResetTimeoutRef.current = window.setTimeout(() => setIsCopied(false), 1200);\n } catch {\n setIsCopied(false);\n }\n };\n\n if (!copyText && !timestampLabel) return null;\n\n return (\n <HStack\n data-chat-message-action-panel=\"true\"\n gap=\"2xs\"\n minH=\"6\"\n opacity={alwaysVisible ? \"1\" : \"0\"}\n pointerEvents={alwaysVisible ? \"auto\" : \"none\"}\n transition=\"opacity 120ms ease\"\n css={messageActionPanelHoverStyles}\n >\n {timestampLabel ? (\n <Text textStyle=\"label/XS/regular\" color=\"fg.muted\">\n {timestampLabel}\n </Text>\n ) : null}\n {copyText ? (\n <Box\n opacity={copyAlwaysVisible ? \"1\" : \"0\"}\n pointerEvents={copyAlwaysVisible ? \"auto\" : \"none\"}\n transition=\"opacity 120ms ease\"\n css={messageActionPanelHoverStyles}\n >\n <Tooltip content={isCopied ? \"Copied\" : \"Copy message\"}>\n <IconButton\n aria-label={isCopied ? \"Copied\" : \"Copy message\"}\n variant=\"ghost\"\n size=\"2xs\"\n onClick={copyMessage}\n >\n {isCopied ? <Check size={12} /> : <Copy size={12} />}\n </IconButton>\n </Tooltip>\n </Box>\n ) : null}\n </HStack>\n );\n};\n\nconst messageActionPanelHoverStyles = {\n \"[data-chat-message-with-actions]:hover &, [data-chat-message-with-actions]:focus-within &\": {\n opacity: 1,\n pointerEvents: \"auto\",\n },\n \".ai-message__root:hover &, .ai-message__root:focus-within &\": {\n opacity: 1,\n pointerEvents: \"auto\",\n },\n \"[data-scope='ai-message'][data-part='root']:hover &, [data-scope='ai-message'][data-part='root']:focus-within &\": {\n opacity: 1,\n pointerEvents: \"auto\",\n },\n};\n","import type { BoxProps } from \"@chakra-ui/react\";\nimport { Box } from \"@chakra-ui/react\";\nimport { RichMessage } from \"@/components/rich-text\";\n\nexport interface ChatRichContentProps extends Omit<BoxProps, \"children\"> {\n children: string;\n}\n\nconst ChatRichContent = (props: ChatRichContentProps) => {\n const { children, ...rest } = props;\n\n return (\n <Box {...rest}>\n <RichMessage defaultState={children} fullWidth />\n </Box>\n );\n};\n\nexport const Response = ChatRichContent;\n","export const normalizeToolName = (value: string) => {\n return value\n .replace(/^tool-/i, \"\")\n .replace(/([a-z0-9])([A-Z])/g, \"$1_$2\")\n .replace(/[\\s-]+/g, \"_\")\n .toLowerCase();\n};\n\nexport const getToolNameLookupKeys = (value: string) => {\n const normalized = normalizeToolName(value);\n const compact = normalized.replace(/_/g, \"\");\n return [...new Set([value, normalized, compact])];\n};\n","import type { LucideIcon } from \"lucide-react\";\nimport {\n AlertTriangle,\n CircleQuestionMark,\n DotIcon,\n File,\n FileDiff,\n FileDown,\n FilePen,\n FileText,\n FileUp,\n Globe,\n ListTodo,\n ListTree,\n Move,\n Search,\n Terminal,\n Trash2,\n} from \"lucide-react\";\nimport { normalizeToolName } from \"./tool-name\";\n\nconst toolIconMap = {\n shell: Terminal,\n ls: ListTree,\n read_file: FileText,\n write_file: FilePen,\n delete_file: Trash2,\n patch: FileDiff,\n upload_files: FileUp,\n download_file: FileDown,\n move_file: Move,\n} as const satisfies Record<string, LucideIcon>;\n\nconst iconMap = {\n dot: DotIcon,\n danger: AlertTriangle,\n search: Search,\n browser: Globe,\n file: File,\n question: CircleQuestionMark,\n todo: ListTodo,\n terminal: Terminal,\n ...toolIconMap,\n} as const satisfies Record<string, LucideIcon>;\n\nexport type IconName = keyof typeof iconMap;\nexport type ToolIconName = keyof typeof toolIconMap;\n\nconst DEFAULT_TOOL_ICON: IconName = \"dot\";\n\nconst isToolIconName = (value: string): value is ToolIconName => Object.hasOwn(toolIconMap, value);\n\nexport const getIconComponent = (name: IconName): LucideIcon => {\n return iconMap[name];\n};\n\nexport const toolTypeToIconName = (type?: string): IconName => {\n if (!type) return DEFAULT_TOOL_ICON;\n\n const normalized = normalizeToolName(type);\n if (isToolIconName(normalized)) return normalized;\n\n const compact = normalized.replace(/_/g, \"\");\n\n switch (normalized) {\n case \"read\":\n return \"file\";\n case \"bash\":\n return \"terminal\";\n case \"edit\":\n return \"write_file\";\n case \"apply_patch\":\n return \"patch\";\n case \"grep\":\n return \"search\";\n case \"glob\":\n return \"file\";\n case \"todowrite\":\n return \"todo\";\n case \"search\":\n return \"search\";\n case \"browser\":\n return \"browser\";\n case \"question\":\n return \"question\";\n case \"fs\":\n case \"file\":\n return \"file\";\n default:\n return compact === \"todowrite\" || compact === \"todo\" ? \"todo\" : DEFAULT_TOOL_ICON;\n }\n};\n\nexport { getFileTypeIcon } from \"../../../utils/get-file-type-icon\";\n","import type { TitleSegment } from \"../components/timeline\";\n\nexport type FileChange = { filePath: string; additions: number; deletions: number };\n\nexport function basenameSafe(path: string) {\n const idx = path.lastIndexOf(\"/\");\n return idx >= 0 ? path.slice(idx + 1) : path;\n}\n\nfunction normalizeHeaderPath(input?: string | null) {\n if (!input) return null;\n\n const token = input.split(\"\\t\")[0].trim();\n if (token === \"/dev/null\") return null;\n\n let normalized = token;\n if (normalized.startsWith(\"a/\") || normalized.startsWith(\"b/\")) {\n normalized = normalized.slice(2);\n }\n\n return normalized.replace(/^\\/+/, \"\").replace(/\\\\/g, \"/\");\n}\n\nconst isMinusHeader = (line: string) => line.startsWith(\"--- \");\nconst isPlusHeader = (line: string) => line.startsWith(\"+++ \");\nconst isHunkHeader = (line: string) => line.startsWith(\"@@\");\nconst isAddedLine = (line: string) => line.startsWith(\"+\") && !(isPlusHeader(line) || line === \"+++\");\nconst isDeletedLine = (line: string) => line.startsWith(\"-\") && !(isMinusHeader(line) || line === \"---\");\n\nconst ensureFileChange = (changes: Map<string, { additions: number; deletions: number }>, filePath: string) => {\n if (!changes.has(filePath)) {\n changes.set(filePath, { additions: 0, deletions: 0 });\n }\n};\n\nconst incrementAdditions = (changes: Map<string, { additions: number; deletions: number }>, filePath: string) => {\n const current = changes.get(filePath);\n if (!current) return;\n current.additions += 1;\n};\n\nconst incrementDeletions = (changes: Map<string, { additions: number; deletions: number }>, filePath: string) => {\n const current = changes.get(filePath);\n if (!current) return;\n current.deletions += 1;\n};\n\ntype UnifiedDiffState = {\n currentPath: string | null;\n lastMinusHeader: string | null;\n inHunk: boolean;\n};\n\nconst processUnifiedDiffLine = (\n line: string,\n state: UnifiedDiffState,\n changes: Map<string, { additions: number; deletions: number }>,\n) => {\n if (isMinusHeader(line)) {\n return { ...state, lastMinusHeader: normalizeHeaderPath(line.slice(4)), inHunk: false };\n }\n\n if (isPlusHeader(line)) {\n const plusPath = normalizeHeaderPath(line.slice(4));\n const currentPath = plusPath ?? state.lastMinusHeader;\n if (currentPath) ensureFileChange(changes, currentPath);\n return { ...state, currentPath, inHunk: false };\n }\n\n if (!state.currentPath) return state;\n\n if (isHunkHeader(line)) {\n return { ...state, inHunk: true };\n }\n\n if (!state.inHunk) return state;\n\n if (isAddedLine(line)) {\n incrementAdditions(changes, state.currentPath);\n return state;\n }\n\n if (isDeletedLine(line)) {\n incrementDeletions(changes, state.currentPath);\n }\n\n return state;\n};\n\nexport function parseUnifiedDiff(diffText?: string) {\n if (!diffText || typeof diffText !== \"string\") return [] as FileChange[];\n\n const changes = new Map<string, { additions: number; deletions: number }>();\n let state: UnifiedDiffState = {\n currentPath: null,\n lastMinusHeader: null,\n inHunk: false,\n };\n\n const lines = diffText.split(/\\r?\\n/);\n for (const line of lines) {\n state = processUnifiedDiffLine(line, state, changes);\n }\n\n return Array.from(changes.entries()).map(([filePath, { additions, deletions }]) => ({\n filePath,\n additions,\n deletions,\n }));\n}\n\nexport function buildDiffTitleSegments(diffText?: string) {\n return parseUnifiedDiff(diffText).map(\n (file) =>\n ({\n kind: \"diff\",\n fileName: basenameSafe(file.filePath),\n filePath: file.filePath,\n additions: file.additions,\n deletions: file.deletions,\n }) satisfies TitleSegment,\n );\n}\n\nexport function extractDiffFilePaths(diffText?: string) {\n return parseUnifiedDiff(diffText).map((file) => file.filePath);\n}\n\nexport type FileDiffPreview = { filePath: string; original: string; modified: string };\n\nconst isDiffFileBoundary = (line: string) => isMinusHeader(line) || line.startsWith(\"diff --git \");\n\nconst isInvalidHunkBodyLine = (line: string) => {\n if (line.startsWith(\" \")) return false;\n if (line.startsWith(\"+\")) return false;\n if (line.startsWith(\"-\")) return false;\n return line.trim() !== \"\";\n};\n\nconst appendHunkLine = (line: string, original: string[], modified: string[]) => {\n if (line.startsWith(\" \")) {\n const text = line.slice(1);\n original.push(text);\n modified.push(text);\n return;\n }\n\n if (line.startsWith(\"-\")) {\n original.push(line.slice(1));\n return;\n }\n\n if (line.startsWith(\"+\")) {\n modified.push(line.slice(1));\n }\n};\n\nconst parseHunkBody = (lines: string[], startIndex: number, original: string[], modified: string[]) => {\n let index = startIndex;\n\n while (index < lines.length) {\n const line = lines[index] || \"\";\n if (isDiffFileBoundary(line) || isHunkHeader(line) || isInvalidHunkBodyLine(line)) {\n break;\n }\n\n appendHunkLine(line, original, modified);\n index += 1;\n }\n\n if (original.length > 0 || modified.length > 0) {\n original.push(\"\");\n modified.push(\"\");\n }\n\n return index;\n};\n\nconst parsePreview = (lines: string[], startIndex: number) => {\n const oldHeader = normalizeHeaderPath((lines[startIndex] || \"\").slice(4));\n const next = lines[startIndex + 1] || \"\";\n if (!isPlusHeader(next)) return { nextIndex: startIndex + 1 } as const;\n\n const newHeader = normalizeHeaderPath(next.slice(4));\n const filePath = newHeader ?? oldHeader ?? \"\";\n const original: string[] = [];\n const modified: string[] = [];\n\n let index = startIndex + 2;\n while (index < lines.length) {\n const current = lines[index] || \"\";\n if (isDiffFileBoundary(current)) break;\n\n if (!isHunkHeader(current)) {\n index += 1;\n continue;\n }\n\n index = parseHunkBody(lines, index + 1, original, modified);\n }\n\n return {\n nextIndex: index,\n preview: { filePath, original: original.join(\"\\n\"), modified: modified.join(\"\\n\") } satisfies FileDiffPreview,\n } as const;\n};\n\nexport function buildFileDiffPreviews(diffText?: string) {\n if (!diffText || typeof diffText !== \"string\") return [] as FileDiffPreview[];\n\n const lines = diffText.split(/\\r?\\n/);\n const previews: FileDiffPreview[] = [];\n\n let i = 0;\n while (i < lines.length) {\n const line = lines[i] || \"\";\n if (!isMinusHeader(line)) {\n i += 1;\n continue;\n }\n\n const { nextIndex, preview } = parsePreview(lines, i);\n if (preview) previews.push(preview);\n i = Math.max(nextIndex, i + 1);\n }\n\n return previews;\n}\n","import type { ToolPart } from \"../components/message-types\";\nimport type { Block, TitleSegment } from \"../components/timeline\";\nimport { basenameSafe, buildDiffTitleSegments, buildFileDiffPreviews, extractDiffFilePaths } from \"../utils/diff\";\nimport { toolTypeToIconName } from \"../utils/get-icon\";\n\nconst TOOL_LABELS: Record<string, string> = {\n apply_patch: \"Apply patch\",\n bash: \"Run command\",\n edit: \"Edit file\",\n glob: \"Find files\",\n grep: \"Search files\",\n read: \"Read file\",\n skill: \"Load skill\",\n todowrite: \"Update todos\",\n};\n\nconst STATE_LABELS: Record<string, string> = {\n error: \"failed\",\n \"output-error\": \"failed\",\n input_streaming: \"running\",\n running: \"running\",\n completed: \"completed\",\n failed: \"failed\",\n};\n\nexport type ApplyPatchMetadataFile = {\n filePath: string;\n additions: number;\n deletions: number;\n diff?: string;\n before?: string;\n after?: string;\n};\n\nexport const normalizeToolType = (value: string) => value.replace(/^tool-/, \"\").toLowerCase();\n\nconst toTitleCase = (value: string) => {\n return value\n .split(\" \")\n .filter((token) => token.length > 0)\n .map((token) => token[0].toUpperCase() + token.slice(1))\n .join(\" \");\n};\n\nexport const getToolType = (invocation: ToolPart) => normalizeToolType(invocation.tool ?? \"tool\");\n\nexport const getToolLabel = (value: string) => {\n const normalized = normalizeToolType(value);\n return TOOL_LABELS[normalized] ?? toTitleCase(normalized.replace(/_/g, \" \"));\n};\n\nexport const getStateLabel = (invocation: ToolPart) => {\n const state = invocation.state?.status ?? invocation.status;\n if (!state || typeof state !== \"string\") return null;\n\n const normalized = state.replace(/-/g, \"_\");\n if (STATE_LABELS[normalized]) return STATE_LABELS[normalized];\n if (normalized.includes(\"stream\")) return \"running\";\n return null;\n};\n\nexport const isErrorState = (invocation: ToolPart) => {\n const state = invocation.state?.status ?? invocation.status;\n return state === \"error\" || state === \"output-error\" || state === \"failed\";\n};\n\nexport const buildIndicator = (invocation: ToolPart) => {\n if (isErrorState(invocation)) {\n return { type: \"icon\", icon: \"danger\" } as const;\n }\n\n return {\n type: \"icon\",\n icon: toolTypeToIconName(getToolType(invocation)),\n } as const;\n};\n\nexport const buildBaseTitle = (\n invocation: ToolPart,\n detail?: string,\n labelOverride?: string,\n detailStyle?: \"monospace\",\n) => {\n const label = labelOverride ?? getToolLabel(invocation.tool ?? \"tool\");\n const title: TitleSegment[] = [{ kind: \"text\", text: label, bold: true }];\n\n if (detail) {\n title.push({\n kind: \"text\",\n text: detail,\n muted: true,\n ...(detailStyle === \"monospace\" ? { truncate: true, monospace: true } : {}),\n });\n }\n\n const stateLabel = getStateLabel(invocation);\n if (stateLabel && stateLabel !== \"completed\") {\n title.push({ kind: \"text\", text: stateLabel, muted: true });\n }\n\n return title;\n};\n\nexport const getInputObject = (invocation: ToolPart) => {\n const input = invocation.state?.input;\n if (!input || typeof input !== \"object\" || Array.isArray(input)) return null;\n return input as Record<string, unknown>;\n};\n\nexport const getOutputObject = (invocation: ToolPart) => {\n const output = invocation.state?.output;\n if (!output || typeof output !== \"object\" || Array.isArray(output)) return null;\n return output as Record<string, unknown>;\n};\n\nexport const getStringValue = (value: unknown) => {\n if (typeof value === \"string\" && value.trim().length > 0) return value;\n return null;\n};\n\nexport const getObjectValue = (value: unknown) => {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) return null;\n return value as Record<string, unknown>;\n};\n\nexport const getStateObject = (invocation: ToolPart, key: string) => {\n const state = getObjectValue(invocation.state);\n if (!state) return null;\n return getObjectValue(state[key]);\n};\n\nconst normalizeFilePath = (value: string) => value.replace(/\\\\/g, \"/\").replace(/^\\/+/, \"\");\n\nconst isUnifiedDiff = (value: string) => value.includes(\"--- \") && value.includes(\"+++ \") && value.includes(\"@@\");\n\nconst getApplyPatchMetadataObjects = (invocation: ToolPart) => {\n const output = getOutputObject(invocation);\n return [getStateObject(invocation, \"metadata\"), getObjectValue(output?.metadata)].filter(Boolean) as Array<\n Record<string, unknown>\n >;\n};\n\nconst parseApplyPatchMetadataFile = (entry: unknown) => {\n const record = getObjectValue(entry);\n if (!record) return null;\n\n const rawPath = getStringValue(record.filePath) ?? getStringValue(record.relativePath) ?? getStringValue(record.path);\n if (!rawPath) return null;\n\n return {\n filePath: normalizeFilePath(rawPath),\n additions: typeof record.additions === \"number\" ? record.additions : 0,\n deletions: typeof record.deletions === \"number\" ? record.deletions : 0,\n diff: getStringValue(record.diff) ?? undefined,\n before: getStringValue(record.before) ?? undefined,\n after: getStringValue(record.after) ?? undefined,\n } satisfies ApplyPatchMetadataFile;\n};\n\nexport const getApplyPatchMetadataFiles = (invocation: ToolPart) => {\n const files: ApplyPatchMetadataFile[] = [];\n\n for (const metadata of getApplyPatchMetadataObjects(invocation)) {\n const entries = Array.isArray(metadata.files) ? metadata.files : [];\n\n for (const entry of entries) {\n const parsedFile = parseApplyPatchMetadataFile(entry);\n if (!parsedFile) continue;\n files.push(parsedFile);\n }\n }\n\n return files;\n};\n\nexport const getApplyPatchInputFilePaths = (invocation: ToolPart) => {\n const input = getInputObject(invocation);\n const changes = Array.isArray(input?.changes) ? input.changes : [];\n const filePaths = changes\n .map((change) => getStringValue(getObjectValue(change)?.path))\n .filter((filePath): filePath is string => Boolean(filePath))\n .map(normalizeFilePath);\n\n return Array.from(new Set(filePaths));\n};\n\nexport const getApplyPatchDiffText = (invocation: ToolPart) => {\n const input = getInputObject(invocation);\n const inputDiff = getStringValue(input?.diff);\n if (inputDiff) return inputDiff;\n\n for (const metadata of getApplyPatchMetadataObjects(invocation)) {\n const metadataDiff = getStringValue(metadata.diff);\n if (metadataDiff) return metadataDiff;\n }\n\n const fileDiffs = getApplyPatchMetadataFiles(invocation)\n .map((file) => file.diff)\n .filter((diff): diff is string => Boolean(diff));\n if (fileDiffs.length > 0) return fileDiffs.join(\"\\n\");\n\n const patchText = getStringValue(input?.patchText);\n if (patchText && isUnifiedDiff(patchText)) return patchText;\n\n return null;\n};\n\nexport const buildApplyPatchMetadataTitleSegments = (files: ApplyPatchMetadataFile[]) => {\n const seen = new Set<string>();\n const segments: TitleSegment[] = [];\n\n for (const file of files) {\n if (seen.has(file.filePath)) continue;\n seen.add(file.filePath);\n\n segments.push({\n kind: \"diff\",\n fileName: basenameSafe(file.filePath),\n filePath: file.filePath,\n additions: file.additions,\n deletions: file.deletions,\n });\n }\n\n return segments;\n};\n\nexport const getApplyPatchMetadataReferences = (files: ApplyPatchMetadataFile[]) => {\n return Array.from(new Set(files.map((file) => file.filePath)));\n};\n\nexport const getOutputText = (invocation: ToolPart) => {\n const outputObject = getOutputObject(invocation);\n\n return (\n getStringValue(invocation.state?.output) ??\n getStringValue(outputObject?.returnDisplay) ??\n getStringValue(outputObject?.preview) ??\n getStringValue(outputObject?.stdout) ??\n getStringValue(outputObject?.content)\n );\n};\n\nexport const parseSkillContentBlock = (value: string) => {\n const match = value.match(/<skill_content(?:\\s+name=\"([^\"]+)\")?>([\\s\\S]*?)<\\/skill_content>/);\n if (!match) return null;\n\n return {\n skillName: getStringValue(match[1]) ?? undefined,\n content: getStringValue(match[2]) ?? \"\",\n };\n};\n\nexport const getSkillName = (invocation: ToolPart) => {\n const input = getInputObject(invocation);\n return (\n getStringValue(input?.name) ??\n getStringValue(input?.skillName) ??\n getStringValue(input?.skill) ??\n getStringValue(input?.skill_name) ??\n undefined\n );\n};\n\nexport const buildFileLinkSegment = (filePath: string, variant?: \"default\" | \"bubble\"): TitleSegment => {\n return {\n kind: \"link\",\n text: basenameSafe(filePath),\n filePath,\n ...(variant ? { variant } : {}),\n };\n};\n\nexport const prependErrorBlock = (invocation: ToolPart, blocks: Block[]): Block[] => {\n if (!isErrorState(invocation) || !invocation.state?.errorText) return blocks;\n const errorBlock: Block = {\n type: \"comment\",\n text: invocation.state.errorText,\n };\n return [errorBlock, ...blocks];\n};\n\nexport const getDiffBlocks = (diffText?: string | null) => {\n return buildFileDiffPreviews(diffText ?? undefined).map((preview) => ({\n type: \"diff\",\n language: \"diff\",\n original: preview.original,\n modified: preview.modified,\n sideBySide: false,\n })) satisfies Block[];\n};\n\nexport const getDiffTitleSegments = (diffText?: string | null) => buildDiffTitleSegments(diffText ?? undefined);\n\nexport const getDiffReferences = (diffText?: string | null) => extractDiffFilePaths(diffText ?? undefined);\n","import type { Block, Item } from \"../components/timeline\";\nimport {\n buildApplyPatchMetadataTitleSegments,\n buildBaseTitle,\n buildFileLinkSegment,\n buildIndicator,\n getApplyPatchDiffText,\n getApplyPatchInputFilePaths,\n getApplyPatchMetadataFiles,\n getApplyPatchMetadataReferences,\n getDiffBlocks,\n getDiffReferences,\n getDiffTitleSegments,\n prependErrorBlock,\n} from \"./shared\";\nimport type { ToolRenderer } from \"./types\";\n\nexport const renderApplyPatch: ToolRenderer = (invocation) => {\n const diffText = getApplyPatchDiffText(invocation);\n const metadataFiles = getApplyPatchMetadataFiles(invocation);\n const inputFilePaths = getApplyPatchInputFilePaths(invocation);\n\n const title = buildBaseTitle(invocation, undefined, \"Apply patch\");\n const diffSegments = getDiffTitleSegments(diffText);\n if (diffSegments.length > 0) {\n title.push(...diffSegments);\n } else if (metadataFiles.length > 0) {\n title.push(...buildApplyPatchMetadataTitleSegments(metadataFiles));\n } else {\n title.push(...inputFilePaths.map((filePath) => buildFileLinkSegment(filePath, \"bubble\")));\n }\n\n const blocks: Block[] = [...getDiffBlocks(diffText)];\n\n if (blocks.length === 0) {\n for (const file of metadataFiles) {\n if (!file.before && !file.after) continue;\n blocks.push({\n type: \"diff\",\n language: \"diff\",\n original: file.before ?? \"\",\n modified: file.after ?? \"\",\n sideBySide: false,\n });\n }\n }\n\n if (blocks.length === 0) {\n const references = getDiffReferences(diffText);\n if (references.length === 0) {\n references.push(...getApplyPatchMetadataReferences(metadataFiles));\n }\n if (references.length === 0) {\n references.push(...inputFilePaths);\n }\n if (references.length > 0) {\n blocks.push({ type: \"references\", references });\n }\n }\n\n return {\n indicator: buildIndicator(invocation),\n title,\n blocks: prependErrorBlock(invocation, blocks),\n } satisfies Item;\n};\n","import type { Block, Item } from \"../components/timeline\";\nimport {\n buildBaseTitle,\n buildFileLinkSegment,\n buildIndicator,\n getDiffBlocks,\n getInputObject,\n getOutputObject,\n getStringValue,\n prependErrorBlock,\n} from \"./shared\";\nimport type { ToolRenderer } from \"./types\";\n\nconst buildEditDiff = (original: string, modified: string) => {\n return [\n {\n type: \"diff\",\n language: \"text\",\n original,\n modified,\n sideBySide: false,\n },\n ] satisfies Block[];\n};\n\nexport const renderEdit: ToolRenderer = (invocation) => {\n const input = getInputObject(invocation);\n const output = getOutputObject(invocation);\n\n const filePath =\n getStringValue(input?.filePath) ??\n getStringValue(input?.file_path) ??\n getStringValue(output?.filePath) ??\n undefined;\n\n const original = getStringValue(output?.oldString) ?? getStringValue(input?.old_string) ?? undefined;\n const modified = getStringValue(output?.newString) ?? getStringValue(input?.new_string) ?? undefined;\n\n const title = buildBaseTitle(invocation, undefined, \"Edit file\");\n if (filePath) {\n title.push(buildFileLinkSegment(filePath));\n }\n\n const diffBlocks =\n original !== undefined && modified !== undefined\n ? buildEditDiff(original, modified)\n : getDiffBlocks(getStringValue(output?.diff));\n\n return {\n indicator: buildIndicator(invocation),\n title,\n blocks: prependErrorBlock(invocation, diffBlocks),\n } satisfies Item;\n};\n","import type { ToolPart } from \"../components/message-types\";\nimport type { Block, Item, TitleSegment } from \"../components/timeline\";\nimport { getQuestionResponseText, parseQuestionPrompt } from \"./question-prompt\";\nimport type { ToolRenderer } from \"./types\";\n\ntype QuestionRendererDependencies = {\n buildBaseTitle: (invocation: ToolPart, detail?: string, labelOverride?: string) => TitleSegment[];\n buildIndicator: (invocation: ToolPart) => Item[\"indicator\"];\n prependErrorBlock: (invocation: ToolPart, blocks: Block[]) => Block[];\n};\n\nexport const createQuestionRenderer = (deps: QuestionRendererDependencies): ToolRenderer => {\n const { buildBaseTitle, buildIndicator, prependErrorBlock } = deps;\n\n return (invocation) => {\n const responseText =\n getQuestionResponseText(invocation.state?.output) ?? getQuestionResponseText(invocation.state?.metadata);\n const prompt = parseQuestionPrompt(invocation.state?.input);\n const block = prompt ? ({ type: \"question-form\", questions: prompt.questions } satisfies Block) : null;\n if (!responseText && !block) return null;\n\n const fieldLabel = block ? `${block.questions.length} field${block.questions.length === 1 ? \"\" : \"s\"}` : undefined;\n const blocks = responseText ? [] : [block!];\n\n return {\n indicator: buildIndicator(invocation),\n title: buildBaseTitle(invocation, fieldLabel, \"Question\"),\n blocks: prependErrorBlock(invocation, blocks),\n expandable: false,\n } satisfies Item;\n };\n};\n","import type { Block, Item } from \"../components/timeline\";\nimport {\n buildBaseTitle,\n buildFileLinkSegment,\n buildIndicator,\n getInputObject,\n getOutputObject,\n getOutputText,\n getSkillName,\n getStringValue,\n parseSkillContentBlock,\n prependErrorBlock,\n} from \"./shared\";\nimport type { ToolRenderer } from \"./types\";\n\nexport const renderRead: ToolRenderer = (invocation) => {\n const input = getInputObject(invocation);\n const output = getOutputObject(invocation);\n\n const filePath =\n getStringValue(input?.filePath) ??\n getStringValue(input?.file_path) ??\n getStringValue(input?.file) ??\n getStringValue(output?.filePath) ??\n getStringValue(output?.file) ??\n getStringValue(output?.path) ??\n undefined;\n\n const title = buildBaseTitle(invocation, undefined, \"Read file\");\n if (filePath) {\n title.push(buildFileLinkSegment(filePath));\n }\n\n return {\n indicator: buildIndicator(invocation),\n title,\n blocks: prependErrorBlock(invocation, []),\n } satisfies Item;\n};\n\nconst renderCommand = (invocation: Parameters<ToolRenderer>[0], label: string) => {\n const input = getInputObject(invocation);\n const output = getOutputObject(invocation);\n const command = getStringValue(input?.command) ?? undefined;\n\n const title = buildBaseTitle(invocation, command, label, \"monospace\");\n const blocks: Block[] = [];\n\n const outputText = getOutputText(invocation);\n if (outputText) {\n blocks.push({ type: \"code\", language: \"text\", code: outputText });\n }\n\n const stderr = getStringValue(output?.stderr);\n if (stderr && stderr !== outputText) {\n blocks.push({ type: \"code\", language: \"text\", code: stderr });\n }\n\n if (typeof output?.exitCode === \"number\") {\n blocks.push({ type: \"text\", text: `Exit code: ${output.exitCode}` });\n }\n\n return {\n indicator: buildIndicator(invocation),\n title,\n blocks: prependErrorBlock(invocation, blocks),\n } satisfies Item;\n};\n\nexport const renderBash: ToolRenderer = (invocation) => renderCommand(invocation, \"Run command\");\n\nexport const renderShell: ToolRenderer = (invocation) => renderCommand(invocation, \"Shell\");\n\nexport const renderGrep: ToolRenderer = (invocation) => {\n const input = getInputObject(invocation);\n const outputText = getOutputText(invocation);\n const query = getStringValue(input?.pattern) ?? undefined;\n\n const title = buildBaseTitle(invocation, query, \"Search files\");\n const blocks: Block[] = outputText ? [{ type: \"code\", language: \"text\", code: outputText }] : [];\n\n return {\n indicator: buildIndicator(invocation),\n title,\n blocks: prependErrorBlock(invocation, blocks),\n } satisfies Item;\n};\n\nexport const renderGlob: ToolRenderer = (invocation) => {\n const input = getInputObject(invocation);\n const outputText = getOutputText(invocation);\n const pattern = getStringValue(input?.pattern) ?? undefined;\n\n const title = buildBaseTitle(invocation, pattern, \"Find files\");\n const blocks: Block[] = [];\n\n if (outputText) {\n const references = outputText\n .split(/\\r?\\n/)\n .map((line) => line.trim())\n .filter((line) => line.length > 0);\n\n if (references.length > 0) {\n blocks.push({ type: \"references\", references });\n }\n }\n\n return {\n indicator: buildIndicator(invocation),\n title,\n blocks: prependErrorBlock(invocation, blocks),\n } satisfies Item;\n};\n\nexport const renderSkill: ToolRenderer = (invocation) => {\n const outputText = getOutputText(invocation);\n const parsedOutput = outputText ? parseSkillContentBlock(outputText) : null;\n\n const skillName = getSkillName(invocation) ?? parsedOutput?.skillName;\n const title = buildBaseTitle(invocation, skillName, \"Load skill\");\n\n const renderedContent = parsedOutput?.content ?? outputText;\n const blocks: Block[] = renderedContent ? [{ type: \"code\", language: \"markdown\", code: renderedContent }] : [];\n\n return {\n indicator: buildIndicator(invocation),\n title,\n blocks: prependErrorBlock(invocation, blocks),\n } satisfies Item;\n};\n","import type { ToolPart } from \"../components/message-types\";\nimport type { Block, Item, TitleSegment } from \"../components/timeline\";\nimport type { ToolRenderer } from \"./types\";\n\ntype TodoItem = {\n label: string;\n checked: boolean;\n};\n\ntype TodowriteRendererDependencies = {\n buildBaseTitle: (invocation: ToolPart, detail?: string, labelOverride?: string) => TitleSegment[];\n buildIndicator: (invocation: ToolPart) => Item[\"indicator\"];\n prependErrorBlock: (invocation: ToolPart, blocks: Block[]) => Block[];\n};\n\nconst getStringValue = (value: unknown) => {\n if (typeof value === \"string\" && value.trim().length > 0) return value;\n return null;\n};\n\nconst getObjectValue = (value: unknown) => {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) return null;\n return value as Record<string, unknown>;\n};\n\nconst parseTodoItem = (value: unknown): TodoItem | null => {\n const todo = getObjectValue(value);\n if (!todo) return null;\n\n const content = getStringValue(todo.content) ?? getStringValue(todo.title);\n if (!content) return null;\n const status = getStringValue(todo.status);\n\n return {\n label: content,\n checked: status === \"completed\",\n };\n};\n\nconst parseTodoItems = (value: unknown) => {\n if (!value) return { items: [], explicit: false };\n\n const listSource = (() => {\n if (Array.isArray(value)) return value;\n const objectValue = getObjectValue(value);\n if (!objectValue || !Array.isArray(objectValue.todos)) return null;\n return objectValue.todos;\n })();\n\n if (!listSource) return { items: [], explicit: false };\n\n return {\n items: listSource.map(parseTodoItem).filter((todo): todo is TodoItem => todo !== null),\n explicit: true,\n };\n};\n\nexport const createTodowriteRenderer = (deps: TodowriteRendererDependencies): ToolRenderer => {\n const { buildBaseTitle, buildIndicator, prependErrorBlock } = deps;\n\n return (invocation) => {\n const inputTodos = parseTodoItems(invocation.state?.input);\n const outputTodos = parseTodoItems(invocation.state?.output);\n const todoState = outputTodos.explicit ? outputTodos : inputTodos;\n if (!todoState.explicit) return null;\n\n const todos = todoState.items;\n const countLabel = `${todos.length} item${todos.length === 1 ? \"\" : \"s\"}`;\n const title = buildBaseTitle(invocation, countLabel, \"Update todos\");\n\n if (todos.length === 0) {\n return {\n indicator: buildIndicator(invocation),\n title,\n blocks: prependErrorBlock(invocation, [{ type: \"comment\", text: \"No todos\" }]),\n } satisfies Item;\n }\n\n const blocks: Block[] = [\n {\n type: \"todo-list\",\n items: todos,\n },\n ];\n\n return {\n indicator: buildIndicator(invocation),\n title,\n blocks: prependErrorBlock(invocation, blocks),\n } satisfies Item;\n };\n};\n","import { renderApplyPatch } from \"./apply-patch-renderer\";\nimport { renderEdit } from \"./edit-renderer\";\nimport { createQuestionRenderer } from \"./question-renderer\";\nimport { buildBaseTitle, buildIndicator, prependErrorBlock } from \"./shared\";\nimport { renderBash, renderGlob, renderGrep, renderRead, renderShell, renderSkill } from \"./standard-renderers\";\nimport { createTodowriteRenderer } from \"./todowrite-renderer\";\nimport type { ToolRenderersMap } from \"./types\";\n\nconst renderQuestion = createQuestionRenderer({\n buildBaseTitle,\n buildIndicator,\n prependErrorBlock,\n});\n\nconst renderTodowrite = createTodowriteRenderer({\n buildBaseTitle,\n buildIndicator,\n prependErrorBlock,\n});\n\nexport const createDefaultToolRenderers = () => {\n return {\n apply_patch: renderApplyPatch,\n bash: renderBash,\n edit: renderEdit,\n glob: renderGlob,\n grep: renderGrep,\n question: renderQuestion,\n read: renderRead,\n shell: renderShell,\n skill: renderSkill,\n todo_write: renderTodowrite,\n todowrite: renderTodowrite,\n } satisfies ToolRenderersMap;\n};\n","import type { ToolPart } from \"../components/message-types\";\nimport type { Block, Item, TitleSegment } from \"../components/timeline\";\nimport { toolTypeToIconName } from \"../utils/get-icon\";\nimport { getToolNameLookupKeys, normalizeToolName } from \"../utils/tool-name\";\nimport { createDefaultToolRenderers } from \"./default-renderers\";\nimport type { ToolRenderersMap, ToolTimelineBuilderOptions } from \"./types\";\n\nconst STATE_LABELS: Record<string, string> = {\n error: \"failed\",\n \"output-error\": \"failed\",\n \"input-streaming\": \"running\",\n};\n\nconst toTitleCase = (value: string) => {\n return value\n .split(\" \")\n .filter((token) => token.length > 0)\n .map((token) => token[0].toUpperCase() + token.slice(1))\n .join(\" \");\n};\n\nconst getToolLabel = (tool?: string) => {\n const normalized = normalizeToolName(tool ?? \"tool\").replace(/_/g, \" \");\n return toTitleCase(normalized);\n};\n\nconst isErrorState = (state?: string) => state === \"error\" || state === \"output-error\";\n\nconst buildIndicator = (invocation: ToolPart) => {\n if (isErrorState(invocation.state?.status)) {\n return { type: \"icon\", icon: \"danger\" } as const;\n }\n\n return { type: \"icon\", icon: toolTypeToIconName(invocation.tool ?? \"tool\") } as const;\n};\n\nconst getStateLabel = (state?: unknown) => {\n if (!state || typeof state !== \"string\") return null;\n if (STATE_LABELS[state]) return STATE_LABELS[state];\n if (state.includes(\"stream\")) return \"running\";\n return null;\n};\n\nconst stringifyValue = (value: unknown) => {\n if (typeof value === \"string\") return value;\n if (value === null || value === undefined) return null;\n\n try {\n return JSON.stringify(value, null, 2);\n } catch {\n return null;\n }\n};\n\nconst isBlankValue = (value: unknown): boolean => {\n if (value === null || value === undefined) return true;\n if (typeof value === \"string\") return value.trim().length === 0;\n if (Array.isArray(value)) return value.length === 0 || value.every(isBlankValue);\n if (typeof value === \"object\") {\n return Object.values(value as Record<string, unknown>).every(isBlankValue);\n }\n return false;\n};\n\nconst getRecord = (value: unknown) => {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) return null;\n return value as Record<string, unknown>;\n};\n\nconst getString = (value: unknown) => {\n if (typeof value === \"string\" && value.trim().length > 0) return value;\n return null;\n};\n\nconst getMediaType = (record: Record<string, unknown>) =>\n getString(record.mime_type) ?? getString(record.mediaType) ?? getString(record.mimeType);\n\nconst isImageMediaType = (value: string | null) => Boolean(value?.startsWith(\"image/\"));\n\nconst imageUrlPattern = /\\.(avif|bmp|gif|jpe?g|png|svg|webp)(\\?.*)?$/i;\n\nconst getImageBlock = (value: unknown, alt: string): Block | null => {\n const record = getRecord(value);\n if (!record) return null;\n\n const mediaType = getMediaType(record);\n const data = getString(record.data);\n if (data && isImageMediaType(mediaType)) {\n return { type: \"image\", src: `data:${mediaType};base64,${data}`, alt };\n }\n\n const url = getString(record.url) ?? getString(record.src);\n if (url && (isImageMediaType(mediaType) || imageUrlPattern.test(url))) {\n return { type: \"image\", src: url, alt };\n }\n\n return null;\n};\n\nconst getFileLikeOutput = (value: unknown) => {\n const record = getRecord(value);\n if (!record) return null;\n\n const filePath = getString(record.path) ?? getString(record.filePath) ?? getString(record.filename);\n const content = getString(record.content) ?? getString(record.body) ?? getString(record.text);\n if (!filePath || content === null) return null;\n\n return { filePath, content };\n};\n\nconst extensionLanguageBySuffix: Record<string, string> = {\n css: \"css\",\n html: \"html\",\n js: \"js\",\n json: \"json\",\n jsx: \"jsx\",\n md: \"markdown\",\n py: \"python\",\n ts: \"ts\",\n tsx: \"tsx\",\n yaml: \"yaml\",\n yml: \"yaml\",\n};\n\nconst getLanguageFromPath = (filePath: string) => {\n const extension = filePath.split(\".\").pop()?.toLowerCase();\n if (!extension) return \"text\";\n return extensionLanguageBySuffix[extension] ?? extension;\n};\n\nconst createLabeledBlocks = (label: string, blocks: Block[]) => {\n if (blocks.length === 0) return [];\n return [{ type: \"text\", text: label }, ...blocks] satisfies Block[];\n};\n\nconst buildBlocksForArrayValue = (value: unknown[], alt: string) => {\n const blocks: Block[] = [];\n\n for (const entry of value) {\n const entryRecord = getRecord(entry);\n const entryType = getString(entryRecord?.type);\n if (entryType === \"image\") {\n const image = getImageBlock(entry, alt);\n if (image) blocks.push(image);\n continue;\n }\n if (entryType === \"text\") {\n const text = getString(entryRecord?.text);\n if (text) blocks.push({ type: \"text\", text });\n continue;\n }\n blocks.push(...buildBlocksForValue(entry, alt));\n }\n\n return blocks;\n};\n\nconst buildBlocksForFileLikeValue = (value: unknown) => {\n const fileLikeOutput = getFileLikeOutput(value);\n if (!fileLikeOutput) return null;\n\n return [\n {\n type: \"code\",\n language: getLanguageFromPath(fileLikeOutput.filePath),\n code: fileLikeOutput.content,\n },\n ] satisfies Block[];\n};\n\nconst buildBlocksForAttachmentValue = (value: unknown) => {\n const record = getRecord(value);\n const attachmentName = getString(record?.attachment_name) ?? getString(record?.attachmentName);\n const attachmentId = getString(record?.attachment_file_id) ?? getString(record?.attachmentFileId);\n if (!attachmentName && !attachmentId) return null;\n\n return [{ type: \"text\", text: attachmentName ?? `Attachment ${attachmentId}` }] satisfies Block[];\n};\n\nconst buildBlocksForValue = (value: unknown, alt: string): Block[] => {\n if (isBlankValue(value)) return [];\n\n const imageBlock = getImageBlock(value, alt);\n if (imageBlock) return [imageBlock];\n\n if (Array.isArray(value)) return buildBlocksForArrayValue(value, alt);\n\n const fileBlocks = buildBlocksForFileLikeValue(value);\n if (fileBlocks) return fileBlocks;\n\n const attachmentBlocks = buildBlocksForAttachmentValue(value);\n if (attachmentBlocks) return attachmentBlocks;\n\n const text = stringifyValue(value);\n if (!text?.trim()) return [];\n\n return [{ type: \"code\", language: typeof value === \"string\" ? \"text\" : \"json\", code: text }] satisfies Block[];\n};\n\nconst buildGenericBlocks = (invocation: ToolPart): Block[] => {\n const blocks: Block[] = [];\n const toolLabel = getToolLabel(invocation.tool);\n\n if (isErrorState(invocation.state?.status) && invocation.state?.errorText) {\n blocks.push({ type: \"comment\", text: invocation.state.errorText });\n }\n\n blocks.push(...createLabeledBlocks(\"Input\", buildBlocksForValue(invocation.state?.input, `${toolLabel} input`)));\n blocks.push(...createLabeledBlocks(\"Output\", buildBlocksForValue(invocation.state?.output, `${toolLabel} output`)));\n\n return blocks;\n};\n\nconst createGenericItem = (invocation: ToolPart) => {\n const title: TitleSegment[] = [{ kind: \"text\", text: getToolLabel(invocation.tool), bold: true }];\n const fileLikeOutput = getFileLikeOutput(invocation.state?.output);\n if (fileLikeOutput) {\n title.push({ kind: \"link\", text: fileLikeOutput.filePath, filePath: fileLikeOutput.filePath });\n }\n const stateLabel = getStateLabel(invocation.state?.status);\n if (stateLabel) {\n title.push({ kind: \"text\", text: stateLabel, muted: true });\n }\n\n return {\n indicator: buildIndicator(invocation),\n title,\n blocks: buildGenericBlocks(invocation),\n };\n};\n\nconst isVisibleTitleSegment = (segment: TitleSegment) => {\n if (segment.kind === \"text\" || segment.kind === \"link\") return segment.text.trim().length > 0;\n if (segment.kind === \"diff\") return segment.fileName.trim().length > 0;\n return true;\n};\n\nconst isVisibleBlock = (block: Block) => {\n switch (block.type) {\n case \"comment\":\n case \"code\":\n case \"text\":\n return block.type === \"code\" ? block.code.trim().length > 0 : block.text.trim().length > 0;\n case \"diff\":\n return block.original.trim().length > 0 || block.modified.trim().length > 0;\n case \"image\":\n return block.src.trim().length > 0;\n case \"todo-list\":\n return block.items.length > 0;\n case \"question-form\":\n return block.questions.length > 0;\n case \"references\":\n return block.references.length > 0;\n case \"input\":\n case \"component\":\n return true;\n }\n};\n\nconst isVisibleItem = (item: Item) => {\n const hasTitle = item.title.some(isVisibleTitleSegment);\n const hasBlocks = (item.blocks ?? []).some(isVisibleBlock);\n return hasTitle || hasBlocks;\n};\n\nconst mergeToolRenderers = (overrides?: ToolRenderersMap) => {\n if (!overrides) return createDefaultToolRenderers();\n return { ...createDefaultToolRenderers(), ...overrides } satisfies ToolRenderersMap;\n};\n\nconst getRenderer = (invocation: ToolPart, toolRenderers: ToolRenderersMap) => {\n const rawTool = invocation.tool ?? \"tool\";\n for (const key of getToolNameLookupKeys(rawTool)) {\n const renderer = toolRenderers[key];\n if (renderer) return renderer;\n }\n\n return undefined;\n};\n\nconst renderInvocation = (\n invocation: ToolPart,\n toolRenderers: ToolRenderersMap,\n options?: ToolTimelineBuilderOptions,\n) => {\n const renderer = getRenderer(invocation, toolRenderers);\n if (renderer) {\n const rendered = renderer(invocation, options);\n if (rendered) return rendered;\n }\n\n return createGenericItem(invocation);\n};\n\nexport const buildTimelineDocFromInvocations = (invocations: ToolPart[], options?: ToolTimelineBuilderOptions) => {\n const toolRenderers = mergeToolRenderers(options?.toolRenderers);\n const items = invocations\n .map((invocation) => renderInvocation(invocation, toolRenderers, options))\n .filter(isVisibleItem);\n\n return { items };\n};\n","import { type ComponentProps, lazy, Suspense } from \"react\";\n\nconst Editor = lazy(() => import(\"./diff-editor\").then((module) => ({ default: module.DiffEditor })));\n\nexport const DiffEditor = (props: ComponentProps<typeof Editor>) => (\n <Suspense fallback={null}>\n <Editor {...props} />\n </Suspense>\n);\n","import { Avatar, Link, Span } from \"@chakra-ui/react\";\nimport type { MouseEvent } from \"react\";\nimport { DiffBubble } from \"@/components/diff-viewer/diff-bubble\";\nimport { Tooltip } from \"@/components/primitives/tooltip\";\nimport type { TitleSegment } from \"./timeline\";\n\nconst handleTitleLinkClick = (\n event: MouseEvent<HTMLAnchorElement>,\n seg: Extract<TitleSegment, { kind: \"link\" }>,\n onOpenFile?: (filePath: string) => void,\n stopPropagation = false,\n) => {\n if (stopPropagation) {\n event.stopPropagation();\n }\n\n if (!seg.href) {\n event.preventDefault();\n }\n if (seg.filePath) {\n onOpenFile?.(seg.filePath);\n }\n};\n\nfunction AvatarTitleSegment({ seg }: { seg: Extract<TitleSegment, { kind: \"avatar\" }> }) {\n return (\n <Avatar.Root width=\"1.5rem\" height=\"1.5rem\">\n <Avatar.Image src={seg.src} alt={seg.alt} />\n <Avatar.Fallback background=\"bg.muted\" color=\"fg.muted\" />\n </Avatar.Root>\n );\n}\n\nfunction DiffTitleSegment({\n seg,\n onOpenFile,\n}: {\n seg: Extract<TitleSegment, { kind: \"diff\" }>;\n onOpenFile?: (filePath: string) => void;\n}) {\n return (\n <DiffBubble\n fileName={seg.fileName}\n additions={seg.additions ?? 0}\n deletions={seg.deletions ?? 0}\n onClickFileLink={() => {\n const path = seg.filePath ?? seg.fileName;\n onOpenFile?.(path);\n }}\n />\n );\n}\n\nfunction BubbleLinkTitleSegment({\n seg,\n onOpenFile,\n}: {\n seg: Extract<TitleSegment, { kind: \"link\" }>;\n onOpenFile?: (filePath: string) => void;\n}) {\n const fontWeight = seg.bold ? \"medium\" : undefined;\n const isInteractive = Boolean(seg.href || seg.filePath);\n\n return (\n <Link\n href={seg.href ?? \"#\"}\n fontWeight={fontWeight}\n color={seg.muted ? \"fg.muted\" : \"fg.muted\"}\n textDecoration=\"none\"\n cursor={isInteractive ? \"pointer\" : \"default\"}\n onClick={(event) => handleTitleLinkClick(event, seg, onOpenFile, true)}\n _hover={{\n textDecoration: \"underline\",\n color: seg.muted ? \"fg.muted\" : \"fg.blue-dark\",\n }}\n >\n {seg.text}\n </Link>\n );\n}\n\nfunction DefaultLinkTitleSegment({\n seg,\n onOpenFile,\n}: {\n seg: Extract<TitleSegment, { kind: \"link\" }>;\n onOpenFile?: (filePath: string) => void;\n}) {\n const fontWeight = seg.bold ? \"medium\" : undefined;\n\n return (\n <Link\n href={seg.href ?? \"#\"}\n fontWeight={fontWeight}\n color={seg.muted ? \"fg.muted\" : \"accent.primary\"}\n textDecoration=\"underline\"\n onClick={(event) => handleTitleLinkClick(event, seg, onOpenFile)}\n _hover={{\n color: seg.muted ? \"fg.muted\" : \"accent.primary\",\n textDecoration: \"underline\",\n }}\n >\n {seg.text}\n </Link>\n );\n}\n\nfunction TextTitleSegment({\n seg,\n isClickable,\n}: {\n seg: Extract<TitleSegment, { kind: \"text\" }>;\n isClickable?: boolean;\n}) {\n const segment = (\n <Span\n fontWeight={seg.bold ? \"medium\" : undefined}\n textStyle={seg.monospace ? \"mono/XS\" : undefined}\n color=\"fg.muted\"\n minW={seg.truncate ? \"0\" : undefined}\n overflow={seg.truncate ? \"hidden\" : undefined}\n textOverflow={seg.truncate ? \"ellipsis\" : undefined}\n whiteSpace={seg.truncate ? \"nowrap\" : undefined}\n _groupHover={{\n color: isClickable && !seg.muted ? \"fg\" : \"fg.muted\",\n }}\n >\n {seg.text}\n </Span>\n );\n\n if (!seg.truncate) return segment;\n\n return <Tooltip content={seg.text}>{segment}</Tooltip>;\n}\n\nexport function TitleInline({\n seg,\n isClickable,\n onOpenFile,\n}: {\n seg: TitleSegment;\n isClickable?: boolean;\n onOpenFile?: (filePath: string) => void;\n}) {\n switch (seg.kind) {\n case \"avatar\":\n return <AvatarTitleSegment seg={seg} />;\n case \"diff\":\n return <DiffTitleSegment seg={seg} onOpenFile={onOpenFile} />;\n case \"link\":\n return seg.variant === \"bubble\" ? (\n <BubbleLinkTitleSegment seg={seg} onOpenFile={onOpenFile} />\n ) : (\n <DefaultLinkTitleSegment seg={seg} onOpenFile={onOpenFile} />\n );\n case \"text\":\n return <TextTitleSegment seg={seg} isClickable={isClickable} />;\n default:\n return null;\n }\n}\n","import { Avatar, Box, Button, Card, Timeline as ChakraTimeline, Image, Span, Stack, Text } from \"@chakra-ui/react\";\nimport { ChevronUpIcon } from \"lucide-react\";\nimport type { ReactNode } from \"react\";\nimport { useState } from \"react\";\nimport { DiffEditor } from \"@/components/diff-viewer/lazy-diff-editor\";\nimport { ResourceBadge } from \"@/components/primitives/resource-badge\";\nimport { ScrollArea } from \"@/components/primitives/scroll-area\";\nimport type { IconName } from \"../utils/get-icon\";\nimport { getIconComponent } from \"../utils/get-icon\";\nimport { TitleInline } from \"./timeline-title\";\nimport { QuestionFormBlockView, TodoListBlockView } from \"./timeline-tool-blocks\";\n\nconst Timeline = ChakraTimeline;\n\nexport type TimelineDoc = {\n items: Item[];\n};\n\nexport type Item = {\n id?: string;\n timestamp?: string;\n indicator?: Indicator;\n title: TitleSegment[];\n blocks?: Block[];\n expandable?: boolean;\n};\n\nexport type Indicator =\n | { type: \"icon\"; icon: IconName; color?: string }\n | { type: \"avatar\"; src: string; alt?: string }\n | { type: \"none\" };\n\nexport type TitleSegment =\n | {\n kind: \"text\";\n text: string;\n bold?: boolean;\n muted?: boolean;\n truncate?: boolean;\n monospace?: boolean;\n }\n | { kind: \"avatar\"; src: string; alt?: string }\n | {\n kind: \"diff\";\n fileName: string;\n filePath?: string;\n additions?: number;\n deletions?: number;\n }\n | {\n kind: \"link\";\n text: string;\n href?: string;\n filePath?: string;\n bold?: boolean;\n muted?: boolean;\n variant?: \"default\" | \"bubble\";\n };\n\nexport type TodoListBlockItem = {\n label: string;\n checked: boolean;\n};\n\nexport type QuestionFormBlockOption = {\n label: string;\n description?: string;\n};\n\nexport type QuestionFormBlockQuestion = {\n id?: string;\n question: string;\n options: QuestionFormBlockOption[];\n multiple: boolean;\n required: boolean;\n allowCustomAnswer: boolean;\n};\n\nexport type Block =\n | { type: \"comment\"; text: string; reactions?: { clap?: number } }\n | { type: \"code\"; language: string; code: string; editable?: boolean }\n | {\n type: \"diff\";\n language?: string;\n original: string;\n modified: string;\n sideBySide?: boolean;\n }\n | { type: \"input\"; placeholder?: string }\n | { type: \"text\"; text: string }\n | { type: \"todo-list\"; items: TodoListBlockItem[] }\n | { type: \"question-form\"; questions: QuestionFormBlockQuestion[] }\n | { type: \"references\"; references: string[] }\n | { type: \"image\"; src: string; alt: string; caption?: string }\n | {\n type: \"component\";\n render: (ctx: { onOpenFile?: (filePath: string) => void }) => ReactNode;\n };\n\nfunction IndicatorView({ ind }: { ind?: Indicator }) {\n if (!ind || ind.type === \"none\") return null;\n\n if (ind.type === \"icon\") {\n const IndicatorIcon = getIconComponent(ind.icon);\n return (\n <Timeline.Indicator outline=\"none\" border=\"none\" background=\"bg\" color=\"fg\">\n <Span display=\"inline-flex\" alignItems=\"center\">\n <IndicatorIcon size={14} strokeWidth={1} />\n </Span>\n </Timeline.Indicator>\n );\n }\n\n return (\n <Timeline.Indicator>\n <Avatar.Root boxSize=\"full\">\n <Avatar.Image src={ind.src} alt={ind.alt} />\n <Avatar.Fallback background=\"bg.muted\" color=\"fg.muted\" />\n </Avatar.Root>\n </Timeline.Indicator>\n );\n}\n\nfunction CodeBlock({ code, language }: { code: string; language?: string }) {\n return (\n <ScrollArea\n background=\"bg.code\"\n color=\"fg.muted\"\n borderWidth=\"1px\"\n borderColor=\"border.subtle\"\n borderRadius=\"md\"\n showHorizontalScrollbar\n showVerticalScrollbar={false}\n >\n <Box\n as=\"pre\"\n padding=\"sm\"\n textStyle=\"mono/XS\"\n whiteSpace=\"pre\"\n aria-label={language ? `${language} code block` : \"code block\"}\n >\n <Box as=\"code\">{code}</Box>\n </Box>\n </ScrollArea>\n );\n}\n\nfunction BlockView({ b, onOpenFile }: { b: Block; onOpenFile?: (filePath: string) => void }) {\n switch (b.type) {\n case \"comment\":\n return (\n <Card.Root>\n <Card.Body>{b.text}</Card.Body>\n {b.reactions?.clap ? (\n <Card.Footer>\n <Button>👏 {b.reactions.clap}</Button>\n </Card.Footer>\n ) : null}\n </Card.Root>\n );\n case \"code\":\n return (\n <Card.Root border=\"0\" padding=\"0\">\n <Card.Body padding=\"0\">\n <CodeBlock language={b.language} code={b.code} />\n </Card.Body>\n </Card.Root>\n );\n case \"diff\":\n return (\n <Card.Root border=\"0\" padding=\"0\">\n <Card.Body padding=\"0\">\n <Box height=\"240px\" minW=\"320px\" overflow=\"hidden\">\n <DiffEditor\n original={b.original}\n modified={b.modified}\n language={b.language}\n sideBySide={b.sideBySide ?? false}\n disableScroll={true}\n />\n </Box>\n </Card.Body>\n </Card.Root>\n );\n case \"text\":\n return (\n <Card.Root background=\"transparent\">\n <Card.Body padding=\"sm\">\n <Text textStyle=\"label/S/regular\">{b.text}</Text>\n </Card.Body>\n </Card.Root>\n );\n case \"todo-list\":\n return <TodoListBlockView items={b.items} />;\n case \"question-form\":\n return <QuestionFormBlockView questions={b.questions} />;\n case \"references\":\n return (\n <Stack mt=\"xs\" gap=\"xs\" flexDir=\"row\" flexWrap=\"wrap\">\n {b.references.map((ref) => (\n <ResourceBadge key={ref} fileName={ref} />\n ))}\n </Stack>\n );\n case \"image\":\n if (!b.src.trim()) return null;\n return (\n <Card.Root border=\"0\" padding=\"0\" background=\"transparent\">\n <Card.Body padding=\"0\">\n <Image\n src={b.src}\n alt={b.alt}\n maxH=\"18rem\"\n maxW=\"full\"\n objectFit=\"contain\"\n borderRadius=\"sm\"\n borderWidth=\"1px\"\n borderColor=\"border.subtle\"\n />\n {b.caption ? (\n <Text mt=\"2xs\" textStyle=\"label/XS/regular\" color=\"fg.muted\">\n {b.caption}\n </Text>\n ) : null}\n </Card.Body>\n </Card.Root>\n );\n case \"component\":\n return <>{b.render({ onOpenFile })}</>;\n }\n}\n\nfunction TimelineItemRow({\n item,\n itemKey,\n isOpen,\n canExpand,\n hasBlocks,\n onToggle,\n onOpenFile,\n}: {\n item: Item;\n itemKey: string;\n isOpen: boolean;\n canExpand: boolean;\n hasBlocks: boolean;\n onToggle: (key: string) => void;\n onOpenFile?: (filePath: string) => void;\n}) {\n return (\n <Timeline.Item gap=\"xs\" key={itemKey}>\n <Timeline.Connector>\n <Timeline.Separator />\n <IndicatorView ind={item.indicator} />\n </Timeline.Connector>\n <Timeline.Content h={isOpen ? \"auto\" : \"20px\"}>\n {item.title.length > 0 && (\n <Timeline.Title\n className=\"group\"\n fontWeight=\"normal\"\n display=\"flex\"\n alignItems=\"center\"\n minW=\"0\"\n width=\"full\"\n overflow=\"hidden\"\n cursor={canExpand ? \"pointer\" : \"default\"}\n onClick={canExpand ? () => onToggle(itemKey) : undefined}\n >\n <Span display=\"flex\" alignItems=\"center\" gap=\"sm\" flexWrap=\"nowrap\" minW=\"0\" width=\"full\">\n <Span display=\"flex\" alignItems=\"center\" gap=\"xs\" flexWrap=\"nowrap\" minW=\"0\" flex=\"1\" overflow=\"hidden\">\n {item.title.map((seg, i) => (\n <TitleInline key={i} seg={seg} isClickable={canExpand} onOpenFile={onOpenFile} />\n ))}\n </Span>\n {canExpand ? (\n <Span\n display=\"inline-flex\"\n alignItems=\"center\"\n transition=\"transform 200ms ease, color 200ms ease\"\n transform={isOpen ? \"rotate(0deg)\" : \"rotate(-180deg)\"}\n color=\"transparent\"\n flexShrink=\"0\"\n _groupHover={{ color: \"fg\" }}\n >\n <ChevronUpIcon size={12} />\n </Span>\n ) : null}\n </Span>\n </Timeline.Title>\n )}\n {hasBlocks ? (\n <Box display=\"grid\" gridTemplateRows={isOpen ? \"1fr\" : \"0fr\"} transition=\"grid-template-rows 220ms ease\">\n {isOpen ? (\n <Box\n overflow=\"hidden\"\n opacity={1}\n transform=\"translateY(0)\"\n transition=\"opacity 200ms ease, transform 200ms ease\"\n >\n {item.blocks!.map((block, i) => (\n <Box key={i}>\n <BlockView b={block} onOpenFile={onOpenFile} />\n </Box>\n ))}\n </Box>\n ) : null}\n </Box>\n ) : null}\n </Timeline.Content>\n </Timeline.Item>\n );\n}\n\nexport function TimelineFromJSON({ data, onOpenFile }: { data: TimelineDoc; onOpenFile?: (filePath: string) => void }) {\n const [expanded, setExpanded] = useState<Record<string, boolean>>({});\n\n const getKey = (it: Item, idx: number) => (it.id ? `id:${it.id}` : `idx:${idx}`);\n\n const toggle = (key: string) => {\n setExpanded((prev) => ({ ...prev, [key]: !prev[key] }));\n };\n\n return (\n <Timeline.Root variant=\"tool\">\n {data.items.map((item, idx) => {\n const key = getKey(item, idx);\n const hasBlocks = (item.blocks?.length ?? 0) > 0;\n const canExpand = (item.expandable ?? true) && hasBlocks;\n const isOpen = canExpand ? (expanded[key] ?? false) : hasBlocks;\n\n return (\n <TimelineItemRow\n key={key}\n item={item}\n itemKey={key}\n isOpen={isOpen}\n canExpand={canExpand}\n hasBlocks={hasBlocks}\n onToggle={toggle}\n onOpenFile={onOpenFile}\n />\n );\n })}\n </Timeline.Root>\n );\n}\n","import { buildTimelineDocFromInvocations } from \"../tool-rendering\";\nimport { normalizeToolName } from \"../utils/tool-name\";\nimport type { ToolPart } from \"./message-types\";\nimport { TimelineFromJSON } from \"./timeline\";\n\nexport interface ToolInvocationTimelineProps {\n invocations: ToolPart[];\n labeledBlocks?: boolean;\n hideQuestionForms?: boolean;\n onOpenFile?: (filePath: string) => void;\n}\n\nconst isQuestionTool = (invocation: ToolPart) =>\n normalizeToolName(invocation.tool ?? \"\").replace(/_/g, \"\") === \"question\";\n\nconst hasToolOutput = (invocation: ToolPart) => {\n const output = invocation.state?.output;\n if (typeof output === \"string\") return output.trim().length > 0;\n if (Array.isArray(output)) return output.length > 0;\n if (output && typeof output === \"object\") return Object.keys(output).length > 0;\n return output !== undefined && output !== null;\n};\n\nexport function ToolInvocationTimeline(props: ToolInvocationTimelineProps) {\n const { invocations, labeledBlocks, hideQuestionForms = false, onOpenFile } = props;\n const visibleInvocations = hideQuestionForms\n ? invocations.filter((invocation) => !isQuestionTool(invocation) || hasToolOutput(invocation))\n : invocations;\n\n if (visibleInvocations.length === 0) return null;\n\n const data = buildTimelineDocFromInvocations(visibleInvocations, { labeledBlocks });\n\n return <TimelineFromJSON data={data} onOpenFile={onOpenFile} />;\n}\n","import { Box, Image, Spinner } from \"@chakra-ui/react\";\nimport type { ReactNode } from \"react\";\nimport { AlertMessage } from \"@/components/primitives/alert\";\nimport { ResourceBadge } from \"@/components/primitives/resource-badge\";\nimport { RichMessage } from \"@/components/rich-text\";\nimport { Response } from \"./ai-response\";\nimport type { AlertPart, ChatMessagePart, ErrorPart, FilePart, SessionMessage, ToolPart } from \"./message-types\";\nimport { ToolInvocationTimeline, type ToolInvocationTimelineProps } from \"./tool-invocation-timeline\";\n\ntype ToolInvocationTimelineComponent = (props: ToolInvocationTimelineProps) => ReactNode;\n\nexport interface MessagePartsProps {\n message: SessionMessage;\n streaming?: boolean;\n hideQuestionForms?: boolean;\n onOpenFile?: (filePath: string) => void;\n toolInvocationTimeline?: ToolInvocationTimelineComponent;\n}\n\nconst isToolPart = (part: ChatMessagePart): part is ToolPart => {\n return part.type === \"tool\";\n};\n\nconst filePartLabel = (part: FilePart) => part.filename ?? part.url.split(\"/\").pop() ?? \"attachment\";\n\nconst imageExtensionPattern = /\\.(avif|bmp|gif|jpe?g|png|svg|webp)$/i;\n\nconst isImageFilePart = (part: FilePart) =>\n part.mediaType?.startsWith(\"image/\") || imageExtensionPattern.test(filePartLabel(part));\n\nconst filePartThumbnail = (part: FilePart) =>\n isImageFilePart(part) ? (\n <Image\n src={part.url}\n alt={`${filePartLabel(part)} preview thumbnail`}\n boxSize=\"18px\"\n borderRadius=\"xs\"\n objectFit=\"cover\"\n />\n ) : undefined;\n\nconst openFilePart = (part: FilePart, onOpenFile?: (filePath: string) => void) => {\n if (onOpenFile) {\n onOpenFile(part.url);\n return;\n }\n\n if (typeof window !== \"undefined\") {\n window.open(part.url, \"_blank\", \"noopener,noreferrer\");\n }\n};\n\nconst getErrorMessage = (part: ErrorPart) => {\n if (part.message && part.message.trim().length > 0) {\n return part.message;\n }\n\n const { errorType } = part;\n switch (errorType) {\n case \"timeout\":\n return \"Session timed out.\";\n case \"crash\":\n return \"Session crashed unexpectedly.\";\n case \"permission\":\n return \"Permission denied.\";\n default:\n return \"An error occurred.\";\n }\n};\n\nconst ALERT_COLOR_PALETTE: Record<AlertPart[\"status\"], string> = {\n info: \"blue\",\n warning: \"orange\",\n error: \"red\",\n success: \"green\",\n loading: \"blue\",\n};\n\nconst collectToolInvocations = (parts: ChatMessagePart[], startIndex: number) => {\n const invocations: ToolPart[] = [];\n let lookahead = startIndex;\n\n while (lookahead < parts.length) {\n const nextPart = parts[lookahead];\n if (!isToolPart(nextPart)) break;\n invocations.push(nextPart);\n lookahead += 1;\n }\n\n return { invocations, nextIndex: lookahead - 1 };\n};\n\nexport function MessagePartsRenderer(props: MessagePartsProps) {\n const { message, hideQuestionForms = false, onOpenFile, toolInvocationTimeline } = props;\n const RenderToolInvocationTimeline = toolInvocationTimeline ?? ToolInvocationTimeline;\n const parts = message.parts ?? [];\n const nodes: ReactNode[] = [];\n\n for (let partIndex = 0; partIndex < parts.length; partIndex += 1) {\n const part = parts[partIndex];\n const key = `${message.id}-${partIndex}`;\n\n switch (part.type) {\n case \"text\":\n nodes.push(\n <div key={key}>\n <Response>{part.text}</Response>\n </div>,\n );\n break;\n case \"reasoning\":\n nodes.push(\n <Box\n key={key}\n padding=\"0\"\n css={{\n \"& .rich-text, & .rich-text *\": {\n color: \"fg.subtle !important\",\n fontSize: \".75rem !important\",\n fontWeight: \"normal !important\",\n },\n }}\n >\n <RichMessage defaultState={part.text} fullWidth />\n </Box>,\n );\n break;\n case \"tool\": {\n const { invocations, nextIndex } = collectToolInvocations(parts, partIndex);\n partIndex = nextIndex;\n nodes.push(\n <Box key={key} width=\"full\">\n <RenderToolInvocationTimeline\n invocations={invocations}\n labeledBlocks\n hideQuestionForms={hideQuestionForms}\n onOpenFile={onOpenFile}\n />\n </Box>,\n );\n break;\n }\n case \"file\":\n nodes.push(\n <Box key={key} width=\"fit-content\">\n <ResourceBadge\n fileName={filePartLabel(part)}\n size=\"sm\"\n tone=\"neutral\"\n icon={filePartThumbnail(part)}\n onSelect={() => openFilePart(part, onOpenFile)}\n />\n </Box>,\n );\n break;\n case \"error\":\n nodes.push(\n <Box key={key} py=\"2\" width=\"full\">\n <AlertMessage borderRadius=\"xs\" status=\"error\" colorPalette=\"red\" title={getErrorMessage(part)} size=\"sm\" />\n </Box>,\n );\n break;\n case \"token_usage\":\n break;\n case \"alert\":\n nodes.push(\n <Box key={key} width=\"full\">\n <AlertMessage\n borderRadius=\"xs\"\n status={part.status === \"loading\" ? \"info\" : part.status}\n colorPalette={ALERT_COLOR_PALETTE[part.status]}\n title={part.title}\n icon={part.status === \"loading\" ? <Spinner size=\"sm\" /> : undefined}\n size=\"sm\"\n >\n {part.message}\n </AlertMessage>\n </Box>,\n );\n break;\n default:\n nodes.push(null);\n }\n }\n\n return <>{nodes}</>;\n}\n","// Keep the non-alert session parts aligned with pstdio-api-contracts/src/session-messages.ts.\n// @pstdio/ui cannot import that private package, so the public UI contract owns this copy.\nexport type SessionMessageRole = \"user\" | \"assistant\" | \"tool\" | \"system\" | \"developer\";\n\nexport type TextPart = { type: \"text\"; text: string };\n\nexport type ReasoningPart = { type: \"reasoning\"; text: string };\n\nexport type ToolPartActionType = \"read\" | \"write\" | \"execute\" | \"network\" | \"other\";\n\nexport type ToolPartStatus = \"pending\" | \"running\" | \"completed\" | \"failed\" | \"denied\";\n\nexport type ToolPart = {\n type: \"tool\";\n tool: string;\n callId?: string;\n actionType?: ToolPartActionType;\n status?: ToolPartStatus;\n state?: {\n status?: string;\n input?: unknown;\n output?: unknown;\n errorText?: string;\n metadata?: unknown;\n };\n};\n\nexport type StepStartPart = { type: \"step-start\"; snapshot?: string };\n\nexport type StepFinishPart = {\n type: \"step-finish\";\n reason?: string;\n snapshot?: string;\n cost?: number;\n tokens?: unknown;\n};\n\nexport type PatchPart = { type: \"patch\"; hash?: string; files?: unknown };\n\nexport type FilePart = {\n type: \"file\";\n fileId?: string;\n mediaType?: string;\n filename?: string;\n size?: number;\n url: string;\n};\n\nexport type LoadingPart = { type: \"loading\" };\n\nexport type ErrorPart = {\n type: \"error\";\n errorType: \"timeout\" | \"crash\" | \"permission\" | \"other\";\n message?: string;\n};\n\nexport type TokenUsagePart = {\n type: \"token_usage\";\n inputTokens: number;\n outputTokens: number;\n cacheReadTokens?: number;\n cacheWriteTokens?: number;\n};\n\nexport type AlertPart = {\n type: \"alert\";\n status: \"info\" | \"warning\" | \"error\" | \"success\" | \"loading\";\n title: string;\n message?: string;\n};\n\nexport type SessionMessagePart =\n | TextPart\n | ReasoningPart\n | ToolPart\n | StepStartPart\n | StepFinishPart\n | PatchPart\n | FilePart\n | LoadingPart\n | ErrorPart\n | TokenUsagePart;\n\nexport type ChatMessagePart = SessionMessagePart | AlertPart;\n\nexport type SessionMessage = {\n id: string;\n role: SessionMessageRole;\n parts: ChatMessagePart[];\n index?: number;\n createdAt?: number;\n modelId?: string;\n providerId?: string;\n tokens?: {\n input?: number;\n output?: number;\n reasoning?: number;\n cache?: { read?: number; write?: number };\n };\n};\n\nexport type QueuedFollowUp = {\n id: string;\n prompt: string;\n attachments?: Array<{\n id: string;\n name: string;\n mediaType?: string;\n url?: string;\n }>;\n position?: number;\n};\n\nexport type MessageOrigin = \"user\" | \"assistant\" | \"developer\";\n\nexport const getMessageOrigin = (role: string): MessageOrigin => {\n if (role === \"user\" || role === \"assistant\" || role === \"developer\") return role;\n return \"assistant\";\n};\n\nconst isReasoningToolOnlyMessage = (message: SessionMessage) => {\n const parts = message.parts ?? [];\n if (parts.length === 0) return false;\n\n const hasTextPart = parts.some((part) => part.type === \"text\" && \"text\" in part);\n if (hasTextPart) return false;\n\n return parts.some((part) => part.type === \"reasoning\" || part.type === \"tool\");\n};\n\nconst isVisibleText = (part: TextPart | ReasoningPart) => part.text.trim().length > 0;\n\nconst isVisibleAlert = (part: AlertPart) => part.title.trim().length > 0 || Boolean(part.message?.trim());\n\nconst isDisplayRenderablePart = (part: ChatMessagePart) => {\n switch (part.type) {\n case \"text\":\n case \"reasoning\":\n return isVisibleText(part);\n case \"tool\":\n case \"file\":\n case \"error\":\n return true;\n case \"alert\":\n return isVisibleAlert(part);\n default:\n return false;\n }\n};\n\nconst isActivityPart = (part: ChatMessagePart) => part.type === \"reasoning\" || part.type === \"tool\";\n\nconst isActivityOnlyMessage = (message: SessionMessage) => {\n if (message.role === \"user\") return false;\n if (message.parts.length === 0) return false;\n return message.parts.every(isActivityPart);\n};\n\nconst mergeBufferedActivity = (messages: SessionMessage[]) => {\n if (messages.length === 0) return null;\n\n const [first, ...rest] = messages;\n if (!first) return null;\n\n return {\n ...first,\n role: \"assistant\",\n parts: messages.flatMap((message) => message.parts),\n modelId: rest.at(-1)?.modelId ?? first.modelId,\n providerId: rest.at(-1)?.providerId ?? first.providerId,\n } satisfies SessionMessage;\n};\n\nexport const mergeReasoningToolOnlyMessages = (messages: SessionMessage[]) => {\n const merged: SessionMessage[] = [];\n\n for (const message of messages) {\n const previous = merged[merged.length - 1];\n\n if (previous && previous.role === message.role && isReasoningToolOnlyMessage(message)) {\n previous.parts = [...(previous.parts ?? []), ...(message.parts ?? [])];\n continue;\n }\n\n merged.push({\n ...message,\n parts: [...(message.parts ?? [])],\n });\n }\n\n return merged;\n};\n\nexport const normalizeChatMessagesForDisplay = (messages: SessionMessage[], options: { streaming?: boolean } = {}) => {\n const normalized: SessionMessage[] = [];\n let activityBuffer: SessionMessage[] = [];\n\n const clearActivityBuffer = () => {\n activityBuffer = [];\n };\n\n for (const message of messages) {\n const displayParts = (message.parts ?? []).filter(isDisplayRenderablePart);\n if (displayParts.length === 0) continue;\n\n const displayMessage = { ...message, parts: displayParts };\n\n if (displayMessage.role === \"user\") {\n clearActivityBuffer();\n normalized.push(displayMessage);\n continue;\n }\n\n if (isActivityOnlyMessage(displayMessage)) {\n activityBuffer.push(displayMessage);\n continue;\n }\n\n if (activityBuffer.length > 0) {\n normalized.push({\n ...displayMessage,\n parts: [...activityBuffer.flatMap((activity) => activity.parts), ...displayMessage.parts],\n });\n clearActivityBuffer();\n continue;\n }\n\n normalized.push(displayMessage);\n }\n\n if (options.streaming && activityBuffer.length > 0) {\n const trailingActivity = mergeBufferedActivity(activityBuffer);\n if (trailingActivity) normalized.push(trailingActivity);\n }\n\n return normalized;\n};\n\nexport interface MessageGroup {\n userMessage: SessionMessage;\n responses: SessionMessage[];\n}\n\nexport const getAssistantMessageActionTargetId = (messages: SessionMessage[]) => {\n const lastMessage = messages.at(-1);\n if (lastMessage?.role !== \"assistant\") return null;\n\n const hasVisibleText = lastMessage.parts.some((part) => part.type === \"text\" && isVisibleText(part));\n return hasVisibleText ? lastMessage.id : null;\n};\n\n// Groups messages into turns: each group starts with a user message\n// followed by all non-user messages until the next user message.\nexport const groupMessagesByTurn = (messages: SessionMessage[]) => {\n const groups: MessageGroup[] = [];\n const leadingResponses: SessionMessage[] = [];\n\n for (const message of messages) {\n if (message.role === \"user\") {\n groups.push({ userMessage: message, responses: [] });\n } else if (groups.length > 0) {\n groups[groups.length - 1].responses.push(message);\n } else {\n leadingResponses.push(message);\n }\n }\n\n return { groups, leadingResponses };\n};\n","import { Button, Flex } from \"@chakra-ui/react\";\nimport type { ReactNode } from \"react\";\nimport { ChatMessage } from \"./ai-message\";\nimport { messageFadeInProps } from \"./chat-message-animation\";\nimport { MessageActionPanel } from \"./message-action-panel\";\nimport { MessagePartsRenderer } from \"./message-parts-renderer\";\nimport { getMessageOrigin, type SessionMessage } from \"./message-types\";\n\ninterface ChatMessageListResponseProps {\n message: SessionMessage;\n streaming: boolean;\n hideQuestionForms?: boolean;\n animate?: boolean;\n showAssistantActions: boolean;\n}\n\nexport const ChatMessageListResponse = (props: ChatMessageListResponseProps) => {\n const { message, streaming, hideQuestionForms = false, animate = false, showAssistantActions } = props;\n const from = getMessageOrigin(message.role);\n const showActions = from === \"user\" || (from === \"assistant\" && showAssistantActions);\n\n return (\n <ChatMessage.Root from={from} {...(animate ? messageFadeInProps : undefined)}>\n <ChatMessage.Content from={from}>\n <MessagePartsRenderer message={message} streaming={streaming} hideQuestionForms={hideQuestionForms} />\n {showActions ? (\n <MessageActionPanel message={message} alwaysVisible={from === \"user\"} copyAlwaysVisible={from !== \"user\"} />\n ) : null}\n </ChatMessage.Content>\n </ChatMessage.Root>\n );\n};\n\ninterface StickyMessageToggleProps {\n label: string;\n onClick: () => void;\n actionPanel?: ReactNode;\n}\n\nexport const StickyMessageToggle = (props: StickyMessageToggleProps) => {\n const { label, onClick, actionPanel } = props;\n\n return (\n <Flex\n position=\"absolute\"\n bottom=\"0\"\n left=\"0\"\n right=\"0\"\n justifyContent={actionPanel ? \"space-between\" : \"flex-end\"}\n alignItems=\"flex-end\"\n px=\"xs\"\n pb=\"xs\"\n pt=\"lg\"\n bgGradient=\"to-t\"\n gradientFrom=\"bg.subtle\"\n gradientTo=\"transparent\"\n borderBottomRadius=\"xs\"\n pointerEvents=\"none\"\n >\n {actionPanel}\n <Button size=\"2xs\" variant=\"outline\" pointerEvents=\"auto\" onClick={onClick}>\n {label}\n </Button>\n </Flex>\n );\n};\n","import type { SessionMessage } from \"./message-types\";\n\nexport const STICKY_USER_MESSAGE_COLLAPSE_TEXT_THRESHOLD = 360;\nexport const STICKY_USER_MESSAGE_COLLAPSE_LINE_THRESHOLD = 4;\nexport const STICKY_USER_MESSAGE_COLLAPSED_MAX_HEIGHT = \"min(10vh, 4rem)\";\nexport const STICKY_USER_MESSAGE_EXPANDED_MAX_HEIGHT = \"min(70dvh, calc(100dvh - 12rem), 22rem)\";\n\nconst SCROLL_BOUNDARY_EPSILON = 1;\n\ninterface StickyUserMessageScrollElement {\n clientHeight: number;\n scrollHeight: number;\n scrollTop: number;\n}\n\nconst getMessageTextMetrics = (message: SessionMessage) => {\n return message.parts.reduce(\n (metrics, part) => {\n if (part.type !== \"text\") return metrics;\n\n return {\n lineCount: metrics.lineCount + part.text.split(/\\r\\n|\\r|\\n/).length,\n textLength: metrics.textLength + part.text.length,\n };\n },\n { lineCount: 0, textLength: 0 },\n );\n};\n\nexport const isStickyUserMessageCollapsible = (message: SessionMessage) => {\n if (message.role !== \"user\") return false;\n\n const { lineCount, textLength } = getMessageTextMetrics(message);\n\n return (\n textLength > STICKY_USER_MESSAGE_COLLAPSE_TEXT_THRESHOLD || lineCount > STICKY_USER_MESSAGE_COLLAPSE_LINE_THRESHOLD\n );\n};\n\nexport const shouldStopStickyUserMessageWheel = (element: StickyUserMessageScrollElement, deltaY: number) => {\n const maxScrollTop = Math.max(0, element.scrollHeight - element.clientHeight);\n\n if (deltaY === 0 || maxScrollTop <= SCROLL_BOUNDARY_EPSILON) return false;\n if (deltaY < 0) return element.scrollTop > SCROLL_BOUNDARY_EPSILON;\n\n return element.scrollTop < maxScrollTop - SCROLL_BOUNDARY_EPSILON;\n};\n","import { Box } from \"@chakra-ui/react\";\nimport { useVirtualizer } from \"@tanstack/react-virtual\";\nimport { useEffect, useRef, type WheelEvent } from \"react\";\nimport { useStickToBottomContext } from \"use-stick-to-bottom\";\nimport { ChatMessage } from \"./ai-message\";\nimport { messageFadeInProps, useMessageAnimationKeys } from \"./chat-message-animation\";\nimport { ChatMessageListResponse, StickyMessageToggle } from \"./chat-message-list-items\";\nimport {\n isStickyUserMessageCollapsible,\n STICKY_USER_MESSAGE_COLLAPSED_MAX_HEIGHT,\n STICKY_USER_MESSAGE_EXPANDED_MAX_HEIGHT,\n shouldStopStickyUserMessageWheel,\n} from \"./chat-panel-sticky-user-message\";\nimport { MessageActionPanel } from \"./message-action-panel\";\nimport { MessagePartsRenderer } from \"./message-parts-renderer\";\nimport { getAssistantMessageActionTargetId, type MessageGroup, type SessionMessage } from \"./message-types\";\n\ninterface ChatMessageListProps {\n leadingResponses: SessionMessage[];\n groups: MessageGroup[];\n streaming: boolean;\n hideActiveQuestionForms: boolean;\n expandedStickyMessageIds: Set<string>;\n onToggleStickyMessage: (messageId: string) => void;\n onReady?: () => void;\n}\n\ninterface StickyMessageGroupProps {\n group: MessageGroup;\n streaming: boolean;\n hideQuestionForms: boolean;\n isExpanded: boolean;\n animate: boolean;\n onToggleStickyMessage: (messageId: string) => void;\n}\n\ntype ChatMessageListItem =\n | {\n type: \"leading-response\";\n key: string;\n message: SessionMessage;\n showAssistantActions: boolean;\n }\n | {\n type: \"group\";\n key: string;\n group: MessageGroup;\n groupIndex: number;\n };\n\nconst ESTIMATED_TURN_HEIGHT = 720;\nconst INITIAL_TAIL_VIEWPORT_HEIGHT = 1;\nconst TAIL_READY_STABLE_FRAME_COUNT = 3;\nconst TAIL_READY_FRAME_LIMIT = 20;\nconst TAIL_READY_PIXEL_EPSILON = 1;\nconst VIRTUAL_LIST_OVERSCAN = 4;\nconst VIRTUAL_LIST_GAP = 8;\n\nconst buildMessageListItems = (leadingResponses: SessionMessage[], groups: MessageGroup[]) => {\n const leadingActionMessageId = getAssistantMessageActionTargetId(leadingResponses);\n\n return [\n ...leadingResponses.map((message) => ({\n type: \"leading-response\" as const,\n key: message.id,\n message,\n showAssistantActions: message.id === leadingActionMessageId,\n })),\n ...groups.map((group, groupIndex) => ({\n type: \"group\" as const,\n key: group.userMessage.id,\n group,\n groupIndex,\n })),\n ];\n};\n\nconst getEstimatedTailOffset = (count: number, viewportHeight: number) => {\n if (count === 0) return 0;\n\n const estimatedTotalSize = count * ESTIMATED_TURN_HEIGHT + (count - 1) * VIRTUAL_LIST_GAP;\n return Math.max(estimatedTotalSize - viewportHeight, 0);\n};\n\nconst getInitialViewportHeight = (scrollElement: HTMLElement | null) =>\n scrollElement?.clientHeight || INITIAL_TAIL_VIEWPORT_HEIGHT;\n\ninterface TailLayoutSnapshot {\n scrollTop: number;\n totalSize: number;\n}\n\nconst isTailLayoutStable = (current: TailLayoutSnapshot, previous: TailLayoutSnapshot) =>\n Math.abs(current.scrollTop - previous.scrollTop) <= TAIL_READY_PIXEL_EPSILON &&\n Math.abs(current.totalSize - previous.totalSize) <= TAIL_READY_PIXEL_EPSILON;\n\nconst readTailLayoutSnapshot = (scrollElement: HTMLElement | null, totalSize: number): TailLayoutSnapshot => ({\n scrollTop: scrollElement?.scrollTop ?? 0,\n totalSize,\n});\n\nconst useTailReady = (input: {\n itemCount: number;\n onReady?: () => void;\n scrollRef: { current: HTMLElement | null };\n totalSize: number;\n}) => {\n const { itemCount, onReady, scrollRef, totalSize } = input;\n const onReadyRef = useRef(onReady);\n\n useEffect(() => {\n onReadyRef.current = onReady;\n }, [onReady]);\n\n useEffect(() => {\n if (itemCount === 0 || typeof requestAnimationFrame === \"undefined\") {\n onReadyRef.current?.();\n return;\n }\n\n let frameId = 0;\n let checkedFrameCount = 0;\n let stableFrameCount = 0;\n let previousSnapshot: TailLayoutSnapshot | null = null;\n\n const waitForStableTail = () => {\n checkedFrameCount += 1;\n\n const nextSnapshot = readTailLayoutSnapshot(scrollRef.current, totalSize);\n stableFrameCount =\n previousSnapshot && isTailLayoutStable(nextSnapshot, previousSnapshot) ? stableFrameCount + 1 : 0;\n previousSnapshot = nextSnapshot;\n\n if (stableFrameCount >= TAIL_READY_STABLE_FRAME_COUNT || checkedFrameCount >= TAIL_READY_FRAME_LIMIT) {\n onReadyRef.current?.();\n return;\n }\n\n frameId = requestAnimationFrame(waitForStableTail);\n };\n\n frameId = requestAnimationFrame(waitForStableTail);\n\n return () => cancelAnimationFrame(frameId);\n }, [itemCount, scrollRef, totalSize]);\n};\n\nconst handleExpandedStickyMessageWheel = (event: WheelEvent<HTMLElement>) => {\n if (shouldStopStickyUserMessageWheel(event.currentTarget, event.deltaY)) {\n event.stopPropagation();\n }\n};\n\nconst getStickyMessageMaxHeight = (isCollapsible: boolean, isExpanded: boolean) => {\n if (!isCollapsible) return undefined;\n if (isExpanded) return STICKY_USER_MESSAGE_EXPANDED_MAX_HEIGHT;\n\n return STICKY_USER_MESSAGE_COLLAPSED_MAX_HEIGHT;\n};\n\nconst getStickyMessageBodyMaxHeight = (isExpandedCollapsible: boolean) => {\n if (!isExpandedCollapsible) return undefined;\n\n return STICKY_USER_MESSAGE_EXPANDED_MAX_HEIGHT;\n};\n\nconst StickyMessageGroup = (props: StickyMessageGroupProps) => {\n const { group, streaming, hideQuestionForms, isExpanded, animate, onToggleStickyMessage } = props;\n const isCollapsible = isStickyUserMessageCollapsible(group.userMessage);\n const isExpandedCollapsible = isCollapsible && isExpanded;\n const stickyMessageMaxHeight = getStickyMessageMaxHeight(isCollapsible, isExpanded);\n const toggleStickyMessage = () => onToggleStickyMessage(group.userMessage.id);\n const actionMessageId = getAssistantMessageActionTargetId(group.responses);\n\n return (\n <Box>\n <Box position=\"sticky\" top=\"0\" zIndex={1}>\n <ChatMessage.Root from=\"user\" {...(animate ? messageFadeInProps : undefined)}>\n <ChatMessage.Content\n from=\"user\"\n maxH={stickyMessageMaxHeight}\n overflow=\"hidden\"\n p={isCollapsible ? \"0\" : undefined}\n position={isCollapsible ? \"relative\" : undefined}\n >\n <Box\n data-sticky-user-message-content={isCollapsible ? (isExpanded ? \"expanded\" : \"collapsed\") : undefined}\n display=\"flex\"\n flexDirection=\"column\"\n gap=\"sm\"\n maxH={getStickyMessageBodyMaxHeight(isExpandedCollapsible)}\n minH=\"0\"\n overflowY={isExpandedCollapsible ? \"auto\" : \"visible\"}\n px={isCollapsible ? \"xs\" : undefined}\n py={isCollapsible ? \"xs\" : undefined}\n pb={isExpandedCollapsible ? \"3rem\" : undefined}\n onWheel={isExpandedCollapsible ? handleExpandedStickyMessageWheel : undefined}\n >\n <MessagePartsRenderer message={group.userMessage} streaming={streaming} />\n </Box>\n {isCollapsible ? (\n <StickyMessageToggle\n label={isExpanded ? \"Show less\" : \"Show more\"}\n onClick={toggleStickyMessage}\n actionPanel={<MessageActionPanel message={group.userMessage} alwaysVisible copyAlwaysVisible={false} />}\n />\n ) : (\n <MessageActionPanel message={group.userMessage} alwaysVisible copyAlwaysVisible={false} />\n )}\n </ChatMessage.Content>\n </ChatMessage.Root>\n </Box>\n {group.responses.map((message) => (\n <Box key={message.id}>\n <ChatMessageListResponse\n message={message}\n streaming={streaming}\n hideQuestionForms={hideQuestionForms}\n showAssistantActions={message.id === actionMessageId}\n />\n </Box>\n ))}\n </Box>\n );\n};\n\nconst renderListItem = (\n item: ChatMessageListItem,\n props: Pick<\n ChatMessageListProps,\n \"groups\" | \"streaming\" | \"hideActiveQuestionForms\" | \"expandedStickyMessageIds\" | \"onToggleStickyMessage\"\n > & { animatedItemKeys: Set<string> },\n) => {\n const {\n groups,\n streaming,\n hideActiveQuestionForms,\n expandedStickyMessageIds,\n animatedItemKeys,\n onToggleStickyMessage,\n } = props;\n\n if (item.type === \"leading-response\") {\n return (\n <ChatMessageListResponse\n message={item.message}\n streaming={streaming}\n hideQuestionForms={groups.length > 0 || hideActiveQuestionForms}\n animate={animatedItemKeys.has(item.key)}\n showAssistantActions={item.showAssistantActions}\n />\n );\n }\n\n return (\n <StickyMessageGroup\n group={item.group}\n streaming={streaming}\n hideQuestionForms={item.groupIndex < groups.length - 1 || hideActiveQuestionForms}\n isExpanded={expandedStickyMessageIds.has(item.group.userMessage.id)}\n animate={animatedItemKeys.has(item.key)}\n onToggleStickyMessage={onToggleStickyMessage}\n />\n );\n};\n\nexport const ChatMessageList = (props: ChatMessageListProps) => {\n const {\n leadingResponses,\n groups,\n streaming,\n hideActiveQuestionForms,\n expandedStickyMessageIds,\n onToggleStickyMessage,\n onReady,\n } = props;\n const { scrollRef } = useStickToBottomContext();\n const items = buildMessageListItems(leadingResponses, groups);\n const animatedItemKeys = useMessageAnimationKeys(items.map((item) => item.key));\n const initialViewportHeight = getInitialViewportHeight(scrollRef.current);\n\n const virtualizer = useVirtualizer<HTMLDivElement, HTMLDivElement>({\n count: items.length,\n getScrollElement: () => scrollRef.current as HTMLDivElement | null,\n estimateSize: () => ESTIMATED_TURN_HEIGHT,\n getItemKey: (index) => items[index]?.key ?? index,\n overscan: VIRTUAL_LIST_OVERSCAN,\n gap: VIRTUAL_LIST_GAP,\n initialRect: { width: 0, height: initialViewportHeight },\n initialOffset: () => getEstimatedTailOffset(items.length, initialViewportHeight),\n });\n const totalSize = virtualizer.getTotalSize();\n\n useTailReady({\n itemCount: items.length,\n onReady,\n scrollRef,\n totalSize,\n });\n\n return (\n <Box px=\"xs\">\n <Box position=\"relative\" width=\"100%\" style={{ height: totalSize }}>\n {virtualizer.getVirtualItems().map((virtualItem) => {\n const item = items[virtualItem.index];\n if (!item) return null;\n\n return (\n <Box\n key={virtualItem.key}\n ref={virtualizer.measureElement}\n data-index={virtualItem.index}\n data-chat-message-list-item={item.type}\n position=\"absolute\"\n top=\"0\"\n left=\"0\"\n width=\"100%\"\n style={{ top: virtualItem.start }}\n >\n {renderListItem(item, {\n groups,\n streaming,\n hideActiveQuestionForms,\n expandedStickyMessageIds,\n animatedItemKeys,\n onToggleStickyMessage,\n })}\n </Box>\n );\n })}\n </Box>\n </Box>\n );\n};\n","import { generateEditorStateFromString } from \"../../rich-text\";\n\nexport const createSerializedPromptState = (input = \"\") => {\n return JSON.stringify(generateEditorStateFromString(input));\n};\n","import { Badge, Box, Icon as ChakraIcon, HStack, IconButton, Stack, Text } from \"@chakra-ui/react\";\nimport { GripVertical, Pencil, Trash2 } from \"lucide-react\";\nimport { type DragEvent, useState } from \"react\";\nimport type { QueuedFollowUp } from \"./message-types\";\nimport type { QueuedFollowUpMoveDirection } from \"./queued-follow-up-list-state\";\n\ninterface QueuedFollowUpListProps {\n items: QueuedFollowUp[];\n editingItemId?: string | null;\n onEdit?: (item: QueuedFollowUp) => void;\n onRemove?: (itemId: string) => void;\n onMove?: (itemId: string, direction: QueuedFollowUpMoveDirection, steps?: number) => void;\n}\n\ninterface QueuedFollowUpRowProps {\n item: QueuedFollowUp;\n index: number;\n isFirst: boolean;\n isLast: boolean;\n isEditing: boolean;\n isDragTarget: boolean;\n onEdit?: (item: QueuedFollowUp) => void;\n onRemove?: (itemId: string) => void;\n onDragStart: (itemId: string) => void;\n onDragEnd: () => void;\n onDragOver: (event: DragEvent<HTMLDivElement>, itemId: string) => void;\n onDrop: (event: DragEvent<HTMLDivElement>, itemId: string) => void;\n}\n\nconst QueuedFollowUpRow = (props: QueuedFollowUpRowProps) => {\n const {\n item,\n index,\n isFirst,\n isLast,\n isEditing,\n isDragTarget,\n onEdit,\n onRemove,\n onDragStart,\n onDragEnd,\n onDragOver,\n onDrop,\n } = props;\n const canEdit = Boolean(onEdit);\n const canRemove = Boolean(onRemove);\n const canDrag = !isFirst || !isLast;\n const dragLabel = `Drag queued follow-up ${index + 1}`;\n\n return (\n <Box\n minWidth=\"0\"\n borderTopWidth={isFirst ? \"0\" : \"1px\"}\n borderColor={isDragTarget ? \"border.accent-light\" : \"border.subtle\"}\n paddingTop={isFirst ? \"0\" : \"2xs\"}\n paddingBottom=\"2xs\"\n bg={isEditing ? \"bg.muted\" : undefined}\n onDragOver={(event) => onDragOver(event, item.id)}\n onDrop={(event) => onDrop(event, item.id)}\n data-queued-follow-up-id={item.id}\n >\n <HStack gap=\"xs\" alignItems=\"flex-start\">\n <IconButton\n size=\"2xs\"\n variant=\"ghost\"\n draggable={canDrag}\n aria-label={dragLabel}\n title={dragLabel}\n color=\"fg.muted\"\n cursor={canDrag ? \"grab\" : \"default\"}\n disabled={!canDrag}\n onDragStart={(event) => {\n event.dataTransfer.effectAllowed = \"move\";\n event.dataTransfer.setData(\"text/plain\", item.id);\n onDragStart(item.id);\n }}\n onDragEnd={onDragEnd}\n >\n <ChakraIcon as={GripVertical} boxSize=\"14px\" />\n </IconButton>\n <Stack gap=\"2xs\" flex=\"1\" minWidth=\"0\">\n <Text textStyle=\"label/S/regular\" color=\"fg\" lineClamp={2} minWidth=\"0\">\n {item.prompt}\n </Text>\n {item.attachments?.length ? (\n <Badge width=\"fit-content\" size=\"sm\" variant=\"outline\" colorPalette=\"gray\">\n {item.attachments.length} attachments\n </Badge>\n ) : null}\n </Stack>\n <HStack gap=\"2xs\" flexShrink={0}>\n {canEdit ? (\n <IconButton size=\"2xs\" variant=\"ghost\" aria-label=\"Edit queued follow-up\" onClick={() => onEdit?.(item)}>\n <ChakraIcon as={Pencil} boxSize=\"14px\" />\n </IconButton>\n ) : null}\n {canRemove ? (\n <IconButton\n size=\"2xs\"\n variant=\"ghost\"\n aria-label=\"Remove queued follow-up\"\n colorPalette=\"red\"\n onClick={() => onRemove?.(item.id)}\n >\n <ChakraIcon as={Trash2} boxSize=\"14px\" />\n </IconButton>\n ) : null}\n </HStack>\n </HStack>\n </Box>\n );\n};\n\nexport const QueuedFollowUpList = (props: QueuedFollowUpListProps) => {\n const { items, editingItemId, onEdit, onRemove, onMove } = props;\n const [draggedItemId, setDraggedItemId] = useState<string | null>(null);\n const [dragTargetItemId, setDragTargetItemId] = useState<string | null>(null);\n if (items.length === 0) return null;\n\n const handleDragOver = (event: DragEvent<HTMLDivElement>, itemId: string) => {\n if (!draggedItemId || draggedItemId === itemId) return;\n event.preventDefault();\n event.dataTransfer.dropEffect = \"move\";\n setDragTargetItemId(itemId);\n };\n\n const handleDrop = (event: DragEvent<HTMLDivElement>, itemId: string) => {\n event.preventDefault();\n const sourceItemId = draggedItemId ?? event.dataTransfer.getData(\"text/plain\");\n setDraggedItemId(null);\n setDragTargetItemId(null);\n if (!sourceItemId || sourceItemId === itemId) return;\n\n const sourceIndex = items.findIndex((item) => item.id === sourceItemId);\n const targetIndex = items.findIndex((item) => item.id === itemId);\n if (sourceIndex === -1 || targetIndex === -1 || sourceIndex === targetIndex) return;\n\n const direction: QueuedFollowUpMoveDirection = targetIndex < sourceIndex ? \"up\" : \"down\";\n onMove?.(sourceItemId, direction, Math.abs(targetIndex - sourceIndex));\n };\n\n return (\n <Stack\n gap=\"2xs\"\n paddingX=\"0\"\n paddingY=\"xs\"\n borderWidth=\"1px\"\n borderBottomWidth=\"0\"\n borderColor=\"border\"\n borderTopRadius=\"xs\"\n background=\"bg\"\n >\n {items.map((item, index) => (\n <QueuedFollowUpRow\n key={item.id}\n item={item}\n index={index}\n isFirst={index === 0}\n isLast={index === items.length - 1}\n isEditing={editingItemId === item.id}\n isDragTarget={dragTargetItemId === item.id}\n onEdit={onEdit}\n onRemove={onRemove}\n onDragStart={setDraggedItemId}\n onDragEnd={() => {\n setDraggedItemId(null);\n setDragTargetItemId(null);\n }}\n onDragOver={handleDragOver}\n onDrop={handleDrop}\n />\n ))}\n </Stack>\n );\n};\n","import { Stack } from \"@chakra-ui/react\";\nimport { type ReactNode, useEffect, useState } from \"react\";\nimport type { ReferenceItem } from \"@/components/rich-text\";\nimport { createSerializedPromptState } from \"../utils/editor-state\";\nimport { ChatInput } from \"./chat-input\";\nimport type { ChatInputQuestionPrompt, ChatInputQuestionResponse } from \"./chat-input-question-prompt\";\nimport type { QueuedFollowUp } from \"./message-types\";\nimport { QueuedFollowUpList } from \"./queued-follow-up-list\";\nimport type { QueuedFollowUpMoveDirection } from \"./queued-follow-up-list-state\";\n\ninterface QueuedFollowUpComposerInput {\n queuedFollowUps: QueuedFollowUp[];\n defaultValue: string;\n onChange?: (text: string) => void;\n onSubmit?: (\n text: string,\n attachments: string[],\n questionResponse?: ChatInputQuestionResponse,\n ) => void | Promise<void>;\n onUpdate?: (itemId: string, prompt: string) => void;\n}\n\ninterface ChatPanelComposerProps {\n conversationKey?: string;\n recentUserMessages: string[];\n actions?: ReactNode;\n attachedResources?: string[];\n attachmentList?: ReactNode;\n chatInputAutoFocus: boolean;\n chatInputPlaceholder: string;\n chatInputQuestionPrompt?: ChatInputQuestionPrompt;\n chatInputReferences: ReferenceItem[];\n hasWorkspaceHub: boolean;\n inputDisabled: boolean;\n submitDisabled: boolean;\n onAttachFiles?: (files: File[]) => void;\n onAttachText?: (text: string) => void;\n onChatInputAddReference?: (resourceId: string, resourceType: ReferenceItem[\"resourceType\"]) => void;\n onClearAttachments?: () => void;\n onInterrupt?: () => void;\n onQueuedFollowUpMove?: (itemId: string, direction: QueuedFollowUpMoveDirection, steps?: number) => void;\n onQueuedFollowUpRemove?: (itemId: string) => void;\n onQueuedFollowUpUpdate?: (itemId: string, prompt: string) => void;\n queuedComposer: ReturnType<typeof useQueuedFollowUpComposer>;\n queuedFollowUps: QueuedFollowUp[];\n streaming: boolean;\n workspaceHub?: ReactNode;\n}\n\nexport const useQueuedFollowUpComposer = (input: QueuedFollowUpComposerInput) => {\n const { queuedFollowUps, defaultValue, onChange, onSubmit, onUpdate } = input;\n const [editingItemId, setEditingItemId] = useState<string | null>(null);\n const [editSeed, setEditSeed] = useState(\"\");\n const [focusSignal, setFocusSignal] = useState(0);\n const inputValue = editingItemId ? editSeed : defaultValue;\n\n useEffect(() => {\n if (!editingItemId) return;\n if (queuedFollowUps.some((item) => item.id === editingItemId)) return;\n setEditingItemId(null);\n setEditSeed(\"\");\n }, [editingItemId, queuedFollowUps]);\n\n const edit = (item: QueuedFollowUp) => {\n setEditingItemId(item.id);\n setEditSeed(item.prompt);\n setFocusSignal((signal) => signal + 1);\n };\n\n const change = (text: string) => {\n if (editingItemId) return;\n onChange?.(text);\n };\n\n const submit = (text: string, attachments: string[], questionResponse?: ChatInputQuestionResponse) => {\n if (editingItemId) {\n onUpdate?.(editingItemId, text);\n setEditingItemId(null);\n setEditSeed(\"\");\n return;\n }\n\n return onSubmit?.(text, attachments, questionResponse);\n };\n\n return { change, edit, editingItemId, focusSignal, inputValue, isEditing: Boolean(editingItemId), submit };\n};\n\nexport const ChatPanelComposer = (props: ChatPanelComposerProps) => {\n const {\n conversationKey,\n recentUserMessages,\n actions,\n attachedResources,\n attachmentList,\n chatInputAutoFocus,\n chatInputPlaceholder,\n chatInputQuestionPrompt,\n chatInputReferences,\n hasWorkspaceHub,\n inputDisabled,\n submitDisabled,\n onAttachFiles,\n onAttachText,\n onChatInputAddReference,\n onClearAttachments,\n onInterrupt,\n onQueuedFollowUpMove,\n onQueuedFollowUpRemove,\n onQueuedFollowUpUpdate,\n queuedComposer,\n queuedFollowUps,\n streaming,\n workspaceHub,\n } = props;\n const hasQueuedFollowUps = queuedFollowUps.length > 0;\n\n return (\n <Stack px={hasWorkspaceHub ? \"2xs\" : \"xs\"} gap=\"0\">\n {/* Concentric hierarchy: the hub shell owns the visible border so the session reads\n as living inside the workspace; the nested input recedes to border.subtle. */}\n <Stack\n gap={hasWorkspaceHub ? \"2xs\" : \"0\"}\n p={hasWorkspaceHub ? \"2xs\" : undefined}\n borderWidth={hasWorkspaceHub ? \"1px\" : undefined}\n borderColor={hasWorkspaceHub ? \"border\" : undefined}\n borderRadius={hasWorkspaceHub ? \"sm\" : undefined}\n bg={hasWorkspaceHub ? \"bg.subtle\" : undefined}\n >\n {workspaceHub}\n <QueuedFollowUpList\n items={queuedFollowUps}\n editingItemId={queuedComposer.editingItemId}\n onEdit={onQueuedFollowUpUpdate ? queuedComposer.edit : undefined}\n onRemove={onQueuedFollowUpRemove}\n onMove={onQueuedFollowUpMove}\n />\n <ChatInput\n key={conversationKey}\n recentUserMessages={recentUserMessages}\n placeholder={chatInputPlaceholder}\n defaultState={createSerializedPromptState(queuedComposer.inputValue)}\n streaming={streaming}\n onSubmit={queuedComposer.submit}\n onInterrupt={onInterrupt}\n onAttachFiles={onAttachFiles}\n onAttachText={onAttachText}\n onChange={queuedComposer.change}\n actions={actions}\n attachedResources={attachedResources}\n onClearAttachments={onClearAttachments}\n attachmentList={attachmentList}\n isDisabled={inputDisabled}\n submitDisabled={submitDisabled}\n attachedToTop={hasQueuedFollowUps}\n recessed={hasWorkspaceHub}\n questionPrompt={chatInputQuestionPrompt}\n autoFocus={chatInputAutoFocus}\n focusSignal={queuedComposer.focusSignal}\n submitTitle={queuedComposer.isEditing ? \"Save queued follow-up\" : undefined}\n references={chatInputReferences}\n onAddReference={onChatInputAddReference}\n />\n </Stack>\n </Stack>\n );\n};\n","import { HStack, Spinner, Text } from \"@chakra-ui/react\";\nimport { useEffect, useRef, useState } from \"react\";\n\n// Compact, unit-dropping elapsed format: \"4s\", \"48s\", \"10m 20s\", \"1h 04m\".\nconst formatElapsed = (totalSeconds: number) => {\n const seconds = Math.max(0, Math.floor(totalSeconds));\n if (seconds < 60) return `${seconds}s`;\n\n const minutes = Math.floor(seconds / 60);\n if (minutes < 60) return `${minutes}m ${String(seconds % 60).padStart(2, \"0\")}s`;\n\n const hours = Math.floor(minutes / 60);\n return `${hours}h ${String(minutes % 60).padStart(2, \"0\")}m`;\n};\n\n/**\n * Working indicator: a spinner followed by the elapsed run time in mono digits — never a\n * static \"Working…\" label. The elapsed time is the one thing a static label cannot tell you\n * and how you judge whether a run is stuck. Counts from the start of the active stream, including\n * time spent temporarily hidden while the workspace initializes.\n */\nexport const WorkingIndicator = (props: { hidden?: boolean }) => {\n const { hidden = false } = props;\n const [elapsedSeconds, setElapsedSeconds] = useState(0);\n const startedAtRef = useRef(Date.now());\n\n useEffect(() => {\n if (hidden) return;\n\n const updateElapsed = () => setElapsedSeconds((Date.now() - startedAtRef.current) / 1000);\n updateElapsed();\n const timer = setInterval(updateElapsed, 1000);\n return () => clearInterval(timer);\n }, [hidden]);\n\n if (hidden) return null;\n\n return (\n <HStack gap=\"2xs\" px=\"sm\" py=\"xs\">\n <Spinner size=\"xs\" color=\"fg.muted\" />\n <Text fontFamily=\"mono\" fontSize=\"xs\" color=\"fg.muted\" letterSpacing=\"-0.2px\">\n {formatElapsed(elapsedSeconds)}\n </Text>\n </HStack>\n );\n};\n","import { Flex } from \"@chakra-ui/react\";\nimport { MessageCircleIcon } from \"lucide-react\";\nimport { type ReactNode, useState } from \"react\";\nimport { EmptyState } from \"@/components/primitives/empty-state\";\nimport type { ReferenceItem } from \"@/components/rich-text\";\nimport { resolveActiveQuestionPrompt } from \"../tool-rendering/question-prompt\";\nimport { ChatPrimitives } from \"./ai-conversation\";\nimport { AutoScroll } from \"./auto-scroll\";\nimport { getRecentUserPrompts } from \"./chat-input-history\";\nimport type { ChatInputQuestionPrompt, ChatInputQuestionResponse } from \"./chat-input-question-prompt\";\nimport { ChatMessageList } from \"./chat-message-list\";\nimport { ChatPanelComposer, useQueuedFollowUpComposer } from \"./chat-panel-composer\";\nimport {\n groupMessagesByTurn,\n normalizeChatMessagesForDisplay,\n type QueuedFollowUp,\n type SessionMessage,\n} from \"./message-types\";\nimport type { QueuedFollowUpMoveDirection } from \"./queued-follow-up-list-state\";\nimport { WorkingIndicator } from \"./working-indicator\";\n\n/** Full conversation shell for agent sessions, including messages, input, attachments, and host-provided slots. */\nexport interface ChatPanelProps {\n /** Stable conversation identity used to reset ready state when switching sessions. */\n conversationKey?: string;\n messages: SessionMessage[];\n loading?: boolean;\n streaming?: boolean;\n emptyStateTitle: string;\n emptyStateDescription: string;\n emptyStateContent?: ReactNode;\n loaderComponent?: ReactNode;\n chatInputPlaceholder: string;\n chatInputDefaultValue?: string;\n onSubmitMessage?: (\n text: string,\n attachments: string[],\n questionResponse?: ChatInputQuestionResponse,\n ) => void | Promise<void>;\n onInterrupt?: () => void;\n onAttachFiles?: (files: File[]) => void;\n onAttachText?: (text: string) => void;\n onChatInputChange?: (text: string) => void;\n /** Extra controls rendered in the chat input toolbar (attach, model, params). */\n actions?: ReactNode;\n attachedResources?: string[];\n onClearAttachments?: () => void;\n attachmentList?: ReactNode;\n approvalPrompt?: ReactNode;\n /** Optional workspace status/control surface rendered above the conversation viewport. */\n workspaceHub?: ReactNode;\n workspaceInitializing?: boolean;\n inputDisabled?: boolean;\n /** Blocks sending while the editor stays usable, for example while no model is selected. */\n submitDisabled?: boolean;\n chatInputQuestionPrompt?: ChatInputQuestionPrompt;\n chatInputAutoFocus?: boolean;\n queuedFollowUps?: QueuedFollowUp[];\n onQueuedFollowUpUpdate?: (itemId: string, prompt: string) => void;\n onQueuedFollowUpRemove?: (itemId: string) => void;\n onQueuedFollowUpMove?: (itemId: string, direction: QueuedFollowUpMoveDirection, steps?: number) => void;\n chatInputReferences?: ReferenceItem[];\n onChatInputAddReference?: (resourceId: string, resourceType: ReferenceItem[\"resourceType\"]) => void;\n}\n\nexport const ChatPanel = (props: ChatPanelProps) => {\n const {\n conversationKey,\n messages,\n loading = false,\n streaming = false,\n emptyStateTitle,\n emptyStateDescription,\n emptyStateContent,\n loaderComponent,\n chatInputPlaceholder,\n chatInputDefaultValue = \"\",\n onSubmitMessage,\n onInterrupt,\n onAttachFiles,\n onAttachText,\n onChatInputChange,\n actions,\n attachedResources,\n onClearAttachments,\n attachmentList,\n approvalPrompt,\n workspaceHub,\n workspaceInitializing = false,\n inputDisabled = false,\n submitDisabled = false,\n chatInputQuestionPrompt,\n chatInputAutoFocus = false,\n queuedFollowUps = [],\n onQueuedFollowUpUpdate,\n onQueuedFollowUpRemove,\n onQueuedFollowUpMove,\n chatInputReferences = [],\n onChatInputAddReference,\n } = props;\n\n const merged = normalizeChatMessagesForDisplay(messages, { streaming });\n const hasMessages = merged.length > 0;\n const messageListKey = conversationKey ?? merged[0]?.id;\n const messageListIdentity = hasMessages ? (messageListKey ?? \"active-conversation\") : null;\n const userMessageCount = merged.reduce((count, message) => count + (message.role === \"user\" ? 1 : 0), 0);\n const { groups, leadingResponses } = groupMessagesByTurn(merged);\n const [expandedStickyMessageIds, setExpandedStickyMessageIds] = useState(() => new Set<string>());\n const [readyMessageListKey, setReadyMessageListKey] = useState<string | null>(null);\n const showLoadingState = !hasMessages && loading;\n const defaultEmptyContent = (\n <EmptyState\n icon={<MessageCircleIcon size={48} strokeWidth={1.5} />}\n title={emptyStateTitle}\n description={emptyStateDescription}\n />\n );\n const emptyContent = showLoadingState ? loaderComponent : (emptyStateContent ?? defaultEmptyContent);\n const hasWorkspaceHub = Boolean(workspaceHub);\n const activeQuestionPrompt = chatInputQuestionPrompt ?? resolveActiveQuestionPrompt(messages);\n const hideActiveQuestionForms = Boolean(activeQuestionPrompt);\n const showThinkingIndicator = streaming && hasMessages && !workspaceInitializing && !activeQuestionPrompt;\n const isMessageViewportReady = !messageListIdentity || readyMessageListKey === messageListIdentity;\n const queuedComposer = useQueuedFollowUpComposer({\n queuedFollowUps,\n defaultValue: chatInputDefaultValue,\n onChange: onChatInputChange,\n onSubmit: onSubmitMessage,\n onUpdate: onQueuedFollowUpUpdate,\n });\n\n const toggleStickyMessageExpanded = (messageId: string) => {\n setExpandedStickyMessageIds((current) => {\n const next = new Set(current);\n if (next.has(messageId)) {\n next.delete(messageId);\n } else {\n next.add(messageId);\n }\n\n return next;\n });\n };\n\n return (\n <Flex position=\"relative\" direction=\"column\" w=\"full\" h=\"full\" overflow=\"hidden\">\n <ChatPrimitives.Root>\n <AutoScroll conversationKey={messageListKey ?? null} userMessageCount={userMessageCount} />\n <ChatPrimitives.Viewport visibility={isMessageViewportReady ? \"visible\" : \"hidden\"}>\n {hasMessages ? (\n <ChatMessageList\n key={messageListIdentity}\n leadingResponses={leadingResponses}\n groups={groups}\n streaming={streaming}\n hideActiveQuestionForms={hideActiveQuestionForms}\n expandedStickyMessageIds={expandedStickyMessageIds}\n onToggleStickyMessage={toggleStickyMessageExpanded}\n onReady={() => setReadyMessageListKey(messageListIdentity)}\n />\n ) : (\n emptyContent\n )}\n </ChatPrimitives.Viewport>\n {isMessageViewportReady ? <ChatPrimitives.ScrollToBottom aria-label=\"Scroll to latest message\" /> : null}\n </ChatPrimitives.Root>\n {approvalPrompt}\n {streaming ? <WorkingIndicator hidden={!showThinkingIndicator} /> : null}\n <ChatPanelComposer\n conversationKey={conversationKey ?? messages[0]?.id}\n recentUserMessages={getRecentUserPrompts(messages)}\n actions={actions}\n attachedResources={attachedResources}\n attachmentList={attachmentList}\n chatInputAutoFocus={chatInputAutoFocus}\n chatInputPlaceholder={chatInputPlaceholder}\n chatInputQuestionPrompt={activeQuestionPrompt}\n chatInputReferences={chatInputReferences}\n hasWorkspaceHub={hasWorkspaceHub}\n inputDisabled={inputDisabled}\n submitDisabled={submitDisabled}\n onAttachFiles={onAttachFiles}\n onAttachText={onAttachText}\n onChatInputAddReference={onChatInputAddReference}\n onClearAttachments={onClearAttachments}\n onInterrupt={onInterrupt}\n onQueuedFollowUpMove={onQueuedFollowUpMove}\n onQueuedFollowUpRemove={onQueuedFollowUpRemove}\n onQueuedFollowUpUpdate={onQueuedFollowUpUpdate}\n queuedComposer={queuedComposer}\n queuedFollowUps={queuedFollowUps}\n streaming={streaming}\n workspaceHub={workspaceHub}\n />\n </Flex>\n );\n};\n","import { Skeleton, Stack } from \"@chakra-ui/react\";\nimport { ChatMessage } from \"./ai-message\";\n\nconst renderSkeletonLines = (widths: string[]) => (\n <Stack gap=\"xs\" w=\"full\">\n {widths.map((width, index) => (\n <Skeleton key={`${width}-${index}`} height=\"3\" width={width} borderRadius=\"xs\" />\n ))}\n </Stack>\n);\n\nexport const ChatSkeleton = () => {\n return (\n <Stack minH=\"full\" py=\"xs\" gap=\"0\">\n <ChatMessage.Root from=\"user\">\n <ChatMessage.Content from=\"user\">{renderSkeletonLines([\"72%\", \"46%\"])}</ChatMessage.Content>\n </ChatMessage.Root>\n <ChatMessage.Root from=\"assistant\">\n <ChatMessage.Content from=\"assistant\">{renderSkeletonLines([\"76%\", \"62%\", \"40%\"])}</ChatMessage.Content>\n </ChatMessage.Root>\n </Stack>\n );\n};\n","import { Box, chakra, Flex, Portal, Stack, Text } from \"@chakra-ui/react\";\nimport { type PointerEvent, useState } from \"react\";\n\nexport interface ConversationBrowseItem {\n /** Turn id used to scroll the log to this user message. */\n id: string;\n /** The user message this tick indexes (shown in the hover card). */\n message: string;\n /** Optional assistant reply preview; hidden for a turn not yet answered. */\n reply?: string;\n}\n\ninterface ConversationBrowseProps {\n items: ConversationBrowseItem[];\n onSelect?: (id: string) => void;\n /** Overlay the log's left edge with a scrim instead of reserving a gutter (panels under ~480px). */\n floating?: boolean;\n}\n\n// The rail is a lens, not a chart: tick length encodes distance from the pointer, never content.\nconst MIN_USER_MESSAGES = 3;\nconst TICK_MIN_WIDTH = 10;\nconst TICK_MAX_WIDTH = 26;\nconst LENS_RADIUS = 4;\n\ninterface BrowseCardPosition {\n left: number;\n top: number;\n}\n\n// Raised-cosine falloff over LENS_RADIUS neighbours: 1 at the pointer, 0 at the edge of the lens.\nconst lensFactor = (index: number, pointerIndex: number | null) => {\n if (pointerIndex === null) return 0;\n const distance = Math.abs(index - pointerIndex);\n if (distance >= LENS_RADIUS) return 0;\n return (1 + Math.cos((Math.PI * distance) / LENS_RADIUS)) / 2;\n};\n\nconst tickColor = (index: number, pointerIndex: number | null) => {\n if (pointerIndex === null) return \"fg.subtle\";\n const distance = Math.abs(index - pointerIndex);\n if (distance < 0.5) return \"fg\";\n if (distance < LENS_RADIUS) return \"fg.muted\";\n return \"fg.subtle\";\n};\n\nconst ConversationBrowseCard = (props: { item: ConversationBrowseItem; position: BrowseCardPosition }) => {\n const { item, position } = props;\n\n return (\n <Portal>\n <Box\n position=\"fixed\"\n left={`${position.left}px`}\n ml=\"2xs\"\n top={`${position.top}px`}\n transform=\"translateY(-50%)\"\n w=\"80\"\n maxW=\"80\"\n zIndex=\"popover\"\n pointerEvents=\"none\"\n >\n <Stack gap=\"1.5\" p=\"3\" bg=\"bg.elevated\" borderWidth=\"1px\" borderColor=\"border\" borderRadius=\"lg\">\n <Text textStyle=\"label/S/medium\" color=\"fg\" lineClamp={2}>\n {item.message}\n </Text>\n {item.reply ? (\n <Text textStyle=\"label/XS/regular\" color=\"fg.muted\" lineClamp={2}>\n {item.reply}\n </Text>\n ) : null}\n </Stack>\n </Box>\n </Portal>\n );\n};\n\n/**\n * ChatBrowse — the conversation scrubber for the chat log's left gutter. One tick per user\n * message, in order; the ticks nearest the pointer swell into a lens (growing along X only, so\n * the row you aim at never moves), and the active tick raises a preview card. Clicking a tick\n * selects that turn. Hidden below a few messages, where a gutter costs space and buys nothing.\n */\nexport const ConversationBrowse = (props: ConversationBrowseProps) => {\n const { items, onSelect, floating = false } = props;\n const [pointerIndex, setPointerIndex] = useState<number | null>(null);\n const [cardPosition, setCardPosition] = useState<BrowseCardPosition | null>(null);\n\n if (items.length < MIN_USER_MESSAGES) return null;\n\n const handlePointerMove = (event: PointerEvent<HTMLDivElement>) => {\n const rect = event.currentTarget.getBoundingClientRect();\n const fraction = (event.clientY - rect.top) / rect.height;\n const next = Math.min(items.length - 1, Math.max(0, fraction * items.length - 0.5));\n const nextActiveIndex = Math.round(next);\n setPointerIndex(next);\n setCardPosition({\n left: rect.right,\n top: rect.top + ((nextActiveIndex + 0.5) / items.length) * rect.height,\n });\n };\n\n const activeIndex = pointerIndex === null ? null : Math.round(pointerIndex);\n const activeItem = activeIndex === null ? null : items[activeIndex];\n\n return (\n <Box position=\"relative\" w=\"10\" flexShrink={0}>\n <Flex\n direction=\"column\"\n align=\"flex-start\"\n gap=\"1.5\"\n px=\"1.5\"\n py=\"2\"\n w=\"10\"\n onPointerMove={handlePointerMove}\n onPointerLeave={() => setPointerIndex(null)}\n {...(floating\n ? {\n position: \"absolute\",\n insetInlineStart: 0,\n top: 0,\n bottom: 0,\n // The scrim must be the surface the rail covers — the panel's own bg, never a lighter tone.\n bg: \"bg\",\n }\n : {})}\n >\n {items.map((item, index) => (\n <chakra.button\n type=\"button\"\n key={item.id}\n h=\"2px\"\n w={`${TICK_MIN_WIDTH + (TICK_MAX_WIDTH - TICK_MIN_WIDTH) * lensFactor(index, pointerIndex)}px`}\n bg={tickColor(index, pointerIndex)}\n borderRadius=\"1px\"\n transition=\"width 80ms linear, background-color 80ms linear\"\n aria-label={`Jump to message ${index + 1}`}\n onClick={() => onSelect?.(item.id)}\n />\n ))}\n </Flex>\n {activeItem && cardPosition ? <ConversationBrowseCard item={activeItem} position={cardPosition} /> : null}\n </Box>\n );\n};\n","import { Flex, HStack, Spinner, Text } from \"@chakra-ui/react\";\nimport { AlertTriangle } from \"lucide-react\";\nimport type { ReactNode } from \"react\";\n\ntype WorkspaceHubStatus = \"ready\" | \"loading\" | \"error\";\n\ninterface ChatWorkspaceHubProps {\n /** Workspace identity/selector shown at the start of the header (e.g. GitBranch + name). */\n workspaceControl?: ReactNode;\n additions: number;\n deletions: number;\n /** Icon-only action that opens the workspace resource. */\n action?: ReactNode;\n status?: WorkspaceHubStatus;\n statusLabel?: string;\n}\n\nconst HubStatus = (props: {\n status: WorkspaceHubStatus;\n statusLabel?: string;\n additions: number;\n deletions: number;\n}) => {\n const { status, statusLabel, additions, deletions } = props;\n\n if (status === \"loading\") {\n return (\n <HStack gap=\"2xs\" minW=\"0\">\n <Spinner size=\"xs\" color=\"fg.muted\" />\n <Text textStyle=\"label/XS/regular\" color=\"fg.muted\" truncate>\n {statusLabel ?? \"Setting up workspace...\"}\n </Text>\n </HStack>\n );\n }\n\n if (status === \"error\") {\n return (\n <HStack gap=\"2xs\" minW=\"0\">\n <AlertTriangle size={14} color=\"var(--chakra-colors-fg-error)\" />\n <Text textStyle=\"label/XS/regular\" color=\"fg.error\" truncate>\n {statusLabel ?? \"Workspace setup failed\"}\n </Text>\n </HStack>\n );\n }\n\n // Ready: the diff counts take the slot, and only when there is something to show.\n if (additions <= 0 && deletions <= 0) return null;\n\n return (\n <HStack gap=\"2xs\">\n <Text textStyle=\"label/XS/medium\" color=\"fg.success\">\n +{additions}\n </Text>\n <Text textStyle=\"label/XS/medium\" color=\"fg.error\">\n −{deletions}\n </Text>\n </HStack>\n );\n};\n\n/**\n * Workspace hub header: the frame the session sits in. The identity is always present;\n * the slot beside it carries the diff counts, or the setup status while the workspace is\n * being created or has failed. The open action recedes during setup.\n */\nexport const ChatWorkspaceHub = (props: ChatWorkspaceHubProps) => {\n const { workspaceControl, additions, deletions, action, status = \"ready\", statusLabel } = props;\n\n return (\n <Flex align=\"center\" justify=\"space-between\" gap=\"sm\" minW=\"0\" pl=\"xs\" pr=\"2xs\" py=\"2xs\">\n <HStack gap=\"sm\" minW=\"0\">\n {workspaceControl}\n <HubStatus status={status} statusLabel={statusLabel} additions={additions} deletions={deletions} />\n </HStack>\n {action ? <Flex flexShrink={0}>{action}</Flex> : null}\n </Flex>\n );\n};\n"],"mappings":"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"}