@opengeni/react 4.2.1-canary.39642758903001 → 4.3.1

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 (693) hide show
  1. package/dist/app/app-state.js +27 -27
  2. package/dist/app/components/Composer.js +27 -26
  3. package/dist/app/components/agent/agent-capability-picker.js +5 -5
  4. package/dist/app/components/artifacts/artifact-library.js +19 -19
  5. package/dist/app/components/artifacts/chat-interactive-block.js +16 -16
  6. package/dist/app/components/artifacts/inline-chat-image.js +31 -30
  7. package/dist/app/components/artifacts/retained-file-preview.js +35 -34
  8. package/dist/app/components/artifacts/retained-text-preview.js +5 -5
  9. package/dist/app/components/artifacts/site-audience.js +5 -5
  10. package/dist/app/components/artifacts/site-conversations.js +24 -22
  11. package/dist/app/components/artifacts/site-data.js +20 -20
  12. package/dist/app/components/artifacts/site-publishing.js +39 -39
  13. package/dist/app/components/artifacts/site-settings.js +48 -48
  14. package/dist/app/components/billing-class-mark.js +5 -5
  15. package/dist/app/components/capabilities/capability-detail-sheet.js +9 -9
  16. package/dist/app/components/capabilities/capability-logo-source.js +13 -12
  17. package/dist/app/components/capabilities/connection-account-picker.js +2 -2
  18. package/dist/app/components/capabilities/connector-tool-permissions.js +5 -5
  19. package/dist/app/components/capabilities/native-connect-setup.js +14 -13
  20. package/dist/app/components/capabilities/native-connect-setup.js.map +1 -1
  21. package/dist/app/components/capabilities/perform-capability-action.js +3 -3
  22. package/dist/app/components/capabilities/prepared-mcp-setup-card.js +15 -14
  23. package/dist/app/components/capabilities/session-capability-card.js +78 -77
  24. package/dist/app/components/capabilities/session-capability-card.js.map +1 -1
  25. package/dist/app/components/capabilities/session-custom-mcp-card.js +20 -19
  26. package/dist/app/components/capabilities/session-github-card.js +25 -24
  27. package/dist/app/components/capabilities/session-machine-card.js +38 -38
  28. package/dist/app/components/capabilities/use-capabilities-catalog.js +3 -3
  29. package/dist/app/components/capabilities/use-connection-accounts.js +1 -1
  30. package/dist/app/components/command-menu/chat-switcher.d.ts +12 -0
  31. package/dist/app/components/command-menu/chat-switcher.js +142 -0
  32. package/dist/app/components/command-menu/chat-switcher.js.map +1 -0
  33. package/dist/app/components/command-menu/command-menu.d.ts +15 -0
  34. package/dist/app/components/command-menu/command-menu.js +812 -0
  35. package/dist/app/components/command-menu/command-menu.js.map +1 -0
  36. package/dist/app/components/command-menu/keycaps.d.ts +21 -0
  37. package/dist/app/components/command-menu/keycaps.js +12 -0
  38. package/dist/app/components/command-menu/shortcut-sheet.d.ts +12 -0
  39. package/dist/app/components/command-menu/shortcut-sheet.js +150 -0
  40. package/dist/app/components/command-menu/shortcut-sheet.js.map +1 -0
  41. package/dist/app/components/composer-capabilities-menu-body.js +3 -3
  42. package/dist/app/components/composer-mobile-plus-panel.js +21 -21
  43. package/dist/app/components/composer-mobile-plus.js +3 -3
  44. package/dist/app/components/credit-required-gate.js +1 -1
  45. package/dist/app/components/credit-required-prompt.js +16 -16
  46. package/dist/app/components/credits/coupon-redeem.js +2 -2
  47. package/dist/app/components/credits/credit-refusal-notice.d.ts +18 -0
  48. package/dist/app/components/credits/credit-refusal-notice.js +17 -0
  49. package/dist/app/components/cross-slot-deep-link-recovery.js +1 -1
  50. package/dist/app/components/desktop/app-shots.js +6 -6
  51. package/dist/app/components/desktop/this-computer.js +4 -4
  52. package/dist/app/components/feedback.js +5 -5
  53. package/dist/app/components/follow-up-repository-menu-body.js +7 -7
  54. package/dist/app/components/follow-up-repository-picker.js +3 -3
  55. package/dist/app/components/github-app-connect-launcher.js +1 -1
  56. package/dist/app/components/knowledge/agent-learning-settings.js +6 -6
  57. package/dist/app/components/machines/connect-machine-dialog.js +18 -18
  58. package/dist/app/components/manual-repository-editor.js +2 -2
  59. package/dist/app/components/markdown.js +10 -9
  60. package/dist/app/components/message-context-pills.js +2 -2
  61. package/dist/app/components/models/models-ui.js +10 -10
  62. package/dist/app/components/pickers.js +10 -10
  63. package/dist/app/components/rail/rail-context.d.ts +6 -0
  64. package/dist/app/components/rail/rail-context.js +3 -3
  65. package/dist/app/components/rail/rail-sections.js +61 -55
  66. package/dist/app/components/rail/session-browse-order-controls.js +2 -2
  67. package/dist/app/components/rail/session-header.js +50 -36
  68. package/dist/app/components/rail/session-list.js +59 -52
  69. package/dist/app/components/rail/session-row-hover-details.js +25 -23
  70. package/dist/app/components/rail/session-shell.js +96 -91
  71. package/dist/app/components/repository-picker.js +7 -7
  72. package/dist/app/components/secrets/session-secrets-panel.js +4 -4
  73. package/dist/app/components/session/agent-configuration-panel.js +34 -34
  74. package/dist/app/components/session/banners.js +12 -11
  75. package/dist/app/components/session/codex-account-indicator.js +12 -12
  76. package/dist/app/components/session/composer-menu-radio.js +2 -2
  77. package/dist/app/components/session/conversation-find.js +1 -1
  78. package/dist/app/components/session/editable-artifacts-workspace.js +45 -45
  79. package/dist/app/components/session/failed-session-banner.js +12 -12
  80. package/dist/app/components/session/human-input.js +48 -47
  81. package/dist/app/components/session/inspector.js +80 -79
  82. package/dist/app/components/session/inspector.js.map +1 -1
  83. package/dist/app/components/session/message-actions.js +5 -5
  84. package/dist/app/components/session/message-resource-attachments.js +21 -20
  85. package/dist/app/components/session/message-resource-attachments.js.map +1 -1
  86. package/dist/app/components/session/model-account-indicator.js +11 -11
  87. package/dist/app/components/session/model-context-inspector.js +2 -2
  88. package/dist/app/components/session/model-recovery-notice.js +3 -3
  89. package/dist/app/components/session/new-session-settings-menu.js +13 -13
  90. package/dist/app/components/session/sandbox-switcher.js +16 -16
  91. package/dist/app/components/session/sandbox-workspace.js +68 -67
  92. package/dist/app/components/session/search-markdown-highlight.js +11 -10
  93. package/dist/app/components/session/search-results-view.js +12 -11
  94. package/dist/app/components/session/session-admin-access.js +11 -11
  95. package/dist/app/components/session/session-retention.js +4 -4
  96. package/dist/app/components/session/session-search-dialog.d.ts +5 -0
  97. package/dist/app/components/session/session-search-dialog.js +22 -12
  98. package/dist/app/components/session/session-search-dialog.js.map +1 -1
  99. package/dist/app/components/session/session-skill-reviews.js +3 -3
  100. package/dist/app/components/session/session-tenancy-control.js +25 -25
  101. package/dist/app/components/session/session-usage-limit-section.js +9 -9
  102. package/dist/app/components/session/session-wait-status.js +11 -9
  103. package/dist/app/components/session/session-wait-status.js.map +1 -1
  104. package/dist/app/components/session/subagents.js +17 -15
  105. package/dist/app/components/session/subscription-account-menu.js +2 -2
  106. package/dist/app/components/session-connectors-menu-body.js +6 -6
  107. package/dist/app/components/settings/row-select.js +1 -1
  108. package/dist/app/components/transcription-settings.js +2 -2
  109. package/dist/app/components/ui/destructive-confirm.js +8 -8
  110. package/dist/app/components/usage/usage-entry.js +6 -6
  111. package/dist/app/components/workspace-composer-plus.js +22 -21
  112. package/dist/app/embed/session-app.js +264 -258
  113. package/dist/app/lib/actions/actions-provider.d.ts +30 -0
  114. package/dist/app/lib/actions/actions-provider.js +32 -0
  115. package/dist/app/lib/actions/chat-directory.d.ts +30 -0
  116. package/dist/app/lib/actions/chat-operations.d.ts +11 -0
  117. package/dist/app/lib/actions/chat-switcher.d.ts +31 -0
  118. package/dist/app/lib/actions/chords.d.ts +40 -0
  119. package/dist/app/lib/actions/events.d.ts +6 -0
  120. package/dist/app/lib/actions/rank.d.ts +17 -0
  121. package/dist/app/lib/actions/registry.d.ts +71 -0
  122. package/dist/app/lib/codex-usage-query.js +3 -3
  123. package/dist/app/lib/composer-connectors.js +14 -13
  124. package/dist/app/lib/console-text.js +2 -2
  125. package/dist/app/lib/credit-coverage.d.ts +21 -0
  126. package/dist/app/lib/credit-coverage.js +15 -0
  127. package/dist/app/lib/deployment-free-model.js +2 -2
  128. package/dist/app/lib/events.js +19 -18
  129. package/dist/app/lib/failed-session-copy.js +5 -5
  130. package/dist/app/lib/free-credit-gap.d.ts +9 -0
  131. package/dist/app/lib/free-credit-gap.js +4 -2
  132. package/dist/app/lib/integration-connect-analytics.d.ts +1 -1
  133. package/dist/app/lib/integration-connect-analytics.js +1 -1
  134. package/dist/app/lib/integration-connect-redirect.js +1 -1
  135. package/dist/app/lib/model-access-onboarding.js +4 -4
  136. package/dist/app/lib/model-policy.js +1 -1
  137. package/dist/app/lib/models-route.d.ts +6 -2
  138. package/dist/app/lib/models-route.js +6 -3
  139. package/dist/app/lib/models-route.js.map +1 -1
  140. package/dist/app/lib/move-chat-to-machine.js +3 -3
  141. package/dist/app/lib/session-branch-cache.js +15 -13
  142. package/dist/app/lib/session-create.js +2 -2
  143. package/dist/app/lib/session-group-pagination.js +15 -13
  144. package/dist/app/lib/session-hover-facts.js +16 -14
  145. package/dist/app/lib/session-model.js +3 -3
  146. package/dist/app/lib/session-rail.js +11 -9
  147. package/dist/app/lib/session-rename.js +3 -3
  148. package/dist/app/lib/session-search-route.d.ts +1 -1
  149. package/dist/app/lib/session-search-route.js +1 -1
  150. package/dist/app/lib/session-ui-features.d.ts +11 -3
  151. package/dist/app/lib/session-ui-features.js +1 -1
  152. package/dist/app/lib/sessions-group.js +15 -13
  153. package/dist/app/lib/turn-failure-analytics.js +7 -7
  154. package/dist/app/lib/unavailable-session-model.js +2 -2
  155. package/dist/app/lib/use-duplicate-site.js +2 -2
  156. package/dist/app/lib/use-follow-up-repositories.js +3 -3
  157. package/dist/app/lib/use-workspace-machines.js +8 -8
  158. package/dist/app/lib/use-workspace-model-catalog.js +6 -6
  159. package/dist/app/lib/use-workspace-rigs.js +4 -4
  160. package/dist/app/lib/workspace-navigation-preference.js +5 -5
  161. package/dist/app/lib/workspace-scope-context.js +4 -4
  162. package/dist/app/routes/artifacts.js +124 -122
  163. package/dist/app/routes/artifacts.js.map +1 -1
  164. package/dist/app/routes/retained-artifact.js +69 -68
  165. package/dist/app/routes/retained-artifact.js.map +1 -1
  166. package/dist/app/routes/session-unavailable.js +3 -3
  167. package/dist/app/routes/session.js +168 -166
  168. package/dist/app/routes/sessions-index-hydration.js +3 -3
  169. package/dist/app/routes/sessions-index.js +122 -116
  170. package/dist/artifacts-document.js +4 -4
  171. package/dist/artifacts-presentation.js +4 -4
  172. package/dist/artifacts-spreadsheet.js +4 -4
  173. package/dist/artifacts.js +39 -39
  174. package/dist/{browser-viewer-ZRFZX3VN.js → browser-viewer-HPUMK7UP.js} +7 -7
  175. package/dist/{chat-interactive-block-HUMYWVCK.js → chat-interactive-block-22PPECCT.js} +6 -6
  176. package/dist/{chunk-GVIQ7H62.js → chunk-2LUBBDZV.js} +5 -5
  177. package/dist/{chunk-SWWYYGQO.js → chunk-325C2TCI.js} +5 -2
  178. package/dist/chunk-325C2TCI.js.map +1 -0
  179. package/dist/{chunk-XMMVIY7B.js → chunk-3CCJWHQY.js} +2 -2
  180. package/dist/{chunk-XS2FZ6DX.js → chunk-3F5ZPIWI.js} +2 -2
  181. package/dist/{chunk-72US6QNB.js → chunk-3J2YZRY5.js} +2 -2
  182. package/dist/{chunk-D4YQF4E3.js → chunk-3SMJ2BIQ.js} +2 -2
  183. package/dist/{chunk-TBJINQXA.js → chunk-3WCYK36X.js} +17 -17
  184. package/dist/{chunk-WPCF34V6.js → chunk-3WG3CRL7.js} +14 -14
  185. package/dist/{chunk-JI5BYQKO.js → chunk-3X46PNBX.js} +14 -14
  186. package/dist/{chunk-UO36FC3S.js → chunk-46I7MMAL.js} +6 -2
  187. package/dist/chunk-46I7MMAL.js.map +1 -0
  188. package/dist/{chunk-PBK44WJC.js → chunk-4GJ37O6G.js} +2 -2
  189. package/dist/chunk-4IWBQUQU.js +152 -0
  190. package/dist/chunk-4IWBQUQU.js.map +1 -0
  191. package/dist/{chunk-LEXPBQ56.js → chunk-4SKJX3C4.js} +6 -6
  192. package/dist/{chunk-ZA6YD2LW.js → chunk-57SYK776.js} +2 -2
  193. package/dist/{chunk-22LBKJDE.js → chunk-5DIAN5GQ.js} +12 -12
  194. package/dist/{chunk-LJ3TDK2L.js → chunk-5FA455GR.js} +4 -4
  195. package/dist/{chunk-N2BEUKXT.js → chunk-5FBZDEHE.js} +228 -228
  196. package/dist/chunk-5FBZDEHE.js.map +1 -0
  197. package/dist/{chunk-YPR5INHV.js → chunk-5X3E2Z3D.js} +4 -4
  198. package/dist/{chunk-OXNWZTEU.js → chunk-5ZJCL6X4.js} +5 -5
  199. package/dist/{chunk-62OAZ4LO.js → chunk-6C5GQQMC.js} +12 -12
  200. package/dist/{chunk-VGITH57T.js → chunk-6ERTXDZM.js} +4 -4
  201. package/dist/{chunk-ZQ7XQZCF.js → chunk-6FX73Y4I.js} +8 -8
  202. package/dist/{chunk-QZO2KK2F.js → chunk-6P44NG6Y.js} +2 -2
  203. package/dist/{chunk-N2DDJLTM.js → chunk-6T7Y33JA.js} +3 -3
  204. package/dist/{chunk-RBAGC2MJ.js → chunk-75VE5QUS.js} +22 -22
  205. package/dist/{chunk-MRXOGI3O.js → chunk-77CUDSHG.js} +9 -9
  206. package/dist/{chunk-F2GXK2Z6.js → chunk-7G446JFO.js} +431 -348
  207. package/dist/chunk-7G446JFO.js.map +1 -0
  208. package/dist/{chunk-GZ65XQR5.js → chunk-7T7FHSGS.js} +3 -3
  209. package/dist/{chunk-YGAH34CD.js → chunk-A3S26JSP.js} +8 -8
  210. package/dist/{chunk-GYPAO6RS.js → chunk-A664GSDM.js} +8 -8
  211. package/dist/{chunk-JSZSNMDR.js → chunk-ASUYLXKO.js} +2 -2
  212. package/dist/{chunk-RTK7SUPL.js → chunk-AUUJLVA3.js} +7 -7
  213. package/dist/{chunk-OOTBYSCA.js → chunk-BBWKPNJB.js} +5 -5
  214. package/dist/{chunk-BGZIMIUU.js → chunk-BCUYWOQU.js} +2 -2
  215. package/dist/{chunk-EKN4N4LS.js → chunk-BDFMNJZJ.js} +2 -2
  216. package/dist/{chunk-YZKGOWCC.js → chunk-BIDXQAGO.js} +2 -2
  217. package/dist/{chunk-Q2UUANHF.js → chunk-BIKAJ4DY.js} +5 -5
  218. package/dist/{chunk-5IQBF2X3.js → chunk-BJPJ2OUX.js} +3 -3
  219. package/dist/{chunk-EY2EMHZW.js → chunk-BPM2OTYK.js} +8 -8
  220. package/dist/{chunk-MT4TBRQB.js → chunk-BSWS2RUZ.js} +2 -2
  221. package/dist/{chunk-T7YD3VGK.js → chunk-C52MNKXU.js} +12 -12
  222. package/dist/{chunk-THNW33K7.js → chunk-CEUDV4OA.js} +18 -18
  223. package/dist/{chunk-GRLPRM56.js → chunk-CFEFYPNR.js} +8 -2
  224. package/dist/chunk-CFEFYPNR.js.map +1 -0
  225. package/dist/{chunk-LHGIS6SZ.js → chunk-CVK74BH7.js} +2 -2
  226. package/dist/{chunk-DFO2UCYG.js → chunk-CW5I65ZX.js} +11 -11
  227. package/dist/chunk-DKNTQDVL.js +86 -0
  228. package/dist/chunk-DKNTQDVL.js.map +1 -0
  229. package/dist/{chunk-SKRLKQEG.js → chunk-DOSC2HRQ.js} +79 -79
  230. package/dist/{chunk-KVB6XDLP.js → chunk-DPJ2CWVN.js} +2 -2
  231. package/dist/{chunk-4J6V4DH7.js → chunk-DXMRO2MU.js} +3 -3
  232. package/dist/{chunk-42I4O4WQ.js → chunk-EE55IDDR.js} +26 -26
  233. package/dist/{chunk-2RA6XABP.js → chunk-EEERTLFF.js} +12 -12
  234. package/dist/{chunk-PTOTKUKO.js → chunk-EEO744XR.js} +8 -8
  235. package/dist/{chunk-LD3HVI2J.js → chunk-EMFGBAQL.js} +6 -6
  236. package/dist/{chunk-FQGUK4ST.js → chunk-ENPJKVMN.js} +38 -38
  237. package/dist/{chunk-HDHK3SXK.js → chunk-EU6RLHMP.js} +4 -4
  238. package/dist/{chunk-G7VLL3PG.js → chunk-F2YABPRJ.js} +13 -4
  239. package/dist/chunk-F2YABPRJ.js.map +1 -0
  240. package/dist/{chunk-MRUWRQBX.js → chunk-FET6XHGS.js} +2 -2
  241. package/dist/{chunk-M6KUY3YH.js → chunk-FIICQA55.js} +2 -2
  242. package/dist/{chunk-NLWLCYCT.js → chunk-FTZXCPE3.js} +19 -19
  243. package/dist/{chunk-FN2KA3MJ.js → chunk-FUS76DO4.js} +3 -3
  244. package/dist/{chunk-AM4IIPWI.js → chunk-G7N5NPRJ.js} +2 -2
  245. package/dist/{chunk-CCQ7YKOD.js → chunk-GBYZ6653.js} +2 -2
  246. package/dist/{chunk-SOOWLNC5.js → chunk-GJUPLSC5.js} +330 -109
  247. package/dist/chunk-GJUPLSC5.js.map +1 -0
  248. package/dist/{chunk-YKKVIJVX.js → chunk-GQDSC6QZ.js} +5 -5
  249. package/dist/chunk-GQGNRL2L.js +53 -0
  250. package/dist/chunk-GQGNRL2L.js.map +1 -0
  251. package/dist/{chunk-5X6JP75Q.js → chunk-GRSODLVO.js} +4 -4
  252. package/dist/{chunk-73YP3R5X.js → chunk-GSESCQFY.js} +4 -4
  253. package/dist/{chunk-KWB5U3ZT.js → chunk-GWRW4N3T.js} +199 -137
  254. package/dist/chunk-GWRW4N3T.js.map +1 -0
  255. package/dist/{chunk-RTR7RNG4.js → chunk-GYRU4PNM.js} +9 -7
  256. package/dist/{chunk-RTR7RNG4.js.map → chunk-GYRU4PNM.js.map} +1 -1
  257. package/dist/{chunk-MZLEBFUZ.js → chunk-GZD6VBIK.js} +3 -3
  258. package/dist/{chunk-IZR2QRFF.js → chunk-H3HH5AHS.js} +4 -4
  259. package/dist/{chunk-DN3TKURW.js → chunk-H3LIIAGE.js} +4 -54
  260. package/dist/chunk-H3LIIAGE.js.map +1 -0
  261. package/dist/{chunk-NPLEQMNM.js → chunk-H5GWAG4I.js} +7 -5
  262. package/dist/{chunk-NPLEQMNM.js.map → chunk-H5GWAG4I.js.map} +1 -1
  263. package/dist/{chunk-OJPUVUB6.js → chunk-HAOZCLLA.js} +3 -3
  264. package/dist/{chunk-ZBHDGAYL.js → chunk-HEFE4OZJ.js} +2 -2
  265. package/dist/{chunk-WTG34JVA.js → chunk-HI75UTI6.js} +2 -2
  266. package/dist/{chunk-OMBIG3NC.js → chunk-HM633ROV.js} +14 -14
  267. package/dist/{chunk-WDFZWSKD.js → chunk-HRIP4M6H.js} +3 -3
  268. package/dist/{chunk-A2BCW6CQ.js → chunk-HU2DRFFI.js} +3 -3
  269. package/dist/{chunk-PO35PBAB.js → chunk-HVH7FFJH.js} +2 -2
  270. package/dist/{chunk-EG7KNUF7.js → chunk-HYTXTKST.js} +18 -18
  271. package/dist/{chunk-TFHG75A4.js → chunk-I4XMDFUJ.js} +7 -7
  272. package/dist/{chunk-IZHVZZQA.js → chunk-ICAUYWSL.js} +9 -9
  273. package/dist/{chunk-ZSERYHHT.js → chunk-IDMXEPHL.js} +150 -150
  274. package/dist/chunk-IDMXEPHL.js.map +1 -0
  275. package/dist/{chunk-DCLPWYP3.js → chunk-IEVPJ3G6.js} +2 -2
  276. package/dist/{chunk-EVWZHDSF.js → chunk-IKH3VTA4.js} +2 -2
  277. package/dist/{chunk-L5UCO2UV.js → chunk-ILBSBZGC.js} +13 -4
  278. package/dist/chunk-ILBSBZGC.js.map +1 -0
  279. package/dist/{chunk-IO6K6UYJ.js → chunk-IQ64BNAG.js} +4 -2
  280. package/dist/chunk-IQ64BNAG.js.map +1 -0
  281. package/dist/{chunk-TYHLEFD2.js → chunk-IZJNMRIR.js} +9 -9
  282. package/dist/{chunk-D2SR3TEB.js → chunk-J243WGUA.js} +2 -2
  283. package/dist/{chunk-QGSGIYE3.js → chunk-J2C6LB6W.js} +4 -4
  284. package/dist/{chunk-MT6TRTXF.js → chunk-J5MEDX7C.js} +9 -9
  285. package/dist/{chunk-6QHUKBJP.js → chunk-J7SKOO44.js} +2 -2
  286. package/dist/{chunk-W2QK7PYS.js → chunk-JAAST75A.js} +11 -11
  287. package/dist/{chunk-NQCMS4AJ.js → chunk-JQCGPTZ6.js} +9 -9
  288. package/dist/chunk-JRJUSKDY.js +832 -0
  289. package/dist/chunk-JRJUSKDY.js.map +1 -0
  290. package/dist/{chunk-CMUXJHGH.js → chunk-JRSCWQMC.js} +9 -9
  291. package/dist/{chunk-Q4OHNGGB.js → chunk-JRXHSVD5.js} +4 -4
  292. package/dist/{chunk-SD2K5ZN5.js → chunk-JXYLDT6X.js} +4 -4
  293. package/dist/{chunk-S3M5WCZW.js → chunk-KA4LV7G6.js} +35 -50
  294. package/dist/chunk-KA4LV7G6.js.map +1 -0
  295. package/dist/{chunk-IXX6ZOL2.js → chunk-KGTMHEAP.js} +7 -7
  296. package/dist/{chunk-22OBGVEJ.js → chunk-KOXVGPW4.js} +3 -3
  297. package/dist/{chunk-NOZ5CGZE.js → chunk-L5GPPMUB.js} +2 -2
  298. package/dist/{chunk-KIHYJM5F.js → chunk-LXJT4WAW.js} +58 -58
  299. package/dist/{chunk-KIHYJM5F.js.map → chunk-LXJT4WAW.js.map} +1 -1
  300. package/dist/{chunk-4FOOHMTU.js → chunk-LY6727IF.js} +1 -1
  301. package/dist/{chunk-PT7MTXRE.js → chunk-MAOCN7J6.js} +2 -2
  302. package/dist/{chunk-4K2JSJNX.js → chunk-MB5LZVDO.js} +2 -2
  303. package/dist/chunk-MF464AKA.js +139 -0
  304. package/dist/chunk-MF464AKA.js.map +1 -0
  305. package/dist/{chunk-UYSZKDQY.js → chunk-MK54JLE4.js} +1 -1
  306. package/dist/chunk-MK54JLE4.js.map +1 -0
  307. package/dist/{chunk-5LES64PP.js → chunk-MKOQAVOE.js} +21 -21
  308. package/dist/{chunk-BMV2SNYX.js → chunk-MUPWNSEJ.js} +18 -18
  309. package/dist/{chunk-Y5TRG22C.js → chunk-NRXIECWC.js} +2 -2
  310. package/dist/{chunk-GOE7G5JX.js → chunk-NWSAF6P5.js} +2 -2
  311. package/dist/chunk-OB3YGXHQ.js +158 -0
  312. package/dist/chunk-OB3YGXHQ.js.map +1 -0
  313. package/dist/{chunk-DUM363VS.js → chunk-OFZQJNF6.js} +5 -5
  314. package/dist/{chunk-CKN5QPEL.js → chunk-OMF7POEY.js} +2 -2
  315. package/dist/{chunk-MVXKO2BD.js → chunk-OXD6ET34.js} +1 -1
  316. package/dist/{chunk-47JUEVME.js → chunk-PALX6HWV.js} +21 -21
  317. package/dist/{chunk-B6OGSG7I.js → chunk-PE3BLBDT.js} +3 -3
  318. package/dist/{chunk-RVISSNVE.js → chunk-PMZKJOG6.js} +15 -15
  319. package/dist/{chunk-CESAMXWX.js → chunk-PQUTMG3S.js} +2 -2
  320. package/dist/{chunk-7VFCOKPG.js → chunk-PWBGODZU.js} +3 -3
  321. package/dist/{chunk-MOPAXD2H.js → chunk-QCADUTYX.js} +2 -2
  322. package/dist/{chunk-CT5FBO7E.js → chunk-RPOUJI25.js} +1 -1
  323. package/dist/{chunk-VE3FKXJ7.js → chunk-RUSXEE7X.js} +35 -32
  324. package/dist/chunk-RUSXEE7X.js.map +1 -0
  325. package/dist/{chunk-WKHYOS72.js → chunk-RW4GFE56.js} +3 -3
  326. package/dist/{chunk-FH4GO7HO.js → chunk-RYLVVDR7.js} +1 -1
  327. package/dist/{chunk-QZRDCFHI.js → chunk-S66SBBFQ.js} +5 -5
  328. package/dist/{chunk-CQJFIPAH.js → chunk-S7TNV2I7.js} +14 -14
  329. package/dist/{chunk-ZBQSIGGR.js → chunk-SC773IMJ.js} +13 -13
  330. package/dist/{chunk-RZV7SXED.js → chunk-SF3M27AN.js} +37 -12
  331. package/dist/chunk-SF3M27AN.js.map +1 -0
  332. package/dist/{chunk-FBJ2HK7A.js → chunk-SGPJ3YS2.js} +20 -20
  333. package/dist/{chunk-A2EWJQXX.js → chunk-SM5QX6UK.js} +4 -4
  334. package/dist/chunk-SWCLN6JE.js +40 -0
  335. package/dist/chunk-SWCLN6JE.js.map +1 -0
  336. package/dist/{chunk-OS3EQOIS.js → chunk-T4F5TW2X.js} +29 -24
  337. package/dist/chunk-T4F5TW2X.js.map +1 -0
  338. package/dist/{chunk-RKZWCTXV.js → chunk-TAEKDMEF.js} +2 -2
  339. package/dist/{chunk-6AVCAUGL.js → chunk-TASEV25T.js} +3 -3
  340. package/dist/{chunk-3XOISKZC.js → chunk-TLGDPMUX.js} +6 -6
  341. package/dist/{chunk-MOF3XSUM.js → chunk-TREHTIBD.js} +3 -2
  342. package/dist/chunk-TREHTIBD.js.map +1 -0
  343. package/dist/{chunk-HUQHJSPV.js → chunk-TTPXGD5S.js} +68 -33
  344. package/dist/chunk-TTPXGD5S.js.map +1 -0
  345. package/dist/{chunk-NFCYIZHX.js → chunk-TXIIBNCA.js} +7 -3
  346. package/dist/{chunk-NFCYIZHX.js.map → chunk-TXIIBNCA.js.map} +1 -1
  347. package/dist/{chunk-5IUW34PG.js → chunk-TY3QYPJ6.js} +7 -7
  348. package/dist/{chunk-VQFR4EU4.js → chunk-U3JK5VJV.js} +2 -2
  349. package/dist/{chunk-2AWMJO54.js → chunk-U42P3RMZ.js} +5 -5
  350. package/dist/{chunk-2RIUMV7S.js → chunk-UBIJBLUK.js} +234 -234
  351. package/dist/chunk-UBIJBLUK.js.map +1 -0
  352. package/dist/{chunk-GUU75DES.js → chunk-UEJTOPLW.js} +8 -8
  353. package/dist/{chunk-QWCTYLMD.js → chunk-URDONAEJ.js} +240 -204
  354. package/dist/chunk-URDONAEJ.js.map +1 -0
  355. package/dist/{chunk-OZOEWLGR.js → chunk-UT6JAORE.js} +4 -4
  356. package/dist/{chunk-5TELOQA6.js → chunk-UTHPUINA.js} +3 -3
  357. package/dist/{chunk-SOV7DTTU.js → chunk-V6HZ2HJZ.js} +67 -67
  358. package/dist/{chunk-SOV7DTTU.js.map → chunk-V6HZ2HJZ.js.map} +1 -1
  359. package/dist/{chunk-26RQ6JBR.js → chunk-VBVCNH6D.js} +5 -5
  360. package/dist/{chunk-P646DND6.js → chunk-VCMQPCME.js} +2 -2
  361. package/dist/{chunk-LV7FMIMM.js → chunk-VGUHAHHV.js} +2 -2
  362. package/dist/{chunk-GYVXARCY.js → chunk-VIBPFVU4.js} +41 -41
  363. package/dist/{chunk-KHPOKZ6Z.js → chunk-VMAC66JX.js} +6 -6
  364. package/dist/{chunk-SHKRS6I5.js → chunk-VRPNETPK.js} +3 -3
  365. package/dist/{chunk-6U4J6RVS.js → chunk-WCHW4XN7.js} +14 -14
  366. package/dist/{chunk-CJH6QUQJ.js → chunk-WD3UXNJV.js} +3 -3
  367. package/dist/{chunk-H5EVWF6L.js → chunk-WR67FJMX.js} +4 -4
  368. package/dist/{chunk-XLIJ36RG.js → chunk-WRMQ7EX4.js} +5 -5
  369. package/dist/{chunk-VVFWOBAM.js → chunk-WTJUKYB2.js} +15 -16
  370. package/dist/chunk-WTJUKYB2.js.map +1 -0
  371. package/dist/{chunk-7KLCFJ5G.js → chunk-X4PPGXQG.js} +2 -2
  372. package/dist/{chunk-ZE2JTVCQ.js → chunk-X5BMQXFD.js} +11 -11
  373. package/dist/{chunk-OYJY4Y4A.js → chunk-XFNLU7EW.js} +14 -7
  374. package/dist/chunk-XFNLU7EW.js.map +1 -0
  375. package/dist/{chunk-UECU6LZI.js → chunk-XXRBOSWV.js} +3 -3
  376. package/dist/{chunk-SPKAIDWX.js → chunk-XZEFCPBL.js} +2 -2
  377. package/dist/{chunk-EZ5NYRHK.js → chunk-YL6N7QLA.js} +5 -5
  378. package/dist/{chunk-Q2ZJOECN.js → chunk-YMVTIV5L.js} +19 -19
  379. package/dist/chunk-YMVTIV5L.js.map +1 -0
  380. package/dist/{chunk-VAIESMPY.js → chunk-YVBHGMKC.js} +4 -4
  381. package/dist/{chunk-AR62NQXE.js → chunk-Z2S5VQG7.js} +2 -2
  382. package/dist/{chunk-2MXUB3ZO.js → chunk-Z5OGTWMZ.js} +15 -2
  383. package/dist/chunk-Z5OGTWMZ.js.map +1 -0
  384. package/dist/{chunk-7UQJEADK.js → chunk-ZL2O4BYP.js} +2 -2
  385. package/dist/{chunk-FOOITLHR.js → chunk-ZZHBT5WQ.js} +2 -2
  386. package/dist/{chunk-X6VJQJYY.js → chunk-ZZWHKC6A.js} +3 -3
  387. package/dist/components/timeline-annotation-shared.d.ts +1 -9
  388. package/dist/composer-messages.js +2 -2
  389. package/dist/composer.js +15 -15
  390. package/dist/{computer-viewer-D4NHQB5D.js → computer-viewer-S6TE6TN7.js} +8 -8
  391. package/dist/connect.js +12 -11
  392. package/dist/desktop.js +2 -2
  393. package/dist/editor.js +2 -2
  394. package/dist/{embedded-new-voice-X4ZW6SY4.js → embedded-new-voice-ZDZPGX25.js} +8 -8
  395. package/dist/{embedded-voice-4OD6Z3HU.js → embedded-voice-FKCUXSJO.js} +8 -8
  396. package/dist/{fleet-decision-row-5UCJXTDP.js → fleet-decision-row-VCGWYJAV.js} +2 -2
  397. package/dist/hooks/page-wake.d.ts +21 -0
  398. package/dist/hooks/use-session-events.d.ts +1 -0
  399. package/dist/index.js +206 -205
  400. package/dist/interaction.js +9 -9
  401. package/dist/{latest-question-VGVNUGAU.js → latest-question-SINEV4U6.js} +3 -3
  402. package/dist/lib/format.d.ts +3 -2
  403. package/dist/machines.js +6 -6
  404. package/dist/messages/en.d.ts +12 -3
  405. package/dist/messages.js +1 -1
  406. package/dist/model-picker-model.js +2 -2
  407. package/dist/{model-policy-picker-menu-XOPYY6YA.js → model-policy-picker-menu-66JPM3G5.js} +6 -6
  408. package/dist/model-policy-picker-menu-66JPM3G5.js.map +1 -0
  409. package/dist/model-policy.js +1 -1
  410. package/dist/native-previews.js +3 -3
  411. package/dist/{platform-activity-row-56XOVTRA.js → platform-activity-row-LU5WABI2.js} +2 -2
  412. package/dist/{queue-surface-implementation-OZDOBJ6W.js → queue-surface-implementation-Y4OUVS7N.js} +8 -7
  413. package/dist/{queue-surface-implementation-OZDOBJ6W.js.map → queue-surface-implementation-Y4OUVS7N.js.map} +1 -1
  414. package/dist/realtime.js +7 -7
  415. package/dist/{sandbox-files-LJCR437H.js → sandbox-files-NBIVKVCZ.js} +11 -11
  416. package/dist/sandbox-files-NBIVKVCZ.js.map +1 -0
  417. package/dist/session-app.js +266 -260
  418. package/dist/session-list-model.js +3 -3
  419. package/dist/{session-realtime-UISLBZ4A.js → session-realtime-3PALSNMJ.js} +3 -3
  420. package/dist/session-realtime-3PALSNMJ.js.map +1 -0
  421. package/dist/session-realtime.js +2 -2
  422. package/dist/session-ui.js +62 -61
  423. package/dist/session.d.ts +1 -1
  424. package/dist/session.js +17 -17
  425. package/dist/sites.js +2 -2
  426. package/dist/terminal.js +2 -2
  427. package/dist/this-computer.js +3 -3
  428. package/dist/timeline/annotation-model.d.ts +48 -0
  429. package/dist/{timeline-annotation-markers-ACT7XRMW.js → timeline-annotation-markers-6526H2NM.js} +11 -9
  430. package/dist/{timeline-annotation-markers-ACT7XRMW.js.map → timeline-annotation-markers-6526H2NM.js.map} +1 -1
  431. package/dist/{timeline-annotation-selection-2IA7T5VR.js → timeline-annotation-selection-KV5SM6TA.js} +16 -62
  432. package/dist/timeline-annotation-selection-KV5SM6TA.js.map +1 -0
  433. package/dist/{timeline-annotations-dialog-W5B2HMYY.js → timeline-annotations-dialog-7CDHWC7Y.js} +12 -10
  434. package/dist/{timeline-annotations-dialog-W5B2HMYY.js.map → timeline-annotations-dialog-7CDHWC7Y.js.map} +1 -1
  435. package/dist/timeline-model.d.ts +3 -0
  436. package/dist/timeline-model.js +40 -14
  437. package/dist/ui/access-list.js +24 -24
  438. package/dist/ui/choice-cards.js +2 -2
  439. package/dist/ui/composer-menu-action.js +2 -2
  440. package/dist/ui/context-menu.d.ts +3 -1
  441. package/dist/ui/context-menu.js +3 -1
  442. package/dist/ui/detail-page.js +3 -3
  443. package/dist/ui/detail-sheet.js +3 -3
  444. package/dist/ui/diff-view.js +3 -3
  445. package/dist/ui/disclosure.js +5 -5
  446. package/dist/ui/dropdown-menu.js +1 -1
  447. package/dist/ui/flush-form-page.js +5 -5
  448. package/dist/ui/form-dialog.js +4 -4
  449. package/dist/ui/list-row.js +5 -5
  450. package/dist/ui/load-failure.js +3 -3
  451. package/dist/ui/page-actions.js +3 -3
  452. package/dist/ui/revision-history.js +11 -11
  453. package/dist/ui/role-select.js +8 -8
  454. package/dist/ui/segmented-control.js +1 -1
  455. package/dist/ui/settings-nav.js +3 -3
  456. package/dist/ui/toolbar.js +3 -3
  457. package/dist/usage.js +2 -2
  458. package/dist/workbench.js +11 -11
  459. package/package.json +4 -4
  460. package/src/app/app-state.tsx +2 -1
  461. package/src/app/components/command-menu/chat-switcher.tsx +135 -0
  462. package/src/app/components/command-menu/command-menu.tsx +840 -0
  463. package/src/app/components/command-menu/keycaps.tsx +56 -0
  464. package/src/app/components/command-menu/shortcut-sheet.tsx +155 -0
  465. package/src/app/components/credits/credit-refusal-notice.test.tsx +132 -0
  466. package/src/app/components/credits/credit-refusal-notice.tsx +92 -0
  467. package/src/app/components/rail/rail-context.tsx +28 -5
  468. package/src/app/components/rail/rail-sections.tsx +3 -5
  469. package/src/app/components/rail/session-header-mute.test.tsx +23 -1
  470. package/src/app/components/rail/session-header.test.tsx +21 -2
  471. package/src/app/components/rail/session-header.tsx +31 -1
  472. package/src/app/components/rail/session-list.tsx +89 -16
  473. package/src/app/components/rail/session-shell.tsx +0 -14
  474. package/src/app/components/session/session-search-dialog.tsx +12 -1
  475. package/src/app/embed/session-app.tsx +6 -3
  476. package/src/app/lib/actions/actions-provider.tsx +486 -0
  477. package/src/app/lib/actions/actions.test.ts +249 -0
  478. package/src/app/lib/actions/chat-directory.ts +231 -0
  479. package/src/app/lib/actions/chat-operations.ts +145 -0
  480. package/src/app/lib/actions/chat-switcher.ts +62 -0
  481. package/src/app/lib/actions/chords.ts +185 -0
  482. package/src/app/lib/actions/events.ts +10 -0
  483. package/src/app/lib/actions/rank.ts +119 -0
  484. package/src/app/lib/actions/registry.ts +333 -0
  485. package/src/app/lib/credit-coverage.test.ts +83 -0
  486. package/src/app/lib/credit-coverage.tsx +48 -0
  487. package/src/app/lib/free-credit-gap.test.ts +32 -1
  488. package/src/app/lib/free-credit-gap.tsx +32 -2
  489. package/src/app/lib/integration-connect-analytics.test.ts +1 -0
  490. package/src/app/lib/integration-connect-analytics.tsx +4 -0
  491. package/src/app/lib/models-route.test.ts +18 -0
  492. package/src/app/lib/models-route.tsx +26 -4
  493. package/src/app/lib/session-search-route.tsx +6 -1
  494. package/src/app/lib/session-ui-features.tsx +28 -9
  495. package/src/app/routes/session.tsx +74 -16
  496. package/src/app/routes/sessions-index.tsx +83 -4
  497. package/src/components/timeline-annotation-selection.tsx +9 -64
  498. package/src/components/timeline-annotation-shared.ts +9 -57
  499. package/src/hooks/page-wake.ts +80 -0
  500. package/src/hooks/use-session-events.ts +309 -81
  501. package/src/lib/format.ts +3 -2
  502. package/src/messages/en.ts +13 -3
  503. package/src/model-picker-model.ts +3 -0
  504. package/src/model-policy.ts +9 -1
  505. package/src/session.ts +1 -0
  506. package/src/timeline/annotation-model.ts +217 -0
  507. package/src/timeline/projection.ts +27 -21
  508. package/src/timeline-model.ts +14 -0
  509. package/src/ui/context-menu.tsx +16 -0
  510. package/src/ui/dropdown-menu.tsx +4 -1
  511. package/src/ui/segmented-control.tsx +3 -0
  512. package/styles/compiled.css +92 -0
  513. package/dist/app/lib/keyboard-shortcuts.d.ts +0 -51
  514. package/dist/app/lib/keyboard-shortcuts.js +0 -16
  515. package/dist/chunk-2MXUB3ZO.js.map +0 -1
  516. package/dist/chunk-2RIUMV7S.js.map +0 -1
  517. package/dist/chunk-53IXIUYP.js +0 -39
  518. package/dist/chunk-53IXIUYP.js.map +0 -1
  519. package/dist/chunk-DN3TKURW.js.map +0 -1
  520. package/dist/chunk-F2GXK2Z6.js.map +0 -1
  521. package/dist/chunk-G7VLL3PG.js.map +0 -1
  522. package/dist/chunk-GRLPRM56.js.map +0 -1
  523. package/dist/chunk-HUQHJSPV.js.map +0 -1
  524. package/dist/chunk-IO6K6UYJ.js.map +0 -1
  525. package/dist/chunk-KWB5U3ZT.js.map +0 -1
  526. package/dist/chunk-L5UCO2UV.js.map +0 -1
  527. package/dist/chunk-MOF3XSUM.js.map +0 -1
  528. package/dist/chunk-N2BEUKXT.js.map +0 -1
  529. package/dist/chunk-OS3EQOIS.js.map +0 -1
  530. package/dist/chunk-OYJY4Y4A.js.map +0 -1
  531. package/dist/chunk-Q2ZJOECN.js.map +0 -1
  532. package/dist/chunk-QWCTYLMD.js.map +0 -1
  533. package/dist/chunk-RZV7SXED.js.map +0 -1
  534. package/dist/chunk-S3M5WCZW.js.map +0 -1
  535. package/dist/chunk-SOOWLNC5.js.map +0 -1
  536. package/dist/chunk-SWWYYGQO.js.map +0 -1
  537. package/dist/chunk-UO36FC3S.js.map +0 -1
  538. package/dist/chunk-UYSZKDQY.js.map +0 -1
  539. package/dist/chunk-VE3FKXJ7.js.map +0 -1
  540. package/dist/chunk-VVFWOBAM.js.map +0 -1
  541. package/dist/chunk-ZSERYHHT.js.map +0 -1
  542. package/dist/timeline-annotation-selection-2IA7T5VR.js.map +0 -1
  543. package/src/app/lib/keyboard-shortcuts.test.ts +0 -47
  544. package/src/app/lib/keyboard-shortcuts.tsx +0 -58
  545. /package/dist/app/{lib/keyboard-shortcuts.js.map → components/command-menu/keycaps.js.map} +0 -0
  546. /package/dist/{browser-viewer-ZRFZX3VN.js.map → app/components/credits/credit-refusal-notice.js.map} +0 -0
  547. /package/dist/{chat-interactive-block-HUMYWVCK.js.map → app/lib/actions/actions-provider.js.map} +0 -0
  548. /package/dist/{computer-viewer-D4NHQB5D.js.map → app/lib/credit-coverage.js.map} +0 -0
  549. /package/dist/{embedded-new-voice-X4ZW6SY4.js.map → browser-viewer-HPUMK7UP.js.map} +0 -0
  550. /package/dist/{embedded-voice-4OD6Z3HU.js.map → chat-interactive-block-22PPECCT.js.map} +0 -0
  551. /package/dist/{chunk-GVIQ7H62.js.map → chunk-2LUBBDZV.js.map} +0 -0
  552. /package/dist/{chunk-XMMVIY7B.js.map → chunk-3CCJWHQY.js.map} +0 -0
  553. /package/dist/{chunk-XS2FZ6DX.js.map → chunk-3F5ZPIWI.js.map} +0 -0
  554. /package/dist/{chunk-72US6QNB.js.map → chunk-3J2YZRY5.js.map} +0 -0
  555. /package/dist/{chunk-D4YQF4E3.js.map → chunk-3SMJ2BIQ.js.map} +0 -0
  556. /package/dist/{chunk-TBJINQXA.js.map → chunk-3WCYK36X.js.map} +0 -0
  557. /package/dist/{chunk-WPCF34V6.js.map → chunk-3WG3CRL7.js.map} +0 -0
  558. /package/dist/{chunk-JI5BYQKO.js.map → chunk-3X46PNBX.js.map} +0 -0
  559. /package/dist/{chunk-PBK44WJC.js.map → chunk-4GJ37O6G.js.map} +0 -0
  560. /package/dist/{chunk-LEXPBQ56.js.map → chunk-4SKJX3C4.js.map} +0 -0
  561. /package/dist/{chunk-ZA6YD2LW.js.map → chunk-57SYK776.js.map} +0 -0
  562. /package/dist/{chunk-22LBKJDE.js.map → chunk-5DIAN5GQ.js.map} +0 -0
  563. /package/dist/{chunk-LJ3TDK2L.js.map → chunk-5FA455GR.js.map} +0 -0
  564. /package/dist/{chunk-YPR5INHV.js.map → chunk-5X3E2Z3D.js.map} +0 -0
  565. /package/dist/{chunk-OXNWZTEU.js.map → chunk-5ZJCL6X4.js.map} +0 -0
  566. /package/dist/{chunk-62OAZ4LO.js.map → chunk-6C5GQQMC.js.map} +0 -0
  567. /package/dist/{chunk-VGITH57T.js.map → chunk-6ERTXDZM.js.map} +0 -0
  568. /package/dist/{chunk-ZQ7XQZCF.js.map → chunk-6FX73Y4I.js.map} +0 -0
  569. /package/dist/{chunk-QZO2KK2F.js.map → chunk-6P44NG6Y.js.map} +0 -0
  570. /package/dist/{chunk-N2DDJLTM.js.map → chunk-6T7Y33JA.js.map} +0 -0
  571. /package/dist/{chunk-RBAGC2MJ.js.map → chunk-75VE5QUS.js.map} +0 -0
  572. /package/dist/{chunk-MRXOGI3O.js.map → chunk-77CUDSHG.js.map} +0 -0
  573. /package/dist/{chunk-GZ65XQR5.js.map → chunk-7T7FHSGS.js.map} +0 -0
  574. /package/dist/{chunk-YGAH34CD.js.map → chunk-A3S26JSP.js.map} +0 -0
  575. /package/dist/{chunk-GYPAO6RS.js.map → chunk-A664GSDM.js.map} +0 -0
  576. /package/dist/{chunk-JSZSNMDR.js.map → chunk-ASUYLXKO.js.map} +0 -0
  577. /package/dist/{chunk-RTK7SUPL.js.map → chunk-AUUJLVA3.js.map} +0 -0
  578. /package/dist/{chunk-OOTBYSCA.js.map → chunk-BBWKPNJB.js.map} +0 -0
  579. /package/dist/{chunk-BGZIMIUU.js.map → chunk-BCUYWOQU.js.map} +0 -0
  580. /package/dist/{chunk-EKN4N4LS.js.map → chunk-BDFMNJZJ.js.map} +0 -0
  581. /package/dist/{chunk-YZKGOWCC.js.map → chunk-BIDXQAGO.js.map} +0 -0
  582. /package/dist/{chunk-Q2UUANHF.js.map → chunk-BIKAJ4DY.js.map} +0 -0
  583. /package/dist/{chunk-5IQBF2X3.js.map → chunk-BJPJ2OUX.js.map} +0 -0
  584. /package/dist/{chunk-EY2EMHZW.js.map → chunk-BPM2OTYK.js.map} +0 -0
  585. /package/dist/{chunk-MT4TBRQB.js.map → chunk-BSWS2RUZ.js.map} +0 -0
  586. /package/dist/{chunk-T7YD3VGK.js.map → chunk-C52MNKXU.js.map} +0 -0
  587. /package/dist/{chunk-THNW33K7.js.map → chunk-CEUDV4OA.js.map} +0 -0
  588. /package/dist/{chunk-LHGIS6SZ.js.map → chunk-CVK74BH7.js.map} +0 -0
  589. /package/dist/{chunk-DFO2UCYG.js.map → chunk-CW5I65ZX.js.map} +0 -0
  590. /package/dist/{chunk-SKRLKQEG.js.map → chunk-DOSC2HRQ.js.map} +0 -0
  591. /package/dist/{chunk-KVB6XDLP.js.map → chunk-DPJ2CWVN.js.map} +0 -0
  592. /package/dist/{chunk-4J6V4DH7.js.map → chunk-DXMRO2MU.js.map} +0 -0
  593. /package/dist/{chunk-42I4O4WQ.js.map → chunk-EE55IDDR.js.map} +0 -0
  594. /package/dist/{chunk-2RA6XABP.js.map → chunk-EEERTLFF.js.map} +0 -0
  595. /package/dist/{chunk-PTOTKUKO.js.map → chunk-EEO744XR.js.map} +0 -0
  596. /package/dist/{chunk-LD3HVI2J.js.map → chunk-EMFGBAQL.js.map} +0 -0
  597. /package/dist/{chunk-FQGUK4ST.js.map → chunk-ENPJKVMN.js.map} +0 -0
  598. /package/dist/{chunk-HDHK3SXK.js.map → chunk-EU6RLHMP.js.map} +0 -0
  599. /package/dist/{chunk-MRUWRQBX.js.map → chunk-FET6XHGS.js.map} +0 -0
  600. /package/dist/{chunk-M6KUY3YH.js.map → chunk-FIICQA55.js.map} +0 -0
  601. /package/dist/{chunk-NLWLCYCT.js.map → chunk-FTZXCPE3.js.map} +0 -0
  602. /package/dist/{chunk-FN2KA3MJ.js.map → chunk-FUS76DO4.js.map} +0 -0
  603. /package/dist/{chunk-AM4IIPWI.js.map → chunk-G7N5NPRJ.js.map} +0 -0
  604. /package/dist/{chunk-CCQ7YKOD.js.map → chunk-GBYZ6653.js.map} +0 -0
  605. /package/dist/{chunk-YKKVIJVX.js.map → chunk-GQDSC6QZ.js.map} +0 -0
  606. /package/dist/{chunk-5X6JP75Q.js.map → chunk-GRSODLVO.js.map} +0 -0
  607. /package/dist/{chunk-73YP3R5X.js.map → chunk-GSESCQFY.js.map} +0 -0
  608. /package/dist/{chunk-MZLEBFUZ.js.map → chunk-GZD6VBIK.js.map} +0 -0
  609. /package/dist/{chunk-IZR2QRFF.js.map → chunk-H3HH5AHS.js.map} +0 -0
  610. /package/dist/{chunk-OJPUVUB6.js.map → chunk-HAOZCLLA.js.map} +0 -0
  611. /package/dist/{chunk-ZBHDGAYL.js.map → chunk-HEFE4OZJ.js.map} +0 -0
  612. /package/dist/{chunk-WTG34JVA.js.map → chunk-HI75UTI6.js.map} +0 -0
  613. /package/dist/{chunk-OMBIG3NC.js.map → chunk-HM633ROV.js.map} +0 -0
  614. /package/dist/{chunk-WDFZWSKD.js.map → chunk-HRIP4M6H.js.map} +0 -0
  615. /package/dist/{chunk-A2BCW6CQ.js.map → chunk-HU2DRFFI.js.map} +0 -0
  616. /package/dist/{chunk-PO35PBAB.js.map → chunk-HVH7FFJH.js.map} +0 -0
  617. /package/dist/{chunk-EG7KNUF7.js.map → chunk-HYTXTKST.js.map} +0 -0
  618. /package/dist/{chunk-TFHG75A4.js.map → chunk-I4XMDFUJ.js.map} +0 -0
  619. /package/dist/{chunk-IZHVZZQA.js.map → chunk-ICAUYWSL.js.map} +0 -0
  620. /package/dist/{chunk-DCLPWYP3.js.map → chunk-IEVPJ3G6.js.map} +0 -0
  621. /package/dist/{chunk-EVWZHDSF.js.map → chunk-IKH3VTA4.js.map} +0 -0
  622. /package/dist/{chunk-TYHLEFD2.js.map → chunk-IZJNMRIR.js.map} +0 -0
  623. /package/dist/{chunk-D2SR3TEB.js.map → chunk-J243WGUA.js.map} +0 -0
  624. /package/dist/{chunk-QGSGIYE3.js.map → chunk-J2C6LB6W.js.map} +0 -0
  625. /package/dist/{chunk-MT6TRTXF.js.map → chunk-J5MEDX7C.js.map} +0 -0
  626. /package/dist/{chunk-6QHUKBJP.js.map → chunk-J7SKOO44.js.map} +0 -0
  627. /package/dist/{chunk-W2QK7PYS.js.map → chunk-JAAST75A.js.map} +0 -0
  628. /package/dist/{chunk-NQCMS4AJ.js.map → chunk-JQCGPTZ6.js.map} +0 -0
  629. /package/dist/{chunk-CMUXJHGH.js.map → chunk-JRSCWQMC.js.map} +0 -0
  630. /package/dist/{chunk-Q4OHNGGB.js.map → chunk-JRXHSVD5.js.map} +0 -0
  631. /package/dist/{chunk-SD2K5ZN5.js.map → chunk-JXYLDT6X.js.map} +0 -0
  632. /package/dist/{chunk-IXX6ZOL2.js.map → chunk-KGTMHEAP.js.map} +0 -0
  633. /package/dist/{chunk-22OBGVEJ.js.map → chunk-KOXVGPW4.js.map} +0 -0
  634. /package/dist/{chunk-NOZ5CGZE.js.map → chunk-L5GPPMUB.js.map} +0 -0
  635. /package/dist/{chunk-4FOOHMTU.js.map → chunk-LY6727IF.js.map} +0 -0
  636. /package/dist/{chunk-PT7MTXRE.js.map → chunk-MAOCN7J6.js.map} +0 -0
  637. /package/dist/{chunk-4K2JSJNX.js.map → chunk-MB5LZVDO.js.map} +0 -0
  638. /package/dist/{chunk-5LES64PP.js.map → chunk-MKOQAVOE.js.map} +0 -0
  639. /package/dist/{chunk-BMV2SNYX.js.map → chunk-MUPWNSEJ.js.map} +0 -0
  640. /package/dist/{chunk-Y5TRG22C.js.map → chunk-NRXIECWC.js.map} +0 -0
  641. /package/dist/{chunk-GOE7G5JX.js.map → chunk-NWSAF6P5.js.map} +0 -0
  642. /package/dist/{chunk-DUM363VS.js.map → chunk-OFZQJNF6.js.map} +0 -0
  643. /package/dist/{chunk-CKN5QPEL.js.map → chunk-OMF7POEY.js.map} +0 -0
  644. /package/dist/{chunk-MVXKO2BD.js.map → chunk-OXD6ET34.js.map} +0 -0
  645. /package/dist/{chunk-47JUEVME.js.map → chunk-PALX6HWV.js.map} +0 -0
  646. /package/dist/{chunk-B6OGSG7I.js.map → chunk-PE3BLBDT.js.map} +0 -0
  647. /package/dist/{chunk-RVISSNVE.js.map → chunk-PMZKJOG6.js.map} +0 -0
  648. /package/dist/{chunk-CESAMXWX.js.map → chunk-PQUTMG3S.js.map} +0 -0
  649. /package/dist/{chunk-7VFCOKPG.js.map → chunk-PWBGODZU.js.map} +0 -0
  650. /package/dist/{chunk-MOPAXD2H.js.map → chunk-QCADUTYX.js.map} +0 -0
  651. /package/dist/{chunk-CT5FBO7E.js.map → chunk-RPOUJI25.js.map} +0 -0
  652. /package/dist/{chunk-WKHYOS72.js.map → chunk-RW4GFE56.js.map} +0 -0
  653. /package/dist/{chunk-FH4GO7HO.js.map → chunk-RYLVVDR7.js.map} +0 -0
  654. /package/dist/{chunk-QZRDCFHI.js.map → chunk-S66SBBFQ.js.map} +0 -0
  655. /package/dist/{chunk-CQJFIPAH.js.map → chunk-S7TNV2I7.js.map} +0 -0
  656. /package/dist/{chunk-ZBQSIGGR.js.map → chunk-SC773IMJ.js.map} +0 -0
  657. /package/dist/{chunk-FBJ2HK7A.js.map → chunk-SGPJ3YS2.js.map} +0 -0
  658. /package/dist/{chunk-A2EWJQXX.js.map → chunk-SM5QX6UK.js.map} +0 -0
  659. /package/dist/{chunk-RKZWCTXV.js.map → chunk-TAEKDMEF.js.map} +0 -0
  660. /package/dist/{chunk-6AVCAUGL.js.map → chunk-TASEV25T.js.map} +0 -0
  661. /package/dist/{chunk-3XOISKZC.js.map → chunk-TLGDPMUX.js.map} +0 -0
  662. /package/dist/{chunk-5IUW34PG.js.map → chunk-TY3QYPJ6.js.map} +0 -0
  663. /package/dist/{chunk-VQFR4EU4.js.map → chunk-U3JK5VJV.js.map} +0 -0
  664. /package/dist/{chunk-2AWMJO54.js.map → chunk-U42P3RMZ.js.map} +0 -0
  665. /package/dist/{chunk-GUU75DES.js.map → chunk-UEJTOPLW.js.map} +0 -0
  666. /package/dist/{chunk-OZOEWLGR.js.map → chunk-UT6JAORE.js.map} +0 -0
  667. /package/dist/{chunk-5TELOQA6.js.map → chunk-UTHPUINA.js.map} +0 -0
  668. /package/dist/{chunk-26RQ6JBR.js.map → chunk-VBVCNH6D.js.map} +0 -0
  669. /package/dist/{chunk-P646DND6.js.map → chunk-VCMQPCME.js.map} +0 -0
  670. /package/dist/{chunk-LV7FMIMM.js.map → chunk-VGUHAHHV.js.map} +0 -0
  671. /package/dist/{chunk-GYVXARCY.js.map → chunk-VIBPFVU4.js.map} +0 -0
  672. /package/dist/{chunk-KHPOKZ6Z.js.map → chunk-VMAC66JX.js.map} +0 -0
  673. /package/dist/{chunk-SHKRS6I5.js.map → chunk-VRPNETPK.js.map} +0 -0
  674. /package/dist/{chunk-6U4J6RVS.js.map → chunk-WCHW4XN7.js.map} +0 -0
  675. /package/dist/{chunk-CJH6QUQJ.js.map → chunk-WD3UXNJV.js.map} +0 -0
  676. /package/dist/{chunk-H5EVWF6L.js.map → chunk-WR67FJMX.js.map} +0 -0
  677. /package/dist/{chunk-XLIJ36RG.js.map → chunk-WRMQ7EX4.js.map} +0 -0
  678. /package/dist/{chunk-7KLCFJ5G.js.map → chunk-X4PPGXQG.js.map} +0 -0
  679. /package/dist/{chunk-ZE2JTVCQ.js.map → chunk-X5BMQXFD.js.map} +0 -0
  680. /package/dist/{chunk-UECU6LZI.js.map → chunk-XXRBOSWV.js.map} +0 -0
  681. /package/dist/{chunk-SPKAIDWX.js.map → chunk-XZEFCPBL.js.map} +0 -0
  682. /package/dist/{chunk-EZ5NYRHK.js.map → chunk-YL6N7QLA.js.map} +0 -0
  683. /package/dist/{chunk-VAIESMPY.js.map → chunk-YVBHGMKC.js.map} +0 -0
  684. /package/dist/{chunk-AR62NQXE.js.map → chunk-Z2S5VQG7.js.map} +0 -0
  685. /package/dist/{chunk-7UQJEADK.js.map → chunk-ZL2O4BYP.js.map} +0 -0
  686. /package/dist/{chunk-FOOITLHR.js.map → chunk-ZZHBT5WQ.js.map} +0 -0
  687. /package/dist/{chunk-X6VJQJYY.js.map → chunk-ZZWHKC6A.js.map} +0 -0
  688. /package/dist/{model-policy-picker-menu-XOPYY6YA.js.map → computer-viewer-S6TE6TN7.js.map} +0 -0
  689. /package/dist/{sandbox-files-LJCR437H.js.map → embedded-new-voice-ZDZPGX25.js.map} +0 -0
  690. /package/dist/{session-realtime-UISLBZ4A.js.map → embedded-voice-FKCUXSJO.js.map} +0 -0
  691. /package/dist/{fleet-decision-row-5UCJXTDP.js.map → fleet-decision-row-VCGWYJAV.js.map} +0 -0
  692. /package/dist/{latest-question-VGVNUGAU.js.map → latest-question-SINEV4U6.js.map} +0 -0
  693. /package/dist/{platform-activity-row-56XOVTRA.js.map → platform-activity-row-LU5WABI2.js.map} +0 -0
@@ -0,0 +1,217 @@
1
+ import type { DraftTimelineAnnotation } from "@opengeni/sdk";
2
+ import type { TimelineAnnotationSourceDescriptor } from "./types";
3
+
4
+ /* ----------------------------------------------------------------------------
5
+ Timeline annotations without the DOM: how a selected quote becomes a draft
6
+ annotation (source offsets and context), shared by the web selection
7
+ popover and native renderers that report a selection as plain text.
8
+ -------------------------------------------------------------------------- */
9
+
10
+ /** Bytes of source text kept on each side of a quote. */
11
+ export const ANNOTATION_SOURCE_CONTEXT_BYTES = 160;
12
+ /** Longest quote an annotation may carry. */
13
+ export const ANNOTATION_MAX_QUOTE_BYTES = 16 * 1024;
14
+ /** Longest note an annotation may carry (characters). */
15
+ export const ANNOTATION_MAX_NOTE_LENGTH = 2048;
16
+
17
+ export function annotationHasNote(note: string): boolean {
18
+ return note.trim().length > 0;
19
+ }
20
+
21
+ export function annotationDisplayOrdinal(
22
+ annotation: { readonly id?: string; readonly ordinal?: number | undefined },
23
+ index: number,
24
+ ): number {
25
+ return typeof annotation.ordinal === "number" ? annotation.ordinal : index + 1;
26
+ }
27
+
28
+ export function truncateAnnotationQuote(quote: string, maxChars = 160): string {
29
+ const normalized = quote.replace(/\s+/g, " ").trim();
30
+ if (normalized.length <= maxChars) return normalized;
31
+ return `${normalized.slice(0, Math.max(0, maxChars - 1)).trimEnd()}…`;
32
+ }
33
+
34
+ export function occurrenceOffsets(text: string, quote: string): number[] {
35
+ if (!quote) return [];
36
+ const offsets: number[] = [];
37
+ let cursor = 0;
38
+ while (cursor <= text.length - quote.length) {
39
+ const offset = text.indexOf(quote, cursor);
40
+ if (offset < 0) break;
41
+ offsets.push(offset);
42
+ cursor = offset + 1;
43
+ }
44
+ return offsets;
45
+ }
46
+
47
+ function uniqueNonEmpty(values: string[]): string[] {
48
+ const seen = new Set<string>();
49
+ const out: string[] = [];
50
+ for (const value of values) {
51
+ if (!value || seen.has(value)) continue;
52
+ seen.add(value);
53
+ out.push(value);
54
+ }
55
+ return out;
56
+ }
57
+
58
+ /**
59
+ * The part of a rendered selection that appears verbatim in the source text.
60
+ * Rendered text drops markdown syntax, so a selection across formatting falls
61
+ * back to its longest matching prefix, then suffix (at least 8 characters).
62
+ */
63
+ export function matchingQuoteInSource(sourceText: string, quote: string): string | null {
64
+ for (const candidate of uniqueNonEmpty([quote, quote.trim()])) {
65
+ if (sourceText.includes(candidate)) return candidate;
66
+ }
67
+ const trimmed = quote.trim();
68
+ for (let length = trimmed.length; length >= 8; length--) {
69
+ const slice = trimmed.slice(0, length);
70
+ if (sourceText.includes(slice)) return slice;
71
+ }
72
+ for (let start = 1; start <= trimmed.length - 8; start++) {
73
+ const slice = trimmed.slice(start);
74
+ if (sourceText.includes(slice)) return slice;
75
+ }
76
+ return null;
77
+ }
78
+
79
+ const encoder = new TextEncoder();
80
+
81
+ export function utf8ByteLength(value: string): number {
82
+ return encoder.encode(value).byteLength;
83
+ }
84
+
85
+ export function utf8Prefix(value: string, maxBytes: number): string {
86
+ let output = "";
87
+ let bytes = 0;
88
+ for (const character of value) {
89
+ const next = encoder.encode(character).byteLength;
90
+ if (bytes + next > maxBytes) break;
91
+ output += character;
92
+ bytes += next;
93
+ }
94
+ return output;
95
+ }
96
+
97
+ export function utf8Suffix(value: string, maxBytes: number): string {
98
+ let output = "";
99
+ let bytes = 0;
100
+ for (const character of [...value].reverse()) {
101
+ const next = encoder.encode(character).byteLength;
102
+ if (bytes + next > maxBytes) break;
103
+ output = character + output;
104
+ bytes += next;
105
+ }
106
+ return output;
107
+ }
108
+
109
+ function commonSuffixLength(a: string, b: string): number {
110
+ let count = 0;
111
+ while (
112
+ count < a.length &&
113
+ count < b.length &&
114
+ a[a.length - 1 - count] === b[b.length - 1 - count]
115
+ )
116
+ count++;
117
+ return count;
118
+ }
119
+
120
+ function commonPrefixLength(a: string, b: string): number {
121
+ let count = 0;
122
+ while (count < a.length && count < b.length && a[count] === b[count]) count++;
123
+ return count;
124
+ }
125
+
126
+ /**
127
+ * Which occurrence of `quote` in `sourceText` a selection meant, judged by the
128
+ * rendered text around the selection. Markdown syntax breaks exact matches,
129
+ * so the occurrence whose neighbouring characters agree longest wins.
130
+ */
131
+ export function bestQuoteOccurrence(
132
+ sourceText: string,
133
+ quote: string,
134
+ offsets: readonly number[],
135
+ textBefore: string,
136
+ textAfter: string,
137
+ ): number {
138
+ if (offsets.length <= 1) return 0;
139
+ const before = textBefore.slice(-ANNOTATION_SOURCE_CONTEXT_BYTES);
140
+ const after = textAfter.slice(0, ANNOTATION_SOURCE_CONTEXT_BYTES);
141
+ let best = 0;
142
+ let bestScore = -1;
143
+ offsets.forEach((offset, index) => {
144
+ const score =
145
+ commonSuffixLength(before, sourceText.slice(Math.max(0, offset - before.length), offset)) +
146
+ commonPrefixLength(after, sourceText.slice(offset + quote.length));
147
+ if (score > bestScore) {
148
+ best = index;
149
+ bestScore = score;
150
+ }
151
+ });
152
+ return best;
153
+ }
154
+
155
+ function annotationId(): string {
156
+ if (typeof globalThis.crypto?.randomUUID === "function") {
157
+ return globalThis.crypto.randomUUID();
158
+ }
159
+ return `annotation-${Date.now()}-${Math.random().toString(16).slice(2)}`;
160
+ }
161
+
162
+ export type AnnotationSelection = {
163
+ /** The selected text as rendered. */
164
+ text: string;
165
+ /**
166
+ * Which occurrence of the quote in the source was selected, when the
167
+ * renderer can count it; otherwise the surrounding rendered text decides.
168
+ */
169
+ occurrence?: number | undefined;
170
+ /** Rendered text just before the selection (used when `occurrence` is unknown). */
171
+ textBefore?: string | undefined;
172
+ /** Rendered text just after the selection. */
173
+ textAfter?: string | undefined;
174
+ };
175
+
176
+ /**
177
+ * A draft annotation for a selection inside `source`, or null when nothing
178
+ * selected is in the source text or the quote is empty or too long.
179
+ */
180
+ export function annotationFromSelection(
181
+ source: TimelineAnnotationSourceDescriptor,
182
+ selection: AnnotationSelection,
183
+ id: string = annotationId(),
184
+ ): DraftTimelineAnnotation | null {
185
+ const quote = matchingQuoteInSource(source.text, selection.text) ?? selection.text;
186
+ if (quote.trim().length === 0 || utf8ByteLength(quote) > ANNOTATION_MAX_QUOTE_BYTES) return null;
187
+ const offsets = occurrenceOffsets(source.text, quote);
188
+ if (offsets.length === 0) return null;
189
+ const occurrence =
190
+ selection.occurrence ??
191
+ bestQuoteOccurrence(
192
+ source.text,
193
+ quote,
194
+ offsets,
195
+ selection.textBefore ?? "",
196
+ selection.textAfter ?? "",
197
+ );
198
+ const startOffset = offsets[Math.min(Math.max(0, occurrence), offsets.length - 1)]!;
199
+ const endOffset = startOffset + quote.length;
200
+ return {
201
+ id,
202
+ quote,
203
+ note: "",
204
+ source: {
205
+ kind: source.kind,
206
+ eventId: source.eventId,
207
+ eventType: source.eventType,
208
+ sequence: source.sequence,
209
+ turnId: source.turnId,
210
+ startOffset,
211
+ endOffset,
212
+ contextBefore: utf8Suffix(source.text.slice(0, startOffset), ANNOTATION_SOURCE_CONTEXT_BYTES),
213
+ contextAfter: utf8Prefix(source.text.slice(endOffset), ANNOTATION_SOURCE_CONTEXT_BYTES),
214
+ ...(source.label ? { label: source.label } : {}),
215
+ },
216
+ };
217
+ }
@@ -186,6 +186,11 @@ export function buildTimeline(
186
186
  options: BuildTimelineOptions = {},
187
187
  ): TimelineItem[] {
188
188
  const items: TimelineItem[] = [];
189
+ // Calls remain in insertion order while message bubbles can move. Keep the
190
+ // two existing lookup rules separate: creation merges only tool rows, while
191
+ // an output correlates to the latest tool or worker with that exact id.
192
+ const toolCallsById = new Map<string, ToolCallItem>();
193
+ const callsById = new Map<string, ToolCallItem | WorkerItem>();
189
194
  const allowanceNotices = new Set<string>();
190
195
  // One "not saved" notice per turn for the same refused change, however
191
196
  // often the agent retried it.
@@ -895,7 +900,7 @@ export function buildTimeline(
895
900
  ) {
896
901
  const spawn = toolMatchesLeaf(name, WORKER_SPAWN_TOOL);
897
902
  const title = spawn ? workerTitle(args) : null;
898
- items.push({
903
+ const item: WorkerItem = {
899
904
  kind: "worker",
900
905
  id: event.id,
901
906
  turnId,
@@ -907,7 +912,9 @@ export function buildTimeline(
907
912
  failure: null,
908
913
  status: "running",
909
914
  occurredAt: event.occurredAt,
910
- });
915
+ };
916
+ items.push(item);
917
+ if (callId) callsById.set(callId, item);
911
918
  break;
912
919
  }
913
920
  if (LANDMARK_ONLY_TOOL_LEAVES.has(mcpToolLeaf(name))) {
@@ -918,11 +925,7 @@ export function buildTimeline(
918
925
  // `RunToolCallItem` share the same item id. Merge so mid-stream cards
919
926
  // do not duplicate when the step finally materializes.
920
927
  if (callId) {
921
- const existing = [...items]
922
- .reverse()
923
- .find(
924
- (item): item is ToolCallItem => item.kind === "tool-call" && item.callId === callId,
925
- );
928
+ const existing = toolCallsById.get(callId);
926
929
  if (existing) {
927
930
  if (display) existing.display = display;
928
931
  if (args != null) {
@@ -935,7 +938,7 @@ export function buildTimeline(
935
938
  break;
936
939
  }
937
940
  }
938
- items.push({
941
+ const item: ToolCallItem = {
939
942
  kind: "tool-call",
940
943
  id: event.id,
941
944
  turnId,
@@ -950,13 +953,18 @@ export function buildTimeline(
950
953
  raw: payload.raw,
951
954
  status: providerNativeToolStatus(payload.raw),
952
955
  occurredAt: event.occurredAt,
953
- });
956
+ };
957
+ items.push(item);
958
+ if (callId) {
959
+ toolCallsById.set(callId, item);
960
+ callsById.set(callId, item);
961
+ }
954
962
  break;
955
963
  }
956
964
 
957
965
  case "agent.toolCall.output": {
958
966
  const callId = typeof payload.id === "string" ? payload.id : null;
959
- const target = findOpenCall(items, callId);
967
+ const target = findOpenCall(items, callId, callsById);
960
968
  if (!target) {
961
969
  break;
962
970
  }
@@ -3903,23 +3911,21 @@ function toolCallTruncation(payload: Record<string, unknown>): ToolCallTruncatio
3903
3911
  function findOpenCall(
3904
3912
  items: TimelineItem[],
3905
3913
  callId: string | null,
3914
+ callsById: ReadonlyMap<string, ToolCallItem | WorkerItem>,
3906
3915
  ): ToolCallItem | WorkerItem | undefined {
3907
- const reversed = [...items].reverse();
3908
- const isCall = (item: TimelineItem): item is ToolCallItem | WorkerItem =>
3909
- item.kind === "tool-call" || item.kind === "worker";
3910
3916
  if (callId) {
3911
- const byId = reversed.find((item) => isCall(item) && item.callId === callId);
3912
- if (byId) {
3913
- return byId as ToolCallItem | WorkerItem;
3914
- }
3915
3917
  // An explicit provider correlation id is authoritative. Falling back to
3916
3918
  // an unrelated running call corrupts its status/output when compact pages
3917
3919
  // or interleaved providers deliver an unmatched historical result.
3918
- return undefined;
3920
+ return callsById.get(callId);
3919
3921
  }
3920
- return reversed.find(
3921
- (item): item is ToolCallItem | WorkerItem => isCall(item) && item.status === "running",
3922
- );
3922
+ for (let index = items.length - 1; index >= 0; index -= 1) {
3923
+ const item = items[index]!;
3924
+ if ((item.kind === "tool-call" || item.kind === "worker") && item.status === "running") {
3925
+ return item;
3926
+ }
3927
+ }
3928
+ return undefined;
3923
3929
  }
3924
3930
 
3925
3931
  function findOpenSandbox(items: TimelineItem[], name: string): SandboxItem | undefined {
@@ -154,3 +154,17 @@ export {
154
154
  parseNotificationText,
155
155
  } from "./notification-text";
156
156
  export type { NotificationBlock, NotificationSpan } from "./notification-text";
157
+ export {
158
+ ANNOTATION_MAX_NOTE_LENGTH,
159
+ ANNOTATION_MAX_QUOTE_BYTES,
160
+ ANNOTATION_SOURCE_CONTEXT_BYTES,
161
+ annotationDisplayOrdinal,
162
+ annotationFromSelection,
163
+ annotationHasNote,
164
+ bestQuoteOccurrence,
165
+ matchingQuoteInSource,
166
+ occurrenceOffsets,
167
+ truncateAnnotationQuote,
168
+ } from "./timeline/annotation-model";
169
+ export type { AnnotationSelection } from "./timeline/annotation-model";
170
+ export { annotationNoteNeedsDisclosure } from "./components/timeline-annotation-layout";
@@ -6,6 +6,7 @@ import { ContextMenu as ContextMenuPrimitive } from "radix-ui";
6
6
  import {
7
7
  MENU_ITEM_CLASS,
8
8
  MENU_LABEL_CLASS,
9
+ MENU_META_CLASS,
9
10
  MENU_SEPARATOR_CLASS,
10
11
  MENU_SURFACE_CLASS,
11
12
  } from "./menu-styles";
@@ -97,8 +98,23 @@ function ContextMenuLabel({
97
98
  );
98
99
  }
99
100
 
101
+ /** An item's key on the right, like `DropdownMenuShortcut`. */
102
+ function ContextMenuShortcut({ className, ...props }: React.ComponentProps<"span">) {
103
+ return (
104
+ <span
105
+ // The item carries the key in aria-keyshortcuts; glyphs like "⇧⌘,"
106
+ // would only garble its accessible name.
107
+ aria-hidden
108
+ data-slot="context-menu-shortcut"
109
+ className={cn(MENU_META_CLASS, "tracking-widest pointer-coarse:hidden", className)}
110
+ {...props}
111
+ />
112
+ );
113
+ }
114
+
100
115
  export {
101
116
  ContextMenu,
117
+ ContextMenuShortcut,
102
118
  ContextMenuTrigger,
103
119
  ContextMenuContent,
104
120
  ContextMenuItem,
@@ -175,8 +175,11 @@ function DropdownMenuSeparator({
175
175
  function DropdownMenuShortcut({ className, ...props }: React.ComponentProps<"span">) {
176
176
  return (
177
177
  <span
178
+ // The item carries the key in aria-keyshortcuts; glyphs like "⇧⌘,"
179
+ // would only garble its accessible name.
180
+ aria-hidden
178
181
  data-slot="dropdown-menu-shortcut"
179
- className={cn(MENU_META_CLASS, "tracking-widest", className)}
182
+ className={cn(MENU_META_CLASS, "tracking-widest pointer-coarse:hidden", className)}
180
183
  {...props}
181
184
  />
182
185
  );
@@ -138,7 +138,10 @@ export function SegmentedControl<Value extends string = string>({
138
138
  className={cn(
139
139
  itemClasses(variant, size),
140
140
  option.iconOnly && variant !== "underline" && "px-2",
141
+ // Equal-width segments center their label, so side padding only
142
+ // decides when a long label truncates in a narrow row.
141
143
  fullWidth && "flex-1",
144
+ fullWidth && variant !== "underline" && "px-1.5",
142
145
  )}
143
146
  >
144
147
  {/* While saving, the content fades and a spinner takes its place, so
@@ -870,6 +870,9 @@
870
870
  :where(.og-root).top-10,:where(.og-root) .top-10 {
871
871
  top: calc(var(--spacing) * 10);
872
872
  }
873
+ :where(.og-root).top-\[12dvh\],:where(.og-root) .top-\[12dvh\] {
874
+ top: 12dvh;
875
+ }
873
876
  :where(.og-root).top-\[30px\],:where(.og-root) .top-\[30px\] {
874
877
  top: 30px;
875
878
  }
@@ -1517,6 +1520,9 @@
1517
1520
  :where(.og-root).h-12,:where(.og-root) .h-12 {
1518
1521
  height: calc(var(--spacing) * 12);
1519
1522
  }
1523
+ :where(.og-root).h-13,:where(.og-root) .h-13 {
1524
+ height: calc(var(--spacing) * 13);
1525
+ }
1520
1526
  :where(.og-root).h-16,:where(.og-root) .h-16 {
1521
1527
  height: calc(var(--spacing) * 16);
1522
1528
  }
@@ -1685,6 +1691,12 @@
1685
1691
  :where(.og-root).max-h-\[min\(32rem\,var\(--radix-popover-content-available-height\)\)\],:where(.og-root) .max-h-\[min\(32rem\,var\(--radix-popover-content-available-height\)\)\] {
1686
1692
  max-height: min(32rem, var(--radix-popover-content-available-height));
1687
1693
  }
1694
+ :where(.og-root).max-h-\[min\(480px\,70dvh\)\],:where(.og-root) .max-h-\[min\(480px\,70dvh\)\] {
1695
+ max-height: min(480px, 70dvh);
1696
+ }
1697
+ :where(.og-root).max-h-\[min\(560px\,76dvh\)\],:where(.og-root) .max-h-\[min\(560px\,76dvh\)\] {
1698
+ max-height: min(560px, 76dvh);
1699
+ }
1688
1700
  :where(.og-root).max-h-\[min\(calc\(var\(--radix-dropdown-menu-content-available-height\,70vh\)-3\.5rem\)\,620px\)\],:where(.og-root) .max-h-\[min\(calc\(var\(--radix-dropdown-menu-content-available-height\,70vh\)-3\.5rem\)\,620px\)\] {
1689
1701
  max-height: min(calc(var(--radix-dropdown-menu-content-available-height,70vh) - 3.5rem), 620px);
1690
1702
  }
@@ -1721,6 +1733,9 @@
1721
1733
  :where(.og-root).min-h-12,:where(.og-root) .min-h-12 {
1722
1734
  min-height: calc(var(--spacing) * 12);
1723
1735
  }
1736
+ :where(.og-root).min-h-13,:where(.og-root) .min-h-13 {
1737
+ min-height: calc(var(--spacing) * 13);
1738
+ }
1724
1739
  :where(.og-root).min-h-14,:where(.og-root) .min-h-14 {
1725
1740
  min-height: calc(var(--spacing) * 14);
1726
1741
  }
@@ -1931,6 +1946,9 @@
1931
1946
  :where(.og-root).w-\[calc\(100\%-2rem\)\],:where(.og-root) .w-\[calc\(100\%-2rem\)\] {
1932
1947
  width: calc(100% - 2rem);
1933
1948
  }
1949
+ :where(.og-root).w-\[calc\(100vw-1\.5rem\)\],:where(.og-root) .w-\[calc\(100vw-1\.5rem\)\] {
1950
+ width: calc(100vw - 1.5rem);
1951
+ }
1934
1952
  :where(.og-root).w-\[clamp\(12rem\,28\%\,15rem\)\],:where(.og-root) .w-\[clamp\(12rem\,28\%\,15rem\)\] {
1935
1953
  width: clamp(12rem, 28%, 15rem);
1936
1954
  }
@@ -2048,6 +2066,9 @@
2048
2066
  :where(.og-root).max-w-\[18em\],:where(.og-root) .max-w-\[18em\] {
2049
2067
  max-width: 18em;
2050
2068
  }
2069
+ :where(.og-root).max-w-\[45\%\],:where(.og-root) .max-w-\[45\%\] {
2070
+ max-width: 45%;
2071
+ }
2051
2072
  :where(.og-root).max-w-\[48ch\],:where(.og-root) .max-w-\[48ch\] {
2052
2073
  max-width: 48ch;
2053
2074
  }
@@ -2090,6 +2111,9 @@
2090
2111
  :where(.og-root).max-w-\[380px\],:where(.og-root) .max-w-\[380px\] {
2091
2112
  max-width: 380px;
2092
2113
  }
2114
+ :where(.og-root).max-w-\[440px\],:where(.og-root) .max-w-\[440px\] {
2115
+ max-width: 440px;
2116
+ }
2093
2117
  :where(.og-root).max-w-\[480px\],:where(.og-root) .max-w-\[480px\] {
2094
2118
  max-width: 480px;
2095
2119
  }
@@ -2171,6 +2195,9 @@
2171
2195
  :where(.og-root).min-w-4\.5,:where(.og-root) .min-w-4\.5 {
2172
2196
  min-width: calc(var(--spacing) * 4.5);
2173
2197
  }
2198
+ :where(.og-root).min-w-5,:where(.og-root) .min-w-5 {
2199
+ min-width: calc(var(--spacing) * 5);
2200
+ }
2174
2201
  :where(.og-root).min-w-6,:where(.og-root) .min-w-6 {
2175
2202
  min-width: calc(var(--spacing) * 6);
2176
2203
  }
@@ -2698,6 +2725,9 @@
2698
2725
  :where(.og-root).gap-x-8,:where(.og-root) .gap-x-8 {
2699
2726
  column-gap: calc(var(--spacing) * 8);
2700
2727
  }
2728
+ :where(.og-root).gap-x-10,:where(.og-root) .gap-x-10 {
2729
+ column-gap: calc(var(--spacing) * 10);
2730
+ }
2701
2731
  :where(.og-root).-space-x-1\.5,:where(.og-root) .-space-x-1\.5 {
2702
2732
  :where(& > :not(:last-child)) {
2703
2733
  --tw-space-x-reverse: 0;
@@ -2967,6 +2997,10 @@
2967
2997
  border-style: var(--tw-border-style);
2968
2998
  border-width: 2px;
2969
2999
  }
3000
+ :where(.og-root).border-\[1\.5px\],:where(.og-root) .border-\[1\.5px\] {
3001
+ border-style: var(--tw-border-style);
3002
+ border-width: 1.5px;
3003
+ }
2970
3004
  :where(.og-root).border-x-0,:where(.og-root) .border-x-0 {
2971
3005
  border-inline-style: var(--tw-border-style);
2972
3006
  border-inline-width: 0px;
@@ -3110,6 +3144,12 @@
3110
3144
  border-color: color-mix(in oklab, var(--color-danger) 70%, transparent);
3111
3145
  }
3112
3146
  }
3147
+ :where(.og-root).border-fg-subtle\/40,:where(.og-root) .border-fg-subtle\/40 {
3148
+ border-color: var(--color-fg-subtle);
3149
+ @supports (color: color-mix(in lab, red, red)) {
3150
+ border-color: color-mix(in oklab, var(--color-fg-subtle) 40%, transparent);
3151
+ }
3152
+ }
3113
3153
  :where(.og-root).border-og-accent,:where(.og-root) .border-og-accent {
3114
3154
  border-color: var(--og-color-accent);
3115
3155
  }
@@ -3356,6 +3396,9 @@
3356
3396
  border-color: color-mix(in oklab, var(--color-white) 15%, transparent);
3357
3397
  }
3358
3398
  }
3399
+ :where(.og-root).border-t-fg-muted,:where(.og-root) .border-t-fg-muted {
3400
+ border-top-color: var(--color-fg-muted);
3401
+ }
3359
3402
  :where(.og-root).border-t-transparent,:where(.og-root) .border-t-transparent {
3360
3403
  border-top-color: transparent;
3361
3404
  }
@@ -3392,6 +3435,12 @@
3392
3435
  :where(.og-root).bg-black,:where(.og-root) .bg-black {
3393
3436
  background-color: var(--color-black);
3394
3437
  }
3438
+ :where(.og-root).bg-black\/15,:where(.og-root) .bg-black\/15 {
3439
+ background-color: color-mix(in srgb, #000 15%, transparent);
3440
+ @supports (color: color-mix(in lab, red, red)) {
3441
+ background-color: color-mix(in oklab, var(--color-black) 15%, transparent);
3442
+ }
3443
+ }
3395
3444
  :where(.og-root).bg-black\/25,:where(.og-root) .bg-black\/25 {
3396
3445
  background-color: color-mix(in srgb, #000 25%, transparent);
3397
3446
  @supports (color: color-mix(in lab, red, red)) {
@@ -4523,6 +4572,9 @@
4523
4572
  :where(.og-root).align-\[-0\.125rem\],:where(.og-root) .align-\[-0\.125rem\] {
4524
4573
  vertical-align: -0.125rem;
4525
4574
  }
4575
+ :where(.og-root).align-\[-4px\],:where(.og-root) .align-\[-4px\] {
4576
+ vertical-align: -4px;
4577
+ }
4526
4578
  :where(.og-root).align-baseline,:where(.og-root) .align-baseline {
4527
4579
  vertical-align: baseline;
4528
4580
  }
@@ -5437,6 +5489,10 @@
5437
5489
  --tw-duration: 500ms;
5438
5490
  transition-duration: 500ms;
5439
5491
  }
5492
+ :where(.og-root).duration-\[100ms\],:where(.og-root) .duration-\[100ms\] {
5493
+ --tw-duration: 100ms;
5494
+ transition-duration: 100ms;
5495
+ }
5440
5496
  :where(.og-root).duration-\[120ms\],:where(.og-root) .duration-\[120ms\] {
5441
5497
  --tw-duration: 120ms;
5442
5498
  transition-duration: 120ms;
@@ -8695,6 +8751,11 @@
8695
8751
  position: static;
8696
8752
  }
8697
8753
  }
8754
+ :where(.og-root).max-sm\:top-3,:where(.og-root) .max-sm\:top-3 {
8755
+ @media (width < 40rem) {
8756
+ top: calc(var(--spacing) * 3);
8757
+ }
8758
+ }
8698
8759
  :where(.og-root).max-sm\:bottom-3,:where(.og-root) .max-sm\:bottom-3 {
8699
8760
  @media (width < 40rem) {
8700
8761
  bottom: calc(var(--spacing) * 3);
@@ -8833,6 +8894,11 @@
8833
8894
  padding-inline: calc(var(--spacing) * 5);
8834
8895
  }
8835
8896
  }
8897
+ :where(.og-root).max-sm\:pt-5,:where(.og-root) .max-sm\:pt-5 {
8898
+ @media (width < 40rem) {
8899
+ padding-top: calc(var(--spacing) * 5);
8900
+ }
8901
+ }
8836
8902
  :where(.og-root).max-sm\:pr-10,:where(.og-root) .max-sm\:pr-10 {
8837
8903
  @media (width < 40rem) {
8838
8904
  padding-right: calc(var(--spacing) * 10);
@@ -9061,6 +9127,11 @@
9061
9127
  max-width: 640px;
9062
9128
  }
9063
9129
  }
9130
+ :where(.og-root).sm\:max-w-\[720px\],:where(.og-root) .sm\:max-w-\[720px\] {
9131
+ @media (width >= 40rem) {
9132
+ max-width: 720px;
9133
+ }
9134
+ }
9064
9135
  :where(.og-root).sm\:max-w-\[calc\(100vw-2rem\)\],:where(.og-root) .sm\:max-w-\[calc\(100vw-2rem\)\] {
9065
9136
  @media (width >= 40rem) {
9066
9137
  max-width: calc(100vw - 2rem);
@@ -10091,6 +10162,22 @@
10091
10162
  border-color: var(--color-border);
10092
10163
  }
10093
10164
  }
10165
+ :where(.og-root).dark\:bg-black\/40,:where(.og-root) .dark\:bg-black\/40 {
10166
+ &:where(.dark, .dark *) {
10167
+ background-color: color-mix(in srgb, #000 40%, transparent);
10168
+ @supports (color: color-mix(in lab, red, red)) {
10169
+ background-color: color-mix(in oklab, var(--color-black) 40%, transparent);
10170
+ }
10171
+ }
10172
+ }
10173
+ :where(.og-root).dark\:bg-black\/45,:where(.og-root) .dark\:bg-black\/45 {
10174
+ &:where(.dark, .dark *) {
10175
+ background-color: color-mix(in srgb, #000 45%, transparent);
10176
+ @supports (color: color-mix(in lab, red, red)) {
10177
+ background-color: color-mix(in oklab, var(--color-black) 45%, transparent);
10178
+ }
10179
+ }
10180
+ }
10094
10181
  :where(.og-root).dark\:bg-input\/30,:where(.og-root) .dark\:bg-input\/30 {
10095
10182
  &:where(.dark, .dark *) {
10096
10183
  background-color: var(--color-input);
@@ -10600,6 +10687,11 @@
10600
10687
  }
10601
10688
  }
10602
10689
  }
10690
+ :where(.og-root).pointer-fine\:flex,:where(.og-root) .pointer-fine\:flex {
10691
+ @media (pointer: fine) {
10692
+ display: flex;
10693
+ }
10694
+ }
10603
10695
  :where(.og-root).pointer-fine\:group-focus-within\:invisible,:where(.og-root) .pointer-fine\:group-focus-within\:invisible {
10604
10696
  @media (pointer: fine) {
10605
10697
  &:is(:where(.group):focus-within *) {
@@ -1,51 +0,0 @@
1
- /**
2
- * App-global keyboard shortcuts.
3
- *
4
- * Chords use Cmd on Apple platforms and Ctrl elsewhere (`metaOrCtrl`). Keep this
5
- * list small and conflict-aware — a Cmd-K command palette can surface these later.
6
- */
7
- export type ShortcutChord = {
8
- /** `KeyboardEvent.code`, e.g. `"KeyO"`. Layout-stable vs `event.key`. */
9
- code: string;
10
- /** Require ⌘ (Mac) or Ctrl (Win/Linux). */
11
- metaOrCtrl: boolean;
12
- shift?: boolean;
13
- alt?: boolean;
14
- };
15
- export type AppShortcut = {
16
- id: string;
17
- chord: ShortcutChord;
18
- /** Tooltip / help labels. */
19
- label: {
20
- mac: string;
21
- other: string;
22
- };
23
- };
24
- export declare const NEW_SESSION_SHORTCUT: {
25
- readonly id: "new-session";
26
- readonly chord: {
27
- readonly code: "KeyO";
28
- readonly metaOrCtrl: true;
29
- readonly shift: true;
30
- };
31
- readonly label: {
32
- readonly mac: "⌘⇧O";
33
- readonly other: "Ctrl+Shift+O";
34
- };
35
- };
36
- /** Every registered app shortcut — grow here; palette can read this later. */
37
- export declare const APP_SHORTCUTS: readonly [{
38
- readonly id: "new-session";
39
- readonly chord: {
40
- readonly code: "KeyO";
41
- readonly metaOrCtrl: true;
42
- readonly shift: true;
43
- };
44
- readonly label: {
45
- readonly mac: "⌘⇧O";
46
- readonly other: "Ctrl+Shift+O";
47
- };
48
- }];
49
- export declare function isApplePlatform(): boolean;
50
- export declare function shortcutLabel(shortcut: Pick<AppShortcut, "label">): string;
51
- export declare function matchesShortcut(event: Pick<KeyboardEvent, "code" | "metaKey" | "ctrlKey" | "shiftKey" | "altKey" | "repeat">, chord: ShortcutChord): boolean;
@@ -1,16 +0,0 @@
1
- "use client";
2
- import {
3
- APP_SHORTCUTS,
4
- NEW_SESSION_SHORTCUT,
5
- isApplePlatform,
6
- matchesShortcut,
7
- shortcutLabel
8
- } from "../../chunk-53IXIUYP.js";
9
- export {
10
- APP_SHORTCUTS,
11
- NEW_SESSION_SHORTCUT,
12
- isApplePlatform,
13
- matchesShortcut,
14
- shortcutLabel
15
- };
16
- //# sourceMappingURL=keyboard-shortcuts.js.map