@theoremjs/studio 0.0.0-stage → 0.3.2
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/LICENSE +21 -0
- package/README.md +295 -2
- package/agreement.d.ts +14 -0
- package/agreement.js +80 -0
- package/asks.d.ts +47 -0
- package/asks.js +54 -0
- package/browser-connection.d.ts +49 -0
- package/browser-connection.js +215 -0
- package/browser-engine.d.ts +11 -0
- package/browser-engine.js +11 -0
- package/browser-execution.d.ts +6 -0
- package/browser-execution.js +18 -0
- package/browser-live.d.ts +4 -0
- package/browser-live.js +132 -0
- package/browser-transport.d.ts +33 -0
- package/browser-transport.js +229 -0
- package/browser.d.ts +4 -0
- package/browser.js +4 -0
- package/canonical.d.ts +10 -0
- package/canonical.js +25 -0
- package/compile-workspace.d.ts +28 -0
- package/compile-workspace.js +295 -0
- package/compile.d.ts +65 -0
- package/compile.js +1605 -0
- package/concierge-demo.d.ts +17 -0
- package/concierge-demo.js +1230 -0
- package/conversation-key.d.ts +5 -0
- package/conversation-key.js +10 -0
- package/decision-example-images.d.ts +30 -0
- package/decision-example-images.js +30 -0
- package/deno.json +3 -0
- package/draft.d.ts +407 -0
- package/draft.js +505 -0
- package/editors.d.ts +29 -0
- package/editors.js +51 -0
- package/example-embedding-files.d.ts +11 -0
- package/example-embedding-files.js +20 -0
- package/example.d.ts +36 -0
- package/example.js +357 -0
- package/guardrail-probe.d.ts +100 -0
- package/guardrail-probe.js +722 -0
- package/held-credentials.d.ts +28 -0
- package/held-credentials.js +87 -0
- package/installed.mjs +40 -0
- package/lent-keys.d.ts +122 -0
- package/lent-keys.js +47 -0
- package/line-diff.d.ts +15 -0
- package/line-diff.js +41 -0
- package/live-connection.d.ts +22 -0
- package/live-connection.js +27 -0
- package/live-session-bridge.d.ts +15 -0
- package/live-session-bridge.js +202 -0
- package/map-line.d.ts +19 -0
- package/map-line.js +42 -0
- package/map.d.ts +154 -0
- package/map.js +525 -0
- package/media-accept.d.ts +19 -0
- package/media-accept.js +65 -0
- package/mod.d.ts +39 -0
- package/mod.js +33 -0
- package/origins.d.ts +52 -0
- package/origins.js +165 -0
- package/package.json +85 -4
- package/page/assets/Banner-BISz3nXA.js +2 -0
- package/page/assets/BottomSheet-BwfBDtje.js +1 -0
- package/page/assets/Card-Lp-0P5eL.js +1 -0
- package/page/assets/CardWall-CBRLdDZW.js +1 -0
- package/page/assets/Center-nHS1JSux.js +1 -0
- package/page/assets/CheckboxInput-Cj5pk-KI.js +2 -0
- package/page/assets/CodeBlock-C7XJ4ioE.js +51 -0
- package/page/assets/CollapsibleGroup-N7_SOjbm.js +2 -0
- package/page/assets/ContextMenu-CBu9H-9H.js +2 -0
- package/page/assets/DateInput-BGrQ5tPC.js +1 -0
- package/page/assets/Dialog-DELWQo-v.js +1 -0
- package/page/assets/EmptyState-C8W4JKBZ.js +1 -0
- package/page/assets/HoverCard-D1Y1ltWQ.js +1 -0
- package/page/assets/Icon-JrysT8aU.js +3 -0
- package/page/assets/IconAlertTriangle-BqAEqqdU.js +1 -0
- package/page/assets/IconButton-DlOGzJIX.js +1 -0
- package/page/assets/IconEye-BB5aY-wQ.js +1 -0
- package/page/assets/IconFileText-6zOFKKrF.js +1 -0
- package/page/assets/IconSearch-BTx66a40.js +1 -0
- package/page/assets/IconShield-DDOh7Gr5.js +1 -0
- package/page/assets/ItemSwipeLayer-Ckn4X6h9.js +1 -0
- package/page/assets/PaneState-BvA2tLQg.js +1 -0
- package/page/assets/PaneState-eUzUkNE8.css +1 -0
- package/page/assets/ScrollableArea-Ckugdj1N.js +1 -0
- package/page/assets/Section-DJ97F7QE.js +1 -0
- package/page/assets/SegmentedControlItem-h-aaXzyS.js +1 -0
- package/page/assets/SidePanel-BL32abk8.js +1 -0
- package/page/assets/StackItem-CQviqAfM.js +1 -0
- package/page/assets/Text-bum6zWWx.js +2 -0
- package/page/assets/TimestampHoverCard-DQIG0RZF.js +1 -0
- package/page/assets/ToolResultCharts-CgshSv9Q.js +1 -0
- package/page/assets/Tooltip-BH9xiRMl.js +1 -0
- package/page/assets/TraceInspector-_yZiz05W.js +1 -0
- package/page/assets/TraceOverview-BPO-HIYK.js +57 -0
- package/page/assets/VStack-CkVMcNiK.js +1 -0
- package/page/assets/_virtual_studio-type-sources-ByxqQaOG.js +12936 -0
- package/page/assets/arrive-DvbqpeRS.js +1 -0
- package/page/assets/browser-engine-CYq9DQAM.js +9 -0
- package/page/assets/browser-transport-D-2jDYe7.js +47 -0
- package/page/assets/codicon-DF1abBS2.ttf +0 -0
- package/page/assets/compile-egress-BSxOdX4K.js +23 -0
- package/page/assets/container.stylex-BmOi-8DQ.js +1 -0
- package/page/assets/createReactComponent-CZwsv6DD.js +1 -0
- package/page/assets/decision-example-images-CZGr7YIT.js +1 -0
- package/page/assets/devWarning-DxuplmRl.js +1 -0
- package/page/assets/editor-DjpsE8to.css +1 -0
- package/page/assets/editor.api-Cd3ViPQa.js +908 -0
- package/page/assets/editor.worker-6GY8RhDc.js +1 -0
- package/page/assets/editor.worker-BmdWdrHZ.js +33 -0
- package/page/assets/editors-BJX_S59A.js +1 -0
- package/page/assets/egress-automata-B5ZGE1mT.js +1 -0
- package/page/assets/embedding-space-view-CfQBPDxD.js +140 -0
- package/page/assets/encode-files-Bc3HJyAh.js +1 -0
- package/page/assets/export-agent-C3yyzXH8.js +43 -0
- package/page/assets/figtree-latin-400-normal-BD4aNku5.woff +0 -0
- package/page/assets/figtree-latin-400-normal-g7Dtegnw.woff2 +0 -0
- package/page/assets/figtree-latin-500-normal-BWnGEVsr.woff2 +0 -0
- package/page/assets/figtree-latin-500-normal-B_yy1phn.woff +0 -0
- package/page/assets/figtree-latin-600-normal-BM_oTo4n.woff +0 -0
- package/page/assets/figtree-latin-600-normal-Cv_xCTDl.woff2 +0 -0
- package/page/assets/figtree-latin-700-normal-BCCt2T1q.woff +0 -0
- package/page/assets/figtree-latin-700-normal-th6qEP7c.woff2 +0 -0
- package/page/assets/focusOutline.stylex-BT0kfa4t.js +1 -0
- package/page/assets/focusableSelector-DXZeMU85.js +1 -0
- package/page/assets/groupStyles-C7Ter7zC.js +1 -0
- package/page/assets/guardrail-tester-Gut5xK4a.js +9 -0
- package/page/assets/host-patterns-C9RMP16Q.js +1 -0
- package/page/assets/index-CvvmFKgS.js +105 -0
- package/page/assets/index-DOaHlqBo.css +1 -0
- package/page/assets/isRtlElement-BG33-k_H.js +1 -0
- package/page/assets/labels-provider-4TIWDvsE.js +3 -0
- package/page/assets/lent-keys-C32ems-I.js +1 -0
- package/page/assets/live-ingress-lDUGPwth.js +1 -0
- package/page/assets/live-messages-CnkL4GWi.js +1 -0
- package/page/assets/mergeProps-ptS-gIMz.js +1 -0
- package/page/assets/padding.stylex-B76907Zf.js +1 -0
- package/page/assets/preload-helper-DpV6A1kQ.js +1 -0
- package/page/assets/reader-BOCCYaRp.js +7 -0
- package/page/assets/register-CDgivxvX.js +2 -0
- package/page/assets/rolldown-runtime-hePW80VL.js +1 -0
- package/page/assets/schemas-BQ9Jydzb.js +56 -0
- package/page/assets/shaped-data-BcarWqd5.js +16 -0
- package/page/assets/sharedResizeObserver-4U9Xq5Oq.js +1 -0
- package/page/assets/stub-DhdcU_Ew.js +471 -0
- package/page/assets/studio-code-pane-C_SAbcOa.js +8 -0
- package/page/assets/studio-console-DZwlEsvr.js +3 -0
- package/page/assets/studio-decision-B0FnCAXA.js +1 -0
- package/page/assets/studio-embedding-CmA51HVo.js +2 -0
- package/page/assets/studio-host-console-By7hqu2l.js +2 -0
- package/page/assets/studio-live-BrcVQcyV.js +1 -0
- package/page/assets/studio-map-B_xSia-z.js +1 -0
- package/page/assets/studio-map-Bb06Tw1F.css +1 -0
- package/page/assets/studio-monaco-CbKf90i6.css +1 -0
- package/page/assets/studio-monaco-xfyfezQS.js +34 -0
- package/page/assets/studio-ts.worker-B-EXG4Sv.js +67741 -0
- package/page/assets/studio-ts.worker-BXtW3z-O.js +1 -0
- package/page/assets/studio-type-checker-BOvxudki.js +23 -0
- package/page/assets/themeProps-3IqahpCr.js +1 -0
- package/page/assets/tokens.stylex-DkHf0P9C.js +1 -0
- package/page/assets/tool-schema-idaOe2nI.js +18 -0
- package/page/assets/trace-patterns-DnYJa0nI.js +1 -0
- package/page/assets/trace-record-C3zNksA_.js +1 -0
- package/page/assets/trace-schema-9CdEyG6Q.js +1 -0
- package/page/assets/tree-DqyAMsbI.js +3 -0
- package/page/assets/turn-client-Du3Um3Mg.js +2 -0
- package/page/assets/types-BhfXQCLx.js +1 -0
- package/page/assets/typescript-20GgZ8PJ.js +1 -0
- package/page/assets/use-one-call-Hcs8YBp1.js +1 -0
- package/page/assets/useAdaptivePresentation-BzmPCddb.js +1 -0
- package/page/assets/useClipboard-BgGRxRMJ.js +1 -0
- package/page/assets/useContainerReveal-BFy8N_QU.js +1 -0
- package/page/assets/useDevWarning-Z9SoixOP.js +1 -0
- package/page/assets/useLayerDismissal-B_G7IWpC.js +1 -0
- package/page/assets/useMediaQuery-BCT0NUeZ.js +1 -0
- package/page/assets/useScrollLock-Dyf6PHJt.js +1 -0
- package/page/assets/useScrollableArea-0NzdiBCq.js +1 -0
- package/page/assets/useTooltip-CJM_xhLB.js +1 -0
- package/page/assets/workspace-DZALqEDX.js +1 -0
- package/page/assets/zip-DTcEfps6.js +1 -0
- package/page/index.html +90 -0
- package/page.mjs +49 -0
- package/people.d.ts +87 -0
- package/people.js +110 -0
- package/policy.d.ts +43 -0
- package/policy.js +102 -0
- package/ports.d.mts +32 -0
- package/ports.mjs +85 -0
- package/probe-battery.d.ts +13 -0
- package/probe-battery.js +404 -0
- package/providers.d.ts +149 -0
- package/providers.js +306 -0
- package/read-source.d.ts +48 -0
- package/read-source.js +1301 -0
- package/read-steps.d.ts +23 -0
- package/read-steps.js +2 -0
- package/reader.d.ts +11 -0
- package/reader.js +11 -0
- package/registrations.d.ts +83 -0
- package/registrations.js +1 -0
- package/requirements.d.ts +22 -0
- package/requirements.js +38 -0
- package/run-payload-core.d.ts +28 -0
- package/run-payload-core.js +123 -0
- package/run-payload.d.ts +32 -0
- package/run-payload.js +26 -0
- package/runtime-scope.d.ts +84 -0
- package/runtime-scope.js +308 -0
- package/runtime.d.ts +84 -0
- package/runtime.js +387 -0
- package/section-notes.d.ts +33 -0
- package/section-notes.js +38 -0
- package/serve-page.mjs +96 -0
- package/server/draft-decide.d.ts +72 -0
- package/server/draft-decide.js +111 -0
- package/server/draft-embedding.d.ts +3 -0
- package/server/draft-embedding.js +35 -0
- package/server/draft-handler.d.ts +82 -0
- package/server/draft-handler.js +213 -0
- package/server/draft-probe.d.ts +14 -0
- package/server/draft-probe.js +61 -0
- package/server/draft-replies.d.ts +22 -0
- package/server/draft-replies.js +46 -0
- package/server/edited-session.d.ts +28 -0
- package/server/edited-session.js +83 -0
- package/server/edits.d.ts +38 -0
- package/server/edits.js +195 -0
- package/server/handler.d.ts +133 -0
- package/server/handler.js +598 -0
- package/server/lent-draft.d.ts +19 -0
- package/server/lent-draft.js +23 -0
- package/server/live.d.ts +15 -0
- package/server/live.js +96 -0
- package/server/open-editor.d.ts +63 -0
- package/server/open-editor.js +115 -0
- package/server/origins.d.ts +18 -0
- package/server/origins.js +330 -0
- package/server/project-source.d.ts +208 -0
- package/server/project-source.js +1042 -0
- package/server/project.d.ts +22 -0
- package/server/project.js +56 -0
- package/server/run-traces.d.ts +20 -0
- package/server/run-traces.js +96 -0
- package/server/save-new.d.ts +29 -0
- package/server/save-new.js +514 -0
- package/server/save-plan.d.ts +46 -0
- package/server/save-plan.js +1134 -0
- package/server/save-remove.d.ts +21 -0
- package/server/save-remove.js +528 -0
- package/server/save-session.d.ts +96 -0
- package/server/save-session.js +418 -0
- package/server/save-wire.d.ts +235 -0
- package/server/save-wire.js +8 -0
- package/server/save.d.ts +52 -0
- package/server/save.js +209 -0
- package/server/serve.d.ts +23 -0
- package/server/serve.js +413 -0
- package/server/test-connection.d.ts +17 -0
- package/server/test-connection.js +362 -0
- package/server/test-key.d.ts +2 -0
- package/server/test-key.js +83 -0
- package/server/watch.d.ts +28 -0
- package/server/watch.js +93 -0
- package/server/zod-edit.d.ts +74 -0
- package/server/zod-edit.js +558 -0
- package/server.d.ts +8 -0
- package/server.js +8 -0
- package/setups.mjs +170 -0
- package/shared-carry.d.ts +114 -0
- package/shared-carry.js +523 -0
- package/shared-settings.d.ts +34 -0
- package/shared-settings.js +70 -0
- package/source.d.ts +75 -0
- package/source.js +414 -0
- package/start.mjs +169 -0
- package/stream-lines.d.ts +9 -0
- package/stream-lines.js +27 -0
- package/stub.d.ts +6 -0
- package/stub.js +33 -0
- package/surface.d.ts +53 -0
- package/surface.js +631 -0
- package/system-markup.d.ts +20 -0
- package/system-markup.js +51 -0
- package/tool-schema.d.ts +23 -0
- package/tool-schema.js +69 -0
- package/tools.d.ts +16 -0
- package/tools.js +91 -0
- package/traces.d.ts +24 -0
- package/traces.js +29 -0
- package/transport.d.ts +57 -0
- package/transport.js +187 -0
- package/tree.d.ts +32 -0
- package/tree.js +83 -0
- package/types.d.ts +62 -0
- package/types.js +6 -0
- package/ui/acting-as-button.d.ts +2 -0
- package/ui/acting-as-button.js +16 -0
- package/ui/add-provider.d.ts +13 -0
- package/ui/add-provider.js +20 -0
- package/ui/boot-mark.css +53 -0
- package/ui/boot-mark.d.ts +19 -0
- package/ui/boot-mark.js +128 -0
- package/ui/boot-paint.d.ts +8 -0
- package/ui/boot-paint.js +8 -0
- package/ui/brand-icons.d.ts +57 -0
- package/ui/brand-icons.js +148 -0
- package/ui/built/theme.css +830 -0
- package/ui/built/theme.css.d.ts +9 -0
- package/ui/built/theorem-studio.d.ts +13 -0
- package/ui/built/theorem-studio.js +705 -0
- package/ui/built/theorem-studio.variants.d.ts +28 -0
- package/ui/code/monaco-contributions.d.ts +45 -0
- package/ui/code/studio-code.d.ts +7 -0
- package/ui/code/studio-code.js +253 -0
- package/ui/code/studio-monaco.d.ts +44 -0
- package/ui/code/studio-monaco.js +48 -0
- package/ui/code/studio-ts.worker.d.ts +1 -0
- package/ui/code/studio-ts.worker.js +16 -0
- package/ui/code/studio-type-checker.d.ts +12 -0
- package/ui/code/studio-type-checker.js +308 -0
- package/ui/code/studio-type-sources.d.ts +26 -0
- package/ui/confirm-write.d.ts +12 -0
- package/ui/confirm-write.js +45 -0
- package/ui/diff-block.d.ts +21 -0
- package/ui/diff-block.js +17 -0
- package/ui/figtree.css +59 -0
- package/ui/file-place.d.ts +4 -0
- package/ui/file-place.js +26 -0
- package/ui/guardrail-tester.d.ts +18 -0
- package/ui/guardrail-tester.js +248 -0
- package/ui/inspector-context.d.ts +119 -0
- package/ui/inspector-context.js +84 -0
- package/ui/inspector.d.ts +247 -0
- package/ui/inspector.js +284 -0
- package/ui/lib/acting-as.d.ts +25 -0
- package/ui/lib/acting-as.js +90 -0
- package/ui/lib/boot-sequence.d.ts +32 -0
- package/ui/lib/boot-sequence.js +57 -0
- package/ui/lib/export-agent.d.ts +11 -0
- package/ui/lib/export-agent.js +335 -0
- package/ui/lib/facet-icons.d.ts +20 -0
- package/ui/lib/facet-icons.js +21 -0
- package/ui/lib/panel-motion.d.ts +8 -0
- package/ui/lib/panel-motion.js +74 -0
- package/ui/lib/project-address.d.ts +14 -0
- package/ui/lib/project-address.js +24 -0
- package/ui/lib/project-starting.d.ts +13 -0
- package/ui/lib/project-starting.js +30 -0
- package/ui/lib/project-traces.d.ts +17 -0
- package/ui/lib/project-traces.js +54 -0
- package/ui/lib/read-map.d.ts +30 -0
- package/ui/lib/read-map.js +173 -0
- package/ui/lib/read-progress.d.ts +14 -0
- package/ui/lib/read-progress.js +12 -0
- package/ui/lib/refusal-lines.d.ts +3 -0
- package/ui/lib/refusal-lines.js +8 -0
- package/ui/lib/studio-activity.d.ts +5 -0
- package/ui/lib/studio-activity.js +17 -0
- package/ui/lib/studio-console.d.ts +27 -0
- package/ui/lib/studio-console.js +9 -0
- package/ui/lib/studio-conversation.d.ts +20 -0
- package/ui/lib/studio-conversation.js +130 -0
- package/ui/lib/studio-examples.d.ts +31 -0
- package/ui/lib/studio-examples.js +25 -0
- package/ui/lib/studio-labels.d.ts +6 -0
- package/ui/lib/studio-labels.js +13 -0
- package/ui/lib/studio-map-kept.d.ts +17 -0
- package/ui/lib/studio-map-kept.js +48 -0
- package/ui/lib/studio-open.d.ts +22 -0
- package/ui/lib/studio-open.js +54 -0
- package/ui/lib/studio-page.d.ts +33 -0
- package/ui/lib/studio-page.js +121 -0
- package/ui/lib/studio-prefs.d.ts +26 -0
- package/ui/lib/studio-prefs.js +87 -0
- package/ui/lib/studio-project.d.ts +106 -0
- package/ui/lib/studio-project.js +177 -0
- package/ui/lib/studio-restore.d.ts +49 -0
- package/ui/lib/studio-restore.js +251 -0
- package/ui/lib/studio-run-open.d.ts +15 -0
- package/ui/lib/studio-run-open.js +16 -0
- package/ui/lib/studio-session.d.ts +34 -0
- package/ui/lib/studio-session.js +17 -0
- package/ui/lib/studio-settings.d.ts +15 -0
- package/ui/lib/studio-settings.js +48 -0
- package/ui/lib/studio-store.d.ts +64 -0
- package/ui/lib/studio-store.js +391 -0
- package/ui/lib/studio-watch.d.ts +12 -0
- package/ui/lib/studio-watch.js +27 -0
- package/ui/lib/tab-fills.d.ts +6 -0
- package/ui/lib/tab-fills.js +14 -0
- package/ui/lib/tool-credentials.d.ts +3 -0
- package/ui/lib/tool-credentials.js +23 -0
- package/ui/lib/tool-probe.d.ts +19 -0
- package/ui/lib/tool-probe.js +104 -0
- package/ui/lib/type-icons.d.ts +35 -0
- package/ui/lib/type-icons.js +38 -0
- package/ui/lib/when-idle.d.ts +5 -0
- package/ui/lib/when-idle.js +14 -0
- package/ui/lib/zip.d.ts +5 -0
- package/ui/lib/zip.js +8 -0
- package/ui/map-token.css +11 -0
- package/ui/map-token.d.ts +17 -0
- package/ui/map-token.js +29 -0
- package/ui/mcp-icon.d.ts +6 -0
- package/ui/mcp-icon.js +8 -0
- package/ui/motion.css +113 -0
- package/ui/pan.d.ts +32 -0
- package/ui/pan.js +90 -0
- package/ui/profile-editor.d.ts +33 -0
- package/ui/profile-editor.js +2638 -0
- package/ui/provider-editor.d.ts +15 -0
- package/ui/provider-editor.js +92 -0
- package/ui/read-map.css +48 -0
- package/ui/read-map.d.ts +7 -0
- package/ui/read-map.js +163 -0
- package/ui/refusal-detail.d.ts +4 -0
- package/ui/refusal-detail.js +21 -0
- package/ui/shared-change.d.ts +9 -0
- package/ui/shared-change.js +28 -0
- package/ui/shell-motion.css +121 -0
- package/ui/shell-motion.d.ts +73 -0
- package/ui/shell-motion.js +194 -0
- package/ui/studio-code-pane.d.ts +19 -0
- package/ui/studio-code-pane.js +44 -0
- package/ui/studio-compare.d.ts +80 -0
- package/ui/studio-compare.js +326 -0
- package/ui/studio-conflicts.d.ts +17 -0
- package/ui/studio-conflicts.js +87 -0
- package/ui/studio-connection.d.ts +64 -0
- package/ui/studio-connection.js +286 -0
- package/ui/studio-decision.d.ts +6 -0
- package/ui/studio-decision.js +49 -0
- package/ui/studio-embedding.d.ts +6 -0
- package/ui/studio-embedding.js +30 -0
- package/ui/studio-host-console.d.ts +6 -0
- package/ui/studio-host-console.js +17 -0
- package/ui/studio-host.d.ts +73 -0
- package/ui/studio-host.js +12 -0
- package/ui/studio-live.d.ts +17 -0
- package/ui/studio-live.js +26 -0
- package/ui/studio-map.css +273 -0
- package/ui/studio-map.d.ts +17 -0
- package/ui/studio-map.js +397 -0
- package/ui/studio-nav.d.ts +24 -0
- package/ui/studio-nav.js +17 -0
- package/ui/studio-no-project.d.ts +5 -0
- package/ui/studio-no-project.js +9 -0
- package/ui/studio-run.css +76 -0
- package/ui/studio-run.d.ts +14 -0
- package/ui/studio-run.js +119 -0
- package/ui/studio-runner.d.ts +45 -0
- package/ui/studio-runner.js +187 -0
- package/ui/studio-save.d.ts +49 -0
- package/ui/studio-save.js +307 -0
- package/ui/studio-screen.d.ts +61 -0
- package/ui/studio-screen.js +2078 -0
- package/ui/studio-settings.d.ts +31 -0
- package/ui/studio-settings.js +288 -0
- package/ui/studio-shell.css +27 -0
- package/ui/studio-shell.d.ts +43 -0
- package/ui/studio-shell.js +87 -0
- package/ui/studio-theme.d.ts +7 -0
- package/ui/studio-theme.js +94 -0
- package/ui/studio.css +427 -0
- package/ui/theorem-mark.css +84 -0
- package/ui/theorem-mark.d.ts +22 -0
- package/ui/theorem-mark.js +21 -0
- package/vite.d.mts +30 -0
- package/vite.mjs +277 -0
- package/workspace.d.ts +230 -0
- package/workspace.js +1054 -0
package/providers.js
ADDED
|
@@ -0,0 +1,306 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The providers a workspace's models are served by. A model names a protocol and a provider; the
|
|
3
|
+
* provider's definition says where it is, how it signs in, and which protocols it serves, as it
|
|
4
|
+
* does for the kernel.
|
|
5
|
+
*
|
|
6
|
+
* @module
|
|
7
|
+
*/
|
|
8
|
+
import { labelText } from '@theoremjs/agents/guardrails';
|
|
9
|
+
import { createProviderRegistry, keySlotSchema, keySlotsOf, } from '@theoremjs/agents/kernel';
|
|
10
|
+
import { geminiProvider, localProvider, openRouterProvider, typesafeProvider, } from '@theoremjs/agents/providers';
|
|
11
|
+
import { z } from 'zod';
|
|
12
|
+
/** The provider the studio reaches on the builder's own machine. */
|
|
13
|
+
export const LOCAL_PROVIDER_ID = 'local';
|
|
14
|
+
/**
|
|
15
|
+
* Whether a model on `provider` runs on the studio's own local provider, which the tab's local
|
|
16
|
+
* connection reaches. A project's providers are its own, whatever their ids.
|
|
17
|
+
*/
|
|
18
|
+
export function onStudioLocal(provider, inProject) {
|
|
19
|
+
return !inProject && provider === LOCAL_PROVIDER_ID;
|
|
20
|
+
}
|
|
21
|
+
/** Where the studio's local provider is reached, for a local server at `baseUrl`. */
|
|
22
|
+
export function localProviderAddress(baseUrl = 'http://localhost:11434') {
|
|
23
|
+
return `${baseUrl.replace(/\/$/, '')}/v1`;
|
|
24
|
+
}
|
|
25
|
+
/** The providers the studio registers itself, for a workspace no project registers them for. */
|
|
26
|
+
export const STUDIO_PROVIDERS = [
|
|
27
|
+
{ id: 'gemini', definition: 'gemini' },
|
|
28
|
+
{ id: 'openrouter', definition: 'openrouter' },
|
|
29
|
+
{
|
|
30
|
+
id: LOCAL_PROVIDER_ID,
|
|
31
|
+
definition: 'local',
|
|
32
|
+
connection: { baseUrl: localProviderAddress() },
|
|
33
|
+
},
|
|
34
|
+
{ id: 'typesafe', definition: 'typesafe' },
|
|
35
|
+
];
|
|
36
|
+
/** The kernel's own definitions, by id, each with the export that names it in code. */
|
|
37
|
+
const DEFINITIONS = {
|
|
38
|
+
gemini: { provider: geminiProvider, factory: 'geminiProvider' },
|
|
39
|
+
openrouter: { provider: openRouterProvider, factory: 'openRouterProvider' },
|
|
40
|
+
local: { provider: localProvider, factory: 'localProvider' },
|
|
41
|
+
typesafe: { provider: typesafeProvider, factory: 'typesafeProvider' },
|
|
42
|
+
};
|
|
43
|
+
/** The kernel's definition `id`. Undefined for a project's own. */
|
|
44
|
+
export function kernelDefinition(id) {
|
|
45
|
+
return id === undefined ? undefined : DEFINITIONS[id]?.provider;
|
|
46
|
+
}
|
|
47
|
+
/** The ids of the kernel's own definitions: the ones a provider the studio adds can be registered from. */
|
|
48
|
+
export function kernelDefinitions() {
|
|
49
|
+
return Object.keys(DEFINITIONS);
|
|
50
|
+
}
|
|
51
|
+
/** The kernel definition the export `factory` names. Undefined for any other name. */
|
|
52
|
+
export function definitionOfFactory(factory) {
|
|
53
|
+
return Object.keys(DEFINITIONS).find((id) => DEFINITIONS[id]?.factory === factory);
|
|
54
|
+
}
|
|
55
|
+
/** The kernel export that names the definition, for code the studio writes. Undefined for a project's own. */
|
|
56
|
+
export function definitionFactory(definition) {
|
|
57
|
+
return DEFINITIONS[definition]?.factory;
|
|
58
|
+
}
|
|
59
|
+
/** The definition the provider `id` is registered from, among `providers`. */
|
|
60
|
+
export function definitionOf(providers, id) {
|
|
61
|
+
return providers.find((provider) => provider.id === id)?.definition;
|
|
62
|
+
}
|
|
63
|
+
/** What `provider` registers with: its id, connection, and slots. */
|
|
64
|
+
function registrationOf(provider) {
|
|
65
|
+
return {
|
|
66
|
+
id: provider.id,
|
|
67
|
+
...(provider.connection === undefined ? {} : { connection: provider.connection }),
|
|
68
|
+
...(provider.keySlot === undefined ? {} : { keySlot: provider.keySlot }),
|
|
69
|
+
...(provider.fallbackKeySlot === undefined
|
|
70
|
+
? {}
|
|
71
|
+
: { fallbackKeySlot: provider.fallbackKeySlot }),
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Registers `provider` in `registry` from `definition`, else from the kernel's definition it
|
|
76
|
+
* names. Throws what the kernel refuses, and for a project's own definition when none is given.
|
|
77
|
+
*/
|
|
78
|
+
export function registerStudioProvider(registry, provider, definition = kernelDefinition(provider.definition), how = 'register') {
|
|
79
|
+
if (!definition) {
|
|
80
|
+
throw new Error(`The studio does not hold the provider definition '${provider.definition}'.`); // labels-exempt: developer contract error
|
|
81
|
+
}
|
|
82
|
+
return registry[how](definition, registrationOf(provider));
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* What a provider from the definition connects with, read from the kernel's own schema. Undefined
|
|
86
|
+
* for a project's own definition: what that one connects with stays with the project.
|
|
87
|
+
*/
|
|
88
|
+
export function connectionFields(definition) {
|
|
89
|
+
const provider = kernelDefinition(definition);
|
|
90
|
+
if (!provider)
|
|
91
|
+
return undefined;
|
|
92
|
+
if (!provider.connection)
|
|
93
|
+
return [];
|
|
94
|
+
const shape = z.toJSONSchema(provider.connection, { io: 'input' });
|
|
95
|
+
return Object.entries(shape.properties ?? {}).map(([name, property]) => ({
|
|
96
|
+
name,
|
|
97
|
+
required: shape.required?.includes(name) ?? false,
|
|
98
|
+
url: property.format === 'uri',
|
|
99
|
+
...(property.description ? { description: property.description } : {}),
|
|
100
|
+
}));
|
|
101
|
+
}
|
|
102
|
+
/** Whether a provider from the definition takes a key. A project's own is taken to. */
|
|
103
|
+
export function takesKey(definition) {
|
|
104
|
+
const provider = kernelDefinition(definition);
|
|
105
|
+
return provider === undefined || provider.key !== undefined;
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Everything the kernel refuses about the provider, each at its setting: its id, what it connects
|
|
109
|
+
* with by its definition's own schema, and its two slots.
|
|
110
|
+
*/
|
|
111
|
+
export function providerProblems(provider) {
|
|
112
|
+
const problems = [];
|
|
113
|
+
if (!provider.id.trim())
|
|
114
|
+
problems.push({ field: 'id', message: 'Provider id is required.' });
|
|
115
|
+
const definition = kernelDefinition(provider.definition);
|
|
116
|
+
const connection = provider.connection ?? {};
|
|
117
|
+
const parsed = definition?.connection?.safeParse(connection);
|
|
118
|
+
for (const issue of parsed?.error?.issues ?? []) {
|
|
119
|
+
if (issue.code === 'unrecognized_keys') {
|
|
120
|
+
for (const key of issue.keys) {
|
|
121
|
+
problems.push({ field: `connection.${key}`, message: `This provider takes no '${key}'.` });
|
|
122
|
+
}
|
|
123
|
+
continue;
|
|
124
|
+
}
|
|
125
|
+
const name = issue.path[0];
|
|
126
|
+
if (typeof name !== 'string') {
|
|
127
|
+
problems.push({ message: issue.message });
|
|
128
|
+
continue;
|
|
129
|
+
}
|
|
130
|
+
const message = name in connection ? issue.message : `${name} is required.`;
|
|
131
|
+
problems.push({ field: `connection.${name}`, message });
|
|
132
|
+
}
|
|
133
|
+
for (const field of ['keySlot', 'fallbackKeySlot']) {
|
|
134
|
+
const slot = provider[field];
|
|
135
|
+
if (slot !== undefined && !keySlotSchema.safeParse(slot).success) {
|
|
136
|
+
problems.push({
|
|
137
|
+
field,
|
|
138
|
+
message: 'A key slot is 1 to 32 letters, digits, hyphens, or underscores.',
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
if (provider.keySlot && provider.keySlot === provider.fallbackKeySlot) {
|
|
143
|
+
problems.push({ field: 'fallbackKeySlot', message: labelText('provider.fallback_slot') });
|
|
144
|
+
}
|
|
145
|
+
if ((provider.keySlot || provider.fallbackKeySlot) && definition && !definition.key) {
|
|
146
|
+
problems.push({
|
|
147
|
+
field: 'keySlot',
|
|
148
|
+
message: labelText('protocol.no_key', { provider: provider.id }),
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
return problems;
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* The key slots a model reads, as the kernel resolves them: the ones it names, else the ones its
|
|
155
|
+
* provider among `providers` was registered with. A slot left blank is one not named.
|
|
156
|
+
*/
|
|
157
|
+
export function modelSlots(providers, binding) {
|
|
158
|
+
const provider = providers.find((held) => held.id === binding.provider) ?? {};
|
|
159
|
+
return keySlotsOf(provider, {
|
|
160
|
+
...(binding.keySlot ? { keySlot: binding.keySlot } : {}),
|
|
161
|
+
...(binding.fallbackKeySlot ? { fallbackKeySlot: binding.fallbackKeySlot } : {}),
|
|
162
|
+
});
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* The protocols `provider` serves, with an endpoint for agents of `type` when it is named.
|
|
166
|
+
* Undefined for a project's own definition: the studio then judges nothing about its models.
|
|
167
|
+
*/
|
|
168
|
+
export function servedProtocols(provider, type) {
|
|
169
|
+
const definition = kernelDefinition(provider.definition);
|
|
170
|
+
if (!definition)
|
|
171
|
+
return undefined;
|
|
172
|
+
let registered;
|
|
173
|
+
try {
|
|
174
|
+
registered = registerStudioProvider(createProviderRegistry(), provider, definition);
|
|
175
|
+
}
|
|
176
|
+
catch {
|
|
177
|
+
// why: a provider the kernel refuses serves nothing yet; its problems say why.
|
|
178
|
+
return [];
|
|
179
|
+
}
|
|
180
|
+
return registered.serves
|
|
181
|
+
.map((serve) => serve.protocol)
|
|
182
|
+
.filter((protocol) => type === undefined || protocol.endpoints[type] !== undefined);
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Whether `provider` serves agents of `type` on some protocol, or on `protocol` when it is named.
|
|
186
|
+
* A provider from a project's own definition is taken to.
|
|
187
|
+
*/
|
|
188
|
+
export function servesProfileType(provider, type, protocol) {
|
|
189
|
+
if (!provider)
|
|
190
|
+
return false;
|
|
191
|
+
const served = servedProtocols(provider, type);
|
|
192
|
+
if (served === undefined)
|
|
193
|
+
return true;
|
|
194
|
+
return protocol === undefined ? served.length > 0 : served.some((each) => each.id === protocol);
|
|
195
|
+
}
|
|
196
|
+
/** The route of `binding`, a model of an agent of `type` whose providers are `providers`. */
|
|
197
|
+
export function modelRoute(providers, type, binding) {
|
|
198
|
+
if (!isModelProfileType(type)) {
|
|
199
|
+
throw new Error(`Cannot create a model route without a profile type.`); // labels-exempt: builder diagnostic
|
|
200
|
+
}
|
|
201
|
+
return {
|
|
202
|
+
profileType: type,
|
|
203
|
+
protocol: binding.protocol,
|
|
204
|
+
provider: binding.provider,
|
|
205
|
+
definition: definitionOf(providers, binding.provider),
|
|
206
|
+
apiId: binding.apiId,
|
|
207
|
+
decision: type === 'decision',
|
|
208
|
+
};
|
|
209
|
+
}
|
|
210
|
+
function isModelProfileType(type) {
|
|
211
|
+
return ['text', 'image', 'speech', 'live', 'decision', 'embedding'].includes(type);
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* The options `protocol` takes, a field per setting, read from its own schema. A setting inside an
|
|
215
|
+
* object is a field of its own; one a row cannot hold (a list, a free record) is left to code. Given
|
|
216
|
+
* the model, an option it refuses is left out, unless `options` already holds it: that row stays,
|
|
217
|
+
* where its issue shows.
|
|
218
|
+
*/
|
|
219
|
+
export function protocolOptionFields(protocol, model) {
|
|
220
|
+
const schema = z.toJSONSchema(protocol.options, {
|
|
221
|
+
io: 'input',
|
|
222
|
+
unrepresentable: 'any',
|
|
223
|
+
});
|
|
224
|
+
const fields = fieldsOf(schema, '', true);
|
|
225
|
+
const refused = model ? (protocol.refusedOptions?.(model.apiId.trim()) ?? []) : [];
|
|
226
|
+
return fields.filter((field) => {
|
|
227
|
+
const top = field.path.split('.')[0] ?? field.path;
|
|
228
|
+
return !refused.includes(top) || model?.options[top] !== undefined;
|
|
229
|
+
});
|
|
230
|
+
}
|
|
231
|
+
function fieldsOf(node, prefix, held) {
|
|
232
|
+
return Object.entries(node.properties ?? {}).flatMap(([name, property]) => {
|
|
233
|
+
const path = prefix ? `${prefix}.${name}` : name;
|
|
234
|
+
const required = held && (node.required?.includes(name) ?? false);
|
|
235
|
+
if (property.type === 'object' && property.properties)
|
|
236
|
+
return fieldsOf(property, path, required);
|
|
237
|
+
const base = {
|
|
238
|
+
path,
|
|
239
|
+
label: optionLabel(name),
|
|
240
|
+
required,
|
|
241
|
+
...(property.description ? { description: property.description } : {}),
|
|
242
|
+
};
|
|
243
|
+
const literals = property.anyOf?.filter((choice) => typeof choice.const === 'string' || typeof choice.const === 'number');
|
|
244
|
+
const literalChoices = literals?.map((choice) => choice.const);
|
|
245
|
+
if (property.enum?.every((value) => typeof value === 'string')) {
|
|
246
|
+
return [
|
|
247
|
+
{
|
|
248
|
+
...base,
|
|
249
|
+
kind: 'choice',
|
|
250
|
+
choices: property.enum.map((value) => ({ value: value })),
|
|
251
|
+
},
|
|
252
|
+
];
|
|
253
|
+
}
|
|
254
|
+
if (literalChoices &&
|
|
255
|
+
literalChoices.length === property.anyOf?.length &&
|
|
256
|
+
literalChoices.length > 0) {
|
|
257
|
+
const numeric = literalChoices.every((value) => typeof value === 'number');
|
|
258
|
+
if (numeric || literalChoices.every((value) => typeof value === 'string')) {
|
|
259
|
+
return [
|
|
260
|
+
{
|
|
261
|
+
...base,
|
|
262
|
+
kind: 'choice',
|
|
263
|
+
choices: (literals ?? []).map((choice) => ({
|
|
264
|
+
value: String(choice.const),
|
|
265
|
+
...(choice.title ? { label: choice.title } : {}),
|
|
266
|
+
...(choice.description ? { description: choice.description } : {}),
|
|
267
|
+
})),
|
|
268
|
+
...(numeric ? { choiceType: 'number' } : {}),
|
|
269
|
+
},
|
|
270
|
+
];
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
if (property.type === 'boolean')
|
|
274
|
+
return [{ ...base, kind: 'boolean' }];
|
|
275
|
+
if (property.type === 'string')
|
|
276
|
+
return [{ ...base, kind: 'text' }];
|
|
277
|
+
if (property.type === 'number' || property.type === 'integer')
|
|
278
|
+
return [{ ...base, kind: 'number' }];
|
|
279
|
+
return [];
|
|
280
|
+
});
|
|
281
|
+
}
|
|
282
|
+
/** An option's name as a row labels it: `persistViaInteractionId` is Persist via interaction id. */
|
|
283
|
+
function optionLabel(name) {
|
|
284
|
+
const words = name.replace(/([a-z0-9])([A-Z])/g, '$1 $2').toLowerCase();
|
|
285
|
+
return words.charAt(0).toUpperCase() + words.slice(1);
|
|
286
|
+
}
|
|
287
|
+
/** The value at `path` in `options`. */
|
|
288
|
+
export function optionAt(options, path) {
|
|
289
|
+
return path
|
|
290
|
+
.split('.')
|
|
291
|
+
.reduce((held, key) => held && typeof held === 'object' && !Array.isArray(held) ? held[key] : undefined, options);
|
|
292
|
+
}
|
|
293
|
+
/** `options` with `value` at `path`, or with it left out when `undefined`; an object left empty goes too. */
|
|
294
|
+
export function withOption(options, path, value) {
|
|
295
|
+
const [key = '', ...rest] = path.split('.');
|
|
296
|
+
const { [key]: was, ...others } = options;
|
|
297
|
+
const next = rest.length
|
|
298
|
+
? withOption(was && typeof was === 'object' && !Array.isArray(was) ? was : {}, rest.join('.'), value)
|
|
299
|
+
: value;
|
|
300
|
+
const empty = next === undefined ||
|
|
301
|
+
(typeof next === 'object' &&
|
|
302
|
+
next !== null &&
|
|
303
|
+
!Array.isArray(next) &&
|
|
304
|
+
!Object.keys(next).length);
|
|
305
|
+
return empty ? others : { ...others, [key]: next };
|
|
306
|
+
}
|
package/read-source.d.ts
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The inverse of `studioSource`: the file it prints, read back into the draft
|
|
3
|
+
* the form stores. Plain values come back as themselves. The printer's own
|
|
4
|
+
* wrappers (`z.fromJSONSchema`, a canned `handler`, `compileDetect`, `.join('\\n')`)
|
|
5
|
+
* come back through the same shapes that printer writes. Anything else is an
|
|
6
|
+
* error at that spot, and the draft is left alone.
|
|
7
|
+
*/
|
|
8
|
+
import { type StudioDraft, type ToolSpecDraft } from './draft.ts';
|
|
9
|
+
import { type StudioProvider } from './providers.ts';
|
|
10
|
+
/** Where a read stopped, one-based, on the file the visitor is editing. */
|
|
11
|
+
export interface StudioSourceError {
|
|
12
|
+
message: string;
|
|
13
|
+
line: number;
|
|
14
|
+
column: number;
|
|
15
|
+
}
|
|
16
|
+
/** Where a field was written, so a later issue can mark that spot. */
|
|
17
|
+
export interface StudioSourceSpan {
|
|
18
|
+
path: string;
|
|
19
|
+
line: number;
|
|
20
|
+
column: number;
|
|
21
|
+
}
|
|
22
|
+
export type StudioSourceRead = {
|
|
23
|
+
ok: true;
|
|
24
|
+
draft: StudioDraft;
|
|
25
|
+
spans: StudioSourceSpan[];
|
|
26
|
+
/** Every `registerTool` in the file, including one `tools.allow` leaves out. */
|
|
27
|
+
registered: ToolSpecDraft[];
|
|
28
|
+
} | {
|
|
29
|
+
ok: false;
|
|
30
|
+
errors: StudioSourceError[];
|
|
31
|
+
};
|
|
32
|
+
export type ProviderSourceRead = {
|
|
33
|
+
ok: true;
|
|
34
|
+
provider: StudioProvider;
|
|
35
|
+
spans: StudioSourceSpan[];
|
|
36
|
+
} | {
|
|
37
|
+
ok: false;
|
|
38
|
+
errors: StudioSourceError[];
|
|
39
|
+
};
|
|
40
|
+
/** `agentId` is the id an agent tool or a compactor names; the workspace knows its key. */
|
|
41
|
+
export type AgentKeyOf = (agentId: string) => string | undefined;
|
|
42
|
+
/**
|
|
43
|
+
* The open agent's file, as a draft. `current` keeps the row keys of models and
|
|
44
|
+
* tools the file still has. `agentKeyOf` resolves an agent id named in the file.
|
|
45
|
+
*/
|
|
46
|
+
export declare function readStudioSource(source: string, current: StudioDraft, agentKeyOf?: AgentKeyOf): StudioSourceRead;
|
|
47
|
+
/** A provider's file, as the provider it defines. Its id has to stay `current`'s. */
|
|
48
|
+
export declare function readProviderSource(source: string, current: StudioProvider): ProviderSourceRead;
|