@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
@@ -0,0 +1,48 @@
1
+ import { isRecord, session, WORKSPACE_KEY } from "./studio-session.js";
2
+ const NOTHING_KEPT = { tokens: {}, detail: {}, expanded: false };
3
+ const keptKey = (project) => project === undefined ? `${WORKSPACE_KEY}.map` : `${WORKSPACE_KEY}.map.project:${project}`;
4
+ function places(kept) {
5
+ if (!isRecord(kept))
6
+ return {};
7
+ const read = {};
8
+ for (const [id, place] of Object.entries(kept)) {
9
+ if (isRecord(place) && typeof place.x === 'number' && typeof place.y === 'number') {
10
+ read[id] = { x: place.x, y: place.y };
11
+ }
12
+ }
13
+ return read;
14
+ }
15
+ /** What was kept; the map as it first opens when nothing was or it cannot be read. */
16
+ export function readKeptMap(project) {
17
+ try {
18
+ const kept = JSON.parse(session()?.getItem(keptKey(project)) ?? 'null');
19
+ if (!isRecord(kept))
20
+ return NOTHING_KEPT;
21
+ return {
22
+ tokens: places(kept.tokens),
23
+ detail: places(kept.detail),
24
+ expanded: kept.expanded === true,
25
+ ...(typeof kept.family === 'string' ? { family: kept.family } : {}),
26
+ };
27
+ }
28
+ catch {
29
+ return NOTHING_KEPT;
30
+ }
31
+ }
32
+ /** Keeps `kept`, or forgets it when it is the map as it first opens. Storage that is full or blocked keeps nothing. */
33
+ export function writeKeptMap(project, kept) {
34
+ const { tokens, detail, expanded, family } = kept;
35
+ const untouched = Object.keys(tokens).length === 0 &&
36
+ Object.keys(detail).length === 0 &&
37
+ !expanded &&
38
+ family === undefined;
39
+ try {
40
+ if (untouched)
41
+ session()?.removeItem(keptKey(project));
42
+ else
43
+ session()?.setItem(keptKey(project), JSON.stringify(kept));
44
+ }
45
+ catch {
46
+ // Nothing to do: it lasts until the page goes.
47
+ }
48
+ }
@@ -0,0 +1,22 @@
1
+ import { type StudioDraft } from '../../mod.ts';
2
+ import type { ReadStep } from '../../read-steps.ts';
3
+ import type { StudioOpened } from '../studio-host.ts';
4
+ import { type ProjectSession } from './studio-project.ts';
5
+ /**
6
+ * What the studio opens on in this tab. Draft keys are random, so this runs in the browser. The
7
+ * tab's kept workspace comes back unless a `seed` asks for another; then it waits behind Undo.
8
+ */
9
+ export declare function openStudio(seed?: {
10
+ draft: StudioDraft;
11
+ question: string | undefined;
12
+ }): StudioOpened;
13
+ /**
14
+ * What the studio opens on when a local server holds a project: the project's workspace, with the
15
+ * edits this tab kept for it. The studio merges into them what the files changed since; edits
16
+ * that stand on no reading of the files wait behind an offer until the builder answers it.
17
+ * Closing the tab forgets them. `said` hears each step of the server's read of the project's
18
+ * files. Throws when no server answers.
19
+ */
20
+ export declare function openStudioProject(said?: (step: ReadStep) => void): Promise<StudioOpened & {
21
+ project: ProjectSession;
22
+ }>;
@@ -0,0 +1,54 @@
1
+ import { clearStaleStudioRuns, createExampleDraft, workspaceFromDraft, } from "../../mod.js";
2
+ import { openProject } from "./studio-project.js";
3
+ import { editsAside, restoreProject, restoreStudio } from "./studio-restore.js";
4
+ import { projectKey } from "./studio-session.js";
5
+ /**
6
+ * What the studio opens on in this tab. Draft keys are random, so this runs in the browser. The
7
+ * tab's kept workspace comes back unless a `seed` asks for another; then it waits behind Undo.
8
+ */
9
+ export function openStudio(seed) {
10
+ clearStaleStudioRuns();
11
+ const kept = restoreStudio();
12
+ const fresh = (draft) => ({
13
+ workspace: workspaceFromDraft(draft),
14
+ revision: kept.kind === 'restored' ? kept.value.revision + 1 : 0,
15
+ });
16
+ if (seed) {
17
+ return {
18
+ start: fresh(seed.draft),
19
+ question: seed.question,
20
+ displaced: kept.kind === 'restored' ? kept.value.workspace : undefined,
21
+ discarded: kept.kind === 'discarded',
22
+ };
23
+ }
24
+ if (kept.kind === 'restored')
25
+ return { start: kept.value, question: undefined, displaced: undefined, discarded: false };
26
+ return {
27
+ start: fresh(createExampleDraft()),
28
+ question: undefined,
29
+ displaced: undefined,
30
+ discarded: kept.kind === 'discarded',
31
+ };
32
+ }
33
+ /**
34
+ * What the studio opens on when a local server holds a project: the project's workspace, with the
35
+ * edits this tab kept for it. The studio merges into them what the files changed since; edits
36
+ * that stand on no reading of the files wait behind an offer until the builder answers it.
37
+ * Closing the tab forgets them. `said` hears each step of the server's read of the project's
38
+ * files. Throws when no server answers.
39
+ */
40
+ export async function openStudioProject(said) {
41
+ const { project, workspace } = await openProject(said);
42
+ const key = projectKey(project.name);
43
+ const kept = restoreProject(key, workspace, project.print);
44
+ return {
45
+ start: kept.kind === 'restored'
46
+ ? kept.value
47
+ : { workspace, revision: 0, project: { key, files: project.print } },
48
+ question: undefined,
49
+ // Edits set aside before a reload are still the builder's to answer for.
50
+ displaced: kept.kind === 'moved' ? kept.workspace : editsAside(key, workspace),
51
+ discarded: kept.kind === 'discarded',
52
+ project,
53
+ };
54
+ }
@@ -0,0 +1,33 @@
1
+ /**
2
+ * What the studio's page sends an agent: a value for each of its slots and its context
3
+ * package. Kept in this tab beside the conversation, never in the profile.
4
+ */
5
+ import { type StudioRunPayload } from '../../mod.ts';
6
+ /** What the builder set: the value picked for each slot, and the context as typed. */
7
+ export interface PageValues {
8
+ slots: Record<string, string>;
9
+ contextJson: string;
10
+ }
11
+ /** What the agent takes from a page. */
12
+ export interface PageInputs {
13
+ slots: Record<string, readonly string[]>;
14
+ takesContext: boolean;
15
+ /** The tools the page answers. Only a call asks the page. */
16
+ pageTools: string[];
17
+ }
18
+ /** The context a blank preview box suggests. */
19
+ export declare const CONTEXT_PLACEHOLDER = "{\n \"page\": \"Checkout\"\n}";
20
+ /** The slots a draft's JSON declares so far: each name with a list of text. Anything else is left out. */
21
+ export declare function draftSlots(slotsJson: string): Record<string, readonly string[]>;
22
+ /** Why typed context is not sent, when it is not JSON. */
23
+ export declare function contextErrorOf(contextJson: string): string | undefined;
24
+ /** What the compiled agent takes from a page, or null when it takes nothing. */
25
+ export declare function pageInputsOf(payload: StudioRunPayload): PageInputs | null;
26
+ /** What goes with a turn or a call. Context that is not JSON is not sent, and says why. */
27
+ export declare function sentPageValues(inputs: PageInputs | null, values: PageValues): {
28
+ slots?: Record<string, string>;
29
+ context?: unknown;
30
+ contextError?: string;
31
+ };
32
+ /** What the studio's page sends `agentKey`, kept in this tab; the editor sets it and the preview sends it. */
33
+ export declare function usePageValues(agentKey: string): [PageValues, (next: PageValues) => void];
@@ -0,0 +1,121 @@
1
+ /**
2
+ * What the studio's page sends an agent: a value for each of its slots and its context
3
+ * package. Kept in this tab beside the conversation, never in the profile.
4
+ */
5
+ import { useCallback, useSyncExternalStore } from 'react';
6
+ import { studioPageTools } from "../../mod.js";
7
+ import { isRecord, session } from "./studio-session.js";
8
+ const PAGE_PREFIX = 'theorem.studio.v2.page:';
9
+ const NO_PAGE_VALUES = { slots: {}, contextJson: '' };
10
+ /** The context a blank preview box suggests. */
11
+ export const CONTEXT_PLACEHOLDER = `{
12
+ "page": "Checkout"
13
+ }`;
14
+ /** The slots a draft's JSON declares so far: each name with a list of text. Anything else is left out. */
15
+ export function draftSlots(slotsJson) {
16
+ try {
17
+ const typed = JSON.parse(slotsJson.trim() || '{}');
18
+ if (!isRecord(typed))
19
+ return {};
20
+ return Object.fromEntries(Object.entries(typed).filter((entry) => Array.isArray(entry[1]) &&
21
+ entry[1].length > 0 &&
22
+ entry[1].every((value) => typeof value === 'string')));
23
+ }
24
+ catch {
25
+ return {};
26
+ }
27
+ }
28
+ /** Why typed context is not sent, when it is not JSON. */
29
+ export function contextErrorOf(contextJson) {
30
+ const typed = contextJson.trim();
31
+ if (!typed)
32
+ return undefined;
33
+ try {
34
+ JSON.parse(typed);
35
+ return undefined;
36
+ }
37
+ catch {
38
+ return 'Context must be JSON.';
39
+ }
40
+ }
41
+ /** What the compiled agent takes from a page, or null when it takes nothing. */
42
+ export function pageInputsOf(payload) {
43
+ const { profile } = payload;
44
+ if (profile.type === 'decision' || profile.type === 'host' || profile.type === 'embedding')
45
+ return null;
46
+ const inputs = 'inputs' in profile ? profile.inputs : undefined;
47
+ const slots = inputs?.slots ?? {};
48
+ const takesContext = inputs?.context?.from.includes('client') ?? false;
49
+ const pageTools = Object.keys(studioPageTools(payload));
50
+ if (!Object.keys(slots).length && !takesContext && !pageTools.length)
51
+ return null;
52
+ return { slots, takesContext, pageTools };
53
+ }
54
+ /** The value a slot sends: the one picked while the profile still lists it, else its first. */
55
+ function slotValue(inputs, values, name) {
56
+ const allowed = inputs.slots[name] ?? [];
57
+ const picked = allowed.find((value) => value === values.slots[name]);
58
+ return picked ?? allowed.at(0) ?? '';
59
+ }
60
+ /** What goes with a turn or a call. Context that is not JSON is not sent, and says why. */
61
+ export function sentPageValues(inputs, values) {
62
+ if (!inputs)
63
+ return {};
64
+ const names = Object.keys(inputs.slots);
65
+ const slots = names.length
66
+ ? Object.fromEntries(names.map((name) => [name, slotValue(inputs, values, name)]))
67
+ : undefined;
68
+ const typed = inputs.takesContext ? values.contextJson.trim() : '';
69
+ if (!typed)
70
+ return { slots };
71
+ const contextError = contextErrorOf(typed);
72
+ return contextError ? { slots, contextError } : { slots, context: JSON.parse(typed) };
73
+ }
74
+ function loadPageValues(agentKey) {
75
+ try {
76
+ const kept = JSON.parse(session()?.getItem(`${PAGE_PREFIX}${agentKey}`) ?? 'null');
77
+ if (!isRecord(kept) || !isRecord(kept.slots) || typeof kept.contextJson !== 'string') {
78
+ return NO_PAGE_VALUES;
79
+ }
80
+ const slots = Object.fromEntries(Object.entries(kept.slots).filter((entry) => typeof entry[1] === 'string'));
81
+ return { slots, contextJson: kept.contextJson };
82
+ }
83
+ catch {
84
+ return NO_PAGE_VALUES;
85
+ }
86
+ }
87
+ /** Never throws: a full or blocked store keeps nothing. */
88
+ function savePageValues(agentKey, values) {
89
+ try {
90
+ session()?.setItem(`${PAGE_PREFIX}${agentKey}`, JSON.stringify(values));
91
+ }
92
+ catch {
93
+ // Nothing is kept.
94
+ }
95
+ }
96
+ /** Each agent's values as last read or set, so the editor and the preview show the same ones. */
97
+ const held = new Map();
98
+ const listeners = new Set();
99
+ function heldValues(agentKey) {
100
+ let values = held.get(agentKey);
101
+ if (!values) {
102
+ values = loadPageValues(agentKey);
103
+ held.set(agentKey, values);
104
+ }
105
+ return values;
106
+ }
107
+ function listen(listener) {
108
+ listeners.add(listener);
109
+ return () => listeners.delete(listener);
110
+ }
111
+ /** What the studio's page sends `agentKey`, kept in this tab; the editor sets it and the preview sends it. */
112
+ export function usePageValues(agentKey) {
113
+ const values = useSyncExternalStore(listen, () => heldValues(agentKey), () => NO_PAGE_VALUES);
114
+ const set = useCallback((next) => {
115
+ held.set(agentKey, next);
116
+ savePageValues(agentKey, next);
117
+ for (const listener of listeners)
118
+ listener();
119
+ }, [agentKey]);
120
+ return [values, set];
121
+ }
@@ -0,0 +1,26 @@
1
+ export interface StudioPrefs {
2
+ /** The editor files open in, by its command. Empty leaves it to the studio command. */
3
+ editor: string;
4
+ /** Whether the studio takes in what the builder's editor saves, as it saves. */
5
+ watch: 'on' | 'off';
6
+ /** Whether a toast says so when the files changed a setting. */
7
+ filesToast: 'on' | 'off';
8
+ /** Whether changing a value several agents share is asked about first. */
9
+ askShared: 'always' | 'never';
10
+ /** Which tools that write ask before a run: all of them, or only the destructive ones. */
11
+ askWrites: 'always' | 'destructive';
12
+ }
13
+ export type StudioPref = keyof StudioPrefs;
14
+ export declare const PREF_DEFAULTS: StudioPrefs;
15
+ /** Where preferences are kept: the part of `Storage` they use. */
16
+ export type PrefStorage = Pick<Storage, 'getItem' | 'setItem' | 'removeItem'>;
17
+ /** A preference as `storage` keeps it, or its default. */
18
+ export declare function readPref<K extends StudioPref>(storage: PrefStorage | null, name: K): StudioPrefs[K];
19
+ /** Keeps a preference. The default is kept as nothing, so a later default reaches the builder. */
20
+ export declare function writePref<K extends StudioPref>(storage: PrefStorage | null, name: K, value: StudioPrefs[K]): void;
21
+ export declare function getPref<K extends StudioPref>(name: K): StudioPrefs[K];
22
+ export declare function setPref<K extends StudioPref>(name: K, value: StudioPrefs[K]): void;
23
+ /** A preference, and the screen drawn again when it changes. */
24
+ export declare function usePref<K extends StudioPref>(name: K): StudioPrefs[K];
25
+ /** Whether a run of a tool that writes asks first: a destructive one always, another unless the builder said not to. */
26
+ export declare function writeAsks(access: string): boolean;
@@ -0,0 +1,87 @@
1
+ /**
2
+ * What the builder chose about how the studio behaves, kept in this browser and nowhere else:
3
+ * nothing is written to the project or sent to a server. A choice the builder never made, or one
4
+ * this version does not know, reads as the studio's own default.
5
+ */
6
+ import { useSyncExternalStore } from 'react';
7
+ import { isEditorChoice } from "../../editors.js";
8
+ export const PREF_DEFAULTS = {
9
+ editor: '',
10
+ watch: 'on',
11
+ filesToast: 'on',
12
+ askShared: 'always',
13
+ askWrites: 'always',
14
+ };
15
+ const PREF_KEYS = {
16
+ editor: 'theorem.studio.editor',
17
+ watch: 'theorem.studio.watch',
18
+ filesToast: 'theorem.studio.files-toast',
19
+ askShared: 'theorem.studio.ask-shared',
20
+ askWrites: 'theorem.studio.ask-writes',
21
+ };
22
+ /** Whether a kept text is a value the preference takes. */
23
+ const PREF_TAKES = {
24
+ editor: isEditorChoice,
25
+ watch: (kept) => kept === 'off',
26
+ filesToast: (kept) => kept === 'off',
27
+ askShared: (kept) => kept === 'never',
28
+ askWrites: (kept) => kept === 'destructive',
29
+ };
30
+ /** A preference as `storage` keeps it, or its default. */
31
+ export function readPref(storage, name) {
32
+ try {
33
+ const kept = storage?.getItem(PREF_KEYS[name]);
34
+ if (typeof kept === 'string' && PREF_TAKES[name](kept))
35
+ return kept;
36
+ }
37
+ catch {
38
+ // A browser that keeps nothing has the defaults.
39
+ }
40
+ return PREF_DEFAULTS[name];
41
+ }
42
+ /** Keeps a preference. The default is kept as nothing, so a later default reaches the builder. */
43
+ export function writePref(storage, name, value) {
44
+ try {
45
+ if (value === PREF_DEFAULTS[name] || !PREF_TAKES[name](value))
46
+ storage?.removeItem(PREF_KEYS[name]);
47
+ else
48
+ storage?.setItem(PREF_KEYS[name], value);
49
+ }
50
+ catch {
51
+ // A browser that keeps nothing holds the choice until the page is closed.
52
+ }
53
+ }
54
+ function local() {
55
+ try {
56
+ return typeof localStorage === 'undefined' ? null : localStorage;
57
+ }
58
+ catch {
59
+ return null;
60
+ }
61
+ }
62
+ const listeners = new Set();
63
+ export function getPref(name) {
64
+ return readPref(local(), name);
65
+ }
66
+ export function setPref(name, value) {
67
+ writePref(local(), name, value);
68
+ for (const listener of listeners)
69
+ listener();
70
+ }
71
+ /** Hears a preference change, from this tab or another one of this browser. */
72
+ function subscribePrefs(listener) {
73
+ listeners.add(listener);
74
+ globalThis.addEventListener?.('storage', listener);
75
+ return () => {
76
+ listeners.delete(listener);
77
+ globalThis.removeEventListener?.('storage', listener);
78
+ };
79
+ }
80
+ /** A preference, and the screen drawn again when it changes. */
81
+ export function usePref(name) {
82
+ return useSyncExternalStore(subscribePrefs, () => getPref(name), () => PREF_DEFAULTS[name]);
83
+ }
84
+ /** Whether a run of a tool that writes asks first: a destructive one always, another unless the builder said not to. */
85
+ export function writeAsks(access) {
86
+ return access === 'destructive' || getPref('askWrites') === 'always';
87
+ }
@@ -0,0 +1,106 @@
1
+ /**
2
+ * A project open in the studio. A local server (`studio/server/serve.ts` in the package) hands
3
+ * the page the project's registered profiles and tools as a workspace, and runs each profile's
4
+ * own code.
5
+ */
6
+ import { type ProjectCode, type StudioAsks, type StudioWorkspace } from '../../mod.ts';
7
+ import type { StudioPeopleOffer } from '../../people.ts';
8
+ import { type ReadStep } from '../../read-steps.ts';
9
+ import type { EditedAnswer, OpenAnswer, OpenRequest, ProjectOrigins, ProviderPlace, SaveDone, SaveRefusal, SaveReview, SharedSetting, Unregistered } from '../../server/save-wire.ts';
10
+ export interface ProjectSession {
11
+ endpoint: string;
12
+ /** The project's name. */
13
+ name: string;
14
+ /** The ids of the profiles the files held when the page opened them. */
15
+ profiles: string[];
16
+ /** The ids of the providers the files held when the page opened them. */
17
+ providers: string[];
18
+ /** The profiles the page could not show or run, and why. */
19
+ problems: {
20
+ profile: string;
21
+ message: string;
22
+ }[];
23
+ /** The models that cannot run as the files set them, and why. Their agents still run. */
24
+ modelProblems: {
25
+ profile: string;
26
+ model: string;
27
+ message: string;
28
+ }[];
29
+ /** The settings the studio holds differently from the files, by profile and provider. None is the rule. */
30
+ differences: {
31
+ kind: 'profile' | 'provider';
32
+ of: string;
33
+ settings: string[];
34
+ }[];
35
+ /** What the files hold that the studio cannot, which stops it comparing any profile. */
36
+ unheld: string[];
37
+ /** The settings several profiles share, as the project's files set them. */
38
+ shared: SharedSetting[];
39
+ /** The profiles and tools the files define that the project did not register. */
40
+ unregistered: Unregistered[];
41
+ /** The settings the project's files set in code, by profile id, tool name, and provider id. */
42
+ origins: ProjectOrigins;
43
+ /** Where the files define each provider the project registered. */
44
+ providerPlaces: ProviderPlace[];
45
+ /** The tools that write: the ones the studio makes ask, and the ones it cannot. */
46
+ asks: StudioAsks;
47
+ /** The files as the server read them, as a short text that changes when they do. */
48
+ print: string;
49
+ /** What the project printed when its files stopped loading; the page shows the last load that did. */
50
+ unloaded?: string;
51
+ /** The editor the studio command opens files in when the builder chose none, by its command. */
52
+ editor?: string;
53
+ /** The setup file the studio command was started on, from the folder it ran in. */
54
+ setup?: string;
55
+ /** The places and people the setup file offers a run to act as; none when it offers none. */
56
+ people: StudioPeopleOffer | undefined;
57
+ /** Why the people the setup file exports cannot be offered. */
58
+ peopleProblem: string | undefined;
59
+ }
60
+ /**
61
+ * What the project's files hold that exported code names and does not write again. A provider the
62
+ * builder changed is left out, so the code writes it as the studio holds it.
63
+ */
64
+ export declare function projectCode(project: ProjectSession | null, workspace: StudioWorkspace): ProjectCode | undefined;
65
+ export declare const NO_ASKS: StudioAsks;
66
+ /** Set while the page has a project open; `null` on the website's own page. */
67
+ export declare const ProjectContext: import("react").Context<ProjectSession | null>;
68
+ export declare function useProject(): ProjectSession | null;
69
+ /** The session for a project already open: the run page names it in its address. */
70
+ export declare function projectSession(name: string): ProjectSession;
71
+ /** Where the local server runs the profile with this id. */
72
+ export declare function projectProfileEndpoint(project: ProjectSession, profileId: string): string;
73
+ /** What Save would write for this workspace: each change, and the lines of each file. Writes nothing. */
74
+ export declare function reviewSave(project: ProjectSession, workspace: StudioWorkspace): Promise<SaveReview | SaveRefusal>;
75
+ /** Writes the changes of a review the builder read. The server checks the project and reloads it. */
76
+ export declare function writeSave(project: ProjectSession, workspace: StudioWorkspace, stamp: string): Promise<SaveDone | SaveRefusal>;
77
+ /** Puts the files of the last Save back. */
78
+ export declare function undoSave(project: ProjectSession): Promise<SaveDone | SaveRefusal>;
79
+ /**
80
+ * Starts the load that runs this workspace's edits over the project's files, when it is not the
81
+ * one running. Writes nothing.
82
+ */
83
+ export declare function openEdited(project: ProjectSession, workspace: StudioWorkspace): Promise<EditedAnswer>;
84
+ /** Where the local server runs the profile with this id as the builder's edits make it. */
85
+ export declare function editedProfileEndpoint(project: ProjectSession, profileId: string): string;
86
+ /** Shows a line of one of the project's files in the editor the builder chose, or the studio command's. */
87
+ export declare function openInEditor(project: ProjectSession, place: OpenRequest): Promise<OpenAnswer>;
88
+ /** What a project's files say, which a Save or an edit in the builder's editor changes. */
89
+ export type ProjectFiles = Pick<ProjectSession, 'profiles' | 'providers' | 'problems' | 'modelProblems' | 'differences' | 'unheld' | 'origins' | 'providerPlaces' | 'asks' | 'print' | 'unloaded' | 'people' | 'peopleProblem'>;
90
+ /**
91
+ * What the project's files say now that the page does not hold as edits: the profiles they hold
92
+ * and the ones the studio cannot run, the settings they set in code, whose lines a Save moves,
93
+ * and the tools the studio makes ask. With them, the workspace the files open as.
94
+ */
95
+ export declare function readFiles(): Promise<{
96
+ files: ProjectFiles;
97
+ workspace: StudioWorkspace;
98
+ }>;
99
+ /**
100
+ * The project the local server has open. `said` hears each step of the server's read of the
101
+ * files. Throws when no server answers.
102
+ */
103
+ export declare function openProject(said?: (step: ReadStep) => void): Promise<{
104
+ project: ProjectSession;
105
+ workspace: StudioWorkspace;
106
+ }>;