@engenty/wizards-runtime 0.0.0-stage → 0.7.6

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 (523) hide show
  1. package/LICENSE +110 -0
  2. package/README.md +214 -2
  3. package/apps/runtime/dist/agents/architect.js +444 -0
  4. package/apps/runtime/dist/agents/studio-assistant.js +883 -0
  5. package/apps/runtime/dist/agents/subscription.js +207 -0
  6. package/apps/runtime/dist/agents/thought.js +21 -0
  7. package/apps/runtime/dist/agents/website.js +480 -0
  8. package/apps/runtime/dist/app.js +359 -0
  9. package/apps/runtime/dist/apple/wizards-apple +0 -0
  10. package/apps/runtime/dist/assistant/browser.js +26 -0
  11. package/apps/runtime/dist/assistant/docs.js +158 -0
  12. package/apps/runtime/dist/assistant/knows.js +353 -0
  13. package/apps/runtime/dist/assistant/primer.js +26 -0
  14. package/apps/runtime/dist/assistant/runs.js +24 -0
  15. package/apps/runtime/dist/auth/account.js +175 -0
  16. package/apps/runtime/dist/auth/device.js +112 -0
  17. package/apps/runtime/dist/auth/index.js +358 -0
  18. package/apps/runtime/dist/auth/keys.js +55 -0
  19. package/apps/runtime/dist/auth/local-ticket.js +26 -0
  20. package/apps/runtime/dist/authoring/example.js +74 -0
  21. package/apps/runtime/dist/authoring/guide.js +433 -0
  22. package/apps/runtime/dist/authoring/ops.js +117 -0
  23. package/apps/runtime/dist/browser/fast/action-space.js +160 -0
  24. package/apps/runtime/dist/browser/fast/classifier.js +91 -0
  25. package/apps/runtime/dist/browser/fast/decide.js +171 -0
  26. package/apps/runtime/dist/browser/fast/driver.js +141 -0
  27. package/apps/runtime/dist/browser/fast/instructions.js +33 -0
  28. package/apps/runtime/dist/browser/fast/run.js +249 -0
  29. package/apps/runtime/dist/browser/fast/span-picker.js +153 -0
  30. package/apps/runtime/dist/browser/fast/text-helper.js +178 -0
  31. package/apps/runtime/dist/browser/snapshot.js +335 -0
  32. package/apps/runtime/dist/cli/account.js +385 -0
  33. package/apps/runtime/dist/cli/autostart.js +182 -0
  34. package/apps/runtime/dist/cli/autoupdate.js +221 -0
  35. package/apps/runtime/dist/cli/clients.js +44 -0
  36. package/apps/runtime/dist/cli/connect.js +540 -0
  37. package/apps/runtime/dist/cli/environment.js +95 -0
  38. package/apps/runtime/dist/cli/exec.js +45 -0
  39. package/apps/runtime/dist/cli/features.js +50 -0
  40. package/apps/runtime/dist/cli/home.js +88 -0
  41. package/apps/runtime/dist/cli/install-env.js +33 -0
  42. package/apps/runtime/dist/cli/machine.js +107 -0
  43. package/apps/runtime/dist/cli/main.js +231 -0
  44. package/apps/runtime/dist/cli/mcp.js +136 -0
  45. package/apps/runtime/dist/cli/menu.js +202 -0
  46. package/apps/runtime/dist/cli/processes.js +72 -0
  47. package/apps/runtime/dist/cli/report.js +66 -0
  48. package/apps/runtime/dist/cli/sandbox.js +77 -0
  49. package/apps/runtime/dist/cli/setup.js +335 -0
  50. package/apps/runtime/dist/cli/start.js +276 -0
  51. package/apps/runtime/dist/cli/status.js +212 -0
  52. package/apps/runtime/dist/cli/ui.js +59 -0
  53. package/apps/runtime/dist/cli/uninstall-main.js +20 -0
  54. package/apps/runtime/dist/cli/uninstall.js +231 -0
  55. package/apps/runtime/dist/cli/update.js +86 -0
  56. package/apps/runtime/dist/cli/validate.js +75 -0
  57. package/apps/runtime/dist/cli/versions.js +123 -0
  58. package/apps/runtime/dist/connectors/builtin.js +86 -0
  59. package/apps/runtime/dist/connectors/external.js +409 -0
  60. package/apps/runtime/dist/connectors/gmail.js +107 -0
  61. package/apps/runtime/dist/connectors/imap.js +261 -0
  62. package/apps/runtime/dist/connectors/index.js +325 -0
  63. package/apps/runtime/dist/connectors/mail.js +72 -0
  64. package/apps/runtime/dist/connectors/outlook.js +90 -0
  65. package/apps/runtime/dist/connectors/plugin-connections.js +343 -0
  66. package/apps/runtime/dist/connectors/via-account.js +65 -0
  67. package/apps/runtime/dist/credits/credits.js +100 -0
  68. package/apps/runtime/dist/credits/estimate.js +152 -0
  69. package/apps/runtime/dist/db/adopt.js +149 -0
  70. package/apps/runtime/dist/db/client.js +173 -0
  71. package/apps/runtime/dist/db/control-schema.js +133 -0
  72. package/apps/runtime/dist/db/migrations/control/0000_last_absorbing_man.sql +47 -0
  73. package/apps/runtime/dist/db/migrations/control/0001_gorgeous_nicolaos.sql +41 -0
  74. package/apps/runtime/dist/db/migrations/control/0002_secret_penance.sql +1 -0
  75. package/apps/runtime/dist/db/migrations/control/0003_nasty_mordo.sql +3 -0
  76. package/apps/runtime/dist/db/migrations/control/0004_breezy_eddie_brock.sql +6 -0
  77. package/apps/runtime/dist/db/migrations/control/0005_chilly_oracle.sql +1 -0
  78. package/apps/runtime/dist/db/migrations/control/0006_sleepy_mojo.sql +1 -0
  79. package/apps/runtime/dist/db/migrations/control/0007_common_the_hand.sql +15 -0
  80. package/apps/runtime/dist/db/migrations/control/0008_runner.sql +8 -0
  81. package/apps/runtime/dist/db/migrations/control/0009_plugin_claim.sql +9 -0
  82. package/apps/runtime/dist/db/migrations/control/0010_tan_snowbird.sql +6 -0
  83. package/apps/runtime/dist/db/migrations/control/meta/0000_snapshot.json +311 -0
  84. package/apps/runtime/dist/db/migrations/control/meta/0001_snapshot.json +599 -0
  85. package/apps/runtime/dist/db/migrations/control/meta/0002_snapshot.json +607 -0
  86. package/apps/runtime/dist/db/migrations/control/meta/0003_snapshot.json +311 -0
  87. package/apps/runtime/dist/db/migrations/control/meta/0004_snapshot.json +350 -0
  88. package/apps/runtime/dist/db/migrations/control/meta/0005_snapshot.json +358 -0
  89. package/apps/runtime/dist/db/migrations/control/meta/0006_snapshot.json +365 -0
  90. package/apps/runtime/dist/db/migrations/control/meta/0007_snapshot.json +460 -0
  91. package/apps/runtime/dist/db/migrations/control/meta/0008_snapshot.json +505 -0
  92. package/apps/runtime/dist/db/migrations/control/meta/0009_snapshot.json +561 -0
  93. package/apps/runtime/dist/db/migrations/control/meta/0010_snapshot.json +600 -0
  94. package/apps/runtime/dist/db/migrations/control/meta/_journal.json +83 -0
  95. package/apps/runtime/dist/db/migrations/tenant/0000_eminent_freak.sql +188 -0
  96. package/apps/runtime/dist/db/migrations/tenant/0001_salty_master_chief.sql +1 -0
  97. package/apps/runtime/dist/db/migrations/tenant/0002_cloudy_firebird.sql +1 -0
  98. package/apps/runtime/dist/db/migrations/tenant/0003_brown_warbound.sql +52 -0
  99. package/apps/runtime/dist/db/migrations/tenant/0004_romantic_nocturne.sql +6 -0
  100. package/apps/runtime/dist/db/migrations/tenant/0005_reflective_forgotten_one.sql +2 -0
  101. package/apps/runtime/dist/db/migrations/tenant/0006_hard_war_machine.sql +30 -0
  102. package/apps/runtime/dist/db/migrations/tenant/0007_space_data.sql +43 -0
  103. package/apps/runtime/dist/db/migrations/tenant/0008_run_event_note.sql +1 -0
  104. package/apps/runtime/dist/db/migrations/tenant/0009_knowledge.sql +104 -0
  105. package/apps/runtime/dist/db/migrations/tenant/0010_plugin_connection.sql +15 -0
  106. package/apps/runtime/dist/db/migrations/tenant/0011_runners.sql +2 -0
  107. package/apps/runtime/dist/db/migrations/tenant/0012_assistant_chat.sql +40 -0
  108. package/apps/runtime/dist/db/migrations/tenant/0013_run_origin.sql +1 -0
  109. package/apps/runtime/dist/db/migrations/tenant/0014_run_answer.sql +2 -0
  110. package/apps/runtime/dist/db/migrations/tenant/0015_device_calls.sql +13 -0
  111. package/apps/runtime/dist/db/migrations/tenant/0016_even_trish_tilby.sql +12 -0
  112. package/apps/runtime/dist/db/migrations/tenant/meta/0000_snapshot.json +1323 -0
  113. package/apps/runtime/dist/db/migrations/tenant/meta/0001_snapshot.json +1330 -0
  114. package/apps/runtime/dist/db/migrations/tenant/meta/0002_snapshot.json +1337 -0
  115. package/apps/runtime/dist/db/migrations/tenant/meta/0003_snapshot.json +1605 -0
  116. package/apps/runtime/dist/db/migrations/tenant/meta/0004_snapshot.json +1645 -0
  117. package/apps/runtime/dist/db/migrations/tenant/meta/0005_snapshot.json +1659 -0
  118. package/apps/runtime/dist/db/migrations/tenant/meta/0006_snapshot.json +1696 -0
  119. package/apps/runtime/dist/db/migrations/tenant/meta/0007_snapshot.json +2012 -0
  120. package/apps/runtime/dist/db/migrations/tenant/meta/0008_snapshot.json +2019 -0
  121. package/apps/runtime/dist/db/migrations/tenant/meta/0009_snapshot.json +2837 -0
  122. package/apps/runtime/dist/db/migrations/tenant/meta/0010_snapshot.json +2942 -0
  123. package/apps/runtime/dist/db/migrations/tenant/meta/0011_snapshot.json +2956 -0
  124. package/apps/runtime/dist/db/migrations/tenant/meta/0012_snapshot.json +3132 -0
  125. package/apps/runtime/dist/db/migrations/tenant/meta/0013_snapshot.json +3139 -0
  126. package/apps/runtime/dist/db/migrations/tenant/meta/0014_snapshot.json +3154 -0
  127. package/apps/runtime/dist/db/migrations/tenant/meta/0015_snapshot.json +3243 -0
  128. package/apps/runtime/dist/db/migrations/tenant/meta/0016_snapshot.json +3326 -0
  129. package/apps/runtime/dist/db/migrations/tenant/meta/_journal.json +125 -0
  130. package/apps/runtime/dist/db/schema.js +602 -0
  131. package/apps/runtime/dist/debug.js +197 -0
  132. package/apps/runtime/dist/docs/dev/index.md +41 -0
  133. package/apps/runtime/dist/docs/dev/meta.json +7 -0
  134. package/apps/runtime/dist/docs/dev/plugins/connections.md +74 -0
  135. package/apps/runtime/dist/docs/dev/plugins/events.md +89 -0
  136. package/apps/runtime/dist/docs/dev/plugins/examples.md +101 -0
  137. package/apps/runtime/dist/docs/dev/plugins/index.md +78 -0
  138. package/apps/runtime/dist/docs/dev/plugins/layout.md +90 -0
  139. package/apps/runtime/dist/docs/dev/plugins/meta.json +28 -0
  140. package/apps/runtime/dist/docs/dev/plugins/quick-start.md +94 -0
  141. package/apps/runtime/dist/docs/dev/plugins/reference.md +348 -0
  142. package/apps/runtime/dist/docs/dev/plugins/reloading.md +76 -0
  143. package/apps/runtime/dist/docs/dev/plugins/routes.md +185 -0
  144. package/apps/runtime/dist/docs/dev/plugins/runners.md +230 -0
  145. package/apps/runtime/dist/docs/dev/plugins/server.md +281 -0
  146. package/apps/runtime/dist/docs/dev/plugins/shipping.md +79 -0
  147. package/apps/runtime/dist/docs/dev/plugins/space.md +297 -0
  148. package/apps/runtime/dist/docs/dev/plugins/starters.md +70 -0
  149. package/apps/runtime/dist/docs/dev/plugins/studio.md +363 -0
  150. package/apps/runtime/dist/docs/dev/plugins/styling.md +129 -0
  151. package/apps/runtime/dist/docs/dev/plugins/tables.md +104 -0
  152. package/apps/runtime/dist/docs/dev/plugins/tools.md +139 -0
  153. package/apps/runtime/dist/docs/dev/wizard-format.md +125 -0
  154. package/apps/runtime/dist/docs/meta.json +3 -0
  155. package/apps/runtime/dist/docs/user/ai-apps.md +112 -0
  156. package/apps/runtime/dist/docs/user/assistant.md +77 -0
  157. package/apps/runtime/dist/docs/user/build-a-wizard.md +116 -0
  158. package/apps/runtime/dist/docs/user/command-line.md +86 -0
  159. package/apps/runtime/dist/docs/user/connectors.md +90 -0
  160. package/apps/runtime/dist/docs/user/create-account.md +52 -0
  161. package/apps/runtime/dist/docs/user/data.md +66 -0
  162. package/apps/runtime/dist/docs/user/first-start.md +60 -0
  163. package/apps/runtime/dist/docs/user/index.md +49 -0
  164. package/apps/runtime/dist/docs/user/install.md +123 -0
  165. package/apps/runtime/dist/docs/user/local-only.md +42 -0
  166. package/apps/runtime/dist/docs/user/meta.json +32 -0
  167. package/apps/runtime/dist/docs/user/models.md +156 -0
  168. package/apps/runtime/dist/docs/user/plugins.md +71 -0
  169. package/apps/runtime/dist/docs/user/run.md +98 -0
  170. package/apps/runtime/dist/docs/user/server.md +52 -0
  171. package/apps/runtime/dist/docs/user/space.md +126 -0
  172. package/apps/runtime/dist/docs/user/steps.md +220 -0
  173. package/apps/runtime/dist/docs/user/test-and-share.md +224 -0
  174. package/apps/runtime/dist/docs/user/troubleshooting.md +67 -0
  175. package/apps/runtime/dist/docs/user/wordpress.md +121 -0
  176. package/apps/runtime/dist/documents/parse.js +246 -0
  177. package/apps/runtime/dist/engenty/connections-external/build-connector.js +193 -0
  178. package/apps/runtime/dist/engenty/connections-external/errors.js +11 -0
  179. package/apps/runtime/dist/engenty/connections-external/import-service.js +270 -0
  180. package/apps/runtime/dist/engenty/connections-external/importer/classify.js +34 -0
  181. package/apps/runtime/dist/engenty/connections-external/importer/map-auth.js +185 -0
  182. package/apps/runtime/dist/engenty/connections-external/importer/normalize-mcp.js +63 -0
  183. package/apps/runtime/dist/engenty/connections-external/importer/normalize-openapi.js +130 -0
  184. package/apps/runtime/dist/engenty/connections-external/invoke/http-invoker.js +143 -0
  185. package/apps/runtime/dist/engenty/connections-external/invoke/mcp-client.js +143 -0
  186. package/apps/runtime/dist/engenty/connections-external/net/guarded-fetch.js +119 -0
  187. package/apps/runtime/dist/engenty/connections-external/oauth-dcr.js +88 -0
  188. package/apps/runtime/dist/engenty/connections-external/registry-client.js +336 -0
  189. package/apps/runtime/dist/engenty/connections-external/registry-source.js +82 -0
  190. package/apps/runtime/dist/engenty/connections-external/types.js +7 -0
  191. package/apps/runtime/dist/engenty/connections-github/connector.js +209 -0
  192. package/apps/runtime/dist/engenty/connections-google/connectors/calendar.js +381 -0
  193. package/apps/runtime/dist/engenty/connections-google/connectors/contacts.js +94 -0
  194. package/apps/runtime/dist/engenty/connections-google/connectors/drive.js +290 -0
  195. package/apps/runtime/dist/engenty/connections-google/connectors/gmail.js +567 -0
  196. package/apps/runtime/dist/engenty/connections-google/definitions.js +11 -0
  197. package/apps/runtime/dist/engenty/connections-google/shared.js +73 -0
  198. package/apps/runtime/dist/engenty/connections-hubspot/connector.js +140 -0
  199. package/apps/runtime/dist/engenty/connections-microsoft/action.js +17 -0
  200. package/apps/runtime/dist/engenty/connections-microsoft/graph.js +114 -0
  201. package/apps/runtime/dist/engenty/connections-microsoft/onedrive.js +286 -0
  202. package/apps/runtime/dist/engenty/connections-microsoft/outlook.js +492 -0
  203. package/apps/runtime/dist/engenty/connections-s3/s3.js +328 -0
  204. package/apps/runtime/dist/engenty/connections-sdk/files-capability.js +86 -0
  205. package/apps/runtime/dist/engenty/connections-sdk/oauth2.js +150 -0
  206. package/apps/runtime/dist/engenty/connections-sdk/registry.js +89 -0
  207. package/apps/runtime/dist/engenty/connections-sdk/storage-capability.js +84 -0
  208. package/apps/runtime/dist/engenty/connections-sdk/types.js +30 -0
  209. package/apps/runtime/dist/engenty/connections-slack/connector.js +360 -0
  210. package/apps/runtime/dist/engenty/csv-import/csv-matrix.js +178 -0
  211. package/apps/runtime/dist/engenty/csv-import/import-sources.js +87 -0
  212. package/apps/runtime/dist/engenty/csv-import/parse-csv.js +129 -0
  213. package/apps/runtime/dist/engenty/csv-import/serialize-csv.js +20 -0
  214. package/apps/runtime/dist/engenty/csv-import/types.js +1 -0
  215. package/apps/runtime/dist/engenty/csv-import/xlsx-workbook.js +159 -0
  216. package/apps/runtime/dist/engenty/doc-converter/interface.js +9 -0
  217. package/apps/runtime/dist/engenty/doc-converter/page-break.js +92 -0
  218. package/apps/runtime/dist/engenty/doc-converter/providers/local/index.js +72 -0
  219. package/apps/runtime/dist/engenty/document-scanner/schemas/classifier.js +30 -0
  220. package/apps/runtime/dist/engenty/document-scanner/schemas/index.js +4 -0
  221. package/apps/runtime/dist/engenty/document-scanner/schemas/invoice.js +73 -0
  222. package/apps/runtime/dist/engenty/document-scanner/schemas/receipt.js +63 -0
  223. package/apps/runtime/dist/engenty/document-scanner/schemas/shared.js +40 -0
  224. package/apps/runtime/dist/engenty/search-index/chunks.js +164 -0
  225. package/apps/runtime/dist/engenty/search-index/contracts.js +9 -0
  226. package/apps/runtime/dist/engenty/shims/connections-sdk.js +39 -0
  227. package/apps/runtime/dist/engenty/shims/plugin-sdk.js +1 -0
  228. package/apps/runtime/dist/engenty/shims/web-ingest.js +19 -0
  229. package/apps/runtime/dist/engenty/web-ingest/ssrf.js +277 -0
  230. package/apps/runtime/dist/engine/asks.js +82 -0
  231. package/apps/runtime/dist/engine/decide.js +82 -0
  232. package/apps/runtime/dist/engine/device.js +194 -0
  233. package/apps/runtime/dist/engine/events.js +128 -0
  234. package/apps/runtime/dist/engine/input.js +208 -0
  235. package/apps/runtime/dist/engine/owner.js +32 -0
  236. package/apps/runtime/dist/engine/prepare.js +90 -0
  237. package/apps/runtime/dist/engine/push.js +58 -0
  238. package/apps/runtime/dist/engine/requirements.js +355 -0
  239. package/apps/runtime/dist/engine/resources.js +198 -0
  240. package/apps/runtime/dist/engine/runner.js +970 -0
  241. package/apps/runtime/dist/engine/steps.js +1000 -0
  242. package/apps/runtime/dist/engine/surface.js +91 -0
  243. package/apps/runtime/dist/engine/template.js +240 -0
  244. package/apps/runtime/dist/engine/types.js +4 -0
  245. package/apps/runtime/dist/env.js +279 -0
  246. package/apps/runtime/dist/features.js +123 -0
  247. package/apps/runtime/dist/files/blobs.js +22 -0
  248. package/apps/runtime/dist/files/objects.js +86 -0
  249. package/apps/runtime/dist/files/storage.js +120 -0
  250. package/apps/runtime/dist/files/web-images.js +101 -0
  251. package/apps/runtime/dist/film/project.js +257 -0
  252. package/apps/runtime/dist/film/skills.js +91 -0
  253. package/apps/runtime/dist/film/sounds.js +122 -0
  254. package/apps/runtime/dist/film/step.js +289 -0
  255. package/apps/runtime/dist/film/tools.js +99 -0
  256. package/apps/runtime/dist/geocode.js +58 -0
  257. package/apps/runtime/dist/harness/antigravity.js +129 -0
  258. package/apps/runtime/dist/harness/apple.js +270 -0
  259. package/apps/runtime/dist/harness/claude.js +147 -0
  260. package/apps/runtime/dist/harness/codex.js +229 -0
  261. package/apps/runtime/dist/harness/cursor.js +93 -0
  262. package/apps/runtime/dist/harness/env.js +124 -0
  263. package/apps/runtime/dist/harness/index.js +95 -0
  264. package/apps/runtime/dist/harness/model.js +279 -0
  265. package/apps/runtime/dist/harness/prompt.js +121 -0
  266. package/apps/runtime/dist/harness/terminal.js +194 -0
  267. package/apps/runtime/dist/harness/types.js +7 -0
  268. package/apps/runtime/dist/index.js +113 -0
  269. package/apps/runtime/dist/limits.js +81 -0
  270. package/apps/runtime/dist/link-preview.js +60 -0
  271. package/apps/runtime/dist/log.js +106 -0
  272. package/apps/runtime/dist/manage.js +249 -0
  273. package/apps/runtime/dist/mcp/auth.js +161 -0
  274. package/apps/runtime/dist/mcp/bridge.js +59 -0
  275. package/apps/runtime/dist/mcp/flow-app.js +97 -0
  276. package/apps/runtime/dist/mcp/handler.js +54 -0
  277. package/apps/runtime/dist/mcp/scopes.js +14 -0
  278. package/apps/runtime/dist/mcp/seen.js +65 -0
  279. package/apps/runtime/dist/mcp/tools.js +572 -0
  280. package/apps/runtime/dist/media/conversation.js +167 -0
  281. package/apps/runtime/dist/media/ffmpeg.js +121 -0
  282. package/apps/runtime/dist/media/generate.js +120 -0
  283. package/apps/runtime/dist/media/marking.js +121 -0
  284. package/apps/runtime/dist/media/transcribe.js +198 -0
  285. package/apps/runtime/dist/model-errors.js +42 -0
  286. package/apps/runtime/dist/models.js +1164 -0
  287. package/apps/runtime/dist/plugin.js +61 -0
  288. package/apps/runtime/dist/plugins/channels.js +78 -0
  289. package/apps/runtime/dist/plugins/claims.js +56 -0
  290. package/apps/runtime/dist/plugins/discovery.js +155 -0
  291. package/apps/runtime/dist/plugins/events.js +63 -0
  292. package/apps/runtime/dist/plugins/jobs.js +64 -0
  293. package/apps/runtime/dist/plugins/loader.js +508 -0
  294. package/apps/runtime/dist/plugins/migrations.js +69 -0
  295. package/apps/runtime/dist/plugins/pro-keys.js +34 -0
  296. package/apps/runtime/dist/plugins/pro-state.js +83 -0
  297. package/apps/runtime/dist/plugins/pro.js +310 -0
  298. package/apps/runtime/dist/plugins/public.js +44 -0
  299. package/apps/runtime/dist/plugins/registry.js +122 -0
  300. package/apps/runtime/dist/plugins/runs.js +210 -0
  301. package/apps/runtime/dist/render/browser-path.js +54 -0
  302. package/apps/runtime/dist/render/chromium.js +98 -0
  303. package/apps/runtime/dist/render/convert.js +158 -0
  304. package/apps/runtime/dist/render/downloads.js +299 -0
  305. package/apps/runtime/dist/render/guard.js +25 -0
  306. package/apps/runtime/dist/render/shaped.js +137 -0
  307. package/apps/runtime/dist/routes/api.js +440 -0
  308. package/apps/runtime/dist/routes/debug.js +42 -0
  309. package/apps/runtime/dist/routes/delivery.js +90 -0
  310. package/apps/runtime/dist/routes/internal.js +81 -0
  311. package/apps/runtime/dist/routes/lang.js +25 -0
  312. package/apps/runtime/dist/routes/marketplace.js +43 -0
  313. package/apps/runtime/dist/routes/plugin-public.js +113 -0
  314. package/apps/runtime/dist/routes/plugins.js +212 -0
  315. package/apps/runtime/dist/routes/runs.js +1422 -0
  316. package/apps/runtime/dist/routes/studio.js +1629 -0
  317. package/apps/runtime/dist/routes/wizard-stream.js +30 -0
  318. package/apps/runtime/dist/running.js +39 -0
  319. package/apps/runtime/dist/sandbox/agentos-package.js +73 -0
  320. package/apps/runtime/dist/sandbox/agentos.js +162 -0
  321. package/apps/runtime/dist/sandbox/docker.js +45 -0
  322. package/apps/runtime/dist/sandbox/index.js +52 -0
  323. package/apps/runtime/dist/sandbox/install.js +122 -0
  324. package/apps/runtime/dist/sandbox/mastra.js +71 -0
  325. package/apps/runtime/dist/sandbox/types.js +1 -0
  326. package/apps/runtime/dist/secrets/crypto.js +28 -0
  327. package/apps/runtime/dist/secrets/signing.js +52 -0
  328. package/apps/runtime/dist/secrets/vault.js +59 -0
  329. package/apps/runtime/dist/services/access.js +88 -0
  330. package/apps/runtime/dist/services/api.js +248 -0
  331. package/apps/runtime/dist/services/architect.js +95 -0
  332. package/apps/runtime/dist/services/assistant-chats.js +311 -0
  333. package/apps/runtime/dist/services/brand.js +85 -0
  334. package/apps/runtime/dist/services/cloud.js +456 -0
  335. package/apps/runtime/dist/services/draft-events.js +27 -0
  336. package/apps/runtime/dist/services/engenty-shapes.js +71 -0
  337. package/apps/runtime/dist/services/errors.js +29 -0
  338. package/apps/runtime/dist/services/files.js +178 -0
  339. package/apps/runtime/dist/services/knowledge-model.js +559 -0
  340. package/apps/runtime/dist/services/knowledge.js +721 -0
  341. package/apps/runtime/dist/services/links.js +16 -0
  342. package/apps/runtime/dist/services/marketplace.js +492 -0
  343. package/apps/runtime/dist/services/onboarding.js +152 -0
  344. package/apps/runtime/dist/services/package-file.js +82 -0
  345. package/apps/runtime/dist/services/package.js +170 -0
  346. package/apps/runtime/dist/services/profile.js +51 -0
  347. package/apps/runtime/dist/services/project-files.js +439 -0
  348. package/apps/runtime/dist/services/project-index.js +707 -0
  349. package/apps/runtime/dist/services/projects.js +387 -0
  350. package/apps/runtime/dist/services/relevance.js +58 -0
  351. package/apps/runtime/dist/services/runners.js +178 -0
  352. package/apps/runtime/dist/services/runs.js +524 -0
  353. package/apps/runtime/dist/services/shares.js +130 -0
  354. package/apps/runtime/dist/services/site.js +270 -0
  355. package/apps/runtime/dist/services/space-categories.js +861 -0
  356. package/apps/runtime/dist/services/space-data.js +792 -0
  357. package/apps/runtime/dist/services/space-origin.js +207 -0
  358. package/apps/runtime/dist/services/spaces.js +657 -0
  359. package/apps/runtime/dist/services/translations.js +306 -0
  360. package/apps/runtime/dist/services/widgets.js +34 -0
  361. package/apps/runtime/dist/services/wizard-icon.js +157 -0
  362. package/apps/runtime/dist/services/wizards.js +420 -0
  363. package/apps/runtime/dist/settings.js +16 -0
  364. package/apps/runtime/dist/store/errors.js +4 -0
  365. package/apps/runtime/dist/store/index.js +299 -0
  366. package/apps/runtime/dist/store/shared-lists.js +123 -0
  367. package/apps/runtime/dist/tenants/control.js +238 -0
  368. package/apps/runtime/dist/tenants/tenant.js +26 -0
  369. package/apps/runtime/dist/texts.js +207 -0
  370. package/apps/runtime/dist/tools/browser.js +703 -0
  371. package/apps/runtime/dist/tools/connector.js +204 -0
  372. package/apps/runtime/dist/tools/index.js +291 -0
  373. package/apps/runtime/dist/tools/mail.js +104 -0
  374. package/apps/runtime/dist/tools/net-guard.js +170 -0
  375. package/apps/runtime/dist/tools/pages.js +81 -0
  376. package/apps/runtime/dist/tools/plugin.js +180 -0
  377. package/apps/runtime/dist/tools/project.js +154 -0
  378. package/apps/runtime/dist/tools/shared.js +69 -0
  379. package/apps/runtime/dist/tools/store.js +238 -0
  380. package/apps/runtime/dist/update.js +113 -0
  381. package/apps/runtime/dist/widgets/bundle.js +99 -0
  382. package/apps/runtime/dist/widgets/render.js +329 -0
  383. package/apps/runtime/dist/widgets/runtime.js +108 -0
  384. package/apps/runtime/dist/widgets/script.js +30 -0
  385. package/apps/runtime/dist/widgets/step.js +223 -0
  386. package/apps/web/dist/ai-labels/ai-black.svg +20 -0
  387. package/apps/web/dist/ai-labels/ai-generated-black.svg +31 -0
  388. package/apps/web/dist/ai-labels/ai-generated-white.svg +32 -0
  389. package/apps/web/dist/ai-labels/ai-modified-black.svg +30 -0
  390. package/apps/web/dist/ai-labels/ai-modified-white.svg +31 -0
  391. package/apps/web/dist/ai-labels/ai-white.svg +21 -0
  392. package/apps/web/dist/assets/AboutDialog-DYgXPagX.js +1 -0
  393. package/apps/web/dist/assets/ChangelogDialog-BXqBW8j3.js +1 -0
  394. package/apps/web/dist/assets/ChatView-CK2--tsE.js +10 -0
  395. package/apps/web/dist/assets/EditorPage-jvcwyXbU.js +3 -0
  396. package/apps/web/dist/assets/FlowPreview-CusP7ci9.js +1 -0
  397. package/apps/web/dist/assets/Harness-BrP-ENHg.css +1 -0
  398. package/apps/web/dist/assets/Harness-CV9uYzbv.js +16 -0
  399. package/apps/web/dist/assets/NewWizardChannels-BakW5q6s.js +1 -0
  400. package/apps/web/dist/assets/NewWizardPage-BoA-LJuW.js +7 -0
  401. package/apps/web/dist/assets/OnboardingPage-DaD1XnOe.js +1 -0
  402. package/apps/web/dist/assets/ProjectPage-BFgk1DEv.js +1 -0
  403. package/apps/web/dist/assets/PublicRunner-C9MwEvxy.js +1 -0
  404. package/apps/web/dist/assets/ReadOnly-DC2Kp7l8.js +1 -0
  405. package/apps/web/dist/assets/RunDrawer-CY6NZSrI.js +4 -0
  406. package/apps/web/dist/assets/RunnerView-BT26XgcY.js +1 -0
  407. package/apps/web/dist/assets/SettingsPage-AFt9IDLt.js +1 -0
  408. package/apps/web/dist/assets/SetupPage-DtFYAbwJ.js +1 -0
  409. package/apps/web/dist/assets/SharePage-t2xwNS61.js +1 -0
  410. package/apps/web/dist/assets/changelog-CATQFxCQ.js +1 -0
  411. package/apps/web/dist/assets/engenty-eXZ-EAwd.js +1 -0
  412. package/apps/web/dist/assets/esm-DXeMu8Lb.js +7 -0
  413. package/apps/web/dist/assets/fluffy-engenty-ClRou7yu.js +456 -0
  414. package/apps/web/dist/assets/index-AfUa8xKD.css +1 -0
  415. package/apps/web/dist/assets/index-Drw7FMTQ.js +14 -0
  416. package/apps/web/dist/assets/jsx-runtime-BNakU3Ej.js +1 -0
  417. package/apps/web/dist/assets/lock-R_CfU0Xo.js +1 -0
  418. package/apps/web/dist/assets/oss-credits-cZ9NUaLZ.js +1 -0
  419. package/apps/web/dist/assets/pdfmake-Cx9scTbD.js +228 -0
  420. package/apps/web/dist/assets/phone-CgrIS4_-.js +1 -0
  421. package/apps/web/dist/assets/preload-helper-CNEI7N0N.js +1 -0
  422. package/apps/web/dist/assets/qr-scanner-worker.min-CJaXo3yu.js +98 -0
  423. package/apps/web/dist/assets/qr-scanner.min-C_UI0gH-.js +1 -0
  424. package/apps/web/dist/assets/rolldown-runtime-hePW80VL.js +1 -0
  425. package/apps/web/dist/assets/settings-menu-2IMOOlLl.js +1 -0
  426. package/apps/web/dist/assets/ui-dzGvc3xk.js +137 -0
  427. package/apps/web/dist/assets/upload-BSuTilFF.js +1 -0
  428. package/apps/web/dist/assets/vfs_fonts-DllDSYt1.js +1 -0
  429. package/apps/web/dist/embed.js +266 -0
  430. package/apps/web/dist/favicon.svg +1 -0
  431. package/apps/web/dist/icons/apple-touch-icon.png +0 -0
  432. package/apps/web/dist/icons/icon-192.png +0 -0
  433. package/apps/web/dist/icons/icon-512.png +0 -0
  434. package/apps/web/dist/icons/icon-maskable-512.png +0 -0
  435. package/apps/web/dist/index.html +48 -0
  436. package/apps/web/dist/install.sh +577 -0
  437. package/apps/web/dist/manifest.webmanifest +21 -0
  438. package/apps/web/dist/mcp/flow.html +980 -0
  439. package/apps/web/dist/sw.js +15 -0
  440. package/bin/wizards.mjs +288 -0
  441. package/modules/README.md +15 -0
  442. package/node_modules/@engenty/wizards/dist/plugin/index.d.ts +1150 -0
  443. package/node_modules/@engenty/wizards/dist/plugin/index.js +4 -0
  444. package/node_modules/@engenty/wizards/dist/plugin/studio.d.ts +322 -0
  445. package/node_modules/@engenty/wizards/dist/plugin/studio.js +4 -0
  446. package/node_modules/@engenty/wizards/dist/plugin/thread.d.ts +174 -0
  447. package/node_modules/@engenty/wizards/dist/plugin/thread.js +821 -0
  448. package/node_modules/@engenty/wizards/package.json +11 -0
  449. package/node_modules/@engenty-wizards/shared/dist/assistant.d.ts +174 -0
  450. package/node_modules/@engenty-wizards/shared/dist/assistant.js +65 -0
  451. package/node_modules/@engenty-wizards/shared/dist/changes.d.ts +22 -0
  452. package/node_modules/@engenty-wizards/shared/dist/changes.js +61 -0
  453. package/node_modules/@engenty-wizards/shared/dist/connectors.d.ts +77 -0
  454. package/node_modules/@engenty-wizards/shared/dist/connectors.js +2 -0
  455. package/node_modules/@engenty-wizards/shared/dist/decision.d.ts +76 -0
  456. package/node_modules/@engenty-wizards/shared/dist/decision.js +147 -0
  457. package/node_modules/@engenty-wizards/shared/dist/definition.d.ts +2922 -0
  458. package/node_modules/@engenty-wizards/shared/dist/definition.js +1920 -0
  459. package/node_modules/@engenty-wizards/shared/dist/engenty/data-tables/columns-format.d.ts +5 -0
  460. package/node_modules/@engenty-wizards/shared/dist/engenty/data-tables/columns-format.js +132 -0
  461. package/node_modules/@engenty-wizards/shared/dist/engenty/data-tables/columns-value.d.ts +11 -0
  462. package/node_modules/@engenty-wizards/shared/dist/engenty/data-tables/columns-value.js +209 -0
  463. package/node_modules/@engenty-wizards/shared/dist/engenty/data-tables/columns.d.ts +532 -0
  464. package/node_modules/@engenty-wizards/shared/dist/engenty/data-tables/columns.js +217 -0
  465. package/node_modules/@engenty-wizards/shared/dist/engenty/data-tables/index.d.ts +3 -0
  466. package/node_modules/@engenty-wizards/shared/dist/engenty/data-tables/index.js +3 -0
  467. package/node_modules/@engenty-wizards/shared/dist/engenty/search-index/catalog-lexical.d.ts +14 -0
  468. package/node_modules/@engenty-wizards/shared/dist/engenty/search-index/catalog-lexical.js +166 -0
  469. package/node_modules/@engenty-wizards/shared/dist/engenty/search-index/catalog-rank.d.ts +33 -0
  470. package/node_modules/@engenty-wizards/shared/dist/engenty/search-index/catalog-rank.js +99 -0
  471. package/node_modules/@engenty-wizards/shared/dist/feature-flags.d.ts +78 -0
  472. package/node_modules/@engenty-wizards/shared/dist/feature-flags.js +70 -0
  473. package/node_modules/@engenty-wizards/shared/dist/features.d.ts +41 -0
  474. package/node_modules/@engenty-wizards/shared/dist/features.js +89 -0
  475. package/node_modules/@engenty-wizards/shared/dist/fit.d.ts +71 -0
  476. package/node_modules/@engenty-wizards/shared/dist/fit.js +382 -0
  477. package/node_modules/@engenty-wizards/shared/dist/json-schema.d.ts +14 -0
  478. package/node_modules/@engenty-wizards/shared/dist/json-schema.js +66 -0
  479. package/node_modules/@engenty-wizards/shared/dist/knowledge.d.ts +199 -0
  480. package/node_modules/@engenty-wizards/shared/dist/knowledge.js +68 -0
  481. package/node_modules/@engenty-wizards/shared/dist/marketplace-entry.d.ts +35 -0
  482. package/node_modules/@engenty-wizards/shared/dist/marketplace-entry.js +107 -0
  483. package/node_modules/@engenty-wizards/shared/dist/marketplace-search.d.ts +20 -0
  484. package/node_modules/@engenty-wizards/shared/dist/marketplace-search.js +136 -0
  485. package/node_modules/@engenty-wizards/shared/dist/marketplace.d.ts +227 -0
  486. package/node_modules/@engenty-wizards/shared/dist/marketplace.js +354 -0
  487. package/node_modules/@engenty-wizards/shared/dist/merge.d.ts +7 -0
  488. package/node_modules/@engenty-wizards/shared/dist/merge.js +40 -0
  489. package/node_modules/@engenty-wizards/shared/dist/numbers.d.ts +24 -0
  490. package/node_modules/@engenty-wizards/shared/dist/numbers.js +54 -0
  491. package/node_modules/@engenty-wizards/shared/dist/projects.d.ts +224 -0
  492. package/node_modules/@engenty-wizards/shared/dist/projects.js +319 -0
  493. package/node_modules/@engenty-wizards/shared/dist/providers.d.ts +101 -0
  494. package/node_modules/@engenty-wizards/shared/dist/providers.js +390 -0
  495. package/node_modules/@engenty-wizards/shared/dist/run.d.ts +680 -0
  496. package/node_modules/@engenty-wizards/shared/dist/run.js +620 -0
  497. package/node_modules/@engenty-wizards/shared/dist/runner-texts.d.ts +546 -0
  498. package/node_modules/@engenty-wizards/shared/dist/runner-texts.js +523 -0
  499. package/node_modules/@engenty-wizards/shared/dist/runners.d.ts +93 -0
  500. package/node_modules/@engenty-wizards/shared/dist/runners.js +146 -0
  501. package/node_modules/@engenty-wizards/shared/dist/shape.d.ts +102 -0
  502. package/node_modules/@engenty-wizards/shared/dist/shape.js +318 -0
  503. package/node_modules/@engenty-wizards/shared/dist/space-data.d.ts +89 -0
  504. package/node_modules/@engenty-wizards/shared/dist/space-data.js +47 -0
  505. package/node_modules/@engenty-wizards/shared/dist/store.d.ts +117 -0
  506. package/node_modules/@engenty-wizards/shared/dist/store.js +81 -0
  507. package/node_modules/@engenty-wizards/shared/dist/surface.d.ts +115 -0
  508. package/node_modules/@engenty-wizards/shared/dist/surface.js +442 -0
  509. package/node_modules/@engenty-wizards/shared/dist/texts.d.ts +45 -0
  510. package/node_modules/@engenty-wizards/shared/dist/texts.js +54 -0
  511. package/node_modules/@engenty-wizards/shared/dist/translation.d.ts +23 -0
  512. package/node_modules/@engenty-wizards/shared/dist/translation.js +154 -0
  513. package/node_modules/@engenty-wizards/shared/dist/wizard-package.d.ts +48 -0
  514. package/node_modules/@engenty-wizards/shared/dist/wizard-package.js +49 -0
  515. package/node_modules/@engenty-wizards/shared/dist/workspace.d.ts +16 -0
  516. package/node_modules/@engenty-wizards/shared/dist/workspace.js +51 -0
  517. package/node_modules/@engenty-wizards/shared/package.json +10 -0
  518. package/package.json +77 -4
  519. package/plugin/.claude-plugin/plugin.json +9 -0
  520. package/plugin/.mcp.json +8 -0
  521. package/plugin/commands/wizard.md +8 -0
  522. package/plugin/skills/build-wizard/SKILL.md +27 -0
  523. package/plugin/skills/use-wizard/SKILL.md +18 -0
@@ -0,0 +1,146 @@
1
+ import { FIELD_KINDS, } from "./definition.js";
2
+ export const OUTPUT_KINDS = [
3
+ "text",
4
+ "data",
5
+ "image",
6
+ "video",
7
+ "voice",
8
+ "document",
9
+ "dashboard",
10
+ "widget",
11
+ "film",
12
+ "surface",
13
+ ];
14
+ export const RUNNER_ID = /^[a-z][a-z0-9-]{0,23}$/;
15
+ /** Sub-paths of a wizard's address that are not runners. */
16
+ export const RESERVED_PATHS = ["runs", "icons", "manifest.webmanifest", "avatar.svg"];
17
+ const EVERYTHING = {
18
+ input: [...FIELD_KINDS],
19
+ output: { shows: [...OUTPUT_KINDS], pictures: [] },
20
+ asks: ["confirm", "login"],
21
+ review: ["accept", "regenerate", "edit"],
22
+ waits: true,
23
+ handoff: ["screen", "push"],
24
+ };
25
+ /** The runners every runtime has: the page draws every field kind, so both run every wizard. */
26
+ export const BUILT_IN_RUNNERS = [
27
+ {
28
+ id: "steps",
29
+ label: { de: "Schritte", en: "Steps" },
30
+ kind: "page",
31
+ capabilities: EVERYTHING,
32
+ builtIn: true,
33
+ },
34
+ {
35
+ id: "chat",
36
+ label: { de: "Chat", en: "Chat" },
37
+ kind: "page",
38
+ capabilities: EVERYTHING,
39
+ builtIn: true,
40
+ },
41
+ // The chat with a live conversation on top: the screen beside it takes what a voice cannot.
42
+ {
43
+ id: "talk",
44
+ label: { de: "Sprachgespräch", en: "Live voice" },
45
+ kind: "page",
46
+ capabilities: EVERYTHING,
47
+ builtIn: true,
48
+ },
49
+ // The call screen: the camera and the conversation on a stage, the chat as the screen beside it.
50
+ {
51
+ id: "video",
52
+ label: { de: "Videoanruf", en: "Video call" },
53
+ kind: "page",
54
+ capabilities: EVERYTHING,
55
+ builtIn: true,
56
+ },
57
+ ];
58
+ /** The built-in runners that hold a live conversation: offered only where a speech model is set up. */
59
+ export const CONVERSATION_RUNNERS = ["talk", "video"];
60
+ /** The runners every wizard offers until the owner says otherwise. */
61
+ export const DEFAULT_ENABLED = ["steps", "chat"];
62
+ export const DEFAULT_RUNNER = "steps";
63
+ export const DEFAULT_RUNNER_SETTINGS = {
64
+ default: DEFAULT_RUNNER,
65
+ enabled: DEFAULT_ENABLED,
66
+ };
67
+ /** What a step hands on, or null when it hands on nothing (a page, a review, the result). */
68
+ export function outputKindOf(step) {
69
+ switch (step.type) {
70
+ case "agent":
71
+ return step.output?.fields?.length || step.output?.schema ? "data" : "text";
72
+ case "generate":
73
+ return step.asset;
74
+ case "widget":
75
+ return step.video ? "film" : "widget";
76
+ case "film":
77
+ return "film";
78
+ case "surface":
79
+ return "surface";
80
+ default:
81
+ return null;
82
+ }
83
+ }
84
+ /** Steps that take minutes: a door that cannot wait must come back for them. */
85
+ function takesMinutes(step) {
86
+ return step.type === "agent" || step.type === "generate" || step.type === "film";
87
+ }
88
+ /**
89
+ * Whether a runner runs a wizard, and where it hands off. Every step counts: since the AI can
90
+ * decide which branch a run takes and which fields a page shows, each step may be reached.
91
+ */
92
+ export function runnerFit(def, runner) {
93
+ const caps = runner.capabilities;
94
+ const gaps = [];
95
+ let blocked = false;
96
+ const canHandOff = caps.handoff.length > 0;
97
+ const byId = new Map(def.steps.map((s) => [s.id, s]));
98
+ const carries = (kind) => kind === null || caps.output.shows.includes(kind) || caps.output.pictures.includes(kind);
99
+ for (const step of def.steps) {
100
+ if (step.type === "page") {
101
+ // A decided field may or may not be shown: it counts as if it were.
102
+ const missing = step.fields.filter((f) => !caps.input.includes(f.kind));
103
+ const login = step.fields.some((f) => f.kind === "connection") && !caps.asks.includes("login");
104
+ if (missing.length || login) {
105
+ const why = missing.map((f) => f.label).join(", ") || "a sign-in";
106
+ gaps.push({ stepId: step.id, title: step.title, why });
107
+ if (!canHandOff) {
108
+ blocked = true;
109
+ }
110
+ }
111
+ }
112
+ else if (step.type === "review") {
113
+ if (!caps.review.includes("accept")) {
114
+ gaps.push({ stepId: step.id, title: step.title, why: "to be looked at" });
115
+ blocked = true;
116
+ continue;
117
+ }
118
+ const unseen = step.show.filter((id) => !carries(outputKindOf(byId.get(id) ?? step)));
119
+ if (unseen.length) {
120
+ gaps.push({
121
+ stepId: step.id,
122
+ title: step.title,
123
+ why: unseen.map((id) => byId.get(id)?.title ?? id).join(", "),
124
+ });
125
+ if (!canHandOff) {
126
+ blocked = true;
127
+ }
128
+ }
129
+ }
130
+ else if (takesMinutes(step) && !caps.waits) {
131
+ gaps.push({ stepId: step.id, title: step.title, why: "takes minutes" });
132
+ blocked = true;
133
+ }
134
+ // A sign-in a running step meets (an ask of kind login) can only be typed in a browser; it
135
+ // is not known in advance, so it hands off when it happens.
136
+ }
137
+ return {
138
+ runner: runner.id,
139
+ outcome: blocked ? "no" : gaps.length ? "handoff" : "full",
140
+ steps: gaps,
141
+ };
142
+ }
143
+ /** The fit of every runner given, in the order given. */
144
+ export function runnersFor(def, runners) {
145
+ return runners.map((r) => runnerFit(def, r));
146
+ }
@@ -0,0 +1,102 @@
1
+ import { z } from "zod";
2
+ /**
3
+ * What an agent step's json output holds, in the kinds wizards already use: `output.schema`.
4
+ * Text, numbers, yes/no, a choice, an entry of another list by its id (`ref`), and lists — of
5
+ * these or of objects (entries) with lists of their own — every one with a label. The runtime builds the model's JSON Schema from
6
+ * it, the admin shows and edits the data by it, downloads and views read it.
7
+ *
8
+ * `output.fields`, the short form, compiles to the same shape (`shapeOfFields`); two kinds exist
9
+ * only there: `score` (a decision's levels) and `table` (rows of text or numbers, columns named
10
+ * or picked by the model).
11
+ */
12
+ /** Objects nest at most this deep, the step's own object counted. */
13
+ export declare const MAX_SHAPE_DEPTH = 4;
14
+ /** At most this many keys in all objects together. */
15
+ export declare const MAX_SHAPE_KEYS = 100;
16
+ interface Named {
17
+ /** What people read: a column's head, a part's title, "add …". Without one, the key. */
18
+ label?: string;
19
+ /** What the model is to put there. */
20
+ description?: string;
21
+ }
22
+ export type TextShape = Named & {
23
+ kind: "text";
24
+ long?: boolean;
25
+ };
26
+ export type NumberShape = Named & {
27
+ kind: "number";
28
+ unit?: string;
29
+ };
30
+ export type YesNoShape = Named & {
31
+ kind: "yesno";
32
+ yes?: string;
33
+ no?: string;
34
+ };
35
+ export type ChoiceShape = Named & {
36
+ kind: "choice";
37
+ options: string[];
38
+ };
39
+ /** An entry of a top-level list of the same output, by its `id`. */
40
+ export type RefShape = Named & {
41
+ kind: "ref";
42
+ to: string;
43
+ };
44
+ export type LeafShape = TextShape | NumberShape | YesNoShape | ChoiceShape | RefShape;
45
+ export type ListShape = Named & {
46
+ kind: "list";
47
+ of: LeafShape | ObjectShape;
48
+ };
49
+ export interface ObjectShape extends Named {
50
+ kind: "object";
51
+ fields: Record<string, FieldShape>;
52
+ }
53
+ /** `fields` only: a decision's levels, lowest first. */
54
+ export type ScoreShape = Named & {
55
+ kind: "score";
56
+ options: string[];
57
+ };
58
+ /** `fields` only: rows of text or numbers; without columns the model picks them. */
59
+ export type TableShape = Named & {
60
+ kind: "table";
61
+ columns?: string[];
62
+ };
63
+ export type FieldShape = LeafShape | ListShape | ScoreShape | TableShape;
64
+ /** `output.schema`: what the step returns. */
65
+ export declare const outputShapeSchema: z.ZodType<ObjectShape, unknown, z.core.$ZodTypeInternals<ObjectShape, unknown>>;
66
+ /** An output field as `output.fields` writes it. */
67
+ interface ShortField {
68
+ id: string;
69
+ kind: string;
70
+ description?: string;
71
+ columns?: string[];
72
+ options?: string[];
73
+ }
74
+ /** The short form as a shape: a field per key, a list of text, a table as it is. */
75
+ export declare function shapeOfFields(fields: ShortField[]): ObjectShape;
76
+ /** The key of an entry's title: its first short text other than its `id`. */
77
+ export declare function titleKey(shape: ObjectShape): string | undefined;
78
+ /** What people read for a key. */
79
+ export declare function labelOf(key: string, shape: FieldShape | ListShape["of"]): string;
80
+ /** The data a shape describes, as Zod: what a model's answer is checked against. */
81
+ export declare function shapeZod(shape: FieldShape | ListShape["of"], k?: string): z.ZodType;
82
+ /**
83
+ * The data as JSON Schema (draft 2020-12): every key required, no other keys — what a model's
84
+ * structured output takes, and what developers read.
85
+ */
86
+ export declare function shapeJsonSchema(shape: ObjectShape, title?: string): Record<string, unknown>;
87
+ /**
88
+ * Data a model wrote itself, fitted to the shape before it is checked: a number where text
89
+ * belongs as text, a number written as text as a number; in a table a cell's list joined and a
90
+ * missing column empty. Lists stay lists everywhere else.
91
+ */
92
+ export declare function fitData(shape: FieldShape | ListShape["of"], value: unknown): unknown;
93
+ /** Tables with free columns come back as columns + rows and are stored as records. */
94
+ export declare function recordsOf(shape: FieldShape | ListShape["of"], value: unknown): unknown;
95
+ /** The shape as lines of paths a model binds to: "/recipes[]/title (text): Titel". */
96
+ export declare function shapeLines(shape: ObjectShape, at?: string): string[];
97
+ /**
98
+ * The shape at a path: keys of objects, an index (digits) into a list. `any` where the data can
99
+ * hold anything (a table's row), undefined where the shape has nothing.
100
+ */
101
+ export declare function shapeAt(shape: FieldShape | ListShape["of"], path: string[]): FieldShape | ListShape["of"] | "any" | undefined;
102
+ export {};
@@ -0,0 +1,318 @@
1
+ // SPDX-License-Identifier: FSL-1.1-MIT OR MIT
2
+ import { z } from "zod";
3
+ /**
4
+ * What an agent step's json output holds, in the kinds wizards already use: `output.schema`.
5
+ * Text, numbers, yes/no, a choice, an entry of another list by its id (`ref`), and lists — of
6
+ * these or of objects (entries) with lists of their own — every one with a label. The runtime builds the model's JSON Schema from
7
+ * it, the admin shows and edits the data by it, downloads and views read it.
8
+ *
9
+ * `output.fields`, the short form, compiles to the same shape (`shapeOfFields`); two kinds exist
10
+ * only there: `score` (a decision's levels) and `table` (rows of text or numbers, columns named
11
+ * or picked by the model).
12
+ */
13
+ /** Objects nest at most this deep, the step's own object counted. */
14
+ export const MAX_SHAPE_DEPTH = 4;
15
+ /** At most this many keys in all objects together. */
16
+ export const MAX_SHAPE_KEYS = 100;
17
+ const key = z
18
+ .string()
19
+ .regex(/^[a-zA-Z][a-zA-Z0-9_]{0,40}$/, "keys are letters, digits and _ and start with a letter");
20
+ const named = {
21
+ label: z.string().min(1).optional(),
22
+ description: z.string().optional(),
23
+ };
24
+ const leaves = [
25
+ z.object({ kind: z.literal("text"), ...named, long: z.boolean().optional() }),
26
+ z.object({ kind: z.literal("number"), ...named, unit: z.string().optional() }),
27
+ z.object({
28
+ kind: z.literal("yesno"),
29
+ ...named,
30
+ yes: z.string().optional(),
31
+ no: z.string().optional(),
32
+ }),
33
+ z.object({
34
+ kind: z.literal("choice"),
35
+ ...named,
36
+ options: z.array(z.string().min(1)).min(2).max(40),
37
+ }),
38
+ z.object({ kind: z.literal("ref"), ...named, to: key }),
39
+ ];
40
+ const LEAF_KINDS = "text, number, yesno, choice, ref";
41
+ /**
42
+ * The shape of an object `depth` deep, built level by level instead of recursively: JSON Schema
43
+ * of the definition takes no $ref, and the depth is part of the schema. Objects are the entries
44
+ * of lists (and the step's own); a field holding one object would only add a level.
45
+ */
46
+ function objectAt(depth) {
47
+ const deeper = depth < MAX_SHAPE_DEPTH ? objectAt(depth + 1) : undefined;
48
+ const of = deeper
49
+ ? z.discriminatedUnion("kind", [...leaves, deeper], {
50
+ error: `A list holds ${LEAF_KINDS} or object.`,
51
+ })
52
+ : z.discriminatedUnion("kind", [...leaves], {
53
+ error: `A list this deep holds ${LEAF_KINDS}: objects nest at most ${MAX_SHAPE_DEPTH} deep.`,
54
+ });
55
+ const list = z.object({ kind: z.literal("list"), ...named, of });
56
+ const field = z.discriminatedUnion("kind", [...leaves, list], {
57
+ error: `"kind" is one of ${LEAF_KINDS}, list.`,
58
+ });
59
+ return z.object({
60
+ kind: z.literal("object"),
61
+ ...named,
62
+ fields: z
63
+ .record(key, field)
64
+ .refine((f) => Object.keys(f).length > 0, { message: "An object has fields." }),
65
+ });
66
+ }
67
+ /** Every object of a shape with where it sits, the shape's own first. */
68
+ function objectsOf(shape, at = []) {
69
+ const out = [{ shape, at }];
70
+ for (const [k, f] of Object.entries(shape.fields)) {
71
+ if (f.kind === "list" && f.of.kind === "object") {
72
+ out.push(...objectsOf(f.of, [...at, "fields", k, "of"]));
73
+ }
74
+ }
75
+ return out;
76
+ }
77
+ /** The list a `ref` points into: a top-level list of objects with an `id`. Null when it is fine. */
78
+ function refProblem(root, to) {
79
+ const target = root.fields[to];
80
+ if (target?.kind !== "list" || target.of.kind !== "object") {
81
+ return `"ref" to "${to}": that is no list of objects at the top of the schema.`;
82
+ }
83
+ return target.of.fields.id?.kind === "text"
84
+ ? null
85
+ : `"ref" to "${to}": its entries need an "id" text field to be pointed at.`;
86
+ }
87
+ /** `output.schema`: what the step returns. */
88
+ export const outputShapeSchema = objectAt(1).superRefine((shape, ctx) => {
89
+ const objects = objectsOf(shape);
90
+ const keys = objects.reduce((n, o) => n + Object.keys(o.shape.fields).length, 0);
91
+ if (keys > MAX_SHAPE_KEYS) {
92
+ ctx.addIssue({
93
+ code: "custom",
94
+ message: `A schema has at most ${MAX_SHAPE_KEYS} keys in all; this one has ${keys}.`,
95
+ });
96
+ }
97
+ for (const o of objects) {
98
+ for (const [k, f] of Object.entries(o.shape.fields)) {
99
+ const ref = f.kind === "ref" ? f : f.kind === "list" && f.of.kind === "ref" ? f.of : null;
100
+ const problem = ref ? refProblem(shape, ref.to) : null;
101
+ if (problem) {
102
+ ctx.addIssue({ code: "custom", message: problem, path: [...o.at, "fields", k] });
103
+ }
104
+ }
105
+ }
106
+ });
107
+ /** The short form as a shape: a field per key, a list of text, a table as it is. */
108
+ export function shapeOfFields(fields) {
109
+ const one = (f) => {
110
+ const d = f.description ? { description: f.description } : {};
111
+ switch (f.kind) {
112
+ case "number":
113
+ return { kind: "number", ...d };
114
+ case "list":
115
+ return { kind: "list", ...d, of: { kind: "text" } };
116
+ case "yesno":
117
+ return { kind: "yesno", ...d };
118
+ case "choice":
119
+ return { kind: "choice", ...d, options: f.options ?? [] };
120
+ case "score":
121
+ return { kind: "score", ...d, options: f.options ?? [] };
122
+ case "table":
123
+ return { kind: "table", ...d, ...(f.columns?.length ? { columns: f.columns } : {}) };
124
+ default:
125
+ return { kind: "text", ...d };
126
+ }
127
+ };
128
+ return { kind: "object", fields: Object.fromEntries(fields.map((f) => [f.id, one(f)])) };
129
+ }
130
+ /** The key of an entry's title: its first short text other than its `id`. */
131
+ export function titleKey(shape) {
132
+ return Object.entries(shape.fields).find(([k, f]) => k !== "id" && f.kind === "text" && !f.long)?.[0];
133
+ }
134
+ /** What people read for a key. */
135
+ export function labelOf(key, shape) {
136
+ return shape.label ?? key;
137
+ }
138
+ /**
139
+ * What the model reads about a value beside its title: its description (without label: its key),
140
+ * its unit, a score's order, where a ref points. Undefined where the title says it all.
141
+ */
142
+ function about(k, s) {
143
+ const base = s.description ?? (s.label ? "" : k);
144
+ const more = s.kind === "number" && s.unit
145
+ ? `in ${s.unit}`
146
+ : s.kind === "score"
147
+ ? "lowest to highest"
148
+ : s.kind === "ref"
149
+ ? `the id of an entry of "${s.to}"`
150
+ : "";
151
+ return (base && more ? `${base} (${more})` : base || more) || undefined;
152
+ }
153
+ const CELL = z.union([z.string(), z.number(), z.null()]);
154
+ /** The data a shape describes, as Zod: what a model's answer is checked against. */
155
+ export function shapeZod(shape, k = "data") {
156
+ const description = about(k, shape);
157
+ const meta = {
158
+ ...(shape.label ? { title: shape.label } : {}),
159
+ ...(description ? { description } : {}),
160
+ };
161
+ switch (shape.kind) {
162
+ case "text":
163
+ case "ref":
164
+ return z.string().meta(meta);
165
+ case "number":
166
+ return z.number().meta(meta);
167
+ case "yesno":
168
+ return z.boolean().meta(meta);
169
+ case "choice":
170
+ case "score":
171
+ return z.enum(shape.options).meta(meta);
172
+ case "list":
173
+ return z.array(shapeZod(shape.of, k)).meta(meta);
174
+ case "object":
175
+ return z
176
+ .object(Object.fromEntries(Object.entries(shape.fields).map(([n, f]) => [n, shapeZod(f, n)])))
177
+ .meta(meta);
178
+ case "table":
179
+ return (shape.columns?.length
180
+ ? z.array(z.object(Object.fromEntries(shape.columns.map((c) => [c, CELL]))))
181
+ : // Free columns come as columns + rows, which a strict schema takes; stored as records.
182
+ z.object({ columns: z.array(z.string()), rows: z.array(z.array(CELL)) })).meta(meta);
183
+ }
184
+ }
185
+ /**
186
+ * The data as JSON Schema (draft 2020-12): every key required, no other keys — what a model's
187
+ * structured output takes, and what developers read.
188
+ */
189
+ export function shapeJsonSchema(shape, title) {
190
+ const schema = z.toJSONSchema(shapeZod(shape), { target: "draft-2020-12" });
191
+ return title && !shape.label ? { ...schema, title } : schema;
192
+ }
193
+ /** A table cell as a table takes it: a list joined by spaces, anything else as text. */
194
+ function fitCell(value) {
195
+ if (value === null || value === undefined) {
196
+ return null;
197
+ }
198
+ if (typeof value === "string" || typeof value === "number") {
199
+ return value;
200
+ }
201
+ if (Array.isArray(value) && value.every((v) => typeof v === "string" || typeof v === "number")) {
202
+ return value.join(" ");
203
+ }
204
+ return typeof value === "boolean" ? String(value) : JSON.stringify(value);
205
+ }
206
+ const isRecord = (v) => Boolean(v) && typeof v === "object" && !Array.isArray(v);
207
+ /**
208
+ * Data a model wrote itself, fitted to the shape before it is checked: a number where text
209
+ * belongs as text, a number written as text as a number; in a table a cell's list joined and a
210
+ * missing column empty. Lists stay lists everywhere else.
211
+ */
212
+ export function fitData(shape, value) {
213
+ switch (shape.kind) {
214
+ case "text":
215
+ case "ref":
216
+ return typeof value === "number" ? String(value) : value;
217
+ case "number":
218
+ return typeof value === "string" && value.trim() && Number.isFinite(Number(value))
219
+ ? Number(value)
220
+ : value;
221
+ case "list":
222
+ return Array.isArray(value) ? value.map((v) => fitData(shape.of, v)) : value;
223
+ case "object":
224
+ if (!isRecord(value)) {
225
+ return value;
226
+ }
227
+ return {
228
+ ...value,
229
+ ...Object.fromEntries(Object.entries(shape.fields)
230
+ .filter(([k]) => k in value)
231
+ .map(([k, f]) => [k, fitData(f, value[k])])),
232
+ };
233
+ case "table": {
234
+ const columns = shape.columns;
235
+ return columns?.length && Array.isArray(value)
236
+ ? value.map((row) => isRecord(row) ? Object.fromEntries(columns.map((c) => [c, fitCell(row[c])])) : row)
237
+ : value;
238
+ }
239
+ default:
240
+ return value;
241
+ }
242
+ }
243
+ /** Tables with free columns come back as columns + rows and are stored as records. */
244
+ export function recordsOf(shape, value) {
245
+ if (shape.kind === "table" && !shape.columns?.length && isRecord(value)) {
246
+ const t = value;
247
+ if (t.columns && t.rows) {
248
+ const columns = t.columns;
249
+ return t.rows.map((row) => Object.fromEntries(columns.map((c, i) => [c, row[i] ?? null])));
250
+ }
251
+ }
252
+ if (shape.kind === "object" && isRecord(value)) {
253
+ return Object.fromEntries(Object.entries(value).map(([k, v]) => {
254
+ const f = shape.fields[k];
255
+ return [k, f ? recordsOf(f, v) : v];
256
+ }));
257
+ }
258
+ if (shape.kind === "list" && Array.isArray(value)) {
259
+ return value.map((v) => recordsOf(shape.of, v));
260
+ }
261
+ return value;
262
+ }
263
+ /** What a value of a shape is, in a word or two: "list of Rezept", "choice: a | b". */
264
+ function kindLine(s) {
265
+ switch (s.kind) {
266
+ case "choice":
267
+ case "score":
268
+ return `${s.kind}: ${s.options.join(" | ")}`;
269
+ case "ref":
270
+ return `ref → /${s.to}[].id`;
271
+ case "table":
272
+ return s.columns?.length ? `table: ${s.columns.join(", ")}` : "table";
273
+ case "list":
274
+ return s.of.kind === "object" ? "list of entries" : `list of ${s.of.kind}`;
275
+ default:
276
+ return s.kind;
277
+ }
278
+ }
279
+ /** The shape as lines of paths a model binds to: "/recipes[]/title (text): Titel". */
280
+ export function shapeLines(shape, at = "") {
281
+ const out = [];
282
+ for (const [k, f] of Object.entries(shape.fields)) {
283
+ const path = `${at}/${k}`;
284
+ const words = [f.label, f.description].filter(Boolean).join(" — ");
285
+ out.push(`- ${path} (${kindLine(f)})${words ? `: ${words}` : ""}`);
286
+ if (f.kind === "list" && f.of.kind === "object") {
287
+ out.push(...shapeLines(f.of, `${path}[]`));
288
+ }
289
+ }
290
+ return out;
291
+ }
292
+ /**
293
+ * The shape at a path: keys of objects, an index (digits) into a list. `any` where the data can
294
+ * hold anything (a table's row), undefined where the shape has nothing.
295
+ */
296
+ export function shapeAt(shape, path) {
297
+ let at = shape;
298
+ for (const part of path) {
299
+ if (at.kind === "object") {
300
+ const next = at.fields[part];
301
+ if (!next) {
302
+ return undefined;
303
+ }
304
+ at = next;
305
+ }
306
+ else if (at.kind === "list" && /^\d+$/.test(part)) {
307
+ at = at.of;
308
+ }
309
+ else if (at.kind === "table") {
310
+ // A row, and in it whatever columns the model wrote.
311
+ return /^\d+$/.test(part) ? "any" : undefined;
312
+ }
313
+ else {
314
+ return undefined;
315
+ }
316
+ }
317
+ return at;
318
+ }
@@ -0,0 +1,89 @@
1
+ import { type TableColumn } from "./engenty/data-tables/index.js";
2
+ import type { ItemCategory, KnowledgePage } from "./knowledge.js";
3
+ /**
4
+ * What a space keeps as data: tables (typed columns, rows of cells, as engenty's data tables)
5
+ * and pages (a title and markdown). Each belongs to the space, or to one of its wizards.
6
+ */
7
+ export interface SpaceTableInfo {
8
+ id: string;
9
+ /** The wizard it belongs to; null: the space's own. */
10
+ wizardId: string | null;
11
+ /** The wizard's shared list it keeps; its columns come from the wizard. */
12
+ list: string | null;
13
+ title: string;
14
+ rows: number;
15
+ updatedAt: string;
16
+ }
17
+ export interface SpacePageInfo {
18
+ id: string;
19
+ wizardId: string | null;
20
+ title: string;
21
+ updatedAt: string;
22
+ }
23
+ /** The space's tables and pages, and its wizards to name whose they are. */
24
+ export interface SpaceData {
25
+ tables: SpaceTableInfo[];
26
+ pages: SpacePageInfo[];
27
+ wizards: {
28
+ id: string;
29
+ title: string;
30
+ }[];
31
+ }
32
+ export interface SpaceTableRow {
33
+ id: string;
34
+ cells: Record<string, unknown>;
35
+ updatedAt: string;
36
+ }
37
+ export interface SpaceTable {
38
+ id: string;
39
+ projectId: string;
40
+ wizardId: string | null;
41
+ list: string | null;
42
+ title: string;
43
+ /** `faq`: a question and its answer per row. */
44
+ format: "faq" | null;
45
+ columns: TableColumn[];
46
+ rows: SpaceTableRow[];
47
+ /** The space is not changed here: a local install's, or nothing is built on this runtime. */
48
+ readOnly: boolean;
49
+ /** A table of Knowledge (the space's own): where it came from and its categories. */
50
+ knowledge: {
51
+ path: string;
52
+ categories: ItemCategory[];
53
+ origin: string | null;
54
+ originLabel: string | null;
55
+ kept: boolean;
56
+ review: string | null;
57
+ file: {
58
+ id: string;
59
+ name: string;
60
+ mime: string;
61
+ } | null;
62
+ } | null;
63
+ }
64
+ export interface SpacePage {
65
+ id: string;
66
+ projectId: string;
67
+ wizardId: string | null;
68
+ title: string;
69
+ markdown: string;
70
+ updatedAt: string;
71
+ readOnly: boolean;
72
+ /** A page of Knowledge (the space's own): where it stands, its sub-pages, its categories. */
73
+ knowledge: KnowledgePage | null;
74
+ }
75
+ export declare const SPACE_DATA_LIMITS: {
76
+ tables: number;
77
+ /** Sub-pages count: a law split along its paragraphs is a few thousand. */
78
+ pages: number;
79
+ rowsPerTable: number;
80
+ pageChars: number;
81
+ };
82
+ /**
83
+ * Cells a person typed, as stored: each value checked against its column. A blank cell is kept
84
+ * empty even where the column is required, so a row can be filled one cell at a time; cells of
85
+ * columns that no longer exist are dropped.
86
+ */
87
+ export declare function editCells(columns: readonly TableColumn[], current: Record<string, unknown>, patch: Record<string, unknown>): Record<string, unknown>;
88
+ /** A column id from its name: a lowercase slug, not one of `taken`. */
89
+ export declare function columnIdOf(name: string, taken: readonly string[]): string;