@opengeni/react 6.5.2-canary.41607687019001 → 6.7.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 (1154) hide show
  1. package/dist/app/app-state.d.ts +4 -0
  2. package/dist/app/app-state.js +19 -14
  3. package/dist/app/components/Composer.js +25 -23
  4. package/dist/app/components/agent/agent-capability-picker.js +10 -8
  5. package/dist/app/components/artifacts/artifact-browse-controls.js +4 -4
  6. package/dist/app/components/artifacts/artifact-library.js +21 -19
  7. package/dist/app/components/artifacts/artifact-page-chrome.js +3 -3
  8. package/dist/app/components/artifacts/artifact-viewer.js +23 -22
  9. package/dist/app/components/artifacts/artifact-viewer.js.map +1 -1
  10. package/dist/app/components/artifacts/chat-interactive-block.js +12 -12
  11. package/dist/app/components/artifacts/copy-artifact-link.js +7 -5
  12. package/dist/app/components/artifacts/file-reach-dialog.js +11 -9
  13. package/dist/app/components/artifacts/inline-chat-image.js +18 -18
  14. package/dist/app/components/artifacts/retained-file-preview.js +24 -23
  15. package/dist/app/components/artifacts/retained-text-preview.js +3 -3
  16. package/dist/app/components/artifacts/site-audience.js +6 -5
  17. package/dist/app/components/artifacts/site-conversations.js +16 -14
  18. package/dist/app/components/artifacts/site-data.js +18 -16
  19. package/dist/app/components/artifacts/site-public-link.js +3 -2
  20. package/dist/app/components/artifacts/site-publishing-page.js +39 -37
  21. package/dist/app/components/artifacts/site-publishing.js +34 -32
  22. package/dist/app/components/artifacts/site-settings.js +38 -36
  23. package/dist/app/components/artifacts/site-version-menu.js +8 -7
  24. package/dist/app/components/billing-class-mark.js +3 -3
  25. package/dist/app/components/bots/bot-launch-strip.js +17 -17
  26. package/dist/app/components/bots/bot-template-dialog.js +30 -28
  27. package/dist/app/components/bots/bot-template-shortcuts.js +19 -19
  28. package/dist/app/components/bots/bot-templates-page.js +38 -36
  29. package/dist/app/components/bots/bot-templates-page.js.map +1 -1
  30. package/dist/app/components/capabilities/capability-detail-sheet.js +13 -11
  31. package/dist/app/components/capabilities/capability-logo-source.js +13 -13
  32. package/dist/app/components/capabilities/capability-logo.js +4 -3
  33. package/dist/app/components/capabilities/connector-tool-permissions.js +8 -6
  34. package/dist/app/components/capabilities/native-connect-setup.js +14 -14
  35. package/dist/app/components/capabilities/own-logins-shared-heads-up.js +7 -6
  36. package/dist/app/components/capabilities/perform-capability-action.js +7 -6
  37. package/dist/app/components/capabilities/prepared-mcp-setup-card.js +17 -17
  38. package/dist/app/components/capabilities/session-capability-card.js +72 -70
  39. package/dist/app/components/capabilities/session-capability-card.js.map +1 -1
  40. package/dist/app/components/capabilities/session-chrome-card.js +28 -26
  41. package/dist/app/components/capabilities/session-connection-accounts.js +4 -3
  42. package/dist/app/components/capabilities/session-custom-mcp-card.js +20 -19
  43. package/dist/app/components/capabilities/session-github-card.js +22 -20
  44. package/dist/app/components/capabilities/session-machine-card.js +27 -25
  45. package/dist/app/components/capabilities/session-personal-github-card.js +16 -16
  46. package/dist/app/components/capabilities/session-plugin-card.js +10 -9
  47. package/dist/app/components/capabilities/use-capabilities-catalog.js +4 -3
  48. package/dist/app/components/capabilities/use-connection-accounts.js +5 -4
  49. package/dist/app/components/command-menu/chat-status.js +15 -13
  50. package/dist/app/components/command-menu/chat-switcher.js +35 -33
  51. package/dist/app/components/command-menu/chat-switcher.js.map +1 -1
  52. package/dist/app/components/command-menu/command-menu.js +53 -50
  53. package/dist/app/components/command-menu/command-menu.js.map +1 -1
  54. package/dist/app/components/command-menu/shortcut-sheet.js +18 -16
  55. package/dist/app/components/command-menu/shortcut-sheet.js.map +1 -1
  56. package/dist/app/components/common.js +4 -3
  57. package/dist/app/components/composer-capabilities-menu-body.js +4 -4
  58. package/dist/app/components/composer-mobile-plus-panel.js +8 -8
  59. package/dist/app/components/composer-mobile-plus.js +1 -1
  60. package/dist/app/components/credit-required-gate.js +3 -3
  61. package/dist/app/components/credit-required-prompt.js +10 -8
  62. package/dist/app/components/credit-required-prompt.js.map +1 -1
  63. package/dist/app/components/credits/checkout-credits-celebration.js +3 -2
  64. package/dist/app/components/credits/checkout-return.js +3 -2
  65. package/dist/app/components/credits/checkout-return.js.map +1 -1
  66. package/dist/app/components/credits/coupon-redeem.js +5 -4
  67. package/dist/app/components/credits/credit-refusal-notice.js +7 -5
  68. package/dist/app/components/cross-slot-deep-link-recovery.js +5 -4
  69. package/dist/app/components/desktop/app-shots.js +13 -11
  70. package/dist/app/components/desktop/computer-use.js +6 -4
  71. package/dist/app/components/desktop/this-computer.js +9 -7
  72. package/dist/app/components/feedback.js +5 -4
  73. package/dist/app/components/follow-up-repository-menu-body.js +8 -6
  74. package/dist/app/components/follow-up-repository-menu-body.js.map +1 -1
  75. package/dist/app/components/follow-up-repository-picker.js +1 -1
  76. package/dist/app/components/github-app-connect-launcher.js +5 -4
  77. package/dist/app/components/in-app-help-link.js +3 -3
  78. package/dist/app/components/knowledge/agent-learning-settings.js +3 -2
  79. package/dist/app/components/knowledge/agent-learning-settings.js.map +1 -1
  80. package/dist/app/components/machines/connect-machine-dialog.js +18 -16
  81. package/dist/app/components/manual-repository-editor.js +3 -2
  82. package/dist/app/components/markdown.js +6 -6
  83. package/dist/app/components/models/models-ui.js +12 -10
  84. package/dist/app/components/my-things.js +12 -10
  85. package/dist/app/components/my-things.js.map +1 -1
  86. package/dist/app/components/new-session-starters.js +3 -3
  87. package/dist/app/components/own-where-it-works.js +9 -7
  88. package/dist/app/components/personal-resource-attachment-surface.js +4 -4
  89. package/dist/app/components/pickers.js +5 -5
  90. package/dist/app/components/rail/channel-create-dialog.js +7 -5
  91. package/dist/app/components/rail/project-glyph.js +17 -17
  92. package/dist/app/components/rail/project-profile.js +31 -29
  93. package/dist/app/components/rail/rail-context.js +3 -3
  94. package/dist/app/components/rail/rail-sections.js +68 -66
  95. package/dist/app/components/rail/session-header.js +59 -57
  96. package/dist/app/components/rail/session-list.js +66 -64
  97. package/dist/app/components/rail/session-row-content.js +4 -4
  98. package/dist/app/components/rail/session-row-hover-details.js +14 -12
  99. package/dist/app/components/rail/session-shell.js +90 -88
  100. package/dist/app/components/rail/site-session-group-heading.js +8 -8
  101. package/dist/app/components/repository-picker.js +8 -6
  102. package/dist/app/components/secrets/session-secrets-panel.js +4 -3
  103. package/dist/app/components/secrets/vault-model.js +3 -2
  104. package/dist/app/components/session/agent-configuration-panel.js +25 -23
  105. package/dist/app/components/session/agent-configuration-panel.js.map +1 -1
  106. package/dist/app/components/session/artifact-link-boundary.js +3 -3
  107. package/dist/app/components/session/artifact-session-page.js +11 -9
  108. package/dist/app/components/session/banners.js +8 -8
  109. package/dist/app/components/session/codex-usage-notice.js +5 -3
  110. package/dist/app/components/session/console-new-conversation.js +42 -40
  111. package/dist/app/components/session/context-text-reader.js +3 -2
  112. package/dist/app/components/session/descendant-requests.js +39 -37
  113. package/dist/app/components/session/descendant-requests.js.map +1 -1
  114. package/dist/app/components/session/editable-artifacts-workspace.js +36 -34
  115. package/dist/app/components/session/editable-artifacts-workspace.js.map +1 -1
  116. package/dist/app/components/session/failed-session-banner.js +13 -11
  117. package/dist/app/components/session/failed-session-banner.js.map +1 -1
  118. package/dist/app/components/session/failure-recovery-boundary.js +3 -3
  119. package/dist/app/components/session/human-input-delegation-record.js +2 -2
  120. package/dist/app/components/session/human-input.js +33 -31
  121. package/dist/app/components/session/inspector.js +57 -55
  122. package/dist/app/components/session/inspector.js.map +1 -1
  123. package/dist/app/components/session/message-actions.js +5 -4
  124. package/dist/app/components/session/message-actions.js.map +1 -1
  125. package/dist/app/components/session/message-resource-attachments.js +12 -11
  126. package/dist/app/components/session/message-resource-attachments.js.map +1 -1
  127. package/dist/app/components/session/model-context-inspector.js +6 -4
  128. package/dist/app/components/session/model-recovery-notice.js +3 -3
  129. package/dist/app/components/session/new-session-settings-menu.js +11 -9
  130. package/dist/app/components/session/new-session-setup-strip.js +18 -18
  131. package/dist/app/components/session/sandbox-recovery-actions.js +3 -3
  132. package/dist/app/components/session/sandbox-switcher.js +10 -9
  133. package/dist/app/components/session/sandbox-workspace.js +47 -46
  134. package/dist/app/components/session/search-markdown-highlight.js +7 -7
  135. package/dist/app/components/session/search-results-view.js +8 -8
  136. package/dist/app/components/session/session-admin-access.js +13 -11
  137. package/dist/app/components/session/session-admission-notice.js +7 -5
  138. package/dist/app/components/session/session-avatar-picker.js +22 -20
  139. package/dist/app/components/session/session-avatar.js +16 -16
  140. package/dist/app/components/session/session-machine-access-notice.js +7 -5
  141. package/dist/app/components/session/session-profile-dialog.js +29 -27
  142. package/dist/app/components/session/session-profile-editor.js +30 -28
  143. package/dist/app/components/session/session-retention.js +10 -8
  144. package/dist/app/components/session/session-search-dialog.js +10 -10
  145. package/dist/app/components/session/session-skill-reviews.js +2 -1
  146. package/dist/app/components/session/session-skill-reviews.js.map +1 -1
  147. package/dist/app/components/session/session-tenancy-control.js +13 -11
  148. package/dist/app/components/session/session-tenancy-control.js.map +1 -1
  149. package/dist/app/components/session/session-unattended-setting.js +7 -5
  150. package/dist/app/components/session/session-usage-limit-section.js +11 -9
  151. package/dist/app/components/session/share-chat-dialog.js +9 -7
  152. package/dist/app/components/session/site-origin-link.js +3 -3
  153. package/dist/app/components/session/subagents.js +8 -8
  154. package/dist/app/components/session/subscription-account-indicator.js +6 -6
  155. package/dist/app/components/session-connectors-menu-body.js +4 -3
  156. package/dist/app/components/session-connectors-menu-body.js.map +1 -1
  157. package/dist/app/components/settings/row-select.js +7 -5
  158. package/dist/app/components/toaster.js +3 -2
  159. package/dist/app/components/transcription-settings.js +11 -9
  160. package/dist/app/components/ui/destructive-confirm.js +11 -9
  161. package/dist/app/components/usage/usage-entry.js +5 -5
  162. package/dist/app/components/window-bar.js +16 -14
  163. package/dist/app/components/workspace-composer-plus.js +22 -21
  164. package/dist/app/components/workspace-reach.js +6 -4
  165. package/dist/app/components/workspace-tenant-boundary.js +5 -4
  166. package/dist/app/embed/memory-navigation.js +3 -3
  167. package/dist/app/embed/session-app.js +211 -209
  168. package/dist/app/lib/actions/actions-provider.js +15 -13
  169. package/dist/app/lib/agent-capabilities.js +3 -3
  170. package/dist/app/lib/app-surfaces.js +7 -6
  171. package/dist/app/lib/archive-session.d.ts +9 -4
  172. package/dist/app/lib/archive-session.js +4 -2
  173. package/dist/app/lib/bot-templates.js +3 -2
  174. package/dist/app/lib/capabilities.js +3 -2
  175. package/dist/app/lib/codex-usage-query.js +2 -2
  176. package/dist/app/lib/composer-connectors.js +17 -16
  177. package/dist/app/lib/console-site.js +2 -2
  178. package/dist/app/lib/console-text.js +2 -2
  179. package/dist/app/lib/events.js +9 -9
  180. package/dist/app/lib/failed-session-copy.js +3 -3
  181. package/dist/app/lib/inbox.js +4 -2
  182. package/dist/app/lib/model-access-onboarding.js +3 -3
  183. package/dist/app/lib/move-chat-to-machine.js +3 -3
  184. package/dist/app/lib/navigation.js +2 -2
  185. package/dist/app/lib/session-branch-cache.js +6 -6
  186. package/dist/app/lib/session-create.js +4 -4
  187. package/dist/app/lib/session-group-pagination.js +6 -6
  188. package/dist/app/lib/session-hover-facts.js +13 -11
  189. package/dist/app/lib/session-model.js +2 -2
  190. package/dist/app/lib/session-rail.js +3 -3
  191. package/dist/app/lib/session-rename.js +3 -3
  192. package/dist/app/lib/session-restart-operation-controller.js +4 -3
  193. package/dist/app/lib/session-tenancy.js +3 -2
  194. package/dist/app/lib/session-usage-limit.js +3 -2
  195. package/dist/app/lib/sessions-group.js +5 -5
  196. package/dist/app/lib/site-publishing.js +3 -2
  197. package/dist/app/lib/site-tool-consent-dialog.js +9 -7
  198. package/dist/app/lib/site-tool-consent-dialog.js.map +1 -1
  199. package/dist/app/lib/site-tool-consent.js +1 -1
  200. package/dist/app/lib/subscription-plans.js +3 -2
  201. package/dist/app/lib/toast.js +2 -1
  202. package/dist/app/lib/turn-failure-analytics.js +4 -4
  203. package/dist/app/lib/use-duplicate-site.js +6 -5
  204. package/dist/app/lib/use-follow-up-repositories.js +6 -5
  205. package/dist/app/lib/use-workspace-integrations.js +4 -3
  206. package/dist/app/lib/use-workspace-machines.js +4 -4
  207. package/dist/app/lib/use-workspace-model-catalog.js +5 -4
  208. package/dist/app/lib/use-workspace-rigs.js +2 -2
  209. package/dist/app/lib/workspace-navigation-preference.js +4 -4
  210. package/dist/app/lib/workspace-scope-context.js +3 -3
  211. package/dist/app/routes/artifacts.js +67 -66
  212. package/dist/app/routes/artifacts.js.map +1 -1
  213. package/dist/app/routes/retained-artifact.js +42 -40
  214. package/dist/app/routes/retained-artifact.js.map +1 -1
  215. package/dist/app/routes/session-unavailable.js +8 -7
  216. package/dist/app/routes/session.js +119 -117
  217. package/dist/app/routes/sessions-index-hydration.js +5 -5
  218. package/dist/app/routes/sessions-index.js +104 -102
  219. package/dist/app/routes/site-view.js +67 -65
  220. package/dist/app/routes/site-view.js.map +1 -1
  221. package/dist/artifacts-document.js +4 -4
  222. package/dist/artifacts-presentation.js +4 -4
  223. package/dist/artifacts-spreadsheet.js +4 -4
  224. package/dist/artifacts.js +10 -10
  225. package/dist/automations.js +17 -15
  226. package/dist/automations.js.map +1 -1
  227. package/dist/browser-viewer-TC27OCIP.js +23 -0
  228. package/dist/chat-interactive-block-RWPQBHVS.js +18 -0
  229. package/dist/chunk-2BDT3UZQ.js +229 -0
  230. package/dist/chunk-2CLNIEK4.js +373 -0
  231. package/dist/chunk-2FSBSCZJ.js +451 -0
  232. package/dist/chunk-2I7HDP53.js +199 -0
  233. package/dist/chunk-2INLDVK3.js +15 -0
  234. package/dist/chunk-2KALVELR.js +126 -0
  235. package/dist/chunk-2M3J7ZWQ.js +418 -0
  236. package/dist/chunk-2OP6WLGV.js +708 -0
  237. package/dist/chunk-2RG7NIAS.js +2936 -0
  238. package/dist/chunk-2STUPWEL.js +135 -0
  239. package/dist/chunk-2YUOVM3G.js +271 -0
  240. package/dist/chunk-2Z3NQNTM.js +3670 -0
  241. package/dist/chunk-3CPWWGNK.js +920 -0
  242. package/dist/chunk-3ED2U6XE.js +37 -0
  243. package/dist/chunk-3GZA4BUW.js +216 -0
  244. package/dist/chunk-3IK6UYO6.js +1022 -0
  245. package/dist/chunk-3PZ7JZI2.js +431 -0
  246. package/dist/chunk-4DVJ6ONS.js +50 -0
  247. package/dist/chunk-4DVNUCRR.js +2386 -0
  248. package/dist/chunk-4DVNUCRR.js.map +1 -0
  249. package/dist/chunk-4E3ZJRTZ.js +41 -0
  250. package/dist/chunk-4SAWSRAA.js +141 -0
  251. package/dist/chunk-53AGXXZM.js +307 -0
  252. package/dist/chunk-54YW6SZZ.js +818 -0
  253. package/dist/chunk-57AZS3IE.js +2317 -0
  254. package/dist/chunk-5CPEEAFD.js +143 -0
  255. package/dist/chunk-5EWSRZ2Y.js +340 -0
  256. package/dist/chunk-5IE76VCY.js +387 -0
  257. package/dist/chunk-5NWEKLDZ.js +170 -0
  258. package/dist/chunk-5O2FCCHZ.js +198 -0
  259. package/dist/chunk-5QAY6K77.js +399 -0
  260. package/dist/chunk-5YKW2K6I.js +625 -0
  261. package/dist/chunk-5YKW2K6I.js.map +1 -0
  262. package/dist/chunk-6BCXNDEI.js +4116 -0
  263. package/dist/chunk-6BCXNDEI.js.map +1 -0
  264. package/dist/chunk-6DK6Z4UN.js +2599 -0
  265. package/dist/chunk-6DVCC7QS.js +702 -0
  266. package/dist/chunk-6JHU2UBS.js +2058 -0
  267. package/dist/chunk-6PZ7OBYU.js +490 -0
  268. package/dist/chunk-6WD2INST.js +539 -0
  269. package/dist/chunk-6WD2INST.js.map +1 -0
  270. package/dist/chunk-6WGRDRMA.js +163 -0
  271. package/dist/chunk-77WAKEAH.js +186 -0
  272. package/dist/chunk-7T2ZE3VT.js +5558 -0
  273. package/dist/chunk-7T2ZE3VT.js.map +1 -0
  274. package/dist/chunk-7TDO3CUM.js +393 -0
  275. package/dist/chunk-7TIX2UAR.js +247 -0
  276. package/dist/chunk-7V5REBCP.js +148 -0
  277. package/dist/chunk-7VMZGLYI.js +339 -0
  278. package/dist/chunk-7W37NS3I.js +236 -0
  279. package/dist/chunk-7X6SDK2C.js +111 -0
  280. package/dist/chunk-7ZNUHRP5.js +95 -0
  281. package/dist/chunk-A36PZALD.js +84 -0
  282. package/dist/chunk-AUI6VA63.js +107 -0
  283. package/dist/chunk-AW2MQB37.js +24 -0
  284. package/dist/chunk-AWKES45Y.js +198 -0
  285. package/dist/chunk-AXHZYXUV.js +132 -0
  286. package/dist/chunk-BHNSJVBC.js +129 -0
  287. package/dist/chunk-BJEJFISW.js +50 -0
  288. package/dist/chunk-BJFH6JI5.js +422 -0
  289. package/dist/chunk-BMICEQZQ.js +960 -0
  290. package/dist/chunk-BTLBYBLU.js +29 -0
  291. package/dist/chunk-BXBDYNRP.js +89 -0
  292. package/dist/chunk-C372BFOV.js +357 -0
  293. package/dist/chunk-C43KRXGA.js +234 -0
  294. package/dist/chunk-C43KRXGA.js.map +1 -0
  295. package/dist/chunk-CMKGILJK.js +4824 -0
  296. package/dist/chunk-CRAOSVHC.js +50 -0
  297. package/dist/chunk-CRU35QQH.js +281 -0
  298. package/dist/chunk-CUIWCGMA.js +172 -0
  299. package/dist/chunk-D5TWNFFE.js +38 -0
  300. package/dist/chunk-DF5EAHDN.js +4461 -0
  301. package/dist/chunk-DJAXC5OK.js +56 -0
  302. package/dist/chunk-DXBYWSL5.js +3550 -0
  303. package/dist/chunk-DXR5PDFP.js +84 -0
  304. package/dist/chunk-DZWARC4M.js +267 -0
  305. package/dist/chunk-DZXEDSQI.js +106 -0
  306. package/dist/chunk-E7XERZWC.js +48 -0
  307. package/dist/chunk-ECJBYNLJ.js +79 -0
  308. package/dist/chunk-EDI6SJ2N.js +43 -0
  309. package/dist/chunk-EWSOC6WF.js +114 -0
  310. package/dist/chunk-F2OPHAUN.js +103 -0
  311. package/dist/chunk-F4ISQGGM.js +81 -0
  312. package/dist/chunk-FO4LYKJL.js +197 -0
  313. package/dist/chunk-FPXASDG5.js +73 -0
  314. package/dist/chunk-FSOQDUCG.js +117 -0
  315. package/dist/chunk-FSOQDUCG.js.map +1 -0
  316. package/dist/chunk-FVXBNBHO.js +157 -0
  317. package/dist/chunk-FYWT2O76.js +34 -0
  318. package/dist/chunk-FYWT2O76.js.map +1 -0
  319. package/dist/chunk-FZC5N55X.js +981 -0
  320. package/dist/chunk-GAVYGBFI.js +99 -0
  321. package/dist/chunk-GFIMOUDT.js +846 -0
  322. package/dist/chunk-GFIMOUDT.js.map +1 -0
  323. package/dist/chunk-GKVJIDHF.js +33 -0
  324. package/dist/chunk-GVN5SZLX.js +212 -0
  325. package/dist/chunk-H3T7IWNA.js +134 -0
  326. package/dist/chunk-HAX4LCR5.js +261 -0
  327. package/dist/chunk-HC4JFZVU.js +121 -0
  328. package/dist/chunk-HEFPPMBQ.js +581 -0
  329. package/dist/chunk-HGKTHF2U.js +1356 -0
  330. package/dist/chunk-HGKTHF2U.js.map +1 -0
  331. package/dist/chunk-HNLR7Q4Z.js +83 -0
  332. package/dist/chunk-HSOXMJOT.js +12 -0
  333. package/dist/chunk-I4MRDSUF.js +281 -0
  334. package/dist/chunk-I4QEJ62Y.js +202 -0
  335. package/dist/chunk-I5B5L6Q4.js +56 -0
  336. package/dist/chunk-I5QZJODL.js +264 -0
  337. package/dist/chunk-I7ITSXSJ.js +603 -0
  338. package/dist/chunk-I7XIZRFD.js +390 -0
  339. package/dist/chunk-IDANQPRH.js +82 -0
  340. package/dist/chunk-IFB3WJ36.js +212 -0
  341. package/dist/chunk-IHTAKKTK.js +264 -0
  342. package/dist/chunk-IKXNLWAL.js +205 -0
  343. package/dist/chunk-IKXNLWAL.js.map +1 -0
  344. package/dist/chunk-ILDXWY37.js +173 -0
  345. package/dist/chunk-IMDQUHBJ.js +570 -0
  346. package/dist/chunk-IMZCQBOT.js +119 -0
  347. package/dist/chunk-IXPTECSC.js +403 -0
  348. package/dist/chunk-J255A3N5.js +71 -0
  349. package/dist/chunk-J5F5HPPW.js +141 -0
  350. package/dist/chunk-JDTGRRNU.js +5045 -0
  351. package/dist/chunk-JDTGRRNU.js.map +1 -0
  352. package/dist/chunk-JEA3QDX7.js +2469 -0
  353. package/dist/chunk-JEUPAVYY.js +156 -0
  354. package/dist/chunk-JKHKLL5W.js +194 -0
  355. package/dist/chunk-JQL7ZH6C.js +650 -0
  356. package/dist/chunk-JWB44UGJ.js +57 -0
  357. package/dist/chunk-JZ4NLCAP.js +333 -0
  358. package/dist/chunk-K2A5PXQ5.js +412 -0
  359. package/dist/chunk-K56XV3C3.js +623 -0
  360. package/dist/chunk-K6GAXXVA.js +23 -0
  361. package/dist/chunk-KCBMFSMS.js +199 -0
  362. package/dist/chunk-KF2FV3ZJ.js +268 -0
  363. package/dist/chunk-KJD65EJP.js +278 -0
  364. package/dist/chunk-KLEUWIMZ.js +386 -0
  365. package/dist/chunk-KODELWYT.js +309 -0
  366. package/dist/chunk-KRDR5RJD.js +83 -0
  367. package/dist/chunk-KUDGXAF7.js +914 -0
  368. package/dist/chunk-KY2R73CG.js +171 -0
  369. package/dist/chunk-KY2R73CG.js.map +1 -0
  370. package/dist/chunk-KYS77RPN.js +85 -0
  371. package/dist/chunk-L7YTNTIK.js +368 -0
  372. package/dist/chunk-LHPNABDH.js +686 -0
  373. package/dist/chunk-MFROMEKA.js +401 -0
  374. package/dist/chunk-MIHN76LX.js +2656 -0
  375. package/dist/chunk-MIYFS2XN.js +42 -0
  376. package/dist/chunk-MJUCFQMS.js +65 -0
  377. package/dist/chunk-MM4FNWI4.js +3064 -0
  378. package/dist/chunk-MNZG4OHU.js +790 -0
  379. package/dist/chunk-MVW6HNPI.js +250 -0
  380. package/dist/chunk-MVW6HNPI.js.map +1 -0
  381. package/dist/chunk-N6AACDUW.js +200 -0
  382. package/dist/chunk-NC55IFN3.js +781 -0
  383. package/dist/chunk-NC7PVOEK.js +98 -0
  384. package/dist/chunk-NCYMNCJO.js +70 -0
  385. package/dist/chunk-ND2BXV3P.js +259 -0
  386. package/dist/chunk-NDBTFUO6.js +272 -0
  387. package/dist/chunk-NDQJZ7HF.js +206 -0
  388. package/dist/chunk-NGJJJPZZ.js +162 -0
  389. package/dist/chunk-NJTSNNE7.js +251 -0
  390. package/dist/chunk-NPGISCU6.js +4159 -0
  391. package/dist/chunk-NPGISCU6.js.map +1 -0
  392. package/dist/chunk-NRTE7DNV.js +1270 -0
  393. package/dist/chunk-NULUNM7H.js +290 -0
  394. package/dist/chunk-NUNZS36W.js +227 -0
  395. package/dist/chunk-NW53H5RW.js +2424 -0
  396. package/dist/chunk-NXCMHIKI.js +263 -0
  397. package/dist/chunk-O3LKCBP5.js +159 -0
  398. package/dist/chunk-O4EA4F3W.js +103 -0
  399. package/dist/chunk-O4EA4F3W.js.map +1 -0
  400. package/dist/chunk-O4OOG3D6.js +116 -0
  401. package/dist/chunk-O4OOG3D6.js.map +1 -0
  402. package/dist/chunk-O6N4ABCA.js +376 -0
  403. package/dist/chunk-O732GAFC.js +112 -0
  404. package/dist/chunk-OF4TIKYC.js +690 -0
  405. package/dist/chunk-OMPVOMPP.js +70 -0
  406. package/dist/chunk-OPJJSKUK.js +118 -0
  407. package/dist/chunk-OPWCMA4D.js +196 -0
  408. package/dist/chunk-ORJPS5VN.js +1193 -0
  409. package/dist/chunk-OSY5K7L7.js +187 -0
  410. package/dist/chunk-OV6QJRT4.js +45 -0
  411. package/dist/chunk-OVKYVZMW.js +108 -0
  412. package/dist/chunk-OZCBM3UC.js +171 -0
  413. package/dist/chunk-P3A2EINJ.js +61 -0
  414. package/dist/chunk-PTAG4PDC.js +27 -0
  415. package/dist/chunk-PTF5B7TJ.js +298 -0
  416. package/dist/chunk-Q3DPEYX4.js +848 -0
  417. package/dist/chunk-Q6CGOPJD.js +215 -0
  418. package/dist/chunk-Q6CGOPJD.js.map +1 -0
  419. package/dist/chunk-QB2KMIDP.js +100 -0
  420. package/dist/chunk-QCSJ4CWE.js +1067 -0
  421. package/dist/chunk-QIOQ2NPQ.js +414 -0
  422. package/dist/chunk-QK5EFEUT.js +353 -0
  423. package/dist/chunk-QPQBLYQJ.js +41 -0
  424. package/dist/chunk-QPSGCC5D.js +184 -0
  425. package/dist/chunk-QZAAUQRN.js +474 -0
  426. package/dist/chunk-QZM6YDJW.js +489 -0
  427. package/dist/chunk-QZM6YDJW.js.map +1 -0
  428. package/dist/chunk-RGBI63KJ.js +188 -0
  429. package/dist/chunk-RLBKLAEY.js +138 -0
  430. package/dist/chunk-RMFKVOM7.js +304 -0
  431. package/dist/chunk-ROKQU7WG.js +258 -0
  432. package/dist/chunk-RPVREAU7.js +251 -0
  433. package/dist/chunk-RQKLF42C.js +723 -0
  434. package/dist/chunk-SC6RRD2D.js +38 -0
  435. package/dist/chunk-SC6RRD2D.js.map +1 -0
  436. package/dist/chunk-SEO7TICN.js +94 -0
  437. package/dist/chunk-SHHJCL7X.js +432 -0
  438. package/dist/chunk-SIRLACNZ.js +114 -0
  439. package/dist/chunk-SKPHMYAA.js +237 -0
  440. package/dist/chunk-SODC7T6L.js +1583 -0
  441. package/dist/chunk-SQJIKMN3.js +366 -0
  442. package/dist/chunk-SVINDKVW.js +26 -0
  443. package/dist/chunk-SYCDHPZF.js +335 -0
  444. package/dist/chunk-T2QX3FDP.js +133 -0
  445. package/dist/chunk-T3OWFVMS.js +1187 -0
  446. package/dist/chunk-T6XI5FLY.js +61 -0
  447. package/dist/chunk-T7OXJZCX.js +62 -0
  448. package/dist/chunk-TAT5USZN.js +353 -0
  449. package/dist/chunk-TPQTRNER.js +172 -0
  450. package/dist/chunk-TUIN4MB7.js +266 -0
  451. package/dist/chunk-TX3VECZU.js +71 -0
  452. package/dist/chunk-TXLIEOJX.js +9624 -0
  453. package/dist/chunk-U3DN4HEY.js +27 -0
  454. package/dist/chunk-U7XM7CB4.js +191 -0
  455. package/dist/chunk-UJK53QFL.js +140 -0
  456. package/dist/chunk-UMTXA2TH.js +319 -0
  457. package/dist/chunk-UPDSXFK5.js +199 -0
  458. package/dist/chunk-UTIAXH52.js +269 -0
  459. package/dist/chunk-UVN5TMHU.js +1184 -0
  460. package/dist/chunk-V4Z4B2E3.js +52 -0
  461. package/dist/chunk-V4Z4B2E3.js.map +1 -0
  462. package/dist/chunk-VGYXW3VG.js +246 -0
  463. package/dist/chunk-VS7AHPCZ.js +255 -0
  464. package/dist/chunk-VTTAJOQ7.js +121 -0
  465. package/dist/chunk-VWPOLUAO.js +99 -0
  466. package/dist/chunk-X3MWB2QU.js +3851 -0
  467. package/dist/chunk-X6KAJI3V.js +211 -0
  468. package/dist/chunk-XBLRHV5R.js +50 -0
  469. package/dist/chunk-XDFP2LMW.js +605 -0
  470. package/dist/chunk-XEQMZB3C.js +525 -0
  471. package/dist/chunk-XEYLT5VA.js +223 -0
  472. package/dist/chunk-XHIQ5I6N.js +918 -0
  473. package/dist/chunk-XLH7QY2R.js +378 -0
  474. package/dist/chunk-XWFAMUZQ.js +113 -0
  475. package/dist/chunk-Y4BB2KS2.js +294 -0
  476. package/dist/chunk-Y4BB2KS2.js.map +1 -0
  477. package/dist/chunk-Y4OBB2VN.js +84 -0
  478. package/dist/chunk-YCVD6CI3.js +234 -0
  479. package/dist/chunk-YENLNISG.js +270 -0
  480. package/dist/chunk-YIRVLKAX.js +351 -0
  481. package/dist/chunk-YL73CVNK.js +390 -0
  482. package/dist/chunk-YLS6QE5G.js +288 -0
  483. package/dist/chunk-YNF2OC54.js +366 -0
  484. package/dist/chunk-YNF2OC54.js.map +1 -0
  485. package/dist/chunk-YPWU5KPE.js +147 -0
  486. package/dist/chunk-YQXTDZSU.js +2984 -0
  487. package/dist/chunk-YSJEAAOL.js +178 -0
  488. package/dist/chunk-YWIFM7D7.js +499 -0
  489. package/dist/chunk-YWVI6ZMK.js +103 -0
  490. package/dist/chunk-Z4FMAFNH.js +847 -0
  491. package/dist/chunk-Z654FWNU.js +136 -0
  492. package/dist/chunk-Z7Y523PS.js +130 -0
  493. package/dist/chunk-ZD67RM6G.js +60 -0
  494. package/dist/chunk-ZEG4VPBL.js +187 -0
  495. package/dist/chunk-ZHDFQITM.js +283 -0
  496. package/dist/chunk-ZHDFQITM.js.map +1 -0
  497. package/dist/chunk-ZLYCOBHW.js +75 -0
  498. package/dist/chunk-ZNJ5MTXV.js +89 -0
  499. package/dist/chunk-ZSGY3H53.js +155 -0
  500. package/dist/chunk-ZTPXACWB.js +1788 -0
  501. package/dist/chunk-ZUA3JMI6.js +107 -0
  502. package/dist/chunk-ZYAZUPPV.js +559 -0
  503. package/dist/composer.js +8 -8
  504. package/dist/computer-viewer-TDDO25AV.js +21 -0
  505. package/dist/connect.js +12 -12
  506. package/dist/desktop-dictation.js +12 -10
  507. package/dist/desktop-dictation.js.map +1 -1
  508. package/dist/desktop.js +2 -2
  509. package/dist/editor.js +2 -2
  510. package/dist/embedded-new-voice-2G3VLPVQ.js +24 -0
  511. package/dist/embedded-voice-T5IWOWGD.js +24 -0
  512. package/dist/fleet-decision-row-WM64KXP3.js +361 -0
  513. package/dist/in-chat-connect-model.js +5 -5
  514. package/dist/index.js +51 -51
  515. package/dist/interaction.js +5 -5
  516. package/dist/machines.js +3 -3
  517. package/dist/meetings-recorder.js +1 -1
  518. package/dist/meetings.js +40 -32
  519. package/dist/meetings.js.map +1 -1
  520. package/dist/messages/en.d.ts +3 -0
  521. package/dist/messages.js +1 -1
  522. package/dist/model-policy-picker-menu-SMC6J6QN.js +22 -0
  523. package/dist/payment-page-card-G4U63KUV.js +223 -0
  524. package/dist/platform-activity-row-BUZGZAKZ.js +128 -0
  525. package/dist/queue-surface-implementation-4KUZ4PJV.js +908 -0
  526. package/dist/realtime.js +4 -4
  527. package/dist/recorder-host-WF2RRR56.js +69 -0
  528. package/dist/recorder-host-WF2RRR56.js.map +1 -0
  529. package/dist/recordings.js +3 -3
  530. package/dist/sandbox-files-ESDMOFSD.js +27 -0
  531. package/dist/session-app.js +211 -209
  532. package/dist/session-connect-cards-Q53KMMYY.js +25 -0
  533. package/dist/session-list-model.js +2 -2
  534. package/dist/session-realtime-CF3I35WJ.js +30 -0
  535. package/dist/session-realtime.js +2 -2
  536. package/dist/session-ui.js +33 -31
  537. package/dist/session.js +5 -5
  538. package/dist/sites.js +2 -2
  539. package/dist/terminal.js +2 -2
  540. package/dist/this-computer.js +3 -3
  541. package/dist/timeline-annotation-markers-CJK4RYZ4.js +157 -0
  542. package/dist/timeline-annotation-selection-67GF5H26.js +208 -0
  543. package/dist/timeline-annotations-dialog-ONJPQDJQ.js +283 -0
  544. package/dist/ui/access-list.js +11 -9
  545. package/dist/ui/access-list.js.map +1 -1
  546. package/dist/ui/api-error.d.ts +6 -3
  547. package/dist/ui/api-error.js +2 -1
  548. package/dist/ui/cadence-picker.js +6 -4
  549. package/dist/ui/choice-cards.js +5 -3
  550. package/dist/ui/confirm-dialog.js +2 -2
  551. package/dist/ui/copy-field.js +5 -3
  552. package/dist/ui/detail-page.js +2 -2
  553. package/dist/ui/detail-sheet.js +2 -2
  554. package/dist/ui/diff-view.js +4 -3
  555. package/dist/ui/disclosure.js +3 -3
  556. package/dist/ui/email-chips-input.js +5 -3
  557. package/dist/ui/error-message.js +2 -1
  558. package/dist/ui/error-reference.d.ts +15 -0
  559. package/dist/ui/error-text.d.ts +10 -0
  560. package/dist/ui/error-text.js +9 -0
  561. package/dist/ui/error-text.js.map +1 -0
  562. package/dist/ui/field.js +4 -2
  563. package/dist/ui/flush-form-page.js +8 -6
  564. package/dist/ui/form-dialog.js +7 -5
  565. package/dist/ui/list-row.js +3 -3
  566. package/dist/ui/load-failure.js +3 -2
  567. package/dist/ui/load-failure.js.map +1 -1
  568. package/dist/ui/notice.js +3 -1
  569. package/dist/ui/relative-time.js +2 -2
  570. package/dist/ui/revision-history.js +9 -7
  571. package/dist/ui/revision-history.js.map +1 -1
  572. package/dist/ui/role-select.js +10 -8
  573. package/dist/ui/segmented-control.js +4 -2
  574. package/dist/ui/select-menu.js +5 -3
  575. package/dist/ui/setting-row.js +3 -1
  576. package/dist/ui/switch.js +4 -2
  577. package/dist/ui/usage-meter.js +3 -3
  578. package/dist/ui/word-list-row.js +4 -2
  579. package/dist/usage.js +2 -2
  580. package/dist/workbench.js +4 -4
  581. package/package.json +5 -6
  582. package/src/app/app-state.tsx +126 -14
  583. package/src/app/components/artifacts/site-data.tsx +2 -2
  584. package/src/app/components/artifacts/site-settings.tsx +2 -2
  585. package/src/app/components/rail/session-list.tsx +7 -8
  586. package/src/app/components/rail/session-shell.tsx +3 -3
  587. package/src/app/components/repository-picker.tsx +8 -1
  588. package/src/app/components/session/model-context-inspector.tsx +2 -1
  589. package/src/app/components/session/session-admin-access.tsx +2 -2
  590. package/src/app/lib/actions/chat-operations.ts +4 -4
  591. package/src/app/lib/archive-session.test.tsx +265 -2
  592. package/src/app/lib/archive-session.tsx +175 -9
  593. package/src/app/lib/copy-link.ts +2 -2
  594. package/src/app/lib/inbox.tsx +2 -2
  595. package/src/app/lib/session-failure-toasts.ts +3 -2
  596. package/src/app/lib/toast.test.tsx +215 -0
  597. package/src/app/lib/toast.tsx +67 -2
  598. package/src/app/personal-github-reconnect.test.tsx +356 -0
  599. package/src/app/routes/artifacts.tsx +1 -2
  600. package/src/components/tool-action-review.tsx +14 -1
  601. package/src/meetings/delete-meeting-dialog.tsx +2 -1
  602. package/src/meetings/meeting-ask.tsx +2 -1
  603. package/src/meetings/meeting-detail-page.tsx +2 -1
  604. package/src/meetings/meeting-notes.tsx +2 -1
  605. package/src/meetings/meeting-settings.tsx +4 -1
  606. package/src/meetings/meeting-transcript.tsx +4 -1
  607. package/src/meetings/recorder-context.tsx +10 -0
  608. package/src/meetings/recorder-host.test.tsx +60 -2
  609. package/src/meetings/recorder-host.tsx +16 -3
  610. package/src/meetings/recorder-panel.tsx +2 -1
  611. package/src/meetings/recorder-workspace.test.tsx +26 -1
  612. package/src/messages/en.ts +6 -0
  613. package/src/ui/api-error.test.ts +29 -5
  614. package/src/ui/api-error.tsx +10 -4
  615. package/src/ui/error-message.tsx +8 -0
  616. package/src/ui/error-reference.test.ts +54 -0
  617. package/src/ui/error-reference.ts +51 -0
  618. package/src/ui/error-text.test.tsx +66 -0
  619. package/src/ui/error-text.tsx +49 -0
  620. package/src/ui/field.tsx +4 -1
  621. package/src/ui/notice.tsx +7 -2
  622. package/src/ui/setting-row.tsx +4 -1
  623. package/styles/app.css +12 -0
  624. package/styles/compiled.css +9 -0
  625. package/dist/browser-viewer-NOP5EAUO.js +0 -23
  626. package/dist/chat-interactive-block-G7O44JHR.js +0 -18
  627. package/dist/chunk-26RWVLRD.js +0 -135
  628. package/dist/chunk-2AHTY7OT.js +0 -247
  629. package/dist/chunk-2GDNWKSC.js +0 -3670
  630. package/dist/chunk-2JENKGCE.js +0 -339
  631. package/dist/chunk-2KYQC4T5.js +0 -155
  632. package/dist/chunk-2RREGDQH.js +0 -708
  633. package/dist/chunk-2T7DX6KR.js +0 -353
  634. package/dist/chunk-2VB2O4FQ.js +0 -920
  635. package/dist/chunk-2VTTKH23.js +0 -94
  636. package/dist/chunk-2XNG2KNT.js +0 -172
  637. package/dist/chunk-2YC6JQRO.js +0 -399
  638. package/dist/chunk-2ZVRJRXC.js +0 -27
  639. package/dist/chunk-35737UT4.js +0 -162
  640. package/dist/chunk-366XZ4PM.js +0 -41
  641. package/dist/chunk-36MIDGAH.js +0 -199
  642. package/dist/chunk-3FD76LXM.js +0 -212
  643. package/dist/chunk-3OVIXY4O.js +0 -213
  644. package/dist/chunk-3OVIXY4O.js.map +0 -1
  645. package/dist/chunk-3QNRBEYH.js +0 -432
  646. package/dist/chunk-3QX55WLC.js +0 -15
  647. package/dist/chunk-3USJPT2S.js +0 -1022
  648. package/dist/chunk-42CMQ5VR.js +0 -251
  649. package/dist/chunk-4LPOWQJY.js +0 -42
  650. package/dist/chunk-4NBTZRKT.js +0 -79
  651. package/dist/chunk-4OXI6HCV.js +0 -118
  652. package/dist/chunk-4SZZAFYQ.js +0 -2317
  653. package/dist/chunk-4TQL3WP2.js +0 -140
  654. package/dist/chunk-4Y6BK7IU.js +0 -196
  655. package/dist/chunk-4YD7YZC5.js +0 -373
  656. package/dist/chunk-5DTST3TP.js +0 -81
  657. package/dist/chunk-5FH5LQVS.js +0 -130
  658. package/dist/chunk-5KWMYPJV.js +0 -847
  659. package/dist/chunk-5MUJDC6C.js +0 -84
  660. package/dist/chunk-5QM2WPKV.js +0 -41
  661. package/dist/chunk-5WUN7XPD.js +0 -1184
  662. package/dist/chunk-64PO2WXU.js +0 -1067
  663. package/dist/chunk-6AHATAAY.js +0 -431
  664. package/dist/chunk-6ED2YWBT.js +0 -56
  665. package/dist/chunk-6GXVYAGR.js +0 -170
  666. package/dist/chunk-6H4SJBPE.js +0 -85
  667. package/dist/chunk-6MT3HHUB.js +0 -84
  668. package/dist/chunk-6UHCBH4G.js +0 -198
  669. package/dist/chunk-6WLX3NR3.js +0 -198
  670. package/dist/chunk-73NXYYWE.js +0 -112
  671. package/dist/chunk-76ERNKIZ.js +0 -603
  672. package/dist/chunk-776QZ573.js +0 -57
  673. package/dist/chunk-7BYWOFVH.js +0 -171
  674. package/dist/chunk-7O5CGGIQ.js +0 -108
  675. package/dist/chunk-7QOHRZ67.js +0 -251
  676. package/dist/chunk-7WIDB4PL.js +0 -2058
  677. package/dist/chunk-7WKP3DYJ.js +0 -37
  678. package/dist/chunk-7XOVTPDI.js +0 -227
  679. package/dist/chunk-AB5MBIXY.js +0 -281
  680. package/dist/chunk-ADNMXBCX.js +0 -1193
  681. package/dist/chunk-AFBJTUFK.js +0 -202
  682. package/dist/chunk-ALVRWCXE.js +0 -61
  683. package/dist/chunk-AOHU6O3M.js +0 -247
  684. package/dist/chunk-AOHU6O3M.js.map +0 -1
  685. package/dist/chunk-APW4T4SW.js +0 -270
  686. package/dist/chunk-AXBSYWKX.js +0 -2656
  687. package/dist/chunk-B2I5ZW35.js +0 -422
  688. package/dist/chunk-B3LMRTRF.js +0 -223
  689. package/dist/chunk-BE2XENG2.js +0 -292
  690. package/dist/chunk-BE2XENG2.js.map +0 -1
  691. package/dist/chunk-BF4SADKX.js +0 -29
  692. package/dist/chunk-BKP43KK4.js +0 -1788
  693. package/dist/chunk-BM3NEZ6X.js +0 -781
  694. package/dist/chunk-BT3BAGB5.js +0 -216
  695. package/dist/chunk-BTSYDIVJ.js +0 -357
  696. package/dist/chunk-BUBNGKWG.js +0 -70
  697. package/dist/chunk-BVUJV5WR.js +0 -126
  698. package/dist/chunk-BZO5ZMUP.js +0 -27
  699. package/dist/chunk-C3HUF3M2.js +0 -157
  700. package/dist/chunk-C5QCAOES.js +0 -264
  701. package/dist/chunk-CGK6ALQU.js +0 -159
  702. package/dist/chunk-CPYGO76Q.js +0 -335
  703. package/dist/chunk-CQH4FWYA.js +0 -490
  704. package/dist/chunk-CZP5QXNB.js +0 -234
  705. package/dist/chunk-D2TOWEYH.js +0 -266
  706. package/dist/chunk-D6L4GHRH.js +0 -340
  707. package/dist/chunk-DKT3N37I.js +0 -50
  708. package/dist/chunk-DMMJIFKA.js +0 -84
  709. package/dist/chunk-DO74DQC7.js +0 -26
  710. package/dist/chunk-DOFJZ2JU.js +0 -83
  711. package/dist/chunk-DSXVY5WZ.js +0 -119
  712. package/dist/chunk-E337C2VK.js +0 -82
  713. package/dist/chunk-E6NRSRBE.js +0 -114
  714. package/dist/chunk-E6SQKHAU.js +0 -114
  715. package/dist/chunk-E7UIVD7F.js +0 -236
  716. package/dist/chunk-EGBII4CP.js +0 -229
  717. package/dist/chunk-EILSAQVJ.js +0 -200
  718. package/dist/chunk-ELL6HSYR.js +0 -307
  719. package/dist/chunk-EUBGLFFR.js +0 -73
  720. package/dist/chunk-EW6RNWSH.js +0 -212
  721. package/dist/chunk-EYUT5Y6V.js +0 -2599
  722. package/dist/chunk-F7U3QPZ3.js +0 -304
  723. package/dist/chunk-FBTJKSTM.js +0 -1270
  724. package/dist/chunk-FC2FTSK3.js +0 -2424
  725. package/dist/chunk-FOGNA3BU.js +0 -148
  726. package/dist/chunk-FQFKHNC7.js +0 -650
  727. package/dist/chunk-FTCHM755.js +0 -50
  728. package/dist/chunk-FXSHP4JZ.js +0 -3550
  729. package/dist/chunk-G6ZZC543.js +0 -818
  730. package/dist/chunk-G7FU6PUA.js +0 -100
  731. package/dist/chunk-GA4YEAMX.js +0 -3851
  732. package/dist/chunk-GE33BGB7.js +0 -12
  733. package/dist/chunk-GQ67HSJY.js +0 -570
  734. package/dist/chunk-GXXZ3WAK.js +0 -106
  735. package/dist/chunk-H2TCRX3H.js +0 -237
  736. package/dist/chunk-HLL4PBO7.js +0 -60
  737. package/dist/chunk-HLOEPV5C.js +0 -259
  738. package/dist/chunk-HUAGBS4O.js +0 -56
  739. package/dist/chunk-I36GSRUJ.js +0 -211
  740. package/dist/chunk-I6VBHT7S.js +0 -261
  741. package/dist/chunk-ICNNNOXE.js +0 -333
  742. package/dist/chunk-ICX64J4U.js +0 -172
  743. package/dist/chunk-ID36Y46W.js +0 -5046
  744. package/dist/chunk-ID36Y46W.js.map +0 -1
  745. package/dist/chunk-IGVVXLKJ.js +0 -559
  746. package/dist/chunk-IKJLSBUI.js +0 -2984
  747. package/dist/chunk-IKMUFDVS.js +0 -50
  748. package/dist/chunk-IKUNOX7F.js +0 -255
  749. package/dist/chunk-ILKDYBON.js +0 -288
  750. package/dist/chunk-IVYJX3OY.js +0 -187
  751. package/dist/chunk-JCY4CMDH.js +0 -107
  752. package/dist/chunk-JJZPLGIP.js +0 -474
  753. package/dist/chunk-JW33RV4V.js +0 -143
  754. package/dist/chunk-JWPA6ZPZ.js +0 -351
  755. package/dist/chunk-JZ4QXS6D.js +0 -50
  756. package/dist/chunk-K42OUZQ3.js +0 -386
  757. package/dist/chunk-K5TOVX5A.js +0 -206
  758. package/dist/chunk-K63HGHZX.js +0 -99
  759. package/dist/chunk-K6R5T44I.js +0 -75
  760. package/dist/chunk-KHJ5PXFM.js +0 -914
  761. package/dist/chunk-KJZRQ55O.js +0 -2319
  762. package/dist/chunk-KJZRQ55O.js.map +0 -1
  763. package/dist/chunk-KKI55ZMW.js +0 -65
  764. package/dist/chunk-KRPLAAFP.js +0 -199
  765. package/dist/chunk-KVFEZDBO.js +0 -134
  766. package/dist/chunk-L4I665WK.js +0 -45
  767. package/dist/chunk-L4OF77LE.js +0 -110
  768. package/dist/chunk-L4OF77LE.js.map +0 -1
  769. package/dist/chunk-LA5T52RM.js +0 -70
  770. package/dist/chunk-LM2W5YAT.js +0 -401
  771. package/dist/chunk-LQ62ECE6.js +0 -390
  772. package/dist/chunk-LQDUHU3Y.js +0 -71
  773. package/dist/chunk-LRJIYTZW.js +0 -4157
  774. package/dist/chunk-LRJIYTZW.js.map +0 -1
  775. package/dist/chunk-LRN6GYAZ.js +0 -138
  776. package/dist/chunk-M4SDVTKJ.js +0 -790
  777. package/dist/chunk-MA6O7CM6.js +0 -99
  778. package/dist/chunk-MBIBB6GI.js +0 -197
  779. package/dist/chunk-MF3ZFB4H.js +0 -199
  780. package/dist/chunk-MJJGJMYJ.js +0 -98
  781. package/dist/chunk-MLJADQFI.js +0 -4824
  782. package/dist/chunk-MQG7RV3B.js +0 -62
  783. package/dist/chunk-MTTGSQA5.js +0 -186
  784. package/dist/chunk-MW7Y3T55.js +0 -525
  785. package/dist/chunk-MYUFMVCH.js +0 -121
  786. package/dist/chunk-N3OARGH2.js +0 -61
  787. package/dist/chunk-NB2HMRT2.js +0 -353
  788. package/dist/chunk-NFDFYWMV.js +0 -141
  789. package/dist/chunk-NWGNFN3N.js +0 -1187
  790. package/dist/chunk-NWJRPDIO.js +0 -840
  791. package/dist/chunk-NWJRPDIO.js.map +0 -1
  792. package/dist/chunk-NXWBBZJV.js +0 -267
  793. package/dist/chunk-NY2QWROL.js +0 -71
  794. package/dist/chunk-O2IOPP3R.js +0 -848
  795. package/dist/chunk-O2UWH5RG.js +0 -141
  796. package/dist/chunk-O5YWDLYF.js +0 -393
  797. package/dist/chunk-OBMCZO7E.js +0 -121
  798. package/dist/chunk-OD3DCCCB.js +0 -132
  799. package/dist/chunk-OMH7R6I3.js +0 -390
  800. package/dist/chunk-OSA5EQG5.js +0 -113
  801. package/dist/chunk-OSJ3MUTZ.js +0 -2936
  802. package/dist/chunk-OWAYJ2OV.js +0 -368
  803. package/dist/chunk-OYXBFSGK.js +0 -269
  804. package/dist/chunk-PC2EBA5G.js +0 -4116
  805. package/dist/chunk-PC2EBA5G.js.map +0 -1
  806. package/dist/chunk-PC2MVXIP.js +0 -363
  807. package/dist/chunk-PC2MVXIP.js.map +0 -1
  808. package/dist/chunk-PENGLDR5.js +0 -309
  809. package/dist/chunk-PSMAWRPL.js +0 -191
  810. package/dist/chunk-PW4IMTYR.js +0 -702
  811. package/dist/chunk-PW54V7T5.js +0 -387
  812. package/dist/chunk-Q2EXYSMO.js +0 -24
  813. package/dist/chunk-Q2XJK5I4.js +0 -51
  814. package/dist/chunk-Q2XJK5I4.js.map +0 -1
  815. package/dist/chunk-Q4EFRI6X.js +0 -258
  816. package/dist/chunk-Q52CXW6C.js +0 -48
  817. package/dist/chunk-Q6XQ2R37.js +0 -184
  818. package/dist/chunk-QAJ53XBW.js +0 -23
  819. package/dist/chunk-QDTKECT4.js +0 -129
  820. package/dist/chunk-QE3ZFGI3.js +0 -43
  821. package/dist/chunk-QHHSUR2Y.js +0 -298
  822. package/dist/chunk-QHNVNR7B.js +0 -173
  823. package/dist/chunk-QIK2Q6N5.js +0 -376
  824. package/dist/chunk-QWL4L366.js +0 -38
  825. package/dist/chunk-R3J2PTVQ.js +0 -690
  826. package/dist/chunk-RBRX5ZS3.js +0 -319
  827. package/dist/chunk-REX6JIC7.js +0 -33
  828. package/dist/chunk-RGZ7EEC3.js +0 -537
  829. package/dist/chunk-RGZ7EEC3.js.map +0 -1
  830. package/dist/chunk-RIPS7GFR.js +0 -960
  831. package/dist/chunk-RTBZNFNV.js +0 -1354
  832. package/dist/chunk-RTBZNFNV.js.map +0 -1
  833. package/dist/chunk-SKMNW4SW.js +0 -187
  834. package/dist/chunk-SRFARKXC.js +0 -623
  835. package/dist/chunk-SWIHWCTW.js +0 -4461
  836. package/dist/chunk-TA5CFTO4.js +0 -103
  837. package/dist/chunk-TF4ZVJLI.js +0 -156
  838. package/dist/chunk-TG7DADJR.js +0 -9624
  839. package/dist/chunk-TI4R2ZD5.js +0 -623
  840. package/dist/chunk-TI4R2ZD5.js.map +0 -1
  841. package/dist/chunk-TNKWOUWP.js +0 -412
  842. package/dist/chunk-TNUSPXPW.js +0 -5555
  843. package/dist/chunk-TNUSPXPW.js.map +0 -1
  844. package/dist/chunk-TNYFHKVV.js +0 -366
  845. package/dist/chunk-TPMZBOFH.js +0 -178
  846. package/dist/chunk-TW3LKRJF.js +0 -263
  847. package/dist/chunk-TZAO65I4.js +0 -83
  848. package/dist/chunk-U5EFEMYU.js +0 -89
  849. package/dist/chunk-U6M4LS3M.js +0 -378
  850. package/dist/chunk-UI4HI5QK.js +0 -918
  851. package/dist/chunk-UJDOWCQ3.js +0 -272
  852. package/dist/chunk-UJUQ2QOX.js +0 -581
  853. package/dist/chunk-UQ3IM6FY.js +0 -133
  854. package/dist/chunk-UYE47LO6.js +0 -246
  855. package/dist/chunk-VADHIT26.js +0 -89
  856. package/dist/chunk-VFQ3H6CO.js +0 -163
  857. package/dist/chunk-VGUN6VB2.js +0 -188
  858. package/dist/chunk-VGWWEVSD.js +0 -723
  859. package/dist/chunk-VIEFJ2DM.js +0 -2469
  860. package/dist/chunk-VLXM36VS.js +0 -268
  861. package/dist/chunk-W3BFRR2G.js +0 -499
  862. package/dist/chunk-W5MPXR3A.js +0 -981
  863. package/dist/chunk-W5OWKVZG.js +0 -136
  864. package/dist/chunk-W6FRORMX.js +0 -486
  865. package/dist/chunk-W6FRORMX.js.map +0 -1
  866. package/dist/chunk-W7XROSZO.js +0 -232
  867. package/dist/chunk-W7XROSZO.js.map +0 -1
  868. package/dist/chunk-WEZ5PXZP.js +0 -403
  869. package/dist/chunk-WHWUWN2X.js +0 -197
  870. package/dist/chunk-WHWUWN2X.js.map +0 -1
  871. package/dist/chunk-WLEDGIVS.js +0 -114
  872. package/dist/chunk-WLEDGIVS.js.map +0 -1
  873. package/dist/chunk-WNDAKLHG.js +0 -281
  874. package/dist/chunk-WTJ4PLMU.js +0 -103
  875. package/dist/chunk-WV2KPJUW.js +0 -107
  876. package/dist/chunk-X3VY5EGY.js +0 -277
  877. package/dist/chunk-X3VY5EGY.js.map +0 -1
  878. package/dist/chunk-XDBYWVCW.js +0 -418
  879. package/dist/chunk-XF7MA4U5.js +0 -36
  880. package/dist/chunk-XF7MA4U5.js.map +0 -1
  881. package/dist/chunk-XOSQP3YA.js +0 -605
  882. package/dist/chunk-XYBV4ZJQ.js +0 -271
  883. package/dist/chunk-YBKVGLQR.js +0 -147
  884. package/dist/chunk-YDCUBUWH.js +0 -1583
  885. package/dist/chunk-YG6NARQY.js +0 -51
  886. package/dist/chunk-YG6NARQY.js.map +0 -1
  887. package/dist/chunk-YSVD5HI4.js +0 -278
  888. package/dist/chunk-YT3WGNG6.js +0 -290
  889. package/dist/chunk-YYICQDK4.js +0 -414
  890. package/dist/chunk-YYLMZLI6.js +0 -686
  891. package/dist/chunk-ZAMTKG5U.js +0 -95
  892. package/dist/chunk-ZDLYSXKN.js +0 -111
  893. package/dist/chunk-ZG447FSS.js +0 -194
  894. package/dist/chunk-ZIT5KD4Q.js +0 -264
  895. package/dist/chunk-ZUDOVDKR.js +0 -3064
  896. package/dist/chunk-ZW2ECJ3A.js +0 -451
  897. package/dist/computer-viewer-LPZ763KF.js +0 -21
  898. package/dist/embedded-new-voice-YVMKSLKJ.js +0 -24
  899. package/dist/embedded-voice-BJPQFXSU.js +0 -24
  900. package/dist/fleet-decision-row-AA4H5CDT.js +0 -361
  901. package/dist/model-policy-picker-menu-HSMWVO4P.js +0 -22
  902. package/dist/payment-page-card-3LTSFJGN.js +0 -223
  903. package/dist/platform-activity-row-5VYV6TX4.js +0 -128
  904. package/dist/queue-surface-implementation-NXHZUKD2.js +0 -908
  905. package/dist/recorder-host-ZKRWTDBM.js +0 -57
  906. package/dist/recorder-host-ZKRWTDBM.js.map +0 -1
  907. package/dist/sandbox-files-YCMLQUFU.js +0 -27
  908. package/dist/session-connect-cards-KSQLMRM5.js +0 -25
  909. package/dist/session-realtime-ZR6JLG3Y.js +0 -30
  910. package/dist/timeline-annotation-markers-YAHDPWVG.js +0 -157
  911. package/dist/timeline-annotation-selection-KHXNCEJP.js +0 -208
  912. package/dist/timeline-annotations-dialog-Y4XD3N7B.js +0 -283
  913. /package/dist/{browser-viewer-NOP5EAUO.js.map → browser-viewer-TC27OCIP.js.map} +0 -0
  914. /package/dist/{chat-interactive-block-G7O44JHR.js.map → chat-interactive-block-RWPQBHVS.js.map} +0 -0
  915. /package/dist/{chunk-EGBII4CP.js.map → chunk-2BDT3UZQ.js.map} +0 -0
  916. /package/dist/{chunk-4YD7YZC5.js.map → chunk-2CLNIEK4.js.map} +0 -0
  917. /package/dist/{chunk-ZW2ECJ3A.js.map → chunk-2FSBSCZJ.js.map} +0 -0
  918. /package/dist/{chunk-KRPLAAFP.js.map → chunk-2I7HDP53.js.map} +0 -0
  919. /package/dist/{chunk-3QX55WLC.js.map → chunk-2INLDVK3.js.map} +0 -0
  920. /package/dist/{chunk-BVUJV5WR.js.map → chunk-2KALVELR.js.map} +0 -0
  921. /package/dist/{chunk-XDBYWVCW.js.map → chunk-2M3J7ZWQ.js.map} +0 -0
  922. /package/dist/{chunk-2RREGDQH.js.map → chunk-2OP6WLGV.js.map} +0 -0
  923. /package/dist/{chunk-OSJ3MUTZ.js.map → chunk-2RG7NIAS.js.map} +0 -0
  924. /package/dist/{chunk-26RWVLRD.js.map → chunk-2STUPWEL.js.map} +0 -0
  925. /package/dist/{chunk-XYBV4ZJQ.js.map → chunk-2YUOVM3G.js.map} +0 -0
  926. /package/dist/{chunk-2GDNWKSC.js.map → chunk-2Z3NQNTM.js.map} +0 -0
  927. /package/dist/{chunk-2VB2O4FQ.js.map → chunk-3CPWWGNK.js.map} +0 -0
  928. /package/dist/{chunk-7WKP3DYJ.js.map → chunk-3ED2U6XE.js.map} +0 -0
  929. /package/dist/{chunk-BT3BAGB5.js.map → chunk-3GZA4BUW.js.map} +0 -0
  930. /package/dist/{chunk-3USJPT2S.js.map → chunk-3IK6UYO6.js.map} +0 -0
  931. /package/dist/{chunk-6AHATAAY.js.map → chunk-3PZ7JZI2.js.map} +0 -0
  932. /package/dist/{chunk-JZ4QXS6D.js.map → chunk-4DVJ6ONS.js.map} +0 -0
  933. /package/dist/{chunk-5QM2WPKV.js.map → chunk-4E3ZJRTZ.js.map} +0 -0
  934. /package/dist/{chunk-NFDFYWMV.js.map → chunk-4SAWSRAA.js.map} +0 -0
  935. /package/dist/{chunk-ELL6HSYR.js.map → chunk-53AGXXZM.js.map} +0 -0
  936. /package/dist/{chunk-G6ZZC543.js.map → chunk-54YW6SZZ.js.map} +0 -0
  937. /package/dist/{chunk-4SZZAFYQ.js.map → chunk-57AZS3IE.js.map} +0 -0
  938. /package/dist/{chunk-JW33RV4V.js.map → chunk-5CPEEAFD.js.map} +0 -0
  939. /package/dist/{chunk-D6L4GHRH.js.map → chunk-5EWSRZ2Y.js.map} +0 -0
  940. /package/dist/{chunk-PW54V7T5.js.map → chunk-5IE76VCY.js.map} +0 -0
  941. /package/dist/{chunk-6GXVYAGR.js.map → chunk-5NWEKLDZ.js.map} +0 -0
  942. /package/dist/{chunk-6UHCBH4G.js.map → chunk-5O2FCCHZ.js.map} +0 -0
  943. /package/dist/{chunk-2YC6JQRO.js.map → chunk-5QAY6K77.js.map} +0 -0
  944. /package/dist/{chunk-EYUT5Y6V.js.map → chunk-6DK6Z4UN.js.map} +0 -0
  945. /package/dist/{chunk-PW4IMTYR.js.map → chunk-6DVCC7QS.js.map} +0 -0
  946. /package/dist/{chunk-7WIDB4PL.js.map → chunk-6JHU2UBS.js.map} +0 -0
  947. /package/dist/{chunk-CQH4FWYA.js.map → chunk-6PZ7OBYU.js.map} +0 -0
  948. /package/dist/{chunk-VFQ3H6CO.js.map → chunk-6WGRDRMA.js.map} +0 -0
  949. /package/dist/{chunk-MTTGSQA5.js.map → chunk-77WAKEAH.js.map} +0 -0
  950. /package/dist/{chunk-O5YWDLYF.js.map → chunk-7TDO3CUM.js.map} +0 -0
  951. /package/dist/{chunk-2AHTY7OT.js.map → chunk-7TIX2UAR.js.map} +0 -0
  952. /package/dist/{chunk-FOGNA3BU.js.map → chunk-7V5REBCP.js.map} +0 -0
  953. /package/dist/{chunk-2JENKGCE.js.map → chunk-7VMZGLYI.js.map} +0 -0
  954. /package/dist/{chunk-E7UIVD7F.js.map → chunk-7W37NS3I.js.map} +0 -0
  955. /package/dist/{chunk-ZDLYSXKN.js.map → chunk-7X6SDK2C.js.map} +0 -0
  956. /package/dist/{chunk-ZAMTKG5U.js.map → chunk-7ZNUHRP5.js.map} +0 -0
  957. /package/dist/{chunk-DMMJIFKA.js.map → chunk-A36PZALD.js.map} +0 -0
  958. /package/dist/{chunk-WV2KPJUW.js.map → chunk-AUI6VA63.js.map} +0 -0
  959. /package/dist/{chunk-Q2EXYSMO.js.map → chunk-AW2MQB37.js.map} +0 -0
  960. /package/dist/{chunk-6WLX3NR3.js.map → chunk-AWKES45Y.js.map} +0 -0
  961. /package/dist/{chunk-OD3DCCCB.js.map → chunk-AXHZYXUV.js.map} +0 -0
  962. /package/dist/{chunk-QDTKECT4.js.map → chunk-BHNSJVBC.js.map} +0 -0
  963. /package/dist/{chunk-FTCHM755.js.map → chunk-BJEJFISW.js.map} +0 -0
  964. /package/dist/{chunk-B2I5ZW35.js.map → chunk-BJFH6JI5.js.map} +0 -0
  965. /package/dist/{chunk-RIPS7GFR.js.map → chunk-BMICEQZQ.js.map} +0 -0
  966. /package/dist/{chunk-BF4SADKX.js.map → chunk-BTLBYBLU.js.map} +0 -0
  967. /package/dist/{chunk-U5EFEMYU.js.map → chunk-BXBDYNRP.js.map} +0 -0
  968. /package/dist/{chunk-BTSYDIVJ.js.map → chunk-C372BFOV.js.map} +0 -0
  969. /package/dist/{chunk-MLJADQFI.js.map → chunk-CMKGILJK.js.map} +0 -0
  970. /package/dist/{chunk-DKT3N37I.js.map → chunk-CRAOSVHC.js.map} +0 -0
  971. /package/dist/{chunk-WNDAKLHG.js.map → chunk-CRU35QQH.js.map} +0 -0
  972. /package/dist/{chunk-2XNG2KNT.js.map → chunk-CUIWCGMA.js.map} +0 -0
  973. /package/dist/{chunk-QWL4L366.js.map → chunk-D5TWNFFE.js.map} +0 -0
  974. /package/dist/{chunk-SWIHWCTW.js.map → chunk-DF5EAHDN.js.map} +0 -0
  975. /package/dist/{chunk-HUAGBS4O.js.map → chunk-DJAXC5OK.js.map} +0 -0
  976. /package/dist/{chunk-FXSHP4JZ.js.map → chunk-DXBYWSL5.js.map} +0 -0
  977. /package/dist/{chunk-5MUJDC6C.js.map → chunk-DXR5PDFP.js.map} +0 -0
  978. /package/dist/{chunk-NXWBBZJV.js.map → chunk-DZWARC4M.js.map} +0 -0
  979. /package/dist/{chunk-GXXZ3WAK.js.map → chunk-DZXEDSQI.js.map} +0 -0
  980. /package/dist/{chunk-Q52CXW6C.js.map → chunk-E7XERZWC.js.map} +0 -0
  981. /package/dist/{chunk-4NBTZRKT.js.map → chunk-ECJBYNLJ.js.map} +0 -0
  982. /package/dist/{chunk-QE3ZFGI3.js.map → chunk-EDI6SJ2N.js.map} +0 -0
  983. /package/dist/{chunk-E6NRSRBE.js.map → chunk-EWSOC6WF.js.map} +0 -0
  984. /package/dist/{chunk-TA5CFTO4.js.map → chunk-F2OPHAUN.js.map} +0 -0
  985. /package/dist/{chunk-5DTST3TP.js.map → chunk-F4ISQGGM.js.map} +0 -0
  986. /package/dist/{chunk-MBIBB6GI.js.map → chunk-FO4LYKJL.js.map} +0 -0
  987. /package/dist/{chunk-EUBGLFFR.js.map → chunk-FPXASDG5.js.map} +0 -0
  988. /package/dist/{chunk-C3HUF3M2.js.map → chunk-FVXBNBHO.js.map} +0 -0
  989. /package/dist/{chunk-W5MPXR3A.js.map → chunk-FZC5N55X.js.map} +0 -0
  990. /package/dist/{chunk-MA6O7CM6.js.map → chunk-GAVYGBFI.js.map} +0 -0
  991. /package/dist/{chunk-REX6JIC7.js.map → chunk-GKVJIDHF.js.map} +0 -0
  992. /package/dist/{chunk-EW6RNWSH.js.map → chunk-GVN5SZLX.js.map} +0 -0
  993. /package/dist/{chunk-KVFEZDBO.js.map → chunk-H3T7IWNA.js.map} +0 -0
  994. /package/dist/{chunk-I6VBHT7S.js.map → chunk-HAX4LCR5.js.map} +0 -0
  995. /package/dist/{chunk-OBMCZO7E.js.map → chunk-HC4JFZVU.js.map} +0 -0
  996. /package/dist/{chunk-UJUQ2QOX.js.map → chunk-HEFPPMBQ.js.map} +0 -0
  997. /package/dist/{chunk-DOFJZ2JU.js.map → chunk-HNLR7Q4Z.js.map} +0 -0
  998. /package/dist/{chunk-GE33BGB7.js.map → chunk-HSOXMJOT.js.map} +0 -0
  999. /package/dist/{chunk-AB5MBIXY.js.map → chunk-I4MRDSUF.js.map} +0 -0
  1000. /package/dist/{chunk-AFBJTUFK.js.map → chunk-I4QEJ62Y.js.map} +0 -0
  1001. /package/dist/{chunk-6ED2YWBT.js.map → chunk-I5B5L6Q4.js.map} +0 -0
  1002. /package/dist/{chunk-C5QCAOES.js.map → chunk-I5QZJODL.js.map} +0 -0
  1003. /package/dist/{chunk-76ERNKIZ.js.map → chunk-I7ITSXSJ.js.map} +0 -0
  1004. /package/dist/{chunk-OMH7R6I3.js.map → chunk-I7XIZRFD.js.map} +0 -0
  1005. /package/dist/{chunk-E337C2VK.js.map → chunk-IDANQPRH.js.map} +0 -0
  1006. /package/dist/{chunk-3FD76LXM.js.map → chunk-IFB3WJ36.js.map} +0 -0
  1007. /package/dist/{chunk-ZIT5KD4Q.js.map → chunk-IHTAKKTK.js.map} +0 -0
  1008. /package/dist/{chunk-QHNVNR7B.js.map → chunk-ILDXWY37.js.map} +0 -0
  1009. /package/dist/{chunk-GQ67HSJY.js.map → chunk-IMDQUHBJ.js.map} +0 -0
  1010. /package/dist/{chunk-DSXVY5WZ.js.map → chunk-IMZCQBOT.js.map} +0 -0
  1011. /package/dist/{chunk-WEZ5PXZP.js.map → chunk-IXPTECSC.js.map} +0 -0
  1012. /package/dist/{chunk-NY2QWROL.js.map → chunk-J255A3N5.js.map} +0 -0
  1013. /package/dist/{chunk-O2UWH5RG.js.map → chunk-J5F5HPPW.js.map} +0 -0
  1014. /package/dist/{chunk-VIEFJ2DM.js.map → chunk-JEA3QDX7.js.map} +0 -0
  1015. /package/dist/{chunk-TF4ZVJLI.js.map → chunk-JEUPAVYY.js.map} +0 -0
  1016. /package/dist/{chunk-ZG447FSS.js.map → chunk-JKHKLL5W.js.map} +0 -0
  1017. /package/dist/{chunk-FQFKHNC7.js.map → chunk-JQL7ZH6C.js.map} +0 -0
  1018. /package/dist/{chunk-776QZ573.js.map → chunk-JWB44UGJ.js.map} +0 -0
  1019. /package/dist/{chunk-ICNNNOXE.js.map → chunk-JZ4NLCAP.js.map} +0 -0
  1020. /package/dist/{chunk-TNKWOUWP.js.map → chunk-K2A5PXQ5.js.map} +0 -0
  1021. /package/dist/{chunk-SRFARKXC.js.map → chunk-K56XV3C3.js.map} +0 -0
  1022. /package/dist/{chunk-QAJ53XBW.js.map → chunk-K6GAXXVA.js.map} +0 -0
  1023. /package/dist/{chunk-MF3ZFB4H.js.map → chunk-KCBMFSMS.js.map} +0 -0
  1024. /package/dist/{chunk-VLXM36VS.js.map → chunk-KF2FV3ZJ.js.map} +0 -0
  1025. /package/dist/{chunk-YSVD5HI4.js.map → chunk-KJD65EJP.js.map} +0 -0
  1026. /package/dist/{chunk-K42OUZQ3.js.map → chunk-KLEUWIMZ.js.map} +0 -0
  1027. /package/dist/{chunk-PENGLDR5.js.map → chunk-KODELWYT.js.map} +0 -0
  1028. /package/dist/{chunk-TZAO65I4.js.map → chunk-KRDR5RJD.js.map} +0 -0
  1029. /package/dist/{chunk-KHJ5PXFM.js.map → chunk-KUDGXAF7.js.map} +0 -0
  1030. /package/dist/{chunk-6H4SJBPE.js.map → chunk-KYS77RPN.js.map} +0 -0
  1031. /package/dist/{chunk-OWAYJ2OV.js.map → chunk-L7YTNTIK.js.map} +0 -0
  1032. /package/dist/{chunk-YYLMZLI6.js.map → chunk-LHPNABDH.js.map} +0 -0
  1033. /package/dist/{chunk-LM2W5YAT.js.map → chunk-MFROMEKA.js.map} +0 -0
  1034. /package/dist/{chunk-AXBSYWKX.js.map → chunk-MIHN76LX.js.map} +0 -0
  1035. /package/dist/{chunk-4LPOWQJY.js.map → chunk-MIYFS2XN.js.map} +0 -0
  1036. /package/dist/{chunk-KKI55ZMW.js.map → chunk-MJUCFQMS.js.map} +0 -0
  1037. /package/dist/{chunk-ZUDOVDKR.js.map → chunk-MM4FNWI4.js.map} +0 -0
  1038. /package/dist/{chunk-M4SDVTKJ.js.map → chunk-MNZG4OHU.js.map} +0 -0
  1039. /package/dist/{chunk-EILSAQVJ.js.map → chunk-N6AACDUW.js.map} +0 -0
  1040. /package/dist/{chunk-BM3NEZ6X.js.map → chunk-NC55IFN3.js.map} +0 -0
  1041. /package/dist/{chunk-MJJGJMYJ.js.map → chunk-NC7PVOEK.js.map} +0 -0
  1042. /package/dist/{chunk-LA5T52RM.js.map → chunk-NCYMNCJO.js.map} +0 -0
  1043. /package/dist/{chunk-HLOEPV5C.js.map → chunk-ND2BXV3P.js.map} +0 -0
  1044. /package/dist/{chunk-UJDOWCQ3.js.map → chunk-NDBTFUO6.js.map} +0 -0
  1045. /package/dist/{chunk-K5TOVX5A.js.map → chunk-NDQJZ7HF.js.map} +0 -0
  1046. /package/dist/{chunk-35737UT4.js.map → chunk-NGJJJPZZ.js.map} +0 -0
  1047. /package/dist/{chunk-42CMQ5VR.js.map → chunk-NJTSNNE7.js.map} +0 -0
  1048. /package/dist/{chunk-FBTJKSTM.js.map → chunk-NRTE7DNV.js.map} +0 -0
  1049. /package/dist/{chunk-YT3WGNG6.js.map → chunk-NULUNM7H.js.map} +0 -0
  1050. /package/dist/{chunk-7XOVTPDI.js.map → chunk-NUNZS36W.js.map} +0 -0
  1051. /package/dist/{chunk-FC2FTSK3.js.map → chunk-NW53H5RW.js.map} +0 -0
  1052. /package/dist/{chunk-TW3LKRJF.js.map → chunk-NXCMHIKI.js.map} +0 -0
  1053. /package/dist/{chunk-CGK6ALQU.js.map → chunk-O3LKCBP5.js.map} +0 -0
  1054. /package/dist/{chunk-QIK2Q6N5.js.map → chunk-O6N4ABCA.js.map} +0 -0
  1055. /package/dist/{chunk-73NXYYWE.js.map → chunk-O732GAFC.js.map} +0 -0
  1056. /package/dist/{chunk-R3J2PTVQ.js.map → chunk-OF4TIKYC.js.map} +0 -0
  1057. /package/dist/{chunk-BUBNGKWG.js.map → chunk-OMPVOMPP.js.map} +0 -0
  1058. /package/dist/{chunk-4OXI6HCV.js.map → chunk-OPJJSKUK.js.map} +0 -0
  1059. /package/dist/{chunk-4Y6BK7IU.js.map → chunk-OPWCMA4D.js.map} +0 -0
  1060. /package/dist/{chunk-ADNMXBCX.js.map → chunk-ORJPS5VN.js.map} +0 -0
  1061. /package/dist/{chunk-SKMNW4SW.js.map → chunk-OSY5K7L7.js.map} +0 -0
  1062. /package/dist/{chunk-L4I665WK.js.map → chunk-OV6QJRT4.js.map} +0 -0
  1063. /package/dist/{chunk-7O5CGGIQ.js.map → chunk-OVKYVZMW.js.map} +0 -0
  1064. /package/dist/{chunk-7BYWOFVH.js.map → chunk-OZCBM3UC.js.map} +0 -0
  1065. /package/dist/{chunk-ALVRWCXE.js.map → chunk-P3A2EINJ.js.map} +0 -0
  1066. /package/dist/{chunk-BZO5ZMUP.js.map → chunk-PTAG4PDC.js.map} +0 -0
  1067. /package/dist/{chunk-QHHSUR2Y.js.map → chunk-PTF5B7TJ.js.map} +0 -0
  1068. /package/dist/{chunk-O2IOPP3R.js.map → chunk-Q3DPEYX4.js.map} +0 -0
  1069. /package/dist/{chunk-G7FU6PUA.js.map → chunk-QB2KMIDP.js.map} +0 -0
  1070. /package/dist/{chunk-64PO2WXU.js.map → chunk-QCSJ4CWE.js.map} +0 -0
  1071. /package/dist/{chunk-YYICQDK4.js.map → chunk-QIOQ2NPQ.js.map} +0 -0
  1072. /package/dist/{chunk-NB2HMRT2.js.map → chunk-QK5EFEUT.js.map} +0 -0
  1073. /package/dist/{chunk-366XZ4PM.js.map → chunk-QPQBLYQJ.js.map} +0 -0
  1074. /package/dist/{chunk-Q6XQ2R37.js.map → chunk-QPSGCC5D.js.map} +0 -0
  1075. /package/dist/{chunk-JJZPLGIP.js.map → chunk-QZAAUQRN.js.map} +0 -0
  1076. /package/dist/{chunk-VGUN6VB2.js.map → chunk-RGBI63KJ.js.map} +0 -0
  1077. /package/dist/{chunk-LRN6GYAZ.js.map → chunk-RLBKLAEY.js.map} +0 -0
  1078. /package/dist/{chunk-F7U3QPZ3.js.map → chunk-RMFKVOM7.js.map} +0 -0
  1079. /package/dist/{chunk-Q4EFRI6X.js.map → chunk-ROKQU7WG.js.map} +0 -0
  1080. /package/dist/{chunk-7QOHRZ67.js.map → chunk-RPVREAU7.js.map} +0 -0
  1081. /package/dist/{chunk-VGWWEVSD.js.map → chunk-RQKLF42C.js.map} +0 -0
  1082. /package/dist/{chunk-2VTTKH23.js.map → chunk-SEO7TICN.js.map} +0 -0
  1083. /package/dist/{chunk-3QNRBEYH.js.map → chunk-SHHJCL7X.js.map} +0 -0
  1084. /package/dist/{chunk-E6SQKHAU.js.map → chunk-SIRLACNZ.js.map} +0 -0
  1085. /package/dist/{chunk-H2TCRX3H.js.map → chunk-SKPHMYAA.js.map} +0 -0
  1086. /package/dist/{chunk-YDCUBUWH.js.map → chunk-SODC7T6L.js.map} +0 -0
  1087. /package/dist/{chunk-TNYFHKVV.js.map → chunk-SQJIKMN3.js.map} +0 -0
  1088. /package/dist/{chunk-DO74DQC7.js.map → chunk-SVINDKVW.js.map} +0 -0
  1089. /package/dist/{chunk-CPYGO76Q.js.map → chunk-SYCDHPZF.js.map} +0 -0
  1090. /package/dist/{chunk-UQ3IM6FY.js.map → chunk-T2QX3FDP.js.map} +0 -0
  1091. /package/dist/{chunk-NWGNFN3N.js.map → chunk-T3OWFVMS.js.map} +0 -0
  1092. /package/dist/{chunk-N3OARGH2.js.map → chunk-T6XI5FLY.js.map} +0 -0
  1093. /package/dist/{chunk-MQG7RV3B.js.map → chunk-T7OXJZCX.js.map} +0 -0
  1094. /package/dist/{chunk-2T7DX6KR.js.map → chunk-TAT5USZN.js.map} +0 -0
  1095. /package/dist/{chunk-ICX64J4U.js.map → chunk-TPQTRNER.js.map} +0 -0
  1096. /package/dist/{chunk-D2TOWEYH.js.map → chunk-TUIN4MB7.js.map} +0 -0
  1097. /package/dist/{chunk-LQDUHU3Y.js.map → chunk-TX3VECZU.js.map} +0 -0
  1098. /package/dist/{chunk-TG7DADJR.js.map → chunk-TXLIEOJX.js.map} +0 -0
  1099. /package/dist/{chunk-2ZVRJRXC.js.map → chunk-U3DN4HEY.js.map} +0 -0
  1100. /package/dist/{chunk-PSMAWRPL.js.map → chunk-U7XM7CB4.js.map} +0 -0
  1101. /package/dist/{chunk-4TQL3WP2.js.map → chunk-UJK53QFL.js.map} +0 -0
  1102. /package/dist/{chunk-RBRX5ZS3.js.map → chunk-UMTXA2TH.js.map} +0 -0
  1103. /package/dist/{chunk-36MIDGAH.js.map → chunk-UPDSXFK5.js.map} +0 -0
  1104. /package/dist/{chunk-OYXBFSGK.js.map → chunk-UTIAXH52.js.map} +0 -0
  1105. /package/dist/{chunk-5WUN7XPD.js.map → chunk-UVN5TMHU.js.map} +0 -0
  1106. /package/dist/{chunk-UYE47LO6.js.map → chunk-VGYXW3VG.js.map} +0 -0
  1107. /package/dist/{chunk-IKUNOX7F.js.map → chunk-VS7AHPCZ.js.map} +0 -0
  1108. /package/dist/{chunk-MYUFMVCH.js.map → chunk-VTTAJOQ7.js.map} +0 -0
  1109. /package/dist/{chunk-K63HGHZX.js.map → chunk-VWPOLUAO.js.map} +0 -0
  1110. /package/dist/{chunk-GA4YEAMX.js.map → chunk-X3MWB2QU.js.map} +0 -0
  1111. /package/dist/{chunk-I36GSRUJ.js.map → chunk-X6KAJI3V.js.map} +0 -0
  1112. /package/dist/{chunk-IKMUFDVS.js.map → chunk-XBLRHV5R.js.map} +0 -0
  1113. /package/dist/{chunk-XOSQP3YA.js.map → chunk-XDFP2LMW.js.map} +0 -0
  1114. /package/dist/{chunk-MW7Y3T55.js.map → chunk-XEQMZB3C.js.map} +0 -0
  1115. /package/dist/{chunk-B3LMRTRF.js.map → chunk-XEYLT5VA.js.map} +0 -0
  1116. /package/dist/{chunk-UI4HI5QK.js.map → chunk-XHIQ5I6N.js.map} +0 -0
  1117. /package/dist/{chunk-U6M4LS3M.js.map → chunk-XLH7QY2R.js.map} +0 -0
  1118. /package/dist/{chunk-OSA5EQG5.js.map → chunk-XWFAMUZQ.js.map} +0 -0
  1119. /package/dist/{chunk-6MT3HHUB.js.map → chunk-Y4OBB2VN.js.map} +0 -0
  1120. /package/dist/{chunk-CZP5QXNB.js.map → chunk-YCVD6CI3.js.map} +0 -0
  1121. /package/dist/{chunk-APW4T4SW.js.map → chunk-YENLNISG.js.map} +0 -0
  1122. /package/dist/{chunk-JWPA6ZPZ.js.map → chunk-YIRVLKAX.js.map} +0 -0
  1123. /package/dist/{chunk-LQ62ECE6.js.map → chunk-YL73CVNK.js.map} +0 -0
  1124. /package/dist/{chunk-ILKDYBON.js.map → chunk-YLS6QE5G.js.map} +0 -0
  1125. /package/dist/{chunk-YBKVGLQR.js.map → chunk-YPWU5KPE.js.map} +0 -0
  1126. /package/dist/{chunk-IKJLSBUI.js.map → chunk-YQXTDZSU.js.map} +0 -0
  1127. /package/dist/{chunk-TPMZBOFH.js.map → chunk-YSJEAAOL.js.map} +0 -0
  1128. /package/dist/{chunk-W3BFRR2G.js.map → chunk-YWIFM7D7.js.map} +0 -0
  1129. /package/dist/{chunk-WTJ4PLMU.js.map → chunk-YWVI6ZMK.js.map} +0 -0
  1130. /package/dist/{chunk-5KWMYPJV.js.map → chunk-Z4FMAFNH.js.map} +0 -0
  1131. /package/dist/{chunk-W5OWKVZG.js.map → chunk-Z654FWNU.js.map} +0 -0
  1132. /package/dist/{chunk-5FH5LQVS.js.map → chunk-Z7Y523PS.js.map} +0 -0
  1133. /package/dist/{chunk-HLL4PBO7.js.map → chunk-ZD67RM6G.js.map} +0 -0
  1134. /package/dist/{chunk-IVYJX3OY.js.map → chunk-ZEG4VPBL.js.map} +0 -0
  1135. /package/dist/{chunk-K6R5T44I.js.map → chunk-ZLYCOBHW.js.map} +0 -0
  1136. /package/dist/{chunk-VADHIT26.js.map → chunk-ZNJ5MTXV.js.map} +0 -0
  1137. /package/dist/{chunk-2KYQC4T5.js.map → chunk-ZSGY3H53.js.map} +0 -0
  1138. /package/dist/{chunk-BKP43KK4.js.map → chunk-ZTPXACWB.js.map} +0 -0
  1139. /package/dist/{chunk-JCY4CMDH.js.map → chunk-ZUA3JMI6.js.map} +0 -0
  1140. /package/dist/{chunk-IGVVXLKJ.js.map → chunk-ZYAZUPPV.js.map} +0 -0
  1141. /package/dist/{computer-viewer-LPZ763KF.js.map → computer-viewer-TDDO25AV.js.map} +0 -0
  1142. /package/dist/{embedded-new-voice-YVMKSLKJ.js.map → embedded-new-voice-2G3VLPVQ.js.map} +0 -0
  1143. /package/dist/{embedded-voice-BJPQFXSU.js.map → embedded-voice-T5IWOWGD.js.map} +0 -0
  1144. /package/dist/{fleet-decision-row-AA4H5CDT.js.map → fleet-decision-row-WM64KXP3.js.map} +0 -0
  1145. /package/dist/{model-policy-picker-menu-HSMWVO4P.js.map → model-policy-picker-menu-SMC6J6QN.js.map} +0 -0
  1146. /package/dist/{payment-page-card-3LTSFJGN.js.map → payment-page-card-G4U63KUV.js.map} +0 -0
  1147. /package/dist/{platform-activity-row-5VYV6TX4.js.map → platform-activity-row-BUZGZAKZ.js.map} +0 -0
  1148. /package/dist/{queue-surface-implementation-NXHZUKD2.js.map → queue-surface-implementation-4KUZ4PJV.js.map} +0 -0
  1149. /package/dist/{sandbox-files-YCMLQUFU.js.map → sandbox-files-ESDMOFSD.js.map} +0 -0
  1150. /package/dist/{session-connect-cards-KSQLMRM5.js.map → session-connect-cards-Q53KMMYY.js.map} +0 -0
  1151. /package/dist/{session-realtime-ZR6JLG3Y.js.map → session-realtime-CF3I35WJ.js.map} +0 -0
  1152. /package/dist/{timeline-annotation-markers-YAHDPWVG.js.map → timeline-annotation-markers-CJK4RYZ4.js.map} +0 -0
  1153. /package/dist/{timeline-annotation-selection-KHXNCEJP.js.map → timeline-annotation-selection-67GF5H26.js.map} +0 -0
  1154. /package/dist/{timeline-annotations-dialog-Y4XD3N7B.js.map → timeline-annotations-dialog-ONJPQDJQ.js.map} +0 -0
@@ -1,4157 +0,0 @@
1
- "use client";
2
- import {
3
- useThemeType
4
- } from "./chunk-B27E3V37.js";
5
- import {
6
- useEntranceAnimation,
7
- useEntranceAnimationLive
8
- } from "./chunk-EAG6A27Q.js";
9
- import {
10
- GENIE_PREPARING_PHRASES,
11
- GENIE_WAITING_PHRASES,
12
- applyPatchPresentation,
13
- askPresentation,
14
- createToolRegistry,
15
- createTurnSummaryContext,
16
- execPresentation,
17
- formatElapsed,
18
- genericToolIconKind,
19
- machinePresentation,
20
- parseDisclosedTools,
21
- parseSearchHits,
22
- pathBasename,
23
- pathDirname,
24
- plainToolRow,
25
- presentedToolKind,
26
- presentsToolOutputPreview,
27
- resolveTurnSummaryFacets,
28
- runOnPresentation,
29
- selectTurnSummaryFacets,
30
- toolRowPresentation,
31
- toolSearchPreview,
32
- toolSearchQuery,
33
- truncatePreview,
34
- turnSummaryFallbackLabel,
35
- webSearchPresentation,
36
- writeStdinPresentation
37
- } from "./chunk-IZXHMZQ6.js";
38
- import {
39
- reviewFacts
40
- } from "./chunk-TZIACM2P.js";
41
- import {
42
- approvalsFromRequiresAction
43
- } from "./chunk-VXORMNU4.js";
44
- import {
45
- learningRefusalBody,
46
- learningRefusalPlace,
47
- learningRefusalPlaceLabel,
48
- learningRefusalTitle
49
- } from "./chunk-4YCA2Y73.js";
50
- import {
51
- invokedToolCall
52
- } from "./chunk-XXSOHN35.js";
53
- import {
54
- workerRowTitleParts
55
- } from "./chunk-D4GJ52OS.js";
56
- import {
57
- CopyButton,
58
- DecisionActions,
59
- DecisionButton,
60
- DecisionMark,
61
- LazyPart,
62
- MOTION_INSPECT_SCALE,
63
- Markdown,
64
- decisionCardClass,
65
- decisionCardPad
66
- } from "./chunk-VIEFJ2DM.js";
67
- import {
68
- ActivityDisclosure,
69
- BodyNote,
70
- CompactActivityContext,
71
- MediaEmpty,
72
- MediaSkeleton,
73
- PayloadBlock,
74
- ScreenshotFigure,
75
- SecretRefText,
76
- TermBlock,
77
- Thumbnail,
78
- ToolCallTruncationProvider,
79
- ToolOutputPreviewProvider,
80
- useForcedDefaultOpen,
81
- useTimelineSearchReveal
82
- } from "./chunk-PW4IMTYR.js";
83
- import {
84
- useToolDetails
85
- } from "./chunk-RZLBICR5.js";
86
- import {
87
- LoadFailureNotice,
88
- isChunkLoadError
89
- } from "./chunk-6H4SJBPE.js";
90
- import {
91
- redactDeep,
92
- redactToolCall,
93
- signedValuesDeep
94
- } from "./chunk-YM45PLD6.js";
95
- import {
96
- PatchApplyCommand,
97
- useRetainedImageObjectUrl
98
- } from "./chunk-2XNG2KNT.js";
99
- import {
100
- isPatchFilename,
101
- isRetainedImageContentType,
102
- paymentPageOf
103
- } from "./chunk-3SOIESJM.js";
104
- import {
105
- generatedImageReceipt,
106
- mediaPreviewFact,
107
- parseToolArgs,
108
- retainedScreenshotMetadata,
109
- retainedToolResultImages,
110
- screenshotDataUrl,
111
- unwrapMcpOutput
112
- } from "./chunk-4NQHXYMW.js";
113
- import {
114
- mcpToolLeaf,
115
- toolDisplayName
116
- } from "./chunk-VDPUG6LH.js";
117
- import {
118
- useOpenGeniLinkResolver
119
- } from "./chunk-NPNX7LTL.js";
120
- import {
121
- ShimmerText
122
- } from "./chunk-UI4HI5QK.js";
123
- import {
124
- formatBytes,
125
- truncate,
126
- tryParseJson
127
- } from "./chunk-5MOJZORA.js";
128
- import {
129
- loadPierreDiffs,
130
- pierreDiffsRevision,
131
- subscribePierreDiffs
132
- } from "./chunk-YSRBFJMQ.js";
133
- import {
134
- cn
135
- } from "./chunk-TXS65BB2.js";
136
- import {
137
- useOpenGeniText
138
- } from "./chunk-TNUSPXPW.js";
139
-
140
- // src/components/tool-action-review.tsx
141
- import {
142
- ArrowLeftIcon,
143
- CheckIcon,
144
- ChevronRightIcon,
145
- CircleAlertIcon,
146
- CircleSlashIcon,
147
- LoaderCircleIcon,
148
- ShieldCheckIcon
149
- } from "lucide-react";
150
- import { useEffect, useId, useRef, useState } from "react";
151
- import { Fragment, jsx, jsxs } from "react/jsx-runtime";
152
- var statusText = (t) => ({
153
- pending: t("toolActionReview.approvalNeeded"),
154
- approved: t("toolActionReview.approved"),
155
- executing: t("toolActionReview.approvedRunning"),
156
- completed: t("toolActionReview.approvedDone"),
157
- partial: t("toolActionReview.partlyDone"),
158
- unknown: t("toolActionReview.outcomeUnknown"),
159
- rejected: t("toolActionReview.declined"),
160
- cancelled: t("toolActionReview.cancelled"),
161
- expired: t("toolActionReview.expired"),
162
- revoked: t("toolActionReview.accessUnavailable"),
163
- blocked: t("toolActionReview.blocked"),
164
- stale: t("toolActionReview.noLongerValid"),
165
- failed: t("toolActionReview.failed"),
166
- unavailable: t("toolActionReview.detailsUnavailable")
167
- });
168
- var statusDetail = (t) => ({
169
- unknown: t("toolActionReview.itMayHaveRunCheck"),
170
- rejected: t("toolActionReview.thisActionDidNotRun"),
171
- cancelled: t("toolActionReview.thisActionDidNotRun"),
172
- expired: t("toolActionReview.thisActionDidNotRun2"),
173
- revoked: t("toolActionReview.thisActionDidNotRun3"),
174
- stale: t("toolActionReview.theToolOrAccountChanged"),
175
- partial: t("toolActionReview.someOfItRanCheck"),
176
- failed: t("toolActionReview.theActionRanButReturned")
177
- });
178
- var statusTone = {
179
- pending: "waiting",
180
- approved: "ok",
181
- executing: "ok",
182
- completed: "ok",
183
- partial: "failed",
184
- unknown: "failed",
185
- rejected: "muted",
186
- cancelled: "muted",
187
- expired: "muted",
188
- revoked: "muted",
189
- blocked: "muted",
190
- stale: "muted",
191
- failed: "failed",
192
- unavailable: "muted"
193
- };
194
- var headerPart = "before:inline-block before:w-3 before:text-center before:text-og-fg-muted before:content-['\xB7'_/_'']";
195
- var toneText = {
196
- waiting: "text-og-fg-muted",
197
- ok: "text-og-fg-muted",
198
- failed: "text-og-status-failed",
199
- muted: "text-og-fg-muted"
200
- };
201
- var UNRECOVERABLE_TEXT = (t) => t("toolActionReview.theDetailsOfThisOlder");
202
- function StatusIcon({ status, busy }) {
203
- const className = "size-4";
204
- if (busy || status === "executing" || status === "approved")
205
- return /* @__PURE__ */ jsx(LoaderCircleIcon, { "aria-hidden": "true", className: cn(className, "animate-spin") });
206
- if (status === "pending") return /* @__PURE__ */ jsx(ShieldCheckIcon, { "aria-hidden": "true", className });
207
- if (status === "completed") return /* @__PURE__ */ jsx(CheckIcon, { "aria-hidden": "true", className });
208
- if (statusTone[status] === "failed")
209
- return /* @__PURE__ */ jsx(CircleAlertIcon, { "aria-hidden": "true", className });
210
- return /* @__PURE__ */ jsx(CircleSlashIcon, { "aria-hidden": "true", className });
211
- }
212
- function ToolReviewFrame({
213
- tone,
214
- icon,
215
- eyebrow,
216
- title,
217
- titleId,
218
- subtitle,
219
- children,
220
- footer,
221
- bare = false,
222
- ...rest
223
- }) {
224
- const waiting = tone === "waiting";
225
- return /* @__PURE__ */ jsxs(
226
- "article",
227
- {
228
- "aria-labelledby": titleId,
229
- ...rest,
230
- className: cn(
231
- "min-w-0 text-og-fg",
232
- !bare && (waiting ? decisionCardClass : "og-root @container/decision overflow-hidden rounded-og-lg border border-og-border bg-og-surface-1"),
233
- rest.className
234
- ),
235
- children: [
236
- /* @__PURE__ */ jsxs(
237
- "header",
238
- {
239
- className: cn(
240
- "flex min-w-0 items-start gap-3",
241
- bare ? "pb-1" : cn(decisionCardPad, "pt-4", !children && !footer && "pb-4")
242
- ),
243
- children: [
244
- /* @__PURE__ */ jsx(DecisionMark, { tone: tone === "failed" ? "danger" : "neutral", children: icon }),
245
- /* @__PURE__ */ jsxs("div", { className: "min-w-0 flex-1 pt-px", children: [
246
- /* @__PURE__ */ jsx(
247
- "h3",
248
- {
249
- tabIndex: -1,
250
- id: titleId,
251
- className: "m-0 break-words text-og-md font-semibold leading-snug text-balance text-og-fg outline-hidden [overflow-wrap:anywhere]",
252
- children: title
253
- }
254
- ),
255
- /* @__PURE__ */ jsx("p", { className: "m-0 mt-0.5 min-w-0 overflow-hidden text-og-xs leading-5 text-og-fg-muted", children: /* @__PURE__ */ jsxs("span", { className: "-ml-3 flex min-w-0 flex-wrap items-center", children: [
256
- /* @__PURE__ */ jsx("span", { className: headerPart, children: /* @__PURE__ */ jsxs(
257
- "span",
258
- {
259
- className: cn("inline-flex items-center gap-1.5", toneText[tone]),
260
- role: "status",
261
- "aria-live": "polite",
262
- children: [
263
- waiting ? /* @__PURE__ */ jsx(
264
- "span",
265
- {
266
- "aria-hidden": "true",
267
- className: "size-1.5 shrink-0 rounded-full bg-og-status-waiting"
268
- }
269
- ) : null,
270
- eyebrow
271
- ]
272
- }
273
- ) }),
274
- subtitle ? /* @__PURE__ */ jsx("span", { className: cn(headerPart, "min-w-0 break-words [overflow-wrap:anywhere]"), children: subtitle }) : null
275
- ] }) })
276
- ] })
277
- ]
278
- }
279
- ),
280
- children ? /* @__PURE__ */ jsx(
281
- "div",
282
- {
283
- className: cn("min-w-0", bare ? "pt-2" : cn(decisionCardPad, "pt-3", !footer && "pb-4")),
284
- children
285
- }
286
- ) : null,
287
- footer ? /* @__PURE__ */ jsx("footer", { className: cn("min-w-0", bare ? "pt-3" : cn(decisionCardPad, "pb-4 pt-4")), children: footer }) : null
288
- ]
289
- }
290
- );
291
- }
292
- var linkButton = "focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-og-accent/40 inline-flex min-h-8 items-center gap-1 rounded-og-sm text-left text-og-sm text-og-fg underline decoration-og-border-strong underline-offset-4 hover:decoration-current [@media(pointer:coarse)]:min-h-11";
293
- function ReviewFacts({
294
- review,
295
- onViewDetails,
296
- showStatusDetail
297
- }) {
298
- const t = useOpenGeniText();
299
- const canOpen = Boolean(onViewDetails && review.detailsAvailable);
300
- const { selection, shown, hiddenFields, effects } = reviewFacts(review);
301
- const note = (showStatusDetail ? review.status === "blocked" ? t("toolActionReview.reasonItDidNotRun", {
302
- reason: review.reason || t("toolActionReview.yourPermissionSettingsBlockThis")
303
- }) : statusDetail(t)[review.status] : void 0) ?? review.consequence;
304
- const samples = review.samples ?? [];
305
- const count = review.selectionCount ?? 0;
306
- const noun = review.selectionKind === "threads" ? count === 1 ? "conversation" : "conversations" : count === 1 ? "message" : "messages";
307
- const hasContent = note || effects.length || selection || shown.length || hiddenFields > 0 || samples.length;
308
- if (!hasContent) return null;
309
- return /* @__PURE__ */ jsxs("div", { className: "flex min-w-0 flex-col gap-3 text-og-sm", children: [
310
- note ? /* @__PURE__ */ jsx("p", { className: "m-0 leading-relaxed text-og-fg-muted", children: note }) : null,
311
- effects.length > 0 ? /* @__PURE__ */ jsx("ul", { className: "m-0 list-none space-y-1 p-0", "aria-label": t("toolActionReview.alsoChanges"), children: effects.map((effect) => /* @__PURE__ */ jsxs("li", { className: "flex items-start gap-2 text-og-fg", children: [
312
- /* @__PURE__ */ jsx(
313
- "span",
314
- {
315
- "aria-hidden": "true",
316
- className: "mt-[0.55em] size-1 shrink-0 rounded-full bg-og-fg-muted"
317
- }
318
- ),
319
- /* @__PURE__ */ jsx("span", { className: "min-w-0 break-words", children: effect })
320
- ] }, effect)) }) : null,
321
- selection ? /* @__PURE__ */ jsxs("div", { className: "min-w-0", children: [
322
- samples.length > 0 ? /* @__PURE__ */ jsxs(Fragment, { children: [
323
- /* @__PURE__ */ jsx("p", { className: "m-0 mb-1 text-og-xs text-og-fg-muted", children: t("toolActionReview.includes") }),
324
- /* @__PURE__ */ jsxs("ul", { className: "m-0 list-none divide-y divide-og-border rounded-og-md border border-og-border bg-og-surface-1 p-0", children: [
325
- samples.map((sample) => /* @__PURE__ */ jsxs("li", { className: "min-w-0 px-3 py-2", children: [
326
- /* @__PURE__ */ jsx("p", { className: "m-0 truncate text-og-sm text-og-fg", children: sample.title }),
327
- sample.subtitle ? /* @__PURE__ */ jsx("p", { className: "m-0 mt-0.5 truncate text-og-xs text-og-fg-muted", children: sample.subtitle }) : null
328
- ] }, sample.id)),
329
- count > samples.length ? /* @__PURE__ */ jsxs("li", { className: "px-3 py-2 text-og-xs text-og-fg-muted", children: [
330
- t("toolActionReview.and"),
331
- " ",
332
- (count - samples.length).toLocaleString(t.locale),
333
- " ",
334
- t("toolActionReview.more")
335
- ] }) : null
336
- ] })
337
- ] }) : null,
338
- canOpen && count > 0 ? /* @__PURE__ */ jsxs(
339
- "button",
340
- {
341
- type: "button",
342
- className: cn(linkButton, samples.length > 0 && "mt-1"),
343
- "data-review-path": selection.path,
344
- onClick: () => onViewDetails(selection.path),
345
- children: [
346
- count === 1 ? t("toolActionReview.viewTheNoun", { noun }) : t("toolActionReview.viewAllLocalestringNoun", {
347
- localeString: count.toLocaleString(t.locale),
348
- noun
349
- }),
350
- /* @__PURE__ */ jsx(ChevronRightIcon, { className: "size-3.5 shrink-0", "aria-hidden": "true" })
351
- ]
352
- }
353
- ) : null
354
- ] }) : null,
355
- shown.length > 0 ? /* @__PURE__ */ jsx("dl", { className: "m-0 min-w-0 space-y-2.5 rounded-og-md bg-og-fg/[0.035] px-3.5 py-3", children: shown.map((field) => /* @__PURE__ */ jsxs(
356
- "div",
357
- {
358
- className: "grid min-w-0 gap-x-4 gap-y-0.5 @[30rem]/decision:grid-cols-[minmax(0,7.5rem)_minmax(0,1fr)]",
359
- children: [
360
- /* @__PURE__ */ jsx("dt", { className: "m-0 break-words text-og-xs text-og-fg-muted @[30rem]/decision:pt-px @[30rem]/decision:text-og-sm", children: field.label }),
361
- /* @__PURE__ */ jsx("dd", { className: "m-0 min-w-0 whitespace-pre-wrap break-words text-og-fg [overflow-wrap:anywhere]", children: field.protected ? /* @__PURE__ */ jsx("span", { className: "text-og-fg-muted", children: t("toolActionReview.hidden") }) : field.truncated && canOpen ? /* @__PURE__ */ jsxs(
362
- "button",
363
- {
364
- type: "button",
365
- "data-review-path": field.path,
366
- "aria-label": t("toolActionReview.viewLabelPreview", {
367
- label: field.label,
368
- preview: field.preview
369
- }),
370
- onClick: () => onViewDetails(field.path),
371
- className: cn(linkButton, "max-w-full"),
372
- children: [
373
- /* @__PURE__ */ jsx("span", { className: "line-clamp-4 min-w-0 break-words [overflow-wrap:anywhere]", children: /* @__PURE__ */ jsx(SecretRefText, { text: field.preview, linkable: false }) }),
374
- /* @__PURE__ */ jsx(ChevronRightIcon, { className: "size-3.5 shrink-0", "aria-hidden": "true" })
375
- ]
376
- }
377
- ) : /* @__PURE__ */ jsx(SecretRefText, { text: field.preview }) })
378
- ]
379
- },
380
- field.path
381
- )) }) : null,
382
- hiddenFields > 0 ? /* @__PURE__ */ jsxs("p", { className: "m-0 text-og-xs text-og-fg-muted", children: [
383
- hiddenFields === 1 ? t("toolActionReview.n1MoreValue") : t("toolActionReview.hiddenfieldsMoreValues", { hiddenFields }),
384
- " ",
385
- t("toolActionReview.inDetails")
386
- ] }) : null
387
- ] });
388
- }
389
- function DeclineButton({
390
- busy,
391
- submitting,
392
- label,
393
- onClick
394
- }) {
395
- const t = useOpenGeniText();
396
- return /* @__PURE__ */ jsx(DecisionButton, { kind: "secondary", disabled: busy, busy: submitting, onClick, children: submitting ? t("toolActionReview.declining") : label ?? t("toolActionReview.decline") });
397
- }
398
- function ToolActionReviewCard({
399
- review,
400
- onApprove,
401
- onReject,
402
- submitting,
403
- disabled,
404
- onViewDetails,
405
- pendingLabel,
406
- rejectLabel,
407
- bare
408
- }) {
409
- const t = useOpenGeniText();
410
- const titleId = useId();
411
- const canApprove = review.availableActions.includes("approve") && !!onApprove;
412
- const canReject = review.availableActions.includes("reject") && !!onReject;
413
- const actionable = review.status === "pending" && (canApprove || canReject);
414
- const busy = Boolean(disabled || submitting);
415
- const tone = statusTone[review.status];
416
- const eyebrow = submitting ? submitting === "approve" ? t("toolActionReview.approving") : t("toolActionReview.declining") : review.status === "pending" ? pendingLabel ?? statusText(t).pending : statusText(t)[review.status];
417
- const detailsLink = review.detailsAvailable && onViewDetails ? /* @__PURE__ */ jsx(
418
- "button",
419
- {
420
- type: "button",
421
- className: "inline-flex min-h-8 items-center rounded-og-sm text-og-sm text-og-fg-muted underline decoration-og-border-strong underline-offset-4 hover:text-og-fg hover:decoration-current [@media(pointer:coarse)]:min-h-11 focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-og-accent/40",
422
- "data-review-path": "",
423
- onClick: () => onViewDetails(""),
424
- children: t("toolActionReview.details")
425
- }
426
- ) : null;
427
- const reason = review.reason.trim();
428
- return /* @__PURE__ */ jsxs(
429
- ToolReviewFrame,
430
- {
431
- tone,
432
- icon: /* @__PURE__ */ jsx(StatusIcon, { status: review.status, busy: Boolean(submitting) }),
433
- eyebrow,
434
- title: review.title,
435
- titleId,
436
- subtitle: review.accountLabel,
437
- bare,
438
- "aria-busy": Boolean(submitting),
439
- "data-og-tool-review": "",
440
- "data-review-status": review.status,
441
- footer: actionable ? /* @__PURE__ */ jsxs(
442
- DecisionActions,
443
- {
444
- lead: detailsLink || reason ? /* @__PURE__ */ jsxs(Fragment, { children: [
445
- detailsLink,
446
- reason ? /* @__PURE__ */ jsx("span", { className: "min-w-0 text-og-xs leading-relaxed text-og-fg-subtle", children: reason }) : null
447
- ] }) : null,
448
- children: [
449
- canReject ? /* @__PURE__ */ jsx(
450
- DeclineButton,
451
- {
452
- busy,
453
- submitting: submitting === "reject",
454
- label: rejectLabel,
455
- onClick: onReject
456
- }
457
- ) : null,
458
- canApprove ? /* @__PURE__ */ jsx(
459
- DecisionButton,
460
- {
461
- kind: "primary",
462
- disabled: busy,
463
- busy: submitting === "approve",
464
- onClick: onApprove,
465
- children: submitting === "approve" ? t("toolActionReview.approving") : review.approveLabel
466
- }
467
- ) : null
468
- ]
469
- }
470
- ) : void 0,
471
- children: [
472
- actionable && !canApprove ? /* @__PURE__ */ jsx("p", { className: "m-0 mb-3 text-og-sm leading-relaxed text-og-fg", children: UNRECOVERABLE_TEXT(t) }) : null,
473
- /* @__PURE__ */ jsx(
474
- ReviewFacts,
475
- {
476
- review,
477
- onViewDetails,
478
- showStatusDetail: review.status !== "pending"
479
- }
480
- ),
481
- !actionable && detailsLink ? /* @__PURE__ */ jsx("div", { className: "mt-2", children: detailsLink }) : null
482
- ]
483
- }
484
- );
485
- }
486
- function ToolActionReviewDetails({
487
- review,
488
- path: initialPath = "",
489
- load,
490
- onBack,
491
- manageFocus = true
492
- }) {
493
- const t = useOpenGeniText();
494
- const [path, setPath] = useState(initialPath);
495
- const [trail, setTrail] = useState([]);
496
- const [offset, setOffset] = useState(0);
497
- const [page, setPage] = useState(null);
498
- const [error, setError] = useState(false);
499
- const [retry, setRetry] = useState(0);
500
- const heading = useRef(null);
501
- const focusedOnce = useRef(false);
502
- useEffect(() => {
503
- if (page && manageFocus && !focusedOnce.current) {
504
- focusedOnce.current = true;
505
- heading.current?.focus({ preventScroll: true });
506
- heading.current?.scrollIntoView({ block: "start" });
507
- }
508
- }, [page, manageFocus]);
509
- useEffect(() => {
510
- let active = true;
511
- setPage(null);
512
- setError(false);
513
- void load(review, path, offset).then(
514
- (value) => {
515
- if (!active) return;
516
- if (value.actionDigest !== review.actionDigest || value.id !== review.id || value.path !== path) {
517
- setError(true);
518
- return;
519
- }
520
- setPage(value);
521
- },
522
- () => {
523
- if (active) setError(true);
524
- }
525
- );
526
- return () => {
527
- active = false;
528
- };
529
- }, [review, path, offset, load, retry]);
530
- const open = (next, label) => {
531
- setTrail((value) => [...value, { path, label }]);
532
- setPath(next);
533
- setOffset(0);
534
- };
535
- const up = () => {
536
- const previous = trail.at(-1);
537
- setTrail((value) => value.slice(0, -1));
538
- setPath(previous?.path ?? initialPath);
539
- setOffset(0);
540
- };
541
- return /* @__PURE__ */ jsxs(
542
- "section",
543
- {
544
- className: "og-root mx-auto w-full max-w-3xl px-4 py-5 text-og-fg sm:px-6",
545
- "data-og-review-details": "",
546
- children: [
547
- /* @__PURE__ */ jsxs(
548
- "button",
549
- {
550
- type: "button",
551
- onClick: onBack,
552
- className: "mb-4 inline-flex min-h-11 items-center gap-2 rounded-og-md pr-2 text-og-sm text-og-fg-muted hover:text-og-fg focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-og-accent/40",
553
- children: [
554
- /* @__PURE__ */ jsx(ArrowLeftIcon, { className: "size-4", "aria-hidden": "true" }),
555
- t("toolActionReview.backToReview")
556
- ]
557
- }
558
- ),
559
- /* @__PURE__ */ jsx(
560
- "h2",
561
- {
562
- ref: heading,
563
- tabIndex: -1,
564
- className: "m-0 break-words text-og-md font-semibold outline-hidden [overflow-wrap:anywhere]",
565
- children: review.title
566
- }
567
- ),
568
- review.accountLabel ? /* @__PURE__ */ jsx("p", { className: "m-0 mt-1 text-og-sm text-og-fg-muted", children: review.accountLabel }) : null,
569
- /* @__PURE__ */ jsx("p", { className: "m-0 mt-2 text-og-xs text-og-fg-subtle", children: t("toolActionReview.theExactValuesSavedFor") }),
570
- trail.length > 0 ? /* @__PURE__ */ jsxs(
571
- "button",
572
- {
573
- type: "button",
574
- className: "mt-3 inline-flex min-h-11 items-center gap-1.5 text-og-sm text-og-fg-muted underline underline-offset-4 hover:text-og-fg focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-og-accent/40",
575
- onClick: up,
576
- children: [
577
- /* @__PURE__ */ jsx(ArrowLeftIcon, { className: "size-3.5", "aria-hidden": "true" }),
578
- t("toolActionReview.backTo"),
579
- " ",
580
- trail.at(-1)?.label ?? t("toolActionReview.allValues")
581
- ]
582
- }
583
- ) : null,
584
- error ? /* @__PURE__ */ jsxs("div", { role: "alert", className: "mt-4 py-4 text-og-sm", children: [
585
- t("toolActionReview.couldnTLoadTheseDetails"),
586
- " ",
587
- /* @__PURE__ */ jsx(
588
- "button",
589
- {
590
- type: "button",
591
- onClick: () => setRetry((value) => value + 1),
592
- className: "min-h-11 underline underline-offset-4 focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-og-accent/40",
593
- children: t("toolActionReview.tryAgain")
594
- }
595
- )
596
- ] }) : !page ? /* @__PURE__ */ jsx("p", { role: "status", className: "mt-4 py-4 text-og-sm text-og-fg-muted", children: t("toolActionReview.loadingDetails") }) : /* @__PURE__ */ jsxs(Fragment, { children: [
597
- /* @__PURE__ */ jsx("dl", { className: "m-0 mt-4 divide-y divide-og-border border-y border-og-border", children: page.items.map((item) => /* @__PURE__ */ jsxs("div", { className: "py-3", children: [
598
- /* @__PURE__ */ jsx("dt", { className: "m-0 text-og-xs text-og-fg-muted", children: item.label }),
599
- /* @__PURE__ */ jsxs("dd", { className: "m-0 mt-1 whitespace-pre-wrap break-words text-og-sm leading-relaxed [overflow-wrap:anywhere]", children: [
600
- item.truncated && item.path ? /* @__PURE__ */ jsxs(
601
- "button",
602
- {
603
- type: "button",
604
- "aria-label": t("toolActionReview.openLabel", { label: item.label }),
605
- className: cn(linkButton, "max-w-full"),
606
- onClick: () => open(item.path, item.label),
607
- children: [
608
- /* @__PURE__ */ jsx("span", { className: "min-w-0 break-words focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-og-accent/40", children: /* @__PURE__ */ jsx(SecretRefText, { text: item.value, linkable: false }) }),
609
- /* @__PURE__ */ jsx(ChevronRightIcon, { className: "size-3.5 shrink-0", "aria-hidden": "true" })
610
- ]
611
- }
612
- ) : /* @__PURE__ */ jsx(SecretRefText, { text: item.value }),
613
- item.detail ? /* @__PURE__ */ jsx("span", { className: "mt-0.5 block text-og-xs text-og-fg-muted", children: /* @__PURE__ */ jsx(SecretRefText, { text: item.detail, linkable: false }) }) : null
614
- ] })
615
- ] }, `${page.path}:${item.label}`)) }),
616
- page.total > page.items.length || offset > 0 ? /* @__PURE__ */ jsxs(
617
- "nav",
618
- {
619
- "aria-label": t("toolActionReview.detailPages"),
620
- className: "mt-4 flex flex-wrap items-center justify-between gap-3 text-og-sm",
621
- children: [
622
- /* @__PURE__ */ jsx(
623
- "button",
624
- {
625
- type: "button",
626
- disabled: offset === 0,
627
- onClick: () => setOffset(Math.max(0, offset - 25)),
628
- className: "min-h-11 rounded-og-md border border-og-border px-3 hover:bg-og-hover disabled:opacity-40 focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-og-accent/40",
629
- children: t("toolActionReview.previous")
630
- }
631
- ),
632
- /* @__PURE__ */ jsx("span", { className: "text-og-fg-muted tabular-nums", children: page.total === 0 ? t("toolActionReview.noItems") : `${(offset + 1).toLocaleString(t.locale)}\u2013${(offset + page.items.length).toLocaleString(t.locale)} of ${page.total.toLocaleString(t.locale)}` }),
633
- /* @__PURE__ */ jsx(
634
- "button",
635
- {
636
- type: "button",
637
- disabled: page.nextOffset === null,
638
- onClick: () => setOffset(page.nextOffset ?? offset),
639
- className: "min-h-11 rounded-og-md border border-og-border px-3 hover:bg-og-hover disabled:opacity-40 focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-og-accent/40",
640
- children: t("toolActionReview.next")
641
- }
642
- )
643
- ]
644
- }
645
- ) : null
646
- ] })
647
- ]
648
- }
649
- );
650
- }
651
-
652
- // src/timeline/retained-loaders.ts
653
- function createWorkspaceRetainedArtifactLoader(client, workspaceId) {
654
- return async (artifact, signal, options) => {
655
- if (artifact.kind === "file" && options?.prefer !== "url") {
656
- const download2 = await client.downloadRetainedArtifact(workspaceId, artifact, { signal });
657
- return download2.bytes;
658
- }
659
- const download = await client.createRetainedArtifactDownloadUrl(workspaceId, artifact, {
660
- signal
661
- });
662
- return { url: download.url, expiresAt: download.expiresAt };
663
- };
664
- }
665
- function createSessionRetainedScreenshotLoader(client, workspaceId, sessionId) {
666
- return async (artifact, signal) => {
667
- const download = await client.downloadRetainedScreenshot(
668
- workspaceId,
669
- sessionId,
670
- artifact.artifactId,
671
- { signal }
672
- );
673
- if (!download.metadata.available || !download.bytes) return null;
674
- if (download.metadata.artifactId !== artifact.artifactId || download.metadata.kind !== artifact.kind || download.metadata.contentType !== artifact.contentType || download.metadata.originalBytes !== artifact.originalBytes || download.metadata.sha256 !== artifact.sha256 || download.metadata.dimensions?.width !== artifact.dimensions?.width || download.metadata.dimensions?.height !== artifact.dimensions?.height) {
675
- throw new Error("Retained screenshot receipt verification failed");
676
- }
677
- return download.bytes;
678
- };
679
- }
680
- function createWorkspaceRetainedVideoLoader(client, workspaceId) {
681
- return async (artifactId, signal) => await client.createVideoArtifactPlaybackSource(workspaceId, artifactId, { signal });
682
- }
683
-
684
- // src/components/tool-review-history.tsx
685
- import { createContext, useContext, useEffect as useEffect2, useMemo, useState as useState2 } from "react";
686
- import { jsx as jsx2 } from "react/jsx-runtime";
687
- var History = createContext(null);
688
- function ToolReviewHistoryProvider({
689
- events,
690
- load,
691
- onViewDetails,
692
- children
693
- }) {
694
- const value = useMemo(
695
- () => ({
696
- approvalIds: new Set(
697
- events.flatMap(
698
- (event) => event.type === "session.requiresAction" ? approvalsFromRequiresAction(event.payload).map((approval) => approval.id) : []
699
- )
700
- ),
701
- revision: [...events].reverse().find(
702
- (event) => event.type === "session.requiresAction" || event.type === "agent.toolCall.output" || event.type.startsWith("turn.") || event.type === "user.approvalDecision" || event.type.startsWith("session.control.")
703
- )?.sequence ?? 0,
704
- load,
705
- onViewDetails
706
- }),
707
- [events, load, onViewDetails]
708
- );
709
- return /* @__PURE__ */ jsx2(History.Provider, { value, children });
710
- }
711
- function useHasToolReview(approvalId) {
712
- const history = useContext(History);
713
- return Boolean(approvalId && history?.approvalIds.has(approvalId));
714
- }
715
- function useRecordedToolReview(approvalId) {
716
- const history = useContext(History);
717
- const [review, setReview] = useState2(null);
718
- const load = history?.load;
719
- const revision = history?.revision;
720
- useEffect2(() => {
721
- if (!load || !approvalId) return;
722
- let active = true;
723
- void load(approvalId).then(
724
- (value) => {
725
- if (active && value.id === approvalId) setReview(value);
726
- },
727
- () => void 0
728
- );
729
- return () => {
730
- active = false;
731
- };
732
- }, [approvalId, load, revision]);
733
- const onViewDetails = history?.onViewDetails;
734
- return {
735
- review: review && review.id === approvalId ? review : null,
736
- onViewDetails: review && onViewDetails ? (path) => onViewDetails(review, path) : void 0
737
- };
738
- }
739
-
740
- // src/timeline/knowledge-receipt.tsx
741
- import { createContext as createContext2, useContext as useContext2, useState as useState3 } from "react";
742
- import { BrainCircuitIcon } from "lucide-react";
743
- import { jsx as jsx3, jsxs as jsxs2 } from "react/jsx-runtime";
744
- var KnowledgeActions = createContext2({});
745
- function KnowledgeActivityProvider({
746
- children,
747
- ...actions
748
- }) {
749
- return /* @__PURE__ */ jsx3(KnowledgeActions.Provider, { value: actions, children });
750
- }
751
- function KnowledgeReceiptRow(props) {
752
- const t = useOpenGeniText();
753
- const actions = useContext2(KnowledgeActions);
754
- const [retrying, setRetrying] = useState3(false);
755
- const [retrySent, setRetrySent] = useState3(false);
756
- const [error, setError] = useState3(null);
757
- const label = props.outcome === "pending" ? t("timeline.knowledgeReceipt.knowledgeSavedForReview") : props.outcome === "failed" ? t("timeline.knowledgeReceipt.sourcePreparationFailed") : props.outcome === "rejected" ? t("timeline.knowledgeReceipt.sourceRemainsRejected") : props.outcome === "archived" ? t("timeline.knowledgeReceipt.knowledgeArchived") : props.source ? t("timeline.knowledgeReceipt.sourceSavedToKnowledge") : t("timeline.knowledgeReceipt.savedToKnowledge");
758
- const actionClass = "rounded-og-sm px-1 py-0.5 text-og-sm text-og-fg-muted hover:text-og-fg focus-visible:outline-2 focus-visible:outline-og-accent disabled:opacity-50";
759
- return /* @__PURE__ */ jsxs2(
760
- ActivityDisclosure,
761
- {
762
- icon: /* @__PURE__ */ jsx3(BrainCircuitIcon, { className: "size-3.5" }),
763
- iconTone: "muted",
764
- title: label,
765
- preview: props.title,
766
- children: [
767
- props.outcome === "pending" ? /* @__PURE__ */ jsx3(BodyNote, { children: t("timeline.knowledgeReceipt.savedInNeedsReviewThis") }) : null,
768
- props.outcome === "failed" ? /* @__PURE__ */ jsx3(BodyNote, { children: t("timeline.knowledgeReceipt.theOriginalFileRemainsAttached") }) : null,
769
- props.outcome === "rejected" ? /* @__PURE__ */ jsx3(BodyNote, { children: t("timeline.knowledgeReceipt.processingTheFileAgainLeaves") }) : null,
770
- props.entryId && actions.onInspect ? /* @__PURE__ */ jsx3(
771
- "button",
772
- {
773
- className: actionClass,
774
- type: "button",
775
- onClick: () => actions.onInspect?.(props.entryId),
776
- children: props.outcome === "pending" ? t("timeline.knowledgeReceipt.reviewInKnowledge") : t("timeline.knowledgeReceipt.viewInKnowledge")
777
- }
778
- ) : null,
779
- props.outcome === "failed" && props.fileId && actions.onRetryFile ? /* @__PURE__ */ jsx3(
780
- "button",
781
- {
782
- className: actionClass,
783
- type: "button",
784
- disabled: retrying || retrySent || actions.retryDisabled,
785
- onClick: () => {
786
- setRetrying(true);
787
- setError(null);
788
- void actions.onRetryFile(props.fileId).then((sent) => {
789
- if (sent !== false) setRetrySent(true);
790
- else setError(t("timeline.knowledgeReceipt.couldNotStartTheRetry"));
791
- }).catch(() => setError(t("timeline.knowledgeReceipt.couldNotStartTheRetry2"))).finally(() => setRetrying(false));
792
- },
793
- children: retrying ? t("timeline.knowledgeReceipt.startingRetry") : retrySent ? t("timeline.knowledgeReceipt.retryRequested") : t("timeline.knowledgeReceipt.retryPreparation")
794
- }
795
- ) : null,
796
- error ? /* @__PURE__ */ jsx3("p", { role: "alert", className: "text-og-sm", children: error }) : null
797
- ]
798
- }
799
- );
800
- }
801
-
802
- // src/lib/git-patch.ts
803
- function gitFileDiffToPatch(file) {
804
- const oldPath = file.oldPath ?? file.path;
805
- const newPath = file.path;
806
- const lines = [];
807
- lines.push(`diff --git a/${oldPath} b/${newPath}`);
808
- if (file.status === "deleted") {
809
- lines.push(`--- a/${oldPath}`);
810
- lines.push(`+++ /dev/null`);
811
- } else if (file.status === "added" || file.status === "untracked") {
812
- lines.push(`--- /dev/null`);
813
- lines.push(`+++ b/${newPath}`);
814
- } else {
815
- lines.push(`--- a/${oldPath}`);
816
- lines.push(`+++ b/${newPath}`);
817
- }
818
- for (const hunk of file.hunks) {
819
- const headerIsValid = /^@@ -\d+(?:,\d+)? \+\d+(?:,\d+)? @@/.test(hunk.header ?? "");
820
- const header = headerIsValid ? hunk.header : `@@ -${hunk.oldStart},${hunk.oldLines} +${hunk.newStart},${hunk.newLines} @@`;
821
- lines.push(header);
822
- for (const line of hunk.lines) {
823
- if (line.type === "meta") continue;
824
- const prefix = line.type === "add" ? "+" : line.type === "del" ? "-" : " ";
825
- lines.push(`${prefix}${line.text}`);
826
- }
827
- }
828
- return lines.join("\n") + "\n";
829
- }
830
-
831
- // src/components/pierre-diff.tsx
832
- import {
833
- lazy,
834
- Suspense,
835
- useEffect as useEffect3,
836
- useState as useState4,
837
- useSyncExternalStore
838
- } from "react";
839
- import { jsx as jsx4 } from "react/jsx-runtime";
840
- var LazyPatchDiff = lazy(async () => {
841
- const mod = await loadPierreDiffs();
842
- return { default: mod.PatchDiff };
843
- });
844
- function PierreDiff({
845
- diff,
846
- layout = "unified",
847
- themeType,
848
- theme,
849
- disableWorkerPool,
850
- loading,
851
- fallback: fallback2,
852
- plain,
853
- overflow = "wrap",
854
- className
855
- }) {
856
- const [failed, setFailed] = useState4(false);
857
- const [ready, setReady] = useState4(false);
858
- const [forcedColors, setForcedColors] = useState4(false);
859
- useEffect3(() => {
860
- if (typeof window === "undefined" || typeof window.matchMedia !== "function") return;
861
- const query = window.matchMedia("(forced-colors: active)");
862
- const update = () => setForcedColors(query.matches);
863
- update();
864
- query.addEventListener?.("change", update);
865
- return () => query.removeEventListener?.("change", update);
866
- }, []);
867
- const loaderRevision = useSyncExternalStore(
868
- subscribePierreDiffs,
869
- pierreDiffsRevision,
870
- pierreDiffsRevision
871
- );
872
- useEffect3(() => {
873
- if (plain) return;
874
- let cancelled = false;
875
- setFailed(false);
876
- loadPierreDiffs().then(
877
- () => {
878
- if (!cancelled) setReady(true);
879
- },
880
- () => {
881
- if (!cancelled) setFailed(true);
882
- }
883
- );
884
- return () => {
885
- cancelled = true;
886
- };
887
- }, [plain, loaderRevision]);
888
- if (plain || failed || forcedColors) {
889
- return /* @__PURE__ */ jsx4(
890
- "div",
891
- {
892
- className,
893
- "data-opengeni-plain-diff": forcedColors ? "forced-colors" : "fallback",
894
- children: fallback2 ?? /* @__PURE__ */ jsx4(PlainPatch, { diff })
895
- }
896
- );
897
- }
898
- const options = {
899
- diffStyle: layout,
900
- overflow,
901
- stickyHeader: true,
902
- ...theme ? { theme } : {
903
- theme: {
904
- dark: "github-dark-high-contrast",
905
- light: "github-light-high-contrast"
906
- }
907
- },
908
- themeType: themeType ?? "dark"
909
- };
910
- const pierreVars = {
911
- "--diffs-dark-bg": "var(--og-color-bg)",
912
- "--diffs-light-bg": "var(--og-color-bg)",
913
- "--diffs-bg-buffer-override": "var(--og-color-surface-1)",
914
- "--diffs-bg-separator-override": "var(--og-color-surface-1)",
915
- // Pierre's default (fg mixed 65% into bg) falls under 4.5:1 on the lifted
916
- // graphite separator; quiet meta text keeps AA on every diff surface.
917
- "--diffs-fg-number-override": "var(--og-color-fg-subtle)",
918
- "--diffs-addition-color-override": "var(--og-color-status-idle)",
919
- "--diffs-deletion-color-override": "var(--og-color-status-failed)",
920
- "--diffs-fg-number-addition-override": "var(--og-color-status-idle)",
921
- "--diffs-fg-number-deletion-override": "var(--og-color-status-failed)",
922
- "--diffs-bg-addition-override": "color-mix(in oklab, var(--og-color-status-idle) 12%, var(--og-color-bg))",
923
- "--diffs-bg-deletion-override": "color-mix(in oklab, var(--og-color-status-failed) 12%, var(--og-color-bg))",
924
- "--diffs-bg-addition-emphasis-override": "color-mix(in oklab, var(--og-color-status-idle) 22%, var(--og-color-bg))",
925
- "--diffs-bg-deletion-emphasis-override": "color-mix(in oklab, var(--og-color-status-failed) 22%, var(--og-color-bg))",
926
- "--diffs-header-font-family": "var(--og-font-sans)",
927
- "--diffs-font-family": "var(--og-font-mono)",
928
- "--diffs-font-size": "var(--og-code-font-size)",
929
- "--diffs-line-height": "var(--og-code-line-height)"
930
- };
931
- return /* @__PURE__ */ jsx4("div", { className: cn("min-w-0", className), "data-opengeni-pierre-diff": true, style: pierreVars, children: /* @__PURE__ */ jsx4(Suspense, { fallback: loading ?? /* @__PURE__ */ jsx4(DiffSkeleton, {}), children: ready ? diff.map((file) => /* @__PURE__ */ jsx4("div", { className: "mb-2", children: /* @__PURE__ */ jsx4(
932
- LazyPatchDiff,
933
- {
934
- patch: gitFileDiffToPatch(file),
935
- options,
936
- ...disableWorkerPool !== void 0 ? { disableWorkerPool } : {}
937
- }
938
- ) }, file.path)) : loading ?? /* @__PURE__ */ jsx4(DiffSkeleton, {}) }) });
939
- }
940
- function DiffSkeleton() {
941
- const t = useOpenGeniText();
942
- return /* @__PURE__ */ jsx4("div", { className: "p-3 text-og-sm text-og-fg-subtle", children: t("pierreDiff.loadingDiff") });
943
- }
944
- function PlainPatch({ diff }) {
945
- const t = useOpenGeniText();
946
- if (diff.length === 0) {
947
- return /* @__PURE__ */ jsx4("div", { className: "p-3 text-og-sm text-og-fg-subtle", children: t("pierreDiff.noChanges") });
948
- }
949
- return /* @__PURE__ */ jsx4("div", { className: "min-w-0", children: diff.map((file) => /* @__PURE__ */ jsx4(
950
- "pre",
951
- {
952
- "aria-label": t("pierreDiff.diffForPath", { path: file.path }),
953
- className: "mb-2 overflow-auto whitespace-pre rounded-og-sm border border-og-border bg-og-bg/60 p-2.5 font-og-mono text-og-xs leading-5",
954
- role: "region",
955
- tabIndex: 0,
956
- children: gitFileDiffToPatch(file).split("\n").map((line, index) => /* @__PURE__ */ jsx4(
957
- "span",
958
- {
959
- className: cn(
960
- "block",
961
- line.startsWith("@@") ? "text-og-accent" : line.startsWith("+") ? "text-og-status-idle" : line.startsWith("-") ? "text-og-status-failed" : "text-og-fg-muted"
962
- ),
963
- children: line || " "
964
- },
965
- index
966
- ))
967
- },
968
- file.path
969
- )) });
970
- }
971
-
972
- // src/timeline/tool-renderers.tsx
973
- import { defaultUrlTransform } from "react-markdown";
974
- import { parseSandboxFileArtifactReceipt } from "@opengeni/sdk";
975
- import {
976
- BrainCircuitIcon as BrainCircuitIcon3,
977
- CameraIcon,
978
- CameraOffIcon,
979
- DownloadIcon as DownloadIcon2,
980
- FileSearchIcon as FileSearchIcon2,
981
- GlobeIcon as GlobeIcon2,
982
- ImageIcon as ImageIcon2,
983
- KeyRoundIcon as KeyRoundIcon2,
984
- LockIcon,
985
- MessagesSquareIcon as MessagesSquareIcon2,
986
- MousePointer2Icon,
987
- PackageSearchIcon as PackageSearchIcon2,
988
- PanelsTopLeftIcon as PanelsTopLeftIcon2,
989
- VideoIcon as VideoIcon2
990
- } from "lucide-react";
991
- import { lazy as lazy2, useContext as useContext5, useMemo as useMemo2, useState as useState7 } from "react";
992
-
993
- // src/timeline/compute-label.tsx
994
- import { createContext as createContext3, useContext as useContext3 } from "react";
995
- var TimelineComputeLabelContext = createContext3(null);
996
- var TimelineComputeLabelProvider = TimelineComputeLabelContext.Provider;
997
- function useTimelineComputeLabel() {
998
- return useContext3(TimelineComputeLabelContext);
999
- }
1000
-
1001
- // src/timeline/provider-logo.tsx
1002
- import { createContext as createContext4, useContext as useContext4, useEffect as useEffect4, useState as useState5 } from "react";
1003
- import { Fragment as Fragment2, jsx as jsx5 } from "react/jsx-runtime";
1004
- var ProviderLogoContext = createContext4(void 0);
1005
- var ProviderLogoProvider = ProviderLogoContext.Provider;
1006
- function useToolConnectorLogo(display) {
1007
- const resolve = useContext4(ProviderLogoContext);
1008
- if (!resolve || !display?.providerDomain) return null;
1009
- return resolve(display.providerDomain) ?? null;
1010
- }
1011
- function ConnectorLogoIcon({
1012
- src,
1013
- fallback: fallback2,
1014
- className
1015
- }) {
1016
- const [failed, setFailed] = useState5(false);
1017
- useEffect4(() => setFailed(false), [src]);
1018
- if (!src || failed) return /* @__PURE__ */ jsx5(Fragment2, { children: fallback2 });
1019
- return /* @__PURE__ */ jsx5(
1020
- "img",
1021
- {
1022
- src,
1023
- alt: "",
1024
- "aria-hidden": "true",
1025
- loading: "lazy",
1026
- decoding: "async",
1027
- "data-og-connector-logo": "",
1028
- className: className ?? "size-3.5 shrink-0 rounded-[3px] object-contain",
1029
- onError: () => setFailed(true)
1030
- }
1031
- );
1032
- }
1033
-
1034
- // src/timeline/tool-icon.tsx
1035
- import {
1036
- ActivityIcon,
1037
- AppWindowIcon,
1038
- ArchiveIcon,
1039
- BellIcon,
1040
- BotIcon,
1041
- BoxIcon,
1042
- BrainCircuitIcon as BrainCircuitIcon2,
1043
- CalendarClockIcon,
1044
- CircleDotIcon,
1045
- ClipboardIcon,
1046
- CodeIcon,
1047
- DownloadIcon,
1048
- FileDiffIcon,
1049
- FileIcon,
1050
- FileSearchIcon,
1051
- FileSpreadsheetIcon,
1052
- FileTextIcon,
1053
- FolderGitIcon,
1054
- FolderIcon,
1055
- GlobeIcon,
1056
- GraduationCapIcon,
1057
- HandIcon,
1058
- HourglassIcon,
1059
- ImageIcon,
1060
- InboxIcon,
1061
- KeyboardIcon,
1062
- KeyRoundIcon,
1063
- LogInIcon,
1064
- MessageCircleQuestionIcon,
1065
- MessagesSquareIcon,
1066
- MessageSquareIcon,
1067
- MonitorIcon,
1068
- PackageSearchIcon,
1069
- PanelsTopLeftIcon,
1070
- PaperclipIcon,
1071
- PencilIcon,
1072
- PhoneIcon,
1073
- PlugIcon,
1074
- ReceiptIcon,
1075
- SearchIcon,
1076
- ServerCogIcon,
1077
- ServerIcon,
1078
- SettingsIcon,
1079
- Share2Icon,
1080
- SparklesIcon,
1081
- TargetIcon,
1082
- TerminalIcon,
1083
- VideoIcon,
1084
- WrenchIcon
1085
- } from "lucide-react";
1086
- import { jsx as jsx6 } from "react/jsx-runtime";
1087
- function toolIcon(kind) {
1088
- switch (kind) {
1089
- case "terminal":
1090
- return TerminalIcon;
1091
- case "keyboard":
1092
- return KeyboardIcon;
1093
- case "file-diff":
1094
- return FileDiffIcon;
1095
- case "search":
1096
- return SearchIcon;
1097
- case "question":
1098
- return MessageCircleQuestionIcon;
1099
- case "target":
1100
- return TargetIcon;
1101
- case "brain":
1102
- return BrainCircuitIcon2;
1103
- case "sessions":
1104
- return MessagesSquareIcon;
1105
- case "server":
1106
- return ServerIcon;
1107
- case "server-cog":
1108
- return ServerCogIcon;
1109
- case "calendar":
1110
- return CalendarClockIcon;
1111
- case "panels":
1112
- return PanelsTopLeftIcon;
1113
- case "share":
1114
- return Share2Icon;
1115
- case "message":
1116
- return MessageSquareIcon;
1117
- case "git":
1118
- return FolderGitIcon;
1119
- case "box":
1120
- return BoxIcon;
1121
- case "key":
1122
- return KeyRoundIcon;
1123
- case "file-search":
1124
- return FileSearchIcon;
1125
- case "package-search":
1126
- return PackageSearchIcon;
1127
- case "plug":
1128
- return PlugIcon;
1129
- case "browser":
1130
- return GlobeIcon;
1131
- case "screen":
1132
- return MonitorIcon;
1133
- case "spreadsheet":
1134
- return FileSpreadsheetIcon;
1135
- case "wait":
1136
- return HourglassIcon;
1137
- case "download":
1138
- return DownloadIcon;
1139
- case "clipboard":
1140
- return ClipboardIcon;
1141
- case "image":
1142
- return ImageIcon;
1143
- case "video":
1144
- return VideoIcon;
1145
- case "record":
1146
- return CircleDotIcon;
1147
- case "document":
1148
- return FileTextIcon;
1149
- case "file":
1150
- return FileIcon;
1151
- case "attachment":
1152
- return PaperclipIcon;
1153
- case "archive":
1154
- return ArchiveIcon;
1155
- case "folder":
1156
- return FolderIcon;
1157
- case "site":
1158
- return AppWindowIcon;
1159
- case "skill":
1160
- return GraduationCapIcon;
1161
- case "settings":
1162
- return SettingsIcon;
1163
- case "bell":
1164
- return BellIcon;
1165
- case "phone":
1166
- return PhoneIcon;
1167
- case "inbox":
1168
- return InboxIcon;
1169
- case "help":
1170
- return HandIcon;
1171
- case "model":
1172
- return SparklesIcon;
1173
- case "progress":
1174
- return ActivityIcon;
1175
- case "helper":
1176
- return BotIcon;
1177
- case "sign-in":
1178
- return LogInIcon;
1179
- case "code":
1180
- return CodeIcon;
1181
- case "accounting":
1182
- return ReceiptIcon;
1183
- case "rename":
1184
- return PencilIcon;
1185
- case "wrench":
1186
- return WrenchIcon;
1187
- }
1188
- }
1189
- function ToolKindIcon({ kind, className }) {
1190
- const Icon = toolIcon(kind);
1191
- return /* @__PURE__ */ jsx6(Icon, { className });
1192
- }
1193
-
1194
- // src/timeline/tool-diff.tsx
1195
- import { useState as useState6 } from "react";
1196
- import { jsx as jsx7, jsxs as jsxs3 } from "react/jsx-runtime";
1197
- function ToolDiff({ files }) {
1198
- const [layout, setLayout] = useState6("unified");
1199
- const themeType = useThemeType(void 0);
1200
- return /* @__PURE__ */ jsxs3("div", { className: "min-w-0", children: [
1201
- /* @__PURE__ */ jsx7("div", { className: "mb-1.5 flex justify-end", children: /* @__PURE__ */ jsx7(LayoutToggle, { layout, onChange: setLayout }) }),
1202
- /* @__PURE__ */ jsx7(PierreDiff, { diff: files, layout, themeType })
1203
- ] });
1204
- }
1205
- function LayoutToggle({
1206
- layout,
1207
- onChange
1208
- }) {
1209
- return /* @__PURE__ */ jsx7("div", { className: "inline-flex items-center gap-px rounded-og-xs border border-og-border p-px", children: ["unified", "split"].map((value) => /* @__PURE__ */ jsx7(
1210
- "button",
1211
- {
1212
- type: "button",
1213
- onClick: () => onChange(value),
1214
- className: cn(
1215
- "rounded-og-xs px-2 py-[3px] text-og-xs font-medium capitalize transition-colors",
1216
- layout === value ? "bg-og-surface-2 text-og-fg" : "text-og-fg-subtle hover:text-og-fg-muted"
1217
- ),
1218
- children: value
1219
- },
1220
- value
1221
- )) });
1222
- }
1223
- function RawPatch({ diff }) {
1224
- const t = useOpenGeniText();
1225
- const occurrences = /* @__PURE__ */ new Map();
1226
- const lines = diff.split("\n").map((line) => {
1227
- const occurrence = (occurrences.get(line) ?? 0) + 1;
1228
- occurrences.set(line, occurrence);
1229
- return { key: `${line}\0${occurrence}`, line };
1230
- });
1231
- return /* @__PURE__ */ jsxs3("div", { className: "min-w-0", children: [
1232
- /* @__PURE__ */ jsx7("p", { className: "mb-1 text-og-xs font-medium uppercase tracking-[0.08em] text-og-fg-subtle", children: t("timeline.toolDiff.rawPatchCouldNotParse") }),
1233
- /* @__PURE__ */ jsx7("pre", { className: "max-h-72 overflow-auto border-l-2 border-og-border pl-3 font-og-mono text-og-xs leading-5", children: lines.map(({ key, line }) => /* @__PURE__ */ jsx7(
1234
- "span",
1235
- {
1236
- className: cn(
1237
- "block",
1238
- line.startsWith("@@") ? "text-og-accent" : line.startsWith("+") ? "text-og-status-idle" : line.startsWith("-") ? "text-og-status-failed" : "text-og-fg-muted"
1239
- ),
1240
- children: line || " "
1241
- },
1242
- key
1243
- )) })
1244
- ] });
1245
- }
1246
-
1247
- // src/timeline/tool-renderers.tsx
1248
- import { Fragment as Fragment3, jsx as jsx8, jsxs as jsxs4 } from "react/jsx-runtime";
1249
- var ICON_SIZE = "size-3.5";
1250
- function RunningPreview({ children }) {
1251
- const compact = useContext5(CompactActivityContext);
1252
- return /* @__PURE__ */ jsxs4("span", { className: "inline-flex items-center gap-1.5", children: [
1253
- !compact && /* @__PURE__ */ jsx8("span", { className: "size-1.5 shrink-0 animate-og-pulse rounded-full bg-og-status-running" }),
1254
- /* @__PURE__ */ jsx8("span", { className: "min-w-0 truncate", children })
1255
- ] });
1256
- }
1257
- function PathPreview({
1258
- path,
1259
- add,
1260
- del
1261
- }) {
1262
- return /* @__PURE__ */ jsxs4("span", { className: "inline-flex items-center gap-2 truncate font-og-mono", children: [
1263
- /* @__PURE__ */ jsxs4("span", { className: "truncate", children: [
1264
- /* @__PURE__ */ jsx8("span", { className: "text-og-fg-subtle", children: pathDirname(path) }),
1265
- /* @__PURE__ */ jsx8("span", { className: "text-og-fg-muted", children: pathBasename(path) })
1266
- ] }),
1267
- add != null || del != null ? /* @__PURE__ */ jsxs4("span", { className: "shrink-0 text-og-fg-subtle", children: [
1268
- add != null ? `+${add}` : "",
1269
- add != null && del != null ? " " : "",
1270
- del != null ? `\u2212${del}` : ""
1271
- ] }) : null
1272
- ] });
1273
- }
1274
- function presentedPreviewNode(msg, preview) {
1275
- switch (preview.kind) {
1276
- case "text":
1277
- return preview.running ? /* @__PURE__ */ jsx8(RunningPreview, { children: preview.text }) : preview.text;
1278
- case "path":
1279
- return /* @__PURE__ */ jsx8(PathPreview, { path: preview.path, add: preview.add, del: preview.del });
1280
- case "files":
1281
- return /* @__PURE__ */ jsxs4("span", { className: "inline-flex items-center gap-2 font-og-mono", children: [
1282
- /* @__PURE__ */ jsx8("span", { className: "text-og-fg-muted", children: msg("timeline.toolRenderers.filesCount", { count: preview.count }) }),
1283
- /* @__PURE__ */ jsxs4("span", { className: "text-og-fg-subtle", children: [
1284
- "+",
1285
- preview.add,
1286
- " \u2212",
1287
- preview.del
1288
- ] })
1289
- ] });
1290
- case "malformed":
1291
- return /* @__PURE__ */ jsxs4("span", { className: "inline-flex items-center gap-2 font-og-mono", children: [
1292
- /* @__PURE__ */ jsx8("span", { className: "text-og-fg-muted", children: preview.name }),
1293
- /* @__PURE__ */ jsx8("span", { className: "text-og-fg-subtle", children: msg("timeline.toolRenderers.malformedPatch") })
1294
- ] });
1295
- }
1296
- }
1297
- function PresentedBody({ body }) {
1298
- switch (body.kind) {
1299
- case "term":
1300
- return /* @__PURE__ */ jsxs4(Fragment3, { children: [
1301
- /* @__PURE__ */ jsx8(
1302
- TermBlock,
1303
- {
1304
- command: body.command,
1305
- ...body.workdir !== null || body.command === null ? { workdir: body.workdir } : {},
1306
- output: body.output,
1307
- ...body.live ? { live: true } : {},
1308
- ...body.failed !== void 0 ? { failed: body.failed } : {}
1309
- }
1310
- ),
1311
- body.note ? /* @__PURE__ */ jsx8(BodyNote, { children: body.note }) : null
1312
- ] });
1313
- case "note":
1314
- return body.tone ? /* @__PURE__ */ jsx8(BodyNote, { tone: body.tone, children: body.text }) : /* @__PURE__ */ jsx8(BodyNote, { children: body.text });
1315
- case "payloads":
1316
- return /* @__PURE__ */ jsxs4(Fragment3, { children: [
1317
- body.note ? /* @__PURE__ */ jsx8("p", { className: "m-0 py-1 text-og-sm text-og-fg-muted", children: body.note }) : null,
1318
- body.blocks.map(
1319
- (block) => block.failed ? /* @__PURE__ */ jsx8(PayloadBlock, { label: block.label, value: block.value, failed: true }, block.label) : /* @__PURE__ */ jsx8(PayloadBlock, { label: block.label, value: block.value }, block.label)
1320
- )
1321
- ] });
1322
- case "patch":
1323
- if (body.bare) {
1324
- return /* @__PURE__ */ jsx8(RawPatch, { diff: body.files[0]?.diff ?? "" });
1325
- }
1326
- return /* @__PURE__ */ jsx8(Fragment3, { children: body.files.map(
1327
- (entry) => entry.file ? /* @__PURE__ */ jsx8(ToolDiff, { files: [entry.file] }, entry.key) : /* @__PURE__ */ jsxs4("div", { children: [
1328
- /* @__PURE__ */ jsx8("p", { className: "mb-1 font-og-mono text-og-xs text-og-fg-muted", children: entry.path }),
1329
- /* @__PURE__ */ jsx8(RawPatch, { diff: entry.diff })
1330
- ] }, entry.key)
1331
- ) });
1332
- case "web-results":
1333
- return /* @__PURE__ */ jsx8(WebSearchResults, { results: body.results });
1334
- case "none":
1335
- return null;
1336
- }
1337
- }
1338
- function WebSearchResults({ results }) {
1339
- const msg = useOpenGeniText();
1340
- const resultOccurrences = /* @__PURE__ */ new Map();
1341
- const keyedResults = results?.map((result) => {
1342
- const contentKey = `${result.domain}\0${result.title}\0${result.snippet}`;
1343
- const occurrence = (resultOccurrences.get(contentKey) ?? 0) + 1;
1344
- resultOccurrences.set(contentKey, occurrence);
1345
- return { key: `${contentKey}\0${occurrence}`, result };
1346
- });
1347
- if (!keyedResults || !keyedResults.length) {
1348
- return /* @__PURE__ */ jsx8(BodyNote, { children: msg("timeline.toolRenderers.resultsFoldedIntoModelContext") });
1349
- }
1350
- return /* @__PURE__ */ jsx8("ul", { className: "flex flex-col gap-2", children: keyedResults.map(({ key, result }) => /* @__PURE__ */ jsxs4("li", { className: "flex gap-2.5", children: [
1351
- /* @__PURE__ */ jsx8(GlobeIcon2, { className: "mt-0.5 size-3.5 shrink-0 text-og-fg-subtle" }),
1352
- /* @__PURE__ */ jsxs4("div", { className: "min-w-0", children: [
1353
- /* @__PURE__ */ jsxs4("p", { className: "truncate text-og-base text-og-fg", children: [
1354
- result.title,
1355
- " ",
1356
- /* @__PURE__ */ jsx8("span", { className: "text-og-fg-subtle", children: result.domain })
1357
- ] }),
1358
- /* @__PURE__ */ jsx8("p", { className: "text-og-sm leading-5 text-og-fg-muted", children: result.snippet })
1359
- ] })
1360
- ] }, key)) });
1361
- }
1362
- function PresentedToolRow({
1363
- presentation,
1364
- item,
1365
- logo = null
1366
- }) {
1367
- const msg = useOpenGeniText();
1368
- const computeLabel = useTimelineComputeLabel();
1369
- const p = useToolDetails() === "plain" ? plainToolRow(msg, item, presentation, { computeLabel }) : presentation;
1370
- const Icon = toolIcon(p.icon);
1371
- return /* @__PURE__ */ jsx8(
1372
- ActivityDisclosure,
1373
- {
1374
- icon: /* @__PURE__ */ jsx8(ConnectorLogoIcon, { src: logo, fallback: /* @__PURE__ */ jsx8(Icon, { className: ICON_SIZE }) }),
1375
- iconTone: p.iconTone,
1376
- title: /* @__PURE__ */ jsx8(SecretRefText, { text: p.title, linkable: false }),
1377
- ...p.titleMono ? { titleMono: true } : {},
1378
- ...p.running ? { running: true } : {},
1379
- ...p.chip ? { chip: p.chip } : {},
1380
- ...p.failed !== void 0 ? { failed: p.failed } : {},
1381
- ...p.cancelled !== void 0 ? { cancelled: p.cancelled } : {},
1382
- preview: p.preview ? presentedPreviewNode(msg, p.preview) : void 0,
1383
- expandable: p.body.kind !== "none",
1384
- children: /* @__PURE__ */ jsx8(PresentedBody, { body: p.body })
1385
- }
1386
- );
1387
- }
1388
- function ExecRenderer({ item }) {
1389
- const msg = useOpenGeniText();
1390
- const computeLabel = useTimelineComputeLabel();
1391
- return /* @__PURE__ */ jsx8(PresentedToolRow, { presentation: execPresentation(msg, item, { computeLabel }), item });
1392
- }
1393
- function WriteStdinRenderer({ item }) {
1394
- const msg = useOpenGeniText();
1395
- return /* @__PURE__ */ jsx8(PresentedToolRow, { presentation: writeStdinPresentation(msg, item), item });
1396
- }
1397
- function ApplyPatchRenderer({ item }) {
1398
- const msg = useOpenGeniText();
1399
- const presentation = applyPatchPresentation(msg, item);
1400
- return presentation ? /* @__PURE__ */ jsx8(PresentedToolRow, { presentation, item }) : /* @__PURE__ */ jsx8(GenericRenderer, { item });
1401
- }
1402
- function WebSearchRenderer({ item }) {
1403
- const msg = useOpenGeniText();
1404
- return /* @__PURE__ */ jsx8(PresentedToolRow, { presentation: webSearchPresentation(msg, item), item });
1405
- }
1406
- function AskRenderer({ item }) {
1407
- const msg = useOpenGeniText();
1408
- return /* @__PURE__ */ jsx8(PresentedToolRow, { presentation: askPresentation(msg, item), item });
1409
- }
1410
- function RunOnRenderer({ item }) {
1411
- const msg = useOpenGeniText();
1412
- return /* @__PURE__ */ jsx8(PresentedToolRow, { presentation: runOnPresentation(msg, item), item });
1413
- }
1414
- function MachineRenderer({ item, loadRetainedScreenshot }) {
1415
- const msg = useOpenGeniText();
1416
- const presentation = machinePresentation(msg, item);
1417
- const retained = mcpToolLeaf(item.name).startsWith("computer_") ? retainedScreenshotMetadata(item.output) : null;
1418
- if (!retained?.available) return /* @__PURE__ */ jsx8(PresentedToolRow, { presentation, item });
1419
- return /* @__PURE__ */ jsx8(
1420
- RetainedSessionImageDisclosure,
1421
- {
1422
- artifact: retained,
1423
- load: loadRetainedScreenshot,
1424
- title: presentation.title,
1425
- caption: presentation.title,
1426
- noun: "screenshot",
1427
- icon: /* @__PURE__ */ jsx8(CameraIcon, { className: ICON_SIZE }),
1428
- lightboxLabel: msg("timeline.toolRenderers.screenshot"),
1429
- batched: null,
1430
- failed: item.status === "failed",
1431
- cancelled: item.status === "cancelled"
1432
- }
1433
- );
1434
- }
1435
- function UnreviewedGenericRenderer({ item, loadRetainedScreenshot }) {
1436
- const msg = useOpenGeniText();
1437
- const details = useToolDetails();
1438
- const logo = useToolConnectorLogo(item.display);
1439
- const { images, output } = retainedToolResultImages(item.output);
1440
- if (images.length === 0 || item.status === "running") {
1441
- return /* @__PURE__ */ jsx8(PresentedToolRow, { presentation: toolRowPresentation(msg, item), item, logo });
1442
- }
1443
- const presentation = toolRowPresentation(msg, { ...item, output }, { details });
1444
- const Icon = toolIcon(presentation.icon);
1445
- const [first, ...rest] = images;
1446
- return /* @__PURE__ */ jsxs4(
1447
- RetainedSessionImageDisclosure,
1448
- {
1449
- artifact: first,
1450
- load: loadRetainedScreenshot,
1451
- title: presentation.title,
1452
- caption: presentation.title,
1453
- noun: "image",
1454
- icon: /* @__PURE__ */ jsx8(ConnectorLogoIcon, { src: logo, fallback: /* @__PURE__ */ jsx8(Icon, { className: ICON_SIZE }) }),
1455
- lightboxLabel: presentation.title,
1456
- batched: null,
1457
- failed: presentation.failed ?? false,
1458
- cancelled: presentation.cancelled ?? false,
1459
- children: [
1460
- /* @__PURE__ */ jsx8(PresentedBody, { body: presentation.body }),
1461
- rest.map((image, index) => /* @__PURE__ */ jsx8(
1462
- RetainedSessionImageDisclosure,
1463
- {
1464
- artifact: image,
1465
- load: loadRetainedScreenshot,
1466
- title: msg("timeline.toolRenderers.imageIndex", { index: index + 2 }),
1467
- caption: `${presentation.title}, image ${index + 2}`,
1468
- noun: "image",
1469
- icon: /* @__PURE__ */ jsx8(ImageIcon2, { className: ICON_SIZE }),
1470
- lightboxLabel: presentation.title,
1471
- batched: null,
1472
- failed: false,
1473
- cancelled: false
1474
- },
1475
- image.artifactId
1476
- ))
1477
- ]
1478
- }
1479
- );
1480
- }
1481
- function computerVerb(msg, action) {
1482
- if (!action || !action.type) {
1483
- return msg("timeline.toolRenderers.acted");
1484
- }
1485
- switch (action.type) {
1486
- case "screenshot":
1487
- return msg("timeline.toolRenderers.screenshot");
1488
- case "click":
1489
- return msg("timeline.toolRenderers.clickedXY", { x: action.x, y: action.y });
1490
- case "double_click":
1491
- return msg("timeline.toolRenderers.doubleClickedXY", { x: action.x, y: action.y });
1492
- case "move":
1493
- return msg("timeline.toolRenderers.movedXY", { x: action.x, y: action.y });
1494
- case "scroll":
1495
- return msg("timeline.toolRenderers.scrolled");
1496
- case "type": {
1497
- const t = action.text ?? "";
1498
- return msg("timeline.toolRenderers.typedSliceValue", {
1499
- slice: t.slice(0, 28),
1500
- value: t.length > 28 ? "\u2026" : ""
1501
- });
1502
- }
1503
- case "keypress":
1504
- return msg("timeline.toolRenderers.pressedJoin", { join: (action.keys ?? []).join("+") });
1505
- case "drag":
1506
- return msg("timeline.toolRenderers.dragged");
1507
- case "wait":
1508
- return msg("timeline.toolRenderers.waited");
1509
- default:
1510
- return action.type;
1511
- }
1512
- }
1513
- function asComputerArgs(args) {
1514
- if (!args) {
1515
- return {};
1516
- }
1517
- const parsed = typeof args === "string" ? tryParseJson(args) : args;
1518
- if (!parsed || typeof parsed !== "object") {
1519
- return {};
1520
- }
1521
- const record = parsed;
1522
- return {
1523
- ...typeof record.x === "number" ? { x: record.x } : {},
1524
- ...typeof record.y === "number" ? { y: record.y } : {},
1525
- ...typeof record.text === "string" ? { text: record.text } : {},
1526
- ...Array.isArray(record.keys) ? { keys: record.keys } : {},
1527
- ...typeof record.button === "string" ? { button: record.button } : {}
1528
- };
1529
- }
1530
- function ComputerCallRenderer({ item, loadRetainedScreenshot }) {
1531
- const msg = useOpenGeniText();
1532
- const raw = item.raw ?? {};
1533
- const functionAction = !raw.action && item.name.startsWith("computer_") && item.name !== "computer_call" ? {
1534
- type: item.name.slice("computer_".length),
1535
- ...asComputerArgs(item.arguments)
1536
- } : void 0;
1537
- const action = raw.action ?? functionAction;
1538
- const actions = raw.actions ?? (action ? [action] : []);
1539
- const verb = computerVerb(msg, action);
1540
- const out = item.output;
1541
- const running = item.status === "running";
1542
- const rejected = raw.providerData?.approvalStatus === "rejected";
1543
- const readOnly = typeof out === "string" && out.includes("read-only");
1544
- const shotUrl = screenshotDataUrl(out);
1545
- const retained = retainedScreenshotMetadata(out);
1546
- const omittedMedia = mediaPreviewFact(out);
1547
- const empty = out === "" || out == null;
1548
- const batched = actions.length > 1 ? actions.map((a) => computerVerb(msg, a)).join(" \xB7 ") : null;
1549
- const countSuffix = actions.length > 1 ? ` \xB7${actions.length}` : "";
1550
- const isShot = action?.type === "screenshot";
1551
- if (running) {
1552
- return /* @__PURE__ */ jsx8(
1553
- ActivityDisclosure,
1554
- {
1555
- icon: isShot ? /* @__PURE__ */ jsx8(CameraIcon, { className: ICON_SIZE }) : /* @__PURE__ */ jsx8(MousePointer2Icon, { className: ICON_SIZE }),
1556
- iconTone: "running",
1557
- title: verb,
1558
- running: true,
1559
- media: /* @__PURE__ */ jsx8(MediaSkeleton, {}),
1560
- children: /* @__PURE__ */ jsx8(BodyNote, { children: msg("timeline.toolRenderers.capturingFrame") })
1561
- }
1562
- );
1563
- }
1564
- if (readOnly) {
1565
- return /* @__PURE__ */ jsx8(
1566
- ActivityDisclosure,
1567
- {
1568
- icon: /* @__PURE__ */ jsx8(MousePointer2Icon, { className: ICON_SIZE }),
1569
- iconTone: "failed",
1570
- title: verb,
1571
- chip: { tone: "bad", text: "read-only" },
1572
- preview: "write actions disabled",
1573
- children: /* @__PURE__ */ jsx8(BodyNote, { tone: "error", children: msg("timeline.toolRenderers.computerUseIsReadOnly") })
1574
- }
1575
- );
1576
- }
1577
- if (rejected) {
1578
- return /* @__PURE__ */ jsx8(
1579
- ActivityDisclosure,
1580
- {
1581
- icon: /* @__PURE__ */ jsx8(LockIcon, { className: ICON_SIZE }),
1582
- iconTone: "muted",
1583
- title: verb,
1584
- preview: msg("timeline.toolRenderers.approvalRejectedThisActionDid2"),
1585
- children: /* @__PURE__ */ jsx8(BodyNote, { children: msg("timeline.toolRenderers.approvalRejectedThisActionDid") })
1586
- }
1587
- );
1588
- }
1589
- const isFailed = item.status === "failed";
1590
- const isCancelled = item.status === "cancelled";
1591
- if (retained) {
1592
- if (!retained.available) {
1593
- const state = retained.reason === "expired" || retained.reason === "deleted" ? retained.reason : "unavailable";
1594
- return /* @__PURE__ */ jsx8(
1595
- ActivityDisclosure,
1596
- {
1597
- icon: /* @__PURE__ */ jsx8(CameraOffIcon, { className: ICON_SIZE }),
1598
- iconTone: isFailed ? "failed" : "muted",
1599
- title: `${verb}${countSuffix} \xB7 ${state}`,
1600
- failed: isFailed,
1601
- cancelled: isCancelled,
1602
- preview: `screenshot ${state}`,
1603
- media: /* @__PURE__ */ jsx8(MediaEmpty, {}),
1604
- children: /* @__PURE__ */ jsx8(BodyNote, { tone: isFailed ? "error" : void 0, children: msg("timeline.toolRenderers.screenshotStateReplaceall", {
1605
- state,
1606
- replaceAll: retained.reason.replaceAll("_", " ")
1607
- }) })
1608
- }
1609
- );
1610
- }
1611
- return /* @__PURE__ */ jsx8(
1612
- RetainedSessionImageDisclosure,
1613
- {
1614
- artifact: retained,
1615
- load: loadRetainedScreenshot,
1616
- title: `${verb}${countSuffix}`,
1617
- caption: `${verb}${countSuffix}`,
1618
- noun: "screenshot",
1619
- icon: /* @__PURE__ */ jsx8(CameraIcon, { className: ICON_SIZE }),
1620
- lightboxLabel: msg("timeline.toolRenderers.screenshot"),
1621
- batched,
1622
- failed: isFailed,
1623
- cancelled: isCancelled
1624
- }
1625
- );
1626
- }
1627
- if (shotUrl) {
1628
- const caption = `${verb}${actions.length > 1 ? ` (+${actions.length - 1} more)` : ""}`;
1629
- return /* @__PURE__ */ jsxs4(
1630
- ActivityDisclosure,
1631
- {
1632
- icon: isShot ? /* @__PURE__ */ jsx8(CameraIcon, { className: ICON_SIZE }) : /* @__PURE__ */ jsx8(MousePointer2Icon, { className: ICON_SIZE }),
1633
- iconTone: isFailed ? "failed" : "accent",
1634
- title: `${verb}${countSuffix}`,
1635
- failed: isFailed,
1636
- cancelled: isCancelled,
1637
- media: /* @__PURE__ */ jsx8(Thumbnail, { src: shotUrl, caption }),
1638
- children: [
1639
- /* @__PURE__ */ jsx8(ScreenshotFigure, { src: shotUrl, caption }),
1640
- batched ? /* @__PURE__ */ jsx8(BodyNote, { children: msg("timeline.toolRenderers.batchedBatched", { batched }) }) : null
1641
- ]
1642
- }
1643
- );
1644
- }
1645
- if (omittedMedia) {
1646
- return /* @__PURE__ */ jsxs4(
1647
- ActivityDisclosure,
1648
- {
1649
- icon: /* @__PURE__ */ jsx8(CameraOffIcon, { className: ICON_SIZE }),
1650
- iconTone: isFailed ? "failed" : "muted",
1651
- title: msg("timeline.toolRenderers.verbCountsuffixImageOmittedNot", { verb, countSuffix }),
1652
- failed: isFailed,
1653
- cancelled: isCancelled,
1654
- preview: msg("timeline.toolRenderers.inlineImageOmittedNotRetained"),
1655
- media: /* @__PURE__ */ jsx8(MediaEmpty, {}),
1656
- children: [
1657
- /* @__PURE__ */ jsx8(BodyNote, { children: msg("timeline.toolRenderers.theInlineMediatypeOutputWas", {
1658
- mediaType: omittedMedia.mediaType
1659
- }) }),
1660
- batched ? /* @__PURE__ */ jsx8(BodyNote, { children: msg("timeline.toolRenderers.batchedBatched", { batched }) }) : null
1661
- ]
1662
- }
1663
- );
1664
- }
1665
- if (empty) {
1666
- return /* @__PURE__ */ jsx8(
1667
- ActivityDisclosure,
1668
- {
1669
- icon: /* @__PURE__ */ jsx8(CameraOffIcon, { className: ICON_SIZE }),
1670
- iconTone: isFailed ? "failed" : "muted",
1671
- title: verb,
1672
- failed: isFailed,
1673
- cancelled: isCancelled,
1674
- media: /* @__PURE__ */ jsx8(MediaEmpty, {}),
1675
- children: /* @__PURE__ */ jsx8(BodyNote, { children: isFailed ? msg("timeline.toolRenderers.computerCallFailedNoImage") : isCancelled ? msg("timeline.toolRenderers.computerCallInterruptedNoImage") : msg("timeline.toolRenderers.noImageTheSessionReturned") })
1676
- }
1677
- );
1678
- }
1679
- return /* @__PURE__ */ jsx8(
1680
- ActivityDisclosure,
1681
- {
1682
- icon: /* @__PURE__ */ jsx8(MousePointer2Icon, { className: ICON_SIZE }),
1683
- iconTone: isFailed ? "failed" : "accent",
1684
- title: verb,
1685
- failed: isFailed,
1686
- cancelled: isCancelled,
1687
- preview: batched ?? void 0,
1688
- expandable: batched != null,
1689
- children: batched ? /* @__PURE__ */ jsx8(BodyNote, { children: batched }) : null
1690
- }
1691
- );
1692
- }
1693
- function BrowserScreenshotRenderer(props) {
1694
- const msg = useOpenGeniText();
1695
- const { item, loadRetainedScreenshot } = props;
1696
- const leaf = mcpToolLeaf(item.name);
1697
- const title = leaf === "browser_observe" ? msg("timeline.toolRenderers.observedBrowser") : leaf === "browser_act" ? msg("timeline.toolRenderers.usedBrowser") : msg("timeline.toolRenderers.browserScreenshot");
1698
- const retained = retainedScreenshotMetadata(item.output);
1699
- const isFailed = item.status === "failed";
1700
- const isCancelled = item.status === "cancelled";
1701
- if (item.status === "running" && leaf === "browser_screenshot") {
1702
- return /* @__PURE__ */ jsx8(
1703
- ActivityDisclosure,
1704
- {
1705
- icon: /* @__PURE__ */ jsx8(CameraIcon, { className: ICON_SIZE }),
1706
- iconTone: "running",
1707
- title,
1708
- running: true,
1709
- media: /* @__PURE__ */ jsx8(MediaSkeleton, {}),
1710
- children: /* @__PURE__ */ jsx8(BodyNote, { children: msg("timeline.toolRenderers.capturingFrame") })
1711
- }
1712
- );
1713
- }
1714
- if (!retained) return /* @__PURE__ */ jsx8(GenericRenderer, { ...props });
1715
- if (!retained.available) {
1716
- const state = retained.reason === "expired" || retained.reason === "deleted" ? retained.reason : "unavailable";
1717
- return /* @__PURE__ */ jsx8(
1718
- ActivityDisclosure,
1719
- {
1720
- icon: /* @__PURE__ */ jsx8(CameraOffIcon, { className: ICON_SIZE }),
1721
- iconTone: isFailed ? "failed" : "muted",
1722
- title: `${title} \xB7 ${state}`,
1723
- failed: isFailed,
1724
- cancelled: isCancelled,
1725
- preview: `screenshot ${state}`,
1726
- media: /* @__PURE__ */ jsx8(MediaEmpty, {}),
1727
- children: /* @__PURE__ */ jsx8(BodyNote, { tone: isFailed ? "error" : void 0, children: msg("timeline.toolRenderers.screenshotStateReplaceall", {
1728
- state,
1729
- replaceAll: retained.reason.replaceAll("_", " ")
1730
- }) })
1731
- }
1732
- );
1733
- }
1734
- return /* @__PURE__ */ jsx8(
1735
- RetainedSessionImageDisclosure,
1736
- {
1737
- artifact: retained,
1738
- load: loadRetainedScreenshot,
1739
- title,
1740
- caption: title,
1741
- noun: "screenshot",
1742
- icon: /* @__PURE__ */ jsx8(CameraIcon, { className: ICON_SIZE }),
1743
- lightboxLabel: msg("timeline.toolRenderers.browserScreenshot"),
1744
- batched: null,
1745
- failed: isFailed,
1746
- cancelled: isCancelled
1747
- }
1748
- );
1749
- }
1750
- function RetainedSessionImageDisclosure(props) {
1751
- const compact = useContext5(CompactActivityContext);
1752
- if (compact) {
1753
- return /* @__PURE__ */ jsx8(
1754
- ActivityDisclosure,
1755
- {
1756
- icon: props.icon,
1757
- title: props.title,
1758
- compactPreview: null,
1759
- failed: props.failed,
1760
- cancelled: props.cancelled
1761
- }
1762
- );
1763
- }
1764
- return /* @__PURE__ */ jsx8(LoadedRetainedSessionImageDisclosure, { ...props });
1765
- }
1766
- function LoadedRetainedSessionImageDisclosure({
1767
- artifact,
1768
- load,
1769
- title,
1770
- caption,
1771
- noun,
1772
- icon,
1773
- lightboxLabel,
1774
- batched,
1775
- failed,
1776
- cancelled,
1777
- filename,
1778
- defaultOpen,
1779
- children
1780
- }) {
1781
- const msg = useOpenGeniText();
1782
- const state = useRetainedImageObjectUrl(artifact, load);
1783
- const downloadFilename = filename ?? retainedImageFilename(artifact);
1784
- const figure = {
1785
- src: state.kind === "ready" ? state.url : "",
1786
- caption,
1787
- alt: caption,
1788
- expandLabel: msg("timeline.toolRenderers.expandNoun", { noun }),
1789
- lightboxLabel,
1790
- downloadFilename
1791
- };
1792
- return /* @__PURE__ */ jsxs4(
1793
- ActivityDisclosure,
1794
- {
1795
- icon,
1796
- iconTone: failed ? "failed" : state.kind === "ready" ? "accent" : "muted",
1797
- title,
1798
- defaultOpen,
1799
- failed,
1800
- cancelled,
1801
- preview: state.kind === "loading" ? msg("timeline.toolRenderers.loadingRetainedNoun", { noun }) : state.kind === "error" ? msg("timeline.toolRenderers.nounRetrievalFailed", { noun }) : state.kind === "unavailable" ? `${noun} ${state.label}` : void 0,
1802
- media: state.kind === "ready" ? /* @__PURE__ */ jsx8(Thumbnail, { ...figure }) : state.kind === "loading" ? /* @__PURE__ */ jsx8(MediaSkeleton, {}) : /* @__PURE__ */ jsx8(MediaEmpty, {}),
1803
- children: [
1804
- state.kind === "ready" ? /* @__PURE__ */ jsx8(ScreenshotFigure, { ...figure, showCaption: caption !== title }) : state.kind === "loading" ? /* @__PURE__ */ jsx8(BodyNote, { children: msg("timeline.toolRenderers.loadingTheRetainedNoun", { noun }) }) : state.kind === "unavailable" ? /* @__PURE__ */ jsxs4(BodyNote, { children: [
1805
- noun === "screenshot" ? msg("timeline.toolRenderers.screenshot") : msg("timeline.toolRenderers.image"),
1806
- " ",
1807
- state.label,
1808
- "."
1809
- ] }) : /* @__PURE__ */ jsx8(ImageRetrievalError, { noun, retry: state.retry }),
1810
- batched ? /* @__PURE__ */ jsx8(BodyNote, { children: msg("timeline.toolRenderers.batchedBatched", { batched }) }) : null,
1811
- children
1812
- ]
1813
- }
1814
- );
1815
- }
1816
- function ImageRetrievalError({ noun = "image", retry }) {
1817
- const msg = useOpenGeniText();
1818
- return /* @__PURE__ */ jsxs4(BodyNote, { tone: "error", children: [
1819
- noun === "screenshot" ? msg("timeline.toolRenderers.screenshot") : msg("timeline.toolRenderers.image"),
1820
- " ",
1821
- msg("timeline.toolRenderers.retrievalFailed"),
1822
- " ",
1823
- /* @__PURE__ */ jsx8(
1824
- "button",
1825
- {
1826
- type: "button",
1827
- "aria-label": msg("timeline.toolRenderers.retryNounRetrieval", { noun }),
1828
- onClick: retry,
1829
- className: "underline underline-offset-2",
1830
- children: msg("timeline.toolRenderers.retry")
1831
- }
1832
- )
1833
- ] });
1834
- }
1835
- function GeneratedImageRenderer({ item, loadRetainedArtifact }) {
1836
- const msg = useOpenGeniText();
1837
- const args = parseToolArgs(item.arguments);
1838
- const prompt = typeof args.prompt === "string" ? args.prompt : "";
1839
- const raw = item.raw && typeof item.raw === "object" && !Array.isArray(item.raw) ? item.raw : null;
1840
- const receipt = generatedImageReceipt(item.output) ?? generatedImageReceipt(raw?.output);
1841
- if (item.status === "running") {
1842
- return /* @__PURE__ */ jsx8(
1843
- ActivityDisclosure,
1844
- {
1845
- icon: /* @__PURE__ */ jsx8(ImageIcon2, { className: ICON_SIZE }),
1846
- iconTone: "running",
1847
- title: msg("timeline.toolRenderers.generatingImage"),
1848
- running: true,
1849
- preview: /* @__PURE__ */ jsx8(RunningPreview, { children: truncatePreview(prompt, 72) || msg("timeline.toolRenderers.creating") }),
1850
- media: /* @__PURE__ */ jsx8(MediaSkeleton, {}),
1851
- children: prompt ? /* @__PURE__ */ jsx8(BodyNote, { children: prompt }) : null
1852
- }
1853
- );
1854
- }
1855
- if (!receipt) return /* @__PURE__ */ jsx8(GenericRenderer, { item });
1856
- return /* @__PURE__ */ jsx8(
1857
- GeneratedImageDisclosure,
1858
- {
1859
- receipt,
1860
- load: loadRetainedArtifact,
1861
- prompt,
1862
- failed: item.status === "failed",
1863
- cancelled: item.status === "cancelled"
1864
- }
1865
- );
1866
- }
1867
- function GeneratedVideoRenderer({ item }) {
1868
- const msg = useOpenGeniText();
1869
- const args = parseToolArgs(item.arguments);
1870
- const prompt = typeof args.prompt === "string" ? args.prompt : "";
1871
- const parsedOutput = typeof item.output === "string" ? tryParseJson(item.output) : item.output;
1872
- const accepted = parsedOutput && typeof parsedOutput === "object" && !Array.isArray(parsedOutput) && parsedOutput.status === "accepted";
1873
- const failed = item.status === "failed";
1874
- const cancelled = item.status === "cancelled";
1875
- const running = item.status === "running";
1876
- return /* @__PURE__ */ jsxs4(
1877
- ActivityDisclosure,
1878
- {
1879
- icon: /* @__PURE__ */ jsx8(VideoIcon2, { className: ICON_SIZE }),
1880
- iconTone: failed ? "failed" : running ? "running" : accepted ? "accent" : "muted",
1881
- title: running ? msg("timeline.toolRenderers.startingVideoGeneration") : accepted ? msg("timeline.toolRenderers.generatingVideo") : msg("timeline.toolRenderers.generateVideo"),
1882
- running,
1883
- failed,
1884
- cancelled,
1885
- preview: truncatePreview(prompt, 88) || (accepted ? msg("timeline.toolRenderers.requestAccepted") : void 0),
1886
- children: [
1887
- prompt ? /* @__PURE__ */ jsx8(BodyNote, { children: prompt }) : null,
1888
- accepted ? /* @__PURE__ */ jsx8(BodyNote, { children: msg("timeline.toolRenderers.theVideoWillAppearHere") }) : item.output !== void 0 ? /* @__PURE__ */ jsx8(PayloadBlock, { label: msg("timeline.toolRenderers.output"), value: item.output }) : null
1889
- ]
1890
- }
1891
- );
1892
- }
1893
- function SandboxFilePublishRenderer({ item, loadRetainedArtifact }) {
1894
- const msg = useOpenGeniText();
1895
- const plain = useToolDetails() === "plain";
1896
- const { text: output, isError } = unwrapMcpOutput(item.output);
1897
- const receipt = parseSandboxFileArtifactReceipt(output);
1898
- const [downloadState, setDownloadState] = useState7("idle");
1899
- if (item.status === "running") {
1900
- return /* @__PURE__ */ jsx8(
1901
- ActivityDisclosure,
1902
- {
1903
- icon: /* @__PURE__ */ jsx8(DownloadIcon2, { className: ICON_SIZE }),
1904
- iconTone: "running",
1905
- title: msg("timeline.toolRenderers.publishingFile"),
1906
- running: true,
1907
- preview: /* @__PURE__ */ jsx8(RunningPreview, { children: msg("timeline.toolRenderers.retainingWorkspaceBytes") })
1908
- }
1909
- );
1910
- }
1911
- if (!receipt || isError || item.status === "failed") {
1912
- return /* @__PURE__ */ jsx8(GenericRenderer, { item });
1913
- }
1914
- const workspaceId = /^\/v1\/workspaces\/([0-9a-f-]+)\/artifacts\//.exec(
1915
- receipt.artifact.retrieval.path
1916
- )?.[1];
1917
- const openLink = workspaceId ? /* @__PURE__ */ jsx8(
1918
- "a",
1919
- {
1920
- href: `/workspaces/${workspaceId}/artifacts/files/${receipt.artifact.artifactId}`,
1921
- "aria-label": msg("timeline.toolRenderers.openFilenameInArtifacts", {
1922
- filename: receipt.filename
1923
- }),
1924
- className: "inline-flex min-h-7 items-center rounded-og-sm px-2 text-og-sm font-medium text-og-accent-strong hover:bg-og-surface-2 hover:underline focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-og-accent pointer-coarse:min-h-10",
1925
- onClick: (event) => event.stopPropagation(),
1926
- onKeyDown: (event) => event.stopPropagation(),
1927
- children: msg("timeline.toolRenderers.openInArtifacts")
1928
- }
1929
- ) : null;
1930
- const download = async () => {
1931
- if (!loadRetainedArtifact) {
1932
- setDownloadState("error");
1933
- return;
1934
- }
1935
- setDownloadState("loading");
1936
- let objectUrl = null;
1937
- try {
1938
- const source = await loadRetainedArtifact(receipt.artifact, new AbortController().signal);
1939
- if (!source) throw new Error("artifact unavailable");
1940
- const url = source instanceof Uint8Array ? objectUrl = URL.createObjectURL(
1941
- new Blob([source], {
1942
- type: receipt.artifact.contentType
1943
- })
1944
- ) : source.url;
1945
- const anchor = document.createElement("a");
1946
- anchor.href = url;
1947
- anchor.download = receipt.filename;
1948
- anchor.rel = "noopener";
1949
- anchor.click();
1950
- setDownloadState("idle");
1951
- } catch {
1952
- setDownloadState("error");
1953
- } finally {
1954
- const urlToRevoke = objectUrl;
1955
- if (urlToRevoke) setTimeout(() => URL.revokeObjectURL(urlToRevoke), 0);
1956
- }
1957
- };
1958
- const downloadButton = /* @__PURE__ */ jsxs4(
1959
- "button",
1960
- {
1961
- type: "button",
1962
- onClick: () => void download(),
1963
- disabled: downloadState === "loading",
1964
- className: "inline-flex items-center gap-1.5 rounded-og-sm border border-og-border px-2.5 py-1.5 text-og-sm font-medium text-og-fg transition-colors hover:border-og-border-strong hover:bg-og-surface-2 disabled:cursor-wait disabled:opacity-60",
1965
- children: [
1966
- /* @__PURE__ */ jsx8(DownloadIcon2, { className: "size-3.5" }),
1967
- downloadState === "loading" ? msg("timeline.toolRenderers.preparing") : downloadState === "error" ? msg("timeline.toolRenderers.retryDownload") : msg("timeline.toolRenderers.download")
1968
- ]
1969
- }
1970
- );
1971
- if (isRetainedImageContentType(receipt.artifact.contentType)) {
1972
- return /* @__PURE__ */ jsxs4(
1973
- RetainedSessionImageDisclosure,
1974
- {
1975
- artifact: receipt.artifact,
1976
- load: loadRetainedArtifact,
1977
- title: msg("timeline.toolRenderers.publishedFilename", { filename: receipt.filename }),
1978
- caption: receipt.filename,
1979
- noun: "image",
1980
- icon: /* @__PURE__ */ jsx8(ImageIcon2, { className: ICON_SIZE }),
1981
- lightboxLabel: msg("timeline.toolRenderers.image"),
1982
- batched: null,
1983
- failed: false,
1984
- cancelled: false,
1985
- filename: receipt.filename,
1986
- defaultOpen: true,
1987
- children: [
1988
- downloadButton,
1989
- openLink
1990
- ]
1991
- }
1992
- );
1993
- }
1994
- return /* @__PURE__ */ jsxs4(
1995
- ActivityDisclosure,
1996
- {
1997
- icon: /* @__PURE__ */ jsx8(DownloadIcon2, { className: ICON_SIZE }),
1998
- iconTone: "accent",
1999
- title: msg("timeline.toolRenderers.publishedFilename", { filename: receipt.filename }),
2000
- defaultOpen: true,
2001
- preview: formatBytes(receipt.artifact.originalBytes),
2002
- children: [
2003
- downloadButton,
2004
- openLink,
2005
- plain ? null : isPatchFilename(receipt.filename) ? /* @__PURE__ */ jsx8(
2006
- PatchApplyCommand,
2007
- {
2008
- artifact: receipt.artifact,
2009
- filename: receipt.filename,
2010
- load: loadRetainedArtifact
2011
- }
2012
- ) : null
2013
- ]
2014
- }
2015
- );
2016
- }
2017
- function publishedSiteReceipt(output) {
2018
- const { text, isError } = unwrapMcpOutput(output);
2019
- if (isError) return null;
2020
- const parsed = tryParseJson(text);
2021
- if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) return null;
2022
- const artifact = parsed.artifact;
2023
- const version = parsed.version;
2024
- if (!artifact || typeof artifact !== "object" || Array.isArray(artifact) || !version || typeof version !== "object" || Array.isArray(version)) {
2025
- return null;
2026
- }
2027
- const artifactRecord = artifact;
2028
- const versionRecord = version;
2029
- if (typeof artifactRecord.workspaceId !== "string" || typeof artifactRecord.id !== "string" || typeof artifactRecord.title !== "string" || typeof versionRecord.revision !== "number" || !Number.isInteger(versionRecord.revision) || versionRecord.revision < 1) {
2030
- return null;
2031
- }
2032
- return {
2033
- workspaceId: artifactRecord.workspaceId,
2034
- artifactId: artifactRecord.id,
2035
- title: artifactRecord.title,
2036
- revision: versionRecord.revision,
2037
- replayed: parsed.replayed === true
2038
- };
2039
- }
2040
- var SITE_OPEN_CLASS = "inline-flex min-h-7 items-center rounded-og-sm px-2 text-og-sm font-medium text-og-accent-strong hover:bg-og-surface-2 hover:underline focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-og-accent pointer-coarse:min-h-10";
2041
- function SiteOpenLink({ receipt }) {
2042
- const msg = useOpenGeniText();
2043
- const [pending, setPending] = useState7(false);
2044
- const [failed, setFailed] = useState7(false);
2045
- const resolution = useOpenGeniLinkResolver()?.({
2046
- kind: "site",
2047
- artifactId: receipt.artifactId,
2048
- workspaceId: receipt.workspaceId
2049
- });
2050
- const destination = resolution?.href ? defaultUrlTransform(resolution.href) : "";
2051
- if (destination) {
2052
- return /* @__PURE__ */ jsx8(
2053
- "a",
2054
- {
2055
- href: destination,
2056
- "aria-label": msg("timeline.toolRenderers.openTitle", { title: receipt.title }),
2057
- className: SITE_OPEN_CLASS,
2058
- onClick: (event) => event.stopPropagation(),
2059
- onKeyDown: (event) => event.stopPropagation(),
2060
- children: msg("timeline.toolRenderers.open")
2061
- }
2062
- );
2063
- }
2064
- if (resolution?.open) {
2065
- const open = resolution.open;
2066
- return /* @__PURE__ */ jsx8(
2067
- "button",
2068
- {
2069
- type: "button",
2070
- "aria-label": msg("timeline.toolRenderers.openTitle", { title: receipt.title }),
2071
- "aria-busy": pending,
2072
- disabled: pending,
2073
- className: SITE_OPEN_CLASS,
2074
- onClick: (event) => {
2075
- event.stopPropagation();
2076
- if (pending) return;
2077
- setPending(true);
2078
- setFailed(false);
2079
- void Promise.resolve().then(open).catch(() => setFailed(true)).finally(() => setPending(false));
2080
- },
2081
- onKeyDown: (event) => event.stopPropagation(),
2082
- children: pending ? msg("timeline.toolRenderers.opening") : failed ? msg("timeline.toolRenderers.retryOpen") : msg("timeline.toolRenderers.open")
2083
- }
2084
- );
2085
- }
2086
- return null;
2087
- }
2088
- function SiteArtifactRenderer({ item }) {
2089
- const msg = useOpenGeniText();
2090
- const leaf = mcpToolLeaf(item.name);
2091
- const publishingExisting = leaf === "artifacts_publish";
2092
- if (item.status === "running") {
2093
- return /* @__PURE__ */ jsx8(
2094
- ActivityDisclosure,
2095
- {
2096
- icon: /* @__PURE__ */ jsx8(PanelsTopLeftIcon2, { className: ICON_SIZE }),
2097
- iconTone: "running",
2098
- title: publishingExisting ? msg("timeline.toolRenderers.publishingSiteUpdate") : msg("timeline.toolRenderers.publishingSite"),
2099
- running: true,
2100
- preview: /* @__PURE__ */ jsx8(RunningPreview, { children: msg("timeline.toolRenderers.retainingSourceAndCompiledHtml") })
2101
- }
2102
- );
2103
- }
2104
- const receipt = publishedSiteReceipt(item.output);
2105
- if (!receipt || item.status === "failed") return /* @__PURE__ */ jsx8(GenericRenderer, { item });
2106
- return /* @__PURE__ */ jsx8(
2107
- ActivityDisclosure,
2108
- {
2109
- icon: /* @__PURE__ */ jsx8(PanelsTopLeftIcon2, { className: ICON_SIZE }),
2110
- iconTone: "accent",
2111
- title: publishingExisting ? msg("timeline.toolRenderers.updatedTitle", { title: receipt.title }) : msg("timeline.toolRenderers.publishedTitle", { title: receipt.title }),
2112
- media: /* @__PURE__ */ jsx8(SiteOpenLink, { receipt }),
2113
- children: /* @__PURE__ */ jsxs4(BodyNote, { children: [
2114
- msg("timeline.toolRenderers.versionRevisionIsLive", { revision: receipt.revision }),
2115
- receipt.replayed ? ` ${msg("timeline.toolRenderers.replayedFromTheOriginalPublication")}` : "."
2116
- ] })
2117
- }
2118
- );
2119
- }
2120
- function GeneratedImageDisclosure({
2121
- receipt,
2122
- load,
2123
- prompt,
2124
- failed,
2125
- cancelled
2126
- }) {
2127
- const msg = useOpenGeniText();
2128
- const state = useRetainedImageObjectUrl(receipt.artifact, load);
2129
- const dimensions = receipt.artifact.dimensions;
2130
- const title = failed ? msg("timeline.toolRenderers.imageGenerationFailed") : msg("timeline.toolRenderers.generatedImage");
2131
- const caption = prompt || msg("timeline.toolRenderers.generatedImageWidthHeight", {
2132
- width: dimensions.width,
2133
- height: dimensions.height
2134
- });
2135
- return /* @__PURE__ */ jsxs4(
2136
- ActivityDisclosure,
2137
- {
2138
- icon: /* @__PURE__ */ jsx8(ImageIcon2, { className: ICON_SIZE }),
2139
- iconTone: failed ? "failed" : state.kind === "ready" ? "accent" : "muted",
2140
- title,
2141
- defaultOpen: !failed && !cancelled,
2142
- failed,
2143
- cancelled,
2144
- preview: state.kind === "loading" ? msg("timeline.toolRenderers.loadingImage") : state.kind === "error" ? msg("timeline.toolRenderers.imageRetrievalFailed") : state.kind === "unavailable" ? `image ${state.label}` : truncatePreview(prompt, 88) || `${dimensions.width}\xD7${dimensions.height}`,
2145
- media: state.kind === "ready" ? /* @__PURE__ */ jsx8(
2146
- Thumbnail,
2147
- {
2148
- src: state.url,
2149
- caption,
2150
- alt: caption,
2151
- expandLabel: msg("timeline.toolRenderers.expandGeneratedImage"),
2152
- lightboxLabel: msg("timeline.toolRenderers.generatedImage")
2153
- }
2154
- ) : state.kind === "loading" ? /* @__PURE__ */ jsx8(MediaSkeleton, {}) : /* @__PURE__ */ jsx8(MediaEmpty, {}),
2155
- children: [
2156
- state.kind === "ready" ? /* @__PURE__ */ jsx8(
2157
- ScreenshotFigure,
2158
- {
2159
- src: state.url,
2160
- caption,
2161
- alt: caption,
2162
- expandLabel: msg("timeline.toolRenderers.expandGeneratedImage"),
2163
- lightboxLabel: msg("timeline.toolRenderers.generatedImage")
2164
- }
2165
- ) : state.kind === "loading" ? /* @__PURE__ */ jsx8(BodyNote, { children: msg("timeline.toolRenderers.loadingTheGeneratedImage") }) : state.kind === "unavailable" ? /* @__PURE__ */ jsx8(BodyNote, { children: msg("timeline.toolRenderers.imageLabel", { label: state.label }) }) : /* @__PURE__ */ jsx8(ImageRetrievalError, { retry: state.retry }),
2166
- /* @__PURE__ */ jsxs4(BodyNote, { children: [
2167
- dimensions.width,
2168
- "\xD7",
2169
- dimensions.height,
2170
- " \xB7 ",
2171
- receipt.sandboxPath
2172
- ] })
2173
- ]
2174
- }
2175
- );
2176
- }
2177
- function retainedImageFilename(artifact) {
2178
- const extension = artifact.contentType === "image/jpeg" ? "jpg" : artifact.contentType === "image/webp" ? "webp" : "png";
2179
- return `${artifact.kind}-${artifact.artifactId}.${extension}`;
2180
- }
2181
- var VIEW_IMAGE_ERRORS = (msg) => [
2182
- msg("timeline.toolRenderers.wasNotFound"),
2183
- msg("timeline.toolRenderers.isNotAFile"),
2184
- msg("timeline.toolRenderers.exceededTheAllowedSize"),
2185
- msg("timeline.toolRenderers.isNotASupportedImage"),
2186
- msg("timeline.toolRenderers.unableToReadImage")
2187
- ];
2188
- function ViewImageRenderer({ item, loadRetainedScreenshot }) {
2189
- const msg = useOpenGeniText();
2190
- const args = parseToolArgs(item.arguments);
2191
- const path = typeof args.path === "string" ? args.path : "";
2192
- const out = item.output;
2193
- const text = typeof out === "string" ? out : "";
2194
- const retained = retainedScreenshotMetadata(out);
2195
- const omittedMedia = mediaPreviewFact(out);
2196
- if (item.status === "running") {
2197
- return /* @__PURE__ */ jsx8(
2198
- ActivityDisclosure,
2199
- {
2200
- icon: /* @__PURE__ */ jsx8(ImageIcon2, { className: ICON_SIZE }),
2201
- iconTone: "running",
2202
- title: msg("timeline.toolRenderers.viewPathbasename", { pathBasename: pathBasename(path) }),
2203
- running: true,
2204
- preview: /* @__PURE__ */ jsx8(RunningPreview, { children: msg("timeline.toolRenderers.reading") }),
2205
- media: /* @__PURE__ */ jsx8(MediaSkeleton, {}),
2206
- children: /* @__PURE__ */ jsx8(BodyNote, { children: msg("timeline.toolRenderers.readingImage") })
2207
- }
2208
- );
2209
- }
2210
- const viewFailed = item.status === "failed";
2211
- const viewCancelled = item.status === "cancelled";
2212
- if (retained) {
2213
- const title = msg("timeline.toolRenderers.viewedPathbasename", {
2214
- pathBasename: pathBasename(path)
2215
- });
2216
- if (!retained.available) {
2217
- const state = retained.reason === "expired" || retained.reason === "deleted" ? retained.reason : "unavailable";
2218
- return /* @__PURE__ */ jsx8(
2219
- ActivityDisclosure,
2220
- {
2221
- icon: /* @__PURE__ */ jsx8(ImageIcon2, { className: ICON_SIZE }),
2222
- iconTone: viewFailed ? "failed" : "muted",
2223
- title: `${title} \xB7 ${state}`,
2224
- failed: viewFailed,
2225
- cancelled: viewCancelled,
2226
- preview: `image ${state}`,
2227
- media: /* @__PURE__ */ jsx8(MediaEmpty, {}),
2228
- children: /* @__PURE__ */ jsx8(BodyNote, { tone: viewFailed ? "error" : void 0, children: msg("timeline.toolRenderers.imageStateReplaceall", {
2229
- state,
2230
- replaceAll: retained.reason.replaceAll("_", " ")
2231
- }) })
2232
- }
2233
- );
2234
- }
2235
- return /* @__PURE__ */ jsx8(
2236
- RetainedSessionImageDisclosure,
2237
- {
2238
- artifact: retained,
2239
- load: loadRetainedScreenshot,
2240
- title,
2241
- caption: path || title,
2242
- noun: "image",
2243
- icon: /* @__PURE__ */ jsx8(ImageIcon2, { className: ICON_SIZE }),
2244
- lightboxLabel: msg("timeline.toolRenderers.image"),
2245
- batched: null,
2246
- failed: viewFailed,
2247
- cancelled: viewCancelled
2248
- }
2249
- );
2250
- }
2251
- const errMatch = VIEW_IMAGE_ERRORS(msg).find((p) => text.includes(p));
2252
- if (errMatch) {
2253
- const tooBig = text.includes("exceeded the allowed size");
2254
- return /* @__PURE__ */ jsx8(
2255
- ActivityDisclosure,
2256
- {
2257
- icon: /* @__PURE__ */ jsx8(ImageIcon2, { className: ICON_SIZE }),
2258
- iconTone: "failed",
2259
- title: msg("timeline.toolRenderers.viewPathbasename", { pathBasename: pathBasename(path) }),
2260
- chip: {
2261
- tone: "bad",
2262
- text: tooBig ? msg("timeline.toolRenderers.tooLarge") : msg("timeline.chip.error")
2263
- },
2264
- preview: text,
2265
- children: /* @__PURE__ */ jsx8(BodyNote, { tone: "error", children: text })
2266
- }
2267
- );
2268
- }
2269
- if (text.startsWith("OpenAI file reference:")) {
2270
- return /* @__PURE__ */ jsx8(
2271
- ActivityDisclosure,
2272
- {
2273
- icon: /* @__PURE__ */ jsx8(ImageIcon2, { className: ICON_SIZE }),
2274
- iconTone: viewFailed ? "failed" : "muted",
2275
- title: msg("timeline.toolRenderers.viewedPathbasename", {
2276
- pathBasename: pathBasename(path)
2277
- }),
2278
- failed: viewFailed,
2279
- cancelled: viewCancelled,
2280
- preview: path,
2281
- children: /* @__PURE__ */ jsx8(BodyNote, { children: text })
2282
- }
2283
- );
2284
- }
2285
- if (omittedMedia) {
2286
- return /* @__PURE__ */ jsx8(
2287
- ActivityDisclosure,
2288
- {
2289
- icon: /* @__PURE__ */ jsx8(ImageIcon2, { className: ICON_SIZE }),
2290
- iconTone: viewFailed ? "failed" : "muted",
2291
- title: msg("timeline.toolRenderers.viewedPathbasenameImageOmittedNot", {
2292
- pathBasename: pathBasename(path)
2293
- }),
2294
- failed: viewFailed,
2295
- cancelled: viewCancelled,
2296
- preview: msg("timeline.toolRenderers.inlineImageOmittedNotRetained"),
2297
- media: /* @__PURE__ */ jsx8(MediaEmpty, {}),
2298
- children: /* @__PURE__ */ jsx8(BodyNote, { children: msg("timeline.toolRenderers.theInlineMediatypeOutputWas", {
2299
- mediaType: omittedMedia.mediaType
2300
- }) })
2301
- }
2302
- );
2303
- }
2304
- if (text.includes("No image data")) {
2305
- return /* @__PURE__ */ jsx8(
2306
- ActivityDisclosure,
2307
- {
2308
- icon: /* @__PURE__ */ jsx8(ImageIcon2, { className: ICON_SIZE }),
2309
- iconTone: viewFailed ? "failed" : "muted",
2310
- title: msg("timeline.toolRenderers.viewedPathbasename", {
2311
- pathBasename: pathBasename(path)
2312
- }),
2313
- failed: viewFailed,
2314
- cancelled: viewCancelled,
2315
- preview: msg("timeline.toolRenderers.noImage"),
2316
- children: /* @__PURE__ */ jsx8(BodyNote, { children: viewFailed ? msg("timeline.toolRenderers.viewImageFailedNoImage") : viewCancelled ? msg("timeline.toolRenderers.viewImageInterrupted") : msg("timeline.toolRenderers.noImageTheSandboxSession") })
2317
- }
2318
- );
2319
- }
2320
- if (text.startsWith("data:")) {
2321
- return /* @__PURE__ */ jsx8(
2322
- ActivityDisclosure,
2323
- {
2324
- icon: /* @__PURE__ */ jsx8(ImageIcon2, { className: ICON_SIZE }),
2325
- iconTone: viewFailed ? "failed" : "accent",
2326
- title: msg("timeline.toolRenderers.viewedPathbasename", {
2327
- pathBasename: pathBasename(path)
2328
- }),
2329
- failed: viewFailed,
2330
- cancelled: viewCancelled,
2331
- media: /* @__PURE__ */ jsx8(Thumbnail, { src: text, caption: path, alt: path }),
2332
- children: /* @__PURE__ */ jsx8(ScreenshotFigure, { src: text, caption: path, alt: path })
2333
- }
2334
- );
2335
- }
2336
- return /* @__PURE__ */ jsx8(GenericRenderer, { item });
2337
- }
2338
- function SecretSetRenderer(props) {
2339
- return useToolDetails() === "plain" ? /* @__PURE__ */ jsx8(UnreviewedGenericRenderer, { ...props }) : /* @__PURE__ */ jsx8(FullSecretSetRenderer, { ...props });
2340
- }
2341
- function FullSecretSetRenderer({ item }) {
2342
- const msg = useOpenGeniText();
2343
- const args = parseToolArgs(item.arguments);
2344
- const name = typeof args.name === "string" ? args.name : "variable";
2345
- if (item.status === "running") {
2346
- return /* @__PURE__ */ jsx8(
2347
- ActivityDisclosure,
2348
- {
2349
- icon: /* @__PURE__ */ jsx8(KeyRoundIcon2, { className: ICON_SIZE }),
2350
- iconTone: "running",
2351
- title: msg("timeline.toolRenderers.setName", { name }),
2352
- running: true,
2353
- preview: /* @__PURE__ */ jsx8(RunningPreview, { children: msg("timeline.toolRenderers.setting") }),
2354
- children: /* @__PURE__ */ jsx8(PayloadBlock, { label: msg("timeline.toolRenderers.arguments"), value: args })
2355
- }
2356
- );
2357
- }
2358
- if (item.status === "failed") {
2359
- const errorText = typeof item.output === "string" ? item.output : null;
2360
- return /* @__PURE__ */ jsxs4(
2361
- ActivityDisclosure,
2362
- {
2363
- icon: /* @__PURE__ */ jsx8(KeyRoundIcon2, { className: ICON_SIZE }),
2364
- iconTone: "failed",
2365
- title: msg("timeline.toolRenderers.setName", { name }),
2366
- failed: true,
2367
- preview: errorText ?? msg("timeline.toolRenderers.variableWriteFailed"),
2368
- children: [
2369
- /* @__PURE__ */ jsx8(PayloadBlock, { label: msg("timeline.toolRenderers.arguments"), value: args }),
2370
- errorText ? /* @__PURE__ */ jsx8(PayloadBlock, { label: msg("timeline.toolRenderers.error"), value: errorText, failed: true }) : /* @__PURE__ */ jsx8(BodyNote, { tone: "error", children: msg("timeline.toolRenderers.theToolCallFailedWith") })
2371
- ]
2372
- }
2373
- );
2374
- }
2375
- return /* @__PURE__ */ jsxs4(
2376
- ActivityDisclosure,
2377
- {
2378
- icon: /* @__PURE__ */ jsx8(KeyRoundIcon2, { className: ICON_SIZE }),
2379
- iconTone: "muted",
2380
- title: msg("timeline.toolRenderers.setName", { name }),
2381
- cancelled: item.status === "cancelled",
2382
- preview: "exact value preserved",
2383
- children: [
2384
- /* @__PURE__ */ jsx8(PayloadBlock, { label: msg("timeline.toolRenderers.arguments"), value: args }),
2385
- /* @__PURE__ */ jsx8(BodyNote, { children: msg("timeline.toolRenderers.theConfiguredValueIsPreserved") })
2386
- ]
2387
- }
2388
- );
2389
- }
2390
- function ToolSearchRenderer(props) {
2391
- return useToolDetails() === "plain" ? /* @__PURE__ */ jsx8(UnreviewedGenericRenderer, { ...props }) : /* @__PURE__ */ jsx8(FullToolSearchRenderer, { ...props });
2392
- }
2393
- function FullToolSearchRenderer({ item }) {
2394
- const msg = useOpenGeniText();
2395
- const query = toolSearchQuery(item);
2396
- const icon = /* @__PURE__ */ jsx8(PackageSearchIcon2, { className: ICON_SIZE });
2397
- const running = item.status === "running";
2398
- const queryPreview = query ? truncatePreview(query, 64) : "";
2399
- if (running) {
2400
- return /* @__PURE__ */ jsxs4(
2401
- ActivityDisclosure,
2402
- {
2403
- icon,
2404
- iconTone: "running",
2405
- title: msg("timeline.toolRenderers.lookingUpTools"),
2406
- running: true,
2407
- preview: queryPreview ? /* @__PURE__ */ jsx8(RunningPreview, { children: queryPreview }) : /* @__PURE__ */ jsx8(RunningPreview, { children: msg("timeline.toolRenderers.matchingCapabilities") }),
2408
- children: [
2409
- query ? /* @__PURE__ */ jsx8(BodyNote, { children: msg("timeline.toolRenderers.capabilityQueryQuery", { query }) }) : null,
2410
- /* @__PURE__ */ jsx8(
2411
- PayloadBlock,
2412
- {
2413
- label: msg("timeline.toolRenderers.arguments"),
2414
- value: parseToolArgs(item.arguments)
2415
- }
2416
- )
2417
- ]
2418
- }
2419
- );
2420
- }
2421
- const { text: outText, isError } = unwrapMcpOutput(item.output);
2422
- if ((isError || item.status === "failed") && item.status !== "cancelled") {
2423
- return /* @__PURE__ */ jsxs4(
2424
- ActivityDisclosure,
2425
- {
2426
- icon,
2427
- iconTone: "failed",
2428
- title: msg("timeline.toolRenderers.toolLookupFailed"),
2429
- failed: true,
2430
- preview: truncatePreview(outText, 80) || queryPreview || msg("timeline.toolRenderers.lookupFailed"),
2431
- children: [
2432
- query ? /* @__PURE__ */ jsx8(BodyNote, { children: msg("timeline.toolRenderers.capabilityQueryQuery", { query }) }) : null,
2433
- /* @__PURE__ */ jsx8(
2434
- PayloadBlock,
2435
- {
2436
- label: msg("timeline.toolRenderers.arguments"),
2437
- value: parseToolArgs(item.arguments)
2438
- }
2439
- ),
2440
- /* @__PURE__ */ jsx8(PayloadBlock, { label: msg("timeline.toolRenderers.error"), value: outText, failed: true })
2441
- ]
2442
- }
2443
- );
2444
- }
2445
- const tools = parseDisclosedTools(item.output);
2446
- const preview = toolSearchPreview(msg, tools, item.status === "cancelled");
2447
- return /* @__PURE__ */ jsxs4(
2448
- ActivityDisclosure,
2449
- {
2450
- icon,
2451
- iconTone: "muted",
2452
- title: msg("timeline.toolRenderers.lookedUpTools"),
2453
- cancelled: item.status === "cancelled",
2454
- preview,
2455
- children: [
2456
- query ? /* @__PURE__ */ jsx8(BodyNote, { children: msg("timeline.toolRenderers.capabilityQueryQuery", { query }) }) : null,
2457
- tools && tools.length > 0 ? /* @__PURE__ */ jsxs4("ul", { className: "grid gap-1.5", children: [
2458
- tools.slice(0, 12).map((tool) => /* @__PURE__ */ jsxs4("li", { className: "flex min-w-0 items-baseline gap-2", children: [
2459
- tool.source ? /* @__PURE__ */ jsx8("span", { className: "shrink-0 text-og-xs text-og-fg-subtle", children: tool.source }) : null,
2460
- /* @__PURE__ */ jsx8("span", { className: "truncate font-mono text-og-sm text-og-fg", children: tool.leaf })
2461
- ] }, tool.name)),
2462
- tools.length > 12 ? /* @__PURE__ */ jsxs4("li", { className: "text-og-xs text-og-fg-muted", children: [
2463
- "+",
2464
- tools.length - 12,
2465
- " ",
2466
- msg("timeline.toolRenderers.more")
2467
- ] }) : null
2468
- ] }) : tools && tools.length === 0 ? /* @__PURE__ */ jsx8(BodyNote, { children: msg("timeline.toolRenderers.noDeferredToolsMatchedThis") }) : null,
2469
- /* @__PURE__ */ jsx8(
2470
- PayloadBlock,
2471
- {
2472
- label: msg("timeline.toolRenderers.arguments"),
2473
- value: parseToolArgs(item.arguments)
2474
- }
2475
- ),
2476
- tools == null && outText ? /* @__PURE__ */ jsx8(PayloadBlock, { label: msg("timeline.toolRenderers.result"), value: outText }) : null
2477
- ]
2478
- }
2479
- );
2480
- }
2481
- function DocsSearchRenderer(props) {
2482
- return useToolDetails() === "plain" ? /* @__PURE__ */ jsx8(UnreviewedGenericRenderer, { ...props }) : /* @__PURE__ */ jsx8(FullDocsSearchRenderer, { ...props });
2483
- }
2484
- function FullDocsSearchRenderer({ item }) {
2485
- const msg = useOpenGeniText();
2486
- const args = parseToolArgs(item.arguments);
2487
- const query = typeof args.query === "string" ? args.query.trim() : "";
2488
- const title = query ? msg("timeline.toolRenderers.searchTruncatepreview", {
2489
- truncatePreview: truncatePreview(query, 48)
2490
- }) : toolDisplayName(msg, item.name, item.display);
2491
- const running = item.status === "running";
2492
- if (running) {
2493
- return /* @__PURE__ */ jsx8(
2494
- ActivityDisclosure,
2495
- {
2496
- icon: /* @__PURE__ */ jsx8(FileSearchIcon2, { className: ICON_SIZE }),
2497
- iconTone: "running",
2498
- title,
2499
- running: true,
2500
- preview: /* @__PURE__ */ jsx8(RunningPreview, { children: msg("timeline.toolRenderers.searching") }),
2501
- children: /* @__PURE__ */ jsx8(PayloadBlock, { label: msg("timeline.toolRenderers.arguments"), value: args })
2502
- }
2503
- );
2504
- }
2505
- const { text: outText, isError } = unwrapMcpOutput(item.output);
2506
- if ((isError || item.status === "failed") && item.status !== "cancelled") {
2507
- return /* @__PURE__ */ jsxs4(
2508
- ActivityDisclosure,
2509
- {
2510
- icon: /* @__PURE__ */ jsx8(FileSearchIcon2, { className: ICON_SIZE }),
2511
- iconTone: "failed",
2512
- title,
2513
- failed: true,
2514
- preview: truncatePreview(outText, 80) || msg("timeline.toolRenderers.searchFailed"),
2515
- children: [
2516
- /* @__PURE__ */ jsx8(PayloadBlock, { label: msg("timeline.toolRenderers.arguments"), value: args }),
2517
- /* @__PURE__ */ jsx8(PayloadBlock, { label: msg("timeline.toolRenderers.error"), value: outText, failed: true })
2518
- ]
2519
- }
2520
- );
2521
- }
2522
- const hits = parseSearchHits(msg, outText);
2523
- const preview = item.status === "cancelled" ? void 0 : hits ? hits.length === 0 ? msg("timeline.toolRenderers.noHits") : msg("counts.hits", { count: hits.length }) : msg("timeline.toolRenderers.done");
2524
- return /* @__PURE__ */ jsxs4(
2525
- ActivityDisclosure,
2526
- {
2527
- icon: /* @__PURE__ */ jsx8(FileSearchIcon2, { className: ICON_SIZE }),
2528
- iconTone: "muted",
2529
- title,
2530
- cancelled: item.status === "cancelled",
2531
- preview,
2532
- children: [
2533
- hits && hits.length > 0 ? /* @__PURE__ */ jsx8("ul", { className: "grid gap-2", children: hits.slice(0, 8).map((hit) => /* @__PURE__ */ jsxs4("li", { className: "min-w-0", children: [
2534
- /* @__PURE__ */ jsx8("div", { className: "truncate text-og-sm font-medium text-og-fg", children: hit.title }),
2535
- hit.snippet ? /* @__PURE__ */ jsx8("div", { className: "mt-0.5 line-clamp-2 text-og-xs text-og-fg-muted", children: hit.snippet }) : null
2536
- ] }, `${hit.title}\0${hit.snippet}`)) }) : null,
2537
- /* @__PURE__ */ jsx8(PayloadBlock, { label: msg("timeline.toolRenderers.arguments"), value: args }),
2538
- /* @__PURE__ */ jsx8(PayloadBlock, { label: msg("timeline.toolRenderers.result"), value: outText })
2539
- ]
2540
- }
2541
- );
2542
- }
2543
- function SetSessionTitleRenderer(props) {
2544
- return useToolDetails() === "plain" ? /* @__PURE__ */ jsx8(UnreviewedGenericRenderer, { ...props }) : /* @__PURE__ */ jsx8(FullSetSessionTitleRenderer, { ...props });
2545
- }
2546
- function FullSetSessionTitleRenderer({ item }) {
2547
- const msg = useOpenGeniText();
2548
- const args = parseToolArgs(item.arguments);
2549
- const titleArg = typeof args.title === "string" ? args.title.trim() : "";
2550
- const display = toolDisplayName(msg, item.name, item.display);
2551
- const previewTitle = titleArg ? truncatePreview(titleArg, 72) : "";
2552
- const icon = /* @__PURE__ */ jsx8(MessagesSquareIcon2, { className: ICON_SIZE });
2553
- if (item.status === "running") {
2554
- return /* @__PURE__ */ jsx8(
2555
- ActivityDisclosure,
2556
- {
2557
- icon,
2558
- iconTone: "running",
2559
- title: display,
2560
- running: true,
2561
- preview: previewTitle ? /* @__PURE__ */ jsx8(RunningPreview, { children: previewTitle }) : /* @__PURE__ */ jsx8(RunningPreview, { children: msg("timeline.toolRenderers.settingTitle") }),
2562
- children: /* @__PURE__ */ jsx8(PayloadBlock, { label: msg("timeline.toolRenderers.arguments"), value: args })
2563
- }
2564
- );
2565
- }
2566
- const { text: outText, isError } = unwrapMcpOutput(item.output);
2567
- if ((isError || item.status === "failed") && item.status !== "cancelled") {
2568
- return /* @__PURE__ */ jsxs4(
2569
- ActivityDisclosure,
2570
- {
2571
- icon,
2572
- iconTone: "failed",
2573
- title: display,
2574
- failed: true,
2575
- preview: truncatePreview(outText, 80) || msg("timeline.toolRenderers.renameFailed"),
2576
- children: [
2577
- /* @__PURE__ */ jsx8(PayloadBlock, { label: msg("timeline.toolRenderers.arguments"), value: args }),
2578
- /* @__PURE__ */ jsx8(PayloadBlock, { label: msg("timeline.toolRenderers.error"), value: outText, failed: true })
2579
- ]
2580
- }
2581
- );
2582
- }
2583
- let settledTitle = previewTitle;
2584
- if (!settledTitle) {
2585
- const parsed = tryParseJson(outText);
2586
- if (parsed && typeof parsed === "object" && !Array.isArray(parsed)) {
2587
- const fromResult = parsed.title;
2588
- if (typeof fromResult === "string" && fromResult.trim()) {
2589
- settledTitle = truncatePreview(fromResult.trim(), 72);
2590
- }
2591
- }
2592
- }
2593
- return /* @__PURE__ */ jsxs4(
2594
- ActivityDisclosure,
2595
- {
2596
- icon,
2597
- iconTone: "muted",
2598
- title: display,
2599
- cancelled: item.status === "cancelled",
2600
- preview: item.status === "cancelled" ? void 0 : settledTitle || void 0,
2601
- children: [
2602
- /* @__PURE__ */ jsx8(PayloadBlock, { label: msg("timeline.toolRenderers.arguments"), value: args }),
2603
- outText ? /* @__PURE__ */ jsx8(PayloadBlock, { label: msg("timeline.toolRenderers.result"), value: outText }) : null
2604
- ]
2605
- }
2606
- );
2607
- }
2608
- function MemoryProposeRenderer(props) {
2609
- return useToolDetails() === "plain" ? /* @__PURE__ */ jsx8(UnreviewedGenericRenderer, { ...props }) : /* @__PURE__ */ jsx8(FullMemoryProposeRenderer, { ...props });
2610
- }
2611
- function FullMemoryProposeRenderer({ item }) {
2612
- const msg = useOpenGeniText();
2613
- const args = parseToolArgs(item.arguments);
2614
- const text = typeof args.text === "string" ? args.text.trim() : "";
2615
- const title = msg("timeline.toolRenderers.proposeMemory");
2616
- const running = item.status === "running";
2617
- if (running) {
2618
- return /* @__PURE__ */ jsx8(
2619
- ActivityDisclosure,
2620
- {
2621
- icon: /* @__PURE__ */ jsx8(BrainCircuitIcon3, { className: ICON_SIZE }),
2622
- iconTone: "running",
2623
- title,
2624
- running: true,
2625
- preview: /* @__PURE__ */ jsx8(RunningPreview, { children: msg("timeline.toolRenderers.proposing") }),
2626
- children: /* @__PURE__ */ jsx8(PayloadBlock, { label: msg("timeline.toolRenderers.arguments"), value: args })
2627
- }
2628
- );
2629
- }
2630
- const { text: outText, isError } = unwrapMcpOutput(item.output);
2631
- if ((isError || item.status === "failed") && item.status !== "cancelled") {
2632
- return /* @__PURE__ */ jsxs4(
2633
- ActivityDisclosure,
2634
- {
2635
- icon: /* @__PURE__ */ jsx8(BrainCircuitIcon3, { className: ICON_SIZE }),
2636
- iconTone: "failed",
2637
- title,
2638
- failed: true,
2639
- preview: truncatePreview(outText, 80) || msg("timeline.toolRenderers.proposeFailed"),
2640
- children: [
2641
- text ? /* @__PURE__ */ jsx8(BodyNote, { children: text }) : null,
2642
- /* @__PURE__ */ jsx8(PayloadBlock, { label: msg("timeline.toolRenderers.error"), value: outText, failed: true })
2643
- ]
2644
- }
2645
- );
2646
- }
2647
- return /* @__PURE__ */ jsxs4(
2648
- ActivityDisclosure,
2649
- {
2650
- icon: /* @__PURE__ */ jsx8(BrainCircuitIcon3, { className: ICON_SIZE }),
2651
- iconTone: "muted",
2652
- title,
2653
- cancelled: item.status === "cancelled",
2654
- preview: text ? truncatePreview(text, 90) : msg("timeline.toolRenderers.done"),
2655
- children: [
2656
- text ? /* @__PURE__ */ jsx8(BodyNote, { children: text }) : null,
2657
- /* @__PURE__ */ jsx8(PayloadBlock, { label: msg("timeline.toolRenderers.result"), value: outText })
2658
- ]
2659
- }
2660
- );
2661
- }
2662
- function GenericRenderer(props) {
2663
- const reviewed = useHasToolReview(props.item.callId);
2664
- if (reviewed && props.item.callId) return /* @__PURE__ */ jsx8(ReviewedGenericRenderer, { ...props });
2665
- return /* @__PURE__ */ jsx8(UnreviewedGenericRenderer, { ...props });
2666
- }
2667
- var REVIEW_CHIP = (msg) => ({
2668
- rejected: { tone: "interrupted", text: msg("timeline.chip.declined") },
2669
- cancelled: { tone: "interrupted", text: msg("timeline.toolRenderers.notRun") },
2670
- expired: { tone: "interrupted", text: msg("timeline.chip.expired") },
2671
- stale: { tone: "interrupted", text: msg("timeline.toolRenderers.notRun") },
2672
- revoked: { tone: "interrupted", text: msg("timeline.toolRenderers.notRun") },
2673
- blocked: { tone: "interrupted", text: msg("timeline.chip.blocked") },
2674
- unknown: { tone: "bad", text: msg("timeline.toolRenderers.outcomeUnknown") },
2675
- partial: { tone: "bad", text: msg("timeline.toolRenderers.partlyDone") },
2676
- failed: { tone: "bad", text: msg("timeline.chip.failed") }
2677
- });
2678
- function ReviewedGenericRenderer(props) {
2679
- const msg = useOpenGeniText();
2680
- const { item } = props;
2681
- const { review: savedReview, onViewDetails } = useRecordedToolReview(item.callId);
2682
- const review = useMemo2(
2683
- () => savedReview ? redactDeep(
2684
- savedReview,
2685
- signedValuesDeep([savedReview, item.arguments, item.output, item.raw])
2686
- ) : null,
2687
- [savedReview, item.arguments, item.output, item.raw]
2688
- );
2689
- const logo = useToolConnectorLogo(item.display);
2690
- if (!review) return /* @__PURE__ */ jsx8(UnreviewedGenericRenderer, { ...props });
2691
- const ReviewIcon = toolIcon(genericToolIconKind(item.name));
2692
- const icon = /* @__PURE__ */ jsx8(ConnectorLogoIcon, { src: logo, fallback: /* @__PURE__ */ jsx8(ReviewIcon, { className: ICON_SIZE }) });
2693
- const waiting = review.status === "pending";
2694
- const running = !waiting && (review.status === "executing" || review.status === "approved") && item.status === "running";
2695
- const { text: outText, isError } = unwrapMcpOutput(retainedToolResultImages(item.output).output);
2696
- const chip = REVIEW_CHIP(msg)[review.status] ?? (isError && !running && !waiting ? { tone: "bad", text: msg("timeline.chip.error") } : void 0);
2697
- return /* @__PURE__ */ jsxs4(
2698
- ActivityDisclosure,
2699
- {
2700
- icon,
2701
- iconTone: chip?.tone === "bad" ? "failed" : waiting ? "accent" : "muted",
2702
- title: review.title,
2703
- running,
2704
- chip,
2705
- preview: waiting ? msg("timeline.toolRenderers.waitingForYourApproval") : running ? /* @__PURE__ */ jsx8(RunningPreview, { children: msg("timeline.toolRenderers.running") }) : item.display?.connector ? (
2706
- // The logo names the connector; only a second account needs words.
2707
- item.display.accountLabel ?? void 0
2708
- ) : review.accountLabel ?? void 0,
2709
- children: [
2710
- /* @__PURE__ */ jsx8("div", { className: "py-1", "data-approval-id": item.callId, "data-review-origin": "history", children: /* @__PURE__ */ jsx8(
2711
- ToolActionReviewCard,
2712
- {
2713
- bare: true,
2714
- review: { ...review, availableActions: [] },
2715
- onViewDetails
2716
- }
2717
- ) }),
2718
- outText ? /* @__PURE__ */ jsx8(
2719
- PayloadBlock,
2720
- {
2721
- label: msg("timeline.toolRenderers.result"),
2722
- value: outText,
2723
- failed: isError
2724
- }
2725
- ) : null
2726
- ]
2727
- }
2728
- );
2729
- }
2730
- var LazyPaymentPageCard = lazy2(
2731
- () => import("./payment-page-card-3LTSFJGN.js").then((module) => ({ default: module.PaymentPageCard }))
2732
- );
2733
- function AppActionCallRenderer(props) {
2734
- const page = paymentPageOf(props.item);
2735
- return page ? /* @__PURE__ */ jsx8(LazyPart, { children: /* @__PURE__ */ jsx8(LazyPaymentPageCard, { page }) }) : /* @__PURE__ */ jsx8(GenericRenderer, { ...props });
2736
- }
2737
- function KnowledgeSaveRenderer({ item }) {
2738
- const output = unwrapMcpOutput(item.output);
2739
- const parsed = tryParseJson(output.text);
2740
- if (item.status === "running" || output.isError || !parsed || typeof parsed !== "object")
2741
- return /* @__PURE__ */ jsx8(GenericRenderer, { item });
2742
- const value = parsed;
2743
- const receipt = value.status === "retained" ? value.receipt : value;
2744
- if (!receipt || typeof receipt.entryId !== "string" || !["published", "pending", "rejected", "archived"].includes(String(receipt.outcome)))
2745
- return /* @__PURE__ */ jsx8(GenericRenderer, { item });
2746
- const args = parseToolArgs(item.arguments);
2747
- const entry = args.entry;
2748
- return /* @__PURE__ */ jsx8(
2749
- KnowledgeReceiptRow,
2750
- {
2751
- outcome: receipt.outcome,
2752
- entryId: receipt.entryId,
2753
- title: typeof entry?.title === "string" ? entry.title : typeof value.filename === "string" ? value.filename : void 0,
2754
- source: value.status === "retained" || value.retained === true
2755
- }
2756
- );
2757
- }
2758
- var BASE_ENTRIES = [
2759
- ...[
2760
- "knowledge_save",
2761
- "knowledge_archive",
2762
- "knowledge_retain_file",
2763
- "knowledge_retain_message",
2764
- "task_note_promote_knowledge"
2765
- ].flatMap(
2766
- (name) => [name, `opengeni__${name}`, `mcp__opengeni__${name}`].map((trustedName) => ({
2767
- match: "name",
2768
- name: trustedName,
2769
- matchPrefixedLeaf: false,
2770
- render: KnowledgeSaveRenderer
2771
- }))
2772
- ),
2773
- // Only the Opengeni server's own app actions: a page another server returns
2774
- // is never drawn as a payment button. Spelled out here, like the knowledge
2775
- // tools above, because this registry is built while its chunk loads and the
2776
- // payment-page parser lives in a lazily shared chunk (the same names as its
2777
- // TRUSTED_APP_ACTION_CALL_NAMES, which a test keeps equal).
2778
- ...["admin_action_call", "opengeni__admin_action_call", "mcp__opengeni__admin_action_call"].map(
2779
- (trustedName) => ({
2780
- match: "name",
2781
- name: trustedName,
2782
- matchPrefixedLeaf: false,
2783
- render: AppActionCallRenderer
2784
- })
2785
- ),
2786
- // Provider-native items carry `raw.type` on the wire — this is their source of
2787
- // truth and is consulted first by the registry.
2788
- { match: "rawType", type: "apply_patch_call", render: ApplyPatchRenderer },
2789
- { match: "rawType", type: "computer_call", render: ComputerCallRenderer },
2790
- { match: "rawType", type: "tool_search_call", render: ToolSearchRenderer },
2791
- // First-party sandbox + MCP tools resolve by name (exact or MCP leaf).
2792
- { match: "name", name: "exec_command", render: ExecRenderer },
2793
- { match: "name", name: "request_human_input", render: AskRenderer },
2794
- { match: "name", name: "run_on", render: RunOnRenderer },
2795
- { match: "name", name: "sandboxes_list", render: MachineRenderer },
2796
- { match: "name", name: "sandbox_swap", render: MachineRenderer },
2797
- { match: "name", name: "computer_open", render: MachineRenderer },
2798
- { match: "name", name: "computer_observe", render: MachineRenderer },
2799
- { match: "name", name: "computer_act", render: MachineRenderer },
2800
- { match: "name", name: "write_stdin", render: WriteStdinRenderer },
2801
- { match: "name", name: "apply_patch_call", render: ApplyPatchRenderer },
2802
- { match: "name", name: "apply_patch", render: ApplyPatchRenderer },
2803
- { match: "name", name: "computer_call", render: ComputerCallRenderer },
2804
- {
2805
- match: "name",
2806
- name: "browser_screenshot",
2807
- render: BrowserScreenshotRenderer
2808
- },
2809
- { match: "name", name: "browser_observe", render: BrowserScreenshotRenderer },
2810
- { match: "name", name: "browser_act", render: BrowserScreenshotRenderer },
2811
- // Function-mode computer tools (codex / chat-wire transports).
2812
- { match: "name", name: "computer_screenshot", render: ComputerCallRenderer },
2813
- { match: "name", name: "computer_click", render: ComputerCallRenderer },
2814
- {
2815
- match: "name",
2816
- name: "computer_double_click",
2817
- render: ComputerCallRenderer
2818
- },
2819
- { match: "name", name: "computer_move", render: ComputerCallRenderer },
2820
- { match: "name", name: "computer_scroll", render: ComputerCallRenderer },
2821
- { match: "name", name: "computer_type", render: ComputerCallRenderer },
2822
- { match: "name", name: "computer_keypress", render: ComputerCallRenderer },
2823
- { match: "name", name: "computer_drag", render: ComputerCallRenderer },
2824
- { match: "name", name: "web_search_call", render: WebSearchRenderer },
2825
- {
2826
- match: "name",
2827
- name: "image_generation_call",
2828
- render: GeneratedImageRenderer
2829
- },
2830
- { match: "name", name: "generate_image", render: GeneratedImageRenderer },
2831
- { match: "name", name: "generate_video", render: GeneratedVideoRenderer },
2832
- { match: "name", name: "tool_search", render: ToolSearchRenderer },
2833
- { match: "name", name: "view_image", render: ViewImageRenderer },
2834
- {
2835
- match: "name",
2836
- name: "sandbox_file_publish",
2837
- render: SandboxFilePublishRenderer
2838
- },
2839
- {
2840
- match: "name",
2841
- name: "artifacts_create",
2842
- render: SiteArtifactRenderer,
2843
- matchPrefixedLeaf: false
2844
- },
2845
- {
2846
- match: "name",
2847
- name: "artifacts_publish",
2848
- render: SiteArtifactRenderer,
2849
- matchPrefixedLeaf: false
2850
- },
2851
- {
2852
- match: "name",
2853
- name: "opengeni__artifacts_create",
2854
- render: SiteArtifactRenderer,
2855
- matchPrefixedLeaf: false
2856
- },
2857
- {
2858
- match: "name",
2859
- name: "opengeni__artifacts_publish",
2860
- render: SiteArtifactRenderer,
2861
- matchPrefixedLeaf: false
2862
- },
2863
- {
2864
- match: "name",
2865
- name: "environment_set_variable",
2866
- render: SecretSetRenderer
2867
- },
2868
- {
2869
- match: "name",
2870
- name: "variable_set_set_variable",
2871
- render: SecretSetRenderer
2872
- },
2873
- { match: "name", name: "search_documents", render: DocsSearchRenderer },
2874
- { match: "name", name: "knowledge_search", render: DocsSearchRenderer },
2875
- { match: "name", name: "memory_propose", render: MemoryProposeRenderer },
2876
- { match: "name", name: "set_session_title", render: SetSessionTitleRenderer },
2877
- {
2878
- match: "name",
2879
- name: "set_other_session_title",
2880
- render: SetSessionTitleRenderer
2881
- }
2882
- ];
2883
- var PRESENTATION_RENDERERS = /* @__PURE__ */ new Map([
2884
- [ExecRenderer, "exec"],
2885
- [WriteStdinRenderer, "write_stdin"],
2886
- [ApplyPatchRenderer, "apply_patch"],
2887
- [GenericRenderer, "generic"],
2888
- [AppActionCallRenderer, "generic"]
2889
- ]);
2890
- function rendersToolOutputPreview(renderer, item) {
2891
- if (!item.outputPreview) return true;
2892
- return PRESENTATION_RENDERERS.get(renderer) === presentedToolKind(item) && presentsToolOutputPreview(item);
2893
- }
2894
- var defaultToolRegistry = createToolRegistry(BASE_ENTRIES, GenericRenderer);
2895
- function createDefaultToolRegistry(options = {}) {
2896
- return createToolRegistry(BASE_ENTRIES, GenericRenderer, options);
2897
- }
2898
-
2899
- // src/timeline/startup-preference.ts
2900
- import { useSyncExternalStore as useSyncExternalStore2 } from "react";
2901
- var KEY = "opengeni:startup-details:v1";
2902
- var EVENT = "opengeni:startup-details-changed";
2903
- var fallback = false;
2904
- function snapshot() {
2905
- try {
2906
- return window.localStorage.getItem(KEY) === "true";
2907
- } catch {
2908
- return fallback;
2909
- }
2910
- }
2911
- function subscribe(listener) {
2912
- window.addEventListener(EVENT, listener);
2913
- window.addEventListener("storage", listener);
2914
- return () => {
2915
- window.removeEventListener(EVENT, listener);
2916
- window.removeEventListener("storage", listener);
2917
- };
2918
- }
2919
- function setStartupDetails(value) {
2920
- fallback = value;
2921
- try {
2922
- window.localStorage.setItem(KEY, String(value));
2923
- } catch {
2924
- }
2925
- window.dispatchEvent(new Event(EVENT));
2926
- }
2927
- function useStartupDetails() {
2928
- return useSyncExternalStore2(subscribe, snapshot, () => false);
2929
- }
2930
-
2931
- // src/timeline/agent-row.tsx
2932
- import { ArrowUpRightIcon, ChevronRightIcon as ChevronRightIcon2 } from "lucide-react";
2933
- import { useContext as useContext6, useState as useState8 } from "react";
2934
- import { Fragment as Fragment4, jsx as jsx9, jsxs as jsxs5 } from "react/jsx-runtime";
2935
- function AgentRow({
2936
- icon,
2937
- title,
2938
- preview,
2939
- previewLines = 1,
2940
- meta,
2941
- sessionId,
2942
- onOpenSession,
2943
- running,
2944
- failed,
2945
- cancelled,
2946
- children
2947
- }) {
2948
- const t = useOpenGeniText();
2949
- const compact = useContext6(CompactActivityContext);
2950
- const forcedDefaultOpen = useForcedDefaultOpen();
2951
- const [open, setOpen] = useState8(forcedDefaultOpen ?? false);
2952
- if (compact) {
2953
- return /* @__PURE__ */ jsx9(
2954
- ActivityDisclosure,
2955
- {
2956
- icon,
2957
- title: title.text,
2958
- preview: preview ?? void 0,
2959
- running,
2960
- failed,
2961
- cancelled
2962
- }
2963
- );
2964
- }
2965
- const hasBody = children != null;
2966
- const canOpen = Boolean(sessionId && onOpenSession);
2967
- const openLabel = title.name ? t("timeline.agentRow.openName", { name: title.name }) : t("timeline.agentRow.openAgentSession");
2968
- const status = failed ? "failed" : cancelled ? "cancelled" : running ? "running" : void 0;
2969
- const inner = /* @__PURE__ */ jsxs5(Fragment4, { children: [
2970
- hasBody ? /* @__PURE__ */ jsx9(
2971
- ChevronRightIcon2,
2972
- {
2973
- "aria-hidden": true,
2974
- className: "mt-[3px] size-3.5 shrink-0 text-og-fg-subtle transition-transform duration-[var(--_og-duration-disclose)] ease-og-in-out group-data-[state=open]/agent:rotate-90"
2975
- }
2976
- ) : /* @__PURE__ */ jsx9("span", { className: "size-3.5 shrink-0", "aria-hidden": true }),
2977
- /* @__PURE__ */ jsx9(
2978
- "span",
2979
- {
2980
- "aria-hidden": true,
2981
- className: cn(
2982
- "mt-[3px] shrink-0 [&_svg]:size-3.5",
2983
- failed ? "text-og-status-failed" : "text-og-fg-subtle"
2984
- ),
2985
- children: icon
2986
- }
2987
- ),
2988
- /* @__PURE__ */ jsxs5("span", { className: "min-w-0 flex-1", children: [
2989
- /* @__PURE__ */ jsxs5("span", { className: "flex min-w-0 items-baseline gap-2", children: [
2990
- /* @__PURE__ */ jsx9(
2991
- ShimmerText,
2992
- {
2993
- active: Boolean(running),
2994
- className: cn(
2995
- "min-w-0 truncate text-og-base leading-5",
2996
- failed && "text-og-status-failed"
2997
- ),
2998
- children: title.name ? /* @__PURE__ */ jsxs5(Fragment4, { children: [
2999
- title.before ? /* @__PURE__ */ jsx9("span", { className: "text-og-fg-muted", children: title.before }) : null,
3000
- /* @__PURE__ */ jsx9("span", { className: cn("font-medium", failed ? void 0 : "text-og-fg"), children: title.name }),
3001
- title.after ? /* @__PURE__ */ jsx9("span", { className: "text-og-fg-muted", children: title.after }) : null
3002
- ] }) : /* @__PURE__ */ jsx9("span", { className: cn("font-medium", failed ? void 0 : "text-og-fg"), children: title.text })
3003
- }
3004
- ),
3005
- meta ? /* @__PURE__ */ jsx9("span", { className: "shrink-0 text-og-xs text-og-fg-subtle tabular-nums", children: meta }) : null
3006
- ] }),
3007
- preview && !open ? /* @__PURE__ */ jsx9(
3008
- "span",
3009
- {
3010
- "data-og-agent-preview": "",
3011
- className: cn(
3012
- "mt-0.5 block text-og-sm leading-5 text-og-fg-muted",
3013
- previewLines === 2 ? "line-clamp-2 break-words" : "truncate"
3014
- ),
3015
- children: preview
3016
- }
3017
- ) : null
3018
- ] }),
3019
- failed ? /* @__PURE__ */ jsxs5("span", { className: "inline-flex shrink-0 items-center gap-1.5 self-center font-og-mono text-og-xs leading-none text-og-status-failed", children: [
3020
- /* @__PURE__ */ jsx9("span", { className: "size-1.5 rounded-full bg-og-status-failed" }),
3021
- t("timeline.agentRow.failed")
3022
- ] }) : cancelled ? /* @__PURE__ */ jsx9("span", { className: "og-cancelled-chip shrink-0 self-center font-og-mono text-og-xs leading-none text-og-fg-subtle", children: t("timeline.agentRow.interrupted") }) : null,
3023
- canOpen && sessionId && onOpenSession ? /* @__PURE__ */ jsx9(
3024
- "button",
3025
- {
3026
- type: "button",
3027
- "aria-label": openLabel,
3028
- title: openLabel,
3029
- onClick: (event) => {
3030
- event.stopPropagation();
3031
- onOpenSession(sessionId);
3032
- },
3033
- onKeyDown: (event) => event.stopPropagation(),
3034
- className: cn(
3035
- "-my-0.5 inline-grid size-6 shrink-0 place-items-center rounded-og-sm text-og-fg-subtle",
3036
- "outline-hidden transition-colors duration-150 hover:bg-og-surface-2 hover:text-og-fg focus-visible:ring-2 focus-visible:ring-og-accent",
3037
- "pointer-coarse:size-10"
3038
- ),
3039
- children: /* @__PURE__ */ jsx9(ArrowUpRightIcon, { "aria-hidden": true, className: "size-3.5" })
3040
- }
3041
- ) : null
3042
- ] });
3043
- const rowClass = cn(
3044
- "group/agent flex w-full min-w-0 items-start gap-2 rounded-og-sm px-1.5 py-1.5 text-left",
3045
- "pointer-coarse:min-h-11 pointer-coarse:py-2.5"
3046
- );
3047
- if (!hasBody) {
3048
- return /* @__PURE__ */ jsx9("div", { "data-og-agent-row": "", "data-status": status, className: rowClass, children: inner });
3049
- }
3050
- return /* @__PURE__ */ jsxs5("div", { "data-og-agent-row": "", "data-status": status, children: [
3051
- /* @__PURE__ */ jsx9(
3052
- "div",
3053
- {
3054
- role: "button",
3055
- tabIndex: 0,
3056
- "aria-expanded": open,
3057
- "data-state": open ? "open" : "closed",
3058
- onClick: () => setOpen((previous) => !previous),
3059
- onKeyDown: (event) => {
3060
- if (event.key === "Enter" || event.key === " ") {
3061
- event.preventDefault();
3062
- setOpen((previous) => !previous);
3063
- }
3064
- },
3065
- className: cn(
3066
- rowClass,
3067
- "cursor-pointer outline-hidden transition-colors duration-150 hover:bg-og-surface-1",
3068
- "focus-visible:ring-2 focus-visible:ring-og-accent"
3069
- ),
3070
- children: inner
3071
- }
3072
- ),
3073
- open ? /* @__PURE__ */ jsx9("div", { className: "mb-2 ml-[2.125rem] mr-1.5 mt-0.5 flex flex-col gap-2 border-l border-og-border pl-4 text-og-sm leading-6 text-og-fg animate-og-expand", children }) : null
3074
- ] });
3075
- }
3076
- function AgentRowText({ children }) {
3077
- return /* @__PURE__ */ jsx9("p", { className: "whitespace-pre-wrap break-words", children });
3078
- }
3079
- function AgentRowSection({
3080
- label,
3081
- children,
3082
- muted
3083
- }) {
3084
- return /* @__PURE__ */ jsxs5("div", { className: "min-w-0", children: [
3085
- /* @__PURE__ */ jsx9("p", { className: "text-og-xs font-medium text-og-fg-subtle", children: label }),
3086
- /* @__PURE__ */ jsx9(
3087
- "p",
3088
- {
3089
- className: cn("whitespace-pre-wrap break-words", muted ? "text-og-fg-muted" : "text-og-fg"),
3090
- children
3091
- }
3092
- )
3093
- ] });
3094
- }
3095
-
3096
- // src/timeline/agent-identity.tsx
3097
- import { createContext as createContext5, useContext as useContext7, useMemo as useMemo3 } from "react";
3098
- import { jsx as jsx10 } from "react/jsx-runtime";
3099
- var SESSION_ID = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
3100
- var AGENT_TITLE_MAX_LENGTH = 80;
3101
- function isSessionId(value) {
3102
- return typeof value === "string" && SESSION_ID.test(value);
3103
- }
3104
- function displayAgentTitle(value) {
3105
- if (typeof value !== "string") return null;
3106
- const title = value.replace(/\s+/g, " ").trim();
3107
- if (!title) return null;
3108
- return title.length > AGENT_TITLE_MAX_LENGTH ? `${title.slice(0, AGENT_TITLE_MAX_LENGTH - 1).trimEnd()}\u2026` : title;
3109
- }
3110
- var AgentIdentityContext = createContext5({ titleFor: () => null });
3111
- function useAgentIdentity() {
3112
- return useContext7(AgentIdentityContext);
3113
- }
3114
- function AgentIdentityProvider({
3115
- items,
3116
- resolveSessionTitle,
3117
- onOpenSession,
3118
- children
3119
- }) {
3120
- const spawnTitleKey = JSON.stringify(
3121
- items.flatMap(
3122
- (item) => item.kind === "worker" && item.action === "spawn" && isSessionId(item.workerSessionId) && item.title ? [[item.workerSessionId.toLowerCase(), item.title]] : []
3123
- )
3124
- );
3125
- const value = useMemo3(() => {
3126
- const spawnTitles = new Map(JSON.parse(spawnTitleKey));
3127
- return {
3128
- titleFor: (sessionId) => {
3129
- if (!isSessionId(sessionId)) return null;
3130
- return displayAgentTitle(resolveSessionTitle?.(sessionId)) ?? displayAgentTitle(spawnTitles.get(sessionId.toLowerCase())) ?? null;
3131
- },
3132
- onOpenSession
3133
- };
3134
- }, [spawnTitleKey, resolveSessionTitle, onOpenSession]);
3135
- return /* @__PURE__ */ jsx10(AgentIdentityContext.Provider, { value, children });
3136
- }
3137
-
3138
- // src/timeline/activity-rail.tsx
3139
- import { AnimatePresence, motion, useReducedMotion } from "motion/react";
3140
-
3141
- // src/timeline/genie-loading.tsx
3142
- import { ThinkingOrb } from "thinking-orbs";
3143
- import { createContext as createContext6, useContext as useContext8, useEffect as useEffect5, useState as useState9 } from "react";
3144
- import { jsx as jsx11, jsxs as jsxs6 } from "react/jsx-runtime";
3145
- var GenieLoadingOptionsContext = createContext6(void 0);
3146
- var EMBEDDED_GENIE_LOADING = (t) => ({
3147
- phrases: [t("timeline.genieLoading.thinking")],
3148
- messages: { showDetails: t("timeline.genieLoading.showDetails") }
3149
- });
3150
- function GenieLoading({
3151
- startedAt,
3152
- phase = "preparing",
3153
- onShowDetails,
3154
- detailsOpen = false,
3155
- notice
3156
- }) {
3157
- const t = useOpenGeniText();
3158
- const options = useContext8(GenieLoadingOptionsContext);
3159
- const waiting = phase === "waiting";
3160
- const phrases = options?.phrases?.length ? options.phrases : waiting ? GENIE_WAITING_PHRASES(t) : GENIE_PREPARING_PHRASES(t);
3161
- const theme = useThemeType(void 0);
3162
- const [phrase, setPhrase] = useState9(0);
3163
- const [showDetails, setShowDetails] = useState9(false);
3164
- const [slow, setSlow] = useState9(false);
3165
- const phraseCount = phrases.length;
3166
- useEffect5(() => {
3167
- const update = () => {
3168
- setShowDetails(Date.now() - Date.parse(startedAt) >= 3e4);
3169
- setSlow(Date.now() - Date.parse(startedAt) >= 6e4);
3170
- if (!document.hidden) setPhrase(Math.floor(Math.random() * phraseCount));
3171
- };
3172
- update();
3173
- const timer = window.setInterval(update, 5e3);
3174
- return () => window.clearInterval(timer);
3175
- }, [startedAt, phraseCount]);
3176
- if (options?.render && !notice)
3177
- return options.render({ startedAt, phase, detailsOpen, onShowDetails });
3178
- return /* @__PURE__ */ jsxs6("div", { className: "og-genie-loading", children: [
3179
- /* @__PURE__ */ jsx11(
3180
- "div",
3181
- {
3182
- className: "og-genie-orb",
3183
- "aria-hidden": "true",
3184
- style: {
3185
- width: options?.orb?.size ?? 64,
3186
- height: options?.orb?.size ?? 64,
3187
- flexBasis: options?.orb?.size ?? 64
3188
- },
3189
- children: /* @__PURE__ */ jsx11(ThinkingOrb, { state: "searching", size: 64, theme, speed: 0.8, ...options?.orb })
3190
- }
3191
- ),
3192
- /* @__PURE__ */ jsxs6("div", { className: "og-genie-copy", children: [
3193
- /* @__PURE__ */ jsx11("span", { className: "sr-only", role: "status", children: notice ?? (slow ? options?.messages?.slowStatus ?? (waiting ? t("timeline.genieLoading.waitingForAResponseTaking") : t("timeline.genieLoading.preparingYourTaskTakingLonger")) : options?.messages?.status ?? (waiting ? t("timeline.genieLoading.waitingForAResponse") : t("timeline.genieLoading.preparingYourTask"))) }),
3194
- /* @__PURE__ */ jsx11(
3195
- "span",
3196
- {
3197
- className: "og-genie-phrase",
3198
- style: notice ? { animation: "none" } : void 0,
3199
- "aria-hidden": "true",
3200
- children: notice ?? (slow ? options?.messages?.slowText ?? (waiting ? t("timeline.genieLoading.stillWaitingForAResponse") : t("timeline.genieLoading.aLittleLongerThanUsual")) : phrases[phrase % phrases.length])
3201
- },
3202
- notice ?? (slow ? "slow" : phrase)
3203
- ),
3204
- showDetails || detailsOpen || notice ? /* @__PURE__ */ jsxs6(
3205
- "button",
3206
- {
3207
- type: "button",
3208
- className: "og-genie-details",
3209
- "aria-expanded": detailsOpen,
3210
- onClick: onShowDetails,
3211
- children: [
3212
- detailsOpen ? options?.messages?.hideDetails ?? t("timeline.genieLoading.hideDetails") : options?.messages?.showDetails ?? (waiting ? t("timeline.genieLoading.showDetails") : t("timeline.genieLoading.behindTheMagic")),
3213
- /* @__PURE__ */ jsx11("span", { "aria-hidden": "true", children: " \u2197" })
3214
- ]
3215
- }
3216
- ) : null
3217
- ] })
3218
- ] });
3219
- }
3220
-
3221
- // src/timeline/startup-dispatch-details.tsx
3222
- import { useEffect as useEffect6, useState as useState10 } from "react";
3223
- import { jsx as jsx12, jsxs as jsxs7 } from "react/jsx-runtime";
3224
- function StartupDispatchDetails({ wait }) {
3225
- const t = useOpenGeniText();
3226
- const [now, setNow] = useState10(Date.now);
3227
- useEffect6(() => {
3228
- const timer = setInterval(() => setNow(Date.now()), 15e3);
3229
- return () => clearInterval(timer);
3230
- }, []);
3231
- const next = wait?.nextAttemptAt ? new Date(wait.nextAttemptAt) : null;
3232
- return /* @__PURE__ */ jsxs7("div", { className: "text-og-xs text-og-fg-muted", "data-og-startup-dispatch-details": "", children: [
3233
- /* @__PURE__ */ jsx12("p", { children: t("timeline.startupDispatchDetails.yourMessagesAreSavedNo") }),
3234
- /* @__PURE__ */ jsx12("p", { children: wait?.state === "pending" && next ? next.getTime() <= now ? t("timeline.startupDispatchDetails.automaticStartRetryIsDue") : t("timeline.startupDispatchDetails.automaticStartRetryAtLocaletimestring", {
3235
- localeTimeString: next.toLocaleTimeString(t.locale, {
3236
- hour: "2-digit",
3237
- minute: "2-digit"
3238
- })
3239
- }) : wait?.state === "acknowledged" ? t("timeline.startupDispatchDetails.theStartRequestWasAccepted") : t("timeline.startupDispatchDetails.startConfirmationIsUnavailable") }),
3240
- wait && wait.attempts > 0 ? /* @__PURE__ */ jsx12("p", { children: t("timeline.startupDispatchDetails.dispatchAttempts", { count: wait.attempts }) }) : null,
3241
- wait?.lastError ? /* @__PURE__ */ jsx12("p", { className: "max-h-32 overflow-y-auto whitespace-pre-wrap break-words", children: t("timeline.startupDispatchDetails.lastRecordedDispatchErrorLasterror", {
3242
- lastError: wait.lastError
3243
- }) }) : null
3244
- ] });
3245
- }
3246
-
3247
- // src/timeline/activity-rail.tsx
3248
- import {
3249
- ArrowRightIcon,
3250
- BotIcon as BotIcon2,
3251
- BrainCircuitIcon as BrainCircuitIcon4,
3252
- MessageSquareTextIcon,
3253
- SendIcon
3254
- } from "lucide-react";
3255
- import {
3256
- Component,
3257
- createContext as createContext8,
3258
- lazy as lazy3,
3259
- useContext as useContext10,
3260
- useEffect as useEffect7,
3261
- useLayoutEffect,
3262
- useRef as useRef2,
3263
- useState as useState11
3264
- } from "react";
3265
- import { jsx as rowJsx, jsxs as rowJsxs } from "react/jsx-runtime";
3266
-
3267
- // src/timeline/seen-activity-ids.ts
3268
- import { createContext as createContext7, useContext as useContext9 } from "react";
3269
- var SeenActivityIdsContext = createContext7(null);
3270
- var SeenActivityIdsProvider = SeenActivityIdsContext.Provider;
3271
- function useSeenActivityIds() {
3272
- return useContext9(SeenActivityIdsContext);
3273
- }
3274
-
3275
- // src/timeline/activity-rail.tsx
3276
- import { Fragment as Fragment5, jsx as jsx13, jsxs as jsxs8 } from "react/jsx-runtime";
3277
- var LazyFleetDecisionRow = lazy3(() => import("./fleet-decision-row-AA4H5CDT.js"));
3278
- var LazyPlatformActivityRow = lazy3(() => import("./platform-activity-row-5VYV6TX4.js"));
3279
- function familyOf(item) {
3280
- if (item.kind === "tool-call") {
3281
- return item.name === "exec_command" || item.name === "write_stdin" ? "terminal" : item.name;
3282
- }
3283
- return item.kind;
3284
- }
3285
- function ActivityRail({
3286
- items,
3287
- startupActive,
3288
- toolRegistry = defaultToolRegistry,
3289
- onOpenSession,
3290
- onMemoryClick,
3291
- loadRetainedScreenshot,
3292
- loadRetainedArtifact,
3293
- bare,
3294
- className
3295
- }) {
3296
- const msg = useOpenGeniText();
3297
- const debug = useStartupDetails();
3298
- const reducedMotion = useReducedMotion();
3299
- const [detailsOpen, setDetailsOpen] = useState11(false);
3300
- const phases = items.filter((item) => item.kind === "startup-phase");
3301
- const dispatch = phases.find((item) => item.dispatchWait !== void 0);
3302
- const hasWork = items.some(
3303
- (item) => item.kind !== "startup-phase" && (item.kind !== "reasoning" || item.text.trim().length > 0)
3304
- );
3305
- const interrupted = phases.some(
3306
- (item) => item.status === "failed" || item.status === "cancelled"
3307
- );
3308
- const providerResponded = phases.some(
3309
- (item) => item.phase === "provider_first_byte" && item.status === "complete"
3310
- );
3311
- const responsePending = phases.some((item) => item.phase === "provider_first_byte");
3312
- const loading = !hasWork && !interrupted && (startupActive ?? (!providerResponded && phases.some((item) => item.status === "running")));
3313
- const visibleItems = debug || detailsOpen ? items : items.filter(
3314
- (item) => item.kind === "startup-phase" ? item.status === "failed" || item.status === "cancelled" : item.kind !== "reasoning" || item.text.trim().length > 0
3315
- );
3316
- const startedAt = phases.reduce((first, item) => {
3317
- const start = item.loadingStartedAt ?? item.startedAt;
3318
- return start < first ? start : first;
3319
- }, phases[0]?.startedAt ?? "");
3320
- const enterMounted = useEntranceAnimation();
3321
- const enterLive = useEntranceAnimationLive();
3322
- const seenIds = useSeenActivityIds();
3323
- const enter = seenIds ? enterLive : enterMounted;
3324
- const previousIdsRef = useRef2(null);
3325
- const enteringIds = /* @__PURE__ */ new Set();
3326
- if (enter) {
3327
- for (const item of items) {
3328
- if (seenIds) {
3329
- if (!seenIds.has(item.id)) {
3330
- enteringIds.add(item.id);
3331
- }
3332
- } else if (previousIdsRef.current !== null && !previousIdsRef.current.has(item.id)) {
3333
- enteringIds.add(item.id);
3334
- }
3335
- }
3336
- }
3337
- useLayoutEffect(() => {
3338
- previousIdsRef.current = new Set(items.map((item) => item.id));
3339
- if (seenIds) {
3340
- for (const item of items) {
3341
- seenIds.add(item.id);
3342
- }
3343
- }
3344
- });
3345
- return /* @__PURE__ */ jsxs8(
3346
- "div",
3347
- {
3348
- className: cn(
3349
- // Rows sit TIGHT by default (gap-0.5) so a same-family run reads as one
3350
- // calm cluster; a family change opens real breathing room (mt-3) below,
3351
- // so a long rail reads as a few clusters, not a metronome of rows.
3352
- "relative flex flex-col gap-0.5",
3353
- !bare && "border-l-2 border-og-border pl-3 sm:pl-4",
3354
- // Whole-rail enter: standalone rails only (no seen-id map). Inside
3355
- // MessageTimeline, unknown ids take per-row enter — remounts stay quiet.
3356
- !bare && enter && !seenIds && previousIdsRef.current === null && "animate-og-enter",
3357
- className
3358
- ),
3359
- children: [
3360
- /* @__PURE__ */ jsx13(AnimatePresence, { initial: false, children: loading && !debug ? /* @__PURE__ */ jsx13(
3361
- motion.div,
3362
- {
3363
- initial: { opacity: 0 },
3364
- animate: { opacity: 1, height: "auto" },
3365
- exit: {
3366
- opacity: 0,
3367
- height: 0,
3368
- pointerEvents: "none"
3369
- },
3370
- transition: {
3371
- height: { duration: reducedMotion ? 0 : 0.32, ease: [0.22, 1, 0.36, 1] },
3372
- opacity: { duration: reducedMotion ? 0 : 0.16 }
3373
- },
3374
- style: { overflow: "hidden" },
3375
- children: /* @__PURE__ */ jsx13(
3376
- GenieLoading,
3377
- {
3378
- startedAt,
3379
- notice: dispatch?.dispatchWait?.lastError ? msg("timeline.activityRail.unableToStartYetYour") : void 0,
3380
- phase: responsePending ? "waiting" : "preparing",
3381
- detailsOpen,
3382
- onShowDetails: () => setDetailsOpen((open) => !open)
3383
- }
3384
- )
3385
- },
3386
- "startup"
3387
- ) : null }),
3388
- detailsOpen && !debug && !loading ? /* @__PURE__ */ jsx13(
3389
- "button",
3390
- {
3391
- type: "button",
3392
- className: "og-genie-details self-start",
3393
- onClick: () => setDetailsOpen(false),
3394
- children: msg("timeline.activityRail.hideStartupDetails")
3395
- }
3396
- ) : null,
3397
- dispatch && (detailsOpen || debug) ? /* @__PURE__ */ jsx13(StartupDispatchDetails, { wait: dispatch.dispatchWait ?? null }) : null,
3398
- visibleItems.map((item, index) => {
3399
- const newFamily = index > 0 && familyOf(item) !== familyOf(visibleItems[index - 1]);
3400
- const row = renderActivity(
3401
- msg,
3402
- item,
3403
- toolRegistry,
3404
- onOpenSession,
3405
- onMemoryClick,
3406
- loadRetainedScreenshot,
3407
- loadRetainedArtifact
3408
- );
3409
- return /* @__PURE__ */ jsx13(
3410
- "div",
3411
- {
3412
- "data-og-timeline-row-anchor": "",
3413
- "data-og-item": item.id,
3414
- "data-og-annotation-source-key": item.kind === "tool-call" ? item.annotationSource?.eventId : void 0,
3415
- className: cn(newFamily && "mt-3", enteringIds.has(item.id) && "animate-og-row-enter"),
3416
- children: row
3417
- },
3418
- item.id
3419
- );
3420
- })
3421
- ]
3422
- }
3423
- );
3424
- }
3425
- var ActivityNoteTextContext = createContext8(null);
3426
- function ActivityNoteRow({ item }) {
3427
- const renderText = useContext10(ActivityNoteTextContext);
3428
- if (!item.text.trim()) return null;
3429
- return /* @__PURE__ */ jsxs8("div", { className: "flex items-start gap-2 px-1.5 py-1.5", "data-og-activity-note": "", children: [
3430
- /* @__PURE__ */ jsx13("span", { className: "size-3.5 shrink-0", "aria-hidden": true }),
3431
- /* @__PURE__ */ jsx13(MessageSquareTextIcon, { "aria-hidden": true, className: "mt-1 size-3.5 shrink-0 text-og-fg-subtle" }),
3432
- /* @__PURE__ */ jsx13(
3433
- "div",
3434
- {
3435
- className: "min-w-0 flex-1 text-og-sm text-og-fg-muted",
3436
- "data-og-search-item": item.id,
3437
- "data-og-annotation-source-key": item.annotationSource?.eventId,
3438
- children: renderText ? renderText(item.text, item) : /* @__PURE__ */ jsx13(Markdown, { softLineBreaks: true, streaming: item.streaming, children: item.text })
3439
- }
3440
- )
3441
- ] });
3442
- }
3443
- function assertNever(item) {
3444
- throw new Error(`ActivityRail: unhandled activity item ${JSON.stringify(item)}`);
3445
- }
3446
- function renderActivity(msg, item, toolRegistry, onOpenSession, onMemoryClick, loadRetainedScreenshot, loadRetainedArtifact) {
3447
- switch (item.kind) {
3448
- case "reasoning":
3449
- case "sandbox":
3450
- case "startup-phase":
3451
- return /* @__PURE__ */ jsx13(LazyPart, { fallback: null, children: /* @__PURE__ */ jsx13(
3452
- LazyPlatformActivityRow,
3453
- {
3454
- item,
3455
- d: ActivityDisclosure,
3456
- p: PayloadBlock,
3457
- t: (name) => toolDisplayName(msg, name),
3458
- b: BotIcon2,
3459
- m: Markdown,
3460
- j: rowJsx,
3461
- s: rowJsxs
3462
- }
3463
- ) });
3464
- case "tool-call": {
3465
- const shown = invokedToolCall(redactToolCall(item));
3466
- const Renderer = toolRegistry.resolve(shown);
3467
- const outputPreview = item.outputPreview ?? null;
3468
- const exactFirst = outputPreview !== null && !rendersToolOutputPreview(Renderer, shown);
3469
- const Shown = exactFirst && (outputPreview.state === "error" || !outputPreview.load) ? toolRegistry.fallback : Renderer;
3470
- return /* @__PURE__ */ jsx13(ToolRowBoundary, { name: toolDisplayName(msg, shown.name), resetKeys: [item.status, Shown], children: /* @__PURE__ */ jsx13(ToolCallTruncationProvider, { value: item.truncation ?? null, children: /* @__PURE__ */ jsx13(ToolOutputPreviewProvider, { value: outputPreview, children: exactFirst && outputPreview.load && outputPreview.state !== "error" ? /* @__PURE__ */ jsx13(ToolOutputExactRow, { item: shown, preview: outputPreview }) : /* @__PURE__ */ jsx13(
3471
- Shown,
3472
- {
3473
- item: shown,
3474
- loadRetainedScreenshot,
3475
- loadRetainedArtifact
3476
- }
3477
- ) }) }) });
3478
- }
3479
- case "worker":
3480
- return /* @__PURE__ */ jsx13(WorkerRow, { item, onOpenSession });
3481
- case "knowledge":
3482
- return /* @__PURE__ */ jsx13(
3483
- KnowledgeReceiptRow,
3484
- {
3485
- outcome: item.outcome,
3486
- entryId: item.entryId,
3487
- fileId: item.fileId,
3488
- title: item.filename,
3489
- source: Boolean(item.fileId)
3490
- }
3491
- );
3492
- case "memory":
3493
- return /* @__PURE__ */ jsx13(MemoryRow, { item, onMemoryClick });
3494
- case "agent-message":
3495
- return /* @__PURE__ */ jsx13(ActivityNoteRow, { item });
3496
- case "fleet-decision":
3497
- return /* @__PURE__ */ jsx13(LazyPart, { fallback: null, children: /* @__PURE__ */ jsx13(
3498
- LazyFleetDecisionRow,
3499
- {
3500
- item,
3501
- d: ActivityDisclosure,
3502
- b: BodyNote,
3503
- j: rowJsx,
3504
- s: rowJsxs
3505
- }
3506
- ) });
3507
- default:
3508
- return assertNever(item);
3509
- }
3510
- }
3511
- function ToolOutputExactRow({
3512
- item,
3513
- preview
3514
- }) {
3515
- const msg = useOpenGeniText();
3516
- const pending = preview.state === "preview";
3517
- const load = preview.load;
3518
- useEffect7(() => {
3519
- if (pending) load?.();
3520
- }, [pending, load]);
3521
- return /* @__PURE__ */ jsx13("div", { "data-og-tool-output-loading": "", "aria-busy": "true", children: /* @__PURE__ */ jsx13(
3522
- ActivityDisclosure,
3523
- {
3524
- icon: /* @__PURE__ */ jsx13(ToolKindIcon, { kind: genericToolIconKind(item.name), className: "size-3.5" }),
3525
- title: toolDisplayName(msg, item.name, item.display),
3526
- preview: msg("timeline.toolRenderers.loadingOutput"),
3527
- expandable: false
3528
- }
3529
- ) });
3530
- }
3531
- var MEMORY_KIND_LABEL = (msg) => ({
3532
- preference: msg("timeline.activityRail.preference"),
3533
- semantic: msg("timeline.activityRail.fact"),
3534
- procedural: msg("timeline.activityRail.procedure"),
3535
- decision: msg("timeline.activityRail.decision"),
3536
- episodic: msg("timeline.activityRail.history")
3537
- });
3538
- function MemoryRow({
3539
- item,
3540
- onMemoryClick
3541
- }) {
3542
- const msg = useOpenGeniText();
3543
- const corrected = item.variant === "corrected";
3544
- const kindLabel = MEMORY_KIND_LABEL(msg)[item.memoryKind];
3545
- const superseded = corrected && Boolean(item.replacementPreview);
3546
- const targetId = corrected ? item.replacementMemoryId ?? item.memoryId : item.memoryId;
3547
- const deepLink = Boolean(onMemoryClick);
3548
- return /* @__PURE__ */ jsxs8(
3549
- ActivityDisclosure,
3550
- {
3551
- icon: /* @__PURE__ */ jsx13(BrainCircuitIcon4, { className: "size-3.5" }),
3552
- iconTone: "muted",
3553
- title: /* @__PURE__ */ jsxs8("span", { className: "inline-flex min-w-0 items-center gap-2", children: [
3554
- /* @__PURE__ */ jsx13("span", { className: "shrink-0", children: corrected ? msg("timeline.activityRail.updatedMemory") : msg("timeline.activityRail.savedToMemory") }),
3555
- kindLabel ? /* @__PURE__ */ jsx13("span", { className: "shrink-0 rounded-og-xs bg-og-surface-2 px-1.5 py-px text-og-xs font-normal leading-tight text-og-fg-subtle", children: kindLabel }) : null
3556
- ] }),
3557
- preview: superseded ? item.replacementPreview : item.preview,
3558
- children: [
3559
- superseded ? (
3560
- // The correction as a before → after: the old memory struck through and
3561
- // dimmed, the new text in the ordinary body weight below it.
3562
- /* @__PURE__ */ jsxs8("div", { className: "flex flex-col gap-1.5", children: [
3563
- /* @__PURE__ */ jsx13("p", { className: "whitespace-pre-wrap text-og-sm leading-6 text-og-fg-subtle line-through", children: item.preview }),
3564
- /* @__PURE__ */ jsx13("p", { className: "whitespace-pre-wrap text-og-base leading-6 text-og-fg-muted", children: item.replacementPreview })
3565
- ] })
3566
- ) : corrected && item.action === "updated" ? (
3567
- // Edited in place, no replacement record: the memory is still live, so
3568
- // show its current text — NOT the archived treatment.
3569
- /* @__PURE__ */ jsxs8(Fragment5, { children: [
3570
- /* @__PURE__ */ jsx13("p", { className: "whitespace-pre-wrap text-og-base leading-6 text-og-fg-muted", children: item.preview }),
3571
- /* @__PURE__ */ jsx13(BodyNote, { tone: "muted", children: msg("timeline.activityRail.updatedInPlace") })
3572
- ] })
3573
- ) : corrected ? (
3574
- // A correction with no replacement (and not an in-place update) archived the record.
3575
- /* @__PURE__ */ jsx13(BodyNote, { tone: "muted", children: msg("timeline.activityRail.archived") })
3576
- ) : /* @__PURE__ */ jsx13("p", { className: "whitespace-pre-wrap text-og-base leading-6 text-og-fg-muted", children: item.preview }),
3577
- item.deduped ? /* @__PURE__ */ jsx13(BodyNote, { tone: "muted", children: msg("timeline.activityRail.mergedIntoAnExistingMemory") }) : null,
3578
- deepLink ? /* @__PURE__ */ jsxs8(
3579
- "button",
3580
- {
3581
- type: "button",
3582
- onClick: () => onMemoryClick?.(targetId),
3583
- className: cn(
3584
- "group/memlink -mx-1 inline-flex w-fit items-center gap-1 rounded-og-sm px-1 py-0.5 text-left text-og-sm text-og-fg-subtle",
3585
- "outline-hidden transition-colors duration-150 hover:text-og-fg focus-visible:ring-2 focus-visible:ring-og-accent"
3586
- ),
3587
- children: [
3588
- msg("timeline.activityRail.viewInMemory"),
3589
- /* @__PURE__ */ jsx13(ArrowRightIcon, { className: "size-3.5 transition-transform duration-150 group-hover/memlink:translate-x-0.5" })
3590
- ]
3591
- }
3592
- ) : null
3593
- ]
3594
- }
3595
- );
3596
- }
3597
- function WorkerRow({
3598
- item,
3599
- onOpenSession
3600
- }) {
3601
- const msg = useOpenGeniText();
3602
- const identity = useAgentIdentity();
3603
- const running = item.status === "running";
3604
- const failed = item.status === "failed";
3605
- const cancelled = item.status === "cancelled";
3606
- const sessionId = item.workerSessionId;
3607
- const name = identity.titleFor(sessionId) ?? (item.action === "spawn" ? item.title : null);
3608
- const title = workerRowTitleParts(msg, item, name);
3609
- const prompt = item.prompt?.trim() ? item.prompt.trim() : null;
3610
- const failure = failed ? item.failure : null;
3611
- const hasBody = Boolean(prompt) || Boolean(failure);
3612
- return /* @__PURE__ */ jsx13(
3613
- AgentRow,
3614
- {
3615
- icon: item.action === "spawn" ? /* @__PURE__ */ jsx13(BotIcon2, {}) : /* @__PURE__ */ jsx13(SendIcon, {}),
3616
- title,
3617
- preview: failure ? failure.message : prompt ? truncate(prompt.replace(/\s+/g, " "), 240) : null,
3618
- sessionId: cancelled ? null : sessionId,
3619
- onOpenSession: onOpenSession ?? identity.onOpenSession,
3620
- running,
3621
- failed,
3622
- cancelled,
3623
- children: hasBody ? /* @__PURE__ */ jsxs8(Fragment5, { children: [
3624
- prompt ? /* @__PURE__ */ jsx13(
3625
- AgentRowSection,
3626
- {
3627
- label: item.action === "spawn" ? msg("timeline.activityRail.brief") : msg("timeline.activityRail.message"),
3628
- children: prompt
3629
- }
3630
- ) : null,
3631
- failure ? /* @__PURE__ */ jsx13(AgentRowSection, { label: failure.code, muted: true, children: failure.message }) : null
3632
- ] }) : void 0
3633
- }
3634
- );
3635
- }
3636
- function ToolRowRenderError({ name }) {
3637
- const t = useOpenGeniText();
3638
- return /* @__PURE__ */ jsx13(
3639
- "div",
3640
- {
3641
- "data-testid": "tool-row-render-error",
3642
- role: "status",
3643
- className: "px-1.5 py-1.5 text-og-menu text-og-fg-subtle",
3644
- children: t("timeline.activityRail.nameCouldNotBeDisplayed", { name })
3645
- }
3646
- );
3647
- }
3648
- var ToolRowBoundary = class extends Component {
3649
- state = { failed: false, notLoaded: false, resetKeys: this.props.resetKeys };
3650
- static getDerivedStateFromError(error) {
3651
- return { failed: true, notLoaded: isChunkLoadError(error) };
3652
- }
3653
- /** A new status or renderer for the row gets a fresh attempt. */
3654
- static getDerivedStateFromProps(props, state) {
3655
- const same = props.resetKeys.length === state.resetKeys.length && props.resetKeys.every((key, index) => Object.is(key, state.resetKeys[index]));
3656
- return same ? null : { failed: false, notLoaded: false, resetKeys: props.resetKeys };
3657
- }
3658
- render() {
3659
- if (!this.state.failed) return this.props.children;
3660
- return this.state.notLoaded ? /* @__PURE__ */ jsx13(LoadFailureNotice, {}) : /* @__PURE__ */ jsx13(ToolRowRenderError, { name: this.props.name });
3661
- }
3662
- };
3663
-
3664
- // src/timeline/turn-summary.tsx
3665
- import { ChevronRightIcon as ChevronRightIcon3, CircleSlashIcon as CircleSlashIcon2, ShrinkIcon, TriangleAlertIcon } from "lucide-react";
3666
- import {
3667
- Component as Component2,
3668
- createContext as createContext10,
3669
- useContext as useContext12,
3670
- useEffect as useEffect8,
3671
- useLayoutEffect as useLayoutEffect2,
3672
- useMemo as useMemo4,
3673
- useRef as useRef3,
3674
- useState as useState12
3675
- } from "react";
3676
- import { Collapsible } from "radix-ui";
3677
-
3678
- // src/timeline/fold-memory.ts
3679
- import { createContext as createContext9, useContext as useContext11 } from "react";
3680
- var FoldMemoryContext = createContext9(null);
3681
- var FoldMemoryProvider = FoldMemoryContext.Provider;
3682
- function useFoldMemory() {
3683
- return useContext11(FoldMemoryContext);
3684
- }
3685
- function inheritFoldRestingState(memory, targetKey, sourceKeys) {
3686
- if (memory.has(targetKey) || sourceKeys.length !== 1) {
3687
- return;
3688
- }
3689
- const state = memory.get(sourceKeys[0]);
3690
- if (state !== void 0) {
3691
- memory.set(targetKey, state);
3692
- }
3693
- }
3694
-
3695
- // src/timeline/turn-summary.tsx
3696
- import { Fragment as Fragment6, jsx as jsx14, jsxs as jsxs9 } from "react/jsx-runtime";
3697
- var TurnSettleChromeContext = createContext10(false);
3698
- function useTurnSettleOpen() {
3699
- return useContext12(TurnSettleChromeContext);
3700
- }
3701
- var SETTLE_FOLD_BEAT_MS = 1100 * MOTION_INSPECT_SCALE;
3702
- var SETTLE_COLLAPSE_MS = 820 * MOTION_INSPECT_SCALE;
3703
- var DISCLOSE_MS = 120 * MOTION_INSPECT_SCALE;
3704
- function TurnSummary({
3705
- items,
3706
- outcome,
3707
- failureText,
3708
- failureDetail,
3709
- durationMs,
3710
- defaultOpen,
3711
- liveHeader,
3712
- bare,
3713
- facets: facetConfiguration,
3714
- settleFold,
3715
- foldKey,
3716
- copyText,
3717
- contextCompactionCount,
3718
- status,
3719
- expandable = true,
3720
- unloadedSteps,
3721
- onOpenStateChange,
3722
- children
3723
- }) {
3724
- const t = useOpenGeniText();
3725
- const forcedDefaultOpen = useForcedDefaultOpen();
3726
- const searchReveal = useTimelineSearchReveal();
3727
- const foldMemory = useFoldMemory();
3728
- const remembered = foldKey !== void 0 ? foldMemory?.get(foldKey) : void 0;
3729
- const restingOpen = remembered === "closed" ? false : remembered === "open" ? true : defaultOpen ?? forcedDefaultOpen ?? false;
3730
- const initialSettle = Boolean(settleFold) && !restingOpen && remembered === void 0;
3731
- const [settling, setSettling] = useState12(initialSettle);
3732
- const [openState, setOpen] = useState12(initialSettle ? true : restingOpen);
3733
- const open = expandable && openState;
3734
- const reportOpen = useRef3(onOpenStateChange);
3735
- reportOpen.current = onOpenStateChange;
3736
- useLayoutEffect2(() => {
3737
- reportOpen.current?.(open);
3738
- }, [open]);
3739
- const readerOwnsOpen = useRef3(remembered !== void 0);
3740
- useEffect8(() => {
3741
- if (status && defaultOpen && remembered === void 0 && !readerOwnsOpen.current) setOpen(true);
3742
- }, [status, defaultOpen, remembered]);
3743
- const [settlePhase, setSettlePhase] = useState12(initialSettle);
3744
- const [nestSuppressLatch, setNestSuppressLatch] = useState12(initialSettle);
3745
- const [expandReady, setExpandReady] = useState12(!initialSettle);
3746
- const settleTimerRef = useRef3(null);
3747
- const settleCloseDoneRef = useRef3(null);
3748
- const nestLatchClearRef = useRef3(null);
3749
- const settleFoldSeenRef = useRef3(Boolean(settleFold));
3750
- const settleArmedRef = useRef3(false);
3751
- const clearNestLatchTimer = () => {
3752
- if (nestLatchClearRef.current !== null) {
3753
- clearTimeout(nestLatchClearRef.current);
3754
- nestLatchClearRef.current = null;
3755
- }
3756
- };
3757
- const clearSettleTimers = () => {
3758
- if (settleTimerRef.current !== null) {
3759
- clearTimeout(settleTimerRef.current);
3760
- settleTimerRef.current = null;
3761
- }
3762
- if (settleCloseDoneRef.current !== null) {
3763
- clearTimeout(settleCloseDoneRef.current);
3764
- settleCloseDoneRef.current = null;
3765
- }
3766
- clearNestLatchTimer();
3767
- };
3768
- const rememberResting = (state) => {
3769
- if (foldKey !== void 0 && foldMemory) {
3770
- foldMemory.set(foldKey, state);
3771
- }
3772
- };
3773
- const armSettleCollapse = () => {
3774
- if (settleArmedRef.current) {
3775
- return;
3776
- }
3777
- settleArmedRef.current = true;
3778
- setSettling(true);
3779
- setSettlePhase(true);
3780
- setNestSuppressLatch(true);
3781
- setExpandReady(false);
3782
- setOpen(true);
3783
- clearSettleTimers();
3784
- settleTimerRef.current = setTimeout(() => {
3785
- settleTimerRef.current = null;
3786
- setExpandReady(true);
3787
- setOpen(false);
3788
- rememberResting("closed");
3789
- settleCloseDoneRef.current = setTimeout(() => {
3790
- settleCloseDoneRef.current = null;
3791
- settleArmedRef.current = false;
3792
- setSettlePhase(false);
3793
- setSettling(false);
3794
- setNestSuppressLatch(false);
3795
- }, SETTLE_COLLAPSE_MS);
3796
- }, SETTLE_FOLD_BEAT_MS);
3797
- };
3798
- const mountSettleRef = useRef3(initialSettle);
3799
- useEffect8(() => {
3800
- if (mountSettleRef.current) {
3801
- armSettleCollapse();
3802
- }
3803
- return () => {
3804
- clearSettleTimers();
3805
- settleArmedRef.current = false;
3806
- };
3807
- }, []);
3808
- useEffect8(() => {
3809
- const was = settleFoldSeenRef.current;
3810
- settleFoldSeenRef.current = Boolean(settleFold);
3811
- if (!was && settleFold) {
3812
- if (foldKey !== void 0 && foldMemory?.get(foldKey) !== void 0) {
3813
- return;
3814
- }
3815
- armSettleCollapse();
3816
- }
3817
- }, [settleFold]);
3818
- useEffect8(() => {
3819
- if (!searchReveal) return;
3820
- clearSettleTimers();
3821
- settleArmedRef.current = false;
3822
- setSettling(false);
3823
- setSettlePhase(false);
3824
- setNestSuppressLatch(false);
3825
- setOpen(true);
3826
- rememberResting("open");
3827
- }, [searchReveal]);
3828
- const onOpenChange = (next) => {
3829
- readerOwnsOpen.current = true;
3830
- const wasNestFlat = settling || settlePhase || nestSuppressLatch;
3831
- clearSettleTimers();
3832
- settleArmedRef.current = false;
3833
- rememberResting(next ? "open" : "closed");
3834
- setExpandReady(true);
3835
- setSettlePhase(false);
3836
- setSettling(false);
3837
- if (next) {
3838
- setNestSuppressLatch(false);
3839
- setOpen(true);
3840
- return;
3841
- }
3842
- setOpen(false);
3843
- if (wasNestFlat) {
3844
- setNestSuppressLatch(true);
3845
- nestLatchClearRef.current = setTimeout(() => {
3846
- nestLatchClearRef.current = null;
3847
- setNestSuppressLatch(false);
3848
- }, DISCLOSE_MS);
3849
- } else {
3850
- setNestSuppressLatch(false);
3851
- }
3852
- };
3853
- const enter = useEntranceAnimation();
3854
- const [allowEnterAnimation] = useState12(
3855
- () => Boolean(enter && !bare && !initialSettle && !restingOpen)
3856
- );
3857
- const context = useMemo4(
3858
- () => createTurnSummaryContext(
3859
- t,
3860
- items,
3861
- outcome,
3862
- failureText,
3863
- settling || settlePhase ? void 0 : durationMs,
3864
- contextCompactionCount ?? 0
3865
- ),
3866
- [items, outcome, failureText, durationMs, settling, settlePhase, contextCompactionCount, t]
3867
- );
3868
- const facetDefinitions = useMemo4(
3869
- () => resolveTurnSummaryFacets(facetConfiguration),
3870
- [facetConfiguration]
3871
- );
3872
- const statusKind = status?.kind;
3873
- const facets = useMemo4(
3874
- () => selectTurnSummaryFacets(facetDefinitions, context, statusKind),
3875
- [context, facetDefinitions, statusKind]
3876
- );
3877
- const failure = outcome === "failed" ? failureText?.trim() || null : null;
3878
- const liveShell = outcome === void 0 && open && !settlePhase && !bare;
3879
- const settleChrome = settling || settlePhase || nestSuppressLatch;
3880
- const statusLine = status ? turnSummaryStatusLine(t, status) : null;
3881
- const copyable = Boolean(
3882
- copyText && copyText.trim().length > 0 && !bare && !liveShell && !open && !settlePhase
3883
- );
3884
- const headerClassName = cn(
3885
- // The section, not the viewport, bounds this sticky row. Content
3886
- // is a sibling: its disclosure overflow never traps the header.
3887
- // Nested rail folds must never stack additional sticky headers.
3888
- !bare && open && "sticky top-[var(--og-work-header-top,0px)] z-10 bg-og-bg",
3889
- settling && expandable && "animate-og-settle-chip",
3890
- // Top-level turn fold and (when used) nested cluster folds render as
3891
- // FLAT rail rows — chevron + glyph + facets on the page background, no
3892
- // border, no fill. Only a hover tint hints the row is expandable, so a
3893
- // collapsed turn never reads as a boxed card. The top-level row is a
3894
- // touch larger (base text, size-5 glyph, wider gap) so it still reads
3895
- // as a turn landmark above any nested cluster rows it groups.
3896
- "group flex w-full items-center rounded-og-sm text-left transition-colors",
3897
- // A folded turn is a touch target on coarse pointers: grow the row so it
3898
- // clears the 44px minimum without disturbing the calm desktop rhythm.
3899
- expandable && "pointer-coarse:min-h-11 pointer-coarse:py-2.5",
3900
- bare ? "gap-2 px-1.5 py-1.5 text-og-sm text-og-fg-muted" : "-mx-2 gap-2.5 px-2 py-1.5 text-og-base text-og-fg-muted",
3901
- // A failed fold keeps its red accent (glyph + inline reason below) and a
3902
- // faint red hover wash so attention still lands there; every other
3903
- // outcome gets the neutral surface hover. A row with nothing to reveal
3904
- // is not a control and gets no hover.
3905
- !expandable ? void 0 : outcome === "failed" ? "hover:bg-og-status-failed/[0.06] hover:text-og-fg" : "hover:bg-og-surface-1 hover:text-og-fg",
3906
- liveShell && "text-og-fg-subtle",
3907
- // Phones hide the hint, so keep the copy control clear of the separator.
3908
- status && copyable && "max-sm:pr-10"
3909
- );
3910
- const headerContent = /* @__PURE__ */ jsxs9(Fragment6, { children: [
3911
- expandable ? /* @__PURE__ */ jsx14(
3912
- ChevronRightIcon3,
3913
- {
3914
- className: cn(
3915
- "size-3.5 shrink-0 text-og-fg-subtle transition-transform ease-og-in-out group-data-[state=open]:rotate-90",
3916
- settlePhase ? "duration-[var(--_og-duration-disclose-settle)]" : "duration-[var(--_og-duration-disclose)]"
3917
- )
3918
- }
3919
- ) : /* @__PURE__ */ jsx14("span", { "aria-hidden": true, className: "size-3.5 shrink-0" }),
3920
- status || outcome === "complete" || !outcome && (liveHeader || context.settled) ? null : /* @__PURE__ */ jsx14(
3921
- "span",
3922
- {
3923
- className: cn(
3924
- "inline-flex shrink-0 items-center justify-center",
3925
- bare ? "size-3.5" : "size-5",
3926
- outcome === "failed" ? "text-og-status-failed" : "text-og-fg-subtle"
3927
- ),
3928
- children: outcome === "failed" ? /* @__PURE__ */ jsx14(TriangleAlertIcon, { className: "size-3" }) : outcome === "cancelled" ? /* @__PURE__ */ jsx14(CircleSlashIcon2, { className: "size-3" }) : /* @__PURE__ */ jsx14("span", { className: "size-1.5 animate-og-pulse rounded-full bg-og-fg-subtle" })
3929
- }
3930
- ),
3931
- /* @__PURE__ */ jsxs9(
3932
- "span",
3933
- {
3934
- className: cn(
3935
- "min-w-0 truncate",
3936
- status?.kind === "worked" ? "shrink" : "flex-1",
3937
- bare ? "text-og-sm" : "text-og-fg-muted"
3938
- ),
3939
- children: [
3940
- statusLine,
3941
- liveHeader && !open && !status ? liveHeader : !statusLine && facets.length === 0 && !failure && outcome !== "cancelled" ? turnSummaryFallbackLabel(t, context.items, unloadedSteps) : facets.map(({ facet, result }, index) => /* @__PURE__ */ jsx14(FacetRenderBoundary, { children: /* @__PURE__ */ jsxs9(Fragment6, { children: [
3942
- index > 0 || statusLine ? " \xB7 " : null,
3943
- /* @__PURE__ */ jsxs9("span", { "aria-label": result.ariaLabel, title: result.title, children: [
3944
- result.icon ? /* @__PURE__ */ jsx14("span", { "aria-hidden": true, className: "mr-1 inline-flex align-[-0.125em]", children: result.icon }) : null,
3945
- result.content
3946
- ] })
3947
- ] }) }, facet.id)),
3948
- failure ? /* @__PURE__ */ jsxs9("span", { className: "text-og-status-failed", title: failureDetail, children: [
3949
- " ",
3950
- "\xB7 ",
3951
- failure
3952
- ] }) : null,
3953
- outcome === "cancelled" ? /* @__PURE__ */ jsxs9("span", { className: "text-og-fg-subtle", children: [
3954
- " ",
3955
- t("timeline.turnSummary.interrupted")
3956
- ] }) : null
3957
- ]
3958
- }
3959
- ),
3960
- status?.kind === "worked" ? /* @__PURE__ */ jsx14("span", { "aria-hidden": true, className: "ml-1 h-px min-w-0 flex-1 bg-og-border" }) : null,
3961
- status && status.kind !== "worked" && (contextCompactionCount ?? 0) > 0 ? /* @__PURE__ */ jsx14(
3962
- ShrinkIcon,
3963
- {
3964
- className: "size-3.5 shrink-0",
3965
- "aria-label": t("timeline.turnSummary.contextCompactedExpandForDetails")
3966
- }
3967
- ) : null
3968
- ] });
3969
- return /* @__PURE__ */ jsx14(TurnSettleChromeContext.Provider, { value: settleChrome, children: /* @__PURE__ */ jsxs9("div", { className: cn(copyable && "group/copy relative"), children: [
3970
- /* @__PURE__ */ jsxs9(
3971
- Collapsible.Root,
3972
- {
3973
- "data-og-work-section": bare ? void 0 : "",
3974
- open,
3975
- onOpenChange,
3976
- className: allowEnterAnimation && !liveShell ? "animate-og-enter" : void 0,
3977
- children: [
3978
- expandable ? /* @__PURE__ */ jsx14(
3979
- Collapsible.Trigger,
3980
- {
3981
- "data-og-work-header": bare ? "nested" : "outer",
3982
- className: headerClassName,
3983
- children: headerContent
3984
- }
3985
- ) : (
3986
- // Nothing to reveal: a plain status row, not a disclosure control.
3987
- /* @__PURE__ */ jsx14("div", { "data-og-work-header": bare ? "nested" : "outer", className: headerClassName, children: headerContent })
3988
- ),
3989
- status?.guidance ? (
3990
- // Guidance the reader needs stays visible in both fold states.
3991
- /* @__PURE__ */ jsx14("div", { "data-og-exchange-guidance": "", className: "min-w-0 pb-1 pl-6", children: status.guidance })
3992
- ) : null,
3993
- status && !open && status.preview ? (
3994
- // Readable progress under the status line; the line above stays
3995
- // the one disclosure control, so a click here is a mouse shortcut.
3996
- /* @__PURE__ */ jsx14(
3997
- "div",
3998
- {
3999
- "data-og-exchange-preview": "",
4000
- className: cn(
4001
- "flex min-w-0 flex-col gap-0.5 pb-1 pl-6",
4002
- expandable && "cursor-pointer"
4003
- ),
4004
- onClick: expandable ? () => onOpenChange(true) : void 0,
4005
- children: status.preview ? /* @__PURE__ */ jsx14("div", { className: "min-w-0", children: status.preview }) : null
4006
- }
4007
- )
4008
- ) : null,
4009
- expandable ? /* @__PURE__ */ jsx14(
4010
- Collapsible.Content,
4011
- {
4012
- ...nestSuppressLatch ? { forceMount: true } : {},
4013
- "data-og-fold-content": "",
4014
- className: cn(
4015
- "overflow-hidden",
4016
- expandReady && "data-[state=open]:animate-og-expand",
4017
- // Auto-close: slow settle. Manual close (settlePhase cleared): fast.
4018
- settlePhase ? "data-[state=closed]:animate-og-settle-collapse" : "data-[state=closed]:animate-og-collapse"
4019
- ),
4020
- children: /* @__PURE__ */ jsx14("div", { className: bare ? "pt-1 pl-5" : "pt-2", children })
4021
- }
4022
- ) : null
4023
- ]
4024
- }
4025
- ),
4026
- copyable ? /* @__PURE__ */ jsx14("div", { className: "pointer-events-none absolute top-1.5 right-0 z-10", children: /* @__PURE__ */ jsx14("div", { className: "pointer-events-auto", children: /* @__PURE__ */ jsx14(
4027
- CopyButton,
4028
- {
4029
- text: copyText,
4030
- label: t("timeline.turnSummary.copyTurn"),
4031
- reveal: "group-hover"
4032
- }
4033
- ) }) }) : null
4034
- ] }) });
4035
- }
4036
- function turnSummaryStatusLine(t, status) {
4037
- if (status.kind === "worked") {
4038
- return status.durationMs !== void 0 && Number.isFinite(status.durationMs) && status.durationMs >= 1e3 ? /* @__PURE__ */ jsxs9("span", { "data-og-exchange-status": "worked", children: [
4039
- status.label ?? t("timeline.turnSummary.workedFor"),
4040
- " ",
4041
- formatElapsed(t, status.durationMs)
4042
- ] }) : null;
4043
- }
4044
- const label = status.label ?? (status.kind === "working" ? t("timeline.turnSummary.working") : t("timeline.turnSummary.waiting"));
4045
- return /* @__PURE__ */ jsxs9("span", { "data-og-exchange-status": status.kind, children: [
4046
- status.kind === "working" ? /* @__PURE__ */ jsx14(ShimmerText, { children: label }) : /* @__PURE__ */ jsx14("span", { children: label }),
4047
- status.since ? /* @__PURE__ */ jsx14(LiveElapsed, { since: status.since }) : null
4048
- ] });
4049
- }
4050
- function LiveElapsed({ since }) {
4051
- const t = useOpenGeniText();
4052
- const startedAt = Date.parse(since);
4053
- const [now, setNow] = useState12(() => Date.now());
4054
- useEffect8(() => {
4055
- const timer = setInterval(() => setNow(Date.now()), 1e3);
4056
- return () => clearInterval(timer);
4057
- }, []);
4058
- if (!Number.isFinite(startedAt)) return null;
4059
- return /* @__PURE__ */ jsx14("span", { className: "tabular-nums", children: ` \xB7 ${formatElapsed(t, Math.max(0, now - startedAt))}` });
4060
- }
4061
- var FacetRenderBoundary = class extends Component2 {
4062
- state = { failed: false, notLoaded: false };
4063
- static getDerivedStateFromError(error) {
4064
- return { failed: true, notLoaded: isChunkLoadError(error) };
4065
- }
4066
- render() {
4067
- if (!this.state.failed) return this.props.children;
4068
- return this.state.notLoaded ? /* @__PURE__ */ jsx14(LoadFailureNotice, {}) : null;
4069
- }
4070
- };
4071
-
4072
- // src/timeline/learning-refusal-row.tsx
4073
- import { BrainCircuitIcon as BrainCircuitIcon5 } from "lucide-react";
4074
- import { createContext as createContext11, useContext as useContext13 } from "react";
4075
- import { jsx as jsx15, jsxs as jsxs10 } from "react/jsx-runtime";
4076
- var LearningRefusalActionsContext = createContext11({});
4077
- function LearningRefusalActionsProvider({
4078
- children,
4079
- ...actions
4080
- }) {
4081
- return /* @__PURE__ */ jsx15(LearningRefusalActionsContext.Provider, { value: actions, children });
4082
- }
4083
- function LearningRefusalRow({ refusal }) {
4084
- const t = useOpenGeniText();
4085
- const enter = useEntranceAnimation();
4086
- const { onOpen } = useContext13(LearningRefusalActionsContext);
4087
- const place = learningRefusalPlace(refusal);
4088
- return /* @__PURE__ */ jsxs10(
4089
- "div",
4090
- {
4091
- className: cn(
4092
- enter && "animate-og-enter",
4093
- "flex items-start gap-2.5 rounded-og-md border border-og-status-waiting/35 bg-og-status-waiting/8 px-3.5 py-2.5 text-og-menu text-og-fg"
4094
- ),
4095
- role: "status",
4096
- "data-og-learning-refusal": refusal.reason,
4097
- children: [
4098
- /* @__PURE__ */ jsx15(BrainCircuitIcon5, { "aria-hidden": true, className: "mt-0.5 size-4 shrink-0 text-og-status-waiting" }),
4099
- /* @__PURE__ */ jsxs10("div", { className: "min-w-0 flex-1", children: [
4100
- /* @__PURE__ */ jsx15("p", { className: "font-medium", children: learningRefusalTitle(t, refusal) }),
4101
- /* @__PURE__ */ jsx15("p", { className: "mt-0.5 text-og-fg-muted", children: learningRefusalBody(t, refusal) }),
4102
- place && onOpen ? /* @__PURE__ */ jsx15(
4103
- "button",
4104
- {
4105
- type: "button",
4106
- className: "mt-1.5 -ml-1 rounded-og-sm px-1 py-0.5 font-medium text-og-fg underline-offset-2 hover:underline focus-visible:outline-2 focus-visible:outline-og-accent",
4107
- onClick: () => onOpen(place),
4108
- children: learningRefusalPlaceLabel(t, place)
4109
- }
4110
- ) : null
4111
- ] })
4112
- ]
4113
- }
4114
- );
4115
- }
4116
-
4117
- export {
4118
- isSessionId,
4119
- useAgentIdentity,
4120
- AgentIdentityProvider,
4121
- UNRECOVERABLE_TEXT,
4122
- ToolReviewFrame,
4123
- DeclineButton,
4124
- ToolActionReviewCard,
4125
- ToolActionReviewDetails,
4126
- createWorkspaceRetainedArtifactLoader,
4127
- createSessionRetainedScreenshotLoader,
4128
- createWorkspaceRetainedVideoLoader,
4129
- ToolReviewHistoryProvider,
4130
- KnowledgeActivityProvider,
4131
- TimelineComputeLabelProvider,
4132
- ProviderLogoProvider,
4133
- ToolKindIcon,
4134
- gitFileDiffToPatch,
4135
- PierreDiff,
4136
- defaultToolRegistry,
4137
- createDefaultToolRegistry,
4138
- AgentRow,
4139
- AgentRowText,
4140
- AgentRowSection,
4141
- GenieLoadingOptionsContext,
4142
- EMBEDDED_GENIE_LOADING,
4143
- setStartupDetails,
4144
- useStartupDetails,
4145
- SeenActivityIdsProvider,
4146
- ActivityRail,
4147
- ActivityNoteTextContext,
4148
- renderActivity,
4149
- FoldMemoryProvider,
4150
- useFoldMemory,
4151
- inheritFoldRestingState,
4152
- useTurnSettleOpen,
4153
- TurnSummary,
4154
- LearningRefusalActionsProvider,
4155
- LearningRefusalRow
4156
- };
4157
- //# sourceMappingURL=chunk-LRJIYTZW.js.map