@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.
- package/README.md +24 -5
- package/dist/browser-access.js +3 -2
- package/dist/capabilities.d.ts +29 -2
- package/dist/capabilities.js +79 -2
- package/dist/cli.js +237 -99
- package/dist/contract.generated.d.ts +441 -16
- package/dist/contract.generated.js +1 -1
- package/dist/contracts/owners.generated.js +459 -10
- package/dist/conversation-presentation.d.ts +3 -1
- package/dist/conversation-presentation.js +16 -6
- package/dist/conversations.d.ts +10 -6
- package/dist/conversations.js +17 -13
- package/dist/discovery.d.ts +1 -0
- package/dist/discovery.js +3 -3
- package/dist/extension-contract.d.ts +99 -0
- package/dist/extension-contract.js +52 -0
- package/dist/extension-directory.d.ts +9 -0
- package/dist/extension-directory.js +11 -0
- package/dist/extension-worker.d.ts +1 -0
- package/dist/extension-worker.js +36 -0
- package/dist/extensions.d.ts +157 -0
- package/dist/extensions.js +349 -0
- package/dist/installs.d.ts +11 -0
- package/dist/installs.js +179 -0
- package/dist/plugin-cli.d.ts +1 -0
- package/dist/plugin-cli.js +139 -0
- package/dist/plugin-inventory.json +18 -0
- package/dist/plugins.d.ts +3 -3
- package/dist/project-notes.js +2 -0
- package/dist/project-work.d.ts +3 -1
- package/dist/project-work.js +15 -2
- package/dist/protocol.d.ts +7 -0
- package/dist/protocol.js +11 -7
- package/dist/screen-check-skill.d.ts +2 -0
- package/dist/screen-check-skill.js +39 -0
- package/dist/server.d.ts +6 -1
- package/dist/server.js +105 -15
- package/dist/web/.vite/manifest.json +65 -65
- package/dist/web/assets/{canvas-BXhC8RDZ.js → canvas-D8rDdfDz.js} +1 -1
- package/dist/web/assets/choices-b0XhrGQV.js +1 -0
- package/dist/web/assets/{console-e1P5qYQ5.js → console-BSjLGe0T.js} +1 -1
- package/dist/web/assets/{dist-Dd3iAGFy.js → dist-Buk0lwzI.js} +2 -2
- package/dist/web/assets/dist-Cw8hRIlT.js +1 -0
- package/dist/web/assets/dist-Tzoe_zm-.js +3 -0
- package/dist/web/assets/{dist-DEorbOW0.js → dist-foH9IKc6.js} +1 -1
- package/dist/web/assets/explore-in-BVUy3ZW_.js +1 -0
- package/dist/web/assets/graph-1OdIJ9l7.js +2 -0
- package/dist/web/assets/index-CsC3sTRq.css +1 -0
- package/dist/web/assets/{index-BYuKpyoi.js → index-CxmItXqa.js} +220 -121
- package/dist/web/assets/{notes-meaning-B3HFbh84.js → notes-meaning-pVbbQUGP.js} +1 -1
- package/dist/web/assets/overview-B9UtVJ32.js +6 -0
- package/dist/web/assets/preview-CksD_5KS.js +1 -0
- package/dist/web/assets/{review-BVh9jWMB.js → review-CMxQlQ-C.js} +1 -1
- package/dist/web/assets/{skills-DPaEYkln.js → skills-BFNSyrnD.js} +1 -1
- package/dist/web/assets/{skills-work-dvjfy_tu.js → skills-work-BGPSnF_I.js} +1 -1
- package/dist/web/assets/{studio-process-BYm8mjRJ.js → studio-process-CsRoTHOh.js} +2 -2
- package/dist/web/assets/{timeline-events-CDZ7wiJX.js → timeline-events-BbuuFWHV.js} +1 -1
- package/dist/web/assets/{work-turns-BeCt303c.js → work-turns-BvJlIMmA.js} +1 -1
- package/dist/web/assets/workspace-CWlkjLNx.js +5 -0
- package/dist/web/composition.json +80 -80
- package/dist/web/index.html +3 -3
- package/dist/web/renderer.json +1 -1
- package/dist/web-assets.d.ts +2 -1
- package/dist/web-assets.js +3 -2
- package/dist/work-contract.js +2 -2
- package/docs/FRONTEND.md +30 -14
- package/docs/HEADLESS.md +60 -14
- package/docs/PLUGIN-AUTHORING.md +4 -0
- package/docs/THIRD-PARTY-PLUGINS.md +190 -0
- package/example/pa14-qs/.rho/rho/conversations/c-67f77cfebaba2cea.json +1 -1
- package/example/pa14-qs/.rho/rho/conversations/c-91aa2e46b1ac1a6c.json +1 -1
- package/example/pa14-qs/.rho/rho/conversations/c-fa24dfd80dfe4bcb.json +1 -1
- package/node_modules/@hono/node-server/dist/index.js +11 -0
- package/node_modules/@hono/node-server/dist/index.mjs +11 -0
- package/node_modules/@hono/node-server/dist/listener.js +11 -0
- package/node_modules/@hono/node-server/dist/listener.mjs +11 -0
- package/node_modules/@hono/node-server/dist/request.js +11 -0
- package/node_modules/@hono/node-server/dist/request.mjs +11 -0
- package/node_modules/@hono/node-server/dist/server.js +11 -0
- package/node_modules/@hono/node-server/dist/server.mjs +11 -0
- package/node_modules/@hono/node-server/dist/vercel.js +11 -0
- package/node_modules/@hono/node-server/dist/vercel.mjs +11 -0
- package/node_modules/@hono/node-server/package.json +1 -1
- package/node_modules/@rho-workspace/plugin-agent/README.md +42 -1
- package/node_modules/@rho-workspace/plugin-agent/dist/acp-conversation.js +14 -3
- package/node_modules/@rho-workspace/plugin-agent/dist/activity-normalize.d.ts +1 -0
- package/node_modules/@rho-workspace/plugin-agent/dist/activity-normalize.js +2 -2
- package/node_modules/@rho-workspace/plugin-agent/dist/conversation.d.ts +1 -0
- package/node_modules/@rho-workspace/plugin-agent/dist/conversation.js +1 -0
- package/node_modules/@rho-workspace/plugin-agent/dist/dsh-session.d.ts +6 -0
- package/node_modules/@rho-workspace/plugin-agent/dist/dsh-session.js +174 -0
- package/node_modules/@rho-workspace/plugin-agent/dist/external-session-contract.d.ts +82 -0
- package/node_modules/@rho-workspace/plugin-agent/dist/external-session-contract.js +15 -0
- package/node_modules/@rho-workspace/plugin-agent/dist/external-session.d.ts +73 -0
- package/node_modules/@rho-workspace/plugin-agent/dist/external-session.js +190 -0
- package/node_modules/@rho-workspace/plugin-agent/dist/generic-acp.d.ts +11 -0
- package/node_modules/@rho-workspace/plugin-agent/dist/generic-acp.js +7 -0
- package/node_modules/@rho-workspace/plugin-agent/dist/index.d.ts +373 -0
- package/node_modules/@rho-workspace/plugin-agent/dist/index.js +1 -0
- package/node_modules/@rho-workspace/plugin-agent/dist/mcp.js +5 -1
- package/node_modules/@rho-workspace/plugin-agent/dist/operations.d.ts +33 -0
- package/node_modules/@rho-workspace/plugin-agent/dist/operations.js +3 -0
- package/node_modules/@rho-workspace/plugin-agent/dist/presentation.d.ts +14 -0
- package/node_modules/@rho-workspace/plugin-agent/dist/presentation.js +2 -0
- package/node_modules/@rho-workspace/plugin-agent/dist/ui-external-session.d.ts +15 -0
- package/node_modules/@rho-workspace/plugin-agent/dist/ui-external-session.js +37 -0
- package/node_modules/@rho-workspace/plugin-agent/package.json +5 -1
- package/node_modules/@rho-workspace/plugin-annotations/package.json +1 -1
- package/node_modules/@rho-workspace/plugin-documents/README.md +4 -0
- package/node_modules/@rho-workspace/plugin-documents/dist/index.d.ts +3 -0
- package/node_modules/@rho-workspace/plugin-documents/dist/index.js +1 -1
- package/node_modules/@rho-workspace/plugin-documents/package.json +1 -1
- package/node_modules/@rho-workspace/plugin-kernel/README.md +71 -10
- package/node_modules/@rho-workspace/plugin-kernel/dist/code.d.ts +2 -0
- package/node_modules/@rho-workspace/plugin-kernel/dist/code.js +4 -1
- package/node_modules/@rho-workspace/plugin-kernel/dist/contract.js +5 -0
- package/node_modules/@rho-workspace/plugin-kernel/dist/index.d.ts +7 -0
- package/node_modules/@rho-workspace/plugin-kernel/dist/index.js +55 -8
- package/node_modules/@rho-workspace/plugin-kernel/dist/lineage.d.ts +9 -6
- package/node_modules/@rho-workspace/plugin-kernel/dist/lineage.js +18 -41
- package/node_modules/@rho-workspace/plugin-kernel/dist/operations.js +5 -2
- package/node_modules/@rho-workspace/plugin-kernel/dist/script-flow.d.ts +39 -0
- package/node_modules/@rho-workspace/plugin-kernel/dist/script-flow.js +661 -0
- package/node_modules/@rho-workspace/plugin-kernel/dist/ui-base.d.ts +3 -0
- package/node_modules/@rho-workspace/plugin-kernel/dist/ui-base.js +10 -0
- package/node_modules/@rho-workspace/plugin-kernel/dist/ui-flow.d.ts +38 -4
- package/node_modules/@rho-workspace/plugin-kernel/dist/ui-flow.js +194 -97
- package/node_modules/@rho-workspace/plugin-kernel/dist/ui-notebook-work.js +1 -2
- package/node_modules/@rho-workspace/plugin-kernel/dist/ui-notebook.d.ts +10 -2
- package/node_modules/@rho-workspace/plugin-kernel/dist/ui-notebook.js +79 -18
- package/node_modules/@rho-workspace/plugin-kernel/dist/ui-styles.js +115 -45
- package/node_modules/@rho-workspace/plugin-kernel/dist/ui.d.ts +1 -1
- package/node_modules/@rho-workspace/plugin-kernel/dist/ui.js +1 -1
- package/node_modules/@rho-workspace/plugin-kernel/dist/value-graph.d.ts +63 -0
- package/node_modules/@rho-workspace/plugin-kernel/dist/value-graph.js +344 -0
- package/node_modules/@rho-workspace/plugin-kernel/package.json +1 -1
- package/node_modules/@rho-workspace/plugin-kernel/runners/runner.R +6 -3
- package/node_modules/@rho-workspace/plugin-kernel/runners/runner.py +6 -3
- package/node_modules/express-rate-limit/dist/index.cjs +1 -1
- package/node_modules/express-rate-limit/dist/index.mjs +1 -1
- package/node_modules/express-rate-limit/package.json +1 -1
- package/node_modules/ip-address/dist/ipv6.js +1 -1
- package/node_modules/ip-address/package.json +1 -1
- package/node_modules/playwright-core/LICENSE +202 -0
- package/node_modules/playwright-core/NOTICE +5 -0
- package/node_modules/playwright-core/ThirdPartyNotices.txt +13 -0
- package/node_modules/playwright-core/bin/install_media_pack.ps1 +5 -0
- package/node_modules/playwright-core/bin/install_webkit_wsl.ps1 +33 -0
- package/node_modules/playwright-core/bin/reinstall_chrome_beta_linux.sh +42 -0
- package/node_modules/playwright-core/bin/reinstall_chrome_beta_mac.sh +13 -0
- package/node_modules/playwright-core/bin/reinstall_chrome_beta_win.ps1 +24 -0
- package/node_modules/playwright-core/bin/reinstall_chrome_stable_linux.sh +42 -0
- package/node_modules/playwright-core/bin/reinstall_chrome_stable_mac.sh +12 -0
- package/node_modules/playwright-core/bin/reinstall_chrome_stable_win.ps1 +24 -0
- package/node_modules/playwright-core/bin/reinstall_msedge_beta_linux.sh +48 -0
- package/node_modules/playwright-core/bin/reinstall_msedge_beta_mac.sh +11 -0
- package/node_modules/playwright-core/bin/reinstall_msedge_beta_win.ps1 +23 -0
- package/node_modules/playwright-core/bin/reinstall_msedge_dev_linux.sh +48 -0
- package/node_modules/playwright-core/bin/reinstall_msedge_dev_mac.sh +11 -0
- package/node_modules/playwright-core/bin/reinstall_msedge_dev_win.ps1 +23 -0
- package/node_modules/playwright-core/bin/reinstall_msedge_stable_linux.sh +48 -0
- package/node_modules/playwright-core/bin/reinstall_msedge_stable_mac.sh +11 -0
- package/node_modules/playwright-core/bin/reinstall_msedge_stable_win.ps1 +24 -0
- package/node_modules/playwright-core/browsers.json +52 -0
- package/node_modules/playwright-core/cli.js +22 -0
- package/node_modules/playwright-core/index.js +17 -0
- package/node_modules/playwright-core/index.mjs +28 -0
- package/node_modules/playwright-core/lib/bootstrap.js +149 -0
- package/node_modules/playwright-core/lib/coreBundle.js +78041 -0
- package/node_modules/playwright-core/lib/entry/cliDaemon.js +5 -0
- package/node_modules/playwright-core/lib/entry/dashboardApp.js +3 -0
- package/node_modules/playwright-core/lib/entry/mcp.js +10 -0
- package/node_modules/playwright-core/lib/entry/oopBrowserDownload.js +3 -0
- package/node_modules/playwright-core/lib/package.js +50 -0
- package/node_modules/playwright-core/lib/server/chromium/appIcon.png +0 -0
- package/node_modules/playwright-core/lib/server/electron/loader.js +123 -0
- package/node_modules/playwright-core/lib/serverRegistry.js +1939 -0
- package/node_modules/playwright-core/lib/serverRegistry.js.LICENSE +65 -0
- package/node_modules/playwright-core/lib/tools/cli-client/channelSessions.js +141 -0
- package/node_modules/playwright-core/lib/tools/cli-client/cli.js +7 -0
- package/node_modules/playwright-core/lib/tools/cli-client/help.json +808 -0
- package/node_modules/playwright-core/lib/tools/cli-client/minimist.js +128 -0
- package/node_modules/playwright-core/lib/tools/cli-client/output.js +352 -0
- package/node_modules/playwright-core/lib/tools/cli-client/program.js +422 -0
- package/node_modules/playwright-core/lib/tools/cli-client/registry.js +180 -0
- package/node_modules/playwright-core/lib/tools/cli-client/session.js +261 -0
- package/node_modules/playwright-core/lib/tools/dashboard/appIcon.png +0 -0
- package/node_modules/playwright-core/lib/tools/utils/extension.js +112 -0
- package/node_modules/playwright-core/lib/tools/utils/socketConnection.js +108 -0
- package/node_modules/playwright-core/lib/utilsBundle.js +86078 -0
- package/node_modules/playwright-core/lib/utilsBundle.js.LICENSE +1890 -0
- package/node_modules/playwright-core/lib/vite/dashboard/assets/codeMirrorModule--QdMvsKi.css +1 -0
- package/node_modules/playwright-core/lib/vite/dashboard/assets/codeMirrorModule-CQ8RZGBm.js +32 -0
- package/node_modules/playwright-core/lib/vite/dashboard/assets/codicon-DCmgc-ay.ttf +0 -0
- package/node_modules/playwright-core/lib/vite/dashboard/assets/firefox-1bWoP6pv.svg +1 -0
- package/node_modules/playwright-core/lib/vite/dashboard/assets/firefox-beta-k3eOH_eK.svg +1 -0
- package/node_modules/playwright-core/lib/vite/dashboard/assets/firefox-nightly-Cp5nfeDT.svg +1 -0
- package/node_modules/playwright-core/lib/vite/dashboard/assets/index-AwgwcYie.css +1 -0
- package/node_modules/playwright-core/lib/vite/dashboard/assets/index-hRvO4yU2.js +12 -0
- package/node_modules/playwright-core/lib/vite/dashboard/assets/safari-na3_-uQk.svg +1 -0
- package/node_modules/playwright-core/lib/vite/dashboard/index.html +29 -0
- package/node_modules/playwright-core/lib/vite/dashboard/playwright-logo.svg +24 -0
- package/node_modules/playwright-core/lib/vite/htmlReport/index.html +16 -0
- package/node_modules/playwright-core/lib/vite/htmlReport/report.css +2 -0
- package/node_modules/playwright-core/lib/vite/htmlReport/report.js +32 -0
- package/node_modules/playwright-core/lib/vite/recorder/assets/codeMirrorModule--QdMvsKi.css +1 -0
- package/node_modules/playwright-core/lib/vite/recorder/assets/codeMirrorModule-DK72OMRi.js +32 -0
- package/node_modules/playwright-core/lib/vite/recorder/assets/codicon-DCmgc-ay.ttf +0 -0
- package/node_modules/playwright-core/lib/vite/recorder/assets/index-BZpYJZ-P.css +1 -0
- package/node_modules/playwright-core/lib/vite/recorder/assets/index-Cn0mmDuv.js +129 -0
- package/node_modules/playwright-core/lib/vite/recorder/index.html +29 -0
- package/node_modules/playwright-core/lib/vite/recorder/playwright-logo.svg +9 -0
- package/node_modules/playwright-core/lib/vite/traceViewer/assets/codeMirrorModule-BEB2e8M3.js +32 -0
- package/node_modules/playwright-core/lib/vite/traceViewer/assets/defaultSettingsView-D-g2vrvf.js +184 -0
- package/node_modules/playwright-core/lib/vite/traceViewer/assets/urlMatch-L3liM589.js +1 -0
- package/node_modules/playwright-core/lib/vite/traceViewer/assets/xtermModule-B794rD2Z.js +7 -0
- package/node_modules/playwright-core/lib/vite/traceViewer/codeMirrorModule.-QdMvsKi.css +1 -0
- package/node_modules/playwright-core/lib/vite/traceViewer/codicon.DCmgc-ay.ttf +0 -0
- package/node_modules/playwright-core/lib/vite/traceViewer/defaultSettingsView.C8BeHuxd.css +1 -0
- package/node_modules/playwright-core/lib/vite/traceViewer/index.B_TqY17P.css +1 -0
- package/node_modules/playwright-core/lib/vite/traceViewer/index.html +44 -0
- package/node_modules/playwright-core/lib/vite/traceViewer/index.oNry3Hjv.js +1 -0
- package/node_modules/playwright-core/lib/vite/traceViewer/manifest.webmanifest +16 -0
- package/node_modules/playwright-core/lib/vite/traceViewer/playwright-logo.svg +9 -0
- package/node_modules/playwright-core/lib/vite/traceViewer/snapshot.B_Jk1wbt.js +1 -0
- package/node_modules/playwright-core/lib/vite/traceViewer/snapshot.html +10 -0
- package/node_modules/playwright-core/lib/vite/traceViewer/sw.bundle.js +4 -0
- package/node_modules/playwright-core/lib/vite/traceViewer/uiMode.CYwC_gH1.js +5 -0
- package/node_modules/playwright-core/lib/vite/traceViewer/uiMode.CyMfwkXJ.css +1 -0
- package/node_modules/playwright-core/lib/vite/traceViewer/uiMode.html +18 -0
- package/node_modules/playwright-core/lib/vite/traceViewer/xtermModule.kHJ-D0s7.css +1 -0
- package/node_modules/playwright-core/lib/webp_codec.LICENSE +173 -0
- package/node_modules/playwright-core/lib/webp_codec.wasm +0 -0
- package/node_modules/playwright-core/lib/xdg-open +1267 -0
- package/node_modules/playwright-core/package.json +34 -0
- package/package.json +13 -7
- package/protocol/index.json +75 -21
- package/protocol/operations/agent.sessions.list.json +100 -0
- package/protocol/operations/agent.sessions.read.json +266 -0
- package/protocol/operations/conversation.settings.check.json +147 -4
- package/protocol/operations/conversation.settings.read.json +145 -3
- package/protocol/operations/conversation.settings.update.json +166 -4
- package/protocol/operations/conversation.start.json +2 -1
- package/protocol/operations/extension.call.json +132 -0
- package/protocol/operations/extension.content.json +78 -0
- package/protocol/operations/extension.describe.json +195 -0
- package/protocol/operations/extension.install.json +198 -0
- package/protocol/operations/extension.list.json +123 -0
- package/protocol/operations/extension.manage.json +55 -0
- package/protocol/operations/extension.read.json +112 -0
- package/protocol/operations/kernel.interrupt.json +20 -0
- package/protocol/operations/kernel.read.json +30 -0
- package/protocol/operations/kernel.run.json +36 -1
- package/protocol/operations/kernel.stop.json +10 -0
- package/protocol/operations/project.work.read.json +3 -2
- package/protocol/operations/session.grant.json +9 -0
- package/scripts/browser-checks.mjs +53 -0
- package/scripts/screen-check.mjs +193 -0
- package/scripts/third-party-acceptance.mjs +77 -0
- package/vendor/composition.json +111 -111
- package/vendor/rho-workspace-plugin-agent-0.4.29.tgz +0 -0
- package/vendor/rho-workspace-plugin-annotations-0.5.2.tgz +0 -0
- package/vendor/rho-workspace-plugin-documents-0.4.11.tgz +0 -0
- package/vendor/rho-workspace-plugin-kernel-0.5.5.tgz +0 -0
- package/web/theme.css +17 -2
- package/dist/web/assets/choices-B-y2OYvE.js +0 -1
- package/dist/web/assets/dist-CBM2oq6g.js +0 -1
- package/dist/web/assets/dist-CH56yNDn.js +0 -3
- package/dist/web/assets/explore-in-muWXOGOY.js +0 -1
- package/dist/web/assets/graph-CK-df5lh.js +0 -2
- package/dist/web/assets/index-DBd77u4a.css +0 -1
- package/dist/web/assets/overview-D1Ev2OC_.js +0 -6
- package/dist/web/assets/preview-HbmQKUGY.js +0 -1
- package/dist/web/assets/workspace-d5Hw_ClZ.js +0 -5
- package/vendor/rho-workspace-plugin-agent-0.4.27.tgz +0 -0
- package/vendor/rho-workspace-plugin-documents-0.4.10.tgz +0 -0
- package/vendor/rho-workspace-plugin-kernel-0.5.2.tgz +0 -0
package/README.md
CHANGED
|
@@ -39,8 +39,9 @@ contract. Electron is reserved for a later desktop client that reuses the WebUI
|
|
|
39
39
|
and component boundaries. Functional views use CodeMirror 6, AG Grid Community
|
|
40
40
|
and ECharts.
|
|
41
41
|
|
|
42
|
-
Install
|
|
43
|
-
`rho
|
|
42
|
+
Install it with `npm install -g @rho-workspace/rho` on Node 22.22 or later, below 27, start
|
|
43
|
+
`rho`, and connect an external Agent with `rho --grant`
|
|
44
|
+
([Install and start](docs/HEADLESS.md#install-and-start)). Projects,
|
|
44
45
|
files, execution records and workspaces are available through the local WebUI.
|
|
45
46
|
The Agent uses the same scoped capabilities; a browser request copied to an external
|
|
46
47
|
Agent is explicitly a handoff.
|
|
@@ -50,8 +51,25 @@ plans and visual rules. See [Frontend](docs/FRONTEND.md) for the current interfa
|
|
|
50
51
|
[Status](docs/STATUS.md) for executed checks and limits, and the
|
|
51
52
|
[documentation index](docs/README.md) for backend and release information.
|
|
52
53
|
|
|
54
|
+
## Set up with an Agent
|
|
55
|
+
|
|
56
|
+
A person can ask Claude Code or Codex, in any language:
|
|
57
|
+
|
|
58
|
+
> Read https://yulab-smu.top/Rho/doc/setup.md and follow its steps to install and configure Rho for me.
|
|
59
|
+
|
|
60
|
+
or: 请阅读 https://yulab-smu.top/Rho/doc/setup.md 文档,按照步骤为我安装并配置 Rho。
|
|
61
|
+
|
|
62
|
+
That page is [SETUP.md](SETUP.md). The Agent checks the machine, installs the npm package and
|
|
63
|
+
starts Rho on `~/Rho/projects` and `~/Rho/state`. It then installs the Agent Skill in
|
|
64
|
+
[skills/rho](skills/rho/SKILL.md) into its own skills folder, connects itself to the example
|
|
65
|
+
project and says what is missing. The Skill teaches an Agent to install and connect Rho, call
|
|
66
|
+
its tools without guessing, and run an analysis a person can follow. It is published beside the
|
|
67
|
+
page at <https://yulab-smu.top/Rho/skills/rho/SKILL.md>.
|
|
68
|
+
|
|
53
69
|
## Documentation
|
|
54
70
|
|
|
71
|
+
<https://yulab-smu.top/Rho/> runs the real interface on the shipped example project,
|
|
72
|
+
replaying a recorded session without a backend, and gives the sentence above for an Agent.
|
|
55
73
|
The documentation is published at <https://yulab-smu.top/Rho/docs/>. The site is
|
|
56
74
|
generated from this repository's `docs/` directory, which stays the only source of
|
|
57
75
|
truth: every page names the file it came from and links to it.
|
|
@@ -60,12 +78,13 @@ truth: every page names the file it came from and links to it.
|
|
|
60
78
|
npm run docs:dev # assemble and serve locally
|
|
61
79
|
npm run docs:build # assemble, then build the static site into site/.vitepress/dist
|
|
62
80
|
npm run docs:check # fail if a document in docs/ is neither published nor withheld
|
|
81
|
+
npm run pages:build # front page, demo and documentation into site/.pages (add -- --home for the front page alone)
|
|
82
|
+
npm run pages:check # walk the demo and the front page in a browser
|
|
83
|
+
npm run pages:capture # record the demo again from this checkout's service (after npm run build)
|
|
63
84
|
```
|
|
64
85
|
|
|
65
86
|
`@rho-workspace/rho` is published to npm. The registry entry for 0.5.2 carries no
|
|
66
|
-
README, so its package page shows no description; from 0.5.3 the packer ships this README.
|
|
67
|
-
[downloads page](https://yulab-smu.top/Rho/) are the earlier 0.4.0 line; this npm line
|
|
68
|
-
is the current delivery.
|
|
87
|
+
README, so its package page shows no description; from 0.5.3 the packer ships this README.
|
|
69
88
|
|
|
70
89
|
For a new component view, start with [Plugin authoring](docs/PLUGIN-AUTHORING.md):
|
|
71
90
|
generate a typed package, preview it independently and select its compiled entry
|
package/dist/browser-access.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { extensionMethods } from './extension-contract.js';
|
|
1
2
|
import * as fs from 'node:fs/promises';
|
|
2
3
|
import path from 'node:path';
|
|
3
4
|
import { randomBytes } from 'node:crypto';
|
|
@@ -36,7 +37,7 @@ export const browserMethods = ['protocol.describe', 'protocol.validate', 'projec
|
|
|
36
37
|
// Only the person at this machine talks to a conversation Rho starts: it runs their own Claude
|
|
37
38
|
// Code with their model credentials. Only they add Rho to their own Agent's configuration. A
|
|
38
39
|
// narrower, expiring link never receives these.
|
|
39
|
-
export const conversationMethods = ['session.connect', 'conversation.start', 'conversation.send', 'conversation.stop', 'conversation.decide', 'conversation.read', 'conversation.list', 'conversation.trash', 'conversation.restore', 'conversation.delete', 'conversation.permission', 'conversation.configure', 'conversation.settings.read', 'conversation.settings.update', 'conversation.settings.check', 'project.work.read', 'evidence.preview', 'evidence.export'];
|
|
40
|
+
export const conversationMethods = ['agent.sessions.list', 'agent.sessions.read', 'session.connect', 'conversation.start', 'conversation.send', 'conversation.stop', 'conversation.decide', 'conversation.read', 'conversation.list', 'conversation.trash', 'conversation.restore', 'conversation.delete', 'conversation.permission', 'conversation.configure', 'conversation.settings.read', 'conversation.settings.update', 'conversation.settings.check', 'project.work.read', 'evidence.preview', 'evidence.export'];
|
|
40
41
|
// The person at this machine. A tab this service served is authorized by the request itself:
|
|
41
42
|
// same origin, loopback only, no link, no code and no expiry. `--pair` stays an explicit,
|
|
42
43
|
// narrower grant for a shared or subfolder-scoped tab.
|
|
@@ -49,7 +50,7 @@ export const skillsMethods = ['skills.list', 'skills.read', 'skills.change', 'sk
|
|
|
49
50
|
export function localBrowserPrincipal(root) {
|
|
50
51
|
// The empty token hash can never match a request digest, so no header impersonates this
|
|
51
52
|
// identity: it is chosen because the request carried no credential at all.
|
|
52
|
-
return { id: localBrowserId, kind: 'browser', tokenHash: '', projectRoot: root, methods: [...browserMethods, ...conversationMethods, ...consoleMethods, ...kernelMethods, ...skillsMethods] };
|
|
53
|
+
return { id: localBrowserId, kind: 'browser', tokenHash: '', projectRoot: root, methods: [...extensionMethods, ...browserMethods, ...conversationMethods, ...consoleMethods, ...kernelMethods, ...skillsMethods] };
|
|
53
54
|
}
|
|
54
55
|
export class BrowserAccess {
|
|
55
56
|
state;
|
package/dist/capabilities.d.ts
CHANGED
|
@@ -64,6 +64,33 @@ export declare const personFilesSkill: {
|
|
|
64
64
|
description: string;
|
|
65
65
|
};
|
|
66
66
|
};
|
|
67
|
+
export declare const analysisRunSkillDeclaration: {
|
|
68
|
+
id: string;
|
|
69
|
+
version: string;
|
|
70
|
+
content: string;
|
|
71
|
+
digest: string;
|
|
72
|
+
intent: string;
|
|
73
|
+
requires: string[];
|
|
74
|
+
example: {
|
|
75
|
+
method: string;
|
|
76
|
+
input: {
|
|
77
|
+
language: string;
|
|
78
|
+
code: string;
|
|
79
|
+
purpose: string;
|
|
80
|
+
changeId: string;
|
|
81
|
+
waitMs: number;
|
|
82
|
+
};
|
|
83
|
+
};
|
|
84
|
+
failureRecipes: {
|
|
85
|
+
kind: string;
|
|
86
|
+
message: string;
|
|
87
|
+
next: string;
|
|
88
|
+
}[];
|
|
89
|
+
verify: {
|
|
90
|
+
command: string;
|
|
91
|
+
description: string;
|
|
92
|
+
};
|
|
93
|
+
};
|
|
67
94
|
export declare const taskMapSkill: {
|
|
68
95
|
id: string;
|
|
69
96
|
version: string;
|
|
@@ -130,7 +157,7 @@ export declare class Capabilities {
|
|
|
130
157
|
enabled: string[];
|
|
131
158
|
}, author: string): Promise<{
|
|
132
159
|
version: number;
|
|
133
|
-
enabled: ("media" | "r" | "agent" | "files" | "documents" | "requirements" | "tables" | "charts" | "annotations" | "console" | "kernel"
|
|
160
|
+
enabled: ("media" | "r" | "agent" | "files" | "skills" | "documents" | "requirements" | "tables" | "charts" | "annotations" | "console" | "kernel")[];
|
|
134
161
|
receipt: CapabilityReceipt;
|
|
135
162
|
}>;
|
|
136
163
|
private pluginStatus;
|
|
@@ -165,7 +192,7 @@ export declare class Capabilities {
|
|
|
165
192
|
}[];
|
|
166
193
|
configuration: {
|
|
167
194
|
version: number;
|
|
168
|
-
enabled: ("media" | "r" | "agent" | "files" | "documents" | "requirements" | "tables" | "charts" | "annotations" | "console" | "kernel"
|
|
195
|
+
enabled: ("media" | "r" | "agent" | "files" | "skills" | "documents" | "requirements" | "tables" | "charts" | "annotations" | "console" | "kernel")[];
|
|
169
196
|
retainedReceipts: number;
|
|
170
197
|
retainedFromVersion: number;
|
|
171
198
|
maxReceipts: number;
|
package/dist/capabilities.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import * as path from 'node:path';
|
|
2
2
|
import { atomicJson, canonical, digest, now, readJson, requireThat, stateDirectory } from '@rho-workspace/plugin-contracts';
|
|
3
3
|
import { operations } from './protocol.js';
|
|
4
|
+
import { screenCheckSkill } from './screen-check-skill.js';
|
|
4
5
|
export const capabilityLimits = { maxReceipts: 256 };
|
|
5
6
|
// The umbrella Skill: what this application is, the order to work in, and the rules
|
|
6
7
|
// that used to be discovered by failing. It names where the detail lives instead of
|
|
@@ -9,6 +10,11 @@ const applicationContent = [
|
|
|
9
10
|
'Start with rho_index: select an owner or search, then rho_resolve only the operations',
|
|
10
11
|
'needed now. Use rho_call with the complete contractRef. The private connection supplies',
|
|
11
12
|
'the project; discovery never grants additional authority or starts a runtime.',
|
|
13
|
+
'Independent third-party plugins: extension.list shows installed packages, extension.describe',
|
|
14
|
+
'gives their digest, operations and Skill entries. Read extension.content (kind skill)',
|
|
15
|
+
'before extension.call. Keep expectedDigest and the original changeId for a native call;',
|
|
16
|
+
'extension.read observes pending or unknown outcomes without rerunning. Installation and',
|
|
17
|
+
'management belong to the local person; plugin code never expands this connection grant.',
|
|
12
18
|
'Large replies carry a result reference. Use rho_read to inspect its fields and fetch',
|
|
13
19
|
'only selected text ranges or array pages. Retain useful references; release finished',
|
|
14
20
|
'results explicitly. Never repeat an action just to retrieve a large reply.',
|
|
@@ -29,7 +35,7 @@ const applicationContent = [
|
|
|
29
35
|
'run or export it as files; a stopped run is not resubmitted under its own operationId.'
|
|
30
36
|
].join('\n');
|
|
31
37
|
const applicationSkill = {
|
|
32
|
-
id: 'rho.workspace', version: '1.
|
|
38
|
+
id: 'rho.workspace', version: '1.6', content: applicationContent,
|
|
33
39
|
intent: 'Work in this project through versioned operations, in a safe order.',
|
|
34
40
|
requires: ['capability.list', 'observation.snapshot', 'action.submit', 'composition.apply', 'context.read'],
|
|
35
41
|
example: { method: 'observation.snapshot', input: { projectId: 'the-open-project' } },
|
|
@@ -85,6 +91,77 @@ const personFiles = {
|
|
|
85
91
|
};
|
|
86
92
|
export const rhoWorkspaceSkill = { ...applicationSkill, digest: skillDigest };
|
|
87
93
|
export const personFilesSkill = personFiles;
|
|
94
|
+
// Written after five real analyses (bulk RNA-seq, snRNA-seq, GeoMx DSP, bulk plus a
|
|
95
|
+
// metabolome, and a multi-omics cohort) ran through this application. None of them
|
|
96
|
+
// finished unattended at the time: turns ended on a call limit or on a wait nothing
|
|
97
|
+
// wakes, calls went into looking for what may be done rather than doing it, and results
|
|
98
|
+
// were not always written before the turn ended. Several of those stops have since been
|
|
99
|
+
// fixed in this application, so what follows is written as the practice that survived
|
|
100
|
+
// them rather than as a workaround for one build's limits.
|
|
101
|
+
const analysisRunContent = [
|
|
102
|
+
'A whole analysis has to survive interruption. Rho keeps no step cap and no wall time',
|
|
103
|
+
'by default, and a long analysis may still be stopped by the person or by the Agent',
|
|
104
|
+
'client, so write results as you go instead of holding them until the end.',
|
|
105
|
+
'',
|
|
106
|
+
'1. Spend calls on the analysis, not on discovery. Resolve the operations you will use',
|
|
107
|
+
' once each (kernel.run, kernel.read, kernel.interrupt, resource.list) and reuse the',
|
|
108
|
+
' contractRef you were given. In the runs behind this Skill one Agent spent 36',
|
|
109
|
+
' capability.index calls in a single analysis and ended with only its quality-control',
|
|
110
|
+
' table written.',
|
|
111
|
+
'2. Do not guess what a result reference contains. A refused read means the shape is',
|
|
112
|
+
' wrong, not that the result is missing: resolve the operation that produced it and',
|
|
113
|
+
' read the page or range it names instead of trying sibling paths.',
|
|
114
|
+
'3. Nothing wakes you later. No monitor, timer or event resumes your turn: a cell still',
|
|
115
|
+
' running when you stop is left running for nobody, and ending your reply is not',
|
|
116
|
+
' proof the analysis finished. Pass a waitMs long enough for the slowest step (a',
|
|
117
|
+
' normalisation over 90,000 nuclei can take many minutes), or read the cell with',
|
|
118
|
+
' kernel.read in your own next call.',
|
|
119
|
+
'4. Load once, build on it. A session keeps what a cell defines, so read the data in one',
|
|
120
|
+
' cell and derive in the next. A service restart does not keep those objects: the code',
|
|
121
|
+
' and its outputs stay, the values in memory do not, so keep a script that rebuilds',
|
|
122
|
+
' what matters.',
|
|
123
|
+
'5. Prefer a few large cells to many small ones, and keep each short enough to finish. A',
|
|
124
|
+
' cell that hangs costs time: interrupt it with kernel.interrupt and continue with the',
|
|
125
|
+
' part that is cheap to redo.',
|
|
126
|
+
'6. Draw to an explicit device. In these runs a ggsave call in the shared session hung',
|
|
127
|
+
' and the figure had to be redrawn with png() and dev.off(): open the device, plot,',
|
|
128
|
+
' close it, and let the figure land in a file you name.',
|
|
129
|
+
'7. Write each file once, complete, and save it to disk before you rely on it. One script',
|
|
130
|
+
' written in full and then run costs less than the same script edited piece by piece,',
|
|
131
|
+
' and a file on disk is the only version that outlives a stop.',
|
|
132
|
+
'8. Check packages in one call, and do not install into a temporary library. Name what is',
|
|
133
|
+
' missing, and when you substitute a gene-set source or an annotation build, say so',
|
|
134
|
+
' beside the result, because that choice changes the numbers.',
|
|
135
|
+
'9. Say what did not reproduce, and why. When a published count cannot be matched, name',
|
|
136
|
+
' the undefined choice (a threshold, a direction, a model) and compute the cheap',
|
|
137
|
+
' alternatives beside your main one instead of tuning until it fits.',
|
|
138
|
+
'10. Report the state you actually reached. Say which outputs exist on disk, which cell',
|
|
139
|
+
' was still running, and what a stopped turn left behind; the person continues from',
|
|
140
|
+
' that record rather than from a claim that the work is done.',
|
|
141
|
+
].join('\n');
|
|
142
|
+
const analysisRunSkill = {
|
|
143
|
+
id: 'rho.analysis-run', version: '1.1', content: analysisRunContent,
|
|
144
|
+
digest: digest(analysisRunContent),
|
|
145
|
+
intent: 'Run a whole analysis through the live sessions so a stop never loses the work.',
|
|
146
|
+
requires: ['kernel.run', 'kernel.read', 'kernel.interrupt', 'resource.list'],
|
|
147
|
+
example: {
|
|
148
|
+
method: 'kernel.run',
|
|
149
|
+
input: {
|
|
150
|
+
language: 'r',
|
|
151
|
+
code: 'counts <- read.csv("data/counts.csv", row.names = 1); dim(counts)',
|
|
152
|
+
purpose: 'Load the count matrix once and keep it for later cells',
|
|
153
|
+
changeId: 'load-counts',
|
|
154
|
+
waitMs: 120000
|
|
155
|
+
}
|
|
156
|
+
},
|
|
157
|
+
failureRecipes: [
|
|
158
|
+
{ kind: 'not_found', message: 'Skill is not available in this project and session.', next: 'Read skill.list for the Skills this project and session expose; a Skill owned by a disabled plugin is not listed.' },
|
|
159
|
+
{ kind: 'stale', message: 'Skill content digest changed.', next: 'Read the Skill again and apply the current text; do not act on a cached copy.' },
|
|
160
|
+
{ kind: 'limit', message: 'Too many cells are waiting.', next: 'Wait for the running cell or interrupt it, then continue in a new cell with a new changeId.' }
|
|
161
|
+
],
|
|
162
|
+
verify: { command: 'npm run test:notebook', description: 'Runs R and Python cells, keeps their output, plots and variables, interrupts and stops sessions, and keeps identity across a restart.' }
|
|
163
|
+
};
|
|
164
|
+
export const analysisRunSkillDeclaration = analysisRunSkill;
|
|
88
165
|
const taskMapContent = [
|
|
89
166
|
'Describe the whole task yourself: Rho fixes no closed list of kinds or states.',
|
|
90
167
|
'',
|
|
@@ -240,7 +317,7 @@ export class Capabilities {
|
|
|
240
317
|
}
|
|
241
318
|
async skills(principal) {
|
|
242
319
|
const state = await this.state();
|
|
243
|
-
const result = [rhoWorkspaceSkill, personFilesSkill, taskMapSkill];
|
|
320
|
+
const result = [rhoWorkspaceSkill, personFilesSkill, taskMapSkill, analysisRunSkill, screenCheckSkill];
|
|
244
321
|
for (const descriptor of this.plugins.descriptors()) {
|
|
245
322
|
const status = this.pluginStatus(descriptor.id, state);
|
|
246
323
|
for (const skill of descriptor.skills ?? []) {
|