@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.
Files changed (473) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +295 -2
  3. package/agreement.d.ts +14 -0
  4. package/agreement.js +80 -0
  5. package/asks.d.ts +47 -0
  6. package/asks.js +54 -0
  7. package/browser-connection.d.ts +49 -0
  8. package/browser-connection.js +215 -0
  9. package/browser-engine.d.ts +11 -0
  10. package/browser-engine.js +11 -0
  11. package/browser-execution.d.ts +6 -0
  12. package/browser-execution.js +18 -0
  13. package/browser-live.d.ts +4 -0
  14. package/browser-live.js +132 -0
  15. package/browser-transport.d.ts +33 -0
  16. package/browser-transport.js +229 -0
  17. package/browser.d.ts +4 -0
  18. package/browser.js +4 -0
  19. package/canonical.d.ts +10 -0
  20. package/canonical.js +25 -0
  21. package/compile-workspace.d.ts +28 -0
  22. package/compile-workspace.js +295 -0
  23. package/compile.d.ts +65 -0
  24. package/compile.js +1605 -0
  25. package/concierge-demo.d.ts +17 -0
  26. package/concierge-demo.js +1230 -0
  27. package/conversation-key.d.ts +5 -0
  28. package/conversation-key.js +10 -0
  29. package/decision-example-images.d.ts +30 -0
  30. package/decision-example-images.js +30 -0
  31. package/deno.json +3 -0
  32. package/draft.d.ts +407 -0
  33. package/draft.js +505 -0
  34. package/editors.d.ts +29 -0
  35. package/editors.js +51 -0
  36. package/example-embedding-files.d.ts +11 -0
  37. package/example-embedding-files.js +20 -0
  38. package/example.d.ts +36 -0
  39. package/example.js +357 -0
  40. package/guardrail-probe.d.ts +100 -0
  41. package/guardrail-probe.js +722 -0
  42. package/held-credentials.d.ts +28 -0
  43. package/held-credentials.js +87 -0
  44. package/installed.mjs +40 -0
  45. package/lent-keys.d.ts +122 -0
  46. package/lent-keys.js +47 -0
  47. package/line-diff.d.ts +15 -0
  48. package/line-diff.js +41 -0
  49. package/live-connection.d.ts +22 -0
  50. package/live-connection.js +27 -0
  51. package/live-session-bridge.d.ts +15 -0
  52. package/live-session-bridge.js +202 -0
  53. package/map-line.d.ts +19 -0
  54. package/map-line.js +42 -0
  55. package/map.d.ts +154 -0
  56. package/map.js +525 -0
  57. package/media-accept.d.ts +19 -0
  58. package/media-accept.js +65 -0
  59. package/mod.d.ts +39 -0
  60. package/mod.js +33 -0
  61. package/origins.d.ts +52 -0
  62. package/origins.js +165 -0
  63. package/package.json +85 -4
  64. package/page/assets/Banner-BISz3nXA.js +2 -0
  65. package/page/assets/BottomSheet-BwfBDtje.js +1 -0
  66. package/page/assets/Card-Lp-0P5eL.js +1 -0
  67. package/page/assets/CardWall-CBRLdDZW.js +1 -0
  68. package/page/assets/Center-nHS1JSux.js +1 -0
  69. package/page/assets/CheckboxInput-Cj5pk-KI.js +2 -0
  70. package/page/assets/CodeBlock-C7XJ4ioE.js +51 -0
  71. package/page/assets/CollapsibleGroup-N7_SOjbm.js +2 -0
  72. package/page/assets/ContextMenu-CBu9H-9H.js +2 -0
  73. package/page/assets/DateInput-BGrQ5tPC.js +1 -0
  74. package/page/assets/Dialog-DELWQo-v.js +1 -0
  75. package/page/assets/EmptyState-C8W4JKBZ.js +1 -0
  76. package/page/assets/HoverCard-D1Y1ltWQ.js +1 -0
  77. package/page/assets/Icon-JrysT8aU.js +3 -0
  78. package/page/assets/IconAlertTriangle-BqAEqqdU.js +1 -0
  79. package/page/assets/IconButton-DlOGzJIX.js +1 -0
  80. package/page/assets/IconEye-BB5aY-wQ.js +1 -0
  81. package/page/assets/IconFileText-6zOFKKrF.js +1 -0
  82. package/page/assets/IconSearch-BTx66a40.js +1 -0
  83. package/page/assets/IconShield-DDOh7Gr5.js +1 -0
  84. package/page/assets/ItemSwipeLayer-Ckn4X6h9.js +1 -0
  85. package/page/assets/PaneState-BvA2tLQg.js +1 -0
  86. package/page/assets/PaneState-eUzUkNE8.css +1 -0
  87. package/page/assets/ScrollableArea-Ckugdj1N.js +1 -0
  88. package/page/assets/Section-DJ97F7QE.js +1 -0
  89. package/page/assets/SegmentedControlItem-h-aaXzyS.js +1 -0
  90. package/page/assets/SidePanel-BL32abk8.js +1 -0
  91. package/page/assets/StackItem-CQviqAfM.js +1 -0
  92. package/page/assets/Text-bum6zWWx.js +2 -0
  93. package/page/assets/TimestampHoverCard-DQIG0RZF.js +1 -0
  94. package/page/assets/ToolResultCharts-CgshSv9Q.js +1 -0
  95. package/page/assets/Tooltip-BH9xiRMl.js +1 -0
  96. package/page/assets/TraceInspector-_yZiz05W.js +1 -0
  97. package/page/assets/TraceOverview-BPO-HIYK.js +57 -0
  98. package/page/assets/VStack-CkVMcNiK.js +1 -0
  99. package/page/assets/_virtual_studio-type-sources-ByxqQaOG.js +12936 -0
  100. package/page/assets/arrive-DvbqpeRS.js +1 -0
  101. package/page/assets/browser-engine-CYq9DQAM.js +9 -0
  102. package/page/assets/browser-transport-D-2jDYe7.js +47 -0
  103. package/page/assets/codicon-DF1abBS2.ttf +0 -0
  104. package/page/assets/compile-egress-BSxOdX4K.js +23 -0
  105. package/page/assets/container.stylex-BmOi-8DQ.js +1 -0
  106. package/page/assets/createReactComponent-CZwsv6DD.js +1 -0
  107. package/page/assets/decision-example-images-CZGr7YIT.js +1 -0
  108. package/page/assets/devWarning-DxuplmRl.js +1 -0
  109. package/page/assets/editor-DjpsE8to.css +1 -0
  110. package/page/assets/editor.api-Cd3ViPQa.js +908 -0
  111. package/page/assets/editor.worker-6GY8RhDc.js +1 -0
  112. package/page/assets/editor.worker-BmdWdrHZ.js +33 -0
  113. package/page/assets/editors-BJX_S59A.js +1 -0
  114. package/page/assets/egress-automata-B5ZGE1mT.js +1 -0
  115. package/page/assets/embedding-space-view-CfQBPDxD.js +140 -0
  116. package/page/assets/encode-files-Bc3HJyAh.js +1 -0
  117. package/page/assets/export-agent-C3yyzXH8.js +43 -0
  118. package/page/assets/figtree-latin-400-normal-BD4aNku5.woff +0 -0
  119. package/page/assets/figtree-latin-400-normal-g7Dtegnw.woff2 +0 -0
  120. package/page/assets/figtree-latin-500-normal-BWnGEVsr.woff2 +0 -0
  121. package/page/assets/figtree-latin-500-normal-B_yy1phn.woff +0 -0
  122. package/page/assets/figtree-latin-600-normal-BM_oTo4n.woff +0 -0
  123. package/page/assets/figtree-latin-600-normal-Cv_xCTDl.woff2 +0 -0
  124. package/page/assets/figtree-latin-700-normal-BCCt2T1q.woff +0 -0
  125. package/page/assets/figtree-latin-700-normal-th6qEP7c.woff2 +0 -0
  126. package/page/assets/focusOutline.stylex-BT0kfa4t.js +1 -0
  127. package/page/assets/focusableSelector-DXZeMU85.js +1 -0
  128. package/page/assets/groupStyles-C7Ter7zC.js +1 -0
  129. package/page/assets/guardrail-tester-Gut5xK4a.js +9 -0
  130. package/page/assets/host-patterns-C9RMP16Q.js +1 -0
  131. package/page/assets/index-CvvmFKgS.js +105 -0
  132. package/page/assets/index-DOaHlqBo.css +1 -0
  133. package/page/assets/isRtlElement-BG33-k_H.js +1 -0
  134. package/page/assets/labels-provider-4TIWDvsE.js +3 -0
  135. package/page/assets/lent-keys-C32ems-I.js +1 -0
  136. package/page/assets/live-ingress-lDUGPwth.js +1 -0
  137. package/page/assets/live-messages-CnkL4GWi.js +1 -0
  138. package/page/assets/mergeProps-ptS-gIMz.js +1 -0
  139. package/page/assets/padding.stylex-B76907Zf.js +1 -0
  140. package/page/assets/preload-helper-DpV6A1kQ.js +1 -0
  141. package/page/assets/reader-BOCCYaRp.js +7 -0
  142. package/page/assets/register-CDgivxvX.js +2 -0
  143. package/page/assets/rolldown-runtime-hePW80VL.js +1 -0
  144. package/page/assets/schemas-BQ9Jydzb.js +56 -0
  145. package/page/assets/shaped-data-BcarWqd5.js +16 -0
  146. package/page/assets/sharedResizeObserver-4U9Xq5Oq.js +1 -0
  147. package/page/assets/stub-DhdcU_Ew.js +471 -0
  148. package/page/assets/studio-code-pane-C_SAbcOa.js +8 -0
  149. package/page/assets/studio-console-DZwlEsvr.js +3 -0
  150. package/page/assets/studio-decision-B0FnCAXA.js +1 -0
  151. package/page/assets/studio-embedding-CmA51HVo.js +2 -0
  152. package/page/assets/studio-host-console-By7hqu2l.js +2 -0
  153. package/page/assets/studio-live-BrcVQcyV.js +1 -0
  154. package/page/assets/studio-map-B_xSia-z.js +1 -0
  155. package/page/assets/studio-map-Bb06Tw1F.css +1 -0
  156. package/page/assets/studio-monaco-CbKf90i6.css +1 -0
  157. package/page/assets/studio-monaco-xfyfezQS.js +34 -0
  158. package/page/assets/studio-ts.worker-B-EXG4Sv.js +67741 -0
  159. package/page/assets/studio-ts.worker-BXtW3z-O.js +1 -0
  160. package/page/assets/studio-type-checker-BOvxudki.js +23 -0
  161. package/page/assets/themeProps-3IqahpCr.js +1 -0
  162. package/page/assets/tokens.stylex-DkHf0P9C.js +1 -0
  163. package/page/assets/tool-schema-idaOe2nI.js +18 -0
  164. package/page/assets/trace-patterns-DnYJa0nI.js +1 -0
  165. package/page/assets/trace-record-C3zNksA_.js +1 -0
  166. package/page/assets/trace-schema-9CdEyG6Q.js +1 -0
  167. package/page/assets/tree-DqyAMsbI.js +3 -0
  168. package/page/assets/turn-client-Du3Um3Mg.js +2 -0
  169. package/page/assets/types-BhfXQCLx.js +1 -0
  170. package/page/assets/typescript-20GgZ8PJ.js +1 -0
  171. package/page/assets/use-one-call-Hcs8YBp1.js +1 -0
  172. package/page/assets/useAdaptivePresentation-BzmPCddb.js +1 -0
  173. package/page/assets/useClipboard-BgGRxRMJ.js +1 -0
  174. package/page/assets/useContainerReveal-BFy8N_QU.js +1 -0
  175. package/page/assets/useDevWarning-Z9SoixOP.js +1 -0
  176. package/page/assets/useLayerDismissal-B_G7IWpC.js +1 -0
  177. package/page/assets/useMediaQuery-BCT0NUeZ.js +1 -0
  178. package/page/assets/useScrollLock-Dyf6PHJt.js +1 -0
  179. package/page/assets/useScrollableArea-0NzdiBCq.js +1 -0
  180. package/page/assets/useTooltip-CJM_xhLB.js +1 -0
  181. package/page/assets/workspace-DZALqEDX.js +1 -0
  182. package/page/assets/zip-DTcEfps6.js +1 -0
  183. package/page/index.html +90 -0
  184. package/page.mjs +49 -0
  185. package/people.d.ts +87 -0
  186. package/people.js +110 -0
  187. package/policy.d.ts +43 -0
  188. package/policy.js +102 -0
  189. package/ports.d.mts +32 -0
  190. package/ports.mjs +85 -0
  191. package/probe-battery.d.ts +13 -0
  192. package/probe-battery.js +404 -0
  193. package/providers.d.ts +149 -0
  194. package/providers.js +306 -0
  195. package/read-source.d.ts +48 -0
  196. package/read-source.js +1301 -0
  197. package/read-steps.d.ts +23 -0
  198. package/read-steps.js +2 -0
  199. package/reader.d.ts +11 -0
  200. package/reader.js +11 -0
  201. package/registrations.d.ts +83 -0
  202. package/registrations.js +1 -0
  203. package/requirements.d.ts +22 -0
  204. package/requirements.js +38 -0
  205. package/run-payload-core.d.ts +28 -0
  206. package/run-payload-core.js +123 -0
  207. package/run-payload.d.ts +32 -0
  208. package/run-payload.js +26 -0
  209. package/runtime-scope.d.ts +84 -0
  210. package/runtime-scope.js +308 -0
  211. package/runtime.d.ts +84 -0
  212. package/runtime.js +387 -0
  213. package/section-notes.d.ts +33 -0
  214. package/section-notes.js +38 -0
  215. package/serve-page.mjs +96 -0
  216. package/server/draft-decide.d.ts +72 -0
  217. package/server/draft-decide.js +111 -0
  218. package/server/draft-embedding.d.ts +3 -0
  219. package/server/draft-embedding.js +35 -0
  220. package/server/draft-handler.d.ts +82 -0
  221. package/server/draft-handler.js +213 -0
  222. package/server/draft-probe.d.ts +14 -0
  223. package/server/draft-probe.js +61 -0
  224. package/server/draft-replies.d.ts +22 -0
  225. package/server/draft-replies.js +46 -0
  226. package/server/edited-session.d.ts +28 -0
  227. package/server/edited-session.js +83 -0
  228. package/server/edits.d.ts +38 -0
  229. package/server/edits.js +195 -0
  230. package/server/handler.d.ts +133 -0
  231. package/server/handler.js +598 -0
  232. package/server/lent-draft.d.ts +19 -0
  233. package/server/lent-draft.js +23 -0
  234. package/server/live.d.ts +15 -0
  235. package/server/live.js +96 -0
  236. package/server/open-editor.d.ts +63 -0
  237. package/server/open-editor.js +115 -0
  238. package/server/origins.d.ts +18 -0
  239. package/server/origins.js +330 -0
  240. package/server/project-source.d.ts +208 -0
  241. package/server/project-source.js +1042 -0
  242. package/server/project.d.ts +22 -0
  243. package/server/project.js +56 -0
  244. package/server/run-traces.d.ts +20 -0
  245. package/server/run-traces.js +96 -0
  246. package/server/save-new.d.ts +29 -0
  247. package/server/save-new.js +514 -0
  248. package/server/save-plan.d.ts +46 -0
  249. package/server/save-plan.js +1134 -0
  250. package/server/save-remove.d.ts +21 -0
  251. package/server/save-remove.js +528 -0
  252. package/server/save-session.d.ts +96 -0
  253. package/server/save-session.js +418 -0
  254. package/server/save-wire.d.ts +235 -0
  255. package/server/save-wire.js +8 -0
  256. package/server/save.d.ts +52 -0
  257. package/server/save.js +209 -0
  258. package/server/serve.d.ts +23 -0
  259. package/server/serve.js +413 -0
  260. package/server/test-connection.d.ts +17 -0
  261. package/server/test-connection.js +362 -0
  262. package/server/test-key.d.ts +2 -0
  263. package/server/test-key.js +83 -0
  264. package/server/watch.d.ts +28 -0
  265. package/server/watch.js +93 -0
  266. package/server/zod-edit.d.ts +74 -0
  267. package/server/zod-edit.js +558 -0
  268. package/server.d.ts +8 -0
  269. package/server.js +8 -0
  270. package/setups.mjs +170 -0
  271. package/shared-carry.d.ts +114 -0
  272. package/shared-carry.js +523 -0
  273. package/shared-settings.d.ts +34 -0
  274. package/shared-settings.js +70 -0
  275. package/source.d.ts +75 -0
  276. package/source.js +414 -0
  277. package/start.mjs +169 -0
  278. package/stream-lines.d.ts +9 -0
  279. package/stream-lines.js +27 -0
  280. package/stub.d.ts +6 -0
  281. package/stub.js +33 -0
  282. package/surface.d.ts +53 -0
  283. package/surface.js +631 -0
  284. package/system-markup.d.ts +20 -0
  285. package/system-markup.js +51 -0
  286. package/tool-schema.d.ts +23 -0
  287. package/tool-schema.js +69 -0
  288. package/tools.d.ts +16 -0
  289. package/tools.js +91 -0
  290. package/traces.d.ts +24 -0
  291. package/traces.js +29 -0
  292. package/transport.d.ts +57 -0
  293. package/transport.js +187 -0
  294. package/tree.d.ts +32 -0
  295. package/tree.js +83 -0
  296. package/types.d.ts +62 -0
  297. package/types.js +6 -0
  298. package/ui/acting-as-button.d.ts +2 -0
  299. package/ui/acting-as-button.js +16 -0
  300. package/ui/add-provider.d.ts +13 -0
  301. package/ui/add-provider.js +20 -0
  302. package/ui/boot-mark.css +53 -0
  303. package/ui/boot-mark.d.ts +19 -0
  304. package/ui/boot-mark.js +128 -0
  305. package/ui/boot-paint.d.ts +8 -0
  306. package/ui/boot-paint.js +8 -0
  307. package/ui/brand-icons.d.ts +57 -0
  308. package/ui/brand-icons.js +148 -0
  309. package/ui/built/theme.css +830 -0
  310. package/ui/built/theme.css.d.ts +9 -0
  311. package/ui/built/theorem-studio.d.ts +13 -0
  312. package/ui/built/theorem-studio.js +705 -0
  313. package/ui/built/theorem-studio.variants.d.ts +28 -0
  314. package/ui/code/monaco-contributions.d.ts +45 -0
  315. package/ui/code/studio-code.d.ts +7 -0
  316. package/ui/code/studio-code.js +253 -0
  317. package/ui/code/studio-monaco.d.ts +44 -0
  318. package/ui/code/studio-monaco.js +48 -0
  319. package/ui/code/studio-ts.worker.d.ts +1 -0
  320. package/ui/code/studio-ts.worker.js +16 -0
  321. package/ui/code/studio-type-checker.d.ts +12 -0
  322. package/ui/code/studio-type-checker.js +308 -0
  323. package/ui/code/studio-type-sources.d.ts +26 -0
  324. package/ui/confirm-write.d.ts +12 -0
  325. package/ui/confirm-write.js +45 -0
  326. package/ui/diff-block.d.ts +21 -0
  327. package/ui/diff-block.js +17 -0
  328. package/ui/figtree.css +59 -0
  329. package/ui/file-place.d.ts +4 -0
  330. package/ui/file-place.js +26 -0
  331. package/ui/guardrail-tester.d.ts +18 -0
  332. package/ui/guardrail-tester.js +248 -0
  333. package/ui/inspector-context.d.ts +119 -0
  334. package/ui/inspector-context.js +84 -0
  335. package/ui/inspector.d.ts +247 -0
  336. package/ui/inspector.js +284 -0
  337. package/ui/lib/acting-as.d.ts +25 -0
  338. package/ui/lib/acting-as.js +90 -0
  339. package/ui/lib/boot-sequence.d.ts +32 -0
  340. package/ui/lib/boot-sequence.js +57 -0
  341. package/ui/lib/export-agent.d.ts +11 -0
  342. package/ui/lib/export-agent.js +335 -0
  343. package/ui/lib/facet-icons.d.ts +20 -0
  344. package/ui/lib/facet-icons.js +21 -0
  345. package/ui/lib/panel-motion.d.ts +8 -0
  346. package/ui/lib/panel-motion.js +74 -0
  347. package/ui/lib/project-address.d.ts +14 -0
  348. package/ui/lib/project-address.js +24 -0
  349. package/ui/lib/project-starting.d.ts +13 -0
  350. package/ui/lib/project-starting.js +30 -0
  351. package/ui/lib/project-traces.d.ts +17 -0
  352. package/ui/lib/project-traces.js +54 -0
  353. package/ui/lib/read-map.d.ts +30 -0
  354. package/ui/lib/read-map.js +173 -0
  355. package/ui/lib/read-progress.d.ts +14 -0
  356. package/ui/lib/read-progress.js +12 -0
  357. package/ui/lib/refusal-lines.d.ts +3 -0
  358. package/ui/lib/refusal-lines.js +8 -0
  359. package/ui/lib/studio-activity.d.ts +5 -0
  360. package/ui/lib/studio-activity.js +17 -0
  361. package/ui/lib/studio-console.d.ts +27 -0
  362. package/ui/lib/studio-console.js +9 -0
  363. package/ui/lib/studio-conversation.d.ts +20 -0
  364. package/ui/lib/studio-conversation.js +130 -0
  365. package/ui/lib/studio-examples.d.ts +31 -0
  366. package/ui/lib/studio-examples.js +25 -0
  367. package/ui/lib/studio-labels.d.ts +6 -0
  368. package/ui/lib/studio-labels.js +13 -0
  369. package/ui/lib/studio-map-kept.d.ts +17 -0
  370. package/ui/lib/studio-map-kept.js +48 -0
  371. package/ui/lib/studio-open.d.ts +22 -0
  372. package/ui/lib/studio-open.js +54 -0
  373. package/ui/lib/studio-page.d.ts +33 -0
  374. package/ui/lib/studio-page.js +121 -0
  375. package/ui/lib/studio-prefs.d.ts +26 -0
  376. package/ui/lib/studio-prefs.js +87 -0
  377. package/ui/lib/studio-project.d.ts +106 -0
  378. package/ui/lib/studio-project.js +177 -0
  379. package/ui/lib/studio-restore.d.ts +49 -0
  380. package/ui/lib/studio-restore.js +251 -0
  381. package/ui/lib/studio-run-open.d.ts +15 -0
  382. package/ui/lib/studio-run-open.js +16 -0
  383. package/ui/lib/studio-session.d.ts +34 -0
  384. package/ui/lib/studio-session.js +17 -0
  385. package/ui/lib/studio-settings.d.ts +15 -0
  386. package/ui/lib/studio-settings.js +48 -0
  387. package/ui/lib/studio-store.d.ts +64 -0
  388. package/ui/lib/studio-store.js +391 -0
  389. package/ui/lib/studio-watch.d.ts +12 -0
  390. package/ui/lib/studio-watch.js +27 -0
  391. package/ui/lib/tab-fills.d.ts +6 -0
  392. package/ui/lib/tab-fills.js +14 -0
  393. package/ui/lib/tool-credentials.d.ts +3 -0
  394. package/ui/lib/tool-credentials.js +23 -0
  395. package/ui/lib/tool-probe.d.ts +19 -0
  396. package/ui/lib/tool-probe.js +104 -0
  397. package/ui/lib/type-icons.d.ts +35 -0
  398. package/ui/lib/type-icons.js +38 -0
  399. package/ui/lib/when-idle.d.ts +5 -0
  400. package/ui/lib/when-idle.js +14 -0
  401. package/ui/lib/zip.d.ts +5 -0
  402. package/ui/lib/zip.js +8 -0
  403. package/ui/map-token.css +11 -0
  404. package/ui/map-token.d.ts +17 -0
  405. package/ui/map-token.js +29 -0
  406. package/ui/mcp-icon.d.ts +6 -0
  407. package/ui/mcp-icon.js +8 -0
  408. package/ui/motion.css +113 -0
  409. package/ui/pan.d.ts +32 -0
  410. package/ui/pan.js +90 -0
  411. package/ui/profile-editor.d.ts +33 -0
  412. package/ui/profile-editor.js +2638 -0
  413. package/ui/provider-editor.d.ts +15 -0
  414. package/ui/provider-editor.js +92 -0
  415. package/ui/read-map.css +48 -0
  416. package/ui/read-map.d.ts +7 -0
  417. package/ui/read-map.js +163 -0
  418. package/ui/refusal-detail.d.ts +4 -0
  419. package/ui/refusal-detail.js +21 -0
  420. package/ui/shared-change.d.ts +9 -0
  421. package/ui/shared-change.js +28 -0
  422. package/ui/shell-motion.css +121 -0
  423. package/ui/shell-motion.d.ts +73 -0
  424. package/ui/shell-motion.js +194 -0
  425. package/ui/studio-code-pane.d.ts +19 -0
  426. package/ui/studio-code-pane.js +44 -0
  427. package/ui/studio-compare.d.ts +80 -0
  428. package/ui/studio-compare.js +326 -0
  429. package/ui/studio-conflicts.d.ts +17 -0
  430. package/ui/studio-conflicts.js +87 -0
  431. package/ui/studio-connection.d.ts +64 -0
  432. package/ui/studio-connection.js +286 -0
  433. package/ui/studio-decision.d.ts +6 -0
  434. package/ui/studio-decision.js +49 -0
  435. package/ui/studio-embedding.d.ts +6 -0
  436. package/ui/studio-embedding.js +30 -0
  437. package/ui/studio-host-console.d.ts +6 -0
  438. package/ui/studio-host-console.js +17 -0
  439. package/ui/studio-host.d.ts +73 -0
  440. package/ui/studio-host.js +12 -0
  441. package/ui/studio-live.d.ts +17 -0
  442. package/ui/studio-live.js +26 -0
  443. package/ui/studio-map.css +273 -0
  444. package/ui/studio-map.d.ts +17 -0
  445. package/ui/studio-map.js +397 -0
  446. package/ui/studio-nav.d.ts +24 -0
  447. package/ui/studio-nav.js +17 -0
  448. package/ui/studio-no-project.d.ts +5 -0
  449. package/ui/studio-no-project.js +9 -0
  450. package/ui/studio-run.css +76 -0
  451. package/ui/studio-run.d.ts +14 -0
  452. package/ui/studio-run.js +119 -0
  453. package/ui/studio-runner.d.ts +45 -0
  454. package/ui/studio-runner.js +187 -0
  455. package/ui/studio-save.d.ts +49 -0
  456. package/ui/studio-save.js +307 -0
  457. package/ui/studio-screen.d.ts +61 -0
  458. package/ui/studio-screen.js +2078 -0
  459. package/ui/studio-settings.d.ts +31 -0
  460. package/ui/studio-settings.js +288 -0
  461. package/ui/studio-shell.css +27 -0
  462. package/ui/studio-shell.d.ts +43 -0
  463. package/ui/studio-shell.js +87 -0
  464. package/ui/studio-theme.d.ts +7 -0
  465. package/ui/studio-theme.js +94 -0
  466. package/ui/studio.css +427 -0
  467. package/ui/theorem-mark.css +84 -0
  468. package/ui/theorem-mark.d.ts +22 -0
  469. package/ui/theorem-mark.js +21 -0
  470. package/vite.d.mts +30 -0
  471. package/vite.mjs +277 -0
  472. package/workspace.d.ts +230 -0
  473. 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
+ }
@@ -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;