@rho-workspace/rho 0.5.3 → 0.5.5

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 (277) hide show
  1. package/README.md +24 -5
  2. package/dist/browser-access.js +3 -2
  3. package/dist/capabilities.d.ts +29 -2
  4. package/dist/capabilities.js +79 -2
  5. package/dist/cli.js +237 -99
  6. package/dist/contract.generated.d.ts +441 -16
  7. package/dist/contract.generated.js +1 -1
  8. package/dist/contracts/owners.generated.js +459 -10
  9. package/dist/conversation-presentation.d.ts +3 -1
  10. package/dist/conversation-presentation.js +16 -6
  11. package/dist/conversations.d.ts +10 -6
  12. package/dist/conversations.js +17 -13
  13. package/dist/discovery.d.ts +1 -0
  14. package/dist/discovery.js +3 -3
  15. package/dist/extension-contract.d.ts +99 -0
  16. package/dist/extension-contract.js +52 -0
  17. package/dist/extension-directory.d.ts +9 -0
  18. package/dist/extension-directory.js +11 -0
  19. package/dist/extension-worker.d.ts +1 -0
  20. package/dist/extension-worker.js +36 -0
  21. package/dist/extensions.d.ts +157 -0
  22. package/dist/extensions.js +349 -0
  23. package/dist/installs.d.ts +11 -0
  24. package/dist/installs.js +179 -0
  25. package/dist/plugin-cli.d.ts +1 -0
  26. package/dist/plugin-cli.js +139 -0
  27. package/dist/plugin-inventory.json +18 -0
  28. package/dist/plugins.d.ts +3 -3
  29. package/dist/project-notes.js +2 -0
  30. package/dist/project-work.d.ts +3 -1
  31. package/dist/project-work.js +15 -2
  32. package/dist/protocol.d.ts +7 -0
  33. package/dist/protocol.js +11 -7
  34. package/dist/screen-check-skill.d.ts +2 -0
  35. package/dist/screen-check-skill.js +39 -0
  36. package/dist/server.d.ts +6 -1
  37. package/dist/server.js +105 -15
  38. package/dist/web/.vite/manifest.json +65 -65
  39. package/dist/web/assets/{canvas-BXhC8RDZ.js → canvas-D8rDdfDz.js} +1 -1
  40. package/dist/web/assets/choices-b0XhrGQV.js +1 -0
  41. package/dist/web/assets/{console-e1P5qYQ5.js → console-BSjLGe0T.js} +1 -1
  42. package/dist/web/assets/{dist-Dd3iAGFy.js → dist-Buk0lwzI.js} +2 -2
  43. package/dist/web/assets/dist-Cw8hRIlT.js +1 -0
  44. package/dist/web/assets/dist-Tzoe_zm-.js +3 -0
  45. package/dist/web/assets/{dist-DEorbOW0.js → dist-foH9IKc6.js} +1 -1
  46. package/dist/web/assets/explore-in-BVUy3ZW_.js +1 -0
  47. package/dist/web/assets/graph-1OdIJ9l7.js +2 -0
  48. package/dist/web/assets/index-CsC3sTRq.css +1 -0
  49. package/dist/web/assets/{index-BYuKpyoi.js → index-CxmItXqa.js} +220 -121
  50. package/dist/web/assets/{notes-meaning-B3HFbh84.js → notes-meaning-pVbbQUGP.js} +1 -1
  51. package/dist/web/assets/overview-B9UtVJ32.js +6 -0
  52. package/dist/web/assets/preview-CksD_5KS.js +1 -0
  53. package/dist/web/assets/{review-BVh9jWMB.js → review-CMxQlQ-C.js} +1 -1
  54. package/dist/web/assets/{skills-DPaEYkln.js → skills-BFNSyrnD.js} +1 -1
  55. package/dist/web/assets/{skills-work-dvjfy_tu.js → skills-work-BGPSnF_I.js} +1 -1
  56. package/dist/web/assets/{studio-process-BYm8mjRJ.js → studio-process-CsRoTHOh.js} +2 -2
  57. package/dist/web/assets/{timeline-events-CDZ7wiJX.js → timeline-events-BbuuFWHV.js} +1 -1
  58. package/dist/web/assets/{work-turns-BeCt303c.js → work-turns-BvJlIMmA.js} +1 -1
  59. package/dist/web/assets/workspace-CWlkjLNx.js +5 -0
  60. package/dist/web/composition.json +80 -80
  61. package/dist/web/index.html +3 -3
  62. package/dist/web/renderer.json +1 -1
  63. package/dist/web-assets.d.ts +2 -1
  64. package/dist/web-assets.js +3 -2
  65. package/dist/work-contract.js +2 -2
  66. package/docs/FRONTEND.md +30 -14
  67. package/docs/HEADLESS.md +60 -14
  68. package/docs/PLUGIN-AUTHORING.md +4 -0
  69. package/docs/THIRD-PARTY-PLUGINS.md +190 -0
  70. package/example/pa14-qs/.rho/rho/conversations/c-67f77cfebaba2cea.json +1 -1
  71. package/example/pa14-qs/.rho/rho/conversations/c-91aa2e46b1ac1a6c.json +1 -1
  72. package/example/pa14-qs/.rho/rho/conversations/c-fa24dfd80dfe4bcb.json +1 -1
  73. package/node_modules/@hono/node-server/dist/index.js +11 -0
  74. package/node_modules/@hono/node-server/dist/index.mjs +11 -0
  75. package/node_modules/@hono/node-server/dist/listener.js +11 -0
  76. package/node_modules/@hono/node-server/dist/listener.mjs +11 -0
  77. package/node_modules/@hono/node-server/dist/request.js +11 -0
  78. package/node_modules/@hono/node-server/dist/request.mjs +11 -0
  79. package/node_modules/@hono/node-server/dist/server.js +11 -0
  80. package/node_modules/@hono/node-server/dist/server.mjs +11 -0
  81. package/node_modules/@hono/node-server/dist/vercel.js +11 -0
  82. package/node_modules/@hono/node-server/dist/vercel.mjs +11 -0
  83. package/node_modules/@hono/node-server/package.json +1 -1
  84. package/node_modules/@rho-workspace/plugin-agent/README.md +42 -1
  85. package/node_modules/@rho-workspace/plugin-agent/dist/acp-conversation.js +14 -3
  86. package/node_modules/@rho-workspace/plugin-agent/dist/activity-normalize.d.ts +1 -0
  87. package/node_modules/@rho-workspace/plugin-agent/dist/activity-normalize.js +2 -2
  88. package/node_modules/@rho-workspace/plugin-agent/dist/conversation.d.ts +1 -0
  89. package/node_modules/@rho-workspace/plugin-agent/dist/conversation.js +1 -0
  90. package/node_modules/@rho-workspace/plugin-agent/dist/dsh-session.d.ts +6 -0
  91. package/node_modules/@rho-workspace/plugin-agent/dist/dsh-session.js +174 -0
  92. package/node_modules/@rho-workspace/plugin-agent/dist/external-session-contract.d.ts +82 -0
  93. package/node_modules/@rho-workspace/plugin-agent/dist/external-session-contract.js +15 -0
  94. package/node_modules/@rho-workspace/plugin-agent/dist/external-session.d.ts +73 -0
  95. package/node_modules/@rho-workspace/plugin-agent/dist/external-session.js +190 -0
  96. package/node_modules/@rho-workspace/plugin-agent/dist/generic-acp.d.ts +11 -0
  97. package/node_modules/@rho-workspace/plugin-agent/dist/generic-acp.js +7 -0
  98. package/node_modules/@rho-workspace/plugin-agent/dist/index.d.ts +373 -0
  99. package/node_modules/@rho-workspace/plugin-agent/dist/index.js +1 -0
  100. package/node_modules/@rho-workspace/plugin-agent/dist/mcp.js +5 -1
  101. package/node_modules/@rho-workspace/plugin-agent/dist/operations.d.ts +33 -0
  102. package/node_modules/@rho-workspace/plugin-agent/dist/operations.js +3 -0
  103. package/node_modules/@rho-workspace/plugin-agent/dist/presentation.d.ts +14 -0
  104. package/node_modules/@rho-workspace/plugin-agent/dist/presentation.js +2 -0
  105. package/node_modules/@rho-workspace/plugin-agent/dist/ui-external-session.d.ts +15 -0
  106. package/node_modules/@rho-workspace/plugin-agent/dist/ui-external-session.js +37 -0
  107. package/node_modules/@rho-workspace/plugin-agent/package.json +5 -1
  108. package/node_modules/@rho-workspace/plugin-annotations/package.json +1 -1
  109. package/node_modules/@rho-workspace/plugin-documents/README.md +4 -0
  110. package/node_modules/@rho-workspace/plugin-documents/dist/index.d.ts +3 -0
  111. package/node_modules/@rho-workspace/plugin-documents/dist/index.js +1 -1
  112. package/node_modules/@rho-workspace/plugin-documents/package.json +1 -1
  113. package/node_modules/@rho-workspace/plugin-kernel/README.md +71 -10
  114. package/node_modules/@rho-workspace/plugin-kernel/dist/code.d.ts +2 -0
  115. package/node_modules/@rho-workspace/plugin-kernel/dist/code.js +4 -1
  116. package/node_modules/@rho-workspace/plugin-kernel/dist/contract.js +5 -0
  117. package/node_modules/@rho-workspace/plugin-kernel/dist/index.d.ts +7 -0
  118. package/node_modules/@rho-workspace/plugin-kernel/dist/index.js +55 -8
  119. package/node_modules/@rho-workspace/plugin-kernel/dist/lineage.d.ts +9 -6
  120. package/node_modules/@rho-workspace/plugin-kernel/dist/lineage.js +18 -41
  121. package/node_modules/@rho-workspace/plugin-kernel/dist/operations.js +5 -2
  122. package/node_modules/@rho-workspace/plugin-kernel/dist/script-flow.d.ts +39 -0
  123. package/node_modules/@rho-workspace/plugin-kernel/dist/script-flow.js +661 -0
  124. package/node_modules/@rho-workspace/plugin-kernel/dist/ui-base.d.ts +3 -0
  125. package/node_modules/@rho-workspace/plugin-kernel/dist/ui-base.js +10 -0
  126. package/node_modules/@rho-workspace/plugin-kernel/dist/ui-flow.d.ts +38 -4
  127. package/node_modules/@rho-workspace/plugin-kernel/dist/ui-flow.js +194 -97
  128. package/node_modules/@rho-workspace/plugin-kernel/dist/ui-notebook-work.js +1 -2
  129. package/node_modules/@rho-workspace/plugin-kernel/dist/ui-notebook.d.ts +10 -2
  130. package/node_modules/@rho-workspace/plugin-kernel/dist/ui-notebook.js +79 -18
  131. package/node_modules/@rho-workspace/plugin-kernel/dist/ui-styles.js +115 -45
  132. package/node_modules/@rho-workspace/plugin-kernel/dist/ui.d.ts +1 -1
  133. package/node_modules/@rho-workspace/plugin-kernel/dist/ui.js +1 -1
  134. package/node_modules/@rho-workspace/plugin-kernel/dist/value-graph.d.ts +63 -0
  135. package/node_modules/@rho-workspace/plugin-kernel/dist/value-graph.js +344 -0
  136. package/node_modules/@rho-workspace/plugin-kernel/package.json +1 -1
  137. package/node_modules/@rho-workspace/plugin-kernel/runners/runner.R +6 -3
  138. package/node_modules/@rho-workspace/plugin-kernel/runners/runner.py +6 -3
  139. package/node_modules/express-rate-limit/dist/index.cjs +1 -1
  140. package/node_modules/express-rate-limit/dist/index.mjs +1 -1
  141. package/node_modules/express-rate-limit/package.json +1 -1
  142. package/node_modules/ip-address/dist/ipv6.js +1 -1
  143. package/node_modules/ip-address/package.json +1 -1
  144. package/node_modules/playwright-core/LICENSE +202 -0
  145. package/node_modules/playwright-core/NOTICE +5 -0
  146. package/node_modules/playwright-core/ThirdPartyNotices.txt +13 -0
  147. package/node_modules/playwright-core/bin/install_media_pack.ps1 +5 -0
  148. package/node_modules/playwright-core/bin/install_webkit_wsl.ps1 +33 -0
  149. package/node_modules/playwright-core/bin/reinstall_chrome_beta_linux.sh +42 -0
  150. package/node_modules/playwright-core/bin/reinstall_chrome_beta_mac.sh +13 -0
  151. package/node_modules/playwright-core/bin/reinstall_chrome_beta_win.ps1 +24 -0
  152. package/node_modules/playwright-core/bin/reinstall_chrome_stable_linux.sh +42 -0
  153. package/node_modules/playwright-core/bin/reinstall_chrome_stable_mac.sh +12 -0
  154. package/node_modules/playwright-core/bin/reinstall_chrome_stable_win.ps1 +24 -0
  155. package/node_modules/playwright-core/bin/reinstall_msedge_beta_linux.sh +48 -0
  156. package/node_modules/playwright-core/bin/reinstall_msedge_beta_mac.sh +11 -0
  157. package/node_modules/playwright-core/bin/reinstall_msedge_beta_win.ps1 +23 -0
  158. package/node_modules/playwright-core/bin/reinstall_msedge_dev_linux.sh +48 -0
  159. package/node_modules/playwright-core/bin/reinstall_msedge_dev_mac.sh +11 -0
  160. package/node_modules/playwright-core/bin/reinstall_msedge_dev_win.ps1 +23 -0
  161. package/node_modules/playwright-core/bin/reinstall_msedge_stable_linux.sh +48 -0
  162. package/node_modules/playwright-core/bin/reinstall_msedge_stable_mac.sh +11 -0
  163. package/node_modules/playwright-core/bin/reinstall_msedge_stable_win.ps1 +24 -0
  164. package/node_modules/playwright-core/browsers.json +52 -0
  165. package/node_modules/playwright-core/cli.js +22 -0
  166. package/node_modules/playwright-core/index.js +17 -0
  167. package/node_modules/playwright-core/index.mjs +28 -0
  168. package/node_modules/playwright-core/lib/bootstrap.js +149 -0
  169. package/node_modules/playwright-core/lib/coreBundle.js +78041 -0
  170. package/node_modules/playwright-core/lib/entry/cliDaemon.js +5 -0
  171. package/node_modules/playwright-core/lib/entry/dashboardApp.js +3 -0
  172. package/node_modules/playwright-core/lib/entry/mcp.js +10 -0
  173. package/node_modules/playwright-core/lib/entry/oopBrowserDownload.js +3 -0
  174. package/node_modules/playwright-core/lib/package.js +50 -0
  175. package/node_modules/playwright-core/lib/server/chromium/appIcon.png +0 -0
  176. package/node_modules/playwright-core/lib/server/electron/loader.js +123 -0
  177. package/node_modules/playwright-core/lib/serverRegistry.js +1939 -0
  178. package/node_modules/playwright-core/lib/serverRegistry.js.LICENSE +65 -0
  179. package/node_modules/playwright-core/lib/tools/cli-client/channelSessions.js +141 -0
  180. package/node_modules/playwright-core/lib/tools/cli-client/cli.js +7 -0
  181. package/node_modules/playwright-core/lib/tools/cli-client/help.json +808 -0
  182. package/node_modules/playwright-core/lib/tools/cli-client/minimist.js +128 -0
  183. package/node_modules/playwright-core/lib/tools/cli-client/output.js +352 -0
  184. package/node_modules/playwright-core/lib/tools/cli-client/program.js +422 -0
  185. package/node_modules/playwright-core/lib/tools/cli-client/registry.js +180 -0
  186. package/node_modules/playwright-core/lib/tools/cli-client/session.js +261 -0
  187. package/node_modules/playwright-core/lib/tools/dashboard/appIcon.png +0 -0
  188. package/node_modules/playwright-core/lib/tools/utils/extension.js +112 -0
  189. package/node_modules/playwright-core/lib/tools/utils/socketConnection.js +108 -0
  190. package/node_modules/playwright-core/lib/utilsBundle.js +86078 -0
  191. package/node_modules/playwright-core/lib/utilsBundle.js.LICENSE +1890 -0
  192. package/node_modules/playwright-core/lib/vite/dashboard/assets/codeMirrorModule--QdMvsKi.css +1 -0
  193. package/node_modules/playwright-core/lib/vite/dashboard/assets/codeMirrorModule-CQ8RZGBm.js +32 -0
  194. package/node_modules/playwright-core/lib/vite/dashboard/assets/codicon-DCmgc-ay.ttf +0 -0
  195. package/node_modules/playwright-core/lib/vite/dashboard/assets/firefox-1bWoP6pv.svg +1 -0
  196. package/node_modules/playwright-core/lib/vite/dashboard/assets/firefox-beta-k3eOH_eK.svg +1 -0
  197. package/node_modules/playwright-core/lib/vite/dashboard/assets/firefox-nightly-Cp5nfeDT.svg +1 -0
  198. package/node_modules/playwright-core/lib/vite/dashboard/assets/index-AwgwcYie.css +1 -0
  199. package/node_modules/playwright-core/lib/vite/dashboard/assets/index-hRvO4yU2.js +12 -0
  200. package/node_modules/playwright-core/lib/vite/dashboard/assets/safari-na3_-uQk.svg +1 -0
  201. package/node_modules/playwright-core/lib/vite/dashboard/index.html +29 -0
  202. package/node_modules/playwright-core/lib/vite/dashboard/playwright-logo.svg +24 -0
  203. package/node_modules/playwright-core/lib/vite/htmlReport/index.html +16 -0
  204. package/node_modules/playwright-core/lib/vite/htmlReport/report.css +2 -0
  205. package/node_modules/playwright-core/lib/vite/htmlReport/report.js +32 -0
  206. package/node_modules/playwright-core/lib/vite/recorder/assets/codeMirrorModule--QdMvsKi.css +1 -0
  207. package/node_modules/playwright-core/lib/vite/recorder/assets/codeMirrorModule-DK72OMRi.js +32 -0
  208. package/node_modules/playwright-core/lib/vite/recorder/assets/codicon-DCmgc-ay.ttf +0 -0
  209. package/node_modules/playwright-core/lib/vite/recorder/assets/index-BZpYJZ-P.css +1 -0
  210. package/node_modules/playwright-core/lib/vite/recorder/assets/index-Cn0mmDuv.js +129 -0
  211. package/node_modules/playwright-core/lib/vite/recorder/index.html +29 -0
  212. package/node_modules/playwright-core/lib/vite/recorder/playwright-logo.svg +9 -0
  213. package/node_modules/playwright-core/lib/vite/traceViewer/assets/codeMirrorModule-BEB2e8M3.js +32 -0
  214. package/node_modules/playwright-core/lib/vite/traceViewer/assets/defaultSettingsView-D-g2vrvf.js +184 -0
  215. package/node_modules/playwright-core/lib/vite/traceViewer/assets/urlMatch-L3liM589.js +1 -0
  216. package/node_modules/playwright-core/lib/vite/traceViewer/assets/xtermModule-B794rD2Z.js +7 -0
  217. package/node_modules/playwright-core/lib/vite/traceViewer/codeMirrorModule.-QdMvsKi.css +1 -0
  218. package/node_modules/playwright-core/lib/vite/traceViewer/codicon.DCmgc-ay.ttf +0 -0
  219. package/node_modules/playwright-core/lib/vite/traceViewer/defaultSettingsView.C8BeHuxd.css +1 -0
  220. package/node_modules/playwright-core/lib/vite/traceViewer/index.B_TqY17P.css +1 -0
  221. package/node_modules/playwright-core/lib/vite/traceViewer/index.html +44 -0
  222. package/node_modules/playwright-core/lib/vite/traceViewer/index.oNry3Hjv.js +1 -0
  223. package/node_modules/playwright-core/lib/vite/traceViewer/manifest.webmanifest +16 -0
  224. package/node_modules/playwright-core/lib/vite/traceViewer/playwright-logo.svg +9 -0
  225. package/node_modules/playwright-core/lib/vite/traceViewer/snapshot.B_Jk1wbt.js +1 -0
  226. package/node_modules/playwright-core/lib/vite/traceViewer/snapshot.html +10 -0
  227. package/node_modules/playwright-core/lib/vite/traceViewer/sw.bundle.js +4 -0
  228. package/node_modules/playwright-core/lib/vite/traceViewer/uiMode.CYwC_gH1.js +5 -0
  229. package/node_modules/playwright-core/lib/vite/traceViewer/uiMode.CyMfwkXJ.css +1 -0
  230. package/node_modules/playwright-core/lib/vite/traceViewer/uiMode.html +18 -0
  231. package/node_modules/playwright-core/lib/vite/traceViewer/xtermModule.kHJ-D0s7.css +1 -0
  232. package/node_modules/playwright-core/lib/webp_codec.LICENSE +173 -0
  233. package/node_modules/playwright-core/lib/webp_codec.wasm +0 -0
  234. package/node_modules/playwright-core/lib/xdg-open +1267 -0
  235. package/node_modules/playwright-core/package.json +34 -0
  236. package/package.json +13 -7
  237. package/protocol/index.json +75 -21
  238. package/protocol/operations/agent.sessions.list.json +100 -0
  239. package/protocol/operations/agent.sessions.read.json +266 -0
  240. package/protocol/operations/conversation.settings.check.json +147 -4
  241. package/protocol/operations/conversation.settings.read.json +145 -3
  242. package/protocol/operations/conversation.settings.update.json +166 -4
  243. package/protocol/operations/conversation.start.json +2 -1
  244. package/protocol/operations/extension.call.json +132 -0
  245. package/protocol/operations/extension.content.json +78 -0
  246. package/protocol/operations/extension.describe.json +195 -0
  247. package/protocol/operations/extension.install.json +198 -0
  248. package/protocol/operations/extension.list.json +123 -0
  249. package/protocol/operations/extension.manage.json +55 -0
  250. package/protocol/operations/extension.read.json +112 -0
  251. package/protocol/operations/kernel.interrupt.json +20 -0
  252. package/protocol/operations/kernel.read.json +30 -0
  253. package/protocol/operations/kernel.run.json +36 -1
  254. package/protocol/operations/kernel.stop.json +10 -0
  255. package/protocol/operations/project.work.read.json +3 -2
  256. package/protocol/operations/session.grant.json +9 -0
  257. package/scripts/browser-checks.mjs +53 -0
  258. package/scripts/screen-check.mjs +193 -0
  259. package/scripts/third-party-acceptance.mjs +77 -0
  260. package/vendor/composition.json +111 -111
  261. package/vendor/rho-workspace-plugin-agent-0.4.29.tgz +0 -0
  262. package/vendor/rho-workspace-plugin-annotations-0.5.2.tgz +0 -0
  263. package/vendor/rho-workspace-plugin-documents-0.4.11.tgz +0 -0
  264. package/vendor/rho-workspace-plugin-kernel-0.5.5.tgz +0 -0
  265. package/web/theme.css +17 -2
  266. package/dist/web/assets/choices-B-y2OYvE.js +0 -1
  267. package/dist/web/assets/dist-CBM2oq6g.js +0 -1
  268. package/dist/web/assets/dist-CH56yNDn.js +0 -3
  269. package/dist/web/assets/explore-in-muWXOGOY.js +0 -1
  270. package/dist/web/assets/graph-CK-df5lh.js +0 -2
  271. package/dist/web/assets/index-DBd77u4a.css +0 -1
  272. package/dist/web/assets/overview-D1Ev2OC_.js +0 -6
  273. package/dist/web/assets/preview-HbmQKUGY.js +0 -1
  274. package/dist/web/assets/workspace-d5Hw_ClZ.js +0 -5
  275. package/vendor/rho-workspace-plugin-agent-0.4.27.tgz +0 -0
  276. package/vendor/rho-workspace-plugin-documents-0.4.10.tgz +0 -0
  277. package/vendor/rho-workspace-plugin-kernel-0.5.2.tgz +0 -0
package/docs/FRONTEND.md CHANGED
@@ -160,18 +160,31 @@ inspect what happened. The application gives those actions direct places:
160
160
  an ended session stay with their cells in the Notebook. With these views on the page, the
161
161
  Notebook leaves its own variables and plots out.
162
162
  - **Data flow** (`rho.flow`) shows how the values of a live session were made, as a tab beside
163
- Variables (else in the right column). Each cell that made something still there is a box, in
164
- the order the cells ran: its first line or purpose, the project files and folders it read, and
165
- what it made one to a line (values with type and size, its plots, the files it wrote). A line
166
- in the left margin runs from a value, or a written file, to each box that read it. A cell
167
- that changed a value it read (`m$x <- …`) continues the cell that made it: its box says
168
- "Changes what R 6 made", and what that value came from goes with it. A box that read a value
169
- or file made again since says so in amber. Pointing at a box keeps its path in view and fades
170
- the rest; the newest cell's box is outlined. A value opens as its own view, a file in its
171
- viewer; the box's head opens its code (with the code of the cells it continues), its plots,
172
- who ran it and Show in the Notebook. It follows the kernel's records (below), not the code:
173
- 60 values, 8 plots and 24 written files are drawn at most, and older ones are counted
174
- ([episode](SIMULATED-PROJECT-EPISODE.md#data-flow-html-pages-and-object-dependent-cases)).
163
+ Variables (else in the right column). It is a graph of values: the project files and folders
164
+ the session read at the top, the results at the bottom (the files it wrote and the plots it
165
+ drew, else the values nothing reads), and the values between in rows. Each node is titled with
166
+ the meaning its `# means:` comment gives (the Agent writes these above the statement that first
167
+ makes the value; `# means NAME:` names one of several), with the name beneath, and shows the
168
+ name alone without one. A bar names the results: choosing one draws what leads to it, and the
169
+ first is chosen when every result at once would put more than six values in a row. Values that
170
+ lead to no result are named below the graph, and choosing one draws what leads to it. A chosen
171
+ value colors what it comes from and what comes of it; its panel gives its meaning, how and where
172
+ it was made, what it uses and leads to, and which results it reaches. A value can be looked at,
173
+ a file opened, and the cell that made it shown in the Notebook. A narrow view (under 640 px)
174
+ puts the chosen value above the graph. Its values come from the kernel's records (below), each
175
+ meaning from the code of the cell that made the value, and at most 80 values are drawn at once
176
+ ([episode](VARIABLE-FLOW-EPISODE.md#meaning-in-the-code)).
177
+ - **How variables relate** ([episode](VARIABLE-FLOW-EPISODE.md)). Under each Notebook cell, what it
178
+ read and from which cell ("Read co from R 3"), and the later cells that read what it made ("ratio
179
+ read in R 6"); a cell named there goes to that cell and marks it. A cell that makes at least three
180
+ values offers "How its values came about", the same graph, under it. Variables names the cell that
181
+ made each value as it is now and the cells that read it. An R or Python script's editor has a Data
182
+ flow switch in its header, kept with the page: the script's flow, read from the text in the editor
183
+ as it is typed (nothing runs), shows beside the code, or below it in a view under 640 px. Its
184
+ nodes are titled by the same comments as the session's, and the flow line says how many values
185
+ have a meaning written in the code. The code marks the lines that make the chosen value, those it
186
+ comes from and those it leads to, in the colors of the key above the flow; choosing a value puts
187
+ the cursor on the line that makes it, and a click on a line that makes a value chooses it.
175
188
  - **Servers** (`rho.servers`) shows where the live sessions run: this machine and each place, a
176
189
  folder on one of the person's servers, reached through serverctl when serverctl manages it and
177
190
  with ssh otherwise. A place shows its server and folder, how it is reached, what its last check saw
@@ -502,8 +515,11 @@ opening a value or a server's file as a view, code waiting for the Notebook's li
502
515
  Notebook's form with the page, which views the page has, and a conversation's share of the
503
516
  sessions. Highlighting and Markdown come from the shell services (`highlight`, `markdown`).
504
517
  The plugin's `./code` finds the statement a script line runs (`statementAt`), writes the code
505
- that loads a table or runs a script, and makes Data flow's boxes and lanes (`lineage`);
506
- `web/entries/documents.tsx` sends a line through the page's `runCode` shell service.
518
+ that loads a table or runs a script, what each cell read from which cell (`cellRelations`), and
519
+ Data flow's graph of values from a session (`sessionGraph`) or a script's text (`scriptGraph`);
520
+ `web/entries/documents.tsx` sends a line through the page's `runCode` shell service, draws a
521
+ script's graph with the plugin's `ScriptFlowView`, keeps the chosen value (from the graph or the
522
+ cursor's line, `graphNodeAt`) and marks the lines behind and in front of it (`graphMarks`).
507
523
  The HTML page view is `html.reader` from Rho-plugins (HTML 0.1.0); Rho gives it `pageFrame`, the
508
524
  service's `/frame.html` (sandboxed, with its own policy and no network; the page's policy adds
509
525
  only `frame-src 'self'`), and `fileBytes`, a file snapshot's bytes (`readFile` in `web/previews.ts`).
package/docs/HEADLESS.md CHANGED
@@ -1,4 +1,4 @@
1
- # Rho local backend 0.5.1
1
+ # Rho local backend
2
2
 
3
3
  Rho selects nine independent capability packages: annotations plus documents, files, R,
4
4
  requirements, tables, media, charts and Agent. Shared contracts contain generic envelopes/service ports and ordinary-file
@@ -37,23 +37,39 @@ it. Missing browser renderers do not disable the headless protocol.
37
37
  ## Install and start
38
38
 
39
39
  The selected baseline is macOS arm64, Node 22.22.3 (engine range
40
- `>=22.22.0 <23`), npm 10.9.8, Python 3 with `fcntl`, and Rscript 4.5.2. Windows x64
40
+ `>=22.22.0 <27`; the suite and the installed check also passed on Node 24.22.2 and
41
+ 26.13.0), npm 10.9.8, Python 3 with `fcntl`, and Rscript 4.5.2. Windows x64
41
42
  was checked with Node 22.23.4 and Rscript 4.5.1; its writer lock needs no Python, and
42
43
  there `rho.cmd` starts Rho and Ctrl+Break on its console stops it in order.
43
- The unsigned local tarball contains Plugins and the selected digest-checked Core
44
- binary. R and any project-selected packages are external prerequisites, and so are
45
- the Agent clients: conversations drive the person's installed Claude Code or Codex.
44
+ The unsigned npm package `@rho-workspace/rho` contains Plugins and one digest-checked Core
45
+ binary for each of macOS arm64, Linux x64 and arm64 and Windows x64; CI installs it on each.
46
+ R and any project-selected packages are external prerequisites, and so are the Agent
47
+ clients: conversations drive the person's installed Claude Code or Codex.
46
48
  The service, documents, declared files and saved resource readers work without R.
47
49
  An unavailable Rscript returns an unknown dependency probe and prevents managed R execution.
48
- Other platforms and npm registry publication are unverified.
50
+ Other platforms are unverified.
49
51
 
50
52
  ```sh
51
- npm install --prefix /absolute/install /absolute/rho-workspace-rho-0.5.2.tgz
52
- /absolute/install/node_modules/.bin/rho \
53
- --root /absolute/projects --state-dir /absolute/service-state
53
+ npm install -g @rho-workspace/rho
54
+ rho --root /absolute/projects --state-dir /absolute/service-state
54
55
  ```
55
56
 
56
57
  Create the allowed projects directory first. Keep service state outside projects.
58
+
59
+ A person who has no folders to name runs the package with no arguments instead (from
60
+ 0.5.4; 0.5.3 prints its usage and exits 2):
61
+
62
+ ```sh
63
+ npx @rho-workspace/rho
64
+ ```
65
+
66
+ That start uses `~/Rho/projects` and `~/Rho/state`, creates both, ships the example
67
+ project on a new state, and prints — after the machine line — the address to open,
68
+ the two folders, and whether the Agent client and R were found, so a missing one is
69
+ read at startup rather than discovered later. It opens the address in a browser when
70
+ stdout is an interactive terminal. Every flagged start keeps the output it had; no
71
+ argument used to print this page and exit 2.
72
+
57
73
  Startup prints the loopback URL and private connection-file location, never the
58
74
  credential. Opening that URL in a browser on the same machine is the access: the
59
75
  service answers a same-origin request from loopback as the local person, with the
@@ -63,7 +79,17 @@ must expire; that link is a credential and is only as good as its five-minute
63
79
  window and single use. A credential that is present must still be valid, so an old
64
80
  link never silently widens to local access; a same-origin request that carries no
65
81
  credential is the machine's own. Host and Origin are checked on every request, and
66
- a browser request marked as coming from another site is refused. `--port`, `--rscript`, `--core`, `--plugins` and `--limits` are explicit
82
+ a browser request marked as coming from another site is refused.
83
+
84
+ A start without `--port` takes the port this state's last start had, so a bookmarked
85
+ address and every Agent connection still reach it after a restart; only when another
86
+ program holds that port does it take a new one, and then each Agent connection file in
87
+ the state that named the old address is rewritten to the new one, keeping its token.
88
+ `--port 0` always takes a new port. A selected port that is in use is refused with the
89
+ port named, never replaced. A second start on a state that is already running is
90
+ refused with the running service's address.
91
+
92
+ `--port`, `--rscript`, `--core`, `--plugins` and `--limits` are explicit
67
93
  operator selections; `RHO_RSCRIPT`, `RHO_CORE_BINARY` and `RHO_PYTHON` select
68
94
  equivalent runtimes. A Core override is outside bundled digest verification.
69
95
  A source checkout has no bundled Core: packaging supplies one per platform under
@@ -106,17 +132,32 @@ Exact Host and supplied Origin are checked. The bearer credential is project
106
132
  scoped for external callers. CLI shutdown stops only Hosts started by this
107
133
  service and reports confirmation separately. Existing Hosts keep their owner.
108
134
 
109
- ### Connect Claude Code
135
+ ### Connect Claude Code or Codex
136
+
137
+ The running service's operator connection adds Rho to the person's own Claude Code
138
+ or Codex for one project, as the project page's "Add to …" button does:
139
+
140
+ ```sh
141
+ rho --grant /absolute/service-state/connection.json --project PROJECT_FOLDER --agent claude-code|codex
142
+ ```
143
+
144
+ It gives that Agent its own grant to the project (kept when it still reaches the
145
+ service), runs that Agent's `mcp remove` and `mcp add` on this machine — Claude Code's
146
+ with `-s local` in the project folder, Codex's for every folder — and records it, so the
147
+ page shows it under that Agent. The JSON reply names the project, its root, the number
148
+ of granted methods, whether a new grant was made, and what was added (`name`, `scope`,
149
+ `at`). A session that was already open does not have the tools; a new one does.
110
150
 
111
- The running service's operator connection grants one project to one Agent session
112
- and prints how Claude Code starts that session's MCP server:
151
+ Without `--agent`, the same connection grants one project to one Agent session and
152
+ prints how Claude Code starts that session's MCP server:
113
153
 
114
154
  ```sh
115
155
  rho --grant /absolute/service-state/connection.json --project PROJECT_FOLDER [--session NAME]
116
156
  ```
117
157
 
118
158
  `--project` is the folder relative to `--root`; `--session` defaults to
119
- `claude-code`. The JSON reply names the project, the private session connection
159
+ `claude-code`, the session `--agent claude-code` uses, and `--session codex` is the one
160
+ `--agent codex` uses. When the service is not running, both forms say so and exit 1. The JSON reply names the project, the private session connection
120
161
  file, the number of granted methods (the server default), an `mcp` entry
121
162
  (`name`, `command`, `args`) for an MCP configuration file, and the equivalent
122
163
  `claude mcp add rho-<folder> -- … --mcp <file>` command. `rho --mcp FILE` serves
@@ -952,6 +993,11 @@ Notebook 0.1.0 (`@rho-workspace/plugin-kernel`) keeps one live R session and one
952
993
  live Python session per project, in the project folder, shared by the person and
953
994
  their Agent. `kernel.run` queues a cell in its language's session and starts the
954
995
  session when none is live; `waitMs` waits up to `maxWaitMs` for it to end.
996
+ Since Notebook 0.5.3 a cell may name `interpreter`, a program in a folder of the project
997
+ such as an environment's `.venv/bin/python`; the project keeps it for that language's later
998
+ sessions, and a session in which only that caller ran cells starts again with it, while one
999
+ where anyone else ran a cell is refused. Each session and each cell records the program
1000
+ (relative to the project when it is in it) and the version that ran it.
955
1001
  `kernel.read` returns the sessions, their variables and the cells, and never starts
956
1002
  a session. `kernel.inspect` returns one value of a live session as its session
957
1003
  describes it: its kind (table, model, vector, list, function, value or other), class,
@@ -1,5 +1,9 @@
1
1
  # Build a UI extension
2
2
 
3
+ For independently installed operations, Skills and live HTML views, use the
4
+ [third-party plugin channel](THIRD-PARTY-PLUGINS.md). This page covers compiled
5
+ React entries over an existing Rho capability.
6
+
3
7
  A UI extension is a React view over an existing Rho capability, such as Documents
4
8
  or Tables. The package owns its view; the existing capability owns data, edits and
5
9
  operations. Rho supplies tabs, splits, focus and versioned resource bindings.
@@ -0,0 +1,190 @@
1
+ # Develop and install third-party plugins
2
+
3
+ Rho can install independent npm packages while it is running. A package supplies
4
+ operations, Skills and standalone HTML views; it does not require rebuilding Rho
5
+ or becoming a base dependency. The first consumer is the optional
6
+ [sclet adapter](https://github.com/YuLab-SMU/Rho-plugins/tree/main/examples/sclet-plugin).
7
+ Its scientific implementation remains in sclet and its objects remain in the
8
+ project's shared R session. See the [observed episode](THIRD-PARTY-PLUGINS-EPISODE.md).
9
+
10
+ This is source functionality after Rho 0.5.4, not a new npm release. Build the
11
+ current checkout with `npm run build` and use `node dist/cli.js` in place of
12
+ `rho` until a distribution containing it is installed.
13
+
14
+ ## Install and manage
15
+
16
+ Open a project, then **Plugins → Third-party plugins**. Install a directory entry
17
+ or enter a package source. The installed card shows its version, source, enabled
18
+ state and content digest. Open its view, read its guide, update, disable or remove
19
+ it there. An invalid source or failed update leaves the previous selection intact.
20
+
21
+ Only install packages you trust. Hosts run native code with the Rho process user's
22
+ OS permissions. Disabling npm lifecycle scripts prevents install hooks; it does
23
+ not make plugin execution a sandbox. No approval is added to already authorized
24
+ analysis. Paired browsers and Agent connections cannot install or manage packages.
25
+
26
+ The equivalent commands use the running service's private connection file:
27
+
28
+ ```sh
29
+ rho plugin add /absolute/path/my-plugin
30
+ rho plugin add /absolute/path/my-plugin-0.1.0.tgz
31
+ rho plugin add @your-org/rho-plugin@0.1.0
32
+ rho plugin add 'git+https://github.com/your-org/repository.git#COMMIT:packages/plugin'
33
+ rho plugin list
34
+ rho plugin update my-plugin
35
+ rho plugin update my-plugin --source @your-org/rho-plugin@0.2.0
36
+ rho plugin disable my-plugin
37
+ rho plugin enable my-plugin
38
+ rho plugin remove my-plugin
39
+ ```
40
+
41
+ Add `--connection /absolute/service-state/connection.json` for a nondefault
42
+ service. The default is `~/Rho/state/connection.json`. These commands do not start
43
+ a service. Never share the connection file. Public HTTPS `.tgz` URLs are also
44
+ accepted. Git sources require Git; package staging requires npm. Git submodules
45
+ and build hooks are not run. Build and include runtime files before distribution.
46
+
47
+ Installation stages an isolated dependency tree using npm with `--ignore-scripts`
48
+ and `--install-links`, validates the manifest and contained files, hashes the tree,
49
+ then atomically selects it. The source selector, resolved Git commit when present,
50
+ package version and runtime-tree digest remain visible. Listing does not import
51
+ plugin code. Content and calls verify the installed tree before use.
52
+
53
+ Disable blocks new calls and views. Remove takes the package out of the installed
54
+ selection. Both preserve native tasks, R sessions, project files and receipts.
55
+ Package revisions are retained in the service's `plugins/versions` directory;
56
+ remove is not a disk-purge command. Closing a view only releases its renderer.
57
+
58
+ ## Create a package
59
+
60
+ ```sh
61
+ rho plugin create my-plugin --id lab.my-plugin
62
+ rho plugin check ./my-plugin
63
+ rho plugin dev ./my-plugin
64
+ ```
65
+
66
+ `create` refuses to overwrite a directory. The generated package has a working
67
+ greeting operation, Skill and view. `dev` installs checked snapshots on source
68
+ changes, ignoring `.git` and `node_modules`. Reopen a view to load a new snapshot.
69
+ Invalid edits retain the last working installation. No Rho rebuild is needed.
70
+
71
+ | File | Responsibility |
72
+ | --- | --- |
73
+ | `package.json` | npm name/version, runtime files and `rhoPlugin: "rho-plugin.json"` |
74
+ | `rho-plugin.json` | API version 1, unique plugin id, title, description and entries |
75
+ | `host.mjs` | `run(operation, input, context)` over the domain's public capabilities |
76
+ | `SKILL.md` | When/how to use the package, prerequisites, failures and result limits |
77
+ | `view.html` | Prebuilt HTML with inline scripts/styles; may bundle a framework |
78
+
79
+ Each operation declares `id`, `title`, `description`, `effect` (`read` or
80
+ `native`), the Rho `methods` it delegates, and an object `inputSchema`. Each Skill
81
+ or view declares `id`, `title` and a package-relative `file`. The manifest's
82
+ `operations`, `skills` and `views` arrays are required, but may be empty. A host
83
+ is required only when operations exist. The checker validates entry containment,
84
+ API compatibility, identifiers, duplicate entries, schemas and entry sizes.
85
+
86
+ ```js
87
+ export async function run(operation, input, context) {
88
+ if (operation === 'read-sessions') {
89
+ const value = await context.call('kernel.read', { limit: 1 });
90
+ return { sessions: value.sessions };
91
+ }
92
+ throw new Error('Unknown operation');
93
+ }
94
+ ```
95
+
96
+ `context.projectRoot` is the selected project, `context.invocationId` identifies
97
+ this call, and `context.changeId(label)` supplies a stable delegated write id.
98
+ `context.call(method, body)` validates the ordinary Rho schema, original caller's
99
+ grant, current project and owner availability. Declare every delegated method.
100
+ A read operation cannot delegate a mutating method. It must also keep its own
101
+ native work read-only; native host code is trusted, not OS-confined.
102
+
103
+ The host runs in a disposable child process for each call, without the service
104
+ token. Keep long work in its actual native owner and return its handle promptly.
105
+ For example sclet submits `kernel.run` with `waitMs: 0`, then observes the same
106
+ cell with `kernel.read`. Do not create a second scientific state store in Rho.
107
+
108
+ ## Agent and view entries
109
+
110
+ Agents discover installed packages through `extension.list`, read their schema
111
+ with `extension.describe`, and read a Skill through `extension.content` with
112
+ `kind: "skill"`. These operations are available through the existing layered MCP
113
+ discovery. They then call:
114
+
115
+ ```json
116
+ {
117
+ "pluginId": "lab.my-plugin",
118
+ "expectedDigest": "64-character digest from extension.describe",
119
+ "operation": "greet",
120
+ "input": { "name": "World" },
121
+ "changeId": "original-request-1"
122
+ }
123
+ ```
124
+
125
+ This is the body of `extension.call`; direct HTTP clients also supply `projectId`.
126
+ The returned receipt separates plugin completion from the native result in
127
+ `value`. Native invocations retain pending/completed/unknown receipts and delegated
128
+ requests/replies. Repeat the **exact** request to observe the same receipt, even
129
+ after update or removal. `extension.read` reads it by `invocationId` for the same
130
+ caller/project. A restart converts pending receipts to unknown; it never replays
131
+ them. Read-only calls do not accumulate durable receipts. No plugin receipt makes
132
+ native work Core-managed or establishes scientific validity.
133
+
134
+ A view runs in an iframe with an opaque origin, no service credential or storage
135
+ access, and no network loading. Bundle assets inline or as data URLs. Its bridge
136
+ is restricted to the selected package and digest:
137
+
138
+ ```js
139
+ const receipt = await rho.call('greet', { name: 'World' });
140
+ output.textContent = receipt.state === 'completed'
141
+ ? receipt.value.greeting : receipt.error;
142
+ ```
143
+
144
+ Pass a third argument to `rho.call` to retain an explicit original changeId.
145
+ The default generates one per deliberate call. A stale digest is refused; reopen
146
+ the view after an update. Several views may be declared and selected in the plugin
147
+ panel. These runtime views currently live on Plugins, not in Studio's resource
148
+ binding/layout contract. Existing compiled React extensions still use
149
+ [UI extension authoring](PLUGIN-AUTHORING.md).
150
+
151
+ ## Contribute and distribute
152
+
153
+ Keep your repository, license, dependencies and release history independent. Check
154
+ the packed artifact, not just source: `npm pack --ignore-scripts`, then install
155
+ that tarball in a disposable Rho project. Exercise missing prerequisites, an input
156
+ error, recovery, update and removal. Record the Rho/API version, package digest,
157
+ native versions and actual result. Preserve user data and avoid credentials in
158
+ examples or diagnostics. Publish to your own npm namespace or share a public Git
159
+ source/tarball; Rho does not publish packages on your behalf.
160
+
161
+ No central registration is needed to install a package. To be discoverable in the
162
+ bundled directory, submit a PR editing
163
+ [`src/extension-directory.ts`](../src/extension-directory.ts), linking the public
164
+ source, license, author guide and a reproducible acceptance record. Propose an
165
+ immutable Git commit or exact npm version. Maintainers check the declared scope;
166
+ directory inclusion is not a security audit, release signature or scientific
167
+ endorsement. Future releases of the package can update that entry independently.
168
+
169
+ ## Resource limits and current scope
170
+
171
+ Use the service's `--limits` JSON file with an `extensions` object to override
172
+ limits. Exceeding a limit refuses new work, retains the previous selected package
173
+ and obtained receipts, or records an unknown result after an interrupted call.
174
+
175
+ | Protected resource | Default configuration |
176
+ | --- | --- |
177
+ | Installed selections / retained revisions | `maxPlugins: 32`, `maxVersions: 128` |
178
+ | Admitted runtime tree | `maxFiles: 20000`, `maxPackageBytes: 134217728` |
179
+ | Skill/view bytes | `maxContentBytes: 524288` |
180
+ | Durable invocations / receipt and result bytes | `maxReceipts: 2000`, `maxResultBytes: 1048576` |
181
+ | Concurrent calls / delegated calls per invocation | `maxRunning: 4`, `maxDelegations: 32` |
182
+ | Worker / each install subprocess | `timeoutMs: 30000`, `installTimeoutMs: 180000` |
183
+
184
+ The tree-size check applies after npm staging; it is not a disk quota on npm/Git.
185
+ A timed-out worker does not prove a delegated native task stopped. Observe its
186
+ original identity. Retention limits refuse rather than silently evict identities;
187
+ raise them deliberately when appropriate. Manifests are capped at 64 KiB, with
188
+ 32 operations and 16 entries of each content kind. The browser permits four
189
+ pending calls per view. macOS with Node 22 is observed in this episode; Windows,
190
+ Linux and independent developer usability have not been established for this path.