@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/dist/server.js
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
|
+
import { Extensions } from './extensions.js';
|
|
2
|
+
import { extensionManagement } from './extension-contract.js';
|
|
1
3
|
import { EvidenceExporter, evidenceExportLimits } from './evidence-export.js';
|
|
2
|
-
import { Discovery } from './discovery.js';
|
|
4
|
+
import { Discovery, applicationEffects } from './discovery.js';
|
|
3
5
|
import * as http from 'node:http';
|
|
4
6
|
import * as fs from 'node:fs/promises';
|
|
5
7
|
import path from 'node:path';
|
|
@@ -20,7 +22,7 @@ import { BrowserAccess, localBrowserId, localBrowserPrincipal } from './browser-
|
|
|
20
22
|
import { addToAgent, connectLimits, mcpCommand, mcpName, outsideLabel } from './agent-connect.js';
|
|
21
23
|
import { NativeFolderPicker, nativeFolderLimits } from './native-folders.js';
|
|
22
24
|
import { homedir } from 'node:os';
|
|
23
|
-
import { serveWeb, servePageFrame, pageFramePath, webRoot, installedWebEntries } from './web-assets.js';
|
|
25
|
+
import { serveWeb, servePageFrame, pageFramePath, extensionFramePath, webRoot, installedWebEntries } from './web-assets.js';
|
|
24
26
|
import { Presentation } from './presentation.js';
|
|
25
27
|
import { presentationSchemas } from './presentation-contracts.js';
|
|
26
28
|
import { isNativeTime } from './native-time.js';
|
|
@@ -178,6 +180,7 @@ function explainFailure(e) {
|
|
|
178
180
|
}
|
|
179
181
|
export class RhoService {
|
|
180
182
|
config;
|
|
183
|
+
extensions;
|
|
181
184
|
plugins;
|
|
182
185
|
state;
|
|
183
186
|
bridge;
|
|
@@ -377,6 +380,7 @@ export class RhoService {
|
|
|
377
380
|
if (typeof value === 'number')
|
|
378
381
|
requireThat(Number.isSafeInteger(value) && (key === 'port' ? value >= 0 && value <= 65535 : value > 0), 'invalid', 'Invalid service budget.', { field: key });
|
|
379
382
|
}
|
|
383
|
+
this.extensions = new Extensions(path.join(config.stateDir, 'plugins'), config.extensions);
|
|
380
384
|
this.plugins = new Plugins(config);
|
|
381
385
|
this.state = new State(config.root, config.stateDir);
|
|
382
386
|
this.bridge = new CoreBridge(config.coreBinary, config.rscript);
|
|
@@ -385,7 +389,7 @@ export class RhoService {
|
|
|
385
389
|
// The same project grant `rho --grant` gives, under this conversation's own principal.
|
|
386
390
|
grant: async (project, conversation) => {
|
|
387
391
|
const session = 'rho:' + conversation.id, file = path.join(this.state.directory, 'agent-' + digest(project.id + ':' + session) + '.json');
|
|
388
|
-
await this.agentConnection(project.id, session, file, undefined, undefined, 'layered-business', { label: (conversation.client === 'codex' ? 'Codex' : 'Claude Code') + ' in Rho', conversationId: conversation.id });
|
|
392
|
+
await this.agentConnection(project.id, session, file, undefined, undefined, 'layered-business', { label: (conversation.client === 'codex' ? 'Codex' : conversation.client === 'acp' ? 'ACP agent' : 'Claude Code') + ' in Rho', conversationId: conversation.id });
|
|
389
393
|
return { file, principal: 'agent:' + digest(project.id + ':' + session).slice(0, 32) };
|
|
390
394
|
},
|
|
391
395
|
directory: project => this.dataDir(project),
|
|
@@ -462,7 +466,7 @@ export class RhoService {
|
|
|
462
466
|
return { text: said.text, model: said.model, cost: callCost(said, listed ? await this.modelFacts(listed).catch(() => null) : null) };
|
|
463
467
|
}
|
|
464
468
|
} : {}
|
|
465
|
-
}, config.claude, config.conversations, { backend: config.agentBackend, claudeAcp: config.claudeAcp, codex: config.codex, codexAcp: config.codexAcp, settingsFile: path.join(this.state.directory, 'agent-settings.json') });
|
|
469
|
+
}, config.claude, config.conversations, { backend: config.agentBackend, claudeAcp: config.claudeAcp, acpCommand: config.acpCommand, codex: config.codex, codexAcp: config.codexAcp, settingsFile: path.join(this.state.directory, 'agent-settings.json') });
|
|
466
470
|
this.conversations.describing = { ...describeLimits, ...config.describe };
|
|
467
471
|
this.folderPicker = new NativeFolderPicker({ ...nativeFolderLimits, ...config.nativeFolders });
|
|
468
472
|
this.server = http.createServer((req, res) => void this.handle(req, res));
|
|
@@ -484,6 +488,7 @@ export class RhoService {
|
|
|
484
488
|
await this.plugins.load();
|
|
485
489
|
this.plugins.installUi(await installedWebEntries(this.config.webRoot), Object.keys(operations));
|
|
486
490
|
await this.state.init();
|
|
491
|
+
await this.extensions.init();
|
|
487
492
|
// A person who starts Rho on a fresh state sees one finished study beside their own work.
|
|
488
493
|
// It is copied into the projects folder once and is otherwise an ordinary project.
|
|
489
494
|
this.example = await seedExampleProject(this.state, { enabled: this.config.example === true }).catch(() => null);
|
|
@@ -501,9 +506,33 @@ export class RhoService {
|
|
|
501
506
|
const chosen = (earlier?.selectedProjects ?? []).filter(id => this.state.projects.some(p => p.id === id && p.nativeSelected));
|
|
502
507
|
this.state.principals = this.state.principals.filter(p => p.id !== localBrowserId);
|
|
503
508
|
await this.state.addPrincipal({ ...localBrowserPrincipal(await fs.realpath(this.config.root)), ...(chosen.length ? { selectedProjects: chosen } : {}) });
|
|
504
|
-
|
|
509
|
+
// A person's bookmark and every Agent connection name this service's address. A start that
|
|
510
|
+
// selects no port takes the one this state's last start had, and a new one only when that
|
|
511
|
+
// port is taken now; a selected port is used or refused, never replaced.
|
|
512
|
+
const connectionFile = path.join(this.state.directory, 'connection.json');
|
|
513
|
+
const earlierUrl = await fs.readFile(connectionFile, 'utf8').then(text => String(JSON.parse(text).url), () => '');
|
|
514
|
+
const earlierPort = /^http:\/\/127\.0\.0\.1:\d+$/.test(earlierUrl) ? Number(new URL(earlierUrl).port) : 0;
|
|
515
|
+
const listen = (port) => new Promise((resolve, reject) => {
|
|
516
|
+
this.server.once('error', reject);
|
|
517
|
+
this.server.listen(port, '127.0.0.1', () => { this.server.off('error', reject); resolve(); });
|
|
518
|
+
});
|
|
519
|
+
try {
|
|
520
|
+
await listen(this.config.port ?? earlierPort);
|
|
521
|
+
}
|
|
522
|
+
catch (error) {
|
|
523
|
+
const taken = error.code === 'EADDRINUSE';
|
|
524
|
+
requireThat(!taken || this.config.port === undefined, 'conflict', `Port ${this.config.port} on 127.0.0.1 is in use by another program. If that is Rho, open http://127.0.0.1:${this.config.port}; otherwise choose another --port, or leave it out.`, { port: this.config.port });
|
|
525
|
+
if (!taken)
|
|
526
|
+
throw error;
|
|
527
|
+
await listen(0);
|
|
528
|
+
}
|
|
505
529
|
this.url = 'http://127.0.0.1:' + this.server.address().port;
|
|
506
|
-
await atomicJson(
|
|
530
|
+
await atomicJson(connectionFile, { url: this.url, token: this.adminToken, apiVersion: '2.0' });
|
|
531
|
+
// An Agent's connection holds the address it was given. When the address changed, each one
|
|
532
|
+
// that named the earlier address follows, so the Agent's next session reaches this service
|
|
533
|
+
// with the grant it already has. Its token and methods are unchanged.
|
|
534
|
+
if (earlierUrl && earlierUrl !== this.url)
|
|
535
|
+
await this.followAddress(earlierUrl);
|
|
507
536
|
return this;
|
|
508
537
|
}
|
|
509
538
|
catch (e) {
|
|
@@ -513,6 +542,20 @@ export class RhoService {
|
|
|
513
542
|
throw e;
|
|
514
543
|
}
|
|
515
544
|
}
|
|
545
|
+
// Only this state's own connection files, and only those that named the earlier address: a
|
|
546
|
+
// file that cannot be read or rewritten keeps what it had, and the start goes on.
|
|
547
|
+
async followAddress(earlierUrl) {
|
|
548
|
+
const names = await fs.readdir(this.state.directory).catch(() => []);
|
|
549
|
+
for (const name of names.filter(name => /^agent-[0-9a-f]+\.json$/.test(name))) {
|
|
550
|
+
const file = path.join(this.state.directory, name);
|
|
551
|
+
try {
|
|
552
|
+
const connection = JSON.parse(await fs.readFile(file, 'utf8'));
|
|
553
|
+
if (connection?.url === earlierUrl && typeof connection.token === 'string')
|
|
554
|
+
await atomicJson(file, { ...connection, url: this.url });
|
|
555
|
+
}
|
|
556
|
+
catch { /* left as it was */ }
|
|
557
|
+
}
|
|
558
|
+
}
|
|
516
559
|
async agentConnection(projectId, externalSessionId, file, methods, pluginFilter, profile = 'layered-business', who = {}) {
|
|
517
560
|
requireThat(profile === undefined || ['layered-business', 'layered-presentation'].includes(profile), 'invalid', 'Choose an explicitly supported layered profile.');
|
|
518
561
|
const project = await this.state.project(projectId, this.state.principals.find(p => p.id === 'operator'));
|
|
@@ -520,11 +563,11 @@ export class RhoService {
|
|
|
520
563
|
const capabilities = new Capabilities(this.plugins, project);
|
|
521
564
|
const state = await capabilities.state();
|
|
522
565
|
// The shared project listing remains available alongside an Agent's native tools.
|
|
523
|
-
const available = Object.keys(operations).filter(m => !m.startsWith('agent.activity.') && !m.startsWith('session.') && !m.startsWith('conversation.') && (!m.startsWith('project.') || m === 'project.entries') && !m.startsWith('requirements.prepare') && !m.startsWith('workspace.restore') && !['task.routing.put', 'binding.activity.append', 'feedback.submit', 'view.observe', 'view.observations.read', 'task.map.respond', 'annotation.decide', 'evidence.export', 'evidence.preview', 'console.run', 'console.stop', 'kernel.stop'].includes(m));
|
|
566
|
+
const available = Object.keys(operations).filter(m => !extensionManagement.includes(m) && !m.startsWith('agent.activity.') && !m.startsWith('agent.sessions.') && !m.startsWith('session.') && !m.startsWith('conversation.') && (!m.startsWith('project.') || m === 'project.entries') && !m.startsWith('requirements.prepare') && !m.startsWith('workspace.restore') && !['task.routing.put', 'binding.activity.append', 'feedback.submit', 'view.observe', 'view.observations.read', 'task.map.respond', 'annotation.decide', 'evidence.export', 'evidence.preview', 'console.run', 'console.stop', 'kernel.stop'].includes(m));
|
|
524
567
|
const profileMethods = profile === 'layered-presentation' ? ['binding.open', 'capability.index', 'capability.resolve', 'workspace.observe', 'workspace.enhance'] : available.filter(m => !['workspace.observe', 'workspace.enhance', ...(profile ? ['skill.list', 'skill.read', 'protocol.describe'] : [])].includes(m));
|
|
525
568
|
const selected = methods ?? (profile === 'layered-presentation' ? profileMethods : (await Promise.all(profileMethods.map(async (method) => [method, await capabilities.isAvailable(method, state)]))).filter(([, enabled]) => enabled).map(([method]) => method));
|
|
526
569
|
requireThat(profile !== 'layered-presentation' || selected.every(m => profileMethods.includes(m)), 'scope', 'The selected role cannot receive broader methods.');
|
|
527
|
-
requireThat(selected.every(m => !!operations[m] && !m.startsWith('session.') && !m.startsWith('conversation.') && (!m.startsWith('project.') || m === 'project.entries') && !['task.routing.put', 'console.run', 'console.stop', 'kernel.stop'].includes(m)), 'invalid', 'Unknown or operator-only Agent capability.');
|
|
570
|
+
requireThat(selected.every(m => !extensionManagement.includes(m) && !!operations[m] && !m.startsWith('agent.sessions.') && !m.startsWith('session.') && !m.startsWith('conversation.') && (!m.startsWith('project.') || m === 'project.entries') && !['task.routing.put', 'console.run', 'console.stop', 'kernel.stop'].includes(m)), 'invalid', 'Unknown or operator-only Agent capability.');
|
|
528
571
|
requireThat(await Promise.all(selected.map(method => capabilities.isAvailable(method, state))).then(values => values.every(Boolean)), 'unavailable', 'A requested Agent operation has no selected provider.');
|
|
529
572
|
requireThat(!profile || new Set(['capability.index', 'capability.resolve', ...selected]).size <= layeredGrantLimits.maxMethods, 'limit', `Layered connection methods exceed the ${layeredGrantLimits.maxMethods}-method profile; choose an explicit narrower grant.`, { limit: 'maxMethods', maximum: layeredGrantLimits.maxMethods });
|
|
530
573
|
const token = randomBytes(32).toString('hex');
|
|
@@ -618,8 +661,8 @@ export class RhoService {
|
|
|
618
661
|
}
|
|
619
662
|
if (!url.pathname.startsWith('/api/')) {
|
|
620
663
|
requireThat((req.method === 'GET' || req.method === 'HEAD') && !url.search, 'not_found', 'Use the same-origin browser entry without query credentials.');
|
|
621
|
-
if (url.pathname === pageFramePath) {
|
|
622
|
-
servePageFrame(res, req.method === 'HEAD');
|
|
664
|
+
if (url.pathname === pageFramePath || url.pathname === extensionFramePath) {
|
|
665
|
+
servePageFrame(res, req.method === 'HEAD', url.pathname === extensionFramePath);
|
|
623
666
|
return;
|
|
624
667
|
}
|
|
625
668
|
await serveWeb(url.pathname, res, this.config.webRoot, req.method === 'HEAD');
|
|
@@ -650,7 +693,7 @@ export class RhoService {
|
|
|
650
693
|
requireThat(read.ok, read.ok ? 'invalid' : read.kind, read.ok ? '' : (read.problems[0]?.fix ? `Request does not match the versioned schema: ${read.problems[0].fix}` : 'Request does not match the versioned schema.'), read.ok ? {} : { problems: read.problems, remedy: 'Fix the named fields and resend the same request identity.' });
|
|
651
694
|
const request = read.request, contractRef = typeof req.headers['x-rho-contract-ref'] === 'string' ? req.headers['x-rho-contract-ref'] : undefined;
|
|
652
695
|
let value;
|
|
653
|
-
if (body.projectId && method.startsWith('kernel.')) {
|
|
696
|
+
if (body.projectId && (method.startsWith('kernel.') || method === 'extension.call')) {
|
|
654
697
|
// A cell may run for minutes and a run may wait for it. The live sessions keep their own
|
|
655
698
|
// order, so waiting holds no other request of the project, an interrupt among them.
|
|
656
699
|
const projectId = body.projectId;
|
|
@@ -824,6 +867,14 @@ export class RhoService {
|
|
|
824
867
|
requireThat(this.state.principals.some(current => current.id === principal.id && current.tokenHash === principal.tokenHash && current.methods.includes(method) && (!current.expiresAt || Date.parse(current.expiresAt) > Date.now())), 'unauthorized', 'Session authorization expired or was revoked before this operation.');
|
|
825
868
|
if (method === 'protocol.describe')
|
|
826
869
|
return describeProtocol(protocol, principal.methods, b);
|
|
870
|
+
if (extensionManagement.includes(method)) {
|
|
871
|
+
requireThat(principal.id === 'operator' || principal.id === localBrowserId, 'scope', 'Plugin installation and management belong to the person at this machine.');
|
|
872
|
+
return method === 'extension.install' ? this.extensions.install(b.source, b.replace, b.expectedDigest) : this.extensions.manage(b.pluginId, b.expectedDigest, b.action);
|
|
873
|
+
}
|
|
874
|
+
if (method === 'extension.list' && !b.projectId) {
|
|
875
|
+
requireThat(principal.id === 'operator' || principal.id === localBrowserId, 'scope', 'A project-scoped caller must supply its project.');
|
|
876
|
+
return this.extensions.list();
|
|
877
|
+
}
|
|
827
878
|
// A dry run of any operation body: the same schema the server enforces, with the
|
|
828
879
|
// edit each problem needs. Nothing is executed and no project is touched.
|
|
829
880
|
if (method === 'protocol.validate') {
|
|
@@ -898,6 +949,32 @@ export class RhoService {
|
|
|
898
949
|
const workspace = new Workspace(p, owners, this.config.workspace, this.config.interactions);
|
|
899
950
|
const interactions = new Interactions(p, owners, this.config.interactions);
|
|
900
951
|
const routing = new TaskRouting(p, this.config.capabilityLimits?.maxReceipts, this.config.maxRetainedMetadataBytes);
|
|
952
|
+
if (method.startsWith('extension.')) {
|
|
953
|
+
if (contractRef) {
|
|
954
|
+
const reader = new Discovery(this.plugins, p, principal, await routing.read(), await readJson(path.join(await this.dataDir(p), 'bindings.json'), []));
|
|
955
|
+
await reader.assertContract(method, contractRef);
|
|
956
|
+
}
|
|
957
|
+
if (method === 'extension.list')
|
|
958
|
+
return this.extensions.list();
|
|
959
|
+
if (method === 'extension.describe')
|
|
960
|
+
return this.extensions.describe(b.pluginId);
|
|
961
|
+
if (method === 'extension.content')
|
|
962
|
+
return this.extensions.content(b.pluginId, b.expectedDigest, b.kind, b.entryId);
|
|
963
|
+
if (method === 'extension.read')
|
|
964
|
+
return this.extensions.read(b.invocationId, principal.id, p.id);
|
|
965
|
+
if (method === 'extension.call')
|
|
966
|
+
return this.extensions.call(b, principal.id, p.root, async (target, body, effect) => {
|
|
967
|
+
requireThat(principal.methods.includes(target), 'scope', 'The caller has not been granted this Rho method.');
|
|
968
|
+
requireThat(!body?.projectId || body.projectId === p.id, 'scope', 'A plugin cannot delegate into another project.');
|
|
969
|
+
const request = readOperation(target, { ...body, projectId: p.id });
|
|
970
|
+
requireThat(request.ok, 'invalid', 'Plugin delegated an invalid Rho request.');
|
|
971
|
+
const capabilities = new Capabilities(this.plugins, p);
|
|
972
|
+
const status = (await capabilities.operationStatus(principal, await capabilities.state())).find(op => op.method === target);
|
|
973
|
+
requireThat(effect !== 'read' || (status?.effect ?? applicationEffects[target]) === 'read', 'scope', 'A read operation cannot delegate a mutating Rho method.');
|
|
974
|
+
const run = () => this.dispatch(request.request, principal);
|
|
975
|
+
return target.startsWith('kernel.') ? run() : this.serial(p.id, run);
|
|
976
|
+
});
|
|
977
|
+
}
|
|
901
978
|
// A person's own view of the folder they selected. The tab is confined to this one
|
|
902
979
|
// project, so it may list that folder and open a text file from it; registering
|
|
903
980
|
// resources and execution stay Agent/operator work.
|
|
@@ -952,7 +1029,11 @@ export class RhoService {
|
|
|
952
1029
|
add('rscript', rscriptAvailable ? 'ok' : b.intent === 'run-r' ? 'fail' : 'warn', rscriptAvailable ? `R is available at ${this.bridge.rscript}.` : `The optional managed R entry is unavailable at ${this.bridge.rscript}. Native Agent tools remain available.`, rscriptAvailable ? '' : 'For managed R scripts, select an existing Rscript with --rscript or RHO_RSCRIPT.');
|
|
953
1030
|
// Conversations drive the person's installed Claude Code or Codex; the package carries none.
|
|
954
1031
|
const agentCommand = await import('@rho-workspace/plugin-agent/acp-command').catch(() => null);
|
|
955
|
-
if (
|
|
1032
|
+
if (this.config.agentBackend === 'acp') {
|
|
1033
|
+
const cmd = this.config.acpCommand;
|
|
1034
|
+
add('agents', cmd?.file ? 'ok' : 'warn', cmd?.file ? `A generic ACP agent is configured (${cmd.file} ${cmd.args.join(' ')}).` : 'No ACP agent command is configured.', cmd?.file ? '' : 'Start Rho with --agent-backend acp --acp-command <argv> or RHO_ACP_COMMAND.');
|
|
1035
|
+
}
|
|
1036
|
+
else if (agentCommand) {
|
|
956
1037
|
const claude = this.config.claude ?? process.env.RHO_CLAUDE, codex = this.config.codex ?? process.env.RHO_CODEX;
|
|
957
1038
|
const env = { ...process.env, ...(claude ? { CLAUDE_CODE_EXECUTABLE: claude } : {}), ...(codex ? { CODEX_PATH: codex } : {}) };
|
|
958
1039
|
const preferred = this.config.agentBackend === 'codex-acp' ? 'codex' : 'claude', other = preferred === 'codex' ? 'claude' : 'codex';
|
|
@@ -1083,8 +1164,9 @@ export class RhoService {
|
|
|
1083
1164
|
}
|
|
1084
1165
|
// The person's own Claude Code or Codex, outside Rho: the same grant the operator gives, kept
|
|
1085
1166
|
// when it already exists so a connected session keeps its token, then the Agent's own `mcp add`.
|
|
1167
|
+
// The person does it from the page; whoever started the service, with `rho --grant --agent`.
|
|
1086
1168
|
if (method === 'session.connect') {
|
|
1087
|
-
requireThat(principal.id === localBrowserId, 'unauthorized', 'Only the person at this machine can add Rho to their own Agent.');
|
|
1169
|
+
requireThat(principal.id === localBrowserId || principal.id === 'operator', 'unauthorized', 'Only the person at this machine can add Rho to their own Agent.');
|
|
1088
1170
|
const agent = b.agent, file = path.join(this.state.directory, 'agent-' + digest(p.id + ':' + agent) + '.json');
|
|
1089
1171
|
const id = 'agent:' + digest(p.id + ':' + agent).slice(0, 32), existing = this.state.principals.find(x => x.id === id);
|
|
1090
1172
|
// A grant is kept while its connection still reaches this service with its token; otherwise
|
|
@@ -1107,6 +1189,13 @@ export class RhoService {
|
|
|
1107
1189
|
}
|
|
1108
1190
|
// The person at this machine talks to a conversation Rho started; Agents and narrower links
|
|
1109
1191
|
// cannot start one, and an Agent started this way cannot start another.
|
|
1192
|
+
if (method.startsWith('agent.sessions.')) {
|
|
1193
|
+
requireThat(principal.id === localBrowserId, 'unauthorized', 'External conversation history belongs to the person at this machine.');
|
|
1194
|
+
const agent = this.plugins.need('agent');
|
|
1195
|
+
if (method === 'agent.sessions.list')
|
|
1196
|
+
return agent.listExternalSessions(p.root);
|
|
1197
|
+
return agent.readExternalSession(p.root, b);
|
|
1198
|
+
}
|
|
1110
1199
|
if (method === 'project.work.read') {
|
|
1111
1200
|
requireThat(principal.id === localBrowserId, 'scope', 'Project work is available to the person at this machine.');
|
|
1112
1201
|
const agent = (await new Capabilities(this.plugins, p).state()).enabled.includes('agent') ? this.plugins.optional('agent') : null;
|
|
@@ -1123,7 +1212,7 @@ export class RhoService {
|
|
|
1123
1212
|
}
|
|
1124
1213
|
return projectWork({ project: p, cursor: (await this.events(p)).cursor, conversations: await this.conversations.work(p, b.limit),
|
|
1125
1214
|
documents: await owners.documentSummaries(), activity: (await this.projectActivity(p)).entries,
|
|
1126
|
-
native, external: agent?.readExternalAcp(p.root), inspect: agent?.observeSessionFiles });
|
|
1215
|
+
native, external: agent?.readExternalAcp(p.root), observed: agent?.listExternalSessions(p.root), readObserved: agent?.readExternalSession, inspect: agent?.observeSessionFiles });
|
|
1127
1216
|
}
|
|
1128
1217
|
if (method.startsWith('conversation.')) {
|
|
1129
1218
|
requireThat(principal.id === localBrowserId, 'unauthorized', 'Conversations started in Rho belong to the person at this machine. Open Rho in a browser on this machine.');
|
|
@@ -1184,7 +1273,7 @@ export class RhoService {
|
|
|
1184
1273
|
await capabilities.assertAvailable(method, principal);
|
|
1185
1274
|
const host = this.kernelFor(p);
|
|
1186
1275
|
if (method === 'kernel.run')
|
|
1187
|
-
return host.run({ language: b.language, code: b.code, purpose: b.purpose, changeId: b.changeId, by: principal.id, waitMs: b.waitMs, place: b.place });
|
|
1276
|
+
return host.run({ language: b.language, code: b.code, purpose: b.purpose, changeId: b.changeId, by: principal.id, waitMs: b.waitMs, place: b.place, interpreter: b.interpreter });
|
|
1188
1277
|
if (method === 'kernel.read')
|
|
1189
1278
|
return host.read(b.limit, b.cellId);
|
|
1190
1279
|
if (method === 'kernel.events')
|
|
@@ -1672,6 +1761,7 @@ export class RhoService {
|
|
|
1672
1761
|
return this.state.principals.some(p => p.id === id && p.tokenHash === tokenHash && p.methods.includes('observation.snapshot') && (!p.expiresAt || Date.parse(p.expiresAt) > Date.now()));
|
|
1673
1762
|
}
|
|
1674
1763
|
async close() {
|
|
1764
|
+
this.extensions.close();
|
|
1675
1765
|
this.closing = true;
|
|
1676
1766
|
this.folderPicker.close();
|
|
1677
1767
|
for (const s of this.subscribers)
|
|
@@ -253,7 +253,7 @@
|
|
|
253
253
|
]
|
|
254
254
|
},
|
|
255
255
|
"../node_modules/@codemirror/lang-markdown/dist/index.js": {
|
|
256
|
-
"file": "assets/dist-
|
|
256
|
+
"file": "assets/dist-Buk0lwzI.js",
|
|
257
257
|
"name": "dist",
|
|
258
258
|
"src": "../node_modules/@codemirror/lang-markdown/dist/index.js",
|
|
259
259
|
"isDynamicEntry": true,
|
|
@@ -261,22 +261,22 @@
|
|
|
261
261
|
"index.html",
|
|
262
262
|
"_dist-DCtcCJPs.js",
|
|
263
263
|
"../node_modules/@codemirror/language/dist/index.js",
|
|
264
|
-
"_dist-
|
|
264
|
+
"_dist-Cw8hRIlT.js"
|
|
265
265
|
]
|
|
266
266
|
},
|
|
267
267
|
"../node_modules/@codemirror/lang-python/dist/index.js": {
|
|
268
|
-
"file": "assets/dist-
|
|
268
|
+
"file": "assets/dist-foH9IKc6.js",
|
|
269
269
|
"name": "dist",
|
|
270
270
|
"src": "../node_modules/@codemirror/lang-python/dist/index.js",
|
|
271
271
|
"isDynamicEntry": true,
|
|
272
272
|
"imports": [
|
|
273
273
|
"_dist-DCtcCJPs.js",
|
|
274
274
|
"../node_modules/@codemirror/language/dist/index.js",
|
|
275
|
-
"_dist-
|
|
275
|
+
"_dist-Cw8hRIlT.js"
|
|
276
276
|
]
|
|
277
277
|
},
|
|
278
278
|
"../node_modules/@codemirror/language/dist/index.js": {
|
|
279
|
-
"file": "assets/dist-
|
|
279
|
+
"file": "assets/dist-Tzoe_zm-.js",
|
|
280
280
|
"name": "dist",
|
|
281
281
|
"src": "../node_modules/@codemirror/language/dist/index.js",
|
|
282
282
|
"isDynamicEntry": true,
|
|
@@ -295,8 +295,8 @@
|
|
|
295
295
|
"file": "assets/answer-board-CBkGbSLD.js",
|
|
296
296
|
"name": "answer-board"
|
|
297
297
|
},
|
|
298
|
-
"_canvas-
|
|
299
|
-
"file": "assets/canvas-
|
|
298
|
+
"_canvas-D8rDdfDz.js": {
|
|
299
|
+
"file": "assets/canvas-D8rDdfDz.js",
|
|
300
300
|
"name": "canvas",
|
|
301
301
|
"imports": [
|
|
302
302
|
"_rolldown-runtime-XKyaHtl9.js",
|
|
@@ -304,48 +304,48 @@
|
|
|
304
304
|
"_home-CCbP6kS-.js"
|
|
305
305
|
]
|
|
306
306
|
},
|
|
307
|
-
"_choices-
|
|
308
|
-
"file": "assets/choices-
|
|
307
|
+
"_choices-DLah50GC.css": {
|
|
308
|
+
"file": "assets/choices-DLah50GC.css",
|
|
309
|
+
"src": "_choices-DLah50GC.css"
|
|
310
|
+
},
|
|
311
|
+
"_choices-b0XhrGQV.js": {
|
|
312
|
+
"file": "assets/choices-b0XhrGQV.js",
|
|
309
313
|
"name": "choices",
|
|
310
314
|
"imports": [
|
|
311
315
|
"_rolldown-runtime-XKyaHtl9.js",
|
|
312
316
|
"_react-Dss-ouuy.js",
|
|
313
317
|
"_markdown-0ngRuTpW.js",
|
|
314
|
-
"_canvas-
|
|
318
|
+
"_canvas-D8rDdfDz.js",
|
|
315
319
|
"index.html",
|
|
316
|
-
"_notes-meaning-
|
|
320
|
+
"_notes-meaning-pVbbQUGP.js"
|
|
317
321
|
],
|
|
318
322
|
"css": [
|
|
319
323
|
"assets/choices-DLah50GC.css"
|
|
320
324
|
]
|
|
321
325
|
},
|
|
322
|
-
"
|
|
323
|
-
"file": "assets/
|
|
324
|
-
"src": "_choices-DLah50GC.css"
|
|
325
|
-
},
|
|
326
|
-
"_console-By4Mvn1y.css": {
|
|
327
|
-
"file": "assets/console-By4Mvn1y.css",
|
|
328
|
-
"src": "_console-By4Mvn1y.css"
|
|
329
|
-
},
|
|
330
|
-
"_console-e1P5qYQ5.js": {
|
|
331
|
-
"file": "assets/console-e1P5qYQ5.js",
|
|
326
|
+
"_console-BSjLGe0T.js": {
|
|
327
|
+
"file": "assets/console-BSjLGe0T.js",
|
|
332
328
|
"name": "console",
|
|
333
329
|
"imports": [
|
|
334
330
|
"_rolldown-runtime-XKyaHtl9.js",
|
|
335
331
|
"_react-Dss-ouuy.js",
|
|
336
332
|
"_home-CCbP6kS-.js",
|
|
337
333
|
"_markdown-0ngRuTpW.js",
|
|
338
|
-
"_canvas-
|
|
334
|
+
"_canvas-D8rDdfDz.js",
|
|
339
335
|
"index.html",
|
|
340
336
|
"_facts-BMO6V3-3.js",
|
|
341
|
-
"_work-turns-
|
|
337
|
+
"_work-turns-BvJlIMmA.js"
|
|
342
338
|
],
|
|
343
339
|
"css": [
|
|
344
340
|
"assets/console-By4Mvn1y.css"
|
|
345
341
|
]
|
|
346
342
|
},
|
|
347
|
-
"
|
|
348
|
-
"file": "assets/
|
|
343
|
+
"_console-By4Mvn1y.css": {
|
|
344
|
+
"file": "assets/console-By4Mvn1y.css",
|
|
345
|
+
"src": "_console-By4Mvn1y.css"
|
|
346
|
+
},
|
|
347
|
+
"_dist-Cw8hRIlT.js": {
|
|
348
|
+
"file": "assets/dist-Cw8hRIlT.js",
|
|
349
349
|
"name": "dist",
|
|
350
350
|
"imports": [
|
|
351
351
|
"index.html",
|
|
@@ -360,8 +360,8 @@
|
|
|
360
360
|
"_rolldown-runtime-XKyaHtl9.js"
|
|
361
361
|
]
|
|
362
362
|
},
|
|
363
|
-
"_explore-in-
|
|
364
|
-
"file": "assets/explore-in-
|
|
363
|
+
"_explore-in-BVUy3ZW_.js": {
|
|
364
|
+
"file": "assets/explore-in-BVUy3ZW_.js",
|
|
365
365
|
"name": "explore-in",
|
|
366
366
|
"imports": [
|
|
367
367
|
"_react-Dss-ouuy.js",
|
|
@@ -402,8 +402,8 @@
|
|
|
402
402
|
"_react-Dss-ouuy.js"
|
|
403
403
|
]
|
|
404
404
|
},
|
|
405
|
-
"_notes-meaning-
|
|
406
|
-
"file": "assets/notes-meaning-
|
|
405
|
+
"_notes-meaning-pVbbQUGP.js": {
|
|
406
|
+
"file": "assets/notes-meaning-pVbbQUGP.js",
|
|
407
407
|
"name": "notes-meaning",
|
|
408
408
|
"imports": [
|
|
409
409
|
"index.html"
|
|
@@ -420,8 +420,8 @@
|
|
|
420
420
|
"file": "assets/rolldown-runtime-XKyaHtl9.js",
|
|
421
421
|
"name": "rolldown-runtime"
|
|
422
422
|
},
|
|
423
|
-
"_skills-work-
|
|
424
|
-
"file": "assets/skills-work-
|
|
423
|
+
"_skills-work-BGPSnF_I.js": {
|
|
424
|
+
"file": "assets/skills-work-BGPSnF_I.js",
|
|
425
425
|
"name": "skills-work",
|
|
426
426
|
"imports": [
|
|
427
427
|
"_rolldown-runtime-XKyaHtl9.js",
|
|
@@ -439,8 +439,8 @@
|
|
|
439
439
|
"_react-Dss-ouuy.js"
|
|
440
440
|
]
|
|
441
441
|
},
|
|
442
|
-
"_timeline-events-
|
|
443
|
-
"file": "assets/timeline-events-
|
|
442
|
+
"_timeline-events-BbuuFWHV.js": {
|
|
443
|
+
"file": "assets/timeline-events-BbuuFWHV.js",
|
|
444
444
|
"name": "timeline-events",
|
|
445
445
|
"imports": [
|
|
446
446
|
"_rolldown-runtime-XKyaHtl9.js",
|
|
@@ -448,8 +448,8 @@
|
|
|
448
448
|
"index.html"
|
|
449
449
|
]
|
|
450
450
|
},
|
|
451
|
-
"_work-turns-
|
|
452
|
-
"file": "assets/work-turns-
|
|
451
|
+
"_work-turns-BvJlIMmA.js": {
|
|
452
|
+
"file": "assets/work-turns-BvJlIMmA.js",
|
|
453
453
|
"name": "work-turns",
|
|
454
454
|
"imports": [
|
|
455
455
|
"_rolldown-runtime-XKyaHtl9.js",
|
|
@@ -458,7 +458,7 @@
|
|
|
458
458
|
]
|
|
459
459
|
},
|
|
460
460
|
"graph.tsx": {
|
|
461
|
-
"file": "assets/graph-
|
|
461
|
+
"file": "assets/graph-1OdIJ9l7.js",
|
|
462
462
|
"name": "graph",
|
|
463
463
|
"src": "graph.tsx",
|
|
464
464
|
"isDynamicEntry": true,
|
|
@@ -466,19 +466,19 @@
|
|
|
466
466
|
"_rolldown-runtime-XKyaHtl9.js",
|
|
467
467
|
"_react-Dss-ouuy.js",
|
|
468
468
|
"_markdown-0ngRuTpW.js",
|
|
469
|
-
"_canvas-
|
|
469
|
+
"_canvas-D8rDdfDz.js",
|
|
470
470
|
"index.html",
|
|
471
|
-
"_work-turns-
|
|
471
|
+
"_work-turns-BvJlIMmA.js",
|
|
472
472
|
"_snapshot-CAxBYPvV.js",
|
|
473
|
-
"_timeline-events-
|
|
474
|
-
"_choices-
|
|
473
|
+
"_timeline-events-BbuuFWHV.js",
|
|
474
|
+
"_choices-b0XhrGQV.js"
|
|
475
475
|
],
|
|
476
476
|
"css": [
|
|
477
477
|
"assets/graph-BYKN84J3.css"
|
|
478
478
|
]
|
|
479
479
|
},
|
|
480
480
|
"index.html": {
|
|
481
|
-
"file": "assets/index-
|
|
481
|
+
"file": "assets/index-CxmItXqa.js",
|
|
482
482
|
"name": "index",
|
|
483
483
|
"src": "index.html",
|
|
484
484
|
"isEntry": true,
|
|
@@ -487,7 +487,7 @@
|
|
|
487
487
|
"_react-Dss-ouuy.js",
|
|
488
488
|
"_home-CCbP6kS-.js",
|
|
489
489
|
"_markdown-0ngRuTpW.js",
|
|
490
|
-
"_canvas-
|
|
490
|
+
"_canvas-D8rDdfDz.js"
|
|
491
491
|
],
|
|
492
492
|
"dynamicImports": [
|
|
493
493
|
"_dist-DCtcCJPs.js",
|
|
@@ -501,17 +501,17 @@
|
|
|
501
501
|
"overview.tsx",
|
|
502
502
|
"preview.tsx",
|
|
503
503
|
"graph.tsx",
|
|
504
|
-
"_console-
|
|
504
|
+
"_console-BSjLGe0T.js",
|
|
505
505
|
"index.html",
|
|
506
506
|
"skills.tsx",
|
|
507
507
|
"studio-process.tsx"
|
|
508
508
|
],
|
|
509
509
|
"css": [
|
|
510
|
-
"assets/index-
|
|
510
|
+
"assets/index-CsC3sTRq.css"
|
|
511
511
|
]
|
|
512
512
|
},
|
|
513
513
|
"overview.tsx": {
|
|
514
|
-
"file": "assets/overview-
|
|
514
|
+
"file": "assets/overview-B9UtVJ32.js",
|
|
515
515
|
"name": "overview",
|
|
516
516
|
"src": "overview.tsx",
|
|
517
517
|
"isDynamicEntry": true,
|
|
@@ -520,13 +520,13 @@
|
|
|
520
520
|
"_react-Dss-ouuy.js",
|
|
521
521
|
"_home-CCbP6kS-.js",
|
|
522
522
|
"_markdown-0ngRuTpW.js",
|
|
523
|
-
"_canvas-
|
|
523
|
+
"_canvas-D8rDdfDz.js",
|
|
524
524
|
"index.html",
|
|
525
525
|
"_facts-BMO6V3-3.js",
|
|
526
|
-
"_work-turns-
|
|
527
|
-
"_choices-
|
|
528
|
-
"_skills-work-
|
|
529
|
-
"_explore-in-
|
|
526
|
+
"_work-turns-BvJlIMmA.js",
|
|
527
|
+
"_choices-b0XhrGQV.js",
|
|
528
|
+
"_skills-work-BGPSnF_I.js",
|
|
529
|
+
"_explore-in-BVUy3ZW_.js",
|
|
530
530
|
"_answer-board-CBkGbSLD.js"
|
|
531
531
|
],
|
|
532
532
|
"dynamicImports": [
|
|
@@ -537,7 +537,7 @@
|
|
|
537
537
|
]
|
|
538
538
|
},
|
|
539
539
|
"preview.tsx": {
|
|
540
|
-
"file": "assets/preview-
|
|
540
|
+
"file": "assets/preview-CksD_5KS.js",
|
|
541
541
|
"name": "preview",
|
|
542
542
|
"src": "preview.tsx",
|
|
543
543
|
"isDynamicEntry": true,
|
|
@@ -545,13 +545,13 @@
|
|
|
545
545
|
"_rolldown-runtime-XKyaHtl9.js",
|
|
546
546
|
"_react-Dss-ouuy.js",
|
|
547
547
|
"_markdown-0ngRuTpW.js",
|
|
548
|
-
"_canvas-
|
|
548
|
+
"_canvas-D8rDdfDz.js",
|
|
549
549
|
"index.html",
|
|
550
|
-
"_explore-in-
|
|
550
|
+
"_explore-in-BVUy3ZW_.js"
|
|
551
551
|
]
|
|
552
552
|
},
|
|
553
553
|
"review.tsx": {
|
|
554
|
-
"file": "assets/review-
|
|
554
|
+
"file": "assets/review-CMxQlQ-C.js",
|
|
555
555
|
"name": "review",
|
|
556
556
|
"src": "review.tsx",
|
|
557
557
|
"isDynamicEntry": true,
|
|
@@ -564,7 +564,7 @@
|
|
|
564
564
|
]
|
|
565
565
|
},
|
|
566
566
|
"shell/workspace.tsx": {
|
|
567
|
-
"file": "assets/workspace-
|
|
567
|
+
"file": "assets/workspace-CWlkjLNx.js",
|
|
568
568
|
"name": "workspace",
|
|
569
569
|
"src": "shell/workspace.tsx",
|
|
570
570
|
"isDynamicEntry": true,
|
|
@@ -572,16 +572,16 @@
|
|
|
572
572
|
"_rolldown-runtime-XKyaHtl9.js",
|
|
573
573
|
"_react-Dss-ouuy.js",
|
|
574
574
|
"_markdown-0ngRuTpW.js",
|
|
575
|
-
"_canvas-
|
|
575
|
+
"_canvas-D8rDdfDz.js",
|
|
576
576
|
"index.html",
|
|
577
|
-
"_console-
|
|
577
|
+
"_console-BSjLGe0T.js",
|
|
578
578
|
"_facts-BMO6V3-3.js",
|
|
579
579
|
"_snapshot-CAxBYPvV.js",
|
|
580
|
-
"_explore-in-
|
|
580
|
+
"_explore-in-BVUy3ZW_.js"
|
|
581
581
|
]
|
|
582
582
|
},
|
|
583
583
|
"skills.tsx": {
|
|
584
|
-
"file": "assets/skills-
|
|
584
|
+
"file": "assets/skills-BFNSyrnD.js",
|
|
585
585
|
"name": "skills",
|
|
586
586
|
"src": "skills.tsx",
|
|
587
587
|
"isDynamicEntry": true,
|
|
@@ -591,14 +591,14 @@
|
|
|
591
591
|
"_home-CCbP6kS-.js",
|
|
592
592
|
"_markdown-0ngRuTpW.js",
|
|
593
593
|
"index.html",
|
|
594
|
-
"_skills-work-
|
|
594
|
+
"_skills-work-BGPSnF_I.js"
|
|
595
595
|
],
|
|
596
596
|
"css": [
|
|
597
597
|
"assets/skills-WkE0KCzn.css"
|
|
598
598
|
]
|
|
599
599
|
},
|
|
600
600
|
"studio-process.tsx": {
|
|
601
|
-
"file": "assets/studio-process-
|
|
601
|
+
"file": "assets/studio-process-CsRoTHOh.js",
|
|
602
602
|
"name": "studio-process",
|
|
603
603
|
"src": "studio-process.tsx",
|
|
604
604
|
"isDynamicEntry": true,
|
|
@@ -606,11 +606,11 @@
|
|
|
606
606
|
"_rolldown-runtime-XKyaHtl9.js",
|
|
607
607
|
"_react-Dss-ouuy.js",
|
|
608
608
|
"_markdown-0ngRuTpW.js",
|
|
609
|
-
"_canvas-
|
|
609
|
+
"_canvas-D8rDdfDz.js",
|
|
610
610
|
"index.html",
|
|
611
|
-
"_console-
|
|
612
|
-
"_timeline-events-
|
|
613
|
-
"_notes-meaning-
|
|
611
|
+
"_console-BSjLGe0T.js",
|
|
612
|
+
"_timeline-events-BbuuFWHV.js",
|
|
613
|
+
"_notes-meaning-pVbbQUGP.js",
|
|
614
614
|
"_answer-board-CBkGbSLD.js",
|
|
615
615
|
"shell/workspace.tsx"
|
|
616
616
|
],
|