@opengeni/react 3.1.0 → 3.1.3-canary.38890816741001

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 (863) hide show
  1. package/README.md +769 -22
  2. package/dist/accounts.js +89 -11
  3. package/dist/accounts.js.map +1 -1
  4. package/dist/approvals.d.ts +2 -1
  5. package/dist/artifacts-document.js +5 -3
  6. package/dist/artifacts-presentation.js +5 -3
  7. package/dist/artifacts-spreadsheet.d.ts +1 -1
  8. package/dist/artifacts-spreadsheet.js +5 -3
  9. package/dist/artifacts.d.ts +5 -1
  10. package/dist/artifacts.js +536 -42
  11. package/dist/artifacts.js.map +1 -1
  12. package/dist/browser-viewer-ZWR6MWJ7.js +19 -0
  13. package/dist/capability-catalog-row.d.ts +20 -0
  14. package/dist/capability-logo-fallback.d.ts +3 -0
  15. package/dist/chat-interactive-block-BO2IWXVK.js +14 -0
  16. package/dist/chunk-2DDJ6YH6.js +41 -0
  17. package/dist/chunk-2DDJ6YH6.js.map +1 -0
  18. package/dist/chunk-2HVLQ26H.js +183 -0
  19. package/dist/chunk-2HVLQ26H.js.map +1 -0
  20. package/dist/{chunk-RGALCTWO.js → chunk-2I6R3GCZ.js} +4285 -3980
  21. package/dist/chunk-2I6R3GCZ.js.map +1 -0
  22. package/dist/{chunk-D3UIAJKY.js → chunk-2SFFYIH3.js} +1179 -166
  23. package/dist/chunk-2SFFYIH3.js.map +1 -0
  24. package/dist/chunk-3PVDYTTB.js +24 -0
  25. package/dist/chunk-3PVDYTTB.js.map +1 -0
  26. package/dist/chunk-3UZCWK46.js +298 -0
  27. package/dist/chunk-3UZCWK46.js.map +1 -0
  28. package/dist/chunk-47CKUXTW.js +293 -0
  29. package/dist/chunk-47CKUXTW.js.map +1 -0
  30. package/dist/chunk-4QYP6QUI.js +109 -0
  31. package/dist/chunk-4QYP6QUI.js.map +1 -0
  32. package/dist/chunk-5EY26VZ7.js +1053 -0
  33. package/dist/chunk-5EY26VZ7.js.map +1 -0
  34. package/dist/chunk-5I4VRWBB.js +56 -0
  35. package/dist/chunk-5I4VRWBB.js.map +1 -0
  36. package/dist/chunk-5WOR7UCL.js +191 -0
  37. package/dist/chunk-5WOR7UCL.js.map +1 -0
  38. package/dist/chunk-5YJLGOM5.js +51 -0
  39. package/dist/chunk-5YJLGOM5.js.map +1 -0
  40. package/dist/chunk-6JFN3OWG.js +386 -0
  41. package/dist/chunk-6JFN3OWG.js.map +1 -0
  42. package/dist/chunk-7QJT5O4S.js +35 -0
  43. package/dist/chunk-7QJT5O4S.js.map +1 -0
  44. package/dist/chunk-A55KV72M.js +402 -0
  45. package/dist/chunk-A55KV72M.js.map +1 -0
  46. package/dist/chunk-ADWCLI4G.js +2028 -0
  47. package/dist/chunk-ADWCLI4G.js.map +1 -0
  48. package/dist/chunk-B27E3V37.js +29 -0
  49. package/dist/chunk-B27E3V37.js.map +1 -0
  50. package/dist/chunk-B7TC2A33.js +83 -0
  51. package/dist/chunk-B7TC2A33.js.map +1 -0
  52. package/dist/chunk-BLL56F7R.js +385 -0
  53. package/dist/chunk-BLL56F7R.js.map +1 -0
  54. package/dist/chunk-BOFEQC6K.js +162 -0
  55. package/dist/chunk-BOFEQC6K.js.map +1 -0
  56. package/dist/chunk-CM7LVUKC.js +35 -0
  57. package/dist/chunk-CM7LVUKC.js.map +1 -0
  58. package/dist/chunk-CORUP6JB.js +122 -0
  59. package/dist/chunk-CORUP6JB.js.map +1 -0
  60. package/dist/chunk-CSX5FFKZ.js +35 -0
  61. package/dist/chunk-CSX5FFKZ.js.map +1 -0
  62. package/dist/chunk-EGVHJKGJ.js +3125 -0
  63. package/dist/chunk-EGVHJKGJ.js.map +1 -0
  64. package/dist/{chunk-NEXLLTP4.js → chunk-G76LSA76.js} +6 -5
  65. package/dist/chunk-G76LSA76.js.map +1 -0
  66. package/dist/{chunk-PEI6RANI.js → chunk-GQMRL52F.js} +311 -75
  67. package/dist/chunk-GQMRL52F.js.map +1 -0
  68. package/dist/{chunk-ELIYWBZR.js → chunk-GUUXOISA.js} +1113 -457
  69. package/dist/chunk-GUUXOISA.js.map +1 -0
  70. package/dist/{chunk-HUIKIDM5.js → chunk-I7X2P4FU.js} +225 -116
  71. package/dist/chunk-I7X2P4FU.js.map +1 -0
  72. package/dist/chunk-IGFZFLI2.js +1390 -0
  73. package/dist/chunk-IGFZFLI2.js.map +1 -0
  74. package/dist/{chunk-4MDLEHXL.js → chunk-IMSUVYQB.js} +26 -13
  75. package/dist/chunk-IMSUVYQB.js.map +1 -0
  76. package/dist/chunk-IOYHDEP3.js +38 -0
  77. package/dist/chunk-IOYHDEP3.js.map +1 -0
  78. package/dist/chunk-IZV5FTJC.js +55 -0
  79. package/dist/chunk-IZV5FTJC.js.map +1 -0
  80. package/dist/chunk-KF33GTWN.js +343 -0
  81. package/dist/chunk-KF33GTWN.js.map +1 -0
  82. package/dist/chunk-KSGQ5ODA.js +457 -0
  83. package/dist/chunk-KSGQ5ODA.js.map +1 -0
  84. package/dist/{chunk-OAM4WAAM.js → chunk-KZC6QRNR.js} +1513 -697
  85. package/dist/chunk-KZC6QRNR.js.map +1 -0
  86. package/dist/chunk-LJUMYUBO.js +218 -0
  87. package/dist/chunk-LJUMYUBO.js.map +1 -0
  88. package/dist/chunk-LSW2OJVV.js +380 -0
  89. package/dist/chunk-LSW2OJVV.js.map +1 -0
  90. package/dist/chunk-M357MHH3.js +2 -0
  91. package/dist/chunk-M357MHH3.js.map +1 -0
  92. package/dist/chunk-MK2TQO4Y.js +24 -0
  93. package/dist/chunk-MK2TQO4Y.js.map +1 -0
  94. package/dist/chunk-N7S72EXK.js +25 -0
  95. package/dist/chunk-N7S72EXK.js.map +1 -0
  96. package/dist/{chunk-XXWH2JLC.js → chunk-NKMYZFHA.js} +616 -621
  97. package/dist/chunk-NKMYZFHA.js.map +1 -0
  98. package/dist/chunk-NX4ADH73.js +14 -0
  99. package/dist/chunk-NX4ADH73.js.map +1 -0
  100. package/dist/chunk-O7F6UJO4.js +71 -0
  101. package/dist/chunk-O7F6UJO4.js.map +1 -0
  102. package/dist/chunk-OVB5WIG5.js +14064 -0
  103. package/dist/chunk-OVB5WIG5.js.map +1 -0
  104. package/dist/chunk-OYQQJL3J.js +16 -0
  105. package/dist/chunk-OYQQJL3J.js.map +1 -0
  106. package/dist/{chunk-H5YGYNXS.js → chunk-P4BNUO57.js} +60 -17
  107. package/dist/chunk-P4BNUO57.js.map +1 -0
  108. package/dist/{chunk-JVYQRRC4.js → chunk-PEHTX3V7.js} +21 -1
  109. package/dist/chunk-PEHTX3V7.js.map +1 -0
  110. package/dist/chunk-PMV53IMM.js +26 -0
  111. package/dist/chunk-PMV53IMM.js.map +1 -0
  112. package/dist/{chunk-KCGXPP5V.js → chunk-PYEOPA4M.js} +13 -7
  113. package/dist/chunk-PYEOPA4M.js.map +1 -0
  114. package/dist/{chunk-KZ73RL76.js → chunk-QHUE7E4N.js} +8 -3
  115. package/dist/chunk-QHUE7E4N.js.map +1 -0
  116. package/dist/chunk-QV3DJVRZ.js +11 -0
  117. package/dist/chunk-QV3DJVRZ.js.map +1 -0
  118. package/dist/chunk-R5SBNG7S.js +810 -0
  119. package/dist/chunk-R5SBNG7S.js.map +1 -0
  120. package/dist/chunk-RI42H5IU.js +326 -0
  121. package/dist/chunk-RI42H5IU.js.map +1 -0
  122. package/dist/chunk-S2QH6EZ5.js +211 -0
  123. package/dist/chunk-S2QH6EZ5.js.map +1 -0
  124. package/dist/chunk-SHLZMAJN.js +304 -0
  125. package/dist/chunk-SHLZMAJN.js.map +1 -0
  126. package/dist/chunk-TGXK4BAZ.js +293 -0
  127. package/dist/chunk-TGXK4BAZ.js.map +1 -0
  128. package/dist/{chunk-5YK2ZDIG.js → chunk-TNEZNMSN.js} +4 -10
  129. package/dist/chunk-TNEZNMSN.js.map +1 -0
  130. package/dist/{chunk-22KP6LR5.js → chunk-TXS65BB2.js} +3 -1
  131. package/dist/{chunk-22KP6LR5.js.map → chunk-TXS65BB2.js.map} +1 -1
  132. package/dist/chunk-UNJPZGNK.js +63 -0
  133. package/dist/chunk-UNJPZGNK.js.map +1 -0
  134. package/dist/{chunk-MZ2G2XBA.js → chunk-V5ZUJT2T.js} +205 -45
  135. package/dist/chunk-V5ZUJT2T.js.map +1 -0
  136. package/dist/chunk-VIUEOHXY.js +394 -0
  137. package/dist/chunk-VIUEOHXY.js.map +1 -0
  138. package/dist/chunk-WIUKB3LD.js +1911 -0
  139. package/dist/chunk-WIUKB3LD.js.map +1 -0
  140. package/dist/{chunk-ICA6R6TW.js → chunk-WNN7NO2N.js} +1451 -355
  141. package/dist/chunk-WNN7NO2N.js.map +1 -0
  142. package/dist/{chunk-YJFGAFBD.js → chunk-X5UVUIMF.js} +1892 -1223
  143. package/dist/chunk-X5UVUIMF.js.map +1 -0
  144. package/dist/chunk-XDA5QJE7.js +402 -0
  145. package/dist/chunk-XDA5QJE7.js.map +1 -0
  146. package/dist/{chunk-VZTQ73XT.js → chunk-XEA5BCMA.js} +3 -1
  147. package/dist/{chunk-VZTQ73XT.js.map → chunk-XEA5BCMA.js.map} +1 -1
  148. package/dist/chunk-XHF7OYAN.js +1150 -0
  149. package/dist/chunk-XHF7OYAN.js.map +1 -0
  150. package/dist/chunk-YSRBFJMQ.js +43 -0
  151. package/dist/chunk-YSRBFJMQ.js.map +1 -0
  152. package/dist/chunk-ZOZAPAUO.js +174 -0
  153. package/dist/chunk-ZOZAPAUO.js.map +1 -0
  154. package/dist/chunk-ZQV5W7YC.js +809 -0
  155. package/dist/chunk-ZQV5W7YC.js.map +1 -0
  156. package/dist/chunk-ZUWF4NF7.js +13 -0
  157. package/dist/chunk-ZUWF4NF7.js.map +1 -0
  158. package/dist/client.d.ts +16 -7
  159. package/dist/clipboard.js +3 -1
  160. package/dist/commands/types.d.ts +2 -0
  161. package/dist/components/anthropic-mark.d.ts +3 -0
  162. package/dist/components/approval-surface.d.ts +19 -6
  163. package/dist/components/artifacts/artifact-chrome.d.ts +120 -0
  164. package/dist/components/artifacts/artifact-sandbox.d.ts +30 -0
  165. package/dist/components/artifacts/artifact-surface.d.ts +4 -2
  166. package/dist/components/artifacts/chat-interactive-block.d.ts +29 -0
  167. package/dist/components/artifacts/deferred-chat-media.d.ts +15 -0
  168. package/dist/components/artifacts/document-editor.d.ts +4 -2
  169. package/dist/components/artifacts/editable-artifact-ui.d.ts +2 -1
  170. package/dist/components/artifacts/editable-artifact-view.d.ts +48 -0
  171. package/dist/components/artifacts/editable-document.d.ts +1 -1
  172. package/dist/components/artifacts/editable-presentation.d.ts +2 -2
  173. package/dist/components/artifacts/editable-spreadsheet.d.ts +8 -3
  174. package/dist/components/artifacts/index.d.ts +9 -2
  175. package/dist/components/artifacts/inline-html-document.d.ts +2 -0
  176. package/dist/components/artifacts/latest-task-runner.d.ts +15 -0
  177. package/dist/components/artifacts/presentation-editor.d.ts +6 -2
  178. package/dist/components/artifacts/published-html-artifact-frame.d.ts +23 -3
  179. package/dist/components/artifacts/session-artifact-viewer.d.ts +39 -0
  180. package/dist/components/artifacts/site-view.d.ts +26 -0
  181. package/dist/components/artifacts/spreadsheet-command-queue.d.ts +20 -0
  182. package/dist/components/artifacts/spreadsheet-download.d.ts +7 -0
  183. package/dist/components/artifacts/spreadsheet-general-display.d.ts +24 -0
  184. package/dist/components/artifacts/spreadsheet-grid.d.ts +10 -3
  185. package/dist/components/artifacts/spreadsheet-resize.d.ts +50 -0
  186. package/dist/components/artifacts/spreadsheet-submissions.d.ts +9 -0
  187. package/dist/components/artifacts/visualization-assets.gen.d.ts +2 -0
  188. package/dist/components/browser-select-control.d.ts +16 -0
  189. package/dist/components/browser-viewer.d.ts +11 -2
  190. package/dist/components/chat-composer.d.ts +21 -3
  191. package/dist/components/child-session-link.d.ts +9 -0
  192. package/dist/components/claude-mark.d.ts +3 -0
  193. package/dist/components/code-editor.d.ts +1 -4
  194. package/dist/components/composer-transcription-control.d.ts +7 -0
  195. package/dist/components/composer.d.ts +34 -67
  196. package/dist/components/computer-viewer.d.ts +1 -1
  197. package/dist/components/copy-button.d.ts +3 -1
  198. package/dist/components/desktop-viewer.d.ts +1 -1
  199. package/dist/components/fleet-tile.d.ts +2 -2
  200. package/dist/components/grok-mark.d.ts +26 -0
  201. package/dist/components/human-input-form.d.ts +28 -32
  202. package/dist/components/human-input-surface.d.ts +7 -2
  203. package/dist/components/linkified-text.d.ts +18 -0
  204. package/dist/components/machine-input-display.d.ts +22 -1
  205. package/dist/components/machines/agent-status-icon.d.ts +6 -0
  206. package/dist/components/machines/machine-detail.d.ts +7 -1
  207. package/dist/components/machines/machine-status.d.ts +48 -0
  208. package/dist/components/markdown-table-layout.d.ts +18 -0
  209. package/dist/components/markdown.d.ts +37 -4
  210. package/dist/components/message-timeline.d.ts +86 -7
  211. package/dist/components/model-mark.d.ts +29 -0
  212. package/dist/components/model-policy-picker-menu.d.ts +9 -0
  213. package/dist/components/model-policy-picker.d.ts +41 -25
  214. package/dist/components/new-conversation.d.ts +32 -0
  215. package/dist/components/open-geni-chat.d.ts +73 -0
  216. package/dist/components/open-geni-links.d.ts +68 -0
  217. package/dist/components/openrouter-mark.d.ts +6 -0
  218. package/dist/components/opper-mark.d.ts +7 -0
  219. package/dist/components/preview-loading.d.ts +2 -0
  220. package/dist/components/provider-recovery-notice.d.ts +16 -0
  221. package/dist/components/queue-item-content.d.ts +9 -0
  222. package/dist/components/rehype-secret-refs.d.ts +23 -0
  223. package/dist/components/remark-soft-line-breaks.d.ts +38 -0
  224. package/dist/components/sandbox-files.d.ts +3 -1
  225. package/dist/components/sandbox-workspace.d.ts +18 -0
  226. package/dist/components/secret-question-field.d.ts +31 -0
  227. package/dist/components/secret-ref-chip.d.ts +35 -0
  228. package/dist/components/session-capability-frame.d.ts +37 -0
  229. package/dist/components/session-chrome.d.ts +57 -8
  230. package/dist/components/session-commands-panel.d.ts +6 -0
  231. package/dist/components/session-commands.d.ts +6 -0
  232. package/dist/components/session-connection-request.d.ts +8 -0
  233. package/dist/components/session-conversation.d.ts +157 -0
  234. package/dist/components/session-list.d.ts +39 -0
  235. package/dist/components/session-mcp-capability-card.d.ts +41 -0
  236. package/dist/components/session-proxy-scope.d.ts +35 -0
  237. package/dist/components/session-status.d.ts +4 -1
  238. package/dist/components/session-usage-limit-notice.d.ts +39 -0
  239. package/dist/components/timeline-anchor.d.ts +24 -0
  240. package/dist/components/timeline-annotation-chrome.d.ts +25 -0
  241. package/dist/components/timeline-annotation-layout.d.ts +42 -0
  242. package/dist/components/timeline-annotation-markers.d.ts +8 -0
  243. package/dist/components/timeline-annotation-reveal-context.d.ts +4 -0
  244. package/dist/components/timeline-annotation-shared.d.ts +31 -0
  245. package/dist/components/timeline-annotations-dialog.d.ts +3 -2
  246. package/dist/components/timeline-annotations.d.ts +13 -3
  247. package/dist/components/timeline-reading-progress.d.ts +11 -0
  248. package/dist/components/timeline-search.d.ts +34 -0
  249. package/dist/components/timeline-settlement.d.ts +16 -0
  250. package/dist/components/tip-follow.d.ts +16 -0
  251. package/dist/components/tool-action-review.d.ts +47 -0
  252. package/dist/components/tool-review-history.d.ts +25 -0
  253. package/dist/components/usage-limit-notice.d.ts +49 -0
  254. package/dist/components/usage-member-list.d.ts +91 -0
  255. package/dist/components/usage-meter.d.ts +73 -0
  256. package/dist/components/use-viewer-menu-dismiss.d.ts +2 -0
  257. package/dist/components/user-message-body.d.ts +10 -1
  258. package/dist/composer-messages.d.ts +74 -0
  259. package/dist/composer-messages.js +9 -0
  260. package/dist/composer-messages.js.map +1 -0
  261. package/dist/composer-voice-events.d.ts +8 -0
  262. package/dist/composer.d.ts +5 -4
  263. package/dist/composer.js +26 -13
  264. package/dist/computer-viewer-GMLDXPON.js +20 -0
  265. package/dist/computer-viewer-GMLDXPON.js.map +1 -0
  266. package/dist/connect-account-identity.d.ts +8 -0
  267. package/dist/connect-accounts.d.ts +15 -0
  268. package/dist/connect-chooser.d.ts +18 -0
  269. package/dist/connect-panel.d.ts +18 -0
  270. package/dist/connect-setup.d.ts +18 -0
  271. package/dist/connect.d.ts +21 -0
  272. package/dist/connect.js +2149 -0
  273. package/dist/connect.js.map +1 -0
  274. package/dist/connection-catalog.d.ts +38 -0
  275. package/dist/connection-discovery.d.ts +12 -0
  276. package/dist/connection-installed.d.ts +17 -0
  277. package/dist/connection-logo.d.ts +9 -0
  278. package/dist/connection-service-logo.d.ts +8 -0
  279. package/dist/connection-service-presentation.d.ts +13 -0
  280. package/dist/connection-skeleton.d.ts +5 -0
  281. package/dist/connection-type-picker.d.ts +6 -0
  282. package/dist/conversation-timeline.d.ts +5 -0
  283. package/dist/desktop.d.ts +7 -0
  284. package/dist/desktop.js +27 -0
  285. package/dist/desktop.js.map +1 -0
  286. package/dist/device-authorization.d.ts +23 -0
  287. package/dist/diffs.d.ts +8 -0
  288. package/dist/diffs.js +15 -0
  289. package/dist/diffs.js.map +1 -0
  290. package/dist/discovery-cache.d.ts +5 -0
  291. package/dist/editor.d.ts +7 -0
  292. package/dist/editor.js +22 -0
  293. package/dist/editor.js.map +1 -0
  294. package/dist/embedded-new-voice-OCRNT6U5.js +18 -0
  295. package/dist/embedded-new-voice-OCRNT6U5.js.map +1 -0
  296. package/dist/embedded-voice-RPHPYVBT.js +18 -0
  297. package/dist/embedded-voice-RPHPYVBT.js.map +1 -0
  298. package/dist/{fleet-decision-row-GGCAT4E4.js → fleet-decision-row-SI63O5V4.js} +4 -1
  299. package/dist/fleet-decision-row-SI63O5V4.js.map +1 -0
  300. package/dist/hooks/latest-question.d.ts +25 -0
  301. package/dist/hooks/shared-machines-list.d.ts +4 -0
  302. package/dist/hooks/shared-query.d.ts +113 -0
  303. package/dist/hooks/use-attached-browsers.d.ts +1 -1
  304. package/dist/hooks/use-auth-runs.d.ts +1 -4
  305. package/dist/hooks/use-available-models.d.ts +1 -1
  306. package/dist/hooks/use-browser-frame-stream.d.ts +1 -1
  307. package/dist/hooks/use-browser-session.d.ts +12 -1
  308. package/dist/hooks/use-client-config-flags.d.ts +49 -0
  309. package/dist/hooks/use-codex-accounts.d.ts +59 -10
  310. package/dist/hooks/use-composer.d.ts +24 -2
  311. package/dist/hooks/use-computer-frame-stream.d.ts +1 -1
  312. package/dist/hooks/use-computer-input-posture.d.ts +13 -0
  313. package/dist/hooks/use-computer-session.d.ts +4 -0
  314. package/dist/hooks/use-connect.d.ts +23 -0
  315. package/dist/hooks/use-desktop-stream.d.ts +1 -1
  316. package/dist/hooks/use-file-attachments.d.ts +12 -0
  317. package/dist/hooks/use-goal.d.ts +2 -1
  318. package/dist/hooks/use-last-started-turn-policy.d.ts +5 -1
  319. package/dist/hooks/use-new-conversation.d.ts +56 -0
  320. package/dist/hooks/use-new-session-draft.d.ts +74 -0
  321. package/dist/hooks/use-realtime-voice-models.d.ts +7 -0
  322. package/dist/hooks/use-sandbox-files.d.ts +4 -1
  323. package/dist/hooks/use-session-conversation.d.ts +49 -0
  324. package/dist/hooks/use-session-events.d.ts +28 -7
  325. package/dist/hooks/use-session-mcp-approval-policy.d.ts +2 -2
  326. package/dist/hooks/use-session-model-account.d.ts +48 -0
  327. package/dist/hooks/use-supergrok-accounts.d.ts +7 -1
  328. package/dist/hooks/use-terminal-stream.d.ts +11 -5
  329. package/dist/hooks/use-usage.d.ts +40 -0
  330. package/dist/hooks/use-vaults.d.ts +53 -0
  331. package/dist/hooks/use-voice-input.d.ts +8 -1
  332. package/dist/hooks/use-workspace-edit.d.ts +4 -0
  333. package/dist/hooks/use-workspace-sessions.d.ts +22 -5
  334. package/dist/human-input-model.d.ts +122 -0
  335. package/dist/identity-link-accounts.d.ts +11 -0
  336. package/dist/identity-link-consent.d.ts +18 -0
  337. package/dist/index.d.ts +82 -20
  338. package/dist/index.js +2350 -6605
  339. package/dist/index.js.map +1 -1
  340. package/dist/interaction.d.ts +1 -1
  341. package/dist/interaction.js +14 -24
  342. package/dist/interaction.js.map +1 -1
  343. package/dist/latest-question-R77KWSUP.js +118 -0
  344. package/dist/latest-question-R77KWSUP.js.map +1 -0
  345. package/dist/lib/clipboard.d.ts +7 -0
  346. package/dist/lib/error-message.d.ts +7 -0
  347. package/dist/lib/format.d.ts +58 -4
  348. package/dist/lib/host-theme.d.ts +77 -0
  349. package/dist/lib/interaction-errors.d.ts +3 -0
  350. package/dist/lib/menu-styles.d.ts +22 -0
  351. package/dist/lib/notify-observer.d.ts +2 -0
  352. package/dist/lib/pierre-diffs-loader.d.ts +20 -0
  353. package/dist/lib/provider-recovery.d.ts +55 -0
  354. package/dist/lib/scrollbars.d.ts +11 -0
  355. package/dist/lib/terminal-input-readiness.d.ts +11 -0
  356. package/dist/lib/transient-retry.d.ts +25 -0
  357. package/dist/lib/workbench-peers.d.ts +36 -0
  358. package/dist/lib/xterm-theme.d.ts +7 -5
  359. package/dist/machines.js +9 -5
  360. package/dist/markdown-table-layout-3PV2UAAH.js +113 -0
  361. package/dist/markdown-table-layout-3PV2UAAH.js.map +1 -0
  362. package/dist/mcp-connection-status.d.ts +14 -0
  363. package/dist/model-mark-paths.d.ts +34 -0
  364. package/dist/model-mark-paths.js +16 -0
  365. package/dist/model-mark-paths.js.map +1 -0
  366. package/dist/model-picker-model.d.ts +111 -0
  367. package/dist/model-picker-model.js +25 -0
  368. package/dist/model-picker-model.js.map +1 -0
  369. package/dist/model-policy-picker-menu-7GJ5URPR.js +17 -0
  370. package/dist/model-policy-picker-menu-7GJ5URPR.js.map +1 -0
  371. package/dist/model-policy.d.ts +30 -3
  372. package/dist/model-policy.js +14 -1
  373. package/dist/native-previews.d.ts +28 -0
  374. package/dist/native-previews.js +82 -0
  375. package/dist/native-previews.js.map +1 -0
  376. package/dist/new-session-draft.d.ts +7 -0
  377. package/dist/new-session-draft.js +639 -0
  378. package/dist/new-session-draft.js.map +1 -0
  379. package/dist/notification-text.d.ts +27 -0
  380. package/dist/{noto-sans-arabic-loader-IA2T4X2A.js → noto-sans-arabic-loader-XSH2KYWJ.js} +3 -1
  381. package/dist/{noto-sans-arabic-loader-IA2T4X2A.js.map → noto-sans-arabic-loader-XSH2KYWJ.js.map} +1 -1
  382. package/dist/{noto-sans-jp-loader.generated-HFGLYBR3.js → noto-sans-jp-loader.generated-MR5L6V7K.js} +3 -1
  383. package/dist/{noto-sans-jp-loader.generated-HFGLYBR3.js.map → noto-sans-jp-loader.generated-MR5L6V7K.js.map} +1 -1
  384. package/dist/older-history.d.ts +3 -2
  385. package/dist/organization-model.d.ts +32 -0
  386. package/dist/organization-model.js +65 -0
  387. package/dist/organization-model.js.map +1 -0
  388. package/dist/{platform-activity-row-BJHUHXAT.js → platform-activity-row-5OCKOQWZ.js} +16 -78
  389. package/dist/platform-activity-row-5OCKOQWZ.js.map +1 -0
  390. package/dist/plugin-details.d.ts +14 -0
  391. package/dist/plugin-discovery.d.ts +25 -0
  392. package/dist/preview-loading-paint.d.ts +20 -0
  393. package/dist/provider.d.ts +25 -2
  394. package/dist/queue-presentation-model.d.ts +72 -0
  395. package/dist/queue-presentation-model.js +38 -0
  396. package/dist/queue-presentation-model.js.map +1 -0
  397. package/dist/{queue-surface-implementation-BSKUWHRI.js → queue-surface-implementation-GJBH7NKO.js} +65 -265
  398. package/dist/queue-surface-implementation-GJBH7NKO.js.map +1 -0
  399. package/dist/realtime/embedded-new-voice.d.ts +1 -0
  400. package/dist/realtime/embedded-voice.d.ts +1 -0
  401. package/dist/realtime/realtime-control.d.ts +4 -65
  402. package/dist/realtime/session-realtime.d.ts +78 -0
  403. package/dist/realtime.js +25 -1294
  404. package/dist/realtime.js.map +1 -1
  405. package/dist/sandbox-files-O27IPOZW.js +21 -0
  406. package/dist/sandbox-files-O27IPOZW.js.map +1 -0
  407. package/dist/sandbox-label-model.d.ts +30 -0
  408. package/dist/sandbox-label-model.js +20 -0
  409. package/dist/sandbox-label-model.js.map +1 -0
  410. package/dist/scrollbars.d.ts +1 -0
  411. package/dist/scrollbars.js +10 -0
  412. package/dist/scrollbars.js.map +1 -0
  413. package/dist/secret-reference-label.d.ts +14 -0
  414. package/dist/secrets-ui.d.ts +57 -0
  415. package/dist/session-agents-model.d.ts +10 -0
  416. package/dist/session-agents-model.js +25 -0
  417. package/dist/session-agents-model.js.map +1 -0
  418. package/dist/session-attention-model.d.ts +8 -0
  419. package/dist/session-attention-model.js +47 -0
  420. package/dist/session-attention-model.js.map +1 -0
  421. package/dist/session-auth-recommendation.d.ts +5 -0
  422. package/dist/session-capability-policy.d.ts +31 -0
  423. package/dist/session-feedback-model.d.ts +20 -0
  424. package/dist/session-feedback-model.js +56 -0
  425. package/dist/session-feedback-model.js.map +1 -0
  426. package/dist/session-list-model.d.ts +138 -0
  427. package/dist/session-list-model.js +274 -0
  428. package/dist/session-list-model.js.map +1 -0
  429. package/dist/session-realtime-7DJOIHQW.js +21 -0
  430. package/dist/session-realtime-7DJOIHQW.js.map +1 -0
  431. package/dist/session-realtime.d.ts +7 -0
  432. package/dist/session-realtime.js +19 -0
  433. package/dist/session-realtime.js.map +1 -0
  434. package/dist/session-status-model.d.ts +36 -0
  435. package/dist/session-ui.d.ts +39 -1
  436. package/dist/session-ui.js +126 -12
  437. package/dist/session-ui.js.map +1 -1
  438. package/dist/session.d.ts +8 -2
  439. package/dist/session.js +35 -20
  440. package/dist/site-snapshot.d.ts +14 -0
  441. package/dist/sites-ui.d.ts +24 -0
  442. package/dist/sites.d.ts +3 -0
  443. package/dist/sites.js +14 -0
  444. package/dist/sites.js.map +1 -0
  445. package/dist/skill-discovery.d.ts +47 -0
  446. package/dist/terminal.d.ts +8 -0
  447. package/dist/terminal.js +32 -0
  448. package/dist/terminal.js.map +1 -0
  449. package/dist/testing/session-scenarios.d.ts +10 -0
  450. package/dist/testing/session-scenarios.js +367 -0
  451. package/dist/testing/session-scenarios.js.map +1 -0
  452. package/dist/timeline/activity-rail.d.ts +11 -2
  453. package/dist/timeline/agent-identity.d.ts +30 -0
  454. package/dist/timeline/agent-row.d.ts +31 -0
  455. package/dist/timeline/allowance-exhausted-row.d.ts +24 -0
  456. package/dist/timeline/compaction-copy.d.ts +46 -0
  457. package/dist/timeline/entrance.d.ts +13 -1
  458. package/dist/timeline/focus-sequence.d.ts +9 -0
  459. package/dist/timeline/genie-copy.d.ts +3 -0
  460. package/dist/timeline/genie-loading.d.ts +47 -0
  461. package/dist/timeline/index.d.ts +10 -5
  462. package/dist/timeline/knowledge-receipt.d.ts +17 -0
  463. package/dist/timeline/message-sender.d.ts +19 -0
  464. package/dist/timeline/notice-presentation.d.ts +13 -0
  465. package/dist/timeline/parsers.d.ts +11 -0
  466. package/dist/timeline/patch-apply-command.d.ts +18 -0
  467. package/dist/timeline/platform-activity-presentation.d.ts +21 -0
  468. package/dist/timeline/platform-activity-row.d.ts +1 -2
  469. package/dist/timeline/presented-image.d.ts +11 -0
  470. package/dist/timeline/projection.d.ts +31 -2
  471. package/dist/timeline/provider-logo.d.ts +15 -0
  472. package/dist/timeline/question-nav-model.d.ts +23 -0
  473. package/dist/timeline/registry.d.ts +12 -1
  474. package/dist/timeline/retained-image.d.ts +18 -0
  475. package/dist/timeline/retained-loaders.d.ts +27 -0
  476. package/dist/timeline/rolling-activity.d.ts +11 -0
  477. package/dist/timeline/screenshot-lightbox.d.ts +23 -1
  478. package/dist/timeline/session-usage-limit-row.d.ts +11 -0
  479. package/dist/timeline/shared.d.ts +4 -1
  480. package/dist/timeline/startup-dispatch-details.d.ts +5 -0
  481. package/dist/timeline/startup-preference.d.ts +3 -0
  482. package/dist/timeline/startup-timings.d.ts +4 -0
  483. package/dist/timeline/tool-display-name.d.ts +5 -2
  484. package/dist/timeline/tool-presentation.d.ts +172 -0
  485. package/dist/timeline/turn-summary-model.d.ts +95 -0
  486. package/dist/timeline/turn-summary.d.ts +20 -54
  487. package/dist/timeline/types.d.ts +179 -7
  488. package/dist/timeline/work-presentation.d.ts +60 -0
  489. package/dist/timeline-annotation-markers-U3G66KUD.js +166 -0
  490. package/dist/timeline-annotation-markers-U3G66KUD.js.map +1 -0
  491. package/dist/timeline-annotation-selection-BI7QTPTZ.js +242 -0
  492. package/dist/timeline-annotation-selection-BI7QTPTZ.js.map +1 -0
  493. package/dist/timeline-annotations-dialog-FOMHSDTE.js +274 -0
  494. package/dist/timeline-annotations-dialog-FOMHSDTE.js.map +1 -0
  495. package/dist/timeline-model.d.ts +29 -0
  496. package/dist/timeline-model.js +254 -0
  497. package/dist/timeline-model.js.map +1 -0
  498. package/dist/usage/allowance-copy.d.ts +25 -0
  499. package/dist/usage/session-usage-limit.d.ts +88 -0
  500. package/dist/usage/summary.d.ts +35 -0
  501. package/dist/usage.d.ts +17 -0
  502. package/dist/usage.js +1187 -0
  503. package/dist/usage.js.map +1 -0
  504. package/dist/voice-recording-owner.d.ts +7 -0
  505. package/package.json +107 -7
  506. package/src/accounts.tsx +116 -14
  507. package/src/approvals.ts +8 -1
  508. package/src/artifacts-spreadsheet.ts +1 -0
  509. package/src/artifacts.ts +44 -0
  510. package/src/assets/README.md +8 -0
  511. package/src/assets/gmail.ico +0 -0
  512. package/src/assets/outlook.ico +0 -0
  513. package/src/capability-catalog-row.tsx +94 -0
  514. package/src/capability-logo-fallback.ts +22 -0
  515. package/src/client.ts +20 -31
  516. package/src/commands/registry.ts +18 -15
  517. package/src/commands/types.ts +2 -0
  518. package/src/components/anthropic-mark.tsx +10 -0
  519. package/src/components/approval-surface.tsx +401 -138
  520. package/src/components/artifacts/artifact-chrome.tsx +413 -0
  521. package/src/components/artifacts/artifact-sandbox.tsx +189 -0
  522. package/src/components/artifacts/artifact-surface.tsx +40 -20
  523. package/src/components/artifacts/chat-interactive-block.tsx +260 -0
  524. package/src/components/artifacts/deferred-chat-media.tsx +67 -0
  525. package/src/components/artifacts/document-editor.tsx +141 -16
  526. package/src/components/artifacts/editable-artifact-ui.tsx +4 -2
  527. package/src/components/artifacts/editable-artifact-view.tsx +197 -0
  528. package/src/components/artifacts/editable-artifact-workbench.tsx +5 -2
  529. package/src/components/artifacts/editable-document.tsx +37 -36
  530. package/src/components/artifacts/editable-presentation.tsx +36 -18
  531. package/src/components/artifacts/editable-spreadsheet.tsx +543 -103
  532. package/src/components/artifacts/index.ts +45 -0
  533. package/src/components/artifacts/inline-html-document.ts +24 -0
  534. package/src/components/artifacts/latest-task-runner.ts +49 -0
  535. package/src/components/artifacts/presentation-editor.tsx +323 -67
  536. package/src/components/artifacts/published-html-artifact-frame.tsx +122 -5
  537. package/src/components/artifacts/session-artifact-viewer.tsx +378 -0
  538. package/src/components/artifacts/site-view.tsx +121 -0
  539. package/src/components/artifacts/spreadsheet-canvas.ts +5 -10
  540. package/src/components/artifacts/spreadsheet-command-queue.ts +184 -0
  541. package/src/components/artifacts/spreadsheet-download.tsx +109 -0
  542. package/src/components/artifacts/spreadsheet-general-display.ts +43 -0
  543. package/src/components/artifacts/spreadsheet-grid.tsx +344 -144
  544. package/src/components/artifacts/spreadsheet-resize.tsx +421 -0
  545. package/src/components/artifacts/spreadsheet-submissions.tsx +46 -0
  546. package/src/components/artifacts/visualization-assets/base.css +1015 -0
  547. package/src/components/artifacts/visualization-assets/helpers.html +349 -0
  548. package/src/components/artifacts/visualization-assets.gen.ts +3 -0
  549. package/src/components/browser-select-control.tsx +312 -0
  550. package/src/components/browser-viewer.tsx +778 -318
  551. package/src/components/chat-composer.tsx +47 -5
  552. package/src/components/child-session-link.tsx +36 -0
  553. package/src/components/claude-mark.tsx +11 -0
  554. package/src/components/code-editor.tsx +13 -16
  555. package/src/components/composer-transcription-control.tsx +128 -30
  556. package/src/components/composer.tsx +404 -195
  557. package/src/components/computer-viewer.tsx +880 -253
  558. package/src/components/copy-button.tsx +13 -5
  559. package/src/components/desktop-viewer.tsx +1 -1
  560. package/src/components/enrollment-consent.tsx +1 -1
  561. package/src/components/enrollment-device-flow.tsx +1 -1
  562. package/src/components/file-browser.tsx +10 -14
  563. package/src/components/fleet-tile.tsx +9 -18
  564. package/src/components/generated-video-player.tsx +4 -2
  565. package/src/components/grok-mark.tsx +34 -0
  566. package/src/components/human-input-form.tsx +590 -283
  567. package/src/components/human-input-surface.tsx +11 -0
  568. package/src/components/interaction-intervention-banner.tsx +2 -2
  569. package/src/components/linkified-text.tsx +79 -0
  570. package/src/components/machine-card.tsx +35 -78
  571. package/src/components/machine-dock-bar.tsx +1 -1
  572. package/src/components/machine-input-display.ts +197 -3
  573. package/src/components/machines/agent-status-icon.tsx +31 -0
  574. package/src/components/machines/machine-detail.tsx +200 -31
  575. package/src/components/machines/machine-operation-policy.tsx +1 -1
  576. package/src/components/machines/machine-status.ts +241 -0
  577. package/src/components/machines-dashboard.tsx +2 -17
  578. package/src/components/markdown-table-layout.ts +143 -0
  579. package/src/components/markdown.tsx +466 -129
  580. package/src/components/message-timeline.tsx +2567 -728
  581. package/src/components/model-mark.tsx +102 -0
  582. package/src/components/model-picker.tsx +15 -4
  583. package/src/components/model-policy-picker-menu.tsx +371 -0
  584. package/src/components/model-policy-picker.tsx +256 -412
  585. package/src/components/new-conversation.tsx +221 -0
  586. package/src/components/open-geni-chat.tsx +309 -0
  587. package/src/components/open-geni-links.tsx +179 -0
  588. package/src/components/openrouter-mark.tsx +13 -0
  589. package/src/components/opper-mark.tsx +18 -0
  590. package/src/components/pierre-diff.tsx +41 -16
  591. package/src/components/pierre-file.tsx +35 -10
  592. package/src/components/preview-loading.tsx +109 -0
  593. package/src/components/provider-recovery-notice.tsx +49 -0
  594. package/src/components/queue-item-content.ts +14 -0
  595. package/src/components/queue-surface-implementation.tsx +51 -356
  596. package/src/components/queue-surface-state.tsx +3 -1
  597. package/src/components/rehype-secret-refs.ts +98 -0
  598. package/src/components/remark-soft-line-breaks.ts +166 -0
  599. package/src/components/sandbox-files.tsx +91 -15
  600. package/src/components/sandbox-terminal.tsx +84 -13
  601. package/src/components/sandbox-workspace.tsx +147 -51
  602. package/src/components/secret-question-field.tsx +324 -0
  603. package/src/components/secret-ref-chip.tsx +185 -0
  604. package/src/components/session-capability-frame.tsx +197 -0
  605. package/src/components/session-chrome.tsx +842 -251
  606. package/src/components/session-commands-panel.tsx +126 -0
  607. package/src/components/session-commands.tsx +18 -0
  608. package/src/components/session-connection-request.tsx +97 -0
  609. package/src/components/session-conversation.tsx +876 -0
  610. package/src/components/session-list.tsx +257 -0
  611. package/src/components/session-mcp-capability-card.tsx +680 -0
  612. package/src/components/session-proxy-scope.tsx +153 -0
  613. package/src/components/session-status.tsx +26 -17
  614. package/src/components/session-usage-limit-notice.tsx +174 -0
  615. package/src/components/timeline-anchor.tsx +119 -0
  616. package/src/components/timeline-annotation-chrome.tsx +196 -0
  617. package/src/components/timeline-annotation-layout.ts +268 -0
  618. package/src/components/timeline-annotation-markers.tsx +185 -0
  619. package/src/components/timeline-annotation-reveal-context.ts +9 -0
  620. package/src/components/timeline-annotation-selection.tsx +106 -54
  621. package/src/components/timeline-annotation-shared.ts +245 -0
  622. package/src/components/timeline-annotations-dialog.tsx +185 -128
  623. package/src/components/timeline-annotations.tsx +189 -45
  624. package/src/components/timeline-reading-progress.ts +80 -0
  625. package/src/components/timeline-search.tsx +168 -0
  626. package/src/components/timeline-settlement.ts +60 -0
  627. package/src/components/tip-follow.ts +52 -0
  628. package/src/components/tool-action-review.tsx +650 -0
  629. package/src/components/tool-review-history.tsx +88 -0
  630. package/src/components/tooltip.tsx +38 -5
  631. package/src/components/usage-limit-notice.tsx +179 -0
  632. package/src/components/usage-member-list.tsx +792 -0
  633. package/src/components/usage-meter.tsx +382 -0
  634. package/src/components/use-viewer-menu-dismiss.ts +33 -0
  635. package/src/components/user-message-body.tsx +27 -2
  636. package/src/components/workspace-dock.tsx +18 -1
  637. package/src/composer-messages.ts +150 -0
  638. package/src/composer-voice-events.ts +12 -0
  639. package/src/composer.ts +6 -1
  640. package/src/connect-account-identity.tsx +34 -0
  641. package/src/connect-accounts.tsx +233 -0
  642. package/src/connect-chooser.tsx +336 -0
  643. package/src/connect-panel.tsx +99 -0
  644. package/src/connect-setup.tsx +355 -0
  645. package/src/connect.ts +60 -0
  646. package/src/connection-assets.d.ts +4 -0
  647. package/src/connection-catalog.tsx +162 -0
  648. package/src/connection-discovery.tsx +238 -0
  649. package/src/connection-installed.tsx +51 -0
  650. package/src/connection-logo.tsx +37 -0
  651. package/src/connection-service-logo.tsx +55 -0
  652. package/src/connection-service-presentation.ts +46 -0
  653. package/src/connection-skeleton.tsx +16 -0
  654. package/src/connection-type-picker.tsx +36 -0
  655. package/src/conversation-timeline.ts +92 -0
  656. package/src/desktop.ts +24 -0
  657. package/src/device-authorization.tsx +98 -0
  658. package/src/diffs.ts +16 -0
  659. package/src/discovery-cache.ts +42 -0
  660. package/src/editor.ts +13 -0
  661. package/src/hooks/internal.ts +3 -2
  662. package/src/hooks/latest-question.ts +164 -0
  663. package/src/hooks/shared-machines-list.ts +34 -1
  664. package/src/hooks/shared-query.ts +721 -0
  665. package/src/hooks/use-attached-browsers.ts +1 -1
  666. package/src/hooks/use-auth-runs.ts +0 -27
  667. package/src/hooks/use-available-models.ts +21 -15
  668. package/src/hooks/use-browser-frame-stream.ts +19 -2
  669. package/src/hooks/use-browser-session.ts +680 -205
  670. package/src/hooks/use-browser-sessions.ts +32 -1
  671. package/src/hooks/use-client-config-flags.ts +118 -0
  672. package/src/hooks/use-codex-accounts.ts +247 -47
  673. package/src/hooks/use-composer.ts +276 -47
  674. package/src/hooks/use-computer-frame-stream.ts +25 -7
  675. package/src/hooks/use-computer-input-posture.ts +94 -0
  676. package/src/hooks/use-computer-session.ts +409 -95
  677. package/src/hooks/use-connect.ts +23 -0
  678. package/src/hooks/use-desktop-stream.ts +19 -28
  679. package/src/hooks/use-file-attachments.ts +80 -4
  680. package/src/hooks/use-goal.ts +107 -13
  681. package/src/hooks/use-last-started-turn-policy.ts +46 -14
  682. package/src/hooks/use-machines.ts +4 -0
  683. package/src/hooks/use-new-conversation.ts +374 -0
  684. package/src/hooks/use-new-session-draft.ts +813 -0
  685. package/src/hooks/use-realtime-voice-models.ts +46 -0
  686. package/src/hooks/use-sandbox-files.ts +68 -20
  687. package/src/hooks/use-session-background-commands.ts +22 -11
  688. package/src/hooks/use-session-capabilities.ts +3 -2
  689. package/src/hooks/use-session-conversation.ts +150 -0
  690. package/src/hooks/use-session-events.ts +703 -382
  691. package/src/hooks/use-session-lineage.ts +20 -16
  692. package/src/hooks/use-session-mcp-approval-policy.ts +13 -5
  693. package/src/hooks/use-session-model-account.ts +174 -0
  694. package/src/hooks/use-session.ts +53 -21
  695. package/src/hooks/use-slash-commands.ts +6 -11
  696. package/src/hooks/use-supergrok-accounts.ts +22 -8
  697. package/src/hooks/use-terminal-stream.ts +153 -27
  698. package/src/hooks/use-transcription.ts +6 -0
  699. package/src/hooks/use-turn-queue.ts +2 -1
  700. package/src/hooks/use-usage.ts +100 -0
  701. package/src/hooks/use-vaults.ts +153 -0
  702. package/src/hooks/use-video-artifact-playback.ts +1 -1
  703. package/src/hooks/use-voice-input.ts +127 -19
  704. package/src/hooks/use-workspace-capture.ts +3 -2
  705. package/src/hooks/use-workspace-edit.ts +23 -5
  706. package/src/hooks/use-workspace-sessions.ts +97 -32
  707. package/src/human-input-model.ts +359 -0
  708. package/src/identity-link-accounts.tsx +148 -0
  709. package/src/identity-link-consent.tsx +192 -0
  710. package/src/index.ts +262 -16
  711. package/src/interaction.ts +1 -0
  712. package/src/lib/clipboard.ts +29 -0
  713. package/src/lib/error-message.ts +37 -0
  714. package/src/lib/format.ts +213 -16
  715. package/src/lib/host-theme.ts +529 -0
  716. package/src/lib/interaction-errors.ts +15 -0
  717. package/src/lib/menu-styles.ts +44 -0
  718. package/src/lib/notify-observer.ts +15 -0
  719. package/src/lib/pierre-diffs-loader.ts +53 -0
  720. package/src/lib/provider-recovery.ts +243 -0
  721. package/src/lib/scrollbars.ts +30 -0
  722. package/src/lib/terminal-input-readiness.ts +51 -0
  723. package/src/lib/transient-retry.ts +99 -0
  724. package/src/lib/workbench-peers.ts +62 -0
  725. package/src/lib/xterm-theme.ts +23 -21
  726. package/src/mcp-connection-status.ts +35 -0
  727. package/src/model-mark-paths.ts +53 -0
  728. package/src/model-picker-model.ts +330 -0
  729. package/src/model-policy.ts +299 -74
  730. package/src/native-previews.ts +100 -0
  731. package/src/new-session-draft.ts +22 -0
  732. package/src/notification-text.ts +81 -0
  733. package/src/older-history.ts +22 -4
  734. package/src/organization-model.ts +118 -0
  735. package/src/plugin-details.tsx +185 -0
  736. package/src/plugin-discovery.tsx +196 -0
  737. package/src/preview-loading-paint.ts +68 -0
  738. package/src/provider.tsx +74 -15
  739. package/src/queue-presentation-model.ts +464 -0
  740. package/src/realtime/dropdown-menu.tsx +19 -12
  741. package/src/realtime/embedded-new-voice.tsx +1 -0
  742. package/src/realtime/embedded-voice.tsx +3 -0
  743. package/src/realtime/realtime-control.tsx +138 -501
  744. package/src/realtime/session-realtime.ts +566 -0
  745. package/src/sandbox-label-model.ts +53 -0
  746. package/src/scrollbars.ts +3 -0
  747. package/src/secret-reference-label.ts +43 -0
  748. package/src/secrets-ui.tsx +59 -0
  749. package/src/session-agents-model.ts +33 -0
  750. package/src/session-attention-model.ts +62 -0
  751. package/src/session-auth-recommendation.ts +48 -0
  752. package/src/session-capability-policy.ts +196 -0
  753. package/src/session-context.ts +3 -4
  754. package/src/session-feedback-model.ts +95 -0
  755. package/src/session-list-model.ts +434 -0
  756. package/src/session-realtime.ts +18 -0
  757. package/src/session-status-model.ts +99 -0
  758. package/src/session-ui.ts +98 -1
  759. package/src/session.ts +17 -1
  760. package/src/site-snapshot.ts +74 -0
  761. package/src/sites-ui.tsx +348 -0
  762. package/src/sites.ts +3 -0
  763. package/src/skill-discovery.tsx +208 -0
  764. package/src/terminal.ts +26 -0
  765. package/src/testing/session-scenarios.ts +404 -0
  766. package/src/timeline/activity-rail.tsx +242 -101
  767. package/src/timeline/agent-identity.tsx +84 -0
  768. package/src/timeline/agent-row.tsx +231 -0
  769. package/src/timeline/allowance-exhausted-row.tsx +86 -0
  770. package/src/timeline/compaction-copy.ts +115 -0
  771. package/src/timeline/entrance.tsx +28 -3
  772. package/src/timeline/fleet-decision-projection.ts +2 -1
  773. package/src/timeline/fleet-decision-row.tsx +1 -0
  774. package/src/timeline/focus-sequence.ts +44 -0
  775. package/src/timeline/genie-copy.ts +19 -0
  776. package/src/timeline/genie-loading.tsx +143 -0
  777. package/src/timeline/index.ts +30 -2
  778. package/src/timeline/knowledge-receipt.tsx +100 -0
  779. package/src/timeline/message-sender.tsx +71 -0
  780. package/src/timeline/notice-presentation.ts +48 -0
  781. package/src/timeline/parsers.ts +42 -2
  782. package/src/timeline/patch-apply-command.tsx +135 -0
  783. package/src/timeline/platform-activity-presentation.ts +166 -0
  784. package/src/timeline/platform-activity-row.tsx +15 -90
  785. package/src/timeline/presented-image.ts +63 -0
  786. package/src/timeline/projection.ts +1746 -76
  787. package/src/timeline/provider-logo.tsx +53 -0
  788. package/src/timeline/question-nav-model.ts +28 -0
  789. package/src/timeline/registry.ts +26 -4
  790. package/src/timeline/retained-image.ts +97 -0
  791. package/src/timeline/retained-loaders.ts +91 -0
  792. package/src/timeline/rolling-activity.tsx +80 -0
  793. package/src/timeline/screenshot-lightbox.tsx +228 -5
  794. package/src/timeline/session-usage-limit-row.tsx +42 -0
  795. package/src/timeline/shared.tsx +42 -15
  796. package/src/timeline/startup-dispatch-details.tsx +36 -0
  797. package/src/timeline/startup-preference.ts +33 -0
  798. package/src/timeline/startup-timings.tsx +145 -0
  799. package/src/timeline/tool-display-name.ts +19 -7
  800. package/src/timeline/tool-presentation.ts +1316 -0
  801. package/src/timeline/tool-renderers.tsx +835 -1138
  802. package/src/timeline/turn-summary-model.ts +343 -0
  803. package/src/timeline/turn-summary.tsx +272 -365
  804. package/src/timeline/types.ts +189 -6
  805. package/src/timeline/work-presentation.ts +189 -0
  806. package/src/timeline-model.ts +143 -0
  807. package/src/usage/allowance-copy.ts +64 -0
  808. package/src/usage/session-usage-limit.ts +266 -0
  809. package/src/usage/summary.ts +93 -0
  810. package/src/usage.ts +70 -0
  811. package/src/voice-recording-owner.ts +22 -0
  812. package/styles/compiled.css +2319 -748
  813. package/styles/connect.css +290 -0
  814. package/styles/connect.d.ts +1 -0
  815. package/styles/effective-tokens.css +1 -0
  816. package/styles/index.css +309 -9
  817. package/styles/responsive.css +99 -7
  818. package/styles/session-capability.css +44 -0
  819. package/styles/tokens.css +134 -66
  820. package/dist/browser-viewer-AEFHUYZK.js +0 -14
  821. package/dist/chunk-4MDLEHXL.js.map +0 -1
  822. package/dist/chunk-5YK2ZDIG.js.map +0 -1
  823. package/dist/chunk-D3UIAJKY.js.map +0 -1
  824. package/dist/chunk-ELIYWBZR.js.map +0 -1
  825. package/dist/chunk-H5YGYNXS.js.map +0 -1
  826. package/dist/chunk-HQVCKCLG.js +0 -9458
  827. package/dist/chunk-HQVCKCLG.js.map +0 -1
  828. package/dist/chunk-HUIKIDM5.js.map +0 -1
  829. package/dist/chunk-ICA6R6TW.js.map +0 -1
  830. package/dist/chunk-JVYQRRC4.js.map +0 -1
  831. package/dist/chunk-KCGXPP5V.js.map +0 -1
  832. package/dist/chunk-KZ73RL76.js.map +0 -1
  833. package/dist/chunk-LAKLF4PA.js +0 -141
  834. package/dist/chunk-LAKLF4PA.js.map +0 -1
  835. package/dist/chunk-MZ2G2XBA.js.map +0 -1
  836. package/dist/chunk-NEXLLTP4.js.map +0 -1
  837. package/dist/chunk-OAM4WAAM.js.map +0 -1
  838. package/dist/chunk-PEI6RANI.js.map +0 -1
  839. package/dist/chunk-RGALCTWO.js.map +0 -1
  840. package/dist/chunk-W6NFJXSA.js +0 -454
  841. package/dist/chunk-W6NFJXSA.js.map +0 -1
  842. package/dist/chunk-WSK7G5LE.js +0 -170
  843. package/dist/chunk-WSK7G5LE.js.map +0 -1
  844. package/dist/chunk-X4A66EWZ.js +0 -223
  845. package/dist/chunk-X4A66EWZ.js.map +0 -1
  846. package/dist/chunk-XXWH2JLC.js.map +0 -1
  847. package/dist/chunk-YFKJ7VZH.js +0 -268
  848. package/dist/chunk-YFKJ7VZH.js.map +0 -1
  849. package/dist/chunk-YJFGAFBD.js.map +0 -1
  850. package/dist/computer-viewer-FWEZISW4.js +0 -16
  851. package/dist/fleet-decision-row-GGCAT4E4.js.map +0 -1
  852. package/dist/hooks/use-environments.d.ts +0 -41
  853. package/dist/hooks/use-packs.d.ts +0 -32
  854. package/dist/platform-activity-row-BJHUHXAT.js.map +0 -1
  855. package/dist/queue-surface-implementation-BSKUWHRI.js.map +0 -1
  856. package/dist/timeline-annotation-selection-3L7LHGG2.js +0 -187
  857. package/dist/timeline-annotation-selection-3L7LHGG2.js.map +0 -1
  858. package/dist/timeline-annotations-dialog-U7EVLR75.js +0 -196
  859. package/dist/timeline-annotations-dialog-U7EVLR75.js.map +0 -1
  860. package/src/hooks/use-environments.ts +0 -182
  861. package/src/hooks/use-packs.ts +0 -157
  862. /package/dist/{browser-viewer-AEFHUYZK.js.map → browser-viewer-ZWR6MWJ7.js.map} +0 -0
  863. /package/dist/{computer-viewer-FWEZISW4.js.map → chat-interactive-block-BO2IWXVK.js.map} +0 -0
@@ -17,6 +17,10 @@ import {
17
17
 
18
18
  import { cn } from "../../lib/cn";
19
19
  import { ArtifactSurface } from "./artifact-surface";
20
+ import {
21
+ useSpreadsheetCommandQueue,
22
+ type SpreadsheetCommandTarget,
23
+ } from "./spreadsheet-command-queue";
20
24
  import {
21
25
  SparseSpreadsheetCellIndex,
22
26
  SpreadsheetCanvasRenderer,
@@ -26,6 +30,17 @@ import {
26
30
  type SpreadsheetCanvasProjection,
27
31
  type SpreadsheetCanvasTheme,
28
32
  } from "./spreadsheet-canvas";
33
+ import {
34
+ formatSpreadsheetGeneralDisplay,
35
+ spreadsheetCellEditSource,
36
+ } from "./spreadsheet-general-display";
37
+ import {
38
+ SpreadsheetResizeHandle,
39
+ useSpreadsheetResizing,
40
+ type SpreadsheetDimensionCommit,
41
+ } from "./spreadsheet-resize";
42
+
43
+ export type { SpreadsheetDimensionCommit } from "./spreadsheet-resize";
29
44
 
30
45
  const MAX_ROWS = 1_048_576;
31
46
  const MAX_COLUMNS = 16_384;
@@ -45,6 +60,7 @@ const MAX_MOUNTED_AXIS_ITEMS = 512;
45
60
  const MAX_MOUNTED_GRID_CELLS = 2_048;
46
61
  const MAX_CLIPBOARD_INPUT_BYTES = 4 * 1024 * 1024;
47
62
  const MAX_CLIPBOARD_CELLS = 65_536;
63
+ const EMPTY_DIMENSIONS: readonly (readonly [number, number])[] = [];
48
64
 
49
65
  type CellCoordinate = { row: number; col: number };
50
66
 
@@ -99,6 +115,7 @@ export type SpreadsheetGridProps = {
99
115
  overscanColumns?: number | undefined;
100
116
  onSelectionChange?: ((selection: SpreadsheetSelection) => void) | undefined;
101
117
  onCommit?: ((commit: SpreadsheetCommit) => void) | undefined;
118
+ onResize?: ((change: SpreadsheetDimensionCommit) => void) | undefined;
102
119
  onViewportChange?: ((viewport: SpreadsheetViewport) => void) | undefined;
103
120
  className?: string | undefined;
104
121
  };
@@ -136,6 +153,11 @@ export type SpreadsheetProjectionGridProps = {
136
153
  commit?: ((commit: SpreadsheetCommit) => void | Promise<void>) | undefined;
137
154
  commitRange?: ((commit: SpreadsheetRangeCommit) => void | Promise<void>) | undefined;
138
155
  clear?: ((selection: SpreadsheetSelection) => void | Promise<void>) | undefined;
156
+ resize?: ((change: SpreadsheetDimensionCommit) => void | Promise<void>) | undefined;
157
+ /** Server-unacknowledged changes, distinct from local command acceptance. */
158
+ pendingTransactions?: number | undefined;
159
+ syncStatus?: string | undefined;
160
+ syncError?: string | undefined;
139
161
  onCommandError?: ((error: Error) => void) | undefined;
140
162
  onViewportChange?: ((viewport: SpreadsheetViewport) => void) | undefined;
141
163
  className?: string | undefined;
@@ -494,13 +516,6 @@ function isCellSelected(selection: SpreadsheetSelection, row: number, col: numbe
494
516
  );
495
517
  }
496
518
 
497
- function displayValue(value: unknown): string {
498
- if (value === null || value === undefined) return "";
499
- if (value instanceof Date) return Number.isNaN(value.getTime()) ? "" : value.toLocaleDateString();
500
- if (typeof value === "boolean") return value ? "TRUE" : "FALSE";
501
- return String(value);
502
- }
503
-
504
519
  function parseCellInput(input: string): string | number | boolean | null {
505
520
  if (input === "") return null;
506
521
  const normalized = input.trim();
@@ -634,7 +649,7 @@ function spreadsheetCanvasTheme(element: HTMLElement): SpreadsheetCanvasTheme {
634
649
  const border = computedToken(style, "--og-color-border", "#d1d5db");
635
650
  const foreground = style.color || computedToken(style, "--og-color-fg", "#111827");
636
651
  const mutedForeground = computedToken(style, "--og-color-fg-muted", "#6b7280");
637
- const accent = computedToken(style, "--og-color-accent", "#3b82f6");
652
+ const accent = computedToken(style, "--og-color-accent", "#545454");
638
653
  const error = computedToken(style, "--og-color-status-failed", "#dc2626");
639
654
  const fontFamily =
640
655
  style.fontFamily ||
@@ -816,7 +831,7 @@ export function SpreadsheetArtifactSurface({
816
831
  <button
817
832
  type="button"
818
833
  onClick={addSheet}
819
- className="mt-3 rounded-og-sm bg-og-accent-deep px-3 py-1.5 text-og-sm font-medium text-og-accent-fg"
834
+ className="mt-3 rounded-og-sm border border-og-primary-border bg-og-primary text-og-primary-fg px-3 py-1.5 text-og-sm font-medium hover:bg-og-primary-hover"
820
835
  >
821
836
  Add worksheet
822
837
  </button>
@@ -838,6 +853,7 @@ export function SpreadsheetGrid({
838
853
  overscanColumns = 2,
839
854
  onSelectionChange,
840
855
  onCommit,
856
+ onResize,
841
857
  onViewportChange,
842
858
  className,
843
859
  }: SpreadsheetGridProps) {
@@ -906,7 +922,7 @@ export function SpreadsheetGrid({
906
922
  const data = worksheet.cellData(row, col);
907
923
  return {
908
924
  value: data.formula ? workbook.valueAt(worksheet, { row, col }) : data.value,
909
- input: data.formula ?? displayValue(data.value),
925
+ input: data.formula ?? spreadsheetCellEditSource(data.value),
910
926
  format: data.format,
911
927
  };
912
928
  },
@@ -968,6 +984,14 @@ export function SpreadsheetGrid({
968
984
  },
969
985
  [worksheet],
970
986
  );
987
+ const resize = useCallback(
988
+ (change: SpreadsheetDimensionCommit) => {
989
+ if (change.axis === "column") worksheet.setColumnWidth(change.index, change.size);
990
+ else worksheet.setRowHeight(change.index, change.size);
991
+ onResize?.(change);
992
+ },
993
+ [onResize, worksheet],
994
+ );
971
995
 
972
996
  return (
973
997
  <SpreadsheetProjectionGrid
@@ -979,6 +1003,7 @@ export function SpreadsheetGrid({
979
1003
  commit={commit}
980
1004
  commitRange={commitRange}
981
1005
  clear={clear}
1006
+ resize={resize}
982
1007
  onViewportChange={onViewportChange}
983
1008
  className={className}
984
1009
  />
@@ -998,25 +1023,50 @@ export function SpreadsheetProjectionGrid({
998
1023
  commit,
999
1024
  commitRange,
1000
1025
  clear,
1026
+ resize,
1027
+ pendingTransactions = 0,
1028
+ syncStatus,
1029
+ syncError,
1001
1030
  onCommandError,
1002
1031
  onViewportChange,
1003
1032
  className,
1004
1033
  }: SpreadsheetProjectionGridProps) {
1005
1034
  const { revision, rowCount, columnCount } = projection;
1006
- const dimensionRevision = projection.dimensionRevision ?? 0;
1007
1035
  const editable = !readOnly && commit !== undefined;
1036
+ const commandQueue = useSpreadsheetCommandQueue({
1037
+ scopeKey: `${projection.sheetId}:${projection.generationId ?? "none"}`,
1038
+ enabled: editable,
1039
+ onCommandError,
1040
+ });
1041
+ const [commandFailure, setCommandFailure] = useState<{
1042
+ message: string;
1043
+ retry?: (() => void) | undefined;
1044
+ } | null>(null);
1045
+ const clearPreflightFailure = commandQueue.clearPreflightFailure;
1046
+ const clearCommandFailure = useCallback(() => {
1047
+ setCommandFailure(null);
1048
+ clearPreflightFailure();
1049
+ }, [clearPreflightFailure]);
1050
+ const resizing = useSpreadsheetResizing({
1051
+ sheetId: projection.sheetId,
1052
+ generationId: projection.generationId,
1053
+ revision: projection.dimensionRevision ?? revision,
1054
+ rowHeights: projection.rowHeights ?? EMPTY_DIMENSIONS,
1055
+ columnWidths: projection.columnWidths ?? EMPTY_DIMENSIONS,
1056
+ defaultRowHeight: projection.defaultRowHeight ?? 24,
1057
+ defaultColumnWidth: projection.defaultColumnWidth ?? 96,
1058
+ enabled: !readOnly && resize !== undefined,
1059
+ commit: resize,
1060
+ onCommandError,
1061
+ onStart: clearCommandFailure,
1062
+ });
1063
+ const dimensionRevision = `${projection.dimensionRevision ?? 0}:${resizing.previewKey}`;
1008
1064
  const rows = useMemo(() => {
1009
- void dimensionRevision;
1010
- return buildAxis(rowCount, projection.defaultRowHeight ?? 24, projection.rowHeights ?? []);
1011
- }, [dimensionRevision, projection.defaultRowHeight, projection.rowHeights, rowCount]);
1065
+ return buildAxis(rowCount, projection.defaultRowHeight ?? 24, resizing.rowHeights);
1066
+ }, [projection.defaultRowHeight, resizing.rowHeights, rowCount]);
1012
1067
  const columns = useMemo(() => {
1013
- void dimensionRevision;
1014
- return buildAxis(
1015
- columnCount,
1016
- projection.defaultColumnWidth ?? 96,
1017
- projection.columnWidths ?? [],
1018
- );
1019
- }, [columnCount, dimensionRevision, projection.columnWidths, projection.defaultColumnWidth]);
1068
+ return buildAxis(columnCount, projection.defaultColumnWidth ?? 96, resizing.columnWidths);
1069
+ }, [columnCount, resizing.columnWidths, projection.defaultColumnWidth]);
1020
1070
  const canvasRows = useMemo(() => canvasAxis(rows), [rows]);
1021
1071
  const canvasColumns = useMemo(() => canvasAxis(columns), [columns]);
1022
1072
  const [selection, setSelection] = useState<SpreadsheetSelection>(() => ({
@@ -1028,11 +1078,18 @@ export function SpreadsheetProjectionGrid({
1028
1078
  const [draft, setDraft] = useState(
1029
1079
  () => projection.readCell(selection.focus.row, selection.focus.col)?.input ?? "",
1030
1080
  );
1031
- const [pendingCommands, setPendingCommands] = useState(0);
1032
- const [commandFailure, setCommandFailure] = useState<{
1033
- message: string;
1034
- retry?: (() => void) | undefined;
1035
- } | null>(null);
1081
+ const visibleCommandFailure =
1082
+ resizing.error ??
1083
+ commandQueue.error ??
1084
+ commandFailure ??
1085
+ (syncError ? { message: syncError, retry: undefined } : null);
1086
+ const pendingCommandCount =
1087
+ commandQueue.pendingCount + resizing.pendingCount + pendingTransactions;
1088
+ const visibleSyncStatus =
1089
+ pendingCommandCount > 0 && (!syncStatus || syncStatus === "Saved" || syncStatus === "Read only")
1090
+ ? "Saving…"
1091
+ : syncStatus;
1092
+ const runQueuedCommand = commandQueue.run;
1036
1093
  const [viewport, setViewport] = useState<ViewportState>({
1037
1094
  width: FALLBACK_VIEWPORT_WIDTH,
1038
1095
  height: FALLBACK_VIEWPORT_HEIGHT,
@@ -1052,19 +1109,59 @@ export function SpreadsheetProjectionGrid({
1052
1109
  const commitAfterCompositionRef = useRef(false);
1053
1110
  const selectDraftOnFocusRef = useRef(true);
1054
1111
  const initialDraftRef = useRef(draft);
1055
- const optimisticInputRef = useRef<{
1056
- sheetId: string;
1057
- row: number;
1058
- col: number;
1059
- input: string;
1060
- baseRevision: string | number;
1061
- } | null>(null);
1062
- const mountedRef = useRef(true);
1063
- const commandScopeRef = useRef(0);
1064
- const latestCommandRef = useRef(0);
1112
+ const optimisticInputsRef = useRef(
1113
+ new Map<
1114
+ string,
1115
+ {
1116
+ row: number;
1117
+ col: number;
1118
+ input: string;
1119
+ baseRevision: string | number;
1120
+ commandId: number;
1121
+ pending: boolean;
1122
+ }
1123
+ >(),
1124
+ );
1125
+ const [optimisticEpoch, setOptimisticEpoch] = useState(0);
1126
+ const refreshOptimisticInputs = useCallback(() => setOptimisticEpoch((value) => value + 1), []);
1127
+ const optimisticScope = `${projection.sheetId}:${projection.generationId ?? "none"}`;
1128
+ const optimisticScopeRef = useRef(optimisticScope);
1129
+ if (optimisticScopeRef.current !== optimisticScope) {
1130
+ optimisticScopeRef.current = optimisticScope;
1131
+ optimisticInputsRef.current.clear();
1132
+ }
1133
+ const projectionRef = useRef(projection);
1134
+ projectionRef.current = projection;
1135
+ const editModeRef = useRef(editMode);
1136
+ editModeRef.current = editMode;
1065
1137
  const canvasRendererRef = useRef<SpreadsheetCanvasRenderer | null>(null);
1066
1138
  if (!canvasRendererRef.current) canvasRendererRef.current = new SpreadsheetCanvasRenderer();
1067
1139
  const reactId = useId().replaceAll(":", "");
1140
+ const readEditInput = useCallback(
1141
+ (cell: CellCoordinate) =>
1142
+ optimisticInputsRef.current.get(`${cell.row}:${cell.col}`)?.input ??
1143
+ projectionRef.current.readCell(cell.row, cell.col)?.input ??
1144
+ "",
1145
+ [],
1146
+ );
1147
+ const forgetOptimisticInputs = useCallback(
1148
+ (target: SpreadsheetCommandTarget) => {
1149
+ let changed = false;
1150
+ for (const [key, entry] of optimisticInputsRef.current) {
1151
+ if (
1152
+ entry.row >= target.top &&
1153
+ entry.row <= target.bottom &&
1154
+ entry.col >= target.left &&
1155
+ entry.col <= target.right
1156
+ ) {
1157
+ optimisticInputsRef.current.delete(key);
1158
+ changed = true;
1159
+ }
1160
+ }
1161
+ if (changed) refreshOptimisticInputs();
1162
+ },
1163
+ [refreshOptimisticInputs],
1164
+ );
1068
1165
 
1069
1166
  const updateSelection = useCallback(
1070
1167
  (next: SpreadsheetSelection) => {
@@ -1077,44 +1174,54 @@ export function SpreadsheetProjectionGrid({
1077
1174
 
1078
1175
  useEffect(() => {
1079
1176
  if (selection.sheetId === projection.sheetId) return;
1080
- commandScopeRef.current += 1;
1081
- latestCommandRef.current += 1;
1082
1177
  const next = {
1083
1178
  sheetId: projection.sheetId,
1084
1179
  anchor: { row: 0, col: 0 },
1085
1180
  focus: { row: 0, col: 0 },
1086
1181
  };
1087
- optimisticInputRef.current = null;
1088
- setPendingCommands(0);
1182
+ optimisticInputsRef.current.clear();
1089
1183
  setCommandFailure(null);
1090
1184
  setEditMode(null);
1091
1185
  updateSelection(next);
1092
1186
  }, [projection.sheetId, selection.sheetId, updateSelection]);
1093
1187
 
1094
1188
  useEffect(() => {
1095
- mountedRef.current = true;
1096
- return () => {
1097
- mountedRef.current = false;
1098
- commandScopeRef.current += 1;
1099
- latestCommandRef.current += 1;
1100
- };
1101
- }, []);
1189
+ optimisticInputsRef.current.clear();
1190
+ refreshOptimisticInputs();
1191
+ }, [projection.generationId, projection.sheetId, refreshOptimisticInputs]);
1102
1192
 
1103
- useEffect(() => {
1104
- if (editMode !== null) return;
1105
- const optimistic = optimisticInputRef.current;
1106
- if (
1107
- optimistic?.sheetId === projection.sheetId &&
1108
- optimistic.row === selection.focus.row &&
1109
- optimistic.col === selection.focus.col &&
1110
- optimistic.baseRevision === revision
1111
- ) {
1112
- setDraft(optimistic.input);
1113
- return;
1193
+ useClientLayoutEffect(() => {
1194
+ let changed = false;
1195
+ for (const [key, optimistic] of optimisticInputsRef.current) {
1196
+ const coverage = projection.coverage;
1197
+ const covered =
1198
+ !coverage ||
1199
+ (optimistic.row >= coverage.rowStart &&
1200
+ optimistic.row < coverage.rowEnd &&
1201
+ optimistic.col >= coverage.columnStart &&
1202
+ optimistic.col < coverage.columnEnd);
1203
+ if (
1204
+ !optimistic.pending &&
1205
+ covered &&
1206
+ (projection.readCell(optimistic.row, optimistic.col)?.input === optimistic.input ||
1207
+ revision !== optimistic.baseRevision)
1208
+ ) {
1209
+ optimisticInputsRef.current.delete(key);
1210
+ changed = true;
1211
+ }
1114
1212
  }
1115
- if (optimistic && optimistic.baseRevision !== revision) optimisticInputRef.current = null;
1116
- setDraft(projection.readCell(selection.focus.row, selection.focus.col)?.input ?? "");
1117
- }, [editMode, projection, revision, selection.focus.col, selection.focus.row]);
1213
+ if (changed) refreshOptimisticInputs();
1214
+ if (editMode === null) setDraft(readEditInput(selection.focus));
1215
+ }, [
1216
+ commandQueue.pendingCount,
1217
+ editMode,
1218
+ projection,
1219
+ readEditInput,
1220
+ revision,
1221
+ selection.focus,
1222
+ refreshOptimisticInputs,
1223
+ optimisticEpoch,
1224
+ ]);
1118
1225
 
1119
1226
  useClientLayoutEffect(() => {
1120
1227
  const element = viewportRef.current;
@@ -1232,46 +1339,17 @@ export function SpreadsheetProjectionGrid({
1232
1339
  );
1233
1340
 
1234
1341
  const runCommand = useCallback(
1235
- (invoke: () => void | Promise<void>, retry: () => void, rollback: () => void) => {
1236
- const commandId = latestCommandRef.current + 1;
1237
- latestCommandRef.current = commandId;
1238
- const scope = commandScopeRef.current;
1342
+ (
1343
+ invoke: (id: number) => void | Promise<void>,
1344
+ retry: () => void,
1345
+ rollback: (id: number) => void,
1346
+ target?: SpreadsheetCommandTarget | (() => SpreadsheetCommandTarget),
1347
+ accepted?: (id: number) => void,
1348
+ ) => {
1239
1349
  setCommandFailure(null);
1240
- const fail = (cause: unknown) => {
1241
- if (
1242
- !mountedRef.current ||
1243
- commandScopeRef.current !== scope ||
1244
- latestCommandRef.current !== commandId
1245
- ) {
1246
- return;
1247
- }
1248
- const error = cause instanceof Error ? cause : new Error(String(cause));
1249
- rollback();
1250
- setCommandFailure({ message: error.message || "Spreadsheet change failed", retry });
1251
- onCommandError?.(error);
1252
- };
1253
- let result: void | Promise<void>;
1254
- try {
1255
- result = invoke();
1256
- } catch (cause) {
1257
- fail(cause);
1258
- return;
1259
- }
1260
- if (!result || typeof result.then !== "function") return;
1261
- setPendingCommands((current) => current + 1);
1262
- void Promise.resolve(result).then(
1263
- () => {
1264
- if (!mountedRef.current || commandScopeRef.current !== scope) return;
1265
- setPendingCommands((current) => Math.max(0, current - 1));
1266
- },
1267
- (cause) => {
1268
- if (!mountedRef.current || commandScopeRef.current !== scope) return;
1269
- setPendingCommands((current) => Math.max(0, current - 1));
1270
- fail(cause);
1271
- },
1272
- );
1350
+ runQueuedCommand(invoke, retry, rollback, target, accepted);
1273
1351
  },
1274
- [onCommandError],
1352
+ [runQueuedCommand],
1275
1353
  );
1276
1354
 
1277
1355
  const reportCommandFailure = useCallback(
@@ -1309,21 +1387,49 @@ export function SpreadsheetProjectionGrid({
1309
1387
  kind: input.startsWith("=") ? "formula" : "value",
1310
1388
  } satisfies SpreadsheetCommit;
1311
1389
  const execute = () => {
1312
- optimisticInputRef.current = {
1313
- sheetId: projection.sheetId,
1314
- row: selection.focus.row,
1315
- col: selection.focus.col,
1316
- input,
1317
- baseRevision: revision,
1318
- };
1319
- setDraft(input);
1390
+ const retryFocus = selectionRef.current.focus;
1391
+ if (
1392
+ editModeRef.current === null &&
1393
+ retryFocus.row === next.cell.row &&
1394
+ retryFocus.col === next.cell.col
1395
+ ) {
1396
+ setDraft(input);
1397
+ }
1398
+ const key = `${next.cell.row}:${next.cell.col}`;
1320
1399
  runCommand(
1321
- () => commit(next),
1400
+ (commandId) => {
1401
+ optimisticInputsRef.current.set(key, {
1402
+ ...next.cell,
1403
+ input,
1404
+ baseRevision: revision,
1405
+ commandId,
1406
+ pending: true,
1407
+ });
1408
+ refreshOptimisticInputs();
1409
+ return commit(next);
1410
+ },
1322
1411
  execute,
1323
- () => {
1324
- optimisticInputRef.current = null;
1412
+ (commandId) => {
1413
+ if (optimisticInputsRef.current.get(key)?.commandId !== commandId) return;
1414
+ optimisticInputsRef.current.delete(key);
1415
+ refreshOptimisticInputs();
1325
1416
  const current = selectionRef.current.focus;
1326
- setDraft(projection.readCell(current.row, current.col)?.input ?? "");
1417
+ if (
1418
+ editModeRef.current === null &&
1419
+ current.row === next.cell.row &&
1420
+ current.col === next.cell.col
1421
+ ) {
1422
+ setDraft(readEditInput(current));
1423
+ }
1424
+ },
1425
+ { top: next.cell.row, bottom: next.cell.row, left: next.cell.col, right: next.cell.col },
1426
+ (commandId) => {
1427
+ const optimistic = optimisticInputsRef.current.get(key);
1428
+ if (optimistic?.commandId === commandId) {
1429
+ optimistic.pending = false;
1430
+ optimistic.baseRevision = projectionRef.current.revision;
1431
+ refreshOptimisticInputs();
1432
+ }
1327
1433
  },
1328
1434
  );
1329
1435
  };
@@ -1335,20 +1441,35 @@ export function SpreadsheetProjectionGrid({
1335
1441
  committingRef.current = false;
1336
1442
  });
1337
1443
  },
1338
- [commit, draft, editable, projection, revision, runCommand, selection.focus],
1444
+ [
1445
+ commit,
1446
+ draft,
1447
+ editable,
1448
+ projection,
1449
+ readEditInput,
1450
+ revision,
1451
+ runCommand,
1452
+ selection.focus,
1453
+ refreshOptimisticInputs,
1454
+ ],
1339
1455
  );
1340
1456
 
1341
1457
  const clearSelection = useCallback(() => {
1342
1458
  if (!editable || !clear) return;
1343
1459
  const current = selection;
1460
+ const target = normalizeSelection(current);
1344
1461
  const execute = () =>
1345
1462
  runCommand(
1346
- () => clear(current),
1463
+ () => {
1464
+ forgetOptimisticInputs(target);
1465
+ return clear(current);
1466
+ },
1347
1467
  execute,
1348
1468
  () => {},
1469
+ target,
1349
1470
  );
1350
1471
  execute();
1351
- }, [clear, editable, runCommand, selection]);
1472
+ }, [clear, editable, forgetOptimisticInputs, runCommand, selection]);
1352
1473
 
1353
1474
  const pasteClipboard = useCallback(
1354
1475
  (event: ReactClipboardEvent<HTMLDivElement>) => {
@@ -1356,17 +1477,33 @@ export function SpreadsheetProjectionGrid({
1356
1477
  const clipboardText = event.clipboardData.getData("text/plain");
1357
1478
  if (!clipboardText && !event.clipboardData.types.includes("text/plain")) return;
1358
1479
  event.preventDefault();
1480
+ const previousSelection = selectionRef.current;
1481
+ const anchor = previousSelection.focus;
1359
1482
  const execute = () => {
1360
- const previousSelection = selectionRef.current;
1361
- const invoke = () => {
1362
- const parsed = parseSpreadsheetClipboard(clipboardText);
1363
- const anchor = previousSelection.focus;
1364
- if (anchor.row + parsed.rows > rowCount || anchor.col + parsed.columns > columnCount) {
1483
+ let prepared: ReturnType<typeof parseSpreadsheetClipboard>;
1484
+ let target: SpreadsheetCommandTarget;
1485
+ const prepare = () => {
1486
+ prepared = parseSpreadsheetClipboard(clipboardText);
1487
+ if (
1488
+ anchor.row + prepared.rows > rowCount ||
1489
+ anchor.col + prepared.columns > columnCount
1490
+ ) {
1365
1491
  throw new Error("Clipboard range does not fit in this worksheet");
1366
1492
  }
1367
- if (!commitRange && parsed.inputs.length !== 1) {
1493
+ if (!commitRange && prepared.inputs.length !== 1) {
1368
1494
  throw new Error("This spreadsheet adapter does not support rectangular paste");
1369
1495
  }
1496
+ target = {
1497
+ top: anchor.row,
1498
+ left: anchor.col,
1499
+ bottom: anchor.row + prepared.rows - 1,
1500
+ right: anchor.col + prepared.columns - 1,
1501
+ };
1502
+ return target;
1503
+ };
1504
+ const invoke = () => {
1505
+ const parsed = prepared;
1506
+ forgetOptimisticInputs(target);
1370
1507
  const bottomRight = {
1371
1508
  row: anchor.row + parsed.rows - 1,
1372
1509
  col: anchor.col + parsed.columns - 1,
@@ -1394,7 +1531,23 @@ export function SpreadsheetProjectionGrid({
1394
1531
  kind: input.startsWith("=") ? "formula" : "value",
1395
1532
  });
1396
1533
  };
1397
- runCommand(invoke, execute, () => updateSelection(previousSelection));
1534
+ runCommand(
1535
+ invoke,
1536
+ execute,
1537
+ () => {
1538
+ const current = selectionRef.current;
1539
+ if (
1540
+ target &&
1541
+ current.anchor.row === anchor.row &&
1542
+ current.anchor.col === anchor.col &&
1543
+ current.focus.row === target.bottom &&
1544
+ current.focus.col === target.right
1545
+ ) {
1546
+ updateSelection(previousSelection);
1547
+ }
1548
+ },
1549
+ prepare,
1550
+ );
1398
1551
  };
1399
1552
  execute();
1400
1553
  },
@@ -1405,6 +1558,7 @@ export function SpreadsheetProjectionGrid({
1405
1558
  editMode,
1406
1559
  editable,
1407
1560
  ensureVisible,
1561
+ forgetOptimisticInputs,
1408
1562
  projection.sheetId,
1409
1563
  rowCount,
1410
1564
  runCommand,
@@ -1454,13 +1608,13 @@ export function SpreadsheetProjectionGrid({
1454
1608
  (initial?: string, cell: CellCoordinate = selectionRef.current.focus) => {
1455
1609
  if (!editable) return;
1456
1610
  ensureVisible(cell);
1457
- const current = projection.readCell(cell.row, cell.col)?.input ?? "";
1611
+ const current = readEditInput(cell);
1458
1612
  initialDraftRef.current = current;
1459
1613
  selectDraftOnFocusRef.current = initial === undefined;
1460
1614
  setDraft(initial ?? current);
1461
1615
  setEditMode("cell");
1462
1616
  },
1463
- [editable, ensureVisible, projection],
1617
+ [editable, ensureVisible, readEditInput],
1464
1618
  );
1465
1619
 
1466
1620
  const onGridKeyDown = useCallback(
@@ -1553,7 +1707,7 @@ export function SpreadsheetProjectionGrid({
1553
1707
  } else if (event.key === "Escape") {
1554
1708
  event.preventDefault();
1555
1709
  committingRef.current = true;
1556
- setDraft(projection.readCell(selection.focus.row, selection.focus.col)?.input ?? "");
1710
+ setDraft(readEditInput(selection.focus));
1557
1711
  setEditMode(null);
1558
1712
  viewportRef.current?.focus();
1559
1713
  queueMicrotask(() => {
@@ -1561,7 +1715,7 @@ export function SpreadsheetProjectionGrid({
1561
1715
  });
1562
1716
  }
1563
1717
  },
1564
- [commitDraft, projection, selection.focus.col, selection.focus.row],
1718
+ [commitDraft, readEditInput, selection.focus],
1565
1719
  );
1566
1720
 
1567
1721
  const onEditorCompositionStart = useCallback(() => {
@@ -1857,7 +2011,9 @@ export function SpreadsheetProjectionGrid({
1857
2011
  return (
1858
2012
  <div
1859
2013
  className={cn("relative flex h-full min-w-0 flex-col bg-og-bg", className)}
1860
- data-og-command-state={commandFailure ? "error" : pendingCommands > 0 ? "pending" : "idle"}
2014
+ data-og-command-state={
2015
+ visibleCommandFailure ? "error" : pendingCommandCount > 0 ? "pending" : "idle"
2016
+ }
1861
2017
  style={{ minHeight: 256 }}
1862
2018
  >
1863
2019
  <div className="flex min-h-9 shrink-0 items-center border-b border-og-border bg-og-surface-1">
@@ -1874,12 +2030,11 @@ export function SpreadsheetProjectionGrid({
1874
2030
  <input
1875
2031
  aria-label="Formula or value"
1876
2032
  readOnly={!editable}
1877
- aria-invalid={commandFailure ? "true" : undefined}
2033
+ aria-invalid={visibleCommandFailure ? "true" : undefined}
1878
2034
  value={draft}
1879
2035
  onFocus={() => {
1880
2036
  if (editable) {
1881
- const current =
1882
- projection.readCell(selection.focus.row, selection.focus.col)?.input ?? "";
2037
+ const current = readEditInput(selection.focus);
1883
2038
  initialDraftRef.current = current;
1884
2039
  setDraft(current);
1885
2040
  setEditMode("formula");
@@ -1892,21 +2047,30 @@ export function SpreadsheetProjectionGrid({
1892
2047
  onBlur={(event) => commitEditorOnBlur("formula", event.currentTarget.value)}
1893
2048
  className="h-8 min-w-0 flex-1 bg-transparent px-1 font-mono text-og-sm text-og-fg outline-hidden placeholder:text-og-fg-subtle"
1894
2049
  />
2050
+ {visibleSyncStatus ? (
2051
+ <output
2052
+ aria-label="Spreadsheet sync status"
2053
+ className="shrink-0 px-2 text-og-xs text-og-fg-muted"
2054
+ >
2055
+ {visibleCommandFailure ? "Not saved" : visibleSyncStatus}
2056
+ </output>
2057
+ ) : null}
1895
2058
  </div>
1896
2059
  <div role="status" aria-live="polite" className="sr-only">
1897
- {commandFailure?.message ?? (pendingCommands > 0 ? "Saving spreadsheet changes" : "")}
2060
+ {visibleCommandFailure?.message ??
2061
+ (pendingCommandCount > 0 ? "Saving spreadsheet changes" : "")}
1898
2062
  </div>
1899
- {commandFailure ? (
2063
+ {visibleCommandFailure ? (
1900
2064
  <div
1901
2065
  role="alert"
1902
2066
  className="absolute bottom-2 left-2 z-50 flex items-center gap-2 rounded-og-sm border border-og-status-failed/30 bg-og-surface-1/95 px-2 py-1 text-og-xs text-og-status-failed shadow-og-sm"
1903
2067
  style={{ maxWidth: "calc(100% - 1rem)" }}
1904
2068
  >
1905
- <span className="truncate">{commandFailure.message}</span>
1906
- {commandFailure.retry ? (
2069
+ <span className="truncate">{visibleCommandFailure.message}</span>
2070
+ {visibleCommandFailure.retry ? (
1907
2071
  <button
1908
2072
  type="button"
1909
- onClick={commandFailure.retry}
2073
+ onClick={visibleCommandFailure.retry}
1910
2074
  className="shrink-0 rounded-og-xs px-1.5 py-0.5 font-medium outline-hidden hover:bg-og-surface-3 focus-visible:ring-2 focus-visible:ring-og-accent"
1911
2075
  >
1912
2076
  Retry
@@ -1924,7 +2088,7 @@ export function SpreadsheetProjectionGrid({
1924
2088
  aria-colcount={columnCount}
1925
2089
  aria-multiselectable="true"
1926
2090
  aria-readonly={!editable}
1927
- aria-busy={pendingCommands > 0 ? "true" : undefined}
2091
+ aria-busy={pendingCommandCount > 0 ? "true" : undefined}
1928
2092
  aria-activedescendant={activeCellId}
1929
2093
  onKeyDown={onGridKeyDown}
1930
2094
  onCopy={copySelection}
@@ -1958,6 +2122,10 @@ export function SpreadsheetProjectionGrid({
1958
2122
  style={{
1959
2123
  width: horizontalProjection.physicalTotal,
1960
2124
  height: verticalProjection.physicalTotal,
2125
+ // Centered boundary handles must not enlarge the bounded scroll
2126
+ // extent at the final row/column. Unlike hidden, clip does not
2127
+ // create another scroll container for the sticky headers.
2128
+ overflow: "clip",
1961
2129
  }}
1962
2130
  >
1963
2131
  <canvas
@@ -1990,7 +2158,7 @@ export function SpreadsheetProjectionGrid({
1990
2158
  key={`header-${col}`}
1991
2159
  role="columnheader"
1992
2160
  aria-colindex={col + 1}
1993
- className="sticky top-0 z-30 grid select-none place-items-center overflow-hidden border-b border-r border-og-border bg-og-surface-2 text-og-xs font-medium text-og-fg-muted"
2161
+ className="pointer-events-none sticky top-0 z-30 grid select-none place-items-center border-b border-r border-og-border bg-og-surface-2 text-og-xs font-medium text-og-fg-muted"
1994
2162
  style={{
1995
2163
  position: "absolute",
1996
2164
  left,
@@ -2006,7 +2174,15 @@ export function SpreadsheetProjectionGrid({
2006
2174
  : undefined),
2007
2175
  }}
2008
2176
  >
2009
- {columnName(col)}
2177
+ <span className="max-w-full overflow-hidden">{columnName(col)}</span>
2178
+ {!readOnly && resize ? (
2179
+ <SpreadsheetResizeHandle
2180
+ axis="column"
2181
+ label={`Resize column ${columnName(col)}`}
2182
+ size={width}
2183
+ {...resizing.handleProps("column", col)}
2184
+ />
2185
+ ) : null}
2010
2186
  </div>
2011
2187
  ))}
2012
2188
  </div>
@@ -2026,7 +2202,7 @@ export function SpreadsheetProjectionGrid({
2026
2202
  >
2027
2203
  <div
2028
2204
  role="rowheader"
2029
- className="sticky left-0 z-20 grid h-full select-none place-items-center border-b border-r border-og-border bg-og-surface-2 text-og-xs text-og-fg-muted"
2205
+ className="pointer-events-none sticky left-0 z-20 grid h-full select-none place-items-center border-b border-r border-og-border bg-og-surface-2 text-og-xs text-og-fg-muted"
2030
2206
  style={{
2031
2207
  width: ROW_HEADER_WIDTH,
2032
2208
  ...(canvasReady
@@ -2039,6 +2215,14 @@ export function SpreadsheetProjectionGrid({
2039
2215
  }}
2040
2216
  >
2041
2217
  {row + 1}
2218
+ {!readOnly && resize ? (
2219
+ <SpreadsheetResizeHandle
2220
+ axis="row"
2221
+ label={`Resize row ${row + 1}`}
2222
+ size={height}
2223
+ {...resizing.handleProps("row", row)}
2224
+ />
2225
+ ) : null}
2042
2226
  </div>
2043
2227
 
2044
2228
  {columnLayout.map(({ col, left, width }) => {
@@ -2050,6 +2234,13 @@ export function SpreadsheetProjectionGrid({
2050
2234
  format: {},
2051
2235
  };
2052
2236
  const value = data.value;
2237
+ // Submitted input is a transient overlay, not a calculated or saved value.
2238
+ const optimistic = editable
2239
+ ? optimisticInputsRef.current.get(`${row}:${col}`)
2240
+ : undefined;
2241
+ const display = optimistic
2242
+ ? optimistic.input
2243
+ : formatSpreadsheetGeneralDisplay(value);
2053
2244
  const address = cellName({ row, col });
2054
2245
  const error = typeof value === "string" && value.startsWith("#");
2055
2246
  return (
@@ -2059,12 +2250,13 @@ export function SpreadsheetProjectionGrid({
2059
2250
  role="gridcell"
2060
2251
  aria-colindex={col + 1}
2061
2252
  aria-selected={selected}
2062
- aria-label={`${address}${value === null ? "" : `, ${displayValue(value)}`}`}
2253
+ aria-label={`${address}${display ? `, ${display}` : ""}${optimistic ? (optimistic.input.startsWith("=") ? ", pending formula, awaiting calculation" : ", pending edit") : ""}`}
2254
+ data-og-pending-input={optimistic ? "true" : undefined}
2063
2255
  data-og-cell={address}
2064
2256
  className={cn(
2065
2257
  "pointer-events-none absolute top-0 flex h-full min-w-0 overflow-hidden border-b border-r border-og-border px-1.5 text-og-fg",
2066
- !canvasReady && selected && !active && "bg-og-accent/10",
2067
- !canvasReady &&
2258
+ (!canvasReady || optimistic) && selected && !active && "bg-og-accent/10",
2259
+ (!canvasReady || optimistic) &&
2068
2260
  active &&
2069
2261
  "z-10 bg-og-accent/10 ring-2 ring-inset ring-og-accent",
2070
2262
  !canvasReady && error && "text-og-status-failed",
@@ -2073,13 +2265,19 @@ export function SpreadsheetProjectionGrid({
2073
2265
  left,
2074
2266
  width,
2075
2267
  ...cellStyle(data.format),
2076
- ...(canvasReady
2268
+ ...(canvasReady && !optimistic
2077
2269
  ? {
2078
2270
  background: "transparent",
2079
2271
  borderColor: "transparent",
2080
2272
  color: "transparent",
2081
2273
  }
2082
2274
  : undefined),
2275
+ ...(optimistic
2276
+ ? {
2277
+ background: data.format.fill ?? "var(--og-color-surface-1)",
2278
+ zIndex: 10,
2279
+ }
2280
+ : undefined),
2083
2281
  }}
2084
2282
  >
2085
2283
  {active && editMode === "cell" ? (
@@ -2099,7 +2297,7 @@ export function SpreadsheetProjectionGrid({
2099
2297
  />
2100
2298
  ) : (
2101
2299
  <span className="block min-w-0 overflow-hidden text-ellipsis">
2102
- {displayValue(value)}
2300
+ {display}
2103
2301
  </span>
2104
2302
  )}
2105
2303
  </div>
@@ -2117,7 +2315,9 @@ export function SpreadsheetProjectionGrid({
2117
2315
  aria-colindex={selection.focus.col + 1}
2118
2316
  aria-selected="true"
2119
2317
  aria-label={`${cellName(selection.focus)}${
2120
- hiddenActiveValue == null ? "" : `, ${displayValue(hiddenActiveValue)}`
2318
+ hiddenActiveValue == null
2319
+ ? ""
2320
+ : `, ${formatSpreadsheetGeneralDisplay(hiddenActiveValue)}`
2121
2321
  }`}
2122
2322
  />
2123
2323
  </div>