@rho-workspace/rho 0.5.3 → 0.5.4

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 (216) hide show
  1. package/README.md +24 -5
  2. package/dist/capabilities.d.ts +27 -0
  3. package/dist/capabilities.js +73 -1
  4. package/dist/cli.js +150 -25
  5. package/dist/contract.generated.d.ts +112 -12
  6. package/dist/contracts/owners.generated.js +103 -8
  7. package/dist/conversation-presentation.d.ts +3 -1
  8. package/dist/conversation-presentation.js +16 -6
  9. package/dist/conversations.d.ts +10 -6
  10. package/dist/conversations.js +17 -13
  11. package/dist/installs.d.ts +11 -0
  12. package/dist/installs.js +179 -0
  13. package/dist/project-notes.js +2 -0
  14. package/dist/protocol.js +7 -5
  15. package/dist/screen-check-skill.d.ts +2 -0
  16. package/dist/screen-check-skill.js +39 -0
  17. package/dist/server.d.ts +2 -0
  18. package/dist/server.js +50 -7
  19. package/dist/web/.vite/manifest.json +51 -51
  20. package/dist/web/assets/{choices-B-y2OYvE.js → choices-DU9kHlyQ.js} +1 -1
  21. package/dist/web/assets/{console-e1P5qYQ5.js → console-Dbdo-5oO.js} +1 -1
  22. package/dist/web/assets/{dist-Dd3iAGFy.js → dist-B2V0VDO0.js} +1 -1
  23. package/dist/web/assets/{dist-CH56yNDn.js → dist-BV3hWfn_.js} +1 -1
  24. package/dist/web/assets/{dist-CBM2oq6g.js → dist-CLNF2g-E.js} +1 -1
  25. package/dist/web/assets/{dist-DEorbOW0.js → dist-D25Vn17i.js} +1 -1
  26. package/dist/web/assets/{explore-in-muWXOGOY.js → explore-in-8Q5ftt-E.js} +1 -1
  27. package/dist/web/assets/{graph-CK-df5lh.js → graph-hS2kvHTI.js} +1 -1
  28. package/dist/web/assets/{index-BYuKpyoi.js → index-BHQIaDsx.js} +220 -121
  29. package/dist/web/assets/index-Cj1_iqyK.css +1 -0
  30. package/dist/web/assets/{notes-meaning-B3HFbh84.js → notes-meaning-DdPbtNzJ.js} +1 -1
  31. package/dist/web/assets/{overview-D1Ev2OC_.js → overview-BV6ZO5TO.js} +3 -3
  32. package/dist/web/assets/{preview-HbmQKUGY.js → preview-n5lOOdjN.js} +1 -1
  33. package/dist/web/assets/{review-BVh9jWMB.js → review-CmWou4Iv.js} +1 -1
  34. package/dist/web/assets/{skills-DPaEYkln.js → skills-Dy7n3L9d.js} +1 -1
  35. package/dist/web/assets/{skills-work-dvjfy_tu.js → skills-work-Cj0W6b-I.js} +1 -1
  36. package/dist/web/assets/{studio-process-BYm8mjRJ.js → studio-process-QOY_n2_8.js} +1 -1
  37. package/dist/web/assets/{timeline-events-CDZ7wiJX.js → timeline-events-DmX1BCh3.js} +1 -1
  38. package/dist/web/assets/{work-turns-BeCt303c.js → work-turns-Co0C71rJ.js} +1 -1
  39. package/dist/web/assets/{workspace-d5Hw_ClZ.js → workspace-BKFefRfJ.js} +2 -2
  40. package/dist/web/composition.json +73 -73
  41. package/dist/web/index.html +2 -2
  42. package/dist/web/renderer.json +1 -1
  43. package/docs/FRONTEND.md +30 -14
  44. package/docs/HEADLESS.md +59 -13
  45. package/example/pa14-qs/.rho/rho/conversations/c-67f77cfebaba2cea.json +1 -1
  46. package/example/pa14-qs/.rho/rho/conversations/c-91aa2e46b1ac1a6c.json +1 -1
  47. package/example/pa14-qs/.rho/rho/conversations/c-fa24dfd80dfe4bcb.json +1 -1
  48. package/node_modules/@hono/node-server/dist/index.js +11 -0
  49. package/node_modules/@hono/node-server/dist/index.mjs +11 -0
  50. package/node_modules/@hono/node-server/dist/listener.js +11 -0
  51. package/node_modules/@hono/node-server/dist/listener.mjs +11 -0
  52. package/node_modules/@hono/node-server/dist/request.js +11 -0
  53. package/node_modules/@hono/node-server/dist/request.mjs +11 -0
  54. package/node_modules/@hono/node-server/dist/server.js +11 -0
  55. package/node_modules/@hono/node-server/dist/server.mjs +11 -0
  56. package/node_modules/@hono/node-server/dist/vercel.js +11 -0
  57. package/node_modules/@hono/node-server/dist/vercel.mjs +11 -0
  58. package/node_modules/@hono/node-server/package.json +1 -1
  59. package/node_modules/@rho-workspace/plugin-agent/README.md +3 -1
  60. package/node_modules/@rho-workspace/plugin-agent/dist/acp-conversation.js +14 -3
  61. package/node_modules/@rho-workspace/plugin-agent/dist/conversation.d.ts +1 -0
  62. package/node_modules/@rho-workspace/plugin-agent/dist/conversation.js +1 -0
  63. package/node_modules/@rho-workspace/plugin-agent/dist/generic-acp.d.ts +11 -0
  64. package/node_modules/@rho-workspace/plugin-agent/dist/generic-acp.js +7 -0
  65. package/node_modules/@rho-workspace/plugin-agent/dist/mcp.js +5 -1
  66. package/node_modules/@rho-workspace/plugin-agent/package.json +1 -1
  67. package/node_modules/@rho-workspace/plugin-annotations/package.json +1 -1
  68. package/node_modules/@rho-workspace/plugin-documents/README.md +4 -0
  69. package/node_modules/@rho-workspace/plugin-documents/dist/index.d.ts +3 -0
  70. package/node_modules/@rho-workspace/plugin-documents/dist/index.js +1 -1
  71. package/node_modules/@rho-workspace/plugin-documents/package.json +1 -1
  72. package/node_modules/@rho-workspace/plugin-kernel/README.md +71 -10
  73. package/node_modules/@rho-workspace/plugin-kernel/dist/code.d.ts +2 -0
  74. package/node_modules/@rho-workspace/plugin-kernel/dist/code.js +4 -1
  75. package/node_modules/@rho-workspace/plugin-kernel/dist/contract.js +5 -0
  76. package/node_modules/@rho-workspace/plugin-kernel/dist/index.d.ts +7 -0
  77. package/node_modules/@rho-workspace/plugin-kernel/dist/index.js +55 -8
  78. package/node_modules/@rho-workspace/plugin-kernel/dist/lineage.d.ts +9 -6
  79. package/node_modules/@rho-workspace/plugin-kernel/dist/lineage.js +18 -41
  80. package/node_modules/@rho-workspace/plugin-kernel/dist/operations.js +5 -2
  81. package/node_modules/@rho-workspace/plugin-kernel/dist/script-flow.d.ts +39 -0
  82. package/node_modules/@rho-workspace/plugin-kernel/dist/script-flow.js +661 -0
  83. package/node_modules/@rho-workspace/plugin-kernel/dist/ui-base.d.ts +3 -0
  84. package/node_modules/@rho-workspace/plugin-kernel/dist/ui-base.js +10 -0
  85. package/node_modules/@rho-workspace/plugin-kernel/dist/ui-flow.d.ts +38 -4
  86. package/node_modules/@rho-workspace/plugin-kernel/dist/ui-flow.js +194 -97
  87. package/node_modules/@rho-workspace/plugin-kernel/dist/ui-notebook-work.js +1 -2
  88. package/node_modules/@rho-workspace/plugin-kernel/dist/ui-notebook.d.ts +10 -2
  89. package/node_modules/@rho-workspace/plugin-kernel/dist/ui-notebook.js +79 -18
  90. package/node_modules/@rho-workspace/plugin-kernel/dist/ui-styles.js +115 -45
  91. package/node_modules/@rho-workspace/plugin-kernel/dist/ui.d.ts +1 -1
  92. package/node_modules/@rho-workspace/plugin-kernel/dist/ui.js +1 -1
  93. package/node_modules/@rho-workspace/plugin-kernel/dist/value-graph.d.ts +63 -0
  94. package/node_modules/@rho-workspace/plugin-kernel/dist/value-graph.js +344 -0
  95. package/node_modules/@rho-workspace/plugin-kernel/package.json +1 -1
  96. package/node_modules/@rho-workspace/plugin-kernel/runners/runner.R +6 -3
  97. package/node_modules/@rho-workspace/plugin-kernel/runners/runner.py +6 -3
  98. package/node_modules/express-rate-limit/dist/index.cjs +1 -1
  99. package/node_modules/express-rate-limit/dist/index.mjs +1 -1
  100. package/node_modules/express-rate-limit/package.json +1 -1
  101. package/node_modules/ip-address/dist/ipv6.js +1 -1
  102. package/node_modules/ip-address/package.json +1 -1
  103. package/node_modules/playwright-core/LICENSE +202 -0
  104. package/node_modules/playwright-core/NOTICE +5 -0
  105. package/node_modules/playwright-core/ThirdPartyNotices.txt +13 -0
  106. package/node_modules/playwright-core/bin/install_media_pack.ps1 +5 -0
  107. package/node_modules/playwright-core/bin/install_webkit_wsl.ps1 +33 -0
  108. package/node_modules/playwright-core/bin/reinstall_chrome_beta_linux.sh +42 -0
  109. package/node_modules/playwright-core/bin/reinstall_chrome_beta_mac.sh +13 -0
  110. package/node_modules/playwright-core/bin/reinstall_chrome_beta_win.ps1 +24 -0
  111. package/node_modules/playwright-core/bin/reinstall_chrome_stable_linux.sh +42 -0
  112. package/node_modules/playwright-core/bin/reinstall_chrome_stable_mac.sh +12 -0
  113. package/node_modules/playwright-core/bin/reinstall_chrome_stable_win.ps1 +24 -0
  114. package/node_modules/playwright-core/bin/reinstall_msedge_beta_linux.sh +48 -0
  115. package/node_modules/playwright-core/bin/reinstall_msedge_beta_mac.sh +11 -0
  116. package/node_modules/playwright-core/bin/reinstall_msedge_beta_win.ps1 +23 -0
  117. package/node_modules/playwright-core/bin/reinstall_msedge_dev_linux.sh +48 -0
  118. package/node_modules/playwright-core/bin/reinstall_msedge_dev_mac.sh +11 -0
  119. package/node_modules/playwright-core/bin/reinstall_msedge_dev_win.ps1 +23 -0
  120. package/node_modules/playwright-core/bin/reinstall_msedge_stable_linux.sh +48 -0
  121. package/node_modules/playwright-core/bin/reinstall_msedge_stable_mac.sh +11 -0
  122. package/node_modules/playwright-core/bin/reinstall_msedge_stable_win.ps1 +24 -0
  123. package/node_modules/playwright-core/browsers.json +52 -0
  124. package/node_modules/playwright-core/cli.js +22 -0
  125. package/node_modules/playwright-core/index.js +17 -0
  126. package/node_modules/playwright-core/index.mjs +28 -0
  127. package/node_modules/playwright-core/lib/bootstrap.js +149 -0
  128. package/node_modules/playwright-core/lib/coreBundle.js +78041 -0
  129. package/node_modules/playwright-core/lib/entry/cliDaemon.js +5 -0
  130. package/node_modules/playwright-core/lib/entry/dashboardApp.js +3 -0
  131. package/node_modules/playwright-core/lib/entry/mcp.js +10 -0
  132. package/node_modules/playwright-core/lib/entry/oopBrowserDownload.js +3 -0
  133. package/node_modules/playwright-core/lib/package.js +50 -0
  134. package/node_modules/playwright-core/lib/server/chromium/appIcon.png +0 -0
  135. package/node_modules/playwright-core/lib/server/electron/loader.js +123 -0
  136. package/node_modules/playwright-core/lib/serverRegistry.js +1939 -0
  137. package/node_modules/playwright-core/lib/serverRegistry.js.LICENSE +65 -0
  138. package/node_modules/playwright-core/lib/tools/cli-client/channelSessions.js +141 -0
  139. package/node_modules/playwright-core/lib/tools/cli-client/cli.js +7 -0
  140. package/node_modules/playwright-core/lib/tools/cli-client/help.json +808 -0
  141. package/node_modules/playwright-core/lib/tools/cli-client/minimist.js +128 -0
  142. package/node_modules/playwright-core/lib/tools/cli-client/output.js +352 -0
  143. package/node_modules/playwright-core/lib/tools/cli-client/program.js +422 -0
  144. package/node_modules/playwright-core/lib/tools/cli-client/registry.js +180 -0
  145. package/node_modules/playwright-core/lib/tools/cli-client/session.js +261 -0
  146. package/node_modules/playwright-core/lib/tools/dashboard/appIcon.png +0 -0
  147. package/node_modules/playwright-core/lib/tools/utils/extension.js +112 -0
  148. package/node_modules/playwright-core/lib/tools/utils/socketConnection.js +108 -0
  149. package/node_modules/playwright-core/lib/utilsBundle.js +86078 -0
  150. package/node_modules/playwright-core/lib/utilsBundle.js.LICENSE +1890 -0
  151. package/node_modules/playwright-core/lib/vite/dashboard/assets/codeMirrorModule--QdMvsKi.css +1 -0
  152. package/node_modules/playwright-core/lib/vite/dashboard/assets/codeMirrorModule-CQ8RZGBm.js +32 -0
  153. package/node_modules/playwright-core/lib/vite/dashboard/assets/codicon-DCmgc-ay.ttf +0 -0
  154. package/node_modules/playwright-core/lib/vite/dashboard/assets/firefox-1bWoP6pv.svg +1 -0
  155. package/node_modules/playwright-core/lib/vite/dashboard/assets/firefox-beta-k3eOH_eK.svg +1 -0
  156. package/node_modules/playwright-core/lib/vite/dashboard/assets/firefox-nightly-Cp5nfeDT.svg +1 -0
  157. package/node_modules/playwright-core/lib/vite/dashboard/assets/index-AwgwcYie.css +1 -0
  158. package/node_modules/playwright-core/lib/vite/dashboard/assets/index-hRvO4yU2.js +12 -0
  159. package/node_modules/playwright-core/lib/vite/dashboard/assets/safari-na3_-uQk.svg +1 -0
  160. package/node_modules/playwright-core/lib/vite/dashboard/index.html +29 -0
  161. package/node_modules/playwright-core/lib/vite/dashboard/playwright-logo.svg +24 -0
  162. package/node_modules/playwright-core/lib/vite/htmlReport/index.html +16 -0
  163. package/node_modules/playwright-core/lib/vite/htmlReport/report.css +2 -0
  164. package/node_modules/playwright-core/lib/vite/htmlReport/report.js +32 -0
  165. package/node_modules/playwright-core/lib/vite/recorder/assets/codeMirrorModule--QdMvsKi.css +1 -0
  166. package/node_modules/playwright-core/lib/vite/recorder/assets/codeMirrorModule-DK72OMRi.js +32 -0
  167. package/node_modules/playwright-core/lib/vite/recorder/assets/codicon-DCmgc-ay.ttf +0 -0
  168. package/node_modules/playwright-core/lib/vite/recorder/assets/index-BZpYJZ-P.css +1 -0
  169. package/node_modules/playwright-core/lib/vite/recorder/assets/index-Cn0mmDuv.js +129 -0
  170. package/node_modules/playwright-core/lib/vite/recorder/index.html +29 -0
  171. package/node_modules/playwright-core/lib/vite/recorder/playwright-logo.svg +9 -0
  172. package/node_modules/playwright-core/lib/vite/traceViewer/assets/codeMirrorModule-BEB2e8M3.js +32 -0
  173. package/node_modules/playwright-core/lib/vite/traceViewer/assets/defaultSettingsView-D-g2vrvf.js +184 -0
  174. package/node_modules/playwright-core/lib/vite/traceViewer/assets/urlMatch-L3liM589.js +1 -0
  175. package/node_modules/playwright-core/lib/vite/traceViewer/assets/xtermModule-B794rD2Z.js +7 -0
  176. package/node_modules/playwright-core/lib/vite/traceViewer/codeMirrorModule.-QdMvsKi.css +1 -0
  177. package/node_modules/playwright-core/lib/vite/traceViewer/codicon.DCmgc-ay.ttf +0 -0
  178. package/node_modules/playwright-core/lib/vite/traceViewer/defaultSettingsView.C8BeHuxd.css +1 -0
  179. package/node_modules/playwright-core/lib/vite/traceViewer/index.B_TqY17P.css +1 -0
  180. package/node_modules/playwright-core/lib/vite/traceViewer/index.html +44 -0
  181. package/node_modules/playwright-core/lib/vite/traceViewer/index.oNry3Hjv.js +1 -0
  182. package/node_modules/playwright-core/lib/vite/traceViewer/manifest.webmanifest +16 -0
  183. package/node_modules/playwright-core/lib/vite/traceViewer/playwright-logo.svg +9 -0
  184. package/node_modules/playwright-core/lib/vite/traceViewer/snapshot.B_Jk1wbt.js +1 -0
  185. package/node_modules/playwright-core/lib/vite/traceViewer/snapshot.html +10 -0
  186. package/node_modules/playwright-core/lib/vite/traceViewer/sw.bundle.js +4 -0
  187. package/node_modules/playwright-core/lib/vite/traceViewer/uiMode.CYwC_gH1.js +5 -0
  188. package/node_modules/playwright-core/lib/vite/traceViewer/uiMode.CyMfwkXJ.css +1 -0
  189. package/node_modules/playwright-core/lib/vite/traceViewer/uiMode.html +18 -0
  190. package/node_modules/playwright-core/lib/vite/traceViewer/xtermModule.kHJ-D0s7.css +1 -0
  191. package/node_modules/playwright-core/lib/webp_codec.LICENSE +173 -0
  192. package/node_modules/playwright-core/lib/webp_codec.wasm +0 -0
  193. package/node_modules/playwright-core/lib/xdg-open +1267 -0
  194. package/node_modules/playwright-core/package.json +34 -0
  195. package/package.json +10 -6
  196. package/protocol/index.json +17 -17
  197. package/protocol/operations/conversation.settings.check.json +147 -4
  198. package/protocol/operations/conversation.settings.read.json +145 -3
  199. package/protocol/operations/conversation.settings.update.json +166 -4
  200. package/protocol/operations/conversation.start.json +2 -1
  201. package/protocol/operations/kernel.interrupt.json +20 -0
  202. package/protocol/operations/kernel.read.json +30 -0
  203. package/protocol/operations/kernel.run.json +36 -1
  204. package/protocol/operations/kernel.stop.json +10 -0
  205. package/scripts/browser-checks.mjs +53 -0
  206. package/scripts/screen-check.mjs +193 -0
  207. package/vendor/composition.json +102 -102
  208. package/vendor/rho-workspace-plugin-agent-0.4.28.tgz +0 -0
  209. package/vendor/rho-workspace-plugin-annotations-0.5.2.tgz +0 -0
  210. package/vendor/rho-workspace-plugin-documents-0.4.11.tgz +0 -0
  211. package/vendor/rho-workspace-plugin-kernel-0.5.5.tgz +0 -0
  212. package/web/theme.css +17 -2
  213. package/dist/web/assets/index-DBd77u4a.css +0 -1
  214. package/vendor/rho-workspace-plugin-agent-0.4.27.tgz +0 -0
  215. package/vendor/rho-workspace-plugin-documents-0.4.10.tgz +0 -0
  216. package/vendor/rho-workspace-plugin-kernel-0.5.2.tgz +0 -0
@@ -1 +1 @@
1
- import{r as e}from"./rolldown-runtime-XKyaHtl9.js";import{n as t,t as n}from"./react-Dss-ouuy.js";import{s as r}from"./home-CCbP6kS-.js";import{r as i,t as a}from"./markdown-0ngRuTpW.js";import{at as o}from"./index-BYuKpyoi.js";import{a as s,c,i as l,l as u,n as d,o as f,r as p,s as m,u as h}from"./skills-work-dvjfy_tu.js";var g=e(n(),1),_=t(),v={changes:20},y={recorded:`changed`,removed:`removed`,undone:`undid a change to`,outside:`changed`};function b({client:e,snapshot:t,onPath:n,onConversation:i,onNotebook:a}){let o=t.project.id,{list:s,problem:l,again:f}=h(e,o,t.cursor),m=u(t),[v,b]=(0,g.useState)(p),[w,T]=(0,g.useState)(v!==null);(0,g.useEffect)(d,[]);let E=s?.skills??[],D=s?.removed??[],O=[...E,...D].filter(e=>e.last).sort((e,t)=>t.last.at.localeCompare(e.last.at))[0]??E[0]??null,k=v&&[...E,...D].some(e=>e.name===v)?v:O?.name??null,j=e=>{b(e),T(!0)},M=O?.last;return(0,_.jsxs)(`section`,{className:`project-page skills-page`,"aria-labelledby":`skills-title`,children:[(0,_.jsx)(`header`,{className:`page-heading`,children:(0,_.jsxs)(`div`,{children:[(0,_.jsx)(`h1`,{id:`skills-title`,children:`Skills`}),s&&E.length===0&&(0,_.jsx)(`p`,{children:`How work is done in this project, read by every Agent here`}),s&&E.length>0&&(0,_.jsxs)(`p`,{children:[E.length,` `,E.length===1?`skill`:`skills`,` every Agent here reads`,M?` · ${M.kind===`outside`?c(O.name)+` was changed outside Rho`:m(M.by).name+` `+y[M.kind]+` `+c(O.name)} ${r(M.at).text.toLowerCase()}`:``]})]})}),l&&(0,_.jsxs)(`div`,{className:`inline-error`,role:`alert`,children:[(0,_.jsxs)(`p`,{children:[`The skills could not be read. `,l]}),(0,_.jsx)(`button`,{onClick:()=>void f(),children:`Try again`})]}),!s&&!l?(0,_.jsx)(`p`,{className:`quiet-empty`,role:`status`,children:`Reading the skills…`}):s&&(0,_.jsxs)(`div`,{className:`skills-layout`+(w&&k?` showing`:``)+(k?``:` none-yet`),children:[(0,_.jsxs)(`nav`,{className:`skills-index`,"aria-label":`Skills`,children:[E.length>0?(0,_.jsx)(`ul`,{className:`skills-list`,children:E.map(e=>(0,_.jsx)(`li`,{children:(0,_.jsx)(x,{skill:e,current:e.name===k,author:m,onChoose:()=>j(e.name)})},e.name))}):(0,_.jsxs)(`div`,{className:`skills-empty`,children:[(0,_.jsx)(`h2`,{children:`No project skills yet`}),(0,_.jsx)(`p`,{children:`When you correct how your Agent works, or it finds why something failed, it records that here, and the next conversation starts from it. You can also tell it directly:`}),(0,_.jsx)(`ul`,{children:[`For this project we report proportions as percentages.`,`Remember how we filter the cells, so the next analysis does the same.`].map(e=>(0,_.jsxs)(`li`,{children:[`“`,e,`”`]},e))}),(0,_.jsx)(`small`,{children:`Skills are kept as SKILL.md files in .claude/skills in the project folder. Claude Code reads them by itself; other Agents read them through Rho.`})]}),D.length>0&&(0,_.jsxs)(`details`,{className:`skills-removed`,open:D.some(e=>e.name===k),children:[(0,_.jsxs)(`summary`,{children:[(0,_.jsx)(C,{}),`Removed `,(0,_.jsx)(`span`,{className:`section-count`,children:D.length})]}),(0,_.jsx)(`ul`,{className:`skills-list`,children:D.map(e=>(0,_.jsx)(`li`,{children:(0,_.jsx)(x,{skill:e,current:e.name===k,author:m,onChoose:()=>j(e.name)})},e.name))})]}),(0,_.jsx)(A,{client:e,snapshot:t})]}),k&&(0,_.jsx)(S,{client:e,snapshot:t,name:k,summary:[...E,...D].find(e=>e.name===k),author:m,onBack:()=>T(!1),onPath:n,onConversation:i,onNotebook:a,onChanged:()=>void f()},k)]})]})}function x({skill:e,current:t,author:n,onChoose:i}){let a=e.last;return(0,_.jsxs)(`button`,{className:`skills-row`,"aria-current":t?`true`:void 0,onClick:i,title:m(e.name),children:[(0,_.jsx)(`strong`,{children:c(e.name)}),e.description&&(0,_.jsx)(`span`,{className:`skills-row-desc`,children:e.description}),(0,_.jsx)(`small`,{children:e.problem?(0,_.jsx)(`span`,{className:`skills-row-problem`,children:e.problem}):a?e.outside?`Changed outside Rho`:`${a.kind===`outside`?`Changed outside Rho`:l(a,n(a.by).name)} · ${r(a.at).text}`:`Written outside Rho`})]})}function S({client:e,snapshot:t,name:n,summary:o,author:u,onBack:d,onPath:p,onConversation:h,onNotebook:y,onChanged:b}){let x=t.project.id,[S,w]=(0,g.useState)(null),[A,j]=(0,g.useState)(``),[M,N]=(0,g.useState)(!1),[P,F]=(0,g.useState)(``),I=()=>e.call(`skills.read`,{projectId:x,name:n,limit:v.changes}).then(e=>{w(e),j(``)},e=>j(s(e)));(0,g.useEffect)(()=>{I()},[e,x,n,t.cursor]);let[L,...R]=S?.changes??[],z=!!L&&L.kind!==`outside`&&!L.undoneBy&&!S?.outside;async function B(t){N(!0),F(``);try{await e.call(`skills.undo`,{projectId:x,name:n,change:t.id,changeId:`undo-`+t.id+`-`+Date.now().toString(36)}),b(),await I()}catch(e){F(s(e))}finally{N(!1)}}let V=e=>{let t=u(e.by),n=l(e,t.name);return t.conversationId?(0,_.jsx)(`button`,{className:`text-button skills-who`,onClick:()=>h(t.conversationId),title:`Open the conversation`,children:n}):n},H=new Set((t.conversations??[]).map(e=>e.conversationId)),U=e=>(0,_.jsx)(k,{evidence:e,known:H.has(e.ref),onPath:p,onConversation:h,onNotebook:y},e.kind+e.ref);return(0,_.jsxs)(`article`,{className:`skills-detail`,"aria-labelledby":`skill-title`,children:[(0,_.jsxs)(`button`,{className:`text-button skills-back`,onClick:d,children:[(0,_.jsx)(i,{name:`back`,size:14}),`All skills`]}),(0,_.jsxs)(`header`,{className:`skills-detail-head`,children:[(0,_.jsxs)(`div`,{children:[(0,_.jsx)(`h2`,{id:`skill-title`,children:c(n)}),(S?.skill?.description??o.description)&&(0,_.jsx)(`p`,{children:S?.skill?.description??o.description})]}),S?.skill&&(0,_.jsxs)(`button`,{onClick:()=>p(m(n)),title:m(n),children:[(0,_.jsx)(i,{name:`document`,size:15}),`Edit the file`]})]}),A&&(0,_.jsxs)(`div`,{className:`inline-error`,role:`alert`,children:[(0,_.jsx)(`p`,{children:A}),(0,_.jsx)(`button`,{onClick:()=>void I(),children:`Try again`})]}),!S&&!A&&(0,_.jsxs)(`p`,{className:`quiet-empty`,role:`status`,children:[`Reading `,c(n),`…`]}),o.problem&&(0,_.jsx)(`p`,{className:`skills-note`,role:`status`,children:o.problem}),S?.outside&&(S.outside.since===null&&!L?(0,_.jsx)(`p`,{className:`skills-note`,role:`status`,children:`Written outside Rho. Agents read it as it is; Rho records its changes from the first one made here.`}):(0,_.jsxs)(`section`,{className:`skills-change outside`,"aria-label":`Changed outside Rho`,children:[(0,_.jsx)(`p`,{className:`skills-change-reason`,children:`Changed outside Rho since the last recorded change`}),(0,_.jsxs)(`p`,{className:`skills-change-meta`,children:[(0,_.jsx)(E,{added:S.outside.added,removed:S.outside.removed}),` · Agents read it as it is now; the next change recorded here starts from it`]}),(0,_.jsx)(O,{diff:S.outside.diff})]})),L&&(0,_.jsxs)(`section`,{className:`skills-change newest`+(L.undoneBy?` undone`:``),"aria-label":`Newest change`,children:[(0,_.jsx)(`p`,{className:`skills-change-reason`,children:f(L)}),(0,_.jsxs)(`p`,{className:`skills-change-meta`,children:[V(L),` · `,r(L.at).text,` · `,(0,_.jsx)(E,{added:L.added,removed:L.removed})]}),L.evidence.length>0&&(0,_.jsx)(`div`,{className:`skills-evidence`,children:L.evidence.map(U)}),(0,_.jsx)(D,{change:L}),(z||P)&&(0,_.jsxs)(`div`,{className:`skills-change-actions`,children:[z&&(0,_.jsx)(`button`,{onClick:()=>void B(L),disabled:M,children:M?`Undoing…`:L.kind===`removed`?`Bring it back`:L.kind===`undone`?`Put the change back`:`Undo this change`}),P&&(0,_.jsx)(`p`,{role:`alert`,children:P})]})]}),S?.skill?(0,_.jsxs)(`section`,{className:`skills-text`,"aria-labelledby":`skills-text-title`,children:[(0,_.jsx)(`h3`,{id:`skills-text-title`,children:`What Agents read`}),(0,_.jsx)(a,{text:T(S.skill.body,n),streaming:!1})]}):S&&(0,_.jsx)(`p`,{className:`skills-note`,children:`This skill was removed. Its changes are kept below.`}),R.length>0&&(0,_.jsxs)(`section`,{className:`skills-history`,"aria-labelledby":`skills-history-title`,children:[(0,_.jsx)(`h3`,{id:`skills-history-title`,children:`Earlier changes`}),(0,_.jsx)(`ol`,{children:R.map(e=>(0,_.jsx)(`li`,{className:e.undoneBy?`undone`:void 0,children:(0,_.jsxs)(`details`,{children:[(0,_.jsxs)(`summary`,{children:[(0,_.jsx)(C,{}),(0,_.jsx)(`span`,{className:`skills-history-reason`,children:f(e)}),(0,_.jsxs)(`small`,{children:[l(e,u(e.by).name),` · `,r(e.at).text,e.undoneBy?` · undone`:``]}),(0,_.jsx)(E,{added:e.added,removed:e.removed})]}),e.evidence.length>0&&(0,_.jsx)(`div`,{className:`skills-evidence`,children:e.evidence.map(U)}),(0,_.jsx)(D,{change:e})]})},e.id))}),(S?.omitted??0)>0&&(0,_.jsxs)(`p`,{className:`quiet-empty`,children:[S.omitted,` older `,S.omitted===1?`change`:`changes`,` kept`]})]})]})}var C=()=>(0,_.jsx)(`span`,{className:`skills-twisty`,"aria-hidden":`true`,children:(0,_.jsx)(i,{name:`chevron`,size:11,stroke:2})}),w=e=>e.toLowerCase().replace(/[^a-z0-9]+/g,` `).trim(),T=(e,t)=>e.replace(/^\s*# (.+)\n+/,(e,n)=>w(n)===w(t)?``:e),E=({added:e,removed:t})=>(0,_.jsxs)(`span`,{className:`skills-counts`,"aria-label":`${e} lines added, ${t} removed`,children:[(0,_.jsxs)(`span`,{className:`added`,children:[`+`,e]}),` `,(0,_.jsxs)(`span`,{className:`removed`,children:[`−`,t]})]});function D({change:e}){return e.before!==null&&e.after!==null?(0,_.jsx)(O,{diff:e.diff}):(0,_.jsxs)(`details`,{className:`skills-removed-text`,children:[(0,_.jsxs)(`summary`,{children:[(0,_.jsx)(C,{}),e.after===null?`The text it removed`:`The text it wrote`]}),(0,_.jsx)(O,{diff:e.diff})]})}function O({diff:e}){return e.lines.length?(0,_.jsxs)(`div`,{className:`skills-diff`,role:`group`,"aria-label":`What changed`,children:[e.lines.map((e,t)=>e.op===`…`?(0,_.jsxs)(`div`,{className:`fold`,children:[e.text,` unchanged `,e.text===`1`?`line`:`lines`]},t):(0,_.jsxs)(`div`,{className:e.op===`+`?`add`:e.op===`-`?`del`:`keep`,children:[(0,_.jsx)(`span`,{"aria-hidden":`true`,children:e.op}),e.text||` `]},t)),e.cut&&(0,_.jsx)(`div`,{className:`fold`,children:`The rest is not shown`})]}):null}function k({evidence:e,known:t,onPath:n,onConversation:r,onNotebook:a}){let s=e.label||e.ref;return e.kind===`cell`?(0,_.jsxs)(`button`,{className:`skills-chip`,onClick:()=>{o(e.ref),a()},title:`Open the cell in the Notebook`,children:[(0,_.jsx)(i,{name:`code`,size:13}),s]}):e.kind===`file`?(0,_.jsxs)(`button`,{className:`skills-chip`,onClick:()=>n(e.ref),title:e.ref,children:[(0,_.jsx)(i,{name:`file`,size:13}),s]}):e.kind===`conversation`&&t?(0,_.jsxs)(`button`,{className:`skills-chip`,onClick:()=>r(e.ref),children:[(0,_.jsx)(i,{name:`prompt`,size:13}),e.label||`The conversation`]}):(0,_.jsx)(`span`,{className:`skills-chip quiet`,title:e.kind===`note`?void 0:e.ref,children:e.kind===`note`?`“`+s.trim().replace(/^["“'‘]+|["”'’]+$/g,``)+`”`:s})}function A({client:e,snapshot:t}){let n=t.project.id,r=t.catalog.operations.some(e=>e.method===`kernel.servers`&&e.state===`available`&&e.authorized),[o,c]=(0,g.useState)(null),[l,u]=(0,g.useState)({});(0,g.useEffect)(()=>{if(!r)return;let t=!0;return e.call(`kernel.places`,{projectId:n}).then(async r=>{if(!r.places.some(e=>e.via===`serverctl`)){t&&c({places:r,servers:null});return}let i=await e.call(`kernel.servers`,{projectId:n});t&&c({places:r,servers:i})},()=>{}),()=>{t=!1}},[e,n,r]);let d=(o?.places.places??[]).filter(e=>e.via===`serverctl`).flatMap(e=>(o.servers?.servers.find(t=>t.server===e.destination)?.skills??[]).map(t=>({place:e,skill:t}))),f=d.filter((e,t)=>d.findIndex(t=>t.place.destination===e.place.destination&&t.skill.name===e.skill.name)===t);if(!f.length)return null;let p=(t,r)=>{let i=t+`/`+r;l[i]===void 0&&(u(e=>({...e,[i]:``})),e.call(`kernel.server.skill`,{projectId:n,server:t,name:r}).then(e=>u(t=>({...t,[i]:e.text??``})),e=>u(t=>({...t,[i]:s(e)}))))};return(0,_.jsxs)(`section`,{className:`skills-servers`,"aria-labelledby":`skills-servers-title`,children:[(0,_.jsx)(`h2`,{id:`skills-servers-title`,children:`From your servers`}),(0,_.jsx)(`ul`,{children:f.map(({place:e,skill:t})=>{let n=e.destination+`/`+t.name;return(0,_.jsx)(`li`,{children:(0,_.jsxs)(`details`,{onToggle:n=>{n.currentTarget.open&&p(e.destination,t.name)},children:[(0,_.jsxs)(`summary`,{children:[(0,_.jsx)(i,{name:`server`,size:14}),(0,_.jsxs)(`span`,{children:[(0,_.jsx)(`strong`,{children:t.name}),(0,_.jsxs)(`small`,{children:[e.destination,` · through serverctl`]})]})]}),t.description&&(0,_.jsx)(`p`,{className:`skills-servers-desc`,children:t.description}),l[n]===``?(0,_.jsx)(`p`,{className:`quiet-empty`,role:`status`,children:`Reading…`}):l[n]?(0,_.jsx)(`div`,{className:`skills-servers-text`,children:(0,_.jsx)(a,{text:l[n].replace(/^---[\s\S]*?\n---\n/,``),streaming:!1})}):null]})},n)})})]})}export{b as SkillsPage};
1
+ import{r as e}from"./rolldown-runtime-XKyaHtl9.js";import{n as t,t as n}from"./react-Dss-ouuy.js";import{s as r}from"./home-CCbP6kS-.js";import{r as i,t as a}from"./markdown-0ngRuTpW.js";import{at as o}from"./index-BHQIaDsx.js";import{a as s,c,i as l,l as u,n as d,o as f,r as p,s as m,u as h}from"./skills-work-Cj0W6b-I.js";var g=e(n(),1),_=t(),v={changes:20},y={recorded:`changed`,removed:`removed`,undone:`undid a change to`,outside:`changed`};function b({client:e,snapshot:t,onPath:n,onConversation:i,onNotebook:a}){let o=t.project.id,{list:s,problem:l,again:f}=h(e,o,t.cursor),m=u(t),[v,b]=(0,g.useState)(p),[w,T]=(0,g.useState)(v!==null);(0,g.useEffect)(d,[]);let E=s?.skills??[],D=s?.removed??[],O=[...E,...D].filter(e=>e.last).sort((e,t)=>t.last.at.localeCompare(e.last.at))[0]??E[0]??null,k=v&&[...E,...D].some(e=>e.name===v)?v:O?.name??null,j=e=>{b(e),T(!0)},M=O?.last;return(0,_.jsxs)(`section`,{className:`project-page skills-page`,"aria-labelledby":`skills-title`,children:[(0,_.jsx)(`header`,{className:`page-heading`,children:(0,_.jsxs)(`div`,{children:[(0,_.jsx)(`h1`,{id:`skills-title`,children:`Skills`}),s&&E.length===0&&(0,_.jsx)(`p`,{children:`How work is done in this project, read by every Agent here`}),s&&E.length>0&&(0,_.jsxs)(`p`,{children:[E.length,` `,E.length===1?`skill`:`skills`,` every Agent here reads`,M?` · ${M.kind===`outside`?c(O.name)+` was changed outside Rho`:m(M.by).name+` `+y[M.kind]+` `+c(O.name)} ${r(M.at).text.toLowerCase()}`:``]})]})}),l&&(0,_.jsxs)(`div`,{className:`inline-error`,role:`alert`,children:[(0,_.jsxs)(`p`,{children:[`The skills could not be read. `,l]}),(0,_.jsx)(`button`,{onClick:()=>void f(),children:`Try again`})]}),!s&&!l?(0,_.jsx)(`p`,{className:`quiet-empty`,role:`status`,children:`Reading the skills…`}):s&&(0,_.jsxs)(`div`,{className:`skills-layout`+(w&&k?` showing`:``)+(k?``:` none-yet`),children:[(0,_.jsxs)(`nav`,{className:`skills-index`,"aria-label":`Skills`,children:[E.length>0?(0,_.jsx)(`ul`,{className:`skills-list`,children:E.map(e=>(0,_.jsx)(`li`,{children:(0,_.jsx)(x,{skill:e,current:e.name===k,author:m,onChoose:()=>j(e.name)})},e.name))}):(0,_.jsxs)(`div`,{className:`skills-empty`,children:[(0,_.jsx)(`h2`,{children:`No project skills yet`}),(0,_.jsx)(`p`,{children:`When you correct how your Agent works, or it finds why something failed, it records that here, and the next conversation starts from it. You can also tell it directly:`}),(0,_.jsx)(`ul`,{children:[`For this project we report proportions as percentages.`,`Remember how we filter the cells, so the next analysis does the same.`].map(e=>(0,_.jsxs)(`li`,{children:[`“`,e,`”`]},e))}),(0,_.jsx)(`small`,{children:`Skills are kept as SKILL.md files in .claude/skills in the project folder. Claude Code reads them by itself; other Agents read them through Rho.`})]}),D.length>0&&(0,_.jsxs)(`details`,{className:`skills-removed`,open:D.some(e=>e.name===k),children:[(0,_.jsxs)(`summary`,{children:[(0,_.jsx)(C,{}),`Removed `,(0,_.jsx)(`span`,{className:`section-count`,children:D.length})]}),(0,_.jsx)(`ul`,{className:`skills-list`,children:D.map(e=>(0,_.jsx)(`li`,{children:(0,_.jsx)(x,{skill:e,current:e.name===k,author:m,onChoose:()=>j(e.name)})},e.name))})]}),(0,_.jsx)(A,{client:e,snapshot:t})]}),k&&(0,_.jsx)(S,{client:e,snapshot:t,name:k,summary:[...E,...D].find(e=>e.name===k),author:m,onBack:()=>T(!1),onPath:n,onConversation:i,onNotebook:a,onChanged:()=>void f()},k)]})]})}function x({skill:e,current:t,author:n,onChoose:i}){let a=e.last;return(0,_.jsxs)(`button`,{className:`skills-row`,"aria-current":t?`true`:void 0,onClick:i,title:m(e.name),children:[(0,_.jsx)(`strong`,{children:c(e.name)}),e.description&&(0,_.jsx)(`span`,{className:`skills-row-desc`,children:e.description}),(0,_.jsx)(`small`,{children:e.problem?(0,_.jsx)(`span`,{className:`skills-row-problem`,children:e.problem}):a?e.outside?`Changed outside Rho`:`${a.kind===`outside`?`Changed outside Rho`:l(a,n(a.by).name)} · ${r(a.at).text}`:`Written outside Rho`})]})}function S({client:e,snapshot:t,name:n,summary:o,author:u,onBack:d,onPath:p,onConversation:h,onNotebook:y,onChanged:b}){let x=t.project.id,[S,w]=(0,g.useState)(null),[A,j]=(0,g.useState)(``),[M,N]=(0,g.useState)(!1),[P,F]=(0,g.useState)(``),I=()=>e.call(`skills.read`,{projectId:x,name:n,limit:v.changes}).then(e=>{w(e),j(``)},e=>j(s(e)));(0,g.useEffect)(()=>{I()},[e,x,n,t.cursor]);let[L,...R]=S?.changes??[],z=!!L&&L.kind!==`outside`&&!L.undoneBy&&!S?.outside;async function B(t){N(!0),F(``);try{await e.call(`skills.undo`,{projectId:x,name:n,change:t.id,changeId:`undo-`+t.id+`-`+Date.now().toString(36)}),b(),await I()}catch(e){F(s(e))}finally{N(!1)}}let V=e=>{let t=u(e.by),n=l(e,t.name);return t.conversationId?(0,_.jsx)(`button`,{className:`text-button skills-who`,onClick:()=>h(t.conversationId),title:`Open the conversation`,children:n}):n},H=new Set((t.conversations??[]).map(e=>e.conversationId)),U=e=>(0,_.jsx)(k,{evidence:e,known:H.has(e.ref),onPath:p,onConversation:h,onNotebook:y},e.kind+e.ref);return(0,_.jsxs)(`article`,{className:`skills-detail`,"aria-labelledby":`skill-title`,children:[(0,_.jsxs)(`button`,{className:`text-button skills-back`,onClick:d,children:[(0,_.jsx)(i,{name:`back`,size:14}),`All skills`]}),(0,_.jsxs)(`header`,{className:`skills-detail-head`,children:[(0,_.jsxs)(`div`,{children:[(0,_.jsx)(`h2`,{id:`skill-title`,children:c(n)}),(S?.skill?.description??o.description)&&(0,_.jsx)(`p`,{children:S?.skill?.description??o.description})]}),S?.skill&&(0,_.jsxs)(`button`,{onClick:()=>p(m(n)),title:m(n),children:[(0,_.jsx)(i,{name:`document`,size:15}),`Edit the file`]})]}),A&&(0,_.jsxs)(`div`,{className:`inline-error`,role:`alert`,children:[(0,_.jsx)(`p`,{children:A}),(0,_.jsx)(`button`,{onClick:()=>void I(),children:`Try again`})]}),!S&&!A&&(0,_.jsxs)(`p`,{className:`quiet-empty`,role:`status`,children:[`Reading `,c(n),`…`]}),o.problem&&(0,_.jsx)(`p`,{className:`skills-note`,role:`status`,children:o.problem}),S?.outside&&(S.outside.since===null&&!L?(0,_.jsx)(`p`,{className:`skills-note`,role:`status`,children:`Written outside Rho. Agents read it as it is; Rho records its changes from the first one made here.`}):(0,_.jsxs)(`section`,{className:`skills-change outside`,"aria-label":`Changed outside Rho`,children:[(0,_.jsx)(`p`,{className:`skills-change-reason`,children:`Changed outside Rho since the last recorded change`}),(0,_.jsxs)(`p`,{className:`skills-change-meta`,children:[(0,_.jsx)(E,{added:S.outside.added,removed:S.outside.removed}),` · Agents read it as it is now; the next change recorded here starts from it`]}),(0,_.jsx)(O,{diff:S.outside.diff})]})),L&&(0,_.jsxs)(`section`,{className:`skills-change newest`+(L.undoneBy?` undone`:``),"aria-label":`Newest change`,children:[(0,_.jsx)(`p`,{className:`skills-change-reason`,children:f(L)}),(0,_.jsxs)(`p`,{className:`skills-change-meta`,children:[V(L),` · `,r(L.at).text,` · `,(0,_.jsx)(E,{added:L.added,removed:L.removed})]}),L.evidence.length>0&&(0,_.jsx)(`div`,{className:`skills-evidence`,children:L.evidence.map(U)}),(0,_.jsx)(D,{change:L}),(z||P)&&(0,_.jsxs)(`div`,{className:`skills-change-actions`,children:[z&&(0,_.jsx)(`button`,{onClick:()=>void B(L),disabled:M,children:M?`Undoing…`:L.kind===`removed`?`Bring it back`:L.kind===`undone`?`Put the change back`:`Undo this change`}),P&&(0,_.jsx)(`p`,{role:`alert`,children:P})]})]}),S?.skill?(0,_.jsxs)(`section`,{className:`skills-text`,"aria-labelledby":`skills-text-title`,children:[(0,_.jsx)(`h3`,{id:`skills-text-title`,children:`What Agents read`}),(0,_.jsx)(a,{text:T(S.skill.body,n),streaming:!1})]}):S&&(0,_.jsx)(`p`,{className:`skills-note`,children:`This skill was removed. Its changes are kept below.`}),R.length>0&&(0,_.jsxs)(`section`,{className:`skills-history`,"aria-labelledby":`skills-history-title`,children:[(0,_.jsx)(`h3`,{id:`skills-history-title`,children:`Earlier changes`}),(0,_.jsx)(`ol`,{children:R.map(e=>(0,_.jsx)(`li`,{className:e.undoneBy?`undone`:void 0,children:(0,_.jsxs)(`details`,{children:[(0,_.jsxs)(`summary`,{children:[(0,_.jsx)(C,{}),(0,_.jsx)(`span`,{className:`skills-history-reason`,children:f(e)}),(0,_.jsxs)(`small`,{children:[l(e,u(e.by).name),` · `,r(e.at).text,e.undoneBy?` · undone`:``]}),(0,_.jsx)(E,{added:e.added,removed:e.removed})]}),e.evidence.length>0&&(0,_.jsx)(`div`,{className:`skills-evidence`,children:e.evidence.map(U)}),(0,_.jsx)(D,{change:e})]})},e.id))}),(S?.omitted??0)>0&&(0,_.jsxs)(`p`,{className:`quiet-empty`,children:[S.omitted,` older `,S.omitted===1?`change`:`changes`,` kept`]})]})]})}var C=()=>(0,_.jsx)(`span`,{className:`skills-twisty`,"aria-hidden":`true`,children:(0,_.jsx)(i,{name:`chevron`,size:11,stroke:2})}),w=e=>e.toLowerCase().replace(/[^a-z0-9]+/g,` `).trim(),T=(e,t)=>e.replace(/^\s*# (.+)\n+/,(e,n)=>w(n)===w(t)?``:e),E=({added:e,removed:t})=>(0,_.jsxs)(`span`,{className:`skills-counts`,"aria-label":`${e} lines added, ${t} removed`,children:[(0,_.jsxs)(`span`,{className:`added`,children:[`+`,e]}),` `,(0,_.jsxs)(`span`,{className:`removed`,children:[`−`,t]})]});function D({change:e}){return e.before!==null&&e.after!==null?(0,_.jsx)(O,{diff:e.diff}):(0,_.jsxs)(`details`,{className:`skills-removed-text`,children:[(0,_.jsxs)(`summary`,{children:[(0,_.jsx)(C,{}),e.after===null?`The text it removed`:`The text it wrote`]}),(0,_.jsx)(O,{diff:e.diff})]})}function O({diff:e}){return e.lines.length?(0,_.jsxs)(`div`,{className:`skills-diff`,role:`group`,"aria-label":`What changed`,children:[e.lines.map((e,t)=>e.op===`…`?(0,_.jsxs)(`div`,{className:`fold`,children:[e.text,` unchanged `,e.text===`1`?`line`:`lines`]},t):(0,_.jsxs)(`div`,{className:e.op===`+`?`add`:e.op===`-`?`del`:`keep`,children:[(0,_.jsx)(`span`,{"aria-hidden":`true`,children:e.op}),e.text||` `]},t)),e.cut&&(0,_.jsx)(`div`,{className:`fold`,children:`The rest is not shown`})]}):null}function k({evidence:e,known:t,onPath:n,onConversation:r,onNotebook:a}){let s=e.label||e.ref;return e.kind===`cell`?(0,_.jsxs)(`button`,{className:`skills-chip`,onClick:()=>{o(e.ref),a()},title:`Open the cell in the Notebook`,children:[(0,_.jsx)(i,{name:`code`,size:13}),s]}):e.kind===`file`?(0,_.jsxs)(`button`,{className:`skills-chip`,onClick:()=>n(e.ref),title:e.ref,children:[(0,_.jsx)(i,{name:`file`,size:13}),s]}):e.kind===`conversation`&&t?(0,_.jsxs)(`button`,{className:`skills-chip`,onClick:()=>r(e.ref),children:[(0,_.jsx)(i,{name:`prompt`,size:13}),e.label||`The conversation`]}):(0,_.jsx)(`span`,{className:`skills-chip quiet`,title:e.kind===`note`?void 0:e.ref,children:e.kind===`note`?`“`+s.trim().replace(/^["“'‘]+|["”'’]+$/g,``)+`”`:s})}function A({client:e,snapshot:t}){let n=t.project.id,r=t.catalog.operations.some(e=>e.method===`kernel.servers`&&e.state===`available`&&e.authorized),[o,c]=(0,g.useState)(null),[l,u]=(0,g.useState)({});(0,g.useEffect)(()=>{if(!r)return;let t=!0;return e.call(`kernel.places`,{projectId:n}).then(async r=>{if(!r.places.some(e=>e.via===`serverctl`)){t&&c({places:r,servers:null});return}let i=await e.call(`kernel.servers`,{projectId:n});t&&c({places:r,servers:i})},()=>{}),()=>{t=!1}},[e,n,r]);let d=(o?.places.places??[]).filter(e=>e.via===`serverctl`).flatMap(e=>(o.servers?.servers.find(t=>t.server===e.destination)?.skills??[]).map(t=>({place:e,skill:t}))),f=d.filter((e,t)=>d.findIndex(t=>t.place.destination===e.place.destination&&t.skill.name===e.skill.name)===t);if(!f.length)return null;let p=(t,r)=>{let i=t+`/`+r;l[i]===void 0&&(u(e=>({...e,[i]:``})),e.call(`kernel.server.skill`,{projectId:n,server:t,name:r}).then(e=>u(t=>({...t,[i]:e.text??``})),e=>u(t=>({...t,[i]:s(e)}))))};return(0,_.jsxs)(`section`,{className:`skills-servers`,"aria-labelledby":`skills-servers-title`,children:[(0,_.jsx)(`h2`,{id:`skills-servers-title`,children:`From your servers`}),(0,_.jsx)(`ul`,{children:f.map(({place:e,skill:t})=>{let n=e.destination+`/`+t.name;return(0,_.jsx)(`li`,{children:(0,_.jsxs)(`details`,{onToggle:n=>{n.currentTarget.open&&p(e.destination,t.name)},children:[(0,_.jsxs)(`summary`,{children:[(0,_.jsx)(i,{name:`server`,size:14}),(0,_.jsxs)(`span`,{children:[(0,_.jsx)(`strong`,{children:t.name}),(0,_.jsxs)(`small`,{children:[e.destination,` · through serverctl`]})]})]}),t.description&&(0,_.jsx)(`p`,{className:`skills-servers-desc`,children:t.description}),l[n]===``?(0,_.jsx)(`p`,{className:`quiet-empty`,role:`status`,children:`Reading…`}):l[n]?(0,_.jsx)(`div`,{className:`skills-servers-text`,children:(0,_.jsx)(a,{text:l[n].replace(/^---[\s\S]*?\n---\n/,``),streaming:!1})}):null]})},n)})})]})}export{b as SkillsPage};
@@ -1 +1 @@
1
- import{r as e}from"./rolldown-runtime-XKyaHtl9.js";import{n as t,t as n}from"./react-Dss-ouuy.js";import{s as r}from"./home-CCbP6kS-.js";import{r as i}from"./markdown-0ngRuTpW.js";import{Mt as a}from"./index-BYuKpyoi.js";var o=e(n(),1),s=t(),c={changes:3},l=`browser:local`,u=e=>e instanceof Error?e.message:`It could not be read.`,d=e=>{let t=e.replace(/-/g,` `);return t.charAt(0).toUpperCase()+t.slice(1)},f=e=>`.claude/skills/${e}/SKILL.md`;function p(e){return(0,o.useMemo)(()=>{let t=new Map((e.conversations??[]).filter(e=>e.principal).map(e=>[e.principal,{name:a(e.client),conversationId:e.conversationId}]));return e=>e===l?{name:`You`}:e===`outside`?{name:`Outside Rho`}:t.get(e)??{name:`An Agent`}},[e.conversations])}var m=e=>e.kind===`undone`?`Undid: `+e.reason:e.reason,h=(e,t)=>e.kind===`removed`?`${t} removed the skill`:e.kind===`undone`?`${t} undid a change`:e.kind===`outside`?`Noticed by Rho`:t;function g(e,t,n,r=!0){let[i,a]=(0,o.useState)({list:null,problem:``}),s=()=>e.call(`skills.list`,{projectId:t}).then(e=>a({list:e,problem:``}),e=>a(t=>({...t,problem:u(e)})));return(0,o.useEffect)(()=>{r&&s()},[e,t,n,r]),{...i,again:s}}var _=null,v=e=>{_=e},y=()=>_,b=()=>{_=null};function x({list:e,problem:t,snapshot:n,onOpen:a}){let o=p(n),l=[...e?.skills??[],...e?.removed??[]].filter(e=>e.last).sort((e,t)=>t.last.at.localeCompare(e.last.at));if(!l.length&&!t)return null;let u=e?.skills.length??0;return(0,s.jsxs)(`section`,{className:`project-section skills-work`,"aria-labelledby":`skills-work-title`,children:[(0,s.jsxs)(`div`,{className:`section-heading`,children:[(0,s.jsxs)(`h2`,{id:`skills-work-title`,children:[`Skills`,u>0&&(0,s.jsx)(`span`,{className:`section-count`,children:u})]}),(0,s.jsx)(`button`,{className:`text-button`,onClick:a,children:`View all`})]}),t&&(0,s.jsxs)(`p`,{role:`alert`,children:[`The skills could not be read. `,t]}),(0,s.jsx)(`div`,{className:`activity-list`,children:l.slice(0,c.changes).map(e=>{let t=e.last;return(0,s.jsxs)(`button`,{className:`activity-row`,onClick:()=>{v(e.name),a()},children:[(0,s.jsx)(`span`,{className:`activity-symbol`,children:(0,s.jsx)(i,{name:`book`,size:16})}),(0,s.jsxs)(`span`,{className:`activity-name`,children:[(0,s.jsx)(`strong`,{children:t.kind===`outside`?`Changed outside Rho`:m(t)}),(0,s.jsxs)(`small`,{children:[d(e.name),` · `,t.kind===`outside`?``:h(t,o(t.by).name)+` · `,r(t.at).text]})]}),(0,s.jsx)(i,{name:`chevron`,size:13})]},e.name)})})]})}export{u as a,d as c,h as i,p as l,b as n,m as o,y as r,f as s,x as t,g as u};
1
+ import{r as e}from"./rolldown-runtime-XKyaHtl9.js";import{n as t,t as n}from"./react-Dss-ouuy.js";import{s as r}from"./home-CCbP6kS-.js";import{r as i}from"./markdown-0ngRuTpW.js";import{Mt as a}from"./index-BHQIaDsx.js";var o=e(n(),1),s=t(),c={changes:3},l=`browser:local`,u=e=>e instanceof Error?e.message:`It could not be read.`,d=e=>{let t=e.replace(/-/g,` `);return t.charAt(0).toUpperCase()+t.slice(1)},f=e=>`.claude/skills/${e}/SKILL.md`;function p(e){return(0,o.useMemo)(()=>{let t=new Map((e.conversations??[]).filter(e=>e.principal).map(e=>[e.principal,{name:a(e.client),conversationId:e.conversationId}]));return e=>e===l?{name:`You`}:e===`outside`?{name:`Outside Rho`}:t.get(e)??{name:`An Agent`}},[e.conversations])}var m=e=>e.kind===`undone`?`Undid: `+e.reason:e.reason,h=(e,t)=>e.kind===`removed`?`${t} removed the skill`:e.kind===`undone`?`${t} undid a change`:e.kind===`outside`?`Noticed by Rho`:t;function g(e,t,n,r=!0){let[i,a]=(0,o.useState)({list:null,problem:``}),s=()=>e.call(`skills.list`,{projectId:t}).then(e=>a({list:e,problem:``}),e=>a(t=>({...t,problem:u(e)})));return(0,o.useEffect)(()=>{r&&s()},[e,t,n,r]),{...i,again:s}}var _=null,v=e=>{_=e},y=()=>_,b=()=>{_=null};function x({list:e,problem:t,snapshot:n,onOpen:a}){let o=p(n),l=[...e?.skills??[],...e?.removed??[]].filter(e=>e.last).sort((e,t)=>t.last.at.localeCompare(e.last.at));if(!l.length&&!t)return null;let u=e?.skills.length??0;return(0,s.jsxs)(`section`,{className:`project-section skills-work`,"aria-labelledby":`skills-work-title`,children:[(0,s.jsxs)(`div`,{className:`section-heading`,children:[(0,s.jsxs)(`h2`,{id:`skills-work-title`,children:[`Skills`,u>0&&(0,s.jsx)(`span`,{className:`section-count`,children:u})]}),(0,s.jsx)(`button`,{className:`text-button`,onClick:a,children:`View all`})]}),t&&(0,s.jsxs)(`p`,{role:`alert`,children:[`The skills could not be read. `,t]}),(0,s.jsx)(`div`,{className:`activity-list`,children:l.slice(0,c.changes).map(e=>{let t=e.last;return(0,s.jsxs)(`button`,{className:`activity-row`,onClick:()=>{v(e.name),a()},children:[(0,s.jsx)(`span`,{className:`activity-symbol`,children:(0,s.jsx)(i,{name:`book`,size:16})}),(0,s.jsxs)(`span`,{className:`activity-name`,children:[(0,s.jsx)(`strong`,{children:t.kind===`outside`?`Changed outside Rho`:m(t)}),(0,s.jsxs)(`small`,{children:[d(e.name),` · `,t.kind===`outside`?``:h(t,o(t.by).name)+` · `,r(t.at).text]})]}),(0,s.jsx)(i,{name:`chevron`,size:13})]},e.name)})})]})}export{u as a,d as c,h as i,p as l,b as n,m as o,y as r,f as s,x as t,g as u};
@@ -1,2 +1,2 @@
1
- import{r as e}from"./rolldown-runtime-XKyaHtl9.js";import{n as t,t as n}from"./react-Dss-ouuy.js";import{r}from"./markdown-0ngRuTpW.js";import{M as i,N as a,f as o,o as s}from"./canvas-BXhC8RDZ.js";import{Ct as c,Jt as l,Kt as u,Mt as d,Nt as f,Rt as p,St as m,ft as h,gt as g,ht as _,mt as v,pt as ee,vt as y}from"./index-BYuKpyoi.js";import{i as b,r as x}from"./console-e1P5qYQ5.js";import{n as te,r as ne,t as re}from"./timeline-events-CDZ7wiJX.js";import{n as S,r as ie}from"./notes-meaning-B3HFbh84.js";import{t as C}from"./answer-board-CBkGbSLD.js";import{Workspace as w}from"./workspace-d5Hw_ClZ.js";var T=e(n(),1),ae=e(l(),1),E={titleChars:90,files:6},D=e=>/^\s*(API Error|Error:|Request failed|Overloaded)/i.test(e),O=e=>e?Date.parse(e):NaN,k=e=>{let t=e.replace(/\s+/g,` `).trim(),n=(/^(.+?[.!?。!?])(\s|$)/.exec(t)?.[1]??t).replace(/[::]$/,``);return n.length>E.titleChars?n.slice(0,E.titleChars-1).trimEnd()+`…`:n},A=e=>{let t=[...new Set(e.map(e=>e.split(`/`).at(-1)))];return t.length>2?t.slice(0,2).join(`, `)+` and `+(t.length-2)+` more`:t.join(` and `)};function j(e){let t=[],n=null,r=!1;for(let i of e)i.kind===`edit`&&(!n||r)&&(n={start:i.at,end:i.at,edits:0,runs:0,looks:0},t.push(n),r=!1),n&&(n.end=i.at,i.kind===`edit`?n.edits++:i.kind===`run`?(n.runs++,r=!0):i.kind===`look`&&n.looks++);return t.length>1?t:[]}function M(e,t,n,r,i={}){let a=n.filter(e=>e.kind===`run`).length,o=n.filter(e=>e.kind===`edit`).length,s=n.filter(e=>e.kind===`look`),c=n.filter(e=>e.kind===`refused`).length,l=o?`build`:a?`explore`:s.length?`look`:`work`,u=r?k(r):l===`look`?s.some(e=>e.path)?`Read `+A(s.flatMap(e=>e.path?[e.path]:[])):`Looked at the project`:l===`explore`?`Explored with `+a+(a===1?` command`:` commands`):l===`build`?`Edited `+A(n.filter(e=>e.kind===`edit`).flatMap(e=>e.path?[e.path]:[])):`Worked`;return{id:e+`:`+t,turn:e,start:n[0]?.at??NaN,end:n.at(-1)?.at??NaN,title:u,said:!!r,kind:l,steps:n.length,runs:a,edits:o,rounds:j(n),files:[...new Set(n.flatMap(e=>e.path?[e.path]:[]))].slice(0,E.files),notes:c?[c+` refused`]:[],running:!1,...i}}function N(e,t,n){let r=[],i=e.steps.reduce((e,t,n)=>t.kind===`tool`?n:e,-1),a={said:null,at:O(e.startedAt??e.sentAt),steps:[],notices:0},o=()=>{if(!a.steps.length&&!a.said)return;let e=a.steps;if(!a.said){let n=e.findIndex((t,n)=>t.kind===`run`&&e[n+1]?.kind===`run`),i=n>0?e.slice(0,n):[];i.some(e=>e.kind===`look`)&&!i.some(e=>e.kind===`edit`)&&(r.push(M(t,r.length,i,null,{kind:`look`,title:`Read `+A(i.filter(e=>e.kind===`look`).flatMap(e=>e.path?[e.path]:[]))})),a.steps=e.slice(n))}if(a.steps.length||a.said){let e=M(t,r.length,a.steps,a.said,a.said?{start:a.at}:{});a.notices&&e.notes.push(a.notices+(a.notices===1?` provider error`:` provider errors`)),r.push(e)}};e.steps.forEach((e,t)=>{let r=O(e.at);if(e.kind===`text`){if(t>i)return;if(D(e.text??``)){a.notices++;return}o(),a={said:e.text??``,at:r,steps:[],notices:0};return}if(e.kind===`error`){a.notices++;return}let s=u(e,null,n),c=s.outcome===`rejected`?`refused`:s.action===`read`||s.action===`search`?`look`:s.action===`edit`||s.action===`write`?`edit`:s.action===`execute`?`run`:`other`,l=s.targetKind===`path`&&s.target?s.target:null;a.steps.push({at:O(e.startedAt??e.at),kind:c,path:l})}),o();let s=e.steps.slice(i+1).filter(e=>e.kind===`text`&&!D(e.text??``));return s.length&&e.state!==`running`&&r.push({...M(t,r.length,[],null),kind:`answer`,title:`Answered`,start:O(s[0].at),end:O(s.at(-1).at)}),e.state===`running`&&r.length&&(r.at(-1).running=!0),r}var P={input:3,code:3,result:6,report:2},F={root:`studio`,left:`studio-left`,input:`studio-input`,code:`studio-code`,commands:`studio-commands`,right:`studio-right`,figures:`studio-figures`,result:`studio-result`,console:`studio-console`,session:`studio-session`},I={supporting:64,method:64,run:64,input:64,report:64},L={code:0,result:1,report:2,input:3};function R(e,t){let n=new Map;for(let r of e.nodes){if(r.kind!==`file`||r.path!==t)continue;let e=r.versions?.length?r.versions:r.resource?[{resource:r.resource,capturedAt:r.capturedAt??r.at}]:[];for(let t of e){let e=t.resource.id+`@`+t.resource.version;n.has(e)||n.set(e,{resource:{id:t.resource.id,version:t.resource.version},at:t.capturedAt})}}return[...n.values()].sort((e,t)=>e.at-t.at)}function oe(e){let t=new Map,n=t=>Math.min(...e.nodes.filter(e=>e.path===t).flatMap(e=>[e.at,...e.events.map(e=>e.at)])),r=(r,i,a)=>{if(!r.path||r.path===`project-notes.md`)return;let o=t.get(r.path);o&&L[o.role]<L[i]||(o&&o.role===i?o.lead||=a:t.set(r.path,{path:r.path,title:r.title,role:i,category:r.category??null,lead:a,first:n(r.path),versions:R(e,r.path)}))};for(let t of[...e.turns].sort((e,t)=>e.start-t.start)){let n=C(e,t.id,I);for(let e of n?.items??[]){let t=e.role===`method`?`code`:e.role===`primary`||e.role===`supporting`?`result`:e.role===`report`?`report`:e.role===`input`?`input`:null;t&&r(e.node,t,e.role===`primary`)}}return[...t.values()].sort((e,t)=>L[e.role]-L[t.role]||Number(t.lead)-Number(e.lead)||e.first-t.first||e.path.localeCompare(t.path))}function se(e,t){return t===null?e:e.filter(e=>e.first<=t).map(e=>({...e,versions:e.versions.filter(e=>e.at<=t)}))}var z=(e,t)=>({id:e,kind:`group`,children:t}),B=(e,t,n)=>({id:e,kind:`group`,children:n.map(e=>e.id),presentation:{mode:`split`,axis:t,weights:n.map(e=>e.weight)}});function ce(e,t,n=null){let r=[],i=(e,t)=>t.length?(r.push(z(e,t.map(e=>e.id)),...t),e):null,a=t=>e.filter(e=>e.role===t).slice(0,P[t]),o=(e,t)=>{let n=t.filter(e=>!!e);return n.length<2?n[0]?.id??null:(r.push(B(e,`vertical`,n)),e)},s=i(F.input,a(`input`).map(e=>e.node)),c=i(F.code,a(`code`).map(e=>e.node)),l=i(F.commands,[t,n].filter(e=>!!e)),u=[...a(`result`),...a(`report`)],d=i(F.figures,u.filter(e=>e.figure).map(e=>e.node)),f=i(F.result,u.filter(e=>!e.figure).map(e=>e.node)),p=o(F.left,[s?{id:s,weight:1}:null,c?{id:c,weight:1.8}:null,l?{id:l,weight:1.2}:null]),m=o(F.right,[d?{id:d,weight:1.25}:null,f?{id:f,weight:1}:null]);if(p&&m)return r.push(B(F.root,`horizontal`,[{id:p,weight:1},{id:m,weight:1.3}])),{rootId:F.root,nodes:r};let h=p??m;return h?{rootId:h,nodes:r}:null}function le(e,t,n){let r=structuredClone(e.nodes),i=e.rootId,a=e=>r.find(t=>t.id===e),o=new Map(t.nodes.filter(e=>e.kind===`view`).map(e=>[e.id,e]));for(let e of r){let t=e.kind===`view`?o.get(e.id):void 0;t&&(e.bindings=t.bindings,e.props=t.props)}for(let[e,s]of o){if(a(e)||n(e))continue;let o=t.nodes.find(t=>t.kind===`group`&&t.children?.includes(e)),c=a(o.id);if(!c||c.kind!==`group`||c.presentation?.mode===`split`){c=z(o.id,[]),r.push(c);let e=a(i);if(e.presentation?.mode===`split`&&e.presentation.axis===`horizontal`)e.children=[...e.children,c.id],e.presentation={...e.presentation,weights:[...e.presentation.weights??e.children.slice(1).map(()=>1),1]};else{let e=`studio-wrap`,t=1;for(;a(e);)e=`studio-wrap-`+ ++t;r.push(B(e,`horizontal`,[{id:i,weight:1},{id:c.id,weight:1}])),i=e}}c.children=[...c.children,e],r.push(s)}return{rootId:i,nodes:r}}var V=t(),H={turns:8,readMs:700,stepMs:600,minStepMs:120},ue=e=>/\.(R|r|Rmd|qmd|py|md|markdown|txt|json|sh|sql|js|mjs|ts|ya?ml|toml|tex|log)$/.test(e);function de(e,t,n){let r=t.conversations?.find(e=>e.conversationId===n),[i,a]=(0,T.useState)(null),[o,s]=(0,T.useState)(``),c=(0,T.useRef)(void 0),l=(0,T.useRef)(0),u=(0,T.useRef)(r?.version);return u.current=r?.version,(0,T.useEffect)(()=>()=>clearTimeout(c.current),[]),(0,T.useEffect)(()=>{r&&i?.version!==r.version&&!c.current&&(c.current=setTimeout(()=>{let r=u.current??0;l.current=Date.now(),e.call(`conversation.read`,{projectId:t.project.id,conversationId:n,limit:H.turns}).then(e=>{a({version:r,read:e}),s(``)},e=>s(e instanceof Error?e.message:`The conversation could not be read.`)).finally(()=>{c.current=void 0})},Math.max(0,l.current+H.readMs-Date.now())))},[e,t.project.id,n,r?.version,i]),{turns:(0,T.useMemo)(()=>i&&r?i.read.turns.map(e=>({conversationId:n,conversationTitle:r.agentTitle||r.title,agent:d(r.client),turn:e,observation:i.read.observation})):[],[i,r?.title,r?.agentTitle]),problem:o,loading:!i&&!o,summary:r}}function fe({turns:e,then:t,root:n,at:r,onAt:i}){let a=(0,T.useMemo)(()=>e.map(e=>({turn:e.turn,title:p(e.turn.text).question.split(`
1
+ import{r as e}from"./rolldown-runtime-XKyaHtl9.js";import{n as t,t as n}from"./react-Dss-ouuy.js";import{r}from"./markdown-0ngRuTpW.js";import{M as i,N as a,f as o,o as s}from"./canvas-BXhC8RDZ.js";import{Ct as c,Jt as l,Kt as u,Mt as d,Nt as f,Rt as p,St as m,ft as h,gt as g,ht as _,mt as v,pt as ee,vt as y}from"./index-BHQIaDsx.js";import{i as b,r as x}from"./console-Dbdo-5oO.js";import{n as te,r as ne,t as re}from"./timeline-events-DmX1BCh3.js";import{n as S,r as ie}from"./notes-meaning-DdPbtNzJ.js";import{t as C}from"./answer-board-CBkGbSLD.js";import{Workspace as w}from"./workspace-BKFefRfJ.js";var T=e(n(),1),ae=e(l(),1),E={titleChars:90,files:6},D=e=>/^\s*(API Error|Error:|Request failed|Overloaded)/i.test(e),O=e=>e?Date.parse(e):NaN,k=e=>{let t=e.replace(/\s+/g,` `).trim(),n=(/^(.+?[.!?。!?])(\s|$)/.exec(t)?.[1]??t).replace(/[::]$/,``);return n.length>E.titleChars?n.slice(0,E.titleChars-1).trimEnd()+`…`:n},A=e=>{let t=[...new Set(e.map(e=>e.split(`/`).at(-1)))];return t.length>2?t.slice(0,2).join(`, `)+` and `+(t.length-2)+` more`:t.join(` and `)};function j(e){let t=[],n=null,r=!1;for(let i of e)i.kind===`edit`&&(!n||r)&&(n={start:i.at,end:i.at,edits:0,runs:0,looks:0},t.push(n),r=!1),n&&(n.end=i.at,i.kind===`edit`?n.edits++:i.kind===`run`?(n.runs++,r=!0):i.kind===`look`&&n.looks++);return t.length>1?t:[]}function M(e,t,n,r,i={}){let a=n.filter(e=>e.kind===`run`).length,o=n.filter(e=>e.kind===`edit`).length,s=n.filter(e=>e.kind===`look`),c=n.filter(e=>e.kind===`refused`).length,l=o?`build`:a?`explore`:s.length?`look`:`work`,u=r?k(r):l===`look`?s.some(e=>e.path)?`Read `+A(s.flatMap(e=>e.path?[e.path]:[])):`Looked at the project`:l===`explore`?`Explored with `+a+(a===1?` command`:` commands`):l===`build`?`Edited `+A(n.filter(e=>e.kind===`edit`).flatMap(e=>e.path?[e.path]:[])):`Worked`;return{id:e+`:`+t,turn:e,start:n[0]?.at??NaN,end:n.at(-1)?.at??NaN,title:u,said:!!r,kind:l,steps:n.length,runs:a,edits:o,rounds:j(n),files:[...new Set(n.flatMap(e=>e.path?[e.path]:[]))].slice(0,E.files),notes:c?[c+` refused`]:[],running:!1,...i}}function N(e,t,n){let r=[],i=e.steps.reduce((e,t,n)=>t.kind===`tool`?n:e,-1),a={said:null,at:O(e.startedAt??e.sentAt),steps:[],notices:0},o=()=>{if(!a.steps.length&&!a.said)return;let e=a.steps;if(!a.said){let n=e.findIndex((t,n)=>t.kind===`run`&&e[n+1]?.kind===`run`),i=n>0?e.slice(0,n):[];i.some(e=>e.kind===`look`)&&!i.some(e=>e.kind===`edit`)&&(r.push(M(t,r.length,i,null,{kind:`look`,title:`Read `+A(i.filter(e=>e.kind===`look`).flatMap(e=>e.path?[e.path]:[]))})),a.steps=e.slice(n))}if(a.steps.length||a.said){let e=M(t,r.length,a.steps,a.said,a.said?{start:a.at}:{});a.notices&&e.notes.push(a.notices+(a.notices===1?` provider error`:` provider errors`)),r.push(e)}};e.steps.forEach((e,t)=>{let r=O(e.at);if(e.kind===`text`){if(t>i)return;if(D(e.text??``)){a.notices++;return}o(),a={said:e.text??``,at:r,steps:[],notices:0};return}if(e.kind===`error`){a.notices++;return}let s=u(e,null,n),c=s.outcome===`rejected`?`refused`:s.action===`read`||s.action===`search`?`look`:s.action===`edit`||s.action===`write`?`edit`:s.action===`execute`?`run`:`other`,l=s.targetKind===`path`&&s.target?s.target:null;a.steps.push({at:O(e.startedAt??e.at),kind:c,path:l})}),o();let s=e.steps.slice(i+1).filter(e=>e.kind===`text`&&!D(e.text??``));return s.length&&e.state!==`running`&&r.push({...M(t,r.length,[],null),kind:`answer`,title:`Answered`,start:O(s[0].at),end:O(s.at(-1).at)}),e.state===`running`&&r.length&&(r.at(-1).running=!0),r}var P={input:3,code:3,result:6,report:2},F={root:`studio`,left:`studio-left`,input:`studio-input`,code:`studio-code`,commands:`studio-commands`,right:`studio-right`,figures:`studio-figures`,result:`studio-result`,console:`studio-console`,session:`studio-session`},I={supporting:64,method:64,run:64,input:64,report:64},L={code:0,result:1,report:2,input:3};function R(e,t){let n=new Map;for(let r of e.nodes){if(r.kind!==`file`||r.path!==t)continue;let e=r.versions?.length?r.versions:r.resource?[{resource:r.resource,capturedAt:r.capturedAt??r.at}]:[];for(let t of e){let e=t.resource.id+`@`+t.resource.version;n.has(e)||n.set(e,{resource:{id:t.resource.id,version:t.resource.version},at:t.capturedAt})}}return[...n.values()].sort((e,t)=>e.at-t.at)}function oe(e){let t=new Map,n=t=>Math.min(...e.nodes.filter(e=>e.path===t).flatMap(e=>[e.at,...e.events.map(e=>e.at)])),r=(r,i,a)=>{if(!r.path||r.path===`project-notes.md`)return;let o=t.get(r.path);o&&L[o.role]<L[i]||(o&&o.role===i?o.lead||=a:t.set(r.path,{path:r.path,title:r.title,role:i,category:r.category??null,lead:a,first:n(r.path),versions:R(e,r.path)}))};for(let t of[...e.turns].sort((e,t)=>e.start-t.start)){let n=C(e,t.id,I);for(let e of n?.items??[]){let t=e.role===`method`?`code`:e.role===`primary`||e.role===`supporting`?`result`:e.role===`report`?`report`:e.role===`input`?`input`:null;t&&r(e.node,t,e.role===`primary`)}}return[...t.values()].sort((e,t)=>L[e.role]-L[t.role]||Number(t.lead)-Number(e.lead)||e.first-t.first||e.path.localeCompare(t.path))}function se(e,t){return t===null?e:e.filter(e=>e.first<=t).map(e=>({...e,versions:e.versions.filter(e=>e.at<=t)}))}var z=(e,t)=>({id:e,kind:`group`,children:t}),B=(e,t,n)=>({id:e,kind:`group`,children:n.map(e=>e.id),presentation:{mode:`split`,axis:t,weights:n.map(e=>e.weight)}});function ce(e,t,n=null){let r=[],i=(e,t)=>t.length?(r.push(z(e,t.map(e=>e.id)),...t),e):null,a=t=>e.filter(e=>e.role===t).slice(0,P[t]),o=(e,t)=>{let n=t.filter(e=>!!e);return n.length<2?n[0]?.id??null:(r.push(B(e,`vertical`,n)),e)},s=i(F.input,a(`input`).map(e=>e.node)),c=i(F.code,a(`code`).map(e=>e.node)),l=i(F.commands,[t,n].filter(e=>!!e)),u=[...a(`result`),...a(`report`)],d=i(F.figures,u.filter(e=>e.figure).map(e=>e.node)),f=i(F.result,u.filter(e=>!e.figure).map(e=>e.node)),p=o(F.left,[s?{id:s,weight:1}:null,c?{id:c,weight:1.8}:null,l?{id:l,weight:1.2}:null]),m=o(F.right,[d?{id:d,weight:1.25}:null,f?{id:f,weight:1}:null]);if(p&&m)return r.push(B(F.root,`horizontal`,[{id:p,weight:1},{id:m,weight:1.3}])),{rootId:F.root,nodes:r};let h=p??m;return h?{rootId:h,nodes:r}:null}function le(e,t,n){let r=structuredClone(e.nodes),i=e.rootId,a=e=>r.find(t=>t.id===e),o=new Map(t.nodes.filter(e=>e.kind===`view`).map(e=>[e.id,e]));for(let e of r){let t=e.kind===`view`?o.get(e.id):void 0;t&&(e.bindings=t.bindings,e.props=t.props)}for(let[e,s]of o){if(a(e)||n(e))continue;let o=t.nodes.find(t=>t.kind===`group`&&t.children?.includes(e)),c=a(o.id);if(!c||c.kind!==`group`||c.presentation?.mode===`split`){c=z(o.id,[]),r.push(c);let e=a(i);if(e.presentation?.mode===`split`&&e.presentation.axis===`horizontal`)e.children=[...e.children,c.id],e.presentation={...e.presentation,weights:[...e.presentation.weights??e.children.slice(1).map(()=>1),1]};else{let e=`studio-wrap`,t=1;for(;a(e);)e=`studio-wrap-`+ ++t;r.push(B(e,`horizontal`,[{id:i,weight:1},{id:c.id,weight:1}])),i=e}}c.children=[...c.children,e],r.push(s)}return{rootId:i,nodes:r}}var V=t(),H={turns:8,readMs:700,stepMs:600,minStepMs:120},ue=e=>/\.(R|r|Rmd|qmd|py|md|markdown|txt|json|sh|sql|js|mjs|ts|ya?ml|toml|tex|log)$/.test(e);function de(e,t,n){let r=t.conversations?.find(e=>e.conversationId===n),[i,a]=(0,T.useState)(null),[o,s]=(0,T.useState)(``),c=(0,T.useRef)(void 0),l=(0,T.useRef)(0),u=(0,T.useRef)(r?.version);return u.current=r?.version,(0,T.useEffect)(()=>()=>clearTimeout(c.current),[]),(0,T.useEffect)(()=>{r&&i?.version!==r.version&&!c.current&&(c.current=setTimeout(()=>{let r=u.current??0;l.current=Date.now(),e.call(`conversation.read`,{projectId:t.project.id,conversationId:n,limit:H.turns}).then(e=>{a({version:r,read:e}),s(``)},e=>s(e instanceof Error?e.message:`The conversation could not be read.`)).finally(()=>{c.current=void 0})},Math.max(0,l.current+H.readMs-Date.now())))},[e,t.project.id,n,r?.version,i]),{turns:(0,T.useMemo)(()=>i&&r?i.read.turns.map(e=>({conversationId:n,conversationTitle:r.agentTitle||r.title,agent:d(r.client),turn:e,observation:i.read.observation})):[],[i,r?.title,r?.agentTitle]),problem:o,loading:!i&&!o,summary:r}}function fe({turns:e,then:t,root:n,at:r,onAt:i}){let a=(0,T.useMemo)(()=>e.map(e=>({turn:e.turn,title:p(e.turn.text).question.split(`
2
2
  `)[0]??``,chapters:N(e.turn,e.turn.id,n)})),[e,n]),o=(0,T.useMemo)(()=>r===null?null:t.flatMap(e=>N(e.turn,e.turn.id,n)).at(-1)??null,[t,n,r]),s=a.flatMap(e=>e.chapters),c=s.filter(e=>r===null||e.start<=r).at(-1),l=(0,T.useRef)(null);if(!c)return null;let u=o??c,d=c.rounds.filter(e=>r===null||e.start<=r).length,f=e=>[e.rounds.length?e.rounds.length+` rounds`:``,e.edits?e.edits+(e.edits===1?` edit`:` edits`):``,e.runs?e.runs+(e.runs===1?` command`:` commands`):``,...e.notes].filter(Boolean).join(` · `);return(0,V.jsxs)(`details`,{ref:l,className:`steps-chip`,onKeyDown:e=>{e.key===`Escape`&&l.current?.open&&(e.preventDefault(),l.current.open=!1)},children:[(0,V.jsxs)(`summary`,{title:u.title,children:[(0,V.jsx)(`span`,{className:`steps-dot`+(u.running&&r===null?` live`:``),"aria-hidden":`true`}),(0,V.jsx)(`span`,{className:`steps-title`,children:u.title}),c.rounds.length>0&&(0,V.jsxs)(`span`,{className:`steps-round`,children:[`Round `,Math.max(1,d),` of `,c.rounds.length]}),(0,V.jsxs)(`span`,{className:`steps-count`,children:[s.indexOf(c)+1,`/`,s.length]})]}),(0,V.jsx)(`div`,{className:`steps-pop`,role:`list`,"aria-label":`Parts of this conversation`,children:a.map(e=>(0,V.jsxs)(`section`,{children:[(0,V.jsx)(`p`,{className:`steps-asked`,title:e.turn.text,children:e.title.length>80?e.title.slice(0,79).trimEnd()+`…`:e.title}),e.chapters.map(e=>(0,V.jsxs)(`button`,{role:`listitem`,className:`steps-part `+e.kind+(e===c?` current`:r!==null&&e.start>r?` later`:``),onClick:()=>{i(e===s.at(-1)&&r!==null&&e.kind===`answer`?null:e.start),l.current&&(l.current.open=!1)},children:[(0,V.jsx)(`span`,{className:`steps-time`,children:h(e.start)}),(0,V.jsxs)(`span`,{className:`steps-name`,children:[e.title,e.said&&(0,V.jsx)(`small`,{children:` · in its words`})]}),f(e)&&(0,V.jsx)(`small`,{className:`steps-meta`,children:f(e)})]},e.id))]},e.turn.id))})]})}function pe({steps:e,marks:t,spans:n,at:i,playing:a,speed:o,running:s,onAt:c,onPlay:l,onSpeed:u}){let d=(0,T.useRef)(null),[f,p]=(0,T.useState)(400),[m,y]=(0,T.useState)(null),b=(0,T.useMemo)(()=>[...e.map(e=>({key:e.key,at:e.at,kind:v(e.action),failed:ee(e),label:e.label})),...t.map(e=>({key:e.key,at:e.at,kind:v(e.action),failed:e.failed,label:ne(e)}))].sort((e,t)=>e.at-t.at),[e,t]);(0,T.useLayoutEffect)(()=>{let e=d.current;if(!e)return;let t=new ResizeObserver(()=>p(e.clientHeight));return t.observe(e),p(e.clientHeight),()=>t.disconnect()},[]);let x=(0,T.useMemo)(()=>{let e=[];for(let t of[...n].sort((e,t)=>e.start-t.start)){let n=e.at(-1);n&&t.start<=n.end+3e4?n.end=Math.max(n.end,t.end):e.push({start:t.start,end:Math.max(t.end,t.start+1e3)})}return e},[n]),te=Math.max(60,f-16-26*Math.max(0,x.length-1)),re=g(x,b,te,8,96),S=[],ie=8;x.forEach((e,t)=>{S.push(ie),ie+=re[t]+26});let C=e=>re[e],w=e=>{let t=x.findIndex(t=>e<=t.end),n=t<0?x.length-1:t,r=x[n];return r?S[n]+Math.min(C(n),Math.max(0,(e-r.start)/(r.end-r.start)*C(n))):8},ae=e=>{for(let t=x.length-1;t>=0;t--)if(e>=S[t]){let n=x[t];return n.start+Math.min(1,Math.max(0,(e-S[t])/C(t)))*(n.end-n.start)}return x[0]?.start??0},E=e=>b.reduce((t,n)=>!t||Math.abs(w(n.at)-e)<Math.abs(w(t.at)-e)?n:t,null);function D(e){let t=e.currentTarget,n=t.getBoundingClientRect();t.setPointerCapture(e.pointerId),y(null);let r=e=>{let t=e-n.top,r=E(t);c(r&&Math.abs(w(r.at)-t)<8?r.at:ae(t))};r(e.clientY);let i=e=>r(e.clientY),a=()=>{t.removeEventListener(`pointermove`,i),t.removeEventListener(`pointerup`,a),t.removeEventListener(`pointercancel`,a)};t.addEventListener(`pointermove`,i),t.addEventListener(`pointerup`,a),t.addEventListener(`pointercancel`,a)}function O(e){if(e.buttons)return;let t=e.clientY-e.currentTarget.getBoundingClientRect().top,n=E(t);y(n&&Math.abs(w(n.at)-t)<7?{event:n,y:w(n.at)}:null)}let k=i??b.at(-1)?.at??0,A=Math.floor(k/1e3)*1e3,j=()=>[...b].reverse().find(e=>e.at<A)?.at??b[0]?.at,M=()=>b.find(e=>e.at>k)?.at??null;function N(e){let t=e.key===`ArrowDown`?M():e.key===`ArrowUp`?j():e.key===`Home`?b[0]?.at:e.key===`End`?null:void 0;t!==void 0&&(e.preventDefault(),c(t))}let P=i===null?null:w(i),F=x.slice(1).map((e,t)=>({y:S[t+1]-26,length:e.start-x[t].end}));return(0,V.jsxs)(`aside`,{className:`side-timeline`,"aria-label":`Timeline`,children:[(0,V.jsxs)(`div`,{className:`side-tl-controls`,children:[(0,V.jsx)(`button`,{className:`icon-button`,"aria-label":a?`Pause`:i===null?`Play from the start`:`Play from here`,onClick:l,children:(0,V.jsx)(r,{name:a?`pause`:`run`,size:15})}),(0,V.jsxs)(`button`,{className:`side-tl-speed`,"aria-label":`Speed `+o+`×`,onClick:u,children:[o,`×`]}),(0,V.jsxs)(`span`,{className:`side-tl-step`,children:[(0,V.jsx)(`button`,{className:`icon-button`,"aria-label":`Earlier step`,disabled:!b.length||i!==null&&i<(b[0]?.at??0)+1e3,onClick:()=>{let e=j();e!==void 0&&c(e)},children:(0,V.jsx)(`span`,{className:`flip`,children:(0,V.jsx)(r,{name:`chevron`,size:14})})}),(0,V.jsx)(`span`,{className:`side-tl-at`,"aria-live":`polite`,children:i===null?`Now`:h(i,!0)}),(0,V.jsx)(`button`,{className:`icon-button`,"aria-label":`Later step`,disabled:i===null,onClick:()=>c(M()),children:(0,V.jsx)(r,{name:`chevron`,size:14})})]})]}),(0,V.jsxs)(`div`,{ref:d,className:`side-tl-track`,role:`slider`,tabIndex:0,"aria-orientation":`vertical`,"aria-label":`Moment shown`,"aria-valuemin":b[0]?.at??0,"aria-valuemax":b.at(-1)?.at??0,"aria-valuenow":i??b.at(-1)?.at??0,"aria-valuetext":i===null?`Now`:h(i,!0),onPointerDown:D,onPointerMove:O,onPointerLeave:()=>y(null),onKeyDown:N,children:[x.map((e,t)=>(0,V.jsx)(`span`,{className:`side-tl-stretch`,style:{top:S[t],height:C(t)},"aria-hidden":`true`,children:(0,V.jsx)(`small`,{children:h(e.start)})},t)),F.map((e,t)=>(0,V.jsx)(`span`,{className:`side-tl-fold`,style:{top:e.y,height:26},title:`A pause of `+_(e.length),"aria-hidden":`true`,children:(0,V.jsx)(`small`,{children:_(e.length)})},t)),b.map(e=>(0,V.jsx)(`i`,{className:`side-tl-mark `+e.kind+(e.failed?` failed`:``)+(i!==null&&e.at>i?` later`:``),style:{top:w(e.at)},"aria-hidden":`true`},e.key)),P!==null&&(0,V.jsx)(`span`,{className:`side-tl-head`,style:{top:P},"aria-hidden":`true`,children:(0,V.jsx)(`small`,{children:h(i,!0)})}),m&&(0,V.jsxs)(`span`,{className:`side-tl-hover`,style:{top:m.y},children:[m.event.label,` · `,h(m.event.at,!0)]})]}),(0,V.jsx)(`button`,{className:`side-tl-now`+(i===null?` on`:``),disabled:i===null,onClick:()=>c(null),children:i===null&&s?(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(`span`,{className:`pulse-dot`,"aria-hidden":`true`}),`Live`]}):`Now`})]})}function U({client:e,snapshot:t,files:n,conversationId:l,notesText:u=``,at:p,playing:h,speed:g,onAt:_,onPlaying:v,onSpeed:ee,stepsTarget:ne,agentNow:C,following:E,workspace:D}){let O=t.project.id,k=s(l),{turns:A,problem:j,loading:M,summary:N}=de(e,t,l),P=(0,T.useMemo)(()=>n.files.map(e=>({path:e.path,bytes:e.bytes,modifiedAt:e.modifiedAt,category:e.category})),[n.files]),I=(0,T.useMemo)(()=>f({turns:A,files:P,project:t.project,kindOf:a,now:Date.now()}),[A,P,t.project]),L=(0,T.useMemo)(()=>y(A,p),[A,p]),R=(0,T.useMemo)(()=>p===null?I:f({turns:L,files:P,project:t.project,kindOf:a,now:p}),[I,L,p]),z=(0,T.useMemo)(()=>oe(I),[I]),B=(0,T.useMemo)(()=>se(z,p),[z,p]),U=(0,T.useMemo)(()=>I.events.filter(e=>Number.isFinite(e.at)).sort((e,t)=>e.at-t.at),[I]),W=!!N&&N.state===`running`,{marks:me}=re(e,t),he=I.turns.length?Math.min(...I.turns.map(e=>e.start)):null,G=(0,T.useMemo)(()=>he===null?[]:te(me,l,he),[me,l,he]),K=(0,T.useMemo)(()=>[...U.map(e=>e.at),...G.map(e=>e.at)].sort((e,t)=>e-t),[U,G]),[ge,_e]=(0,T.useState)({}),ve=(0,T.useRef)(new Set),[ye,be]=(0,T.useState)({});(0,T.useEffect)(()=>{for(let t of z)ve.current.has(t.path)||(ue(t.path)?(ve.current.add(t.path),e.call(`document.open`,{projectId:O,path:t.path}).then(e=>_e(n=>({...n,[t.path]:e.id})),()=>_e(e=>({...e,[t.path]:null})))):i(t.path)&&!t.versions.length&&p===null&&(ve.current.add(t.path),e.call(`agent.activity.capture`,{projectId:O,path:t.path}).then(e=>be(n=>({...n,[t.path]:{id:e.id,version:e.version}})),()=>be(e=>({...e,[t.path]:null})))))},[z,p,e,O]);let xe=e=>t.catalog.components.find(t=>t.id===e),Se=R.nodes.filter(e=>e.kind===`run`).reduce((e,t)=>Math.min(e,t.at),1/0),Ce=I.nodes.filter(e=>e.kind===`run`).reduce((e,t)=>Math.min(e,t.at),1/0),we=e=>e.flatMap(e=>e.turn.steps??[]).filter(e=>e.kind===`tool`&&e.operation?.startsWith(`kernel.run`)).reduce((e,t)=>Math.min(e,Date.parse(t.startedAt??t.at)),1/0),Te=(0,T.useMemo)(()=>we(L),[L]),Ee=(0,T.useMemo)(()=>we(A),[A]),q=(0,T.useMemo)(()=>{let e=e=>{let t={title:e.title};if(i(e.path)){let n=e.versions.at(-1)?.resource??(p===null?ye[e.path]:null),r=xe(/\.csv$/i.test(e.path)?`rho.table`:`rho.media`);return!n||!r?null:{id:b(e.path),kind:`view`,component:r.id,version:r.version,props:t,bindings:{[Object.keys(r.bindings)[0]??`data`]:{id:n.id,version:n.version}}}}let n=ge[e.path],r=(/\.(md|markdown)$/i.test(e.path)?xe(`markdown.reader`):void 0)??xe(`rho.editor`);return!n||!r?null:{id:b(e.path),kind:`view`,component:r.id,version:r.version,props:t,bindings:{document:{kind:`live-document`,documentId:n}}}};return ce(B.flatMap(t=>{let n=e(t);return n?[{role:t.role,node:n,figure:n.component===`rho.media`}]:[]}),Number.isFinite(Se)?{id:F.console,kind:`view`,component:`rho.console`,version:`1`,props:{title:`Commands`},bindings:{}}:null,Number.isFinite(Te)?{id:F.session,kind:`view`,component:`rho.notebook`,version:`1`,props:{title:`Notebook`},bindings:{}}:null)},[B,ge,ye,p,Se,Te,t.catalog]),J=(0,T.useMemo)(()=>{let e=t.compositions.find(e=>e.compositionId===k);if(!e?.rootId||!e.nodes?.length)return q;let n={rootId:e.rootId,nodes:e.nodes};if(p!==null)return n.nodes.some(e=>e.kind===`view`)?le(n,q??{rootId:``,nodes:[]},()=>!1):q;let r=Date.parse(e.acknowledgedAt??``),i=e=>e===F.console?Ce:e===F.session?Ee:z.find(t=>b(t.path)===e)?.first??1/0;return le(n,q??{rootId:``,nodes:[]},e=>!Number.isFinite(r)||i(e)<=r)},[q,z,p,Ce,Ee,t.compositions]),Y=t.compositions.find(e=>e.compositionId===k),De=JSON.stringify(J)+`:`+(Y?.version??0),Oe=(0,T.useMemo)(()=>J?{...Y??{},compositionId:k,version:Y?.version??0,rootId:J.rootId,nodes:J.nodes,views:J.nodes.filter(e=>e.kind===`view`)}:null,[De]);(0,T.useEffect)(()=>{if(!h)return;let e=p===null?0:K.findIndex(e=>e>p);if(e<0||e>=K.length){v(!1),_(null);return}let t=Math.min(H.stepMs,Math.max(H.minStepMs,12e3/Math.max(1,K.length)))/g,n=setTimeout(()=>_(K[e]),p===null?0:t);return()=>clearTimeout(n)},[h,p,K,g]);let[ke,Ae]=(0,T.useState)(null),X=new Set(Oe?.views.map(e=>e.id)??[]),je=e=>e&&X.has(b(e))?b(e):void 0,Z=C?.running&&C.conversationId===l&&p===null?C:null,Q=p===null?null:[...U].reverse().find(e=>e.at<=p&&e.action!==`capture`),Me=Q&&([...U].reverse().find(e=>e.at<=p&&e.at>=Math.floor(Q.at/1e3)*1e3&&(e.action===`write`||e.action===`edit`))??Q),Ne=Me?R.nodes.find(e=>e.id===Me.node):null,Pe=p===null?null:[...G].reverse().find(e=>e.at<=p)??null,Fe=Pe&&(!Q||Pe.at>=Q.at)?Pe.source.startsWith(`kernel.`)?F.session:F.console:void 0,$=Z?Z.latest?.step.operation?.startsWith(`kernel.`)&&X.has(F.session)?F.session:Z.latest?.action===`execute`?F.console:je(Z.files.at(-1)?.path):Fe&&X.has(Fe)?Fe:Ne?Ne.kind===`run`?F.console:je(Ne.path):void 0,Ie=(ke&&X.has(ke)?ke:void 0)??(E||p!==null?$:void 0);(0,T.useEffect)(()=>{Ae(null)},[p===null,l]);let Le=Z&&$&&X.has($)?{viewId:$,label:Z.title,verb:$===F.console?`Running`:Z.files.at(-1)?.verb??`Working`,live:Z.latest?.outcome===`requested`}:null,[Re,ze]=(0,T.useState)(``),[Be,Ve]=(0,T.useState)(``),He=p===null&&t.catalog.operations.some(e=>e.method===`composition.apply`&&e.authorized&&e.state===`available`),Ue=p===null&&q?q.nodes.filter(e=>e.kind===`view`&&!X.has(e.id)):[];async function We(t,n){ze(n),Ve(``);try{await e.call(`composition.apply`,{projectId:O,compositionId:k,expectedVersion:Y?.version??0,changeId:`studio-`+n+`-`+crypto.randomUUID(),operations:[{op:`replace`,rootId:t.rootId,nodes:t.nodes}]})}catch(e){Ve(e instanceof Error?e.message:`The layout could not be written.`)}finally{ze(``)}}let Ge=(e,t)=>{let n=J&&o(J,e,t,e=>`${e}-${crypto.randomUUID().slice(0,8)}`);n&&(Ae(e.id),We(n,`reopen`))},Ke=He&&q?(0,V.jsxs)(`div`,{className:`studio-empty`,children:[(0,V.jsx)(`span`,{className:`empty-symbol`,children:(0,V.jsx)(r,{name:`layout`,size:26,stroke:1.5})}),(0,V.jsx)(`h2`,{children:`Every view of this work is closed`}),(0,V.jsx)(`p`,{children:`Its files, commands and versions are all kept. Lay them out again by what each is to the work, or choose a moment on the timeline to see the work as it was then.`}),(0,V.jsx)(`button`,{className:`primary`,disabled:!!Re,onClick:()=>void We(q,`relayout`),children:Re?`Laying out…`:`Lay out the work again`})]}):void 0,qe=He&&Ue.length?e=>(0,V.jsx)(`div`,{className:`page-add`,children:(0,V.jsxs)(`section`,{className:`page-add-kind`,"aria-label":`Closed views of this work`,children:[(0,V.jsx)(`h3`,{children:`Closed views of this work`}),Ue.map(t=>(0,V.jsxs)(`button`,{onClick:()=>Ge(t,e),children:[(0,V.jsx)(r,{name:t.component===`rho.console`?`prompt`:t.component===`rho.notebook`?`code`:t.component===`rho.media`?`image`:t.component===`rho.table`?`table`:`file`,size:15,stroke:1.7}),(0,V.jsx)(`span`,{children:String(t.props?.title??t.id)})]},t.id))]})}):void 0,Je=(0,T.useMemo)(()=>S(ie(u)),[u]),Ye=(0,T.useMemo)(()=>m(A),[A]),Xe=(0,T.useMemo)(()=>({conversationId:l,graph:R,whole:I,at:p,files:B,every:z,setAt:_,showPath:e=>Ae(b(e)),holds:e=>c(e,Je,Ye,p)}),[Ye,l,R,I,p,B,z,Je]);return(0,V.jsxs)(x.Provider,{value:Xe,children:[(0,V.jsxs)(`div`,{className:`process-studio`,children:[(0,V.jsxs)(`div`,{className:`process-stage`,children:[j&&(0,V.jsx)(`p`,{className:`inline-error`,role:`alert`,children:j}),Be&&(0,V.jsx)(`p`,{className:`inline-error`,role:`alert`,children:Be}),Oe?(0,V.jsx)(w,{...D,bar:!1,composition:Oe,snapshot:t,client:e,openView:Ie,presence:Le,arrange:p===null,following:E||p!==null,empty:Ke,addView:qe},O+k):(0,V.jsxs)(`div`,{className:`studio-empty`,children:[(0,V.jsx)(`span`,{className:`empty-symbol`,children:W?(0,V.jsx)(`span`,{className:`pulse-dot large`,"aria-hidden":`true`}):(0,V.jsx)(r,{name:`layout`,size:26,stroke:1.5})}),(0,V.jsx)(`h2`,{children:M?`Reading the conversation…`:W?(N?d(N.client):`The Agent`)+` is starting`:`Nothing to show yet`}),(0,V.jsx)(`p`,{children:W?`The data it reads, the code it writes, the commands it runs and the results they make appear here as it works.`:`This conversation has not read or made any project files.`})]})]}),K.length>0&&(0,V.jsx)(pe,{steps:U,marks:G,spans:[...I.turns,...G.map(e=>({start:e.at,end:e.end}))],at:p,playing:h,speed:g,running:W,onAt:e=>{v(!1),_(e)},onPlay:()=>v(!h),onSpeed:()=>ee(g===4?1:g*2)})]}),ne&&(0,ae.createPortal)((0,V.jsx)(fe,{turns:A,then:L,root:t.project.root,at:p,onAt:e=>{v(!1),_(e)}}),ne)]})}export{U as ProcessStudio};
@@ -1 +1 @@
1
- import{r as e}from"./rolldown-runtime-XKyaHtl9.js";import{t}from"./react-Dss-ouuy.js";import{Mt as n}from"./index-BYuKpyoi.js";var r=e(t(),1),i=`person`,a=`other`;function o(e,t,n){let r=new Map(t.flatMap(e=>e.principal?[[e.principal,e]]:[]));return e.flatMap(e=>{let t=Date.parse(e.startedAt);if(!Number.isFinite(t))return[];let o=e.endedAt?Date.parse(e.endedAt):NaN,s=Math.max(t,Number.isFinite(o)?o:e.outcome===`running`?n:t),c=e.by===`browser:local`?null:r.get(e.by),l=e.by===`browser:local`?`person`:c?`conversation`:`other`;return[{key:e.source+`:`+e.id,at:t,end:s,lane:l===`person`?i:c?c.conversationId:a,laneTitle:l===`person`?`You`:c?c.title:`Outside Rho`,who:l,...c?{agent:c.agent}:{},source:e.source,action:e.action,label:e.label,where:e.where,outcome:e.outcome,failed:e.outcome===`failed`||e.outcome===`unknown`}]}).sort((e,t)=>e.at-t.at)}var s=(e,t,n)=>e.filter(e=>e.lane===t||e.who===`person`&&e.at>=n);function c(e){return`${e.who===`person`?`You`:e.who===`conversation`?e.agent??`The Agent`:`Someone outside Rho`} ${e.outcome===`running`?e.who===`person`?`are running`:`is running`:`ran`} ${e.label}${e.where?` · `+e.where:``}`}var l={events:200,readMs:1e3};function u(e){return e.catalog.plugins.flatMap(t=>t.timeline&&e.catalog.operations.some(e=>e.method===t.timeline&&e.state===`available`&&e.authorized)?[t.timeline]:[])}function d(e,t){let i=u(t),a=i.join(`,`),[s,c]=(0,r.useState)([]),[d,f]=(0,r.useState)(``),p=(0,r.useRef)(0),m=(0,r.useRef)(0),h=(0,r.useRef)(0);(0,r.useEffect)(()=>{if(!i.length){c([]);return}let n=setTimeout(()=>{p.current=Date.now();let n=++m.current;Promise.all(i.map(n=>e.call(n,{projectId:t.project.id,limit:l.events}).then(e=>e.events.map(e=>({...e,source:n}))))).then(e=>{n>h.current&&(h.current=n,c(e.flat()),f(``))},e=>{n>h.current&&f(e instanceof Error?e.message:`What was run could not be read.`)})},Math.max(0,p.current+l.readMs-Date.now()));return()=>clearTimeout(n)},[e,t.project.id,t.cursor,a]);let g=(0,r.useMemo)(()=>(t.conversations??[]).map(e=>({conversationId:e.conversationId,principal:e.principal,title:e.agentTitle||e.title,agent:n(e.client)})),[t.conversations]);return{marks:(0,r.useMemo)(()=>o(s,g,Date.now()),[s,g]),problem:d}}export{s as n,c as r,d as t};
1
+ import{r as e}from"./rolldown-runtime-XKyaHtl9.js";import{t}from"./react-Dss-ouuy.js";import{Mt as n}from"./index-BHQIaDsx.js";var r=e(t(),1),i=`person`,a=`other`;function o(e,t,n){let r=new Map(t.flatMap(e=>e.principal?[[e.principal,e]]:[]));return e.flatMap(e=>{let t=Date.parse(e.startedAt);if(!Number.isFinite(t))return[];let o=e.endedAt?Date.parse(e.endedAt):NaN,s=Math.max(t,Number.isFinite(o)?o:e.outcome===`running`?n:t),c=e.by===`browser:local`?null:r.get(e.by),l=e.by===`browser:local`?`person`:c?`conversation`:`other`;return[{key:e.source+`:`+e.id,at:t,end:s,lane:l===`person`?i:c?c.conversationId:a,laneTitle:l===`person`?`You`:c?c.title:`Outside Rho`,who:l,...c?{agent:c.agent}:{},source:e.source,action:e.action,label:e.label,where:e.where,outcome:e.outcome,failed:e.outcome===`failed`||e.outcome===`unknown`}]}).sort((e,t)=>e.at-t.at)}var s=(e,t,n)=>e.filter(e=>e.lane===t||e.who===`person`&&e.at>=n);function c(e){return`${e.who===`person`?`You`:e.who===`conversation`?e.agent??`The Agent`:`Someone outside Rho`} ${e.outcome===`running`?e.who===`person`?`are running`:`is running`:`ran`} ${e.label}${e.where?` · `+e.where:``}`}var l={events:200,readMs:1e3};function u(e){return e.catalog.plugins.flatMap(t=>t.timeline&&e.catalog.operations.some(e=>e.method===t.timeline&&e.state===`available`&&e.authorized)?[t.timeline]:[])}function d(e,t){let i=u(t),a=i.join(`,`),[s,c]=(0,r.useState)([]),[d,f]=(0,r.useState)(``),p=(0,r.useRef)(0),m=(0,r.useRef)(0),h=(0,r.useRef)(0);(0,r.useEffect)(()=>{if(!i.length){c([]);return}let n=setTimeout(()=>{p.current=Date.now();let n=++m.current;Promise.all(i.map(n=>e.call(n,{projectId:t.project.id,limit:l.events}).then(e=>e.events.map(e=>({...e,source:n}))))).then(e=>{n>h.current&&(h.current=n,c(e.flat()),f(``))},e=>{n>h.current&&f(e instanceof Error?e.message:`What was run could not be read.`)})},Math.max(0,p.current+l.readMs-Date.now()));return()=>clearTimeout(n)},[e,t.project.id,t.cursor,a]);let g=(0,r.useMemo)(()=>(t.conversations??[]).map(e=>({conversationId:e.conversationId,principal:e.principal,title:e.agentTitle||e.title,agent:n(e.client)})),[t.conversations]);return{marks:(0,r.useMemo)(()=>o(s,g,Date.now()),[s,g]),problem:d}}export{s as n,c as r,d as t};
@@ -1 +1 @@
1
- import{r as e}from"./rolldown-runtime-XKyaHtl9.js";import{t}from"./react-Dss-ouuy.js";import{Mt as n}from"./index-BYuKpyoi.js";var r=e(t(),1),i={conversations:6,turns:8};function a(e,t){let a=(0,r.useMemo)(()=>[...t.conversations??[]].sort((e,t)=>t.lastAt.localeCompare(e.lastAt)).slice(0,i.conversations),[t.conversations]),[o,s]=(0,r.useState)({}),[c,l]=(0,r.useState)(``),u=a.map(e=>e.conversationId+`@`+e.version).join(`,`);(0,r.useEffect)(()=>{let n=!0,r=a.filter(e=>o[e.conversationId]?.version!==e.version);if(!r.length)return;let c=r.some(e=>e.state===`running`),u=setTimeout(()=>{Promise.all(r.map(n=>e.call(`conversation.read`,{projectId:t.project.id,conversationId:n.conversationId,limit:i.turns}).then(e=>[n,e]))).then(e=>{n&&(l(``),s(t=>{let n={...t};for(let[t,r]of e)n[t.conversationId]={version:t.version,read:r};return n}))},e=>{n&&l(e instanceof Error?e.message:`A conversation could not be read.`)})},c&&Object.keys(o).length?700:0);return()=>{n=!1,clearTimeout(u)}},[e,t.project.id,u]);let d=(0,r.useMemo)(()=>a.flatMap(e=>(o[e.conversationId]?.read.turns??[]).map(t=>({conversationId:e.conversationId,conversationTitle:e.agentTitle||e.title,agent:n(e.client),turn:t,observation:o[e.conversationId]?.read.observation}))),[a,o]),f=a.reduce((e,t)=>e+(o[t.conversationId]?.read.first??0),0)+Math.max(0,(t.conversations?.length??0)-a.length);return{turns:d,problem:c,loading:a.length>0&&!a.some(e=>o[e.conversationId]),omitted:f}}export{a as t};
1
+ import{r as e}from"./rolldown-runtime-XKyaHtl9.js";import{t}from"./react-Dss-ouuy.js";import{Mt as n}from"./index-BHQIaDsx.js";var r=e(t(),1),i={conversations:6,turns:8};function a(e,t){let a=(0,r.useMemo)(()=>[...t.conversations??[]].sort((e,t)=>t.lastAt.localeCompare(e.lastAt)).slice(0,i.conversations),[t.conversations]),[o,s]=(0,r.useState)({}),[c,l]=(0,r.useState)(``),u=a.map(e=>e.conversationId+`@`+e.version).join(`,`);(0,r.useEffect)(()=>{let n=!0,r=a.filter(e=>o[e.conversationId]?.version!==e.version);if(!r.length)return;let c=r.some(e=>e.state===`running`),u=setTimeout(()=>{Promise.all(r.map(n=>e.call(`conversation.read`,{projectId:t.project.id,conversationId:n.conversationId,limit:i.turns}).then(e=>[n,e]))).then(e=>{n&&(l(``),s(t=>{let n={...t};for(let[t,r]of e)n[t.conversationId]={version:t.version,read:r};return n}))},e=>{n&&l(e instanceof Error?e.message:`A conversation could not be read.`)})},c&&Object.keys(o).length?700:0);return()=>{n=!1,clearTimeout(u)}},[e,t.project.id,u]);let d=(0,r.useMemo)(()=>a.flatMap(e=>(o[e.conversationId]?.read.turns??[]).map(t=>({conversationId:e.conversationId,conversationTitle:e.agentTitle||e.title,agent:n(e.client),turn:t,observation:o[e.conversationId]?.read.observation}))),[a,o]),f=a.reduce((e,t)=>e+(o[t.conversationId]?.read.first??0),0)+Math.max(0,(t.conversations?.length??0)-a.length);return{turns:d,problem:c,loading:a.length>0&&!a.some(e=>o[e.conversationId]),omitted:f}}export{a as t};
@@ -1,5 +1,5 @@
1
- import{r as e}from"./rolldown-runtime-XKyaHtl9.js";import{n as t,t as n}from"./react-Dss-ouuy.js";import{r}from"./markdown-0ngRuTpW.js";import{A as i,C as a,D as o,E as s,O as c,S as l,T as u,_ as d,b as f,d as p,g as m,h,k as g,m as _,v,w as y,x as b,y as x}from"./canvas-BXhC8RDZ.js";import{Jt as S,a as C,b as ee,c as w,d as te,f as T,ft as E,i as ne,it as re,l as ie,m as ae,n as oe,nt as se,o as ce,ot as le,p as ue,r as de,rt as fe,s as pe,t as me,tt as he,u as ge,y as _e,yt as ve}from"./index-BYuKpyoi.js";import{a as ye,i as be,t as xe}from"./console-e1P5qYQ5.js";import{a as Se,c as Ce,i as we,l as Te,n as Ee,o as De,r as Oe,s as ke,t as Ae}from"./facts-BMO6V3-3.js";import{t as je}from"./snapshot-CAxBYPvV.js";import{t as Me}from"./explore-in-muWXOGOY.js";var D=e(n(),1),Ne=e(S(),1);function O(e){return e.at??e.after??null}var Pe=e=>e===null?null:Date.parse(e);function Fe(e=`following`){return{step:-1,time:null,attention:e,question:null,objects:{},order:[],views:[],active:null,agent:null,suggestions:[],escalations:[],digest:null,items:[],hidden:{catalog:0,rejected:0,retries:0},revealed:null,expanded:[],moves:[],lastMove:null,pending:null,away:null}}function Ie(e,t,n,r){e.presentationClock=r,We(e,t,{...n,seq:e.step+1})}function Le(e,t,n){Xe(e,t,{...n,at:e.step})}function Re(e,t){let n=e.time;e.presentationClock=t,e.time=new Date(t).toISOString(),F(e),e.time=n}function ze(e){for(let t of e.views)t.newer=et(e,t);let{lastMove:t,pending:n,away:r,presentationClock:i,...a}=e;return structuredClone(a)}function Be(e,t){return e.objects[t.id]||(e.objects[t.id]=t,e.order.push(t.id)),e.objects[t.id]}var k=(e,t,n)=>Be(e,{id:`source:`+t,kind:`source`,name:t,version:1,savedVersion:null,changedAt:n,touchedAt:n,hidden:0}),Ve=(e,t,n)=>Be(e,{id:`artifact:`+t,kind:`artifact`,name:t,versions:[],changedAt:n,touchedAt:n,hidden:0}),He=(e,t)=>e.views.find(e=>e.id===t),Ue=e=>e.openedBy===`person`||e.pinned,A=(e,t)=>He(e,t)??e.views.find(e=>e.object===t&&Ue(e))??e.views.find(e=>e.object===t),j=(e,t,n)=>{let r=He(e,e.active);return!!r&&r.object===t&&(n===null||r.run===n)};function M(e,t,n){let r=t;for(;He(e,r);)r+=`@`+n;return r}var N=(e,t,n,r,i)=>({id:M(e,t,n),object:t,run:n,openedBy:r,pinned:!1,preview:i,selection:[],newer:null});function We(e,t,n){e.step=n.seq,e.time=O(n)??e.time;let r=n.object?e.objects[n.object]:void 0;if(r&&(r.touchedAt=n.seq),n.outcome===`rejected`)return r?r.hidden++:e.hidden.rejected++,F(e);let i=n.effect;if(!i)return F(e);let a=t.principals[n.actor]?.kind===`agent`,o=(t,r)=>a?P(e,n,t,r):F(e);switch(i.kind){case`catalog`:return e.hidden.catalog++,F(e);case`open`:{if(i.source===null)return F(e);let t=!!e.objects[`source:`+i.source],r=k(e,i.source,n.seq);return r.version=i.version,t||(r.savedVersion=i.version),o(r.id,null)}case`edit`:{let t=k(e,i.source,n.seq);return t.version=i.version,t.changedAt=n.seq,o(t.id,null)}case`save`:{let t=k(e,i.source,n.seq);return t.savedVersion=i.version,t.changedAt=n.seq,o(t.id,null)}case`source-state`:{let t=k(e,i.source,n.seq);return t.version=i.version,t.savedVersion=i.savedVersion,t.changedAt=n.seq,F(e)}case`submit`:if(i.sourceVersion!==null&&!e.objects[`source:`+i.source]){let t=k(e,i.source,n.seq);t.version=t.savedVersion=i.sourceVersion}return Be(e,{id:`run:`+i.run,kind:`run`,name:`Run `+i.run,run:i.run,source:i.source,sourceVersion:i.sourceVersion,state:i.state??`running`,exit:null,firstLine:null,verified:[],changedAt:n.seq,touchedAt:n.seq,hidden:0}),o(`run:`+i.run,null);case`retry`:{let t=e.objects[`run:`+i.run];return t&&t.hidden++,e.hidden.retries++,F(e)}case`run-state`:case`ended`:{let t=e.objects[`run:`+i.run];return t?(i.kind===`ended`?(t.exit=i.exit,t.state=i.state??(i.exit===0?`completed`:i.exit===null?`unknown`:`failed`)):t.state=i.state,t.changedAt=n.seq,(t.state===`failed`||t.state===`unknown`)&&Ye(e,t,n.seq),t.state===`completed`&&(e.escalations=e.escalations.filter(n=>{let r=e.objects[n.object];return!(r?.kind===`run`&&r.source===t.source&&r.run<t.run)})),o(t.id,null)):F(e)}case`observe`:return o(`run:`+i.run,null);case`output`:{let n=e.objects[`run:`+i.run],r=i.stream?t.runs[i.run]?.outputs[i.stream]??``:``;(i.stream===`stderr`||i.stream&&!n.firstLine)&&(n.firstLine=tt(r));let a=e.escalations.find(e=>e.object===n.id);return a&&n.firstLine&&(a.reason=n.firstLine),o(n.id,null)}case`verified`:{let r=e.objects[`run:`+i.run],a=t.runs[i.run]?.verified??[];if(!r)return F(e);r.verified=[...i.artifacts],r.changedAt=n.seq;for(let t of i.artifacts){let r=Ve(e,t,n.seq),o=a.find(e=>e.name===t)?.digest??`unknown`,s=r.versions.find(e=>e.digest===o);s?s.runs.includes(i.run)||s.runs.push(i.run):(r.versions.push({digest:o,runs:[i.run]}),r.changedAt=n.seq)}return o(r.id,null)}case`registered`:{let t=Ve(e,i.artifact,n.seq);t.name=i.name;let r=t.versions.find(e=>e.digest===i.version);return r?i.run!==null&&!r.runs.includes(i.run)&&r.runs.push(i.run):(t.versions.push({digest:i.version,runs:i.run===null?[]:[i.run]}),t.changedAt=n.seq),F(e)}case`read`:{if(i.artifact===null)return F(e);let t=Ve(e,i.artifact,n.seq);return t.touchedAt=n.seq,o(t.id,i.run)}case`layout`:return a?qe(e,n,i.views,i.replace):F(e);case`items`:return i.question!==null&&(e.question=i.question),i.items&&(e.items=i.items),F(e);case`ask`:return Be(e,{id:i.question,kind:`question`,name:i.text,author:n.actor,target:i.target,version:i.version,run:i.run,rows:[...i.rows],document:i.document,state:`prepared`,fetchedBy:null,fetchedAt:null,changedAt:n.seq,touchedAt:n.seq,hidden:0}),F(e);case`fetched`:{let t=e.objects[i.question];return t?.kind===`question`&&(t.state!==`responded`&&(t.state=`fetched`),t.fetchedBy=n.actor,t.fetchedAt=n.seq,t.changedAt=n.seq),F(e)}case`responded`:{let t=e.objects[i.question];return t?.kind===`question`&&(t.state=`responded`,t.changedAt=n.seq),F(e)}}}function P(e,t,n,r){e.attention===`following`?j(e,n,r)?(e.agent={object:n,run:r,seq:t.seq,placement:`main`},e.pending=null):I(e,t)?(e.pending={kind:`focus`,object:n,run:r},e.agent={object:n,run:r,seq:t.seq,placement:`pending`}):(e.pending=null,Ke(e,n,r,`agent`),e.agent={object:n,run:r,seq:t.seq,placement:`main`},Ge(e,t,`agent`,`agent-focus`)):e.agent={object:n,run:r,seq:t.seq,placement:`marker`}}function F(e){if(!e.pending||e.attention!==`following`)return;let t={seq:e.step,at:e.time};if(I(e,t))return;let n=e.pending;e.pending=null,n.kind===`focus`?(Ke(e,n.object,n.run,`agent`),e.agent&&(e.agent.placement=`main`),Ge(e,t,`agent`,`agent-focus`)):Je(e,t,n.views,n.replace)}function I(e,t){let n=e.presentationClock??Pe(O(t))??Pe(e.time);return e.lastMove!==null&&n!==null&&n-e.lastMove<8e3}function Ge(e,t,n,r){n===`agent`&&(e.lastMove=e.presentationClock??Pe(O(t))??Pe(e.time)??e.lastMove),e.moves.push({seq:t.seq,by:n,view:e.active,rule:r})}function Ke(e,t,n,r,i){let a=e.views.filter(e=>e.object===t),o=r===`person`?A(e,t):a.find(e=>(n===null||e.run===n)&&(!i||e.version===i))??a.find(e=>!Ue(e));if(o&&r===`agent`&&n!==null&&(o.run=n),!o){o=N(e,t,n,r,r===`agent`);let i=r===`agent`?e.views.findIndex(e=>e.preview):-1;i>=0?e.views[i]=o:e.views.push(o)}r===`person`&&(o.preview=!1,o.openedBy=`person`),i&&(o.version=i),e.active=o.id}function qe(e,t,n,r){let i=e.views.some(t=>t.pinned&&t.id===e.active);if(e.attention===`following`&&!i){if(I(e,t)){e.pending={kind:`layout`,views:n,replace:r};return}return Je(e,t,n,r)}let a=e.attention===`away`?`away`:i?`pinned`:`working`,o=e.suggestions.find(e=>e.id.startsWith(`layout`));o?(o.views=n,o.merged++,o.cause=a):e.suggestions.push({id:`layout:`+t.seq,views:n,cause:a,from:t.seq,merged:0})}function Je(e,t,n,r,i=`agent`){r&&(e.views=e.views.filter(Ue));let a=null;for(let t of n){let n=t.object??`artifact:`+t.artifact,r=e.views.filter(e=>e.object===n),o=r.find(e=>e.run===t.run&&(!t.version||e.version===t.version))??r.find(e=>!Ue(e));o?(o.run=t.run,o.preview=!1):e.views.push(o=N(e,n,t.run,i,!1)),t.version&&(o.version=t.version),a??=o.id}e.active=a??e.active,Ge(e,t,i===`agent`?`agent`:`person`,i===`agent`?`agent-layout`:`accept`)}function Ye(e,t,n){if(e.attention!==`working`||Object.values(e.objects).some(e=>e.kind===`run`&&e.source===t.source&&e.run>t.run&&e.state===`completed`))return;let r=e.objects[He(e,e.active)?.object??``];r&&(r.id===t.id||r.id===`source:`+t.source||r.kind===`run`&&r.source===t.source||r.kind===`artifact`&&r.versions.some(n=>n.runs.some(n=>e.objects[`run:`+n]?.source===t.source)))&&!e.escalations.some(e=>e.object===t.id)&&e.escalations.push({object:t.id,reason:t.state===`unknown`?`Outcome unknown`:t.exit===null?`Execution failed`:`Exit `+t.exit,from:n})}function Xe(e,t,n){let r={seq:Math.max(n.at,-1),at:e.time},i=()=>{e.attention===`following`&&(e.attention=`working`)};switch(n.kind){case`follow`:e.attention=`following`,e.agent&&!j(e,e.agent.object,e.agent.run)&&(Ke(e,e.agent.object,e.agent.run,`agent`),e.moves.push({seq:r.seq,by:`person`,view:e.active,rule:`catch-up`})),e.agent&&(e.agent.placement=`main`),e.pending=null;return;case`unfollow`:e.attention=`working`;return;case`open`:{if(i(),n.version!==void 0||n.run!==void 0){let t=e.views.find(e=>e.object===n.target&&e.run===(n.run??null)&&(!n.version||e.version===n.version));t||(t=N(e,n.target,n.run??null,`person`,!1),e.views.push(t)),n.version&&(t.version=n.version),t.openedBy=`person`,t.preview=!1,e.active=t.id,e.escalations=e.escalations.filter(e=>e.object!==n.target),e.moves.push({seq:r.seq,by:`person`,view:e.active,rule:`person`});return}let t=e.objects[n.target],a=e.items.find(e=>`item:`+e.id===n.target),o=t?.kind===`question`?{object:t.target,version:t.version,run:t.run}:a?.artifact;if(o){let t=e.views.find(t=>t.object===o.object&&(t.version??Qe(e,o.object,t.run))===o.version);if(t)t.preview=!1,t.openedBy=`person`,e.active=t.id;else{let t=N(e,o.object,o.run,`person`,!1);t.version=o.version,e.views.push(t),e.active=t.id}e.moves.push({seq:r.seq,by:`person`,view:e.active,rule:`person`});return}let s=A(e,n.target),c=s?.object??n.target;s?(s.preview=!1,s.openedBy=`person`,e.active=s.id):Ke(e,c,c.startsWith(`artifact:`)?$e(e,c):null,`person`),e.escalations=e.escalations.filter(e=>e.object!==c),e.moves.push({seq:r.seq,by:`person`,view:e.active,rule:`person`});return}case`select`:{i();let t=A(e,n.target);t&&(t.selection=[...n.rows],t.preview=!1,t.openedBy=`person`);return}case`type`:i();return;case`close`:{let t=A(e,n.target);e.views=e.views.filter(e=>e!==t),t&&e.active===t.id&&(e.active=e.views.at(-1)?.id??null);return}case`pin`:case`unpin`:{let t=A(e,n.target);t&&(t.pinned=n.kind===`pin`,t.preview=!1,t.openedBy=`person`);return}case`update`:{i();let t=A(e,n.target),a=t?et(e,t):null;if(!t||a===null)return;t.run=a,t.version&&=Qe(e,t.object,a)??void 0,e.views=e.views.filter(e=>e===t||e.pinned||e.object!==t.object||e.run!==a),e.active=t.id,e.moves.push({seq:r.seq,by:`person`,view:e.active,rule:`person`});return}case`leave`:if(e.attention===`away`)return;e.pending=null,e.away={from:e.step,prior:e.attention,baseline:structuredClone(e.objects),suggestions:e.suggestions.map(e=>e.id),items:JSON.stringify(e.items)},e.attention=`away`;return;case`return`:{if(!e.away)return;let t=Ze(e,e.away);e.digest=t.length?{from:e.away.from,to:e.step,lines:t}:null,e.attention=e.away.prior,e.away=null;return}case`accept`:{let t=e.suggestions.find(e=>e.id===n.suggestion);if(!t)return;e.suggestions=e.suggestions.filter(e=>e!==t),Je(e,r,t.views,!1,`person`);return}case`ask`:{i();let t=A(e,n.target),a=t?Qe(e,t.object,t.run):null;if(!t||a===null||t.run===null)return;Be(e,{id:`question:asked-`+(e.order.filter(e=>e.startsWith(`question:asked-`)).length+1),kind:`question`,name:n.text,author:null,target:t.object,version:a,run:t.run,rows:[...n.rows],document:null,state:`prepared`,fetchedBy:null,fetchedAt:null,changedAt:r.seq,touchedAt:r.seq,hidden:0});return}case`dismiss`:e.suggestions=e.suggestions.filter(e=>e.id!==n.suggestion);return;case`dismiss-digest`:e.digest=null;return;case`reveal`:e.revealed=n.target;return;case`expand`:e.expanded.includes(n.target)||e.expanded.push(n.target);return;case`collapse`:e.expanded=e.expanded.filter(e=>e!==n.target);return}}function Ze(e,t){let n=[],r={source:0,run:1,artifact:2,question:3};for(let i of[...e.order].sort((t,n)=>r[e.objects[t].kind]-r[e.objects[n].kind])){let r=e.objects[i],a=t.baseline[i];if(r.kind===`source`&&(!a||a.version!==r.version)&&n.push({kind:`source`,object:i,from:a?a.version:null,to:r.version}),r.kind===`run`&&(!a||a.state!==r.state||a.verified.length!==r.verified.length)){let t={kind:`run`,object:i,state:r.state,firstLine:r.state===`completed`?null:r.firstLine,verified:r.verified.length,earlier:[]},a=n.findIndex(t=>t.kind===`run`&&e.objects[t.object].source===r.source);if(a<0)n.push(t);else{let e=n[a];t.earlier=[...e.earlier,e.object],n[a]=t}}r.kind===`artifact`&&r.versions.length!==(a?.versions.length??0)&&n.push({kind:`artifact`,object:i,versions:r.versions.length-(a?.versions.length??0)}),r.kind===`question`&&(!a||a.state!==r.state)&&n.push({kind:`question`,object:i,state:r.state})}for(let r of e.suggestions)t.suggestions.includes(r.id)||n.push({kind:`suggestion`,id:r.id});return JSON.stringify(e.items)!==t.items&&n.push({kind:`items`,count:e.items.length}),n}var Qe=(e,t,n)=>{let r=e.objects[t];return r?.kind===`artifact`&&n!==null?r.versions.find(e=>e.runs.includes(n))?.digest??null:null},$e=(e,t)=>e.objects[t]?.versions.at(-1)?.runs.at(-1)??null;function et(e,t){let n=e.objects[t.object];if(n?.kind!==`artifact`||t.run===null||!Ue(t))return null;let r=n.versions.findIndex(e=>e.runs.includes(t.run));return r>=0&&r<n.versions.length-1?$e(e,t.object):null}function tt(e){return e.split(`
1
+ import{r as e}from"./rolldown-runtime-XKyaHtl9.js";import{n as t,t as n}from"./react-Dss-ouuy.js";import{r}from"./markdown-0ngRuTpW.js";import{A as i,C as a,D as o,E as s,O as c,S as l,T as u,_ as d,b as f,d as p,g as m,h,k as g,m as _,v,w as y,x as b,y as x}from"./canvas-BXhC8RDZ.js";import{Jt as S,S as C,a as ee,c as w,d as te,f as T,ft as E,i as ne,it as re,l as ie,m as ae,n as oe,nt as se,o as ce,ot as le,p as ue,r as de,rt as fe,s as pe,t as me,tt as he,u as ge,y as _e,yt as ve}from"./index-BHQIaDsx.js";import{a as ye,i as be,t as xe}from"./console-Dbdo-5oO.js";import{a as Se,c as Ce,i as we,l as Te,n as Ee,o as De,r as Oe,s as ke,t as Ae}from"./facts-BMO6V3-3.js";import{t as je}from"./snapshot-CAxBYPvV.js";import{t as Me}from"./explore-in-8Q5ftt-E.js";var D=e(n(),1),Ne=e(S(),1);function O(e){return e.at??e.after??null}var Pe=e=>e===null?null:Date.parse(e);function Fe(e=`following`){return{step:-1,time:null,attention:e,question:null,objects:{},order:[],views:[],active:null,agent:null,suggestions:[],escalations:[],digest:null,items:[],hidden:{catalog:0,rejected:0,retries:0},revealed:null,expanded:[],moves:[],lastMove:null,pending:null,away:null}}function Ie(e,t,n,r){e.presentationClock=r,We(e,t,{...n,seq:e.step+1})}function Le(e,t,n){Xe(e,t,{...n,at:e.step})}function Re(e,t){let n=e.time;e.presentationClock=t,e.time=new Date(t).toISOString(),F(e),e.time=n}function ze(e){for(let t of e.views)t.newer=et(e,t);let{lastMove:t,pending:n,away:r,presentationClock:i,...a}=e;return structuredClone(a)}function Be(e,t){return e.objects[t.id]||(e.objects[t.id]=t,e.order.push(t.id)),e.objects[t.id]}var k=(e,t,n)=>Be(e,{id:`source:`+t,kind:`source`,name:t,version:1,savedVersion:null,changedAt:n,touchedAt:n,hidden:0}),Ve=(e,t,n)=>Be(e,{id:`artifact:`+t,kind:`artifact`,name:t,versions:[],changedAt:n,touchedAt:n,hidden:0}),He=(e,t)=>e.views.find(e=>e.id===t),Ue=e=>e.openedBy===`person`||e.pinned,A=(e,t)=>He(e,t)??e.views.find(e=>e.object===t&&Ue(e))??e.views.find(e=>e.object===t),j=(e,t,n)=>{let r=He(e,e.active);return!!r&&r.object===t&&(n===null||r.run===n)};function M(e,t,n){let r=t;for(;He(e,r);)r+=`@`+n;return r}var N=(e,t,n,r,i)=>({id:M(e,t,n),object:t,run:n,openedBy:r,pinned:!1,preview:i,selection:[],newer:null});function We(e,t,n){e.step=n.seq,e.time=O(n)??e.time;let r=n.object?e.objects[n.object]:void 0;if(r&&(r.touchedAt=n.seq),n.outcome===`rejected`)return r?r.hidden++:e.hidden.rejected++,F(e);let i=n.effect;if(!i)return F(e);let a=t.principals[n.actor]?.kind===`agent`,o=(t,r)=>a?P(e,n,t,r):F(e);switch(i.kind){case`catalog`:return e.hidden.catalog++,F(e);case`open`:{if(i.source===null)return F(e);let t=!!e.objects[`source:`+i.source],r=k(e,i.source,n.seq);return r.version=i.version,t||(r.savedVersion=i.version),o(r.id,null)}case`edit`:{let t=k(e,i.source,n.seq);return t.version=i.version,t.changedAt=n.seq,o(t.id,null)}case`save`:{let t=k(e,i.source,n.seq);return t.savedVersion=i.version,t.changedAt=n.seq,o(t.id,null)}case`source-state`:{let t=k(e,i.source,n.seq);return t.version=i.version,t.savedVersion=i.savedVersion,t.changedAt=n.seq,F(e)}case`submit`:if(i.sourceVersion!==null&&!e.objects[`source:`+i.source]){let t=k(e,i.source,n.seq);t.version=t.savedVersion=i.sourceVersion}return Be(e,{id:`run:`+i.run,kind:`run`,name:`Run `+i.run,run:i.run,source:i.source,sourceVersion:i.sourceVersion,state:i.state??`running`,exit:null,firstLine:null,verified:[],changedAt:n.seq,touchedAt:n.seq,hidden:0}),o(`run:`+i.run,null);case`retry`:{let t=e.objects[`run:`+i.run];return t&&t.hidden++,e.hidden.retries++,F(e)}case`run-state`:case`ended`:{let t=e.objects[`run:`+i.run];return t?(i.kind===`ended`?(t.exit=i.exit,t.state=i.state??(i.exit===0?`completed`:i.exit===null?`unknown`:`failed`)):t.state=i.state,t.changedAt=n.seq,(t.state===`failed`||t.state===`unknown`)&&Ye(e,t,n.seq),t.state===`completed`&&(e.escalations=e.escalations.filter(n=>{let r=e.objects[n.object];return!(r?.kind===`run`&&r.source===t.source&&r.run<t.run)})),o(t.id,null)):F(e)}case`observe`:return o(`run:`+i.run,null);case`output`:{let n=e.objects[`run:`+i.run],r=i.stream?t.runs[i.run]?.outputs[i.stream]??``:``;(i.stream===`stderr`||i.stream&&!n.firstLine)&&(n.firstLine=tt(r));let a=e.escalations.find(e=>e.object===n.id);return a&&n.firstLine&&(a.reason=n.firstLine),o(n.id,null)}case`verified`:{let r=e.objects[`run:`+i.run],a=t.runs[i.run]?.verified??[];if(!r)return F(e);r.verified=[...i.artifacts],r.changedAt=n.seq;for(let t of i.artifacts){let r=Ve(e,t,n.seq),o=a.find(e=>e.name===t)?.digest??`unknown`,s=r.versions.find(e=>e.digest===o);s?s.runs.includes(i.run)||s.runs.push(i.run):(r.versions.push({digest:o,runs:[i.run]}),r.changedAt=n.seq)}return o(r.id,null)}case`registered`:{let t=Ve(e,i.artifact,n.seq);t.name=i.name;let r=t.versions.find(e=>e.digest===i.version);return r?i.run!==null&&!r.runs.includes(i.run)&&r.runs.push(i.run):(t.versions.push({digest:i.version,runs:i.run===null?[]:[i.run]}),t.changedAt=n.seq),F(e)}case`read`:{if(i.artifact===null)return F(e);let t=Ve(e,i.artifact,n.seq);return t.touchedAt=n.seq,o(t.id,i.run)}case`layout`:return a?qe(e,n,i.views,i.replace):F(e);case`items`:return i.question!==null&&(e.question=i.question),i.items&&(e.items=i.items),F(e);case`ask`:return Be(e,{id:i.question,kind:`question`,name:i.text,author:n.actor,target:i.target,version:i.version,run:i.run,rows:[...i.rows],document:i.document,state:`prepared`,fetchedBy:null,fetchedAt:null,changedAt:n.seq,touchedAt:n.seq,hidden:0}),F(e);case`fetched`:{let t=e.objects[i.question];return t?.kind===`question`&&(t.state!==`responded`&&(t.state=`fetched`),t.fetchedBy=n.actor,t.fetchedAt=n.seq,t.changedAt=n.seq),F(e)}case`responded`:{let t=e.objects[i.question];return t?.kind===`question`&&(t.state=`responded`,t.changedAt=n.seq),F(e)}}}function P(e,t,n,r){e.attention===`following`?j(e,n,r)?(e.agent={object:n,run:r,seq:t.seq,placement:`main`},e.pending=null):I(e,t)?(e.pending={kind:`focus`,object:n,run:r},e.agent={object:n,run:r,seq:t.seq,placement:`pending`}):(e.pending=null,Ke(e,n,r,`agent`),e.agent={object:n,run:r,seq:t.seq,placement:`main`},Ge(e,t,`agent`,`agent-focus`)):e.agent={object:n,run:r,seq:t.seq,placement:`marker`}}function F(e){if(!e.pending||e.attention!==`following`)return;let t={seq:e.step,at:e.time};if(I(e,t))return;let n=e.pending;e.pending=null,n.kind===`focus`?(Ke(e,n.object,n.run,`agent`),e.agent&&(e.agent.placement=`main`),Ge(e,t,`agent`,`agent-focus`)):Je(e,t,n.views,n.replace)}function I(e,t){let n=e.presentationClock??Pe(O(t))??Pe(e.time);return e.lastMove!==null&&n!==null&&n-e.lastMove<8e3}function Ge(e,t,n,r){n===`agent`&&(e.lastMove=e.presentationClock??Pe(O(t))??Pe(e.time)??e.lastMove),e.moves.push({seq:t.seq,by:n,view:e.active,rule:r})}function Ke(e,t,n,r,i){let a=e.views.filter(e=>e.object===t),o=r===`person`?A(e,t):a.find(e=>(n===null||e.run===n)&&(!i||e.version===i))??a.find(e=>!Ue(e));if(o&&r===`agent`&&n!==null&&(o.run=n),!o){o=N(e,t,n,r,r===`agent`);let i=r===`agent`?e.views.findIndex(e=>e.preview):-1;i>=0?e.views[i]=o:e.views.push(o)}r===`person`&&(o.preview=!1,o.openedBy=`person`),i&&(o.version=i),e.active=o.id}function qe(e,t,n,r){let i=e.views.some(t=>t.pinned&&t.id===e.active);if(e.attention===`following`&&!i){if(I(e,t)){e.pending={kind:`layout`,views:n,replace:r};return}return Je(e,t,n,r)}let a=e.attention===`away`?`away`:i?`pinned`:`working`,o=e.suggestions.find(e=>e.id.startsWith(`layout`));o?(o.views=n,o.merged++,o.cause=a):e.suggestions.push({id:`layout:`+t.seq,views:n,cause:a,from:t.seq,merged:0})}function Je(e,t,n,r,i=`agent`){r&&(e.views=e.views.filter(Ue));let a=null;for(let t of n){let n=t.object??`artifact:`+t.artifact,r=e.views.filter(e=>e.object===n),o=r.find(e=>e.run===t.run&&(!t.version||e.version===t.version))??r.find(e=>!Ue(e));o?(o.run=t.run,o.preview=!1):e.views.push(o=N(e,n,t.run,i,!1)),t.version&&(o.version=t.version),a??=o.id}e.active=a??e.active,Ge(e,t,i===`agent`?`agent`:`person`,i===`agent`?`agent-layout`:`accept`)}function Ye(e,t,n){if(e.attention!==`working`||Object.values(e.objects).some(e=>e.kind===`run`&&e.source===t.source&&e.run>t.run&&e.state===`completed`))return;let r=e.objects[He(e,e.active)?.object??``];r&&(r.id===t.id||r.id===`source:`+t.source||r.kind===`run`&&r.source===t.source||r.kind===`artifact`&&r.versions.some(n=>n.runs.some(n=>e.objects[`run:`+n]?.source===t.source)))&&!e.escalations.some(e=>e.object===t.id)&&e.escalations.push({object:t.id,reason:t.state===`unknown`?`Outcome unknown`:t.exit===null?`Execution failed`:`Exit `+t.exit,from:n})}function Xe(e,t,n){let r={seq:Math.max(n.at,-1),at:e.time},i=()=>{e.attention===`following`&&(e.attention=`working`)};switch(n.kind){case`follow`:e.attention=`following`,e.agent&&!j(e,e.agent.object,e.agent.run)&&(Ke(e,e.agent.object,e.agent.run,`agent`),e.moves.push({seq:r.seq,by:`person`,view:e.active,rule:`catch-up`})),e.agent&&(e.agent.placement=`main`),e.pending=null;return;case`unfollow`:e.attention=`working`;return;case`open`:{if(i(),n.version!==void 0||n.run!==void 0){let t=e.views.find(e=>e.object===n.target&&e.run===(n.run??null)&&(!n.version||e.version===n.version));t||(t=N(e,n.target,n.run??null,`person`,!1),e.views.push(t)),n.version&&(t.version=n.version),t.openedBy=`person`,t.preview=!1,e.active=t.id,e.escalations=e.escalations.filter(e=>e.object!==n.target),e.moves.push({seq:r.seq,by:`person`,view:e.active,rule:`person`});return}let t=e.objects[n.target],a=e.items.find(e=>`item:`+e.id===n.target),o=t?.kind===`question`?{object:t.target,version:t.version,run:t.run}:a?.artifact;if(o){let t=e.views.find(t=>t.object===o.object&&(t.version??Qe(e,o.object,t.run))===o.version);if(t)t.preview=!1,t.openedBy=`person`,e.active=t.id;else{let t=N(e,o.object,o.run,`person`,!1);t.version=o.version,e.views.push(t),e.active=t.id}e.moves.push({seq:r.seq,by:`person`,view:e.active,rule:`person`});return}let s=A(e,n.target),c=s?.object??n.target;s?(s.preview=!1,s.openedBy=`person`,e.active=s.id):Ke(e,c,c.startsWith(`artifact:`)?$e(e,c):null,`person`),e.escalations=e.escalations.filter(e=>e.object!==c),e.moves.push({seq:r.seq,by:`person`,view:e.active,rule:`person`});return}case`select`:{i();let t=A(e,n.target);t&&(t.selection=[...n.rows],t.preview=!1,t.openedBy=`person`);return}case`type`:i();return;case`close`:{let t=A(e,n.target);e.views=e.views.filter(e=>e!==t),t&&e.active===t.id&&(e.active=e.views.at(-1)?.id??null);return}case`pin`:case`unpin`:{let t=A(e,n.target);t&&(t.pinned=n.kind===`pin`,t.preview=!1,t.openedBy=`person`);return}case`update`:{i();let t=A(e,n.target),a=t?et(e,t):null;if(!t||a===null)return;t.run=a,t.version&&=Qe(e,t.object,a)??void 0,e.views=e.views.filter(e=>e===t||e.pinned||e.object!==t.object||e.run!==a),e.active=t.id,e.moves.push({seq:r.seq,by:`person`,view:e.active,rule:`person`});return}case`leave`:if(e.attention===`away`)return;e.pending=null,e.away={from:e.step,prior:e.attention,baseline:structuredClone(e.objects),suggestions:e.suggestions.map(e=>e.id),items:JSON.stringify(e.items)},e.attention=`away`;return;case`return`:{if(!e.away)return;let t=Ze(e,e.away);e.digest=t.length?{from:e.away.from,to:e.step,lines:t}:null,e.attention=e.away.prior,e.away=null;return}case`accept`:{let t=e.suggestions.find(e=>e.id===n.suggestion);if(!t)return;e.suggestions=e.suggestions.filter(e=>e!==t),Je(e,r,t.views,!1,`person`);return}case`ask`:{i();let t=A(e,n.target),a=t?Qe(e,t.object,t.run):null;if(!t||a===null||t.run===null)return;Be(e,{id:`question:asked-`+(e.order.filter(e=>e.startsWith(`question:asked-`)).length+1),kind:`question`,name:n.text,author:null,target:t.object,version:a,run:t.run,rows:[...n.rows],document:null,state:`prepared`,fetchedBy:null,fetchedAt:null,changedAt:r.seq,touchedAt:r.seq,hidden:0});return}case`dismiss`:e.suggestions=e.suggestions.filter(e=>e.id!==n.suggestion);return;case`dismiss-digest`:e.digest=null;return;case`reveal`:e.revealed=n.target;return;case`expand`:e.expanded.includes(n.target)||e.expanded.push(n.target);return;case`collapse`:e.expanded=e.expanded.filter(e=>e!==n.target);return}}function Ze(e,t){let n=[],r={source:0,run:1,artifact:2,question:3};for(let i of[...e.order].sort((t,n)=>r[e.objects[t].kind]-r[e.objects[n].kind])){let r=e.objects[i],a=t.baseline[i];if(r.kind===`source`&&(!a||a.version!==r.version)&&n.push({kind:`source`,object:i,from:a?a.version:null,to:r.version}),r.kind===`run`&&(!a||a.state!==r.state||a.verified.length!==r.verified.length)){let t={kind:`run`,object:i,state:r.state,firstLine:r.state===`completed`?null:r.firstLine,verified:r.verified.length,earlier:[]},a=n.findIndex(t=>t.kind===`run`&&e.objects[t.object].source===r.source);if(a<0)n.push(t);else{let e=n[a];t.earlier=[...e.earlier,e.object],n[a]=t}}r.kind===`artifact`&&r.versions.length!==(a?.versions.length??0)&&n.push({kind:`artifact`,object:i,versions:r.versions.length-(a?.versions.length??0)}),r.kind===`question`&&(!a||a.state!==r.state)&&n.push({kind:`question`,object:i,state:r.state})}for(let r of e.suggestions)t.suggestions.includes(r.id)||n.push({kind:`suggestion`,id:r.id});return JSON.stringify(e.items)!==t.items&&n.push({kind:`items`,count:e.items.length}),n}var Qe=(e,t,n)=>{let r=e.objects[t];return r?.kind===`artifact`&&n!==null?r.versions.find(e=>e.runs.includes(n))?.digest??null:null},$e=(e,t)=>e.objects[t]?.versions.at(-1)?.runs.at(-1)??null;function et(e,t){let n=e.objects[t.object];if(n?.kind!==`artifact`||t.run===null||!Ue(t))return null;let r=n.versions.findIndex(e=>e.runs.includes(t.run));return r>=0&&r<n.versions.length-1?$e(e,t.object):null}function tt(e){return e.split(`
2
2
  `).map(e=>e.trim()).find(Boolean)??null}var L=()=>({activity:0,runs:[],states:{},documents:{},resources:{},composition:0,questions:{}}),nt=e=>e.split(`/`).at(-1)??e;function rt(e,t,n,r,i){let a={format:`rho.replay-trace/1`,recorded:{experiment:`live`,project:e.project.id,from:``,to:``},facts:[],principals:{},sources:{},runs:{},artifacts:{}},o={},s={},c=(e,t,n,r,i,o)=>{a.principals[t]={kind:t.startsWith(`agent:`)?`agent`:t.startsWith(`browser:`)?`browser`:`operator`,name:null},a.facts.push({seq:a.facts.length,label:e,op:e,actor:t,at:n,effect:r,object:i,outcome:o?`rejected`:`returned`,...o?{reason:o}:{}})},l=e=>{let t=r.runs.indexOf(e);return t<0?null:t+1},u=new Set;for(let e of[...t].sort((e,t)=>e.acceptedAt.localeCompare(t.acceptedAt))){r.runs.includes(e.operationId)||r.runs.push(e.operationId);let t=l(e.operationId),n=e.sourceKey??e.operationId;o[`run:`+t]=e.operationId,a.runs[t]={operationId:e.operationId,source:n,sourceVersion:null,declared:e.declared.map(e=>e.path),acceptedAt:e.acceptedAt,exit:null,observedAt:null,outputs:{}};let i=JSON.stringify([e.execution,e.integrity]);r.states[e.operationId]!==i&&u.add(e.operationId),e.operationId in r.states||c(`action.accepted`,`operator`,e.acceptedAt,{kind:`submit`,run:t,source:n,sourceVersion:null,state:`unobserved`},`run:`+t),r.states[e.operationId]!==i&&c(`operation.observed`,`operator`,null,{kind:`run-state`,run:t,state:e.execution===`active`?`running`:[`completed`,`failed`,`unobserved`].includes(e.execution)?e.execution:`unknown`},`run:`+t),r.states[e.operationId]=i}for(let t of e.documents){let e=`source:`+t.path;o[e]=t.path,a.sources[t.path]={versions:{},edited:{},saved:{},authors:{}};let n=JSON.stringify([t.version,t.dirty]);r.documents[t.id]!==n&&(c(`document.observed`,`operator`,t.acknowledgedAt,{kind:`source-state`,source:t.path,version:t.version,savedVersion:t.dirty?null:t.version},e),r.documents[t.id]=n),s[`document:`+t.id]={object:e,artifact:``,run:null}}for(let n of e.resources){let e=n.provenance,i=t.find(t=>t.operationId===e.operationId),u=i?.declared.find(e=>n.path===e.path||n.path.endsWith(`/`+e.path)),d=r.resources[n.id],f=`@`+n.version,p=i?.sourceKey&&u?i.sourceKey+`/`+u.path:d?.endsWith(f)?d.slice(0,-f.length):n.id,m=`artifact:`+p,h=e.operationId?l(e.operationId):null,g={artifact:p,run:h,version:n.version};s[n.id+`@`+n.version]=g,o[m]=nt(n.path);let _=(a.artifacts[p]??={kind:n.kind,versions:{}}).versions,v=_[n.version]??={runs:[],bytes:n.bytes};h!==null&&v.runs.push(h),r.resources[n.id]!==p+`@`+n.version&&(c(`resource.registered`,`operator`,null,{kind:`registered`,artifact:p,name:nt(n.path),version:n.version,run:h},m),r.resources[n.id]=p+`@`+n.version)}for(let n of t)if(n.integrity===`verified`&&u.has(n.operationId)){let t=l(n.operationId),r=e.resources.filter(e=>e.provenance.operationId===n.operationId);a.runs[t].verified=r.map(e=>({name:s[e.id+`@`+e.version].artifact,digest:e.version,kind:e.kind})),c(`artifact.integrity.observed`,`operator`,null,{kind:`verified`,run:t,artifacts:a.runs[t].verified.map(e=>e.name)},`run:`+t)}for(let e of n.views){let t=at(e,s);t&&(s[`view:`+e.id]=t)}let d=e.activity.retainedFrom>r.activity+1;for(let t of e.activity.entries){let n=t;if(n.cursor<=r.activity)continue;let i=e.documents.find(e=>e.id===n.documentId),a=typeof n.operationId==`string`?l(n.operationId):null,o=n.resource,u=o?s[o.id+`@`+o.version]:void 0,d,f;i&&(f=`source:`+i.path),a!==null&&(f=`run:`+a),u&&(f=u.object??`artifact:`+u.artifact),n.outcome===`rejected`?c(n.method,n.principal,n.at,void 0,f,{kind:typeof n.errorKind==`string`?n.errorKind:`unrecorded`,message:null}):([`capability.index`,`capability.resolve`].includes(n.method)&&(d={kind:`catalog`}),i&&typeof n.returnedVersion==`number`&&[`document.open`,`document.read`,`document.edit`,`document.save`].includes(n.method)&&(d={kind:`open`,source:i.path,version:i.version}),a!==null&&[`action.submit`,`action.lookup`,`action.observe`,`artifact.check`,`action.output`].includes(n.method)&&(d={kind:`observe`,run:a}),n.method===`data.page`&&(d={kind:`read`,artifact:u?.artifact??null,run:u?.run??null}),c(n.method,n.principal,n.at,d,f))}if(r.activity=Math.max(r.activity,e.activity.cursor),n.version!==r.composition){let e=n.views.flatMap(e=>s[`view:`+e.id]?[s[`view:`+e.id]]:[]);c(`composition.observed`,n.author??`operator`,n.acknowledgedAt??null,{kind:`layout`,replace:!0,views:e},`layout`),r.composition=n.version}for(let t of e.annotations){let n=t,i=n.messages?.[0],a=n.anchor;if(a?.kind!==`table`||!i)continue;let o=s[a.resource.id+`@`+a.resource.version];if(!o)continue;let l=`question:`+n.annotationId,u=e.contexts.find(e=>e.responses?.some(e=>e.annotationId===n.annotationId)),d=n.messages.some(e=>e.replyTo===i.id&&e.author.startsWith(`agent:`)),f=u?.delivery===`tool-fetched`&&u.fetchedBy?.startsWith(`agent:`),p=d?`responded`:f?`fetched`:`prepared`;if(l in r.questions||c(`annotation.create`,i.author,i.at,{kind:`ask`,question:l,text:i.draft.text,target:`artifact:`+o.artifact,version:a.resource.version,run:o.run,rows:a.entities,document:null},l),r.questions[l]!==p){if(f&&c(`context.read`,u.fetchedBy,u.fetchedAt,{kind:`fetched`,question:l},l),d){let e=n.messages.find(e=>e.replyTo===i.id&&e.author.startsWith(`agent:`));c(`annotation.reply`,e.author,e.at,{kind:`responded`,question:l},l)}r.questions[l]=p}}if(i){let e=i.items.map(e=>it(e,i.vocabulary,s)),t=JSON.stringify([i.question,e]);if(r.items!==t){let n=i.items.reduce((e,t)=>!e||t.at>e.at?t:e,void 0);c(`task.map.observed`,n?.author??`operator`,n?.at??null,{kind:`items`,question:i.question,items:e},`map`),r.items=t}}return{trace:a,refs:s,names:o,gap:d}}function it(e,t,n){let r=e.artifact&&n[e.artifact.id+`@`+e.artifact.version];return{id:e.id,kind:t.kinds[e.kind]?.label??e.kind,state:t.states[e.state]?.label??e.state,title:e.title,author:e.author,...e.summary?{summary:e.summary}:{},...e.view?{view:e.view}:{},...e.from?{from:e.from}:{},...e.lines?{lines:e.lines}:{},...r&&r.run!==null?{artifact:{object:r.object??`artifact:`+r.artifact,version:e.artifact.version,run:r.run}}:{}}}function at(e,t){for(let n of Object.values(e.bindings??{})){let e=n.documentId?t[`document:`+n.documentId]:t[n.id+`@`+n.version];if(e)return e}}var R={maxViews:64,maxEvidence:256,maxCheckpointBytes:1048576},ot=e=>e.object??`artifact:`+e.artifact,st=(e,t)=>JSON.stringify(e)===JSON.stringify(t);function ct(e){let t=e.catalog?.components.find(e=>e.id===`rho.editor`),n=t?e.documents.map(e=>({id:`source:`+e.id,component:t.id,version:t.version,props:{title:e.path},bindings:{document:{kind:`live-document`,documentId:e.id}}})):[];for(let t of e.resources){let r=e.catalog?.components.find(e=>e.id===(t.kind===`table`?`rho.table`:t.kind===`media`?`rho.media`:``));if(!r)continue;let i=Object.keys(r.bindings)[0];i&&n.push({id:`object:`+t.id.slice(0,32)+`:`+t.version.slice(0,32),component:r.id,version:r.version,props:{title:t.path.split(`/`).at(-1)},bindings:{[i]:{id:t.id,version:t.version}}})}return n}function z(e,t,n,r){let i=L(),a=rt(e,t,n,i,r),o=Fe(`working`);for(let e of a.trace.facts)Ie(o,a.trace,e);return o.attention=`following`,o.suggestions=[],o.moves=[],o.views=n.views.flatMap(e=>{let t=at(e,a.refs);return t?[{id:e.id,object:ot(t),run:t.run,...t.version?{version:t.version}:{},openedBy:`agent`,pinned:!!e.protected,preview:!1,selection:[],newer:null}]:[]}),o.active=o.views[0]?.id??null,{format:1,expression:o,index:i,layout:structuredClone(n),latest:structuredClone(n),held:{},refs:a.refs,available:ct(e),trace:a.trace,evidence:a.trace.facts.slice(-R.maxEvidence),gap:a.gap,limit:``,active:n.views[0]?.id??``,names:a.names}}function B(e){let t=structuredClone(e.latest),n=new Map;for(let r of t.views){let i=e.held[r.id];i&&!st(i.bindings,r.bindings)&&n.set(r.id,`new:`+r.id.slice(0,70)+`:`+t.version)}t.views=t.views.map(e=>({...e,id:n.get(e.id)??e.id})),t.nodes&&=t.nodes.map(e=>e.kind===`view`?{...e,id:n.get(e.id)??e.id}:{...e,children:e.children.map(e=>n.get(e)??e)});for(let n of Object.values(e.held))if(!t.views.some(e=>e.id===n.id)){t.views.push(n);let e=t.nodes?.find(e=>e.kind===`group`&&e.id===t.rootId);e?.kind===`group`&&(e.children.push(n.id),e.presentation?.weights&&e.presentation.weights.push(1),t.nodes.push({...n,kind:`view`}))}t.views.length>R.maxViews?e.limit=`The 64-view presentation limit was reached. Existing views are kept; close or unpin views before accepting another layout.`:(e.layout=t,e.preview=void 0)}function V(e,t){let n=e.expression.moves.slice(t);n.some(e=>e.rule===`agent-layout`||e.rule===`accept`)&&B(e);let r=e.expression.views.find(t=>t.id===e.expression.active);if(!r||!n.length)return;let i=[...e.layout.views,...e.latest.views,...e.available??[]].find(t=>{let n=at(t,e.refs);return n&&ot(n)===r.object&&(r.run===null||n.run===r.run)&&(!r.version||n.version===r.version)});if(i){let t=i.id,n=e.layout.views.find(e=>e.id===t);if(n&&!st(n.bindings,i.bindings)&&(t=`preview:`+t.slice(0,70)+`:`+e.latest.version),!e.layout.views.some(e=>e.id===t)){if(e.layout.views.length>=R.maxViews){e.limit=`The 64-view presentation limit was reached; the new object remains in recorded evidence.`;return}let n=e.layout.views.filter(t=>t.id!==e.preview||e.held[t.id]);e.layout={...e.layout,views:[...n,{...i,id:t}]},r.preview&&(e.preview=t)}e.active=t}else if(r.object.startsWith(`run:`)){let t=e.names[r.object];if(!t)return;let n=`execution:`+t;!e.layout.views.some(e=>e.id===n)&&e.layout.views.length<R.maxViews&&(e.layout={...e.layout,views:[...e.layout.views.filter(t=>t.component!==`rho.execution`&&t.id!==e.preview||e.held[t.id]),{id:n,component:`rho.execution`,version:`1`,props:{title:t,operationId:t},bindings:{}}]},e.preview=n),e.layout.views.some(e=>e.id===n)&&(e.active=n)}}function lt(e,t,n,r,i,a){let o=rt(t,n,r,e.index,a),s=e.expression.moves.length;e.latest=structuredClone(r),e.refs=o.refs,e.names=o.names,e.trace=o.trace,e.available=ct(t),e.gap||=o.gap;for(let t of o.trace.facts)Ie(e.expression,o.trace,t,i);e.evidence.push(...o.trace.facts),e.evidence=e.evidence.slice(-R.maxEvidence),V(e,s),!r.author?.startsWith(`agent:`)&&e.layout.version!==r.version&&B(e),e.expression.moves=e.expression.moves.slice(-32)}function H(e,t){let n=e.expression.moves.length;Le(e.expression,e.trace,t),V(e,n)}function U(e,t){delete e.held[t]}function ut(e,t){let n=e.layout.views.find(e=>e.id===t);if(!n)return;e.held[t]=structuredClone(n),e.active=t;let r=at(n,e.refs);H(e,r?{kind:`open`,target:ot(r),run:r.run,version:r.version}:{kind:`unfollow`}),e.active=t}function dt(e,t){let n=e.expression.moves.length;Re(e.expression,t),V(e,n)}function ft(e){return ze(e.expression)}function pt(e,t,n,r,i=!1){let{runs:a,problem:o,readAgain:s}=Ce(n,e.project.id,e.cursor),c=e.catalog.operations.some(e=>e.method===`task.map.read`&&e.authorized&&e.state===`available`),[l,u]=(0,D.useState)(null),[d,f]=(0,D.useState)(``);(0,D.useEffect)(()=>{if(!c)return;let t=!0;return n.call(`task.map.read`,{projectId:e.project.id}).then(e=>{t&&(u(e),f(``))},e=>{t&&f(`The Agent's declared items could not be read. `+(e?.message??``))}),()=>{t=!1}},[n,e.project.id,e.cursor,c]);let p=[`rho-expression/1`,e.project.id,t.compositionId,r].join(`:`),m=(0,D.useRef)(null),h=(0,D.useRef)(!1),g=(0,D.useRef)(null),_=(0,D.useRef)(`owners`),[,v]=(0,D.useState)(0),[y,b]=(0,D.useState)(``),x=()=>{if(m.current&&sessionStorage.getItem(`rho.browser.session.v1`))try{let e=JSON.stringify(m.current);if(new TextEncoder().encode(e).length>R.maxCheckpointBytes)throw Error(`The 1 MiB return checkpoint limit was reached. Current views are retained in this tab; reload cannot restore the latest attention state.`);sessionStorage.setItem(p,e)}catch(e){b(e.message??`The return checkpoint could not be stored.`)}};(0,D.useEffect)(()=>{if(a){if(m.current){let n=m.current.active;lt(m.current,e,a,t,Date.now(),l),m.current.active!==n&&(_.current=`owners`)}else{try{let e=sessionStorage.getItem(p);if(e&&e.length<=R.maxCheckpointBytes){let n=JSON.parse(e);n.format===1&&n.layout?.compositionId===t.compositionId&&(m.current=n)}}catch{}m.current?(lt(m.current,e,a,t,Date.now(),l),H(m.current,{kind:`return`})):m.current=z(e,a,t,l),h.current&&ut(m.current,g.current&&m.current.layout.views.some(e=>e.id===g.current)?g.current:m.current.active),document.hidden&&H(m.current,{kind:`leave`})}i&&(m.current.layout=structuredClone(t),m.current.held={}),x(),v(e=>e+1)}},[e,t,a,l]),(0,D.useEffect)(()=>{let e=()=>{m.current&&(H(m.current,{kind:document.hidden?`leave`:`return`}),x(),v(e=>e+1))},t=()=>{m.current&&(H(m.current,{kind:`leave`}),x())},n=setInterval(()=>{if(m.current?.expression.pending){let e=m.current.active;dt(m.current,Date.now()),m.current.active!==e&&(_.current=`owners`),x(),v(e=>e+1)}},1e3);return document.addEventListener(`visibilitychange`,e),window.addEventListener(`pagehide`,t),()=>{t(),clearInterval(n),document.removeEventListener(`visibilitychange`,e),window.removeEventListener(`pagehide`,t)}},[p]);let S=e=>{_.current=`person`,m.current&&(e.kind===`unfollow`&&ut(m.current,m.current.active),H(m.current,e),x(),v(e=>e+1))},C=e=>{h.current=!0,g.current=e,_.current=`person`,m.current&&(ut(m.current,e),x(),v(e=>e+1))};return{state:m.current,screen:m.current?ft(m.current):null,layout:m.current?.layout??t,active:m.current?.active,movedBy:_.current,runs:a,readRuns:s,map:l,act:S,release:e=>{m.current&&(U(m.current,e),x())},hold:C,openResource:t=>{if(!m.current)return;let n=e.resources.find(e=>e.id===t.id&&e.version===t.version),r=e.compositions.flatMap(e=>e.views).find(e=>Object.values(e.bindings).some(e=>`id`in e&&e.id===t.id&&e.version===t.version)),i=e.catalog.components.find(e=>e.id===(n?.kind===`table`?`rho.table`:`rho.media`)),a=i&&Object.keys(i.bindings)[0];if(!n||!r&&(!i||!a)){b(`The linked result has no available resource viewer. Its exact reference is retained in the reply.`);return}let o=`result:`+t.id.slice(0,32)+`:`+t.version.slice(0,32);if(!m.current.layout.views.some(e=>e.id===o)){if(m.current.layout.views.length>=R.maxViews){b(`The 64-view limit was reached. The reply and linked result are retained.`);return}let e=r?{...r,id:o}:{id:o,component:i.id,version:i.version,props:{title:n.path.split(`/`).at(-1)},bindings:{[a]:t}};m.current.layout={...m.current.layout,views:[...m.current.layout.views,e]}}C(o)},problem:[o,d,y,m.current?.limit].filter(Boolean).join(` · `)}}var W=t();function mt(e){let t=n=>{let r=e.screen?.objects[n];return r?.kind===`question`?`Question about `+t(r.target):e.state?.names[n]??r?.name??n};return t}var ht={running:`running`,completed:`completed`,failed:`failed`,unknown:`outcome unknown`,unobserved:`accepted, not seen running yet`},G={prepared:`prepared, not fetched`,fetched:`fetched by the Agent`,responded:`answered by the Agent`};function K(e){return e?e.kind===`run`?ht[e.state]??e.state:e.kind===`source`?e.savedVersion!==null&&e.savedVersion!==e.version?`version ${e.version}, unsaved`:`version ${e.version}`:e.kind===`artifact`?e.versions.length===1?`1 version`:`${e.versions.length} versions`:G[e.state]??e.state:``}var q=e=>new Date(e).toLocaleTimeString([],{hour:`2-digit`,minute:`2-digit`,hourCycle:`h23`}),gt=e=>new Date(e).toLocaleDateString([],{month:`short`,day:`numeric`}),J=(e,t)=>new Date(e).toDateString()===new Date(t).toDateString(),Y=e=>{let t=Math.max(0,Math.round(e/1e3));return`${Math.floor(t/60)}:${String(t%60).padStart(2,`0`)}`},_t=e=>(J(e,new Date().toISOString())?``:gt(e)+` `)+q(e);function X({live:e,who:t=!0}){let n=e.screen,r=n.agent,i=mt(e);return r?(0,W.jsxs)(`button`,{className:`shell-agent`,"data-rho-agent":``,title:`The Agent's latest object: ${i(r.object)}`,onClick:()=>e.act({kind:`open`,target:r.object}),children:[(0,W.jsx)(`span`,{className:t?`shell-agent-who`:`visually-hidden`,children:`Agent`}),` `,(0,W.jsx)(`span`,{className:`shell-agent-object`,children:i(r.object)}),` `,(0,W.jsxs)(`span`,{className:`shell-agent-state`,children:[K(n.objects[r.object]),r.placement===`pending`?` · shows when you pause`:``]})]}):null}function vt({live:e,evidence:t,onEvidence:n,held:i,attention:a=!0}){let{screen:o,act:s}=e;if(!o||!e.state)return(0,W.jsx)(`div`,{className:`shell-bar`,role:`status`,children:`Reading workspace…`});let c=o.attention===`following`;return(0,W.jsxs)(`div`,{className:`shell-bar`,"data-attention":o.attention,children:[(0,W.jsx)(X,{live:e}),(0,W.jsx)(`span`,{className:`shell-break`}),i>0&&(0,W.jsxs)(`span`,{className:`shell-held`,role:`status`,children:[i,` updates`]}),a&&(0,W.jsxs)(`button`,{className:`shell-follow`,"aria-pressed":c,title:`Follow the Agent's current view. Your input stops following.`,onClick:()=>s({kind:c?`unfollow`:`follow`}),children:[(0,W.jsx)(r,{name:`eye`,size:14}),c?`Following Agent`:`Follow Agent`]}),a&&(0,W.jsx)(`button`,{className:`shell-quiet`,onClick:()=>s({kind:o.attention===`away`?`return`:`leave`}),children:o.attention===`away`?`Return`:`Step away`}),(0,W.jsxs)(`button`,{className:`shell-quiet shell-evidence-toggle`,"aria-expanded":t,title:`Activity: the calls recorded for this workspace`,onClick:n,children:[(0,W.jsx)(r,{name:`list`,size:15}),(0,W.jsx)(`span`,{children:`Activity`})]})]})}function Z(e,t){let n=e.map?.items.find(e=>e.id===t);return n?e.map.vocabulary.states[n.state]?.role??``:``}var Q={prepared:`Prepared · not fetched by the Agent`,fetched:`Fetched by the Agent · no linked response yet`,responded:`Answered by the Agent`};function yt({contextId:e,prepare:t}){let[n,r]=(0,D.useState)(!1),[i,a]=(0,D.useState)(``);async function o(){a(``);try{let n=e??await t();await navigator.clipboard.writeText(`Answer my question in Rho: read context ${n}. It holds the table version, the rows I asked about and my question. Reply to it with annotation.reply, and link any new result you make.`),r(!0)}catch{a(`Could not copy. Try again.`)}}return(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(`button`,{className:`agent-question-copy`,onClick:o,children:n?`Copied`:`Copy request for the Agent`}),i&&(0,W.jsx)(`span`,{role:`alert`,children:i})]})}function bt({live:e,agents:t,contexts:n=[],prepare:i,principalId:a,evidence:o,onEvidence:s,focusObject:c,onClose:l}){let u=(0,D.useRef)(null),d=(0,D.useRef)(null);(0,D.useEffect)(()=>{o&&u.current?.scrollIntoView({block:`start`})},[o]),(0,D.useEffect)(()=>{l&&d.current?.focus()},[!!l]);let f=e.screen,p=e.state,m=mt(e),h=Object.values(f?.objects??{}).find(e=>e.kind===`run`&&e.state===`running`),[g,_]=(0,D.useState)(Date.now()),[v,y]=(0,D.useState)(!1);if((0,D.useEffect)(()=>{if(!h)return;let e=setInterval(()=>_(Date.now()),1e3);return()=>clearInterval(e)},[!!h]),!f||!p)return null;let b=[...t??[]].sort((e,t)=>(e.last?.at??``).localeCompare(t.last?.at??``)).at(-1),x=b?.label||Object.values(p.trace.principals).find(e=>e.kind===`agent`&&e.name)?.name||`The Agent`,S=b?.last?.at,C=h&&e.runs?.find(e=>e.operationId===m(h.id)&&e.execution===`active`),ee=C?C.startedAt??C.acceptedAt:void 0,w=Object.values(f.objects).filter(e=>e.kind===`question`).reverse(),te=f.items.find(e=>c&&e.artifact?.object===c)??f.items.find(t=>Z(e,t.id)===`working`),T=te?.artifact&&Object.values(f.objects).find(e=>e.kind===`run`&&e.run===te.artifact.run),E=T?e.runs?.find(e=>e.operationId===m(T.id)):void 0,ne=e=>E?.sourceKey?Object.values(p.refs).find(t=>t.artifact===E.sourceKey+`/`+e&&t.run===T?.run):void 0,re=v?w:w.slice(0,1);return!h&&!f.items.length&&!E?.declared.length&&!w.length&&!o?null:(0,W.jsxs)(`aside`,{ref:d,className:`agent-column`+(l?` drawer`:``),"aria-label":x,"data-scroll-region":``,tabIndex:0,onKeyDown:e=>{l&&e.key===`Escape`&&(e.stopPropagation(),l())},children:[(0,W.jsxs)(`section`,{className:`agent-card`,children:[(0,W.jsxs)(`header`,{className:`agent-card-head`,children:[(0,W.jsx)(`span`,{className:`agent-dot`+(h?` running`:``),"aria-hidden":`true`}),(0,W.jsx)(`strong`,{children:x}),(0,W.jsx)(`span`,{className:`agent-card-meta`,children:h?`running`+(ee?` `+Y(g-Date.parse(ee)):``):S?`last action `+_t(S):`no recorded action`}),l&&(0,W.jsx)(`button`,{className:`icon-button agent-close`,"aria-label":`Close `+x,onClick:l,children:(0,W.jsx)(r,{name:`close`,size:14,stroke:2})})]}),(0,W.jsx)(X,{live:e,who:!1}),f.items.length>0&&(0,W.jsx)(`section`,{className:`agent-items`,"aria-label":`The Agent's notes`,children:(0,W.jsx)(`ol`,{children:f.items.map(t=>{let n=Z(e,t.id),r=t===te,i=t.artifact?.object,a=i&&!t.title.includes(m(i))?m(i):``;return(0,W.jsxs)(`li`,{className:`agent-item `+(n||`declared`)+(r?` current`:``),"data-fact":`agent`,children:[(0,W.jsx)(`span`,{className:`agent-item-mark`,"aria-hidden":`true`}),i?(0,W.jsx)(`button`,{className:`agent-item-title`,onClick:()=>e.act({kind:`open`,target:i,run:t.artifact.run,version:t.artifact.version}),children:t.title}):(0,W.jsx)(`span`,{className:`agent-item-title`,children:t.title}),(0,W.jsxs)(`span`,{className:`agent-item-meta`,children:[a,n===`done`?(0,W.jsxs)(`span`,{className:`visually-hidden`,children:[a&&` · `,t.state]}):(a&&` · `)+t.state]}),r&&(t.summary||t.lines?.length)?(0,W.jsxs)(`div`,{className:`agent-item-body`,children:[t.summary&&(0,W.jsx)(`p`,{children:t.summary}),t.lines?.map((e,t)=>(0,W.jsxs)(`p`,{children:[e.label?e.label+`: `:``,e.text,e.judgment?` · the Agent's reading`:``]},t))]}):null]},t.id)})})})]}),E&&E.declared.length>0&&(0,W.jsxs)(`section`,{className:`agent-card agent-outputs`,"aria-label":`Outputs of `+E.operationId,children:[(0,W.jsxs)(`header`,{className:`agent-card-head`,children:[(0,W.jsx)(`strong`,{children:`Outputs`}),(0,W.jsx)(`span`,{className:`agent-card-sub`,children:E.operationId}),(0,W.jsx)(`span`,{className:`agent-card-count`,children:E.declared.length})]}),(0,W.jsx)(`ul`,{children:E.declared.map(t=>{let n=ne(t.path),i=n?`artifact:`+n.artifact:null,a=!!n&&i===c&&f.views.find(t=>t.id===e.active)?.version===n.version;return(0,W.jsxs)(`li`,{className:a?`current`:void 0,children:[(0,W.jsx)(r,{name:Oe(t.path),size:15,stroke:1.8}),i&&n?(0,W.jsx)(`button`,{className:`agent-output-name`,"aria-current":a||void 0,onClick:()=>e.act({kind:`open`,target:i,run:n.run,version:n.version}),children:t.path}):(0,W.jsx)(`span`,{className:`agent-output-name`,children:t.path}),E.integrity===`verified`&&t.present?(0,W.jsx)(`span`,{className:`agent-output-check`,title:`Bytes verified`,children:(0,W.jsx)(r,{name:`check`,size:14,stroke:2})}):t.present?null:(0,W.jsx)(`span`,{className:`agent-output-state`,children:`not on disk`})]},t.path)})})]}),w.length>0&&(0,W.jsxs)(`section`,{className:`agent-card`,"aria-label":`Your questions`,children:[(0,W.jsxs)(`header`,{className:`agent-card-head`,children:[(0,W.jsx)(`strong`,{children:`Your questions`}),w.length>1&&(0,W.jsx)(`button`,{className:`shell-quiet agent-card-meta`,"aria-expanded":v,onClick:()=>y(e=>!e),children:v?`Newest only`:`${w.length-1} earlier`})]}),(0,W.jsx)(`ul`,{className:`agent-questions`,children:re.map(t=>(0,W.jsxs)(`li`,{className:`agent-question `+t.state,children:[(0,W.jsx)(`p`,{"data-user-text":``,children:t.name}),(0,W.jsx)(`button`,{className:`shell-link`,onClick:()=>e.act({kind:`open`,target:t.target}),children:m(t.target)}),(()=>{let e=n.find(e=>e.responses?.some(e=>`question:`+e.annotationId===t.id)),r=t.state===`prepared`&&!e?`Question retained · context not confirmed`:Q[t.state]??t.state,a=e?.contextId??(i?void 0:null);return(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(`span`,{className:`agent-question-state`,children:r}),t.state!==`responded`&&a!==null&&(0,W.jsx)(yt,{contextId:a,prepare:()=>i(t.id.slice(9))})]})})()]},t.id))})]}),(0,W.jsxs)(`section`,{ref:u,className:`agent-card agent-record`,children:[(0,W.jsxs)(`button`,{className:`shell-quiet agent-record-toggle`,"aria-expanded":o,onClick:s,children:[`Recorded calls`,(0,W.jsx)(`span`,{className:`agent-card-meta`,children:p.evidence.length})]}),o&&(0,W.jsx)(Tt,{live:e,principalId:a,notes:!1})]})]})}function xt(e){let t=e.screen,n=[];e.problem&&n.push({key:`problem`,kind:`problem`,text:e.problem});for(let e of t?.escalations??[])n.push({key:`e:`+e.object,kind:`escalation`,object:e.object,text:e.reason});for(let e of t?.suggestions??[])n.push({key:`s:`+e.id,kind:`suggestion`,suggestion:e.id,text:`The Agent arranged a new layout`+(e.merged?` · ${e.merged+1} changes combined`:``)});return n}function St({live:e,items:t,onHide:n}){let[r,i]=(0,D.useState)(0),a=mt(e),o=t[Math.min(r,t.length-1)];return o?(0,W.jsxs)(`div`,{className:`shell-interruption `+o.kind,"data-rho-layer":`transient`,"data-rho-interruption":``,role:o.kind===`problem`?`alert`:`status`,children:[o.object&&(0,W.jsx)(`button`,{className:`shell-link`,onClick:()=>e.act({kind:`open`,target:o.object}),children:a(o.object)}),(0,W.jsx)(`span`,{className:`shell-interruption-text`,children:o.text}),o.suggestion&&(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(`button`,{onClick:()=>e.act({kind:`accept`,suggestion:o.suggestion}),children:`Open update`}),(0,W.jsx)(`button`,{onClick:()=>e.act({kind:`dismiss`,suggestion:o.suggestion}),children:`Dismiss`})]}),t.length>1&&(0,W.jsxs)(`button`,{className:`shell-quiet`,onClick:()=>i(e=>(e+1)%t.length),children:[`Next of `,t.length]}),!o.suggestion&&(0,W.jsx)(`button`,{className:`shell-quiet`,"aria-label":`Hide until it changes`,onClick:()=>n(o.key+`:`+o.text),children:`Hide`})]}):null}function Ct(e){switch(e.kind){case`source`:return e.from===null?`edited, now version ${e.to}`:`version ${e.from} → ${e.to}`;case`run`:return[ht[e.state]??e.state,e.verified?`${e.verified} file${e.verified===1?``:`s`} verified`:``,e.firstLine??``,e.earlier.length?`${e.earlier.length} earlier run${e.earlier.length===1?``:`s`}`:``].filter(Boolean).join(` · `);case`artifact`:return e.versions===1?`1 new version`:`${e.versions} new versions`;case`question`:return G[e.state]??e.state;case`suggestion`:return`The Agent arranged a new layout`;case`items`:return`the Agent's notes changed · ${e.count} now`}}function wt({live:e}){let t=e.screen,n=mt(e),[r,i]=(0,D.useState)(!1);if(!t?.digest)return null;let a=t.digest.lines.filter(e=>e.kind!==`suggestion`||!t.suggestions.length),o=r?a:a.slice(0,a.length>6?5:6);return a.length?(0,W.jsxs)(`section`,{className:`shell-digest`,"data-rho-layer":`transient`,"data-rho-digest":``,"aria-label":`Changes while away`,...r?{"data-scroll-region":``,tabIndex:0}:{},children:[(0,W.jsxs)(`header`,{children:[(0,W.jsx)(`strong`,{children:`While you were away`}),(0,W.jsx)(`button`,{className:`shell-quiet`,onClick:()=>e.act({kind:`dismiss-digest`}),children:`Dismiss`})]}),(0,W.jsx)(`ul`,{children:o.map((t,r)=>(0,W.jsxs)(`li`,{children:[`object`in t?(0,W.jsx)(`button`,{className:`shell-link`,onClick:()=>e.act({kind:`open`,target:t.object}),children:n(t.object)}):null,(0,W.jsx)(`span`,{children:Ct(t)})]},r))}),o.length<a.length&&(0,W.jsxs)(`button`,{className:`shell-quiet`,onClick:()=>i(!0),children:[a.length-o.length,` more`]})]}):null}function Tt({live:e,principalId:t,notes:n=!0}){let r=e.state,i=mt(e);if(!r)return null;let a=e=>{if(t&&e===t)return`You`;let n=r.trace.principals[e],i=n?.kind??(e.startsWith(`agent:`)?`agent`:e.startsWith(`browser:`)?`browser`:void 0);return i===`agent`?n?.name??`The Agent`:i===`browser`?`Another browser tab`:e===`operator`?`Rho`:n?.name??`Unrecorded principal`},o=new Date().toISOString(),s=r.evidence.map((e,t)=>({f:e,i:t})).sort((e,t)=>(t.f.at??``).localeCompare(e.f.at??``)||t.i-e.i);return(0,W.jsxs)(`section`,{className:`shell-evidence`,"data-rho-layer":`transient`,"data-rho-evidence":``,"data-scroll-region":``,tabIndex:0,"aria-label":`Recorded activity`,children:[n&&e.screen&&e.screen.items.length>0&&(0,W.jsxs)(`section`,{"aria-label":`The Agent's notes`,className:`shell-notes`,children:[(0,W.jsxs)(`h3`,{children:[`The Agent's notes`,e.screen.question?` · `+e.screen.question:``]}),(0,W.jsx)(`ul`,{children:e.screen.items.map(t=>(0,W.jsxs)(`li`,{"data-fact":`agent`,children:[(0,W.jsx)(`strong`,{children:t.title}),(0,W.jsxs)(`span`,{children:[` · `,t.kind,` · `,t.state]}),t.artifact&&(0,W.jsx)(`button`,{className:`shell-link`,onClick:()=>e.act({kind:`open`,target:t.artifact.object,run:t.artifact.run,version:t.artifact.version}),children:i(t.artifact.object)}),t.summary&&(0,W.jsx)(`p`,{children:t.summary}),t.lines?.map((e,t)=>(0,W.jsxs)(`p`,{children:[e.label?e.label+`: `:``,e.text,e.judgment?` · the Agent's reading`:``]},t))]},t.id))})]}),r.gap&&(0,W.jsx)(`p`,{role:`status`,children:`Earlier activity is outside the retained window. No missing calls were reconstructed.`}),(0,W.jsx)(`ol`,{children:(()=>{let e=``;return s.map(({f:t,i:n})=>{let r=t.at&&!J(t.at,o)?gt(t.at):``,s=r===e?``:e=r;return(0,W.jsxs)(D.Fragment,{children:[s&&(0,W.jsx)(`li`,{className:`shell-evidence-day`,children:s}),(0,W.jsxs)(`li`,{children:[(0,W.jsx)(`time`,{children:t.at?new Date(t.at).toLocaleTimeString([],{hour:`2-digit`,minute:`2-digit`,second:`2-digit`,hourCycle:`h23`}):`Time not recorded`}),(0,W.jsx)(`strong`,{children:a(t.actor)}),(0,W.jsxs)(`span`,{className:`shell-evidence-what`,children:[(0,W.jsx)(`code`,{children:t.op}),` `,t.object?i(t.object):`Object not recorded`,t.outcome===`rejected`?` · refused (${t.reason?.kind??`reason not recorded`})`:``]})]})]},n)})})()}),(0,W.jsxs)(`p`,{children:[`The latest `,r.evidence.length,` facts are kept (limit `,R.maxEvidence,`). Calls an adapter refused on its own are not recorded here.`]})]})}var Et=e=>Array.isArray(e?.type)?void 0:e?.type,Dt=e=>!!e&&(Et(e)===`string`||!!e.oneOf?.some(Dt)||!!e.anyOf?.some(Dt)),Ot=e=>!!e&&(Et(e)===`null`||Array.isArray(e.type)&&e.type.includes(`null`)||!!e.oneOf?.some(Ot)||!!e.anyOf?.some(Ot)),kt=e=>typeof e==`string`?/^[a-f0-9]{64}$/.test(e):!!e&&typeof e==`object`&&Object.values(e).some(kt);function At(e,t){if(!e||typeof e!=`object`||Array.isArray(e))return null;let n=e;if(typeof n.path==`string`)return n.kind===`disk`?`${n.path} · the saved file the Agent proposed`:n.path;if(typeof n.documentId==`string`){let e=t.documents.find(e=>e.id===n.documentId);return e?`${e.path} · version ${n.version}`:`A document that is not open in this project`}let r=n.resource??n;if(typeof r.id==`string`){let e=t.resources.find(e=>e.id===r.id&&e.version===r.version);return e?`${e.path} · the version the Agent proposed`:`A file version that is not registered here`}return null}function jt(e,t){if(!e)return`json`;if(kt(t)&&(!Array.isArray(t)||t.every(e=>typeof e==`string`||kt(e))))return`reference`;if(e.enum?.every(e=>typeof e==`string`))return`choice`;let n=Et(e);return n===`string`&&(t===void 0||typeof t==`string`)?`text`:!n&&Dt(e)&&Ot(e)&&(t===null||typeof t==`string`)?`optional-text`:(n===`number`||n===`integer`)&&(t===void 0||typeof t==`number`)?`number`:n===`boolean`&&(t===void 0||typeof t==`boolean`)?`boolean`:n===`array`&&Array.isArray(t)&&t.every(e=>typeof e==`string`)&&Dt(e.items)?`lines`:n===`object`&&e.properties&&!e.oneOf&&!e.anyOf&&typeof t==`object`&&t&&!Array.isArray(t)?`object`:`json`}function Mt({view:e,snapshot:t,client:n,live:r}){let i=e.props,a=t.catalog.actions.find(e=>e.id===i.action&&e.version===i.actionVersion),o=a?.inputSchema??{},[s,c]=(0,D.useState)(()=>structuredClone(i.input??{})),[l,u]=(0,D.useState)({}),[d,f]=(0,D.useState)(null),[p,m]=(0,D.useState)(!1),[h,g]=(0,D.useState)(!1),[_,v]=(0,D.useState)(``),[y,b]=(0,D.useState)(!1),x=e=>t.catalog.operations.some(t=>t.method===e&&t.state===`available`&&t.authorized),S=r.runs?.find(e=>e.operationId===i.operationId),C=(0,D.useMemo)(()=>({projectId:t.project.id,operationId:i.operationId,action:i.action,actionVersion:i.actionVersion,input:s,...i.repairOf?{repairOf:i.repairOf}:{}}),[t.project.id,i.operationId,i.action,i.actionVersion,i.repairOf,s]);(0,D.useEffect)(()=>{if(S||!x(`protocol.validate`))return;let e=!0;m(!0);let t=setTimeout(()=>{n.call(`protocol.validate`,{method:`action.submit`,body:C},AbortSignal.timeout(15e3)).then(t=>{e&&f(t.problems.map(e=>({path:e.path,message:e.message,fix:e.fix})))},()=>{e&&f(null)}).finally(()=>{e&&m(!1)})},250);return()=>{e=!1,clearTimeout(t)}},[C,S,n]);let ee=Object.keys(l).length>0||p||!!d?.length;async function w(){g(!0),v(``),b(!1);try{await n.call(`action.submit`,C,AbortSignal.timeout(6e4))}catch(e){let t=e?.error;t?.kind?v(t.message??`The owner did not accept this run.`):b(!0)}finally{g(!1),r.readRuns()}}let te=e=>(d??[]).filter(t=>t.path===e||t.path.startsWith(e+`/`)||t.path.startsWith(e+`.`)),T=e=>`/input/`+e;return a?(0,W.jsxs)(`section`,{className:`shell-action`,"data-owner-body":``,"data-rho-action-form":i.operationId,"aria-label":i.title??i.action,children:[(0,W.jsx)(`h2`,{children:i.title??a.presentation?.displayName??i.action}),(0,W.jsxs)(`p`,{className:`shell-action-identity`,children:[(0,W.jsx)(`code`,{children:i.operationId}),` · `,a.presentation?.displayName??i.action,` `,i.actionVersion,i.repairOf?(0,W.jsxs)(W.Fragment,{children:[` · repairs `,(0,W.jsx)(`code`,{children:i.repairOf})]}):null]}),S?(0,W.jsxs)(`p`,{role:`status`,"data-rho-submitted":i.operationId,children:[`Submitted · `,(0,W.jsx)(`span`,{className:`shell-state `+S.execution,children:Te(S.execution)}),` `,(0,W.jsx)(`button`,{className:`shell-link`,onClick:()=>{let e=De(r,S.operationId);e&&r.act({kind:`open`,target:e})},children:`Open run`})]}):(0,W.jsxs)(`form`,{onSubmit:e=>{e.preventDefault(),!ee&&!h&&w()},children:[Object.entries(o.properties??{}).filter(([e])=>e in s||o.required?.includes(e)).map(([e,n])=>(0,W.jsx)(Nt,{name:e,path:T(e),schema:n,value:s[e],snapshot:t,problems:te(T(e)),onValue:t=>c(n=>({...n,[e]:t})),onUnparsed:(e,t)=>u(n=>{let r={...n};return t===null?delete r[e]:r[e]=t,r})},e)),d&&te(`/input`).filter(e=>!Object.keys(o.properties??{}).some(t=>e.path.startsWith(T(t)))).map((e,t)=>(0,W.jsxs)(`p`,{role:`alert`,className:`shell-field-problem`,children:[e.message,e.fix?` · `+e.fix:``]},t)),_&&(0,W.jsx)(`p`,{role:`alert`,className:`shell-field-problem`,children:_}),y&&(0,W.jsxs)(`p`,{role:`status`,"data-rho-lost":i.operationId,children:[`The reply did not arrive, and the project's runs do not show `,i.operationId,` yet. Sending it again cannot start a second run.`]}),(0,W.jsxs)(`div`,{className:`shell-action-submit`,children:[(0,W.jsx)(`button`,{type:`submit`,disabled:ee||h||!x(`action.submit`),children:h?`Submitting…`:y?`Send again`:`Run`}),p?(0,W.jsx)(`span`,{role:`status`,children:`Checking…`}):d?.length?(0,W.jsxs)(`span`,{role:`status`,children:[d.length,` to fix`]}):null]})]})]}):(0,W.jsxs)(`section`,{className:`shell-action`,"data-owner-body":``,"aria-label":i.title??i.action,children:[(0,W.jsx)(`h2`,{children:i.title??i.action}),(0,W.jsxs)(`p`,{role:`status`,children:[i.action,` `,i.actionVersion,` is not registered in this project.`]})]})}function Nt({name:e,path:t,schema:n,value:r,snapshot:i,problems:a,onValue:o,onUnparsed:s}){let c=(0,D.useId)(),l=jt(n,r),u=a.filter(e=>l!==`object`||e.path===t),[d,f]=(0,D.useState)(()=>JSON.stringify(r??null,null,2)),[p,m]=(0,D.useState)(``),h=u.length||p?c+`-problem`:void 0,g={id:c,"aria-invalid":!!h||void 0,"aria-describedby":h},_;if(l===`object`){let c=r;return(0,W.jsxs)(`fieldset`,{className:`shell-field-group`,children:[(0,W.jsx)(`legend`,{children:e}),Object.entries(n.properties??{}).filter(([e])=>e in c||n.required?.includes(e)).map(([e,n])=>(0,W.jsx)(Nt,{name:e,path:t+`/`+e,schema:n,value:c[e],snapshot:i,problems:a.filter(n=>n.path===t+`/`+e||n.path.startsWith(t+`/`+e+`/`)),onValue:t=>o({...c,[e]:t}),onUnparsed:s},e)),u.map((e,t)=>(0,W.jsxs)(`p`,{role:`alert`,className:`shell-field-problem`,children:[e.message,e.fix?` · `+e.fix:``]},t))]})}if(l===`reference`){let t=(Array.isArray(r)?r:[r]).map(e=>typeof e==`string`?kt(e)?`A pinned version`:e:At(e,i)??`A pinned reference`);return(0,W.jsxs)(`div`,{className:`shell-field`,children:[(0,W.jsx)(`span`,{className:`shell-field-name`,id:c,children:e}),(0,W.jsx)(`ul`,{className:`shell-field-references`,"aria-labelledby":c,"data-rho-reference":e,children:t.map((e,t)=>(0,W.jsx)(`li`,{children:e},t))}),u.length>0&&(0,W.jsx)(`p`,{role:`alert`,className:`shell-field-problem`,children:u.map(e=>e.message+(e.fix?` · `+e.fix:``)).join(` · `)})]})}return _=l===`choice`?(0,W.jsx)(`select`,{...g,value:String(r??``),onChange:e=>o(e.target.value),children:n.enum.map(e=>(0,W.jsx)(`option`,{value:e,children:e},e))}):l===`text`?(0,W.jsx)(`input`,{...g,value:String(r??``),onChange:e=>o(e.target.value)}):l===`optional-text`?(0,W.jsx)(`input`,{...g,value:typeof r==`string`?r:``,onChange:e=>o(e.target.value===``?null:e.target.value)}):l===`number`?(0,W.jsx)(`input`,{...g,type:`number`,value:r===void 0?``:String(r),min:n.minimum,max:n.maximum,step:Et(n)===`integer`?1:`any`,onChange:e=>o(e.target.value===``?void 0:Number(e.target.value))}):l===`boolean`?(0,W.jsx)(`input`,{...g,type:`checkbox`,checked:r===!0,onChange:e=>o(e.target.checked)}):l===`lines`?(0,W.jsx)(`textarea`,{...g,rows:Math.min(8,Math.max(2,r.length+1)),value:r.join(`
3
3
  `),onChange:e=>o(e.target.value===``?[]:e.target.value.split(`
4
4
  `))}):(0,W.jsx)(`textarea`,{...g,className:`shell-field-json`,rows:Math.min(10,Math.max(2,d.split(`
5
- `).length)),value:d,spellCheck:!1,onChange:e=>{f(e.target.value);try{o(JSON.parse(e.target.value)),m(``),s(t,null)}catch{m(`Not valid JSON yet`),s(t,e.target.value)}}}),(0,W.jsxs)(`div`,{className:`shell-field`+(l===`boolean`?` inline`:``),children:[(0,W.jsxs)(`label`,{htmlFor:c,children:[e,l===`lines`?` · one per line`:l===`json`?` · JSON`:``]}),_,h&&(0,W.jsx)(`p`,{id:c+`-problem`,role:`alert`,className:`shell-field-problem`,children:[p,...u.map(e=>e.message+(e.fix?` · `+e.fix:``))].filter(Boolean).join(` · `)})]})}function Pt({view:e,process:t,client:n,snapshot:i,children:a}){let o=t.every.find(t=>be(t.path)===e.id);if(!o)return(0,W.jsx)(W.Fragment,{children:a});let s=o.path,c=t.files.find(e=>e.path===s),l=o.versions,u=c?.versions.length??0,d=c?.versions.at(-1),f=Object.values(e.bindings??{}).some(e=>e.kind===`live-document`),p=e=>t.setAt(e>=l.length?null:l[e].at),m=t.holds(s);return(0,W.jsxs)(`div`,{className:`process-frame`,children:[m&&(0,W.jsx)(ve,{className:`process-holds`,holds:m}),(0,W.jsx)(`div`,{className:`process-version`,"data-fact":`observed`,children:l.length?(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(`span`,{children:d?`Version ${u} of ${l.length} · kept ${E(d.at)}`:`Not kept yet`}),l.length>1&&(0,W.jsxs)(`span`,{className:`process-version-steps`,children:[(0,W.jsx)(`button`,{className:`icon-button`,"aria-label":`Earlier version of `+o.title,disabled:u<=1,onClick:()=>p(u-2),children:(0,W.jsx)(`span`,{className:`flip`,children:(0,W.jsx)(r,{name:`chevron`,size:13})})}),(0,W.jsx)(`button`,{className:`icon-button`,"aria-label":`Later version of `+o.title,disabled:t.at===null&&u>=l.length,onClick:()=>p(u),children:(0,W.jsx)(r,{name:`chevron`,size:13})})]})]}):(0,W.jsx)(`span`,{children:t.at===null?`No version of this file was kept; it shows as it is now.`:`No version of this file was kept.`})}),t.at!==null&&f?d?(0,W.jsx)(`div`,{className:`process-replay-file`,children:(0,W.jsx)(je,{client:n,projectId:i.project.id,resource:d.resource,path:s})}):l.length?(0,W.jsxs)(`p`,{className:`process-note`,children:[`The work had reached this file by `,E(t.at,!0),`; its first version was kept at `,E(l[0].at,!0),`.`,(0,W.jsxs)(`button`,{className:`text-button`,onClick:()=>p(0),children:[`Go to `,E(l[0].at,!0)]})]}):(0,W.jsxs)(`p`,{className:`process-note`,children:[`The work had reached this file by `,E(t.at,!0),`, but no version of it was kept, so it cannot be shown as it was then.`,(0,W.jsx)(`button`,{className:`text-button`,onClick:()=>t.setAt(null),children:`Show it now`})]}):a]})}var Ft=e=>{let t=e.getBoundingClientRect();return{x:t.left,y:t.bottom+4,above:t.top-4}};function It({at:e,label:t,anchor:n,onClose:r,className:i,role:a=`menu`,children:o}){let s=(0,D.useRef)(null);(0,D.useLayoutEffect)(()=>{let t=s.current,n=t.offsetWidth,r=innerHeight-e.y-8,i=(e.above??e.y)-8,a=r<Math.min(t.scrollHeight,320)&&i>r;t.style.left=Math.max(8,Math.min(e.x,innerWidth-n-8))+`px`,t.style.maxHeight=(a?i:r)+`px`,a?t.style.bottom=innerHeight-(e.above??e.y)+`px`:t.style.top=e.y+`px`,t.querySelector(`button:not(:disabled)`)?.focus({preventScroll:!0})},[]),(0,D.useEffect)(()=>{let e=e=>{let t=e.target;!s.current?.contains(t)&&!n?.contains(t)&&r(!1)},t=()=>r(!1);return document.addEventListener(`pointerdown`,e,!0),addEventListener(`resize`,t),addEventListener(`blur`,t),()=>{document.removeEventListener(`pointerdown`,e,!0),removeEventListener(`resize`,t),removeEventListener(`blur`,t)}},[n]);function c(e){let t=[...s.current.querySelectorAll(`button:not(:disabled)`)],n=t.indexOf(document.activeElement),i={ArrowDown:n+1,ArrowUp:n-1,Home:0,End:t.length-1}[e.key];e.key===`Escape`?(e.preventDefault(),e.stopPropagation(),r(!0)):e.key===`Tab`?r(!1):i!==void 0&&t.length&&(e.preventDefault(),t[(i+t.length)%t.length].focus())}return(0,Ne.createPortal)((0,W.jsx)(`div`,{ref:s,className:`floating-menu`+(i?` `+i:``),role:a,"aria-label":t,onKeyDown:c,onClick:e=>{e.target.closest(`button`)&&r(!1)},children:o}),document.body)}function Lt({items:e}){return(0,W.jsx)(W.Fragment,{children:e.map(e=>(0,W.jsxs)(`button`,{role:`menuitem`,onClick:e.run,children:[(0,W.jsx)(r,{name:e.icon,size:15}),(0,W.jsx)(`span`,{children:e.label}),e.keys&&(0,W.jsx)(`kbd`,{children:e.keys})]},e.id))})}var Rt=`application/x-rho-view`,zt=(e,t)=>JSON.stringify(e)===JSON.stringify(t),Bt=e=>e&&`group`in e?e.group:null;function Vt(e){let t=e.currentTarget.getBoundingClientRect(),n=(e.clientX-t.left)/t.width,r=(e.clientY-t.top)/t.height,[i,a]=[[`left`,n],[`right`,1-n],[`top`,r],[`bottom`,1-r]].sort((e,t)=>e[1]-t[1])[0];return a<.25?i:`center`}var Ht=new WeakMap;function Ut(e,t){let n=document.activeElement,r=n instanceof HTMLElement&&e.contains(n)?n:Ht.get(e);Ht.delete(e),e.parentElement!==t&&t.appendChild(e),r&&e.contains(r)&&document.activeElement!==r&&r.focus({preventScroll:!0})}function Wt(e,t){if(e.parentElement!==t)return;let n=document.activeElement;n instanceof HTMLElement&&e.contains(n)&&Ht.set(e,n),t.removeChild(e)}function Gt({container:e,id:t,labelledBy:n}){let r=(0,D.useRef)(null);return(0,D.useLayoutEffect)(()=>{let t=r.current;return Ut(e,t),()=>Wt(e,t)},[e]),(0,W.jsx)(`div`,{ref:r,id:t,className:`shell-panel`,role:`tabpanel`,"aria-labelledby":n})}function Kt(e,t,n=!0){(0,D.useLayoutEffect)(()=>{let t=e.current;if(!t)return;let n=()=>{let e=t.scrollLeft>1,n=t.scrollLeft+t.clientWidth<t.scrollWidth-1;e||n?t.dataset.overflow=e&&n?`both`:e?`start`:`end`:delete t.dataset.overflow};n();let r=new ResizeObserver(n),i=new MutationObserver(n);return r.observe(t),i.observe(t,{childList:!0,subtree:!0,characterData:!0}),t.addEventListener(`scroll`,n,{passive:!0}),()=>{r.disconnect(),i.disconnect(),t.removeEventListener(`scroll`,n)}},[e,n]),(0,D.useEffect)(()=>{e.current?.querySelector(`[aria-selected="true"]`)?.scrollIntoView({block:`nearest`,inline:`nearest`})},[e,t])}function qt({group:e,name:t,selected:n,onSelect:i,onHeader:a,render:o,drag:s,tools:c}){let l=(0,D.useRef)(null),[u,d]=(0,D.useState)(null);Kt(l,n);let f=`shell-`+e.id.replace(/[^A-Za-z0-9_-]/g,`_`),p=Math.max(0,e.views.indexOf(n)),m=()=>[...l.current?.querySelectorAll(`[role=tab]`)??[]];function h(t){let n=e.views.length,r={ArrowRight:(p+1)%n,ArrowLeft:(p-1+n)%n,Home:0,End:n-1}[t.key];r!==void 0&&(t.preventDefault(),i(e.views[r]),m()[r]?.focus())}function g(e,t){e.key===`Delete`&&c?.close?(e.preventDefault(),c.close(t)):(e.key===`ContextMenu`||e.key===`F10`&&e.shiftKey)&&c?.menu&&(e.preventDefault(),d({id:t,at:Ft(e.currentTarget),from:e.currentTarget}))}function _(e,t){c?.menu&&(e.preventDefault(),d({id:t,at:{x:e.clientX,y:e.clientY},from:e.currentTarget}))}let v=e=>{let t=u?.from;d(null),e&&t?.isConnected&&t.focus()},y=s?.dragging?.kind===`group`&&s.dragging.id===e.id;function b(t){if(!s?.dragging||y)return;t.preventDefault(),t.dataTransfer.dropEffect=`move`;let n=[...l.current?.querySelectorAll(`.shell-tab`)??[]].findIndex(e=>{let n=e.getBoundingClientRect();return t.clientX<n.left+n.width/2}),r={group:e.id,zone:`tab`,before:n<0?null:e.views[n]};zt(s.target,r)||s.over(r)}function x(t){if(!s?.dragging||y)return;t.preventDefault(),t.dataTransfer.dropEffect=`move`;let n={group:e.id,zone:Vt(t)};zt(s.target,n)||s.over(n)}let S=t=>{s?.dragging&&s.target&&Bt(s.target)===e.id&&(t.preventDefault(),s.drop(s.target))},C=s?.target&&`group`in s.target&&s.target.group===e.id?s.target:null,ee=s?.dragging?.kind===`view`?s.dragging.id:null,w=!!s&&!!c?.movable;return(0,W.jsxs)(`section`,{className:`shell-group`,"data-group":e.id,"data-dragging":y?``:void 0,"data-maximized":c?.maximized?``:void 0,children:[(0,W.jsxs)(`div`,{className:`shell-tabbar`,children:[(0,W.jsxs)(`div`,{className:`shell-tabstrip`,style:{"--tabs":e.views.length},onDragOver:b,onDrop:S,"data-drop":C?.zone===`tab`&&C.before===null?`end`:void 0,children:[(0,W.jsx)(`div`,{ref:l,className:`shell-tabs`,role:`tablist`,"aria-label":t,onKeyDown:h,children:e.views.map((e,t)=>(0,W.jsxs)(`div`,{className:`shell-tab`,"data-dragging":ee===e?``:void 0,"data-drop":C?.zone===`tab`&&C.before===e?`before`:void 0,"data-closable":c?.close?``:void 0,children:[(0,W.jsx)(`button`,{id:f+`-tab-`+t,role:`tab`,"aria-selected":e===n,"aria-controls":f+`-panel`,tabIndex:e===n?0:-1,title:o.label(e),onClick:()=>i(e),onKeyDown:t=>g(t,e),onContextMenu:t=>_(t,e),"aria-keyshortcuts":c?.close?`Delete`:void 0,onMouseDown:e=>{e.button===1&&c?.close&&e.preventDefault()},onAuxClick:t=>{t.button===1&&c?.close&&(t.preventDefault(),c.close(e))},draggable:!!s,onDragStart:t=>{s&&(t.stopPropagation(),t.dataTransfer.effectAllowed=`move`,t.dataTransfer.setData(Rt,e),s.start({kind:`view`,id:e}))},onDragEnd:()=>s?.end(),children:o.title(e)}),c?.close&&e===n&&(0,W.jsx)(`button`,{className:`shell-tab-close`,tabIndex:-1,"aria-hidden":`true`,title:`Close `+o.label(e),draggable:!1,onClick:()=>c.close(e),children:(0,W.jsx)(r,{name:`close`,size:12,stroke:2})})]},e))}),c?.add&&(0,W.jsx)(Jt,{name:t,content:c.add}),(0,W.jsx)(`div`,{className:`shell-tabs-fill`,"aria-hidden":`true`,"data-movable":w?``:void 0,title:w?`Drag to move these views together. Double-click to maximize.`:c?.maximized?`Double-click to show every group`:void 0,draggable:w,onDoubleClick:()=>(w||c?.maximized)&&c?.onMaximize?.(),onDragStart:t=>{w&&(t.dataTransfer.effectAllowed=`move`,t.dataTransfer.setData(Rt,e.id),l.current&&t.dataTransfer.setDragImage(l.current,16,16),s.start({kind:`group`,id:e.id}))},onDragEnd:()=>s?.end()})]}),(0,W.jsx)(`div`,{className:`shell-header-slot`,ref:a}),c?.maximized&&(0,W.jsxs)(`button`,{className:`shell-restore`,title:`Show every group again`,onClick:c.onMaximize,children:[(0,W.jsx)(r,{name:`restore`,size:14}),`Restore`]})]}),(0,W.jsxs)(`div`,{className:`shell-body`,children:[(0,W.jsx)(Gt,{container:o.container(n),id:f+`-panel`,labelledBy:f+`-tab-`+p},n),s?.dragging&&!y&&(0,W.jsx)(`div`,{className:`shell-drop`,"data-zone":C&&C.zone!==`tab`?C.zone:void 0,onDragOver:x,onDrop:S,"aria-hidden":`true`,onDragLeave:e=>{C&&!e.currentTarget.contains(e.relatedTarget)&&s.over(null)},children:(0,W.jsx)(`div`,{className:`shell-drop-preview`})})]}),u&&c?.menu&&(0,W.jsx)(It,{at:u.at,anchor:u.from,label:o.label(u.id),onClose:v,children:(0,W.jsx)(Lt,{items:c.menu(u.id)})})]})}function Jt({name:e,content:t}){let n=(0,D.useRef)(null),[i,a]=(0,D.useState)(null);return(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(`button`,{ref:n,className:`shell-tab-add`,"aria-label":`Add a view to `+e,title:`Add a view here`,"aria-haspopup":`dialog`,"aria-expanded":!!i,onClick:e=>a(i?null:Ft(e.currentTarget)),children:(0,W.jsx)(r,{name:`plus`,size:15,stroke:1.8})}),i&&(0,W.jsx)(It,{at:i,anchor:n.current,label:`Add a view to `+e,role:`dialog`,className:`add-into`,onClose:e=>{a(null),e&&n.current?.focus()},children:t()})]})}function Yt({region:e,weights:t,onResize:n,label:r,children:i}){let a=(0,D.useRef)(null),o=e.axis===`horizontal`,s=t.reduce((e,t)=>e+t,0),c=o?{less:`ArrowLeft`,more:`ArrowRight`}:{less:`ArrowUp`,more:`ArrowDown`};function l(e,r){let i=r.key===c.less?-.05:r.key===c.more?.05:r.key===`Home`?-1:+(r.key===`End`);i&&(r.preventDefault(),n(y(t,e,i)))}function u(e,r){let i=a.current;if(!i)return;r.currentTarget.setPointerCapture(r.pointerId);let s=o?i.clientWidth:i.clientHeight,c=o?r.clientX:r.clientY,l=t,u=t=>n(y(l,e,((o?t.clientX:t.clientY)-c)/s)),d=r.currentTarget,f=()=>{d.removeEventListener(`pointermove`,u),d.removeEventListener(`pointerup`,f),d.removeEventListener(`pointercancel`,f)};d.addEventListener(`pointermove`,u),d.addEventListener(`pointerup`,f),d.addEventListener(`pointercancel`,f)}let d=[];return i.forEach((e,n)=>{if(n){let e=t.slice(0,n).reduce((e,t)=>e+t,0);d.push((0,W.jsx)(`div`,{className:`shell-divider`,role:`separator`,tabIndex:0,"aria-orientation":o?`vertical`:`horizontal`,"aria-label":r(n),"aria-valuemin":0,"aria-valuemax":100,"aria-valuenow":Math.round(e/s*100),onKeyDown:e=>l(n-1,e),onPointerDown:e=>u(n-1,e)},`divider-`+n))}d.push((0,W.jsx)(`div`,{className:`shell-pane`,style:{flex:`${t[n]} 1 0`},children:e},`pane-`+n))}),(0,W.jsx)(`div`,{ref:a,className:`shell-split`,"data-axis":e.axis,"data-split":e.id,children:d})}var Xt={minSplitPx:640};function Zt({composition:e,snapshot:t,client:n,onAbout:y,contextTarget:S,principalId:E,onShowContext:ve,feedbackContextActive:be,openView:Ce,onCommands:Te,agentTarget:De,onShowAgent:Oe,presence:je,onPersonMoved:O,onConversation:Pe,onExplore:Fe,onObject:Ie,empty:Le,prepared:Re,onPrepare:ze,bar:Be=!0,barTarget:k,attention:Ve=!0,following:He=!1,arrange:Ue=!0,addView:A}){let j=ye(),M=pt(t,e,n,E,!!j),N=M.layout;async function We(e){let r=t.annotations.find(t=>t.annotationId===e)?.version??1;return(await n.call(`context.create`,{projectId:t.project.id,changeId:r===1?e:e+`@`+r,expectedVersion:0,annotations:[{annotationId:e,version:r}]},AbortSignal.timeout(3e4))).contextId}let P=(0,D.useMemo)(()=>a(N),[N]),F=(0,D.useMemo)(()=>i(P),[P]),I=(0,D.useMemo)(()=>new Map(N.views.map(e=>[e.id,e])),[N]),[Ge,Ke]=(0,D.useState)(()=>matchMedia(`(max-width: 767px)`).matches);(0,D.useEffect)(()=>{let e=matchMedia(`(max-width: 767px)`),t=()=>Ke(e.matches);return e.addEventListener(`change`,t),()=>e.removeEventListener(`change`,t)},[]);let qe=(0,D.useRef)(null),[Je,Ye]=(0,D.useState)(!1);(0,D.useLayoutEffect)(()=>{let e=qe.current;if(!e)return;let t=new ResizeObserver(([e])=>{e.contentRect.width&&Ye(e.contentRect.width<Xt.minSplitPx)});return t.observe(e),()=>t.disconnect()},[]);let[Xe,Ze]=(0,D.useState)({}),[Qe,$e]=(0,D.useState)(F[0]??``),et=e=>e.views.includes(Qe)?Qe:e.views.includes(Xe[e.id])?Xe[e.id]:e.views[0],tt=e=>{let t=d(P,e);t&&Ze(n=>({...n,[t.id]:e})),$e(e)},L=e=>{M.hold(e),tt(e)},nt=e=>{let t=N.views.find(t=>Object.values(t.bindings??{}).some(t=>`id`in t&&t.id===e.id&&t.version===e.version));t?L(t.id):M.openResource(e)},[rt,it]=(0,D.useState)(!1),[at,R]=(0,D.useState)([]),ot=xt(M),st=ot.filter(e=>!at.includes(e.key+`:`+e.text));(0,D.useEffect)(()=>{if(j||!M.active||!I.has(M.active))return;let e=document.activeElement?.closest(`[data-owner-view]`)?.dataset.ownerView;M.movedBy===`owners`&&e&&e!==M.active&&I.has(e)&&(V||d(P,e)?.id===d(P,M.active)?.id)?M.hold(e):tt(M.active)},[M.active,P]);let ct=(0,D.useRef)(``);(0,D.useEffect)(()=>{Ce&&ct.current!==Ce&&I.has(Ce)&&(ct.current=Ce,He?tt(Ce):L(Ce))},[Ce,I]);let z=F.includes(Qe)?Qe:F[0]??``,B=P?g(P):[],V=Ge||Je&&B.length>1,[lt,H]=(0,D.useState)(null),U=!V&&B.length>1?B.find(e=>e.id===lt)??null:null;(0,D.useEffect)(()=>{U&&z&&!U.views.includes(z)&&H(null)},[z]);let ut=V?z?[z]:[]:U?[et(U)]:B.map(et),[dt,ft]=(0,D.useState)({version:N.version,values:{}}),mt=dt.version===N.version?dt.values:{},[ht,G]=(0,D.useState)(``),K=e=>(Ue||!e.startsWith(`composition.`))&&t.catalog.operations.some(t=>t.method===e&&t.state===`available`&&t.authorized),q=e.rootId&&e.nodes?.length?{rootId:e.rootId,nodes:e.nodes}:null,gt=(0,D.useRef)(null),J=(0,D.useRef)(e);J.current=gt.current&&gt.current.compositionId===e.compositionId&&gt.current.version>e.version?{...e,...gt.current}:e;let Y=()=>J.current.rootId&&J.current.nodes?.length?{rootId:J.current.rootId,nodes:J.current.nodes}:null,_t=e=>{gt.current={compositionId:e.compositionId,version:e.version,rootId:e.rootId,nodes:e.nodes},J.current={...J.current,...gt.current}},X=e=>`${e}-${crypto.randomUUID().slice(0,8)}`,Z=e=>G(e instanceof Error?e.message:`The layout change was not accepted.`);async function Q(e){if(!e)return!1;G(``);try{return _t(await n.call(`composition.apply`,{projectId:t.project.id,compositionId:J.current.compositionId,expectedVersion:J.current.version,changeId:`layout-`+crypto.randomUUID(),operations:[{op:`replace`,rootId:e.rootId,nodes:e.nodes}]},AbortSignal.timeout(3e4))),!0}catch(e){return Z(e),!1}}async function yt(){G(``);try{_t(await n.call(`composition.undo`,{projectId:t.project.id,compositionId:J.current.compositionId,expectedVersion:J.current.version,changeId:`layout-undo-`+crypto.randomUUID()},AbortSignal.timeout(3e4)))}catch(e){Z(e)}}async function Ct(e,r){let i=Y()?.nodes.find(t=>t.kind===`group`&&t.children?.includes(e));if(!i)return;G(``);let a=X(`view`);try{await n.call(`composition.apply`,{projectId:t.project.id,compositionId:J.current.compositionId,expectedVersion:J.current.version,changeId:`layout-beside-`+crypto.randomUUID(),operations:[{op:`insert`,parentId:i.id,index:i.children.indexOf(e)+1,node:{id:a,kind:`view`,...r}}]},AbortSignal.timeout(3e4)).then(e=>_t(e)),L(a)}catch(e){Z(e)}}let[Tt,Et]=(0,D.useState)(null),[Dt,Ot]=(0,D.useState)(!1),kt=ze?Re??null:Tt,At=ze??Et,jt=ne(t)&&(j?!!Fe:!!q);async function Nt(e,r,i,a){if(j)Fe?.(r,i);else{G(``),Ot(!0);try{let o=N.views.find(e=>e.component===ce)?.id;if(!o){let t=I.get(e),n=Y(),r=`notebook`,i=t&&n&&l(n,t,X),a=i&&p(i,pe(r),e,`right`,X);if(!K(`composition.apply`)||!a){G(`The Notebook could not be placed beside this view.`);return}if(!await Q(a))return;o=r}a?At(w(r,i,a.dirty)):await C(n,t.project.id,r,i),O?.(),L(o)}catch(e){Z(e)}finally{Ot(!1)}}}let[Ft,It]=(0,D.useState)(null);(0,D.useEffect)(()=>{Ft&&I.has(Ft)&&(It(null),L(Ft))},[Ft,I]);function Lt(e,r){j?Ie?.(e,r):(G(``),oe(n,t.project.id,N.compositionId,e,r,qe.current?.clientWidth).then(e=>{O?.(),It(e)},Z))}function Rt(e,r){le(e,r);let i=N.views.find(e=>e.component===ie.servers)?.id;i?L(i):(G(``),de(n,t.project.id,N.compositionId,`servers`).then(e=>{O?.(),It(e)},Z))}let zt=(0,D.useRef)(Promise.resolve()),Bt=(0,D.useRef)(async()=>{});Bt.current=async({viewId:e,language:r,code:i,purpose:a})=>{G(``);let o=N.views.find(e=>e.component===ce)?.id;if(o){let t=d(P,o);t&&t.id!==d(P,e)?.id&&Ze(e=>({...e,[t.id]:o}))}else{let t=I.get(e),n=Y(),r=t&&n&&l(n,t,X),i=r&&p(r,pe(`notebook`,`console`),e,`bottom`,X);K(`composition.apply`)&&i&&await Q(i)}let s=zt.current.then(()=>n.call(`kernel.run`,{projectId:t.project.id,language:r,code:i,purpose:a,changeId:`script-`+crypto.randomUUID()}));zt.current=s.catch(()=>{}),await s.catch(Z)};function Vt(e,t){let n=Y(),r=n&&o(n,e,t);r&&K(`composition.apply`)&&Q(r)}let Ht=(0,D.useContext)(ae),Zt=!j&&!!q&&ne(t),Qt=(0,D.useMemo)(()=>Zt?{...Ht,runCode:e=>Bt.current(e)}:Ht,[Ht,Zt]);function $t(e,r,i){At({key:crypto.randomUUID(),language:e,code:r,note:`From the ${i} view. Build on it, then press Run.`});let a=N.views.find(e=>e.component===ce)?.id;a?L(a):j||me(n,t.project.id,N.compositionId,null).then(e=>L(e),Z)}let en=j?t.conversations?.find(e=>e.conversationId===j.conversationId)?.principal??null:null,tn=j?j.whole.turns.filter(e=>e.conversationId===j.conversationId).map(e=>e.start):[],nn={openValue:Lt,openRemote:Rt,toNotebook:(e,t,n)=>$t(e,t,n),prepared:kt,taken:()=>At(null),setProps:Vt,has:e=>N.views.some(t=>t.component===e),scope:j?{principal:en,since:tn.length?Math.min(...tn):null,at:j.at}:void 0,openConversation:Pe},rn=(0,D.useRef)(void 0);function an(e,t){ft(n=>({version:N.version,values:{...n.version===N.version?n.values:{},[e]:t}})),clearTimeout(rn.current),q&&K(`composition.apply`)&&(rn.current=setTimeout(()=>{let n=Y();Q(n&&u(n,e,t))},600))}(0,D.useEffect)(()=>()=>clearTimeout(rn.current),[]);let[on,sn]=(0,D.useState)(null);function cn(e){let t=on?.item;sn(null);let n=Y();if(!t||!n)return;let r=null,i;if(t.kind===`group`){let a=B.find(e=>e.id===t.id),o=m(t.id);if(!a)return;i=et(a),r=`edge`in e?f(n,o,e.edge,X):v(n,o,m(e.group),e.zone===`tab`?`center`:e.zone,e.zone===`tab`?e.before:null,X)}else{let a=I.get(t.id);if(!a||`group`in e&&e.zone===`center`&&d(P,a.id)?.id===e.group)return;let o=l(n,a,X);i=a.id,r=o?`edge`in e?f(o,a.id,e.edge,X):e.zone===`tab`?x(o,a.id,m(e.group),e.before,X):e.zone===`center`?x(o,a.id,m(e.group),null,X):h(o,a.id,m(e.group),e.zone,X):null}r&&(O?.(),i&&L(i),Q(r))}let ln=!!q&&K(`composition.apply`),$=ln?{dragging:on?.item??null,target:on?.target??null,start:e=>{H(null),sn({item:e,target:null})},end:()=>sn(null),over:e=>sn(t=>t&&{...t,target:e}),drop:cn}:void 0,[un,dn]=(0,D.useState)(null);(0,D.useEffect)(()=>{un&&e.version>un.version&&dn(null)},[e.version]),(0,D.useEffect)(()=>{if(!un)return;let e=setTimeout(()=>dn(null),1e4);return()=>clearTimeout(e)},[un]);async function fn(e,t){let n=Y(),r=n;for(let t of e)M.release(t),r&&=_(r,t)??r;O?.(),r&&r!==n&&await Q(r)&&dn({label:t,version:J.current.version})}let pn=e=>{let t=I.get(e);t&&fn([e],T(t))};async function mn(){let e=un;dn(null),e&&J.current.version===e.version&&await yt()}function hn(e){let t=I.get(e),n=Y(),r=d(P,e);if(!t||!n||!r)return[];let i=l(n,t,X),a=[{id:`close`,label:`Close`,icon:`close`,keys:`Del`,run:()=>pn(e)}],o=r.views.filter(t=>t!==e);o.length&&a.push({id:`close-others`,label:o.length===1?`Close the other tab`:`Close the ${o.length} other tabs`,icon:`close`,run:()=>void fn(o,o.length===1?T(I.get(o[0])):`${o.length} views`)});let s=n=>{let r=Y(),i=r&&l(r,t,X),a=i&&c(i,e,n,X);a&&(O?.(),L(e),Q(a))};return i&&c(i,e,`horizontal`,X)&&a.push({id:`split-right`,label:`Split right`,icon:`layout`,run:()=>s(`horizontal`)},{id:`split-down`,label:`Split down`,icon:`layout`,run:()=>s(`vertical`)}),B.length>1&&a.push(U?{id:`restore`,label:`Show every group`,icon:`restore`,run:()=>H(null)}:{id:`maximize`,label:`Maximize this group`,icon:`fit`,run:()=>{L(e),H(r.id)}}),a}let gn=e=>ln?{close:pn,menu:hn,add:A?()=>A(m(e.id)):void 0,movable:!U&&B.length>1,maximized:U?.id===e.id,onMaximize:()=>H(t=>t===e.id?null:e.id)}:void 0,_n=_e.entries.find(e=>e.component===`rho.feedback`),vn=!!t.feedback&&_n?.requiredOperations.every(e=>t.catalog.operations.some(t=>t.method===e&&t.authorized&&t.state===`available`)),[yn,bn]=(0,D.useState)(null),[xn,Sn]=(0,D.useState)(!1);(0,D.useEffect)(()=>{bn(null),Sn(!1)},[t.project.id,N.compositionId,t.feedback?.taskId,E]);let Cn=(0,D.useRef)(new Set),wn=(0,D.useRef)(new Set),Tn=(0,D.useRef)([]);for(let e of wn.current)I.has(e)||wn.current.delete(e);let En=ut.filter(e=>e&&I.has(e));Tn.current=[...En,...Tn.current.filter(e=>I.has(e)&&!En.includes(e))];let Dn=S&&be&&yn&&!xn?1:0;Cn.current=new Set;for(let e of[...Tn.current,...F])Cn.current.size<8-Dn&&!Cn.current.has(e)&&te(I.get(e),t)&&Cn.current.add(e);for(let e of ut)wn.current.add(e);let On=vn?e=>{Sn(Cn.current.size>=8),bn(e),ve()}:void 0,kn=(0,D.useRef)(new Map);for(let e of kn.current.keys())I.has(e)||kn.current.delete(e);let An=e=>{let t=kn.current.get(e);return t||(t=document.createElement(`div`),t.className=`shell-view`,t.dataset.ownerView=e,kn.current.set(e,t)),t},[jn,Mn]=(0,D.useState)({}),Nn=(0,D.useRef)(new Map),Pn=(0,D.useCallback)(e=>{let t=Nn.current.get(e);return t||(t=t=>Mn(n=>n[e]===t?n:{...n,[e]:t}),Nn.current.set(e,t)),t},[]),Fn=e=>V?jn.narrow??null:jn[d(P,e)?.id??``]??null,In=(0,D.useRef)(new Map);for(let e of In.current.keys())I.has(e)||In.current.delete(e);let Ln=e=>{let t=In.current.get(e);return t||(t=document.createElement(`div`),t.className=`shell-view-header`,t.dataset.ownerHeader=e,In.current.set(e,t)),t};(0,D.useLayoutEffect)(()=>{for(let[e,t]of In.current){let n=ut.includes(e)?Fn(e):null;n?Ut(t,n):t.parentElement&&Wt(t,t.parentElement)}});let Rn=e=>{let r=I.get(e),i=ut.includes(e);if(r.component===`rho.action`)return(0,W.jsx)(Mt,{view:r,snapshot:t,client:n,live:M});if(r.component===`rho.console`)return(0,W.jsx)(xe,{client:n,snapshot:t});if(r.component===`rho.execution`){let i=String(r.props.operationId??e);return(0,W.jsx)(Ae,{snapshot:t,client:n,operationId:i,runs:M.runs,readRuns:M.readRuns,firstLine:Se(M,i),opener:e=>()=>nt(e),onOpenRun:e=>we(M,e),chain:!0})}let a=ke(r,t.resources),o=r.bindings?.document,c=o?.kind===`live-document`?t.documents.find(e=>e.id===o.documentId):void 0,l=re(c?.path),u=a?.kind===`table`&&he(fe(a))?fe(a):null,d=jt&&i&&(u||c&&l)?(0,Ne.createPortal)(u?(0,W.jsx)(Me,{languages:[`r`,`python`],busy:Dt,title:e=>`${j?`Open it on your workspace with the Notebook beside it, and load `:`Load `}${u.split(`/`).at(-1)} as it is on disk now into the ${se[e]} session as a new value${j?``:`, with the Notebook beside it`}`,onExplore:t=>void Nt(e,u,t,null)}):(0,W.jsx)(Me,{languages:[l],busy:Dt,title:e=>`${j?`Open it on your workspace with the Notebook beside it, and put `:`Put `}a line that runs ${c.path.split(`/`).at(-1)} into the ${se[e]} Notebook's line, for you to check and run`,onExplore:t=>void Nt(e,c.path,t,{dirty:c.dirty})}),Ln(e),`explore-`+e):null,f=t.catalog.plugins.find(e=>e.id===`annotations`),p=a?.kind===`table`&&f?.projectEnabled&&f.dependenciesSatisfied&&f.state===`available`?_e.entries.find(e=>e.component===`rho.feedback`)?.TableQuestion:void 0,m=(0,W.jsx)(ge,{active:i,params:{view:r,snapshot:t,client:n,principalId:E,compositionId:N.compositionId,compositionVersion:N.version,contextTarget:e===z&&!be?S:null,headerTarget:i?Ln(e):null,renderAllowed:Cn.current.has(e),onAbout:y,onRequestFeedback:On,onOpenBeside:q&&K(`composition.apply`)&&q.nodes.some(t=>t.id===e)?t=>void Ct(e,t):void 0}});return j?(0,W.jsxs)(W.Fragment,{children:[d,(0,W.jsx)(Pt,{view:r,process:j,client:n,snapshot:t,children:m})]}):a?(0,W.jsxs)(W.Fragment,{children:[d,(0,W.jsx)(Ee,{live:M,snapshot:t,resource:a,viewId:e,onOpenRef:nt,children:p&&(0,W.jsx)(p,{projectId:t.project.id,viewId:e,resource:a,snapshot:t,client:n,principalId:E,headerTarget:Ln(e),selectionScope:s(r),onOpenResource:nt,requestFeedback:On?()=>On(e):void 0},a.id+a.version+e)}),m]}):(0,W.jsxs)(W.Fragment,{children:[d,m]})},zn={label:e=>T(I.get(e)),container:An,title:e=>{let n=I.get(e);return(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(r,{name:ue(n,t),size:14,stroke:2}),(0,W.jsx)(`span`,{className:`shell-tab-name`,children:T(n)}),je?.viewId===e&&(0,W.jsxs)(`span`,{className:`agent-presence`+(je.live?` live`:``),title:je.label,children:[(0,W.jsx)(`span`,{className:`pulse-dot`,"aria-hidden":`true`}),je.verb]})]})}},Bn=e=>B.length===1?`Views`:`Views ${B.findIndex(t=>t.id===e)+1} of ${B.length}`,Vn=e=>{let t=e.kind===`tabs`?et(e):i(e)[0];return t?T(I.get(t)):`view`},Hn=e=>e.kind===`tabs`?(0,W.jsx)(qt,{group:e,name:Bn(e.id),selected:et(e),onSelect:t=>{t!==et(e)&&O?.(),L(t)},onHeader:Pn(e.id),render:zn,drag:$,tools:gn(e)},e.id):(0,W.jsx)(Yt,{region:e,weights:mt[e.id]??e.weights,onResize:t=>an(e.id,t),label:t=>`Resize ${Vn(e.children[t-1])} and ${Vn(e.children[t])}`,children:e.children.map(Hn)},e.id);(0,D.useEffect)(()=>{if(!Te)return;let n=[],r=I.get(z),i=r?T(r):``;if(q&&r&&K(`composition.apply`)&&(q.nodes.some(e=>e.id===z)||te(r,t))){let e=z,t=(e,t,a)=>{let o=l(q,r,X);o&&a(o)&&n.push({id:e,label:t,icon:`layout`,meta:i,run:()=>{let e=Y(),t=e&&l(e,r,X),n=t&&a(t);n&&Q(n)}})};t(`layout-split-right`,`Split right`,t=>c(t,e,`horizontal`,X)),t(`layout-split-down`,`Split down`,t=>c(t,e,`vertical`,X)),t(`layout-next`,`Move to the next group`,t=>b(t,e,1,X)),t(`layout-previous`,`Move to the previous group`,t=>b(t,e,-1,X)),n.push({id:`layout-close`,label:`Close view`,icon:`close`,meta:i,run:()=>pn(e)})}K(`composition.undo`)&&e.history?.length&&n.push({id:`layout-undo`,label:`Undo layout change`,icon:`refresh`,run:()=>void yt()}),Te(n.length?{label:`Layout`,commands:n}:null)},[z,e,t.catalog,N.views]),(0,D.useEffect)(()=>()=>Te?.(null),[]);let Un=(0,D.useId)(),Wn=(0,D.useRef)(null);Kt(Wn,z,V);function Gn(e){let t=F.indexOf(z),n=F.length,r={ArrowRight:(t+1)%n,ArrowLeft:(t-1+n)%n,Home:0,End:n-1}[e.key];r!==void 0&&(e.preventDefault(),L(F[r]),e.currentTarget.querySelectorAll(`[role=tab]`)[r]?.focus())}let Kn=M.screen?.views.find(e=>e.id===z)?.object??null,qn=()=>{it(e=>!e),Oe?.(),M.act({kind:`reveal`,target:rt?null:M.screen?.agent?.object??`workspace`})},Jn=Be&&(0,W.jsx)(vt,{live:M,evidence:rt,held:ot.length-st.length,onEvidence:qn,attention:Ve});return(0,W.jsx)(ae.Provider,{value:Qt,children:(0,W.jsx)(ee.Provider,{value:nn,children:(0,W.jsxs)(`section`,{className:`workspace shell`,"aria-label":`Layout`,children:[Jn&&(k?(0,Ne.createPortal)(Jn,k):k===void 0&&Jn),De&&(0,Ne.createPortal)((0,W.jsx)(bt,{live:M,agents:t.agents,contexts:t.contexts,prepare:We,principalId:E,evidence:rt,onEvidence:qn,focusObject:Kn}),De),(0,W.jsx)(St,{live:M,items:st,onHide:e=>R(t=>[...t,e])}),ht&&(0,W.jsxs)(`div`,{className:`shell-interruption problem`,"data-rho-layer":`transient`,"data-rho-interruption":``,role:`alert`,children:[(0,W.jsx)(`span`,{className:`shell-interruption-text`,children:ht}),(0,W.jsx)(`button`,{className:`shell-quiet`,onClick:()=>G(``),children:`Dismiss`})]}),(0,W.jsx)(wt,{live:M}),(0,W.jsxs)(`div`,{ref:qe,className:`shell-stage`,onPointerDownCapture:e=>M.hold(e.target.closest(`[data-owner-view]`)?.dataset.ownerView??z),onKeyDownCapture:e=>{M.hold(z),!e.metaKey&&!e.ctrlKey&&e.key.length===1&&O?.()},onCompositionStartCapture:()=>M.hold(z),children:[S&&be&&yn&&vn&&_n&&t.feedback?.draftDocumentId&&(0,Ne.createPortal)(xn?(0,W.jsxs)(`section`,{className:`unavailable`,role:`status`,children:[(0,W.jsx)(`h3`,{children:`Close a view before opening feedback`}),(0,W.jsx)(`p`,{children:`Existing views and input are kept within this layout's view limit.`})]}):(0,W.jsx)(_n.View,{viewId:`feedback:`+yn,view:{id:`feedback:`+yn,component:_n.component,version:_n.componentVersion,props:{title:`Your question`,taskId:t.feedback.taskId,sourceSelectionScope:I.get(yn)?s(I.get(yn)):{kind:`shared`,id:yn}},bindings:{draft:{kind:`live-document`,documentId:t.feedback.draftDocumentId}}},projectId:t.project.id,snapshot:t,client:n,active:!0,principalId:E,contextTarget:null,feedbackConfiguration:{...t.feedback,draftDocumentId:t.feedback.draftDocumentId}},[t.project.id,t.feedback.taskId,yn,E].join(`:`)),S),P?V?(0,W.jsxs)(`section`,{className:`shell-group`,children:[(0,W.jsxs)(`div`,{className:`shell-tabbar`,children:[(0,W.jsx)(`div`,{ref:Wn,className:`shell-tabs`,role:`tablist`,"aria-label":`Views`,onKeyDown:Gn,children:F.map((e,t)=>(0,W.jsxs)(`div`,{className:`shell-tab`,"data-closable":ln?``:void 0,children:[(0,W.jsx)(`button`,{id:Un+t,role:`tab`,"aria-selected":e===z,"aria-controls":Un+`panel`,tabIndex:e===z?0:-1,"aria-keyshortcuts":ln?`Delete`:void 0,onClick:()=>{e!==z&&O?.(),L(e)},onKeyDown:t=>{t.key===`Delete`&&ln&&(t.preventDefault(),pn(e))},children:(0,W.jsx)(`span`,{className:`shell-tab-name`,children:T(I.get(e))})}),ln&&e===z&&(0,W.jsx)(`button`,{className:`shell-tab-close`,tabIndex:-1,"aria-hidden":`true`,title:`Close `+T(I.get(e)),onClick:()=>pn(e),children:(0,W.jsx)(r,{name:`close`,size:12,stroke:2})})]},e))}),ln&&A&&(0,W.jsx)(Jt,{name:`Views`,content:()=>A(m(d(P,z)?.id??P.id))})]}),(0,W.jsx)(`div`,{className:`shell-header-slot shell-header-narrow`,ref:Pn(`narrow`)}),z&&(0,W.jsx)(Gt,{container:An(z),id:Un+`panel`,labelledBy:Un+F.indexOf(z)},z)]}):Hn(U??P):Le??(0,W.jsxs)(`div`,{className:`empty`,children:[(0,W.jsx)(`h2`,{children:`No views in this layout`}),(0,W.jsx)(`p`,{children:`The saved layout is empty. No view is created automatically.`})]}),$?.dragging&&!V&&(0,W.jsxs)(`div`,{className:`shell-edges`,"aria-hidden":`true`,children:[[`left`,`right`,`top`,`bottom`].map(e=>(0,W.jsx)(`div`,{className:`shell-edge`,"data-side":e,"data-over":$.target&&`edge`in $.target&&$.target.edge===e?``:void 0,onDragOver:t=>{t.preventDefault(),t.dataTransfer.dropEffect=`move`,$.target&&`edge`in $.target&&$.target.edge===e||$.over({edge:e})},onDragLeave:e=>{e.currentTarget.contains(e.relatedTarget)||$.over(null)},onDrop:t=>{t.preventDefault(),$.drop({edge:e})}},e)),$.target&&`edge`in $.target&&(0,W.jsx)(`div`,{className:`shell-edge-preview`,"data-side":$.target.edge})]}),un&&ln&&(0,W.jsxs)(`div`,{className:`shell-closed`,role:`status`,children:[(0,W.jsxs)(`span`,{children:[`Closed `,un.label]}),(0,W.jsx)(`button`,{className:`shell-link`,onClick:()=>void mn(),children:`Undo`}),(0,W.jsx)(`button`,{className:`shell-quiet`,"aria-label":`Dismiss`,onClick:()=>dn(null),children:(0,W.jsx)(r,{name:`close`,size:13})})]}),[...wn.current].filter(e=>I.has(e)).map(e=>(0,Ne.createPortal)(Rn(e),An(e),e))]})]})})})}export{Zt as Workspace};
5
+ `).length)),value:d,spellCheck:!1,onChange:e=>{f(e.target.value);try{o(JSON.parse(e.target.value)),m(``),s(t,null)}catch{m(`Not valid JSON yet`),s(t,e.target.value)}}}),(0,W.jsxs)(`div`,{className:`shell-field`+(l===`boolean`?` inline`:``),children:[(0,W.jsxs)(`label`,{htmlFor:c,children:[e,l===`lines`?` · one per line`:l===`json`?` · JSON`:``]}),_,h&&(0,W.jsx)(`p`,{id:c+`-problem`,role:`alert`,className:`shell-field-problem`,children:[p,...u.map(e=>e.message+(e.fix?` · `+e.fix:``))].filter(Boolean).join(` · `)})]})}function Pt({view:e,process:t,client:n,snapshot:i,children:a}){let o=t.every.find(t=>be(t.path)===e.id);if(!o)return(0,W.jsx)(W.Fragment,{children:a});let s=o.path,c=t.files.find(e=>e.path===s),l=o.versions,u=c?.versions.length??0,d=c?.versions.at(-1),f=Object.values(e.bindings??{}).some(e=>e.kind===`live-document`),p=e=>t.setAt(e>=l.length?null:l[e].at),m=t.holds(s);return(0,W.jsxs)(`div`,{className:`process-frame`,children:[m&&(0,W.jsx)(ve,{className:`process-holds`,holds:m}),(0,W.jsx)(`div`,{className:`process-version`,"data-fact":`observed`,children:l.length?(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(`span`,{children:d?`Version ${u} of ${l.length} · kept ${E(d.at)}`:`Not kept yet`}),l.length>1&&(0,W.jsxs)(`span`,{className:`process-version-steps`,children:[(0,W.jsx)(`button`,{className:`icon-button`,"aria-label":`Earlier version of `+o.title,disabled:u<=1,onClick:()=>p(u-2),children:(0,W.jsx)(`span`,{className:`flip`,children:(0,W.jsx)(r,{name:`chevron`,size:13})})}),(0,W.jsx)(`button`,{className:`icon-button`,"aria-label":`Later version of `+o.title,disabled:t.at===null&&u>=l.length,onClick:()=>p(u),children:(0,W.jsx)(r,{name:`chevron`,size:13})})]})]}):(0,W.jsx)(`span`,{children:t.at===null?`No version of this file was kept; it shows as it is now.`:`No version of this file was kept.`})}),t.at!==null&&f?d?(0,W.jsx)(`div`,{className:`process-replay-file`,children:(0,W.jsx)(je,{client:n,projectId:i.project.id,resource:d.resource,path:s})}):l.length?(0,W.jsxs)(`p`,{className:`process-note`,children:[`The work had reached this file by `,E(t.at,!0),`; its first version was kept at `,E(l[0].at,!0),`.`,(0,W.jsxs)(`button`,{className:`text-button`,onClick:()=>p(0),children:[`Go to `,E(l[0].at,!0)]})]}):(0,W.jsxs)(`p`,{className:`process-note`,children:[`The work had reached this file by `,E(t.at,!0),`, but no version of it was kept, so it cannot be shown as it was then.`,(0,W.jsx)(`button`,{className:`text-button`,onClick:()=>t.setAt(null),children:`Show it now`})]}):a]})}var Ft=e=>{let t=e.getBoundingClientRect();return{x:t.left,y:t.bottom+4,above:t.top-4}};function It({at:e,label:t,anchor:n,onClose:r,className:i,role:a=`menu`,children:o}){let s=(0,D.useRef)(null);(0,D.useLayoutEffect)(()=>{let t=s.current,n=t.offsetWidth,r=innerHeight-e.y-8,i=(e.above??e.y)-8,a=r<Math.min(t.scrollHeight,320)&&i>r;t.style.left=Math.max(8,Math.min(e.x,innerWidth-n-8))+`px`,t.style.maxHeight=(a?i:r)+`px`,a?t.style.bottom=innerHeight-(e.above??e.y)+`px`:t.style.top=e.y+`px`,t.querySelector(`button:not(:disabled)`)?.focus({preventScroll:!0})},[]),(0,D.useEffect)(()=>{let e=e=>{let t=e.target;!s.current?.contains(t)&&!n?.contains(t)&&r(!1)},t=()=>r(!1);return document.addEventListener(`pointerdown`,e,!0),addEventListener(`resize`,t),addEventListener(`blur`,t),()=>{document.removeEventListener(`pointerdown`,e,!0),removeEventListener(`resize`,t),removeEventListener(`blur`,t)}},[n]);function c(e){let t=[...s.current.querySelectorAll(`button:not(:disabled)`)],n=t.indexOf(document.activeElement),i={ArrowDown:n+1,ArrowUp:n-1,Home:0,End:t.length-1}[e.key];e.key===`Escape`?(e.preventDefault(),e.stopPropagation(),r(!0)):e.key===`Tab`?r(!1):i!==void 0&&t.length&&(e.preventDefault(),t[(i+t.length)%t.length].focus())}return(0,Ne.createPortal)((0,W.jsx)(`div`,{ref:s,className:`floating-menu`+(i?` `+i:``),role:a,"aria-label":t,onKeyDown:c,onClick:e=>{e.target.closest(`button`)&&r(!1)},children:o}),document.body)}function Lt({items:e}){return(0,W.jsx)(W.Fragment,{children:e.map(e=>(0,W.jsxs)(`button`,{role:`menuitem`,onClick:e.run,children:[(0,W.jsx)(r,{name:e.icon,size:15}),(0,W.jsx)(`span`,{children:e.label}),e.keys&&(0,W.jsx)(`kbd`,{children:e.keys})]},e.id))})}var Rt=`application/x-rho-view`,zt=(e,t)=>JSON.stringify(e)===JSON.stringify(t),Bt=e=>e&&`group`in e?e.group:null;function Vt(e){let t=e.currentTarget.getBoundingClientRect(),n=(e.clientX-t.left)/t.width,r=(e.clientY-t.top)/t.height,[i,a]=[[`left`,n],[`right`,1-n],[`top`,r],[`bottom`,1-r]].sort((e,t)=>e[1]-t[1])[0];return a<.25?i:`center`}var Ht=new WeakMap;function Ut(e,t){let n=document.activeElement,r=n instanceof HTMLElement&&e.contains(n)?n:Ht.get(e);Ht.delete(e),e.parentElement!==t&&t.appendChild(e),r&&e.contains(r)&&document.activeElement!==r&&r.focus({preventScroll:!0})}function Wt(e,t){if(e.parentElement!==t)return;let n=document.activeElement;n instanceof HTMLElement&&e.contains(n)&&Ht.set(e,n),t.removeChild(e)}function Gt({container:e,id:t,labelledBy:n}){let r=(0,D.useRef)(null);return(0,D.useLayoutEffect)(()=>{let t=r.current;return Ut(e,t),()=>Wt(e,t)},[e]),(0,W.jsx)(`div`,{ref:r,id:t,className:`shell-panel`,role:`tabpanel`,"aria-labelledby":n})}function Kt(e,t,n=!0){(0,D.useLayoutEffect)(()=>{let t=e.current;if(!t)return;let n=()=>{let e=t.scrollLeft>1,n=t.scrollLeft+t.clientWidth<t.scrollWidth-1;e||n?t.dataset.overflow=e&&n?`both`:e?`start`:`end`:delete t.dataset.overflow};n();let r=new ResizeObserver(n),i=new MutationObserver(n);return r.observe(t),i.observe(t,{childList:!0,subtree:!0,characterData:!0}),t.addEventListener(`scroll`,n,{passive:!0}),()=>{r.disconnect(),i.disconnect(),t.removeEventListener(`scroll`,n)}},[e,n]),(0,D.useEffect)(()=>{e.current?.querySelector(`[aria-selected="true"]`)?.scrollIntoView({block:`nearest`,inline:`nearest`})},[e,t])}function qt({group:e,name:t,selected:n,onSelect:i,onHeader:a,render:o,drag:s,tools:c}){let l=(0,D.useRef)(null),[u,d]=(0,D.useState)(null);Kt(l,n);let f=`shell-`+e.id.replace(/[^A-Za-z0-9_-]/g,`_`),p=Math.max(0,e.views.indexOf(n)),m=()=>[...l.current?.querySelectorAll(`[role=tab]`)??[]];function h(t){let n=e.views.length,r={ArrowRight:(p+1)%n,ArrowLeft:(p-1+n)%n,Home:0,End:n-1}[t.key];r!==void 0&&(t.preventDefault(),i(e.views[r]),m()[r]?.focus())}function g(e,t){e.key===`Delete`&&c?.close?(e.preventDefault(),c.close(t)):(e.key===`ContextMenu`||e.key===`F10`&&e.shiftKey)&&c?.menu&&(e.preventDefault(),d({id:t,at:Ft(e.currentTarget),from:e.currentTarget}))}function _(e,t){c?.menu&&(e.preventDefault(),d({id:t,at:{x:e.clientX,y:e.clientY},from:e.currentTarget}))}let v=e=>{let t=u?.from;d(null),e&&t?.isConnected&&t.focus()},y=s?.dragging?.kind===`group`&&s.dragging.id===e.id;function b(t){if(!s?.dragging||y)return;t.preventDefault(),t.dataTransfer.dropEffect=`move`;let n=[...l.current?.querySelectorAll(`.shell-tab`)??[]].findIndex(e=>{let n=e.getBoundingClientRect();return t.clientX<n.left+n.width/2}),r={group:e.id,zone:`tab`,before:n<0?null:e.views[n]};zt(s.target,r)||s.over(r)}function x(t){if(!s?.dragging||y)return;t.preventDefault(),t.dataTransfer.dropEffect=`move`;let n={group:e.id,zone:Vt(t)};zt(s.target,n)||s.over(n)}let S=t=>{s?.dragging&&s.target&&Bt(s.target)===e.id&&(t.preventDefault(),s.drop(s.target))},C=s?.target&&`group`in s.target&&s.target.group===e.id?s.target:null,ee=s?.dragging?.kind===`view`?s.dragging.id:null,w=!!s&&!!c?.movable;return(0,W.jsxs)(`section`,{className:`shell-group`,"data-group":e.id,"data-dragging":y?``:void 0,"data-maximized":c?.maximized?``:void 0,children:[(0,W.jsxs)(`div`,{className:`shell-tabbar`,children:[(0,W.jsxs)(`div`,{className:`shell-tabstrip`,style:{"--tabs":e.views.length},onDragOver:b,onDrop:S,"data-drop":C?.zone===`tab`&&C.before===null?`end`:void 0,children:[(0,W.jsx)(`div`,{ref:l,className:`shell-tabs`,role:`tablist`,"aria-label":t,onKeyDown:h,children:e.views.map((e,t)=>(0,W.jsxs)(`div`,{className:`shell-tab`,"data-dragging":ee===e?``:void 0,"data-drop":C?.zone===`tab`&&C.before===e?`before`:void 0,"data-closable":c?.close?``:void 0,children:[(0,W.jsx)(`button`,{id:f+`-tab-`+t,role:`tab`,"aria-selected":e===n,"aria-controls":f+`-panel`,tabIndex:e===n?0:-1,title:o.label(e),onClick:()=>i(e),onKeyDown:t=>g(t,e),onContextMenu:t=>_(t,e),"aria-keyshortcuts":c?.close?`Delete`:void 0,onMouseDown:e=>{e.button===1&&c?.close&&e.preventDefault()},onAuxClick:t=>{t.button===1&&c?.close&&(t.preventDefault(),c.close(e))},draggable:!!s,onDragStart:t=>{s&&(t.stopPropagation(),t.dataTransfer.effectAllowed=`move`,t.dataTransfer.setData(Rt,e),s.start({kind:`view`,id:e}))},onDragEnd:()=>s?.end(),children:o.title(e)}),c?.close&&e===n&&(0,W.jsx)(`button`,{className:`shell-tab-close`,tabIndex:-1,"aria-hidden":`true`,title:`Close `+o.label(e),draggable:!1,onClick:()=>c.close(e),children:(0,W.jsx)(r,{name:`close`,size:12,stroke:2})})]},e))}),c?.add&&(0,W.jsx)(Jt,{name:t,content:c.add}),(0,W.jsx)(`div`,{className:`shell-tabs-fill`,"aria-hidden":`true`,"data-movable":w?``:void 0,title:w?`Drag to move these views together. Double-click to maximize.`:c?.maximized?`Double-click to show every group`:void 0,draggable:w,onDoubleClick:()=>(w||c?.maximized)&&c?.onMaximize?.(),onDragStart:t=>{w&&(t.dataTransfer.effectAllowed=`move`,t.dataTransfer.setData(Rt,e.id),l.current&&t.dataTransfer.setDragImage(l.current,16,16),s.start({kind:`group`,id:e.id}))},onDragEnd:()=>s?.end()})]}),(0,W.jsx)(`div`,{className:`shell-header-slot`,ref:a}),c?.maximized&&(0,W.jsxs)(`button`,{className:`shell-restore`,title:`Show every group again`,onClick:c.onMaximize,children:[(0,W.jsx)(r,{name:`restore`,size:14}),`Restore`]})]}),(0,W.jsxs)(`div`,{className:`shell-body`,children:[(0,W.jsx)(Gt,{container:o.container(n),id:f+`-panel`,labelledBy:f+`-tab-`+p},n),s?.dragging&&!y&&(0,W.jsx)(`div`,{className:`shell-drop`,"data-zone":C&&C.zone!==`tab`?C.zone:void 0,onDragOver:x,onDrop:S,"aria-hidden":`true`,onDragLeave:e=>{C&&!e.currentTarget.contains(e.relatedTarget)&&s.over(null)},children:(0,W.jsx)(`div`,{className:`shell-drop-preview`})})]}),u&&c?.menu&&(0,W.jsx)(It,{at:u.at,anchor:u.from,label:o.label(u.id),onClose:v,children:(0,W.jsx)(Lt,{items:c.menu(u.id)})})]})}function Jt({name:e,content:t}){let n=(0,D.useRef)(null),[i,a]=(0,D.useState)(null);return(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(`button`,{ref:n,className:`shell-tab-add`,"aria-label":`Add a view to `+e,title:`Add a view here`,"aria-haspopup":`dialog`,"aria-expanded":!!i,onClick:e=>a(i?null:Ft(e.currentTarget)),children:(0,W.jsx)(r,{name:`plus`,size:15,stroke:1.8})}),i&&(0,W.jsx)(It,{at:i,anchor:n.current,label:`Add a view to `+e,role:`dialog`,className:`add-into`,onClose:e=>{a(null),e&&n.current?.focus()},children:t()})]})}function Yt({region:e,weights:t,onResize:n,label:r,children:i}){let a=(0,D.useRef)(null),o=e.axis===`horizontal`,s=t.reduce((e,t)=>e+t,0),c=o?{less:`ArrowLeft`,more:`ArrowRight`}:{less:`ArrowUp`,more:`ArrowDown`};function l(e,r){let i=r.key===c.less?-.05:r.key===c.more?.05:r.key===`Home`?-1:+(r.key===`End`);i&&(r.preventDefault(),n(y(t,e,i)))}function u(e,r){let i=a.current;if(!i)return;r.currentTarget.setPointerCapture(r.pointerId);let s=o?i.clientWidth:i.clientHeight,c=o?r.clientX:r.clientY,l=t,u=t=>n(y(l,e,((o?t.clientX:t.clientY)-c)/s)),d=r.currentTarget,f=()=>{d.removeEventListener(`pointermove`,u),d.removeEventListener(`pointerup`,f),d.removeEventListener(`pointercancel`,f)};d.addEventListener(`pointermove`,u),d.addEventListener(`pointerup`,f),d.addEventListener(`pointercancel`,f)}let d=[];return i.forEach((e,n)=>{if(n){let e=t.slice(0,n).reduce((e,t)=>e+t,0);d.push((0,W.jsx)(`div`,{className:`shell-divider`,role:`separator`,tabIndex:0,"aria-orientation":o?`vertical`:`horizontal`,"aria-label":r(n),"aria-valuemin":0,"aria-valuemax":100,"aria-valuenow":Math.round(e/s*100),onKeyDown:e=>l(n-1,e),onPointerDown:e=>u(n-1,e)},`divider-`+n))}d.push((0,W.jsx)(`div`,{className:`shell-pane`,style:{flex:`${t[n]} 1 0`},children:e},`pane-`+n))}),(0,W.jsx)(`div`,{ref:a,className:`shell-split`,"data-axis":e.axis,"data-split":e.id,children:d})}var Xt={minSplitPx:640};function Zt({composition:e,snapshot:t,client:n,onAbout:y,contextTarget:S,principalId:E,onShowContext:ve,feedbackContextActive:be,openView:Ce,onCommands:Te,agentTarget:De,onShowAgent:Oe,presence:je,onPersonMoved:O,onConversation:Pe,onExplore:Fe,onObject:Ie,empty:Le,prepared:Re,onPrepare:ze,bar:Be=!0,barTarget:k,attention:Ve=!0,following:He=!1,arrange:Ue=!0,addView:A}){let j=ye(),M=pt(t,e,n,E,!!j),N=M.layout;async function We(e){let r=t.annotations.find(t=>t.annotationId===e)?.version??1;return(await n.call(`context.create`,{projectId:t.project.id,changeId:r===1?e:e+`@`+r,expectedVersion:0,annotations:[{annotationId:e,version:r}]},AbortSignal.timeout(3e4))).contextId}let P=(0,D.useMemo)(()=>a(N),[N]),F=(0,D.useMemo)(()=>i(P),[P]),I=(0,D.useMemo)(()=>new Map(N.views.map(e=>[e.id,e])),[N]),[Ge,Ke]=(0,D.useState)(()=>matchMedia(`(max-width: 767px)`).matches);(0,D.useEffect)(()=>{let e=matchMedia(`(max-width: 767px)`),t=()=>Ke(e.matches);return e.addEventListener(`change`,t),()=>e.removeEventListener(`change`,t)},[]);let qe=(0,D.useRef)(null),[Je,Ye]=(0,D.useState)(!1);(0,D.useLayoutEffect)(()=>{let e=qe.current;if(!e)return;let t=new ResizeObserver(([e])=>{e.contentRect.width&&Ye(e.contentRect.width<Xt.minSplitPx)});return t.observe(e),()=>t.disconnect()},[]);let[Xe,Ze]=(0,D.useState)({}),[Qe,$e]=(0,D.useState)(F[0]??``),et=e=>e.views.includes(Qe)?Qe:e.views.includes(Xe[e.id])?Xe[e.id]:e.views[0],tt=e=>{let t=d(P,e);t&&Ze(n=>({...n,[t.id]:e})),$e(e)},L=e=>{M.hold(e),tt(e)},nt=e=>{let t=N.views.find(t=>Object.values(t.bindings??{}).some(t=>`id`in t&&t.id===e.id&&t.version===e.version));t?L(t.id):M.openResource(e)},[rt,it]=(0,D.useState)(!1),[at,R]=(0,D.useState)([]),ot=xt(M),st=ot.filter(e=>!at.includes(e.key+`:`+e.text));(0,D.useEffect)(()=>{if(j||!M.active||!I.has(M.active))return;let e=document.activeElement?.closest(`[data-owner-view]`)?.dataset.ownerView;M.movedBy===`owners`&&e&&e!==M.active&&I.has(e)&&(V||d(P,e)?.id===d(P,M.active)?.id)?M.hold(e):tt(M.active)},[M.active,P]);let ct=(0,D.useRef)(``);(0,D.useEffect)(()=>{Ce&&ct.current!==Ce&&I.has(Ce)&&(ct.current=Ce,He?tt(Ce):L(Ce))},[Ce,I]);let z=F.includes(Qe)?Qe:F[0]??``,B=P?g(P):[],V=Ge||Je&&B.length>1,[lt,H]=(0,D.useState)(null),U=!V&&B.length>1?B.find(e=>e.id===lt)??null:null;(0,D.useEffect)(()=>{U&&z&&!U.views.includes(z)&&H(null)},[z]);let ut=V?z?[z]:[]:U?[et(U)]:B.map(et),[dt,ft]=(0,D.useState)({version:N.version,values:{}}),mt=dt.version===N.version?dt.values:{},[ht,G]=(0,D.useState)(``),K=e=>(Ue||!e.startsWith(`composition.`))&&t.catalog.operations.some(t=>t.method===e&&t.state===`available`&&t.authorized),q=e.rootId&&e.nodes?.length?{rootId:e.rootId,nodes:e.nodes}:null,gt=(0,D.useRef)(null),J=(0,D.useRef)(e);J.current=gt.current&&gt.current.compositionId===e.compositionId&&gt.current.version>e.version?{...e,...gt.current}:e;let Y=()=>J.current.rootId&&J.current.nodes?.length?{rootId:J.current.rootId,nodes:J.current.nodes}:null,_t=e=>{gt.current={compositionId:e.compositionId,version:e.version,rootId:e.rootId,nodes:e.nodes},J.current={...J.current,...gt.current}},X=e=>`${e}-${crypto.randomUUID().slice(0,8)}`,Z=e=>G(e instanceof Error?e.message:`The layout change was not accepted.`);async function Q(e){if(!e)return!1;G(``);try{return _t(await n.call(`composition.apply`,{projectId:t.project.id,compositionId:J.current.compositionId,expectedVersion:J.current.version,changeId:`layout-`+crypto.randomUUID(),operations:[{op:`replace`,rootId:e.rootId,nodes:e.nodes}]},AbortSignal.timeout(3e4))),!0}catch(e){return Z(e),!1}}async function yt(){G(``);try{_t(await n.call(`composition.undo`,{projectId:t.project.id,compositionId:J.current.compositionId,expectedVersion:J.current.version,changeId:`layout-undo-`+crypto.randomUUID()},AbortSignal.timeout(3e4)))}catch(e){Z(e)}}async function Ct(e,r){let i=Y()?.nodes.find(t=>t.kind===`group`&&t.children?.includes(e));if(!i)return;G(``);let a=X(`view`);try{await n.call(`composition.apply`,{projectId:t.project.id,compositionId:J.current.compositionId,expectedVersion:J.current.version,changeId:`layout-beside-`+crypto.randomUUID(),operations:[{op:`insert`,parentId:i.id,index:i.children.indexOf(e)+1,node:{id:a,kind:`view`,...r}}]},AbortSignal.timeout(3e4)).then(e=>_t(e)),L(a)}catch(e){Z(e)}}let[Tt,Et]=(0,D.useState)(null),[Dt,Ot]=(0,D.useState)(!1),kt=ze?Re??null:Tt,At=ze??Et,jt=ne(t)&&(j?!!Fe:!!q);async function Nt(e,r,i,a){if(j)Fe?.(r,i);else{G(``),Ot(!0);try{let o=N.views.find(e=>e.component===ce)?.id;if(!o){let t=I.get(e),n=Y(),r=`notebook`,i=t&&n&&l(n,t,X),a=i&&p(i,pe(r),e,`right`,X);if(!K(`composition.apply`)||!a){G(`The Notebook could not be placed beside this view.`);return}if(!await Q(a))return;o=r}a?At(w(r,i,a.dirty)):await ee(n,t.project.id,r,i),O?.(),L(o)}catch(e){Z(e)}finally{Ot(!1)}}}let[Ft,It]=(0,D.useState)(null);(0,D.useEffect)(()=>{Ft&&I.has(Ft)&&(It(null),L(Ft))},[Ft,I]);function Lt(e,r){j?Ie?.(e,r):(G(``),oe(n,t.project.id,N.compositionId,e,r,qe.current?.clientWidth).then(e=>{O?.(),It(e)},Z))}function Rt(e,r){le(e,r);let i=N.views.find(e=>e.component===ie.servers)?.id;i?L(i):(G(``),de(n,t.project.id,N.compositionId,`servers`).then(e=>{O?.(),It(e)},Z))}let zt=(0,D.useRef)(Promise.resolve()),Bt=(0,D.useRef)(async()=>{});Bt.current=async({viewId:e,language:r,code:i,purpose:a})=>{G(``);let o=N.views.find(e=>e.component===ce)?.id;if(o){let t=d(P,o);t&&t.id!==d(P,e)?.id&&Ze(e=>({...e,[t.id]:o}))}else{let t=I.get(e),n=Y(),r=t&&n&&l(n,t,X),i=r&&p(r,pe(`notebook`,`console`),e,`bottom`,X);K(`composition.apply`)&&i&&await Q(i)}let s=zt.current.then(()=>n.call(`kernel.run`,{projectId:t.project.id,language:r,code:i,purpose:a,changeId:`script-`+crypto.randomUUID()}));zt.current=s.catch(()=>{}),await s.catch(Z)};function Vt(e,t){let n=Y(),r=n&&o(n,e,t);r&&K(`composition.apply`)&&Q(r)}let Ht=(0,D.useContext)(ae),Zt=!j&&!!q&&ne(t),Qt=(0,D.useMemo)(()=>Zt?{...Ht,runCode:e=>Bt.current(e)}:Ht,[Ht,Zt]);function $t(e,r,i){At({key:crypto.randomUUID(),language:e,code:r,note:`From the ${i} view. Build on it, then press Run.`});let a=N.views.find(e=>e.component===ce)?.id;a?L(a):j||me(n,t.project.id,N.compositionId,null).then(e=>L(e),Z)}let en=j?t.conversations?.find(e=>e.conversationId===j.conversationId)?.principal??null:null,tn=j?j.whole.turns.filter(e=>e.conversationId===j.conversationId).map(e=>e.start):[],nn={openValue:Lt,openRemote:Rt,toNotebook:(e,t,n)=>$t(e,t,n),prepared:kt,taken:()=>At(null),setProps:Vt,has:e=>N.views.some(t=>t.component===e),scope:j?{principal:en,since:tn.length?Math.min(...tn):null,at:j.at}:void 0,openConversation:Pe},rn=(0,D.useRef)(void 0);function an(e,t){ft(n=>({version:N.version,values:{...n.version===N.version?n.values:{},[e]:t}})),clearTimeout(rn.current),q&&K(`composition.apply`)&&(rn.current=setTimeout(()=>{let n=Y();Q(n&&u(n,e,t))},600))}(0,D.useEffect)(()=>()=>clearTimeout(rn.current),[]);let[on,sn]=(0,D.useState)(null);function cn(e){let t=on?.item;sn(null);let n=Y();if(!t||!n)return;let r=null,i;if(t.kind===`group`){let a=B.find(e=>e.id===t.id),o=m(t.id);if(!a)return;i=et(a),r=`edge`in e?f(n,o,e.edge,X):v(n,o,m(e.group),e.zone===`tab`?`center`:e.zone,e.zone===`tab`?e.before:null,X)}else{let a=I.get(t.id);if(!a||`group`in e&&e.zone===`center`&&d(P,a.id)?.id===e.group)return;let o=l(n,a,X);i=a.id,r=o?`edge`in e?f(o,a.id,e.edge,X):e.zone===`tab`?x(o,a.id,m(e.group),e.before,X):e.zone===`center`?x(o,a.id,m(e.group),null,X):h(o,a.id,m(e.group),e.zone,X):null}r&&(O?.(),i&&L(i),Q(r))}let ln=!!q&&K(`composition.apply`),$=ln?{dragging:on?.item??null,target:on?.target??null,start:e=>{H(null),sn({item:e,target:null})},end:()=>sn(null),over:e=>sn(t=>t&&{...t,target:e}),drop:cn}:void 0,[un,dn]=(0,D.useState)(null);(0,D.useEffect)(()=>{un&&e.version>un.version&&dn(null)},[e.version]),(0,D.useEffect)(()=>{if(!un)return;let e=setTimeout(()=>dn(null),1e4);return()=>clearTimeout(e)},[un]);async function fn(e,t){let n=Y(),r=n;for(let t of e)M.release(t),r&&=_(r,t)??r;O?.(),r&&r!==n&&await Q(r)&&dn({label:t,version:J.current.version})}let pn=e=>{let t=I.get(e);t&&fn([e],T(t))};async function mn(){let e=un;dn(null),e&&J.current.version===e.version&&await yt()}function hn(e){let t=I.get(e),n=Y(),r=d(P,e);if(!t||!n||!r)return[];let i=l(n,t,X),a=[{id:`close`,label:`Close`,icon:`close`,keys:`Del`,run:()=>pn(e)}],o=r.views.filter(t=>t!==e);o.length&&a.push({id:`close-others`,label:o.length===1?`Close the other tab`:`Close the ${o.length} other tabs`,icon:`close`,run:()=>void fn(o,o.length===1?T(I.get(o[0])):`${o.length} views`)});let s=n=>{let r=Y(),i=r&&l(r,t,X),a=i&&c(i,e,n,X);a&&(O?.(),L(e),Q(a))};return i&&c(i,e,`horizontal`,X)&&a.push({id:`split-right`,label:`Split right`,icon:`layout`,run:()=>s(`horizontal`)},{id:`split-down`,label:`Split down`,icon:`layout`,run:()=>s(`vertical`)}),B.length>1&&a.push(U?{id:`restore`,label:`Show every group`,icon:`restore`,run:()=>H(null)}:{id:`maximize`,label:`Maximize this group`,icon:`fit`,run:()=>{L(e),H(r.id)}}),a}let gn=e=>ln?{close:pn,menu:hn,add:A?()=>A(m(e.id)):void 0,movable:!U&&B.length>1,maximized:U?.id===e.id,onMaximize:()=>H(t=>t===e.id?null:e.id)}:void 0,_n=_e.entries.find(e=>e.component===`rho.feedback`),vn=!!t.feedback&&_n?.requiredOperations.every(e=>t.catalog.operations.some(t=>t.method===e&&t.authorized&&t.state===`available`)),[yn,bn]=(0,D.useState)(null),[xn,Sn]=(0,D.useState)(!1);(0,D.useEffect)(()=>{bn(null),Sn(!1)},[t.project.id,N.compositionId,t.feedback?.taskId,E]);let Cn=(0,D.useRef)(new Set),wn=(0,D.useRef)(new Set),Tn=(0,D.useRef)([]);for(let e of wn.current)I.has(e)||wn.current.delete(e);let En=ut.filter(e=>e&&I.has(e));Tn.current=[...En,...Tn.current.filter(e=>I.has(e)&&!En.includes(e))];let Dn=S&&be&&yn&&!xn?1:0;Cn.current=new Set;for(let e of[...Tn.current,...F])Cn.current.size<8-Dn&&!Cn.current.has(e)&&te(I.get(e),t)&&Cn.current.add(e);for(let e of ut)wn.current.add(e);let On=vn?e=>{Sn(Cn.current.size>=8),bn(e),ve()}:void 0,kn=(0,D.useRef)(new Map);for(let e of kn.current.keys())I.has(e)||kn.current.delete(e);let An=e=>{let t=kn.current.get(e);return t||(t=document.createElement(`div`),t.className=`shell-view`,t.dataset.ownerView=e,kn.current.set(e,t)),t},[jn,Mn]=(0,D.useState)({}),Nn=(0,D.useRef)(new Map),Pn=(0,D.useCallback)(e=>{let t=Nn.current.get(e);return t||(t=t=>Mn(n=>n[e]===t?n:{...n,[e]:t}),Nn.current.set(e,t)),t},[]),Fn=e=>V?jn.narrow??null:jn[d(P,e)?.id??``]??null,In=(0,D.useRef)(new Map);for(let e of In.current.keys())I.has(e)||In.current.delete(e);let Ln=e=>{let t=In.current.get(e);return t||(t=document.createElement(`div`),t.className=`shell-view-header`,t.dataset.ownerHeader=e,In.current.set(e,t)),t};(0,D.useLayoutEffect)(()=>{for(let[e,t]of In.current){let n=ut.includes(e)?Fn(e):null;n?Ut(t,n):t.parentElement&&Wt(t,t.parentElement)}});let Rn=e=>{let r=I.get(e),i=ut.includes(e);if(r.component===`rho.action`)return(0,W.jsx)(Mt,{view:r,snapshot:t,client:n,live:M});if(r.component===`rho.console`)return(0,W.jsx)(xe,{client:n,snapshot:t});if(r.component===`rho.execution`){let i=String(r.props.operationId??e);return(0,W.jsx)(Ae,{snapshot:t,client:n,operationId:i,runs:M.runs,readRuns:M.readRuns,firstLine:Se(M,i),opener:e=>()=>nt(e),onOpenRun:e=>we(M,e),chain:!0})}let a=ke(r,t.resources),o=r.bindings?.document,c=o?.kind===`live-document`?t.documents.find(e=>e.id===o.documentId):void 0,l=re(c?.path),u=a?.kind===`table`&&he(fe(a))?fe(a):null,d=jt&&i&&(u||c&&l)?(0,Ne.createPortal)(u?(0,W.jsx)(Me,{languages:[`r`,`python`],busy:Dt,title:e=>`${j?`Open it on your workspace with the Notebook beside it, and load `:`Load `}${u.split(`/`).at(-1)} as it is on disk now into the ${se[e]} session as a new value${j?``:`, with the Notebook beside it`}`,onExplore:t=>void Nt(e,u,t,null)}):(0,W.jsx)(Me,{languages:[l],busy:Dt,title:e=>`${j?`Open it on your workspace with the Notebook beside it, and put `:`Put `}a line that runs ${c.path.split(`/`).at(-1)} into the ${se[e]} Notebook's line, for you to check and run`,onExplore:t=>void Nt(e,c.path,t,{dirty:c.dirty})}),Ln(e),`explore-`+e):null,f=t.catalog.plugins.find(e=>e.id===`annotations`),p=a?.kind===`table`&&f?.projectEnabled&&f.dependenciesSatisfied&&f.state===`available`?_e.entries.find(e=>e.component===`rho.feedback`)?.TableQuestion:void 0,m=(0,W.jsx)(ge,{active:i,params:{view:r,snapshot:t,client:n,principalId:E,compositionId:N.compositionId,compositionVersion:N.version,contextTarget:e===z&&!be?S:null,headerTarget:i?Ln(e):null,renderAllowed:Cn.current.has(e),onAbout:y,onRequestFeedback:On,onOpenBeside:q&&K(`composition.apply`)&&q.nodes.some(t=>t.id===e)?t=>void Ct(e,t):void 0}});return j?(0,W.jsxs)(W.Fragment,{children:[d,(0,W.jsx)(Pt,{view:r,process:j,client:n,snapshot:t,children:m})]}):a?(0,W.jsxs)(W.Fragment,{children:[d,(0,W.jsx)(Ee,{live:M,snapshot:t,resource:a,viewId:e,onOpenRef:nt,children:p&&(0,W.jsx)(p,{projectId:t.project.id,viewId:e,resource:a,snapshot:t,client:n,principalId:E,headerTarget:Ln(e),selectionScope:s(r),onOpenResource:nt,requestFeedback:On?()=>On(e):void 0},a.id+a.version+e)}),m]}):(0,W.jsxs)(W.Fragment,{children:[d,m]})},zn={label:e=>T(I.get(e)),container:An,title:e=>{let n=I.get(e);return(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(r,{name:ue(n,t),size:14,stroke:2}),(0,W.jsx)(`span`,{className:`shell-tab-name`,children:T(n)}),je?.viewId===e&&(0,W.jsxs)(`span`,{className:`agent-presence`+(je.live?` live`:``),title:je.label,children:[(0,W.jsx)(`span`,{className:`pulse-dot`,"aria-hidden":`true`}),je.verb]})]})}},Bn=e=>B.length===1?`Views`:`Views ${B.findIndex(t=>t.id===e)+1} of ${B.length}`,Vn=e=>{let t=e.kind===`tabs`?et(e):i(e)[0];return t?T(I.get(t)):`view`},Hn=e=>e.kind===`tabs`?(0,W.jsx)(qt,{group:e,name:Bn(e.id),selected:et(e),onSelect:t=>{t!==et(e)&&O?.(),L(t)},onHeader:Pn(e.id),render:zn,drag:$,tools:gn(e)},e.id):(0,W.jsx)(Yt,{region:e,weights:mt[e.id]??e.weights,onResize:t=>an(e.id,t),label:t=>`Resize ${Vn(e.children[t-1])} and ${Vn(e.children[t])}`,children:e.children.map(Hn)},e.id);(0,D.useEffect)(()=>{if(!Te)return;let n=[],r=I.get(z),i=r?T(r):``;if(q&&r&&K(`composition.apply`)&&(q.nodes.some(e=>e.id===z)||te(r,t))){let e=z,t=(e,t,a)=>{let o=l(q,r,X);o&&a(o)&&n.push({id:e,label:t,icon:`layout`,meta:i,run:()=>{let e=Y(),t=e&&l(e,r,X),n=t&&a(t);n&&Q(n)}})};t(`layout-split-right`,`Split right`,t=>c(t,e,`horizontal`,X)),t(`layout-split-down`,`Split down`,t=>c(t,e,`vertical`,X)),t(`layout-next`,`Move to the next group`,t=>b(t,e,1,X)),t(`layout-previous`,`Move to the previous group`,t=>b(t,e,-1,X)),n.push({id:`layout-close`,label:`Close view`,icon:`close`,meta:i,run:()=>pn(e)})}K(`composition.undo`)&&e.history?.length&&n.push({id:`layout-undo`,label:`Undo layout change`,icon:`refresh`,run:()=>void yt()}),Te(n.length?{label:`Layout`,commands:n}:null)},[z,e,t.catalog,N.views]),(0,D.useEffect)(()=>()=>Te?.(null),[]);let Un=(0,D.useId)(),Wn=(0,D.useRef)(null);Kt(Wn,z,V);function Gn(e){let t=F.indexOf(z),n=F.length,r={ArrowRight:(t+1)%n,ArrowLeft:(t-1+n)%n,Home:0,End:n-1}[e.key];r!==void 0&&(e.preventDefault(),L(F[r]),e.currentTarget.querySelectorAll(`[role=tab]`)[r]?.focus())}let Kn=M.screen?.views.find(e=>e.id===z)?.object??null,qn=()=>{it(e=>!e),Oe?.(),M.act({kind:`reveal`,target:rt?null:M.screen?.agent?.object??`workspace`})},Jn=Be&&(0,W.jsx)(vt,{live:M,evidence:rt,held:ot.length-st.length,onEvidence:qn,attention:Ve});return(0,W.jsx)(ae.Provider,{value:Qt,children:(0,W.jsx)(C.Provider,{value:nn,children:(0,W.jsxs)(`section`,{className:`workspace shell`,"aria-label":`Layout`,children:[Jn&&(k?(0,Ne.createPortal)(Jn,k):k===void 0&&Jn),De&&(0,Ne.createPortal)((0,W.jsx)(bt,{live:M,agents:t.agents,contexts:t.contexts,prepare:We,principalId:E,evidence:rt,onEvidence:qn,focusObject:Kn}),De),(0,W.jsx)(St,{live:M,items:st,onHide:e=>R(t=>[...t,e])}),ht&&(0,W.jsxs)(`div`,{className:`shell-interruption problem`,"data-rho-layer":`transient`,"data-rho-interruption":``,role:`alert`,children:[(0,W.jsx)(`span`,{className:`shell-interruption-text`,children:ht}),(0,W.jsx)(`button`,{className:`shell-quiet`,onClick:()=>G(``),children:`Dismiss`})]}),(0,W.jsx)(wt,{live:M}),(0,W.jsxs)(`div`,{ref:qe,className:`shell-stage`,onPointerDownCapture:e=>M.hold(e.target.closest(`[data-owner-view]`)?.dataset.ownerView??z),onKeyDownCapture:e=>{M.hold(z),!e.metaKey&&!e.ctrlKey&&e.key.length===1&&O?.()},onCompositionStartCapture:()=>M.hold(z),children:[S&&be&&yn&&vn&&_n&&t.feedback?.draftDocumentId&&(0,Ne.createPortal)(xn?(0,W.jsxs)(`section`,{className:`unavailable`,role:`status`,children:[(0,W.jsx)(`h3`,{children:`Close a view before opening feedback`}),(0,W.jsx)(`p`,{children:`Existing views and input are kept within this layout's view limit.`})]}):(0,W.jsx)(_n.View,{viewId:`feedback:`+yn,view:{id:`feedback:`+yn,component:_n.component,version:_n.componentVersion,props:{title:`Your question`,taskId:t.feedback.taskId,sourceSelectionScope:I.get(yn)?s(I.get(yn)):{kind:`shared`,id:yn}},bindings:{draft:{kind:`live-document`,documentId:t.feedback.draftDocumentId}}},projectId:t.project.id,snapshot:t,client:n,active:!0,principalId:E,contextTarget:null,feedbackConfiguration:{...t.feedback,draftDocumentId:t.feedback.draftDocumentId}},[t.project.id,t.feedback.taskId,yn,E].join(`:`)),S),P?V?(0,W.jsxs)(`section`,{className:`shell-group`,children:[(0,W.jsxs)(`div`,{className:`shell-tabbar`,children:[(0,W.jsx)(`div`,{ref:Wn,className:`shell-tabs`,role:`tablist`,"aria-label":`Views`,onKeyDown:Gn,children:F.map((e,t)=>(0,W.jsxs)(`div`,{className:`shell-tab`,"data-closable":ln?``:void 0,children:[(0,W.jsx)(`button`,{id:Un+t,role:`tab`,"aria-selected":e===z,"aria-controls":Un+`panel`,tabIndex:e===z?0:-1,"aria-keyshortcuts":ln?`Delete`:void 0,onClick:()=>{e!==z&&O?.(),L(e)},onKeyDown:t=>{t.key===`Delete`&&ln&&(t.preventDefault(),pn(e))},children:(0,W.jsx)(`span`,{className:`shell-tab-name`,children:T(I.get(e))})}),ln&&e===z&&(0,W.jsx)(`button`,{className:`shell-tab-close`,tabIndex:-1,"aria-hidden":`true`,title:`Close `+T(I.get(e)),onClick:()=>pn(e),children:(0,W.jsx)(r,{name:`close`,size:12,stroke:2})})]},e))}),ln&&A&&(0,W.jsx)(Jt,{name:`Views`,content:()=>A(m(d(P,z)?.id??P.id))})]}),(0,W.jsx)(`div`,{className:`shell-header-slot shell-header-narrow`,ref:Pn(`narrow`)}),z&&(0,W.jsx)(Gt,{container:An(z),id:Un+`panel`,labelledBy:Un+F.indexOf(z)},z)]}):Hn(U??P):Le??(0,W.jsxs)(`div`,{className:`empty`,children:[(0,W.jsx)(`h2`,{children:`No views in this layout`}),(0,W.jsx)(`p`,{children:`The saved layout is empty. No view is created automatically.`})]}),$?.dragging&&!V&&(0,W.jsxs)(`div`,{className:`shell-edges`,"aria-hidden":`true`,children:[[`left`,`right`,`top`,`bottom`].map(e=>(0,W.jsx)(`div`,{className:`shell-edge`,"data-side":e,"data-over":$.target&&`edge`in $.target&&$.target.edge===e?``:void 0,onDragOver:t=>{t.preventDefault(),t.dataTransfer.dropEffect=`move`,$.target&&`edge`in $.target&&$.target.edge===e||$.over({edge:e})},onDragLeave:e=>{e.currentTarget.contains(e.relatedTarget)||$.over(null)},onDrop:t=>{t.preventDefault(),$.drop({edge:e})}},e)),$.target&&`edge`in $.target&&(0,W.jsx)(`div`,{className:`shell-edge-preview`,"data-side":$.target.edge})]}),un&&ln&&(0,W.jsxs)(`div`,{className:`shell-closed`,role:`status`,children:[(0,W.jsxs)(`span`,{children:[`Closed `,un.label]}),(0,W.jsx)(`button`,{className:`shell-link`,onClick:()=>void mn(),children:`Undo`}),(0,W.jsx)(`button`,{className:`shell-quiet`,"aria-label":`Dismiss`,onClick:()=>dn(null),children:(0,W.jsx)(r,{name:`close`,size:13})})]}),[...wn.current].filter(e=>I.has(e)).map(e=>(0,Ne.createPortal)(Rn(e),An(e),e))]})]})})})}export{Zt as Workspace};