@engenty/wizards-runtime 0.0.0-stage → 0.7.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (518) 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 +93 -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 +222 -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/setup.js +335 -0
  49. package/apps/runtime/dist/cli/start.js +276 -0
  50. package/apps/runtime/dist/cli/status.js +203 -0
  51. package/apps/runtime/dist/cli/ui.js +59 -0
  52. package/apps/runtime/dist/cli/uninstall-main.js +20 -0
  53. package/apps/runtime/dist/cli/uninstall.js +231 -0
  54. package/apps/runtime/dist/cli/update.js +86 -0
  55. package/apps/runtime/dist/cli/validate.js +75 -0
  56. package/apps/runtime/dist/cli/versions.js +123 -0
  57. package/apps/runtime/dist/connectors/builtin.js +86 -0
  58. package/apps/runtime/dist/connectors/external.js +409 -0
  59. package/apps/runtime/dist/connectors/gmail.js +107 -0
  60. package/apps/runtime/dist/connectors/imap.js +261 -0
  61. package/apps/runtime/dist/connectors/index.js +325 -0
  62. package/apps/runtime/dist/connectors/mail.js +72 -0
  63. package/apps/runtime/dist/connectors/outlook.js +90 -0
  64. package/apps/runtime/dist/connectors/plugin-connections.js +343 -0
  65. package/apps/runtime/dist/connectors/via-account.js +65 -0
  66. package/apps/runtime/dist/credits/credits.js +100 -0
  67. package/apps/runtime/dist/credits/estimate.js +152 -0
  68. package/apps/runtime/dist/db/adopt.js +149 -0
  69. package/apps/runtime/dist/db/client.js +173 -0
  70. package/apps/runtime/dist/db/control-schema.js +133 -0
  71. package/apps/runtime/dist/db/migrations/control/0000_last_absorbing_man.sql +47 -0
  72. package/apps/runtime/dist/db/migrations/control/0001_gorgeous_nicolaos.sql +41 -0
  73. package/apps/runtime/dist/db/migrations/control/0002_secret_penance.sql +1 -0
  74. package/apps/runtime/dist/db/migrations/control/0003_nasty_mordo.sql +3 -0
  75. package/apps/runtime/dist/db/migrations/control/0004_breezy_eddie_brock.sql +6 -0
  76. package/apps/runtime/dist/db/migrations/control/0005_chilly_oracle.sql +1 -0
  77. package/apps/runtime/dist/db/migrations/control/0006_sleepy_mojo.sql +1 -0
  78. package/apps/runtime/dist/db/migrations/control/0007_common_the_hand.sql +15 -0
  79. package/apps/runtime/dist/db/migrations/control/0008_runner.sql +8 -0
  80. package/apps/runtime/dist/db/migrations/control/0009_plugin_claim.sql +9 -0
  81. package/apps/runtime/dist/db/migrations/control/0010_tan_snowbird.sql +6 -0
  82. package/apps/runtime/dist/db/migrations/control/meta/0000_snapshot.json +311 -0
  83. package/apps/runtime/dist/db/migrations/control/meta/0001_snapshot.json +599 -0
  84. package/apps/runtime/dist/db/migrations/control/meta/0002_snapshot.json +607 -0
  85. package/apps/runtime/dist/db/migrations/control/meta/0003_snapshot.json +311 -0
  86. package/apps/runtime/dist/db/migrations/control/meta/0004_snapshot.json +350 -0
  87. package/apps/runtime/dist/db/migrations/control/meta/0005_snapshot.json +358 -0
  88. package/apps/runtime/dist/db/migrations/control/meta/0006_snapshot.json +365 -0
  89. package/apps/runtime/dist/db/migrations/control/meta/0007_snapshot.json +460 -0
  90. package/apps/runtime/dist/db/migrations/control/meta/0008_snapshot.json +505 -0
  91. package/apps/runtime/dist/db/migrations/control/meta/0009_snapshot.json +561 -0
  92. package/apps/runtime/dist/db/migrations/control/meta/0010_snapshot.json +600 -0
  93. package/apps/runtime/dist/db/migrations/control/meta/_journal.json +83 -0
  94. package/apps/runtime/dist/db/migrations/tenant/0000_eminent_freak.sql +188 -0
  95. package/apps/runtime/dist/db/migrations/tenant/0001_salty_master_chief.sql +1 -0
  96. package/apps/runtime/dist/db/migrations/tenant/0002_cloudy_firebird.sql +1 -0
  97. package/apps/runtime/dist/db/migrations/tenant/0003_brown_warbound.sql +52 -0
  98. package/apps/runtime/dist/db/migrations/tenant/0004_romantic_nocturne.sql +6 -0
  99. package/apps/runtime/dist/db/migrations/tenant/0005_reflective_forgotten_one.sql +2 -0
  100. package/apps/runtime/dist/db/migrations/tenant/0006_hard_war_machine.sql +30 -0
  101. package/apps/runtime/dist/db/migrations/tenant/0007_space_data.sql +43 -0
  102. package/apps/runtime/dist/db/migrations/tenant/0008_run_event_note.sql +1 -0
  103. package/apps/runtime/dist/db/migrations/tenant/0009_knowledge.sql +104 -0
  104. package/apps/runtime/dist/db/migrations/tenant/0010_plugin_connection.sql +15 -0
  105. package/apps/runtime/dist/db/migrations/tenant/0011_runners.sql +2 -0
  106. package/apps/runtime/dist/db/migrations/tenant/0012_assistant_chat.sql +40 -0
  107. package/apps/runtime/dist/db/migrations/tenant/0013_run_origin.sql +1 -0
  108. package/apps/runtime/dist/db/migrations/tenant/0014_run_answer.sql +2 -0
  109. package/apps/runtime/dist/db/migrations/tenant/0015_device_calls.sql +13 -0
  110. package/apps/runtime/dist/db/migrations/tenant/0016_even_trish_tilby.sql +12 -0
  111. package/apps/runtime/dist/db/migrations/tenant/meta/0000_snapshot.json +1323 -0
  112. package/apps/runtime/dist/db/migrations/tenant/meta/0001_snapshot.json +1330 -0
  113. package/apps/runtime/dist/db/migrations/tenant/meta/0002_snapshot.json +1337 -0
  114. package/apps/runtime/dist/db/migrations/tenant/meta/0003_snapshot.json +1605 -0
  115. package/apps/runtime/dist/db/migrations/tenant/meta/0004_snapshot.json +1645 -0
  116. package/apps/runtime/dist/db/migrations/tenant/meta/0005_snapshot.json +1659 -0
  117. package/apps/runtime/dist/db/migrations/tenant/meta/0006_snapshot.json +1696 -0
  118. package/apps/runtime/dist/db/migrations/tenant/meta/0007_snapshot.json +2012 -0
  119. package/apps/runtime/dist/db/migrations/tenant/meta/0008_snapshot.json +2019 -0
  120. package/apps/runtime/dist/db/migrations/tenant/meta/0009_snapshot.json +2837 -0
  121. package/apps/runtime/dist/db/migrations/tenant/meta/0010_snapshot.json +2942 -0
  122. package/apps/runtime/dist/db/migrations/tenant/meta/0011_snapshot.json +2956 -0
  123. package/apps/runtime/dist/db/migrations/tenant/meta/0012_snapshot.json +3132 -0
  124. package/apps/runtime/dist/db/migrations/tenant/meta/0013_snapshot.json +3139 -0
  125. package/apps/runtime/dist/db/migrations/tenant/meta/0014_snapshot.json +3154 -0
  126. package/apps/runtime/dist/db/migrations/tenant/meta/0015_snapshot.json +3243 -0
  127. package/apps/runtime/dist/db/migrations/tenant/meta/0016_snapshot.json +3326 -0
  128. package/apps/runtime/dist/db/migrations/tenant/meta/_journal.json +125 -0
  129. package/apps/runtime/dist/db/schema.js +602 -0
  130. package/apps/runtime/dist/debug.js +196 -0
  131. package/apps/runtime/dist/docs/dev/index.md +41 -0
  132. package/apps/runtime/dist/docs/dev/meta.json +7 -0
  133. package/apps/runtime/dist/docs/dev/plugins/connections.md +74 -0
  134. package/apps/runtime/dist/docs/dev/plugins/events.md +89 -0
  135. package/apps/runtime/dist/docs/dev/plugins/examples.md +101 -0
  136. package/apps/runtime/dist/docs/dev/plugins/index.md +78 -0
  137. package/apps/runtime/dist/docs/dev/plugins/layout.md +90 -0
  138. package/apps/runtime/dist/docs/dev/plugins/meta.json +28 -0
  139. package/apps/runtime/dist/docs/dev/plugins/quick-start.md +94 -0
  140. package/apps/runtime/dist/docs/dev/plugins/reference.md +348 -0
  141. package/apps/runtime/dist/docs/dev/plugins/reloading.md +76 -0
  142. package/apps/runtime/dist/docs/dev/plugins/routes.md +185 -0
  143. package/apps/runtime/dist/docs/dev/plugins/runners.md +230 -0
  144. package/apps/runtime/dist/docs/dev/plugins/server.md +281 -0
  145. package/apps/runtime/dist/docs/dev/plugins/shipping.md +79 -0
  146. package/apps/runtime/dist/docs/dev/plugins/space.md +297 -0
  147. package/apps/runtime/dist/docs/dev/plugins/starters.md +70 -0
  148. package/apps/runtime/dist/docs/dev/plugins/studio.md +363 -0
  149. package/apps/runtime/dist/docs/dev/plugins/styling.md +129 -0
  150. package/apps/runtime/dist/docs/dev/plugins/tables.md +104 -0
  151. package/apps/runtime/dist/docs/dev/plugins/tools.md +139 -0
  152. package/apps/runtime/dist/docs/dev/wizard-format.md +125 -0
  153. package/apps/runtime/dist/docs/meta.json +3 -0
  154. package/apps/runtime/dist/docs/user/ai-apps.md +112 -0
  155. package/apps/runtime/dist/docs/user/assistant.md +77 -0
  156. package/apps/runtime/dist/docs/user/build-a-wizard.md +116 -0
  157. package/apps/runtime/dist/docs/user/command-line.md +83 -0
  158. package/apps/runtime/dist/docs/user/connectors.md +90 -0
  159. package/apps/runtime/dist/docs/user/create-account.md +52 -0
  160. package/apps/runtime/dist/docs/user/data.md +66 -0
  161. package/apps/runtime/dist/docs/user/first-start.md +60 -0
  162. package/apps/runtime/dist/docs/user/index.md +49 -0
  163. package/apps/runtime/dist/docs/user/install.md +123 -0
  164. package/apps/runtime/dist/docs/user/local-only.md +42 -0
  165. package/apps/runtime/dist/docs/user/meta.json +32 -0
  166. package/apps/runtime/dist/docs/user/models.md +156 -0
  167. package/apps/runtime/dist/docs/user/plugins.md +71 -0
  168. package/apps/runtime/dist/docs/user/run.md +98 -0
  169. package/apps/runtime/dist/docs/user/server.md +52 -0
  170. package/apps/runtime/dist/docs/user/space.md +126 -0
  171. package/apps/runtime/dist/docs/user/steps.md +220 -0
  172. package/apps/runtime/dist/docs/user/test-and-share.md +224 -0
  173. package/apps/runtime/dist/docs/user/troubleshooting.md +67 -0
  174. package/apps/runtime/dist/docs/user/wordpress.md +121 -0
  175. package/apps/runtime/dist/documents/parse.js +246 -0
  176. package/apps/runtime/dist/engenty/connections-external/build-connector.js +193 -0
  177. package/apps/runtime/dist/engenty/connections-external/errors.js +11 -0
  178. package/apps/runtime/dist/engenty/connections-external/import-service.js +270 -0
  179. package/apps/runtime/dist/engenty/connections-external/importer/classify.js +34 -0
  180. package/apps/runtime/dist/engenty/connections-external/importer/map-auth.js +185 -0
  181. package/apps/runtime/dist/engenty/connections-external/importer/normalize-mcp.js +63 -0
  182. package/apps/runtime/dist/engenty/connections-external/importer/normalize-openapi.js +130 -0
  183. package/apps/runtime/dist/engenty/connections-external/invoke/http-invoker.js +143 -0
  184. package/apps/runtime/dist/engenty/connections-external/invoke/mcp-client.js +143 -0
  185. package/apps/runtime/dist/engenty/connections-external/net/guarded-fetch.js +119 -0
  186. package/apps/runtime/dist/engenty/connections-external/oauth-dcr.js +88 -0
  187. package/apps/runtime/dist/engenty/connections-external/registry-client.js +336 -0
  188. package/apps/runtime/dist/engenty/connections-external/registry-source.js +82 -0
  189. package/apps/runtime/dist/engenty/connections-external/types.js +7 -0
  190. package/apps/runtime/dist/engenty/connections-github/connector.js +209 -0
  191. package/apps/runtime/dist/engenty/connections-google/connectors/calendar.js +381 -0
  192. package/apps/runtime/dist/engenty/connections-google/connectors/contacts.js +94 -0
  193. package/apps/runtime/dist/engenty/connections-google/connectors/drive.js +290 -0
  194. package/apps/runtime/dist/engenty/connections-google/connectors/gmail.js +567 -0
  195. package/apps/runtime/dist/engenty/connections-google/definitions.js +11 -0
  196. package/apps/runtime/dist/engenty/connections-google/shared.js +73 -0
  197. package/apps/runtime/dist/engenty/connections-hubspot/connector.js +140 -0
  198. package/apps/runtime/dist/engenty/connections-microsoft/action.js +17 -0
  199. package/apps/runtime/dist/engenty/connections-microsoft/graph.js +114 -0
  200. package/apps/runtime/dist/engenty/connections-microsoft/onedrive.js +286 -0
  201. package/apps/runtime/dist/engenty/connections-microsoft/outlook.js +492 -0
  202. package/apps/runtime/dist/engenty/connections-s3/s3.js +328 -0
  203. package/apps/runtime/dist/engenty/connections-sdk/files-capability.js +86 -0
  204. package/apps/runtime/dist/engenty/connections-sdk/oauth2.js +150 -0
  205. package/apps/runtime/dist/engenty/connections-sdk/registry.js +89 -0
  206. package/apps/runtime/dist/engenty/connections-sdk/storage-capability.js +84 -0
  207. package/apps/runtime/dist/engenty/connections-sdk/types.js +30 -0
  208. package/apps/runtime/dist/engenty/connections-slack/connector.js +360 -0
  209. package/apps/runtime/dist/engenty/csv-import/csv-matrix.js +178 -0
  210. package/apps/runtime/dist/engenty/csv-import/import-sources.js +87 -0
  211. package/apps/runtime/dist/engenty/csv-import/parse-csv.js +129 -0
  212. package/apps/runtime/dist/engenty/csv-import/serialize-csv.js +20 -0
  213. package/apps/runtime/dist/engenty/csv-import/types.js +1 -0
  214. package/apps/runtime/dist/engenty/csv-import/xlsx-workbook.js +159 -0
  215. package/apps/runtime/dist/engenty/doc-converter/interface.js +9 -0
  216. package/apps/runtime/dist/engenty/doc-converter/page-break.js +92 -0
  217. package/apps/runtime/dist/engenty/doc-converter/providers/local/index.js +72 -0
  218. package/apps/runtime/dist/engenty/document-scanner/schemas/classifier.js +30 -0
  219. package/apps/runtime/dist/engenty/document-scanner/schemas/index.js +4 -0
  220. package/apps/runtime/dist/engenty/document-scanner/schemas/invoice.js +73 -0
  221. package/apps/runtime/dist/engenty/document-scanner/schemas/receipt.js +63 -0
  222. package/apps/runtime/dist/engenty/document-scanner/schemas/shared.js +40 -0
  223. package/apps/runtime/dist/engenty/search-index/chunks.js +164 -0
  224. package/apps/runtime/dist/engenty/search-index/contracts.js +9 -0
  225. package/apps/runtime/dist/engenty/shims/connections-sdk.js +39 -0
  226. package/apps/runtime/dist/engenty/shims/plugin-sdk.js +1 -0
  227. package/apps/runtime/dist/engenty/shims/web-ingest.js +19 -0
  228. package/apps/runtime/dist/engenty/web-ingest/ssrf.js +277 -0
  229. package/apps/runtime/dist/engine/asks.js +82 -0
  230. package/apps/runtime/dist/engine/decide.js +82 -0
  231. package/apps/runtime/dist/engine/device.js +194 -0
  232. package/apps/runtime/dist/engine/events.js +128 -0
  233. package/apps/runtime/dist/engine/input.js +208 -0
  234. package/apps/runtime/dist/engine/owner.js +32 -0
  235. package/apps/runtime/dist/engine/prepare.js +90 -0
  236. package/apps/runtime/dist/engine/push.js +58 -0
  237. package/apps/runtime/dist/engine/requirements.js +355 -0
  238. package/apps/runtime/dist/engine/resources.js +198 -0
  239. package/apps/runtime/dist/engine/runner.js +970 -0
  240. package/apps/runtime/dist/engine/steps.js +1000 -0
  241. package/apps/runtime/dist/engine/surface.js +91 -0
  242. package/apps/runtime/dist/engine/template.js +240 -0
  243. package/apps/runtime/dist/engine/types.js +4 -0
  244. package/apps/runtime/dist/env.js +295 -0
  245. package/apps/runtime/dist/features.js +123 -0
  246. package/apps/runtime/dist/files/blobs.js +22 -0
  247. package/apps/runtime/dist/files/objects.js +86 -0
  248. package/apps/runtime/dist/files/storage.js +120 -0
  249. package/apps/runtime/dist/files/web-images.js +101 -0
  250. package/apps/runtime/dist/film/project.js +257 -0
  251. package/apps/runtime/dist/film/skills.js +91 -0
  252. package/apps/runtime/dist/film/sounds.js +122 -0
  253. package/apps/runtime/dist/film/step.js +289 -0
  254. package/apps/runtime/dist/film/tools.js +99 -0
  255. package/apps/runtime/dist/geocode.js +58 -0
  256. package/apps/runtime/dist/harness/antigravity.js +129 -0
  257. package/apps/runtime/dist/harness/apple.js +270 -0
  258. package/apps/runtime/dist/harness/claude.js +147 -0
  259. package/apps/runtime/dist/harness/codex.js +229 -0
  260. package/apps/runtime/dist/harness/cursor.js +93 -0
  261. package/apps/runtime/dist/harness/env.js +124 -0
  262. package/apps/runtime/dist/harness/index.js +95 -0
  263. package/apps/runtime/dist/harness/model.js +279 -0
  264. package/apps/runtime/dist/harness/prompt.js +121 -0
  265. package/apps/runtime/dist/harness/terminal.js +194 -0
  266. package/apps/runtime/dist/harness/types.js +7 -0
  267. package/apps/runtime/dist/index.js +113 -0
  268. package/apps/runtime/dist/limits.js +81 -0
  269. package/apps/runtime/dist/link-preview.js +60 -0
  270. package/apps/runtime/dist/log.js +106 -0
  271. package/apps/runtime/dist/manage.js +249 -0
  272. package/apps/runtime/dist/mcp/auth.js +161 -0
  273. package/apps/runtime/dist/mcp/bridge.js +59 -0
  274. package/apps/runtime/dist/mcp/flow-app.js +97 -0
  275. package/apps/runtime/dist/mcp/handler.js +54 -0
  276. package/apps/runtime/dist/mcp/scopes.js +14 -0
  277. package/apps/runtime/dist/mcp/seen.js +65 -0
  278. package/apps/runtime/dist/mcp/tools.js +572 -0
  279. package/apps/runtime/dist/media/conversation.js +167 -0
  280. package/apps/runtime/dist/media/ffmpeg.js +121 -0
  281. package/apps/runtime/dist/media/generate.js +120 -0
  282. package/apps/runtime/dist/media/marking.js +121 -0
  283. package/apps/runtime/dist/media/transcribe.js +198 -0
  284. package/apps/runtime/dist/model-errors.js +42 -0
  285. package/apps/runtime/dist/models.js +1164 -0
  286. package/apps/runtime/dist/plugin.js +61 -0
  287. package/apps/runtime/dist/plugins/channels.js +78 -0
  288. package/apps/runtime/dist/plugins/claims.js +56 -0
  289. package/apps/runtime/dist/plugins/discovery.js +155 -0
  290. package/apps/runtime/dist/plugins/events.js +63 -0
  291. package/apps/runtime/dist/plugins/jobs.js +64 -0
  292. package/apps/runtime/dist/plugins/loader.js +508 -0
  293. package/apps/runtime/dist/plugins/migrations.js +69 -0
  294. package/apps/runtime/dist/plugins/pro-keys.js +34 -0
  295. package/apps/runtime/dist/plugins/pro-state.js +83 -0
  296. package/apps/runtime/dist/plugins/pro.js +310 -0
  297. package/apps/runtime/dist/plugins/public.js +44 -0
  298. package/apps/runtime/dist/plugins/registry.js +122 -0
  299. package/apps/runtime/dist/plugins/runs.js +210 -0
  300. package/apps/runtime/dist/render/browser-path.js +54 -0
  301. package/apps/runtime/dist/render/chromium.js +98 -0
  302. package/apps/runtime/dist/render/convert.js +158 -0
  303. package/apps/runtime/dist/render/downloads.js +299 -0
  304. package/apps/runtime/dist/render/guard.js +25 -0
  305. package/apps/runtime/dist/render/shaped.js +137 -0
  306. package/apps/runtime/dist/routes/api.js +440 -0
  307. package/apps/runtime/dist/routes/debug.js +42 -0
  308. package/apps/runtime/dist/routes/delivery.js +90 -0
  309. package/apps/runtime/dist/routes/internal.js +81 -0
  310. package/apps/runtime/dist/routes/lang.js +25 -0
  311. package/apps/runtime/dist/routes/marketplace.js +43 -0
  312. package/apps/runtime/dist/routes/plugin-public.js +113 -0
  313. package/apps/runtime/dist/routes/plugins.js +212 -0
  314. package/apps/runtime/dist/routes/runs.js +1422 -0
  315. package/apps/runtime/dist/routes/studio.js +1629 -0
  316. package/apps/runtime/dist/routes/wizard-stream.js +30 -0
  317. package/apps/runtime/dist/running.js +39 -0
  318. package/apps/runtime/dist/sandbox/docker.js +75 -0
  319. package/apps/runtime/dist/sandbox/index.js +23 -0
  320. package/apps/runtime/dist/sandbox/types.js +1 -0
  321. package/apps/runtime/dist/secrets/crypto.js +28 -0
  322. package/apps/runtime/dist/secrets/signing.js +52 -0
  323. package/apps/runtime/dist/secrets/vault.js +59 -0
  324. package/apps/runtime/dist/services/access.js +88 -0
  325. package/apps/runtime/dist/services/api.js +248 -0
  326. package/apps/runtime/dist/services/architect.js +95 -0
  327. package/apps/runtime/dist/services/assistant-chats.js +311 -0
  328. package/apps/runtime/dist/services/brand.js +85 -0
  329. package/apps/runtime/dist/services/cloud.js +456 -0
  330. package/apps/runtime/dist/services/draft-events.js +27 -0
  331. package/apps/runtime/dist/services/engenty-shapes.js +71 -0
  332. package/apps/runtime/dist/services/errors.js +29 -0
  333. package/apps/runtime/dist/services/files.js +178 -0
  334. package/apps/runtime/dist/services/knowledge-model.js +559 -0
  335. package/apps/runtime/dist/services/knowledge.js +721 -0
  336. package/apps/runtime/dist/services/links.js +16 -0
  337. package/apps/runtime/dist/services/marketplace.js +492 -0
  338. package/apps/runtime/dist/services/onboarding.js +152 -0
  339. package/apps/runtime/dist/services/package-file.js +82 -0
  340. package/apps/runtime/dist/services/package.js +170 -0
  341. package/apps/runtime/dist/services/profile.js +51 -0
  342. package/apps/runtime/dist/services/project-files.js +439 -0
  343. package/apps/runtime/dist/services/project-index.js +707 -0
  344. package/apps/runtime/dist/services/projects.js +387 -0
  345. package/apps/runtime/dist/services/relevance.js +58 -0
  346. package/apps/runtime/dist/services/runners.js +178 -0
  347. package/apps/runtime/dist/services/runs.js +524 -0
  348. package/apps/runtime/dist/services/shares.js +130 -0
  349. package/apps/runtime/dist/services/site.js +270 -0
  350. package/apps/runtime/dist/services/space-categories.js +861 -0
  351. package/apps/runtime/dist/services/space-data.js +792 -0
  352. package/apps/runtime/dist/services/space-origin.js +207 -0
  353. package/apps/runtime/dist/services/spaces.js +656 -0
  354. package/apps/runtime/dist/services/translations.js +306 -0
  355. package/apps/runtime/dist/services/widgets.js +34 -0
  356. package/apps/runtime/dist/services/wizard-icon.js +157 -0
  357. package/apps/runtime/dist/services/wizards.js +420 -0
  358. package/apps/runtime/dist/settings.js +16 -0
  359. package/apps/runtime/dist/store/errors.js +4 -0
  360. package/apps/runtime/dist/store/index.js +299 -0
  361. package/apps/runtime/dist/store/shared-lists.js +123 -0
  362. package/apps/runtime/dist/tenants/control.js +238 -0
  363. package/apps/runtime/dist/tenants/tenant.js +26 -0
  364. package/apps/runtime/dist/texts.js +207 -0
  365. package/apps/runtime/dist/tools/browser.js +703 -0
  366. package/apps/runtime/dist/tools/connector.js +204 -0
  367. package/apps/runtime/dist/tools/index.js +291 -0
  368. package/apps/runtime/dist/tools/mail.js +104 -0
  369. package/apps/runtime/dist/tools/net-guard.js +170 -0
  370. package/apps/runtime/dist/tools/pages.js +81 -0
  371. package/apps/runtime/dist/tools/plugin.js +180 -0
  372. package/apps/runtime/dist/tools/project.js +154 -0
  373. package/apps/runtime/dist/tools/shared.js +69 -0
  374. package/apps/runtime/dist/tools/store.js +238 -0
  375. package/apps/runtime/dist/update.js +113 -0
  376. package/apps/runtime/dist/widgets/bundle.js +99 -0
  377. package/apps/runtime/dist/widgets/render.js +329 -0
  378. package/apps/runtime/dist/widgets/runtime.js +108 -0
  379. package/apps/runtime/dist/widgets/script.js +30 -0
  380. package/apps/runtime/dist/widgets/step.js +223 -0
  381. package/apps/web/dist/ai-labels/ai-black.svg +20 -0
  382. package/apps/web/dist/ai-labels/ai-generated-black.svg +31 -0
  383. package/apps/web/dist/ai-labels/ai-generated-white.svg +32 -0
  384. package/apps/web/dist/ai-labels/ai-modified-black.svg +30 -0
  385. package/apps/web/dist/ai-labels/ai-modified-white.svg +31 -0
  386. package/apps/web/dist/ai-labels/ai-white.svg +21 -0
  387. package/apps/web/dist/assets/AboutDialog-D4mvc-zu.js +1 -0
  388. package/apps/web/dist/assets/ChangelogDialog-DLqpJsF6.js +1 -0
  389. package/apps/web/dist/assets/ChatView-3laypRcE.js +10 -0
  390. package/apps/web/dist/assets/EditorPage-BalA5U2Y.js +3 -0
  391. package/apps/web/dist/assets/FlowPreview-CusP7ci9.js +1 -0
  392. package/apps/web/dist/assets/Harness-BrP-ENHg.css +1 -0
  393. package/apps/web/dist/assets/Harness-iYLtOLaK.js +16 -0
  394. package/apps/web/dist/assets/NewWizardChannels-CbwJ9A56.js +1 -0
  395. package/apps/web/dist/assets/NewWizardPage-BOBYiB9i.js +7 -0
  396. package/apps/web/dist/assets/OnboardingPage-CUwCiVIr.js +1 -0
  397. package/apps/web/dist/assets/ProjectPage-Bb16MdYG.js +1 -0
  398. package/apps/web/dist/assets/PublicRunner-BCt7Q6C-.js +1 -0
  399. package/apps/web/dist/assets/ReadOnly-kIHX2TEy.js +1 -0
  400. package/apps/web/dist/assets/RunDrawer-hZ9oeSXu.js +4 -0
  401. package/apps/web/dist/assets/RunnerView-DUS9fPmx.js +1 -0
  402. package/apps/web/dist/assets/SettingsPage-BzwR50fi.js +1 -0
  403. package/apps/web/dist/assets/SetupPage-gAp7rPxp.js +1 -0
  404. package/apps/web/dist/assets/SharePage-DqZWHva_.js +1 -0
  405. package/apps/web/dist/assets/changelog-DugmCNSf.js +1 -0
  406. package/apps/web/dist/assets/engenty-eXZ-EAwd.js +1 -0
  407. package/apps/web/dist/assets/esm-DXeMu8Lb.js +7 -0
  408. package/apps/web/dist/assets/fluffy-engenty-ClRou7yu.js +456 -0
  409. package/apps/web/dist/assets/index-AfUa8xKD.css +1 -0
  410. package/apps/web/dist/assets/index-C5Sm7tTR.js +14 -0
  411. package/apps/web/dist/assets/jsx-runtime-BNakU3Ej.js +1 -0
  412. package/apps/web/dist/assets/lock-R_CfU0Xo.js +1 -0
  413. package/apps/web/dist/assets/oss-credits-cZ9NUaLZ.js +1 -0
  414. package/apps/web/dist/assets/pdfmake-Cx9scTbD.js +228 -0
  415. package/apps/web/dist/assets/phone-CgrIS4_-.js +1 -0
  416. package/apps/web/dist/assets/preload-helper-CNEI7N0N.js +1 -0
  417. package/apps/web/dist/assets/qr-scanner-worker.min-CJaXo3yu.js +98 -0
  418. package/apps/web/dist/assets/qr-scanner.min-C_UI0gH-.js +1 -0
  419. package/apps/web/dist/assets/rolldown-runtime-hePW80VL.js +1 -0
  420. package/apps/web/dist/assets/settings-menu-2IMOOlLl.js +1 -0
  421. package/apps/web/dist/assets/ui-dzGvc3xk.js +137 -0
  422. package/apps/web/dist/assets/upload-BSuTilFF.js +1 -0
  423. package/apps/web/dist/assets/vfs_fonts-DllDSYt1.js +1 -0
  424. package/apps/web/dist/embed.js +266 -0
  425. package/apps/web/dist/favicon.svg +1 -0
  426. package/apps/web/dist/icons/apple-touch-icon.png +0 -0
  427. package/apps/web/dist/icons/icon-192.png +0 -0
  428. package/apps/web/dist/icons/icon-512.png +0 -0
  429. package/apps/web/dist/icons/icon-maskable-512.png +0 -0
  430. package/apps/web/dist/index.html +48 -0
  431. package/apps/web/dist/install.sh +577 -0
  432. package/apps/web/dist/manifest.webmanifest +21 -0
  433. package/apps/web/dist/mcp/flow.html +980 -0
  434. package/apps/web/dist/sw.js +15 -0
  435. package/bin/wizards.mjs +288 -0
  436. package/modules/README.md +15 -0
  437. package/node_modules/@engenty/wizards/dist/plugin/index.d.ts +1150 -0
  438. package/node_modules/@engenty/wizards/dist/plugin/index.js +4 -0
  439. package/node_modules/@engenty/wizards/dist/plugin/studio.d.ts +322 -0
  440. package/node_modules/@engenty/wizards/dist/plugin/studio.js +4 -0
  441. package/node_modules/@engenty/wizards/dist/plugin/thread.d.ts +174 -0
  442. package/node_modules/@engenty/wizards/dist/plugin/thread.js +821 -0
  443. package/node_modules/@engenty/wizards/package.json +11 -0
  444. package/node_modules/@engenty-wizards/shared/dist/assistant.d.ts +174 -0
  445. package/node_modules/@engenty-wizards/shared/dist/assistant.js +65 -0
  446. package/node_modules/@engenty-wizards/shared/dist/changes.d.ts +22 -0
  447. package/node_modules/@engenty-wizards/shared/dist/changes.js +61 -0
  448. package/node_modules/@engenty-wizards/shared/dist/connectors.d.ts +77 -0
  449. package/node_modules/@engenty-wizards/shared/dist/connectors.js +2 -0
  450. package/node_modules/@engenty-wizards/shared/dist/decision.d.ts +76 -0
  451. package/node_modules/@engenty-wizards/shared/dist/decision.js +147 -0
  452. package/node_modules/@engenty-wizards/shared/dist/definition.d.ts +2922 -0
  453. package/node_modules/@engenty-wizards/shared/dist/definition.js +1920 -0
  454. package/node_modules/@engenty-wizards/shared/dist/engenty/data-tables/columns-format.d.ts +5 -0
  455. package/node_modules/@engenty-wizards/shared/dist/engenty/data-tables/columns-format.js +132 -0
  456. package/node_modules/@engenty-wizards/shared/dist/engenty/data-tables/columns-value.d.ts +11 -0
  457. package/node_modules/@engenty-wizards/shared/dist/engenty/data-tables/columns-value.js +209 -0
  458. package/node_modules/@engenty-wizards/shared/dist/engenty/data-tables/columns.d.ts +532 -0
  459. package/node_modules/@engenty-wizards/shared/dist/engenty/data-tables/columns.js +217 -0
  460. package/node_modules/@engenty-wizards/shared/dist/engenty/data-tables/index.d.ts +3 -0
  461. package/node_modules/@engenty-wizards/shared/dist/engenty/data-tables/index.js +3 -0
  462. package/node_modules/@engenty-wizards/shared/dist/engenty/search-index/catalog-lexical.d.ts +14 -0
  463. package/node_modules/@engenty-wizards/shared/dist/engenty/search-index/catalog-lexical.js +166 -0
  464. package/node_modules/@engenty-wizards/shared/dist/engenty/search-index/catalog-rank.d.ts +33 -0
  465. package/node_modules/@engenty-wizards/shared/dist/engenty/search-index/catalog-rank.js +99 -0
  466. package/node_modules/@engenty-wizards/shared/dist/feature-flags.d.ts +78 -0
  467. package/node_modules/@engenty-wizards/shared/dist/feature-flags.js +70 -0
  468. package/node_modules/@engenty-wizards/shared/dist/features.d.ts +41 -0
  469. package/node_modules/@engenty-wizards/shared/dist/features.js +89 -0
  470. package/node_modules/@engenty-wizards/shared/dist/fit.d.ts +71 -0
  471. package/node_modules/@engenty-wizards/shared/dist/fit.js +382 -0
  472. package/node_modules/@engenty-wizards/shared/dist/json-schema.d.ts +14 -0
  473. package/node_modules/@engenty-wizards/shared/dist/json-schema.js +66 -0
  474. package/node_modules/@engenty-wizards/shared/dist/knowledge.d.ts +199 -0
  475. package/node_modules/@engenty-wizards/shared/dist/knowledge.js +68 -0
  476. package/node_modules/@engenty-wizards/shared/dist/marketplace-entry.d.ts +35 -0
  477. package/node_modules/@engenty-wizards/shared/dist/marketplace-entry.js +107 -0
  478. package/node_modules/@engenty-wizards/shared/dist/marketplace-search.d.ts +20 -0
  479. package/node_modules/@engenty-wizards/shared/dist/marketplace-search.js +136 -0
  480. package/node_modules/@engenty-wizards/shared/dist/marketplace.d.ts +227 -0
  481. package/node_modules/@engenty-wizards/shared/dist/marketplace.js +354 -0
  482. package/node_modules/@engenty-wizards/shared/dist/merge.d.ts +7 -0
  483. package/node_modules/@engenty-wizards/shared/dist/merge.js +40 -0
  484. package/node_modules/@engenty-wizards/shared/dist/numbers.d.ts +24 -0
  485. package/node_modules/@engenty-wizards/shared/dist/numbers.js +54 -0
  486. package/node_modules/@engenty-wizards/shared/dist/projects.d.ts +224 -0
  487. package/node_modules/@engenty-wizards/shared/dist/projects.js +319 -0
  488. package/node_modules/@engenty-wizards/shared/dist/providers.d.ts +101 -0
  489. package/node_modules/@engenty-wizards/shared/dist/providers.js +390 -0
  490. package/node_modules/@engenty-wizards/shared/dist/run.d.ts +680 -0
  491. package/node_modules/@engenty-wizards/shared/dist/run.js +620 -0
  492. package/node_modules/@engenty-wizards/shared/dist/runner-texts.d.ts +546 -0
  493. package/node_modules/@engenty-wizards/shared/dist/runner-texts.js +523 -0
  494. package/node_modules/@engenty-wizards/shared/dist/runners.d.ts +93 -0
  495. package/node_modules/@engenty-wizards/shared/dist/runners.js +146 -0
  496. package/node_modules/@engenty-wizards/shared/dist/shape.d.ts +102 -0
  497. package/node_modules/@engenty-wizards/shared/dist/shape.js +318 -0
  498. package/node_modules/@engenty-wizards/shared/dist/space-data.d.ts +89 -0
  499. package/node_modules/@engenty-wizards/shared/dist/space-data.js +47 -0
  500. package/node_modules/@engenty-wizards/shared/dist/store.d.ts +117 -0
  501. package/node_modules/@engenty-wizards/shared/dist/store.js +81 -0
  502. package/node_modules/@engenty-wizards/shared/dist/surface.d.ts +115 -0
  503. package/node_modules/@engenty-wizards/shared/dist/surface.js +442 -0
  504. package/node_modules/@engenty-wizards/shared/dist/texts.d.ts +45 -0
  505. package/node_modules/@engenty-wizards/shared/dist/texts.js +54 -0
  506. package/node_modules/@engenty-wizards/shared/dist/translation.d.ts +23 -0
  507. package/node_modules/@engenty-wizards/shared/dist/translation.js +154 -0
  508. package/node_modules/@engenty-wizards/shared/dist/wizard-package.d.ts +48 -0
  509. package/node_modules/@engenty-wizards/shared/dist/wizard-package.js +49 -0
  510. package/node_modules/@engenty-wizards/shared/dist/workspace.d.ts +16 -0
  511. package/node_modules/@engenty-wizards/shared/dist/workspace.js +51 -0
  512. package/node_modules/@engenty-wizards/shared/package.json +10 -0
  513. package/package.json +77 -4
  514. package/plugin/.claude-plugin/plugin.json +9 -0
  515. package/plugin/.mcp.json +8 -0
  516. package/plugin/commands/wizard.md +8 -0
  517. package/plugin/skills/build-wizard/SKILL.md +27 -0
  518. package/plugin/skills/use-wizard/SKILL.md +18 -0
@@ -0,0 +1,70 @@
1
+ /**
2
+ * The feature flags of the core: the parts that ship in the code but are not on for everyone
3
+ * yet (`release`), and the parts a plan includes (`plan`). This file is the list – add a flag
4
+ * here, branch on it with `useFeature("name")` in the studio or `feature("name")` in the
5
+ * runtime, and delete it with its branches once its default became `true`.
6
+ *
7
+ * How a flag gets its value (defaults here → `FEATURES` env → the Manage-App → the `.features`
8
+ * file) lives in features.ts. A plugin's flags are declared in its manifest under `features`
9
+ * and are known as `<plugin id>.<name>`; they do not belong here. No public page lists these.
10
+ */
11
+ /**
12
+ * One entry per flag. `kind: "release"`: on or off for everyone by default, turned on for a
13
+ * team or a machine before the default flips. `kind: "plan"`: on until a plan says `false`.
14
+ */
15
+ export const FEATURES = {
16
+ account: {
17
+ kind: "release",
18
+ default: true,
19
+ label: "Account in a local install",
20
+ hint: "Linking, Settings → Account, the offer to sign in.",
21
+ },
22
+ unsetConnectors: {
23
+ kind: "release",
24
+ default: false,
25
+ label: "Connectors without an OAuth client",
26
+ hint: "Built-in connectors are shown although their client is not set up.",
27
+ },
28
+ site: {
29
+ kind: "release",
30
+ default: false,
31
+ label: "Link to the website in the setup",
32
+ hint: "The local install's setup links the product's site.",
33
+ },
34
+ teamPlans: {
35
+ kind: "release",
36
+ default: false,
37
+ label: "Team plans",
38
+ hint: "The team page in the cloud studio, and plans that carry this switch on the account pages.",
39
+ },
40
+ brandSections: {
41
+ kind: "release",
42
+ default: false,
43
+ label: "Sections in Info & brand",
44
+ hint: "Sections of logos and of colours, gradients and patterns among them.",
45
+ },
46
+ brandRules: {
47
+ kind: "release",
48
+ default: false,
49
+ label: "Rules in Info & brand",
50
+ hint: "Rules for how the logos, the colours and the type may be used.",
51
+ },
52
+ typography: {
53
+ kind: "release",
54
+ default: false,
55
+ label: "Typography in Info & brand",
56
+ hint: "The brand's fonts, their licences and a type scale.",
57
+ },
58
+ goose: {
59
+ kind: "release",
60
+ default: false,
61
+ label: "Goose",
62
+ hint: "The studio's assistant: its chat at the foot of the page and in the sidebar.",
63
+ },
64
+ ownKeys: {
65
+ kind: "plan",
66
+ default: true,
67
+ label: "Own API keys",
68
+ hint: "The team puts its providers' keys into the cloud studio instead of running on credits.",
69
+ },
70
+ };
@@ -0,0 +1,41 @@
1
+ import { FEATURES, type FeatureDeclaration } from "./feature-flags.js";
2
+ /**
3
+ * Feature switches: how a flag of feature-flags.ts (or a plugin's manifest) gets its value.
4
+ * The runtime resolves them from the defaults, what the Manage-App says for the team or the
5
+ * linked account, and this install's `.features` file; the studio and plugins read the result.
6
+ */
7
+ export { FEATURES, type FeatureDeclaration };
8
+ export type FeatureName = keyof typeof FEATURES;
9
+ export type FeatureKind = (typeof FEATURES)[FeatureName]["kind"];
10
+ /** A switch by name; a plugin's own switches carry its id: `contacts.leadScoring`. */
11
+ export type Features = Record<string, boolean>;
12
+ /** `teamPlans`, `contacts.leadScoring`. */
13
+ export declare const FEATURE_NAME: RegExp;
14
+ /** What a manifest declares for one switch; what is left out is a release switch, off, named by its key. */
15
+ export interface FeatureDeclarationInput {
16
+ kind?: "release" | "plan";
17
+ default?: boolean;
18
+ label?: string;
19
+ hint?: string;
20
+ }
21
+ /** A plugin's declarations under its id: `contacts` + `leadScoring` → `contacts.leadScoring`. */
22
+ export declare function declaredByPlugin(pluginId: string, features: Record<string, FeatureDeclarationInput | boolean> | undefined): Record<string, FeatureDeclaration>;
23
+ /**
24
+ * Whether a switch is on in resolved values: a switch they do not carry counts as declared – a
25
+ * core flag with its default (`ownKeys` on, `teamPlans` off), anything else off. Every read of a
26
+ * flag goes through this (`useFeature` in the studio), so a missing value means one thing.
27
+ */
28
+ export declare function featureOn(features: Features | null | undefined, name: string): boolean;
29
+ /** The defaults of these declarations; without any, the core's. */
30
+ export declare function defaultFeatures(declared?: Record<string, FeatureDeclaration>): Features;
31
+ /**
32
+ * Switches in the shape of a `.env` file: one `name=on` or `name=off` per line (`true`/`false`
33
+ * and `1`/`0` count too), `#` starts a comment, anything else is skipped. The `FEATURES`
34
+ * environment variable holds the same, comma-separated. Unknown names are kept: a plugin's
35
+ * switches are not known here.
36
+ */
37
+ export declare function parseFeatures(text: string): Features;
38
+ /** The text of a `.features` file for these switches, one `name=on|off` per line. */
39
+ export declare function formatFeatures(features: Features): string;
40
+ /** Layers laid over each other, the last one winning; null layers are skipped. */
41
+ export declare function resolveFeatures(...layers: (Features | null | undefined)[]): Features;
@@ -0,0 +1,89 @@
1
+ import { FEATURES } from "./feature-flags.js";
2
+ /**
3
+ * Feature switches: how a flag of feature-flags.ts (or a plugin's manifest) gets its value.
4
+ * The runtime resolves them from the defaults, what the Manage-App says for the team or the
5
+ * linked account, and this install's `.features` file; the studio and plugins read the result.
6
+ */
7
+ export { FEATURES };
8
+ /** `teamPlans`, `contacts.leadScoring`. */
9
+ export const FEATURE_NAME = /^[a-z][a-zA-Z0-9]*(\.[a-z][a-zA-Z0-9]*)?$/;
10
+ /** A plugin's declarations under its id: `contacts` + `leadScoring` → `contacts.leadScoring`. */
11
+ export function declaredByPlugin(pluginId, features) {
12
+ const out = {};
13
+ for (const [key, raw] of Object.entries(features ?? {})) {
14
+ const name = `${pluginId}.${key}`;
15
+ if (!FEATURE_NAME.test(name)) {
16
+ continue;
17
+ }
18
+ const d = typeof raw === "boolean" ? { default: raw } : raw;
19
+ out[name] = {
20
+ kind: d.kind ?? "release",
21
+ default: d.default ?? false,
22
+ label: d.label ?? key,
23
+ ...(d.hint ? { hint: d.hint } : {}),
24
+ };
25
+ }
26
+ return out;
27
+ }
28
+ /**
29
+ * Whether a switch is on in resolved values: a switch they do not carry counts as declared – a
30
+ * core flag with its default (`ownKeys` on, `teamPlans` off), anything else off. Every read of a
31
+ * flag goes through this (`useFeature` in the studio), so a missing value means one thing.
32
+ */
33
+ export function featureOn(features, name) {
34
+ const value = features?.[name];
35
+ if (typeof value === "boolean") {
36
+ return value;
37
+ }
38
+ return Object.hasOwn(FEATURES, name) ? FEATURES[name].default : false;
39
+ }
40
+ /** The defaults of these declarations; without any, the core's. */
41
+ export function defaultFeatures(declared = FEATURES) {
42
+ const out = {};
43
+ for (const [name, d] of Object.entries(declared)) {
44
+ out[name] = d.default;
45
+ }
46
+ return out;
47
+ }
48
+ /**
49
+ * Switches in the shape of a `.env` file: one `name=on` or `name=off` per line (`true`/`false`
50
+ * and `1`/`0` count too), `#` starts a comment, anything else is skipped. The `FEATURES`
51
+ * environment variable holds the same, comma-separated. Unknown names are kept: a plugin's
52
+ * switches are not known here.
53
+ */
54
+ export function parseFeatures(text) {
55
+ const out = {};
56
+ for (const raw of text.split(/[\n,]/)) {
57
+ const line = raw.replace(/#.*$/, "").trim();
58
+ if (!line) {
59
+ continue;
60
+ }
61
+ const m = /^([A-Za-z0-9.]+)\s*=\s*(\S+)$/.exec(line);
62
+ if (!m?.[1] || !m[2] || !FEATURE_NAME.test(m[1])) {
63
+ continue;
64
+ }
65
+ const value = m[2].toLowerCase();
66
+ if (["on", "true", "1"].includes(value)) {
67
+ out[m[1]] = true;
68
+ }
69
+ else if (["off", "false", "0"].includes(value)) {
70
+ out[m[1]] = false;
71
+ }
72
+ }
73
+ return out;
74
+ }
75
+ /** The text of a `.features` file for these switches, one `name=on|off` per line. */
76
+ export function formatFeatures(features) {
77
+ const lines = Object.entries(features).map(([name, on]) => `${name}=${on ? "on" : "off"}`);
78
+ return lines.length ? `${lines.join("\n")}\n` : "";
79
+ }
80
+ /** Layers laid over each other, the last one winning; null layers are skipped. */
81
+ export function resolveFeatures(...layers) {
82
+ const out = {};
83
+ for (const layer of layers) {
84
+ if (layer) {
85
+ Object.assign(out, layer);
86
+ }
87
+ }
88
+ return out;
89
+ }
@@ -0,0 +1,71 @@
1
+ import { type AssetKind, type FieldKind, type Format, type ModelClass, type PageStep, type Step, type ToolId, type WizardDefinition } from "./definition.js";
2
+ import type { Capability } from "./marketplace.js";
3
+ import type { ClosedChoice } from "./run.js";
4
+ /**
5
+ * What a wizard needs beyond a text model, and whether it runs where there is nothing else: a
6
+ * WordPress site with the AI Client, no tools, no plugins, no media models (docs/plans/
7
+ * wordpress-plugin.md, "The check"). One function, computed in the studio, on upload into the
8
+ * plugin and by the gallery, so every place gives the same answer.
9
+ */
10
+ /** Something a step wants beyond a text model, as a stable id every app can word. */
11
+ export type Need = `tool:${ToolId}` | "mcp" | "connections" | `plugin:${string}` | `asset:${AssetKind}` | "film"
12
+ /** A widget runs in the runtime's widget host; the standalone runner has none yet. */
13
+ | "widget" | "widget:video" | `field:${Extract<FieldKind, "audio" | "connection" | "slot" | "location" | "image" | "file">}`
14
+ /** A file the person gives that a later thinking step reads: reading documents is the runtime's. */
15
+ | "field:file-read" | `format:${Format}` | "lists" | "memory" | "each";
16
+ export interface StepNeed {
17
+ stepId: string;
18
+ need: Need;
19
+ /** The step cannot run without it; a soft need is left out and the step runs with less. */
20
+ hard: boolean;
21
+ }
22
+ /** What one step wants beyond a text model. */
23
+ export declare function needs(step: Step, def: WizardDefinition): StepNeed[];
24
+ export interface Fit {
25
+ /** `full`: runs as is. `less`: the choices leading to a hard need are closed, soft needs are left out. `no`: a hard need on a step every run passes through. */
26
+ fit: "full" | "less" | "no";
27
+ notes: StepNeed[];
28
+ }
29
+ /** Whether a wizard runs on its own, with what left out. */
30
+ export declare function standaloneFit(def: WizardDefinition): Fit;
31
+ /** The gallery's capability a need stands for; none for what the gallery has no word for. */
32
+ export declare function capabilityOf(need: Need): Capability | null;
33
+ /**
34
+ * The fit in the fields a marketplace entry already has, so the gallery's chips and entry
35
+ * dialog draw it: `missing` is what the wizard cannot do without here (rose, "nicht
36
+ * eingerichtet"), `optional` what it runs without (amber, "geht auch ohne"), `needs` the
37
+ * plugins behind an account, `without` the result formats that fall away.
38
+ */
39
+ export interface StandaloneFit extends Fit {
40
+ missing: Capability[];
41
+ optional: Capability[];
42
+ needs: string[];
43
+ without: Format[];
44
+ }
45
+ export declare function standaloneEntry(def: WizardDefinition): StandaloneFit;
46
+ /** The steps every run passes through: without one of them the end is not reachable. */
47
+ export declare function unavoidableSteps(def: WizardDefinition): Set<string>;
48
+ /**
49
+ * The steps every path from `from` to the end passes through. A rule on an answer in `known`
50
+ * goes one way; a rule on anything else may go either way.
51
+ */
52
+ export declare function unavoidableFrom(def: WizardDefinition, from: string, known: Record<string, unknown>): Set<string>;
53
+ /** Where step `i` goes when none of its rules holds, as an index; the length = the end. */
54
+ export declare function otherwiseIndex(def: WizardDefinition, i: number, index: Map<string, number>): number;
55
+ /** The choices a page offers: each select's options, a toggle's on and off. */
56
+ export interface PageChoice {
57
+ field: string;
58
+ values: (string | boolean)[];
59
+ }
60
+ export declare function choicesOf(step: PageStep): PageChoice[];
61
+ /**
62
+ * The answers on a page that lead to a step this runtime cannot run: with them the run would
63
+ * stop there, after what came before was paid for. `lacking` says per step what it lacks (model
64
+ * classes on a runtime, needs on a standalone site). The answers given already count; the page's
65
+ * other fields may still go either way. A choice whose every value leads there is left open: the
66
+ * run cannot go around it, and the start already warned. `closedFields` are closed as a whole
67
+ * (no values): a voice note nothing here can listen to.
68
+ */
69
+ export declare function closedChoicesFor(def: WizardDefinition, step: PageStep, values: Record<string, unknown>, lacking: (step: Step) => ModelClass[], closedFields?: (field: PageStep["fields"][number]) => ModelClass[] | null): Record<string, ClosedChoice>;
70
+ /** The answer a closed choice gets instead: its first value that stays open. */
71
+ export declare function openValue(step: PageStep, field: string, closed: ClosedChoice): string | boolean | undefined;
@@ -0,0 +1,382 @@
1
+ // SPDX-License-Identifier: FSL-1.1-MIT OR MIT
2
+ import { conditionsOf, dataRef, isOtherwise, listRef, pluginToolOf, ruleMatches, templateRefs, } from "./definition.js";
3
+ /** What the standalone runner can hand over of a thinking step's text itself. */
4
+ const BASE_FORMATS = new Set(["html", "md", "txt", "csv", "json"]);
5
+ /** Tools the standalone runner has no way to run; `pages` only reads the space's pages, which it lacks. */
6
+ const HARD_TOOLS = new Set(["web_search", "browser", "sandbox", "image"]);
7
+ /**
8
+ * Tools the standalone runner runs itself: a WordPress site reads a public page and calls a
9
+ * public API through its own abilities (the plugin's `Engenty_Abilities`). No need at all.
10
+ */
11
+ const RUNNER_TOOLS = new Set(["web_fetch", "http"]);
12
+ const MEMORY_RE = /\{\{\s*memory\b/;
13
+ /** The templates a step renders: what may name lists or the memory. */
14
+ function templatesOf(step) {
15
+ switch (step.type) {
16
+ case "agent":
17
+ return [step.instructions, step.call ? JSON.stringify(step.call.input) : ""];
18
+ case "generate":
19
+ return [step.prompt, step.options?.style ?? ""];
20
+ case "film":
21
+ return [step.brief];
22
+ case "widget":
23
+ case "surface":
24
+ return Object.values(step.data).map((ref) => `{{${dataRef(ref)}}}`);
25
+ default:
26
+ return [];
27
+ }
28
+ }
29
+ /** Whether a thinking step that reads files may run after `index`. */
30
+ function readsFilesLater(def, index) {
31
+ return def.steps
32
+ .slice(index + 1)
33
+ .some((s) => (s.type === "agent" && !s.call) || s.type === "generate" || s.type === "film");
34
+ }
35
+ /** What one step wants beyond a text model. */
36
+ export function needs(step, def) {
37
+ const out = [];
38
+ const add = (need, hard) => {
39
+ const found = out.find((n) => n.need === need);
40
+ if (found) {
41
+ found.hard ||= hard;
42
+ }
43
+ else {
44
+ out.push({ stepId: step.id, need, hard });
45
+ }
46
+ };
47
+ const index = def.steps.indexOf(step);
48
+ for (const template of templatesOf(step)) {
49
+ if (MEMORY_RE.test(template)) {
50
+ add("memory", true);
51
+ }
52
+ if (templateRefs(template).some((ref) => ref.startsWith("lists."))) {
53
+ add("lists", true);
54
+ }
55
+ }
56
+ switch (step.type) {
57
+ case "page":
58
+ for (const field of step.fields) {
59
+ switch (field.kind) {
60
+ case "audio":
61
+ add("field:audio", Boolean(field.required));
62
+ break;
63
+ case "connection":
64
+ add("field:connection", true);
65
+ break;
66
+ case "slot":
67
+ add("field:slot", true);
68
+ break;
69
+ case "list":
70
+ add("lists", true);
71
+ break;
72
+ case "location":
73
+ add("field:location", false);
74
+ break;
75
+ case "image":
76
+ add("field:image", false);
77
+ break;
78
+ case "file":
79
+ if (readsFilesLater(def, index)) {
80
+ add("field:file-read", true);
81
+ }
82
+ else {
83
+ add("field:file", false);
84
+ }
85
+ break;
86
+ default:
87
+ break;
88
+ }
89
+ if (field.optionsFrom &&
90
+ listRef(dataRef(field.optionsFrom).split(".").slice(0, 2).join("."))) {
91
+ add("lists", true);
92
+ }
93
+ }
94
+ break;
95
+ case "agent": {
96
+ const tools = step.call ? [...step.tools, step.call.tool] : step.tools;
97
+ for (const tool of tools) {
98
+ const plugin = pluginToolOf(tool);
99
+ if (plugin) {
100
+ add(`plugin:${plugin.plugin}`, true);
101
+ }
102
+ else if (RUNNER_TOOLS.has(tool)) {
103
+ // The site runs it.
104
+ }
105
+ else if (HARD_TOOLS.has(tool)) {
106
+ add(`tool:${tool}`, true);
107
+ }
108
+ else {
109
+ add(`tool:${tool}`, false);
110
+ }
111
+ }
112
+ if (step.mcp?.length) {
113
+ add("mcp", true);
114
+ }
115
+ if (step.connections?.length) {
116
+ add("connections", true);
117
+ }
118
+ if (step.each) {
119
+ if (listRef(dataRef(step.each))) {
120
+ add("lists", true);
121
+ }
122
+ else {
123
+ add("each", false);
124
+ }
125
+ }
126
+ break;
127
+ }
128
+ case "generate":
129
+ // A document or a dashboard is HTML a text model writes in one call: the standalone runner
130
+ // makes it too, and the browser prints it. Media need a model of their own.
131
+ if (step.asset !== "document" && step.asset !== "dashboard") {
132
+ add(`asset:${step.asset}`, true);
133
+ }
134
+ break;
135
+ case "film":
136
+ add("film", true);
137
+ break;
138
+ case "widget":
139
+ add(step.video ? "widget:video" : "widget", true);
140
+ break;
141
+ case "surface":
142
+ if (Object.values(step.data).some((ref) => listRef(dataRef(ref)))) {
143
+ add("lists", true);
144
+ }
145
+ break;
146
+ case "review":
147
+ if (step.show.some((ref) => listRef(ref))) {
148
+ add("lists", true);
149
+ }
150
+ break;
151
+ case "result":
152
+ for (const d of step.deliverables) {
153
+ if (listRef(d.from)) {
154
+ add("lists", true);
155
+ continue;
156
+ }
157
+ const from = def.steps.find((s) => s.id === d.from);
158
+ // What a media step, a widget or a film makes is the step's own need.
159
+ const written = from?.type === "agent" ||
160
+ (from?.type === "generate" && (from.asset === "document" || from.asset === "dashboard"));
161
+ if (!written) {
162
+ continue;
163
+ }
164
+ const stays = d.formats.some((f) => BASE_FORMATS.has(f));
165
+ for (const f of d.formats) {
166
+ if (BASE_FORMATS.has(f)) {
167
+ continue;
168
+ }
169
+ // A PDF of a written text the runner makes in the browser (packages/runner/src/pdf.ts);
170
+ // of a document the browser prints the HTML. The others fall away where another stays.
171
+ if (f === "pdf" && from?.type === "agent") {
172
+ continue;
173
+ }
174
+ add(`format:${f}`, f !== "pdf" && !stays);
175
+ }
176
+ }
177
+ break;
178
+ }
179
+ return out;
180
+ }
181
+ /** Whether a wizard runs on its own, with what left out. */
182
+ export function standaloneFit(def) {
183
+ const notes = def.steps.flatMap((s) => needs(s, def));
184
+ if (def.lists?.length && !notes.some((n) => n.need === "lists")) {
185
+ notes.push({ stepId: def.steps[0]?.id ?? "", need: "lists", hard: true });
186
+ }
187
+ if (def.connections?.length && !notes.some((n) => n.need === "connections")) {
188
+ notes.push({ stepId: def.steps[0]?.id ?? "", need: "connections", hard: true });
189
+ }
190
+ const unavoidable = unavoidableSteps(def);
191
+ const blocked = notes.some((n) => n.hard && unavoidable.has(n.stepId));
192
+ return { fit: blocked ? "no" : notes.length ? "less" : "full", notes };
193
+ }
194
+ /** The gallery's capability a need stands for; none for what the gallery has no word for. */
195
+ export function capabilityOf(need) {
196
+ switch (need) {
197
+ case "tool:web_search":
198
+ case "tool:web_fetch":
199
+ return "web";
200
+ case "tool:browser":
201
+ return "browser";
202
+ case "tool:sandbox":
203
+ return "code";
204
+ case "tool:image":
205
+ case "asset:image":
206
+ return "image";
207
+ case "asset:video":
208
+ case "film":
209
+ case "widget:video":
210
+ return "video";
211
+ case "asset:voice":
212
+ return "speech";
213
+ case "field:audio":
214
+ return "listening";
215
+ case "tool:http":
216
+ case "mcp":
217
+ case "connections":
218
+ case "field:connection":
219
+ return "connectors";
220
+ case "field:image":
221
+ case "field:file":
222
+ case "field:file-read":
223
+ return "documents";
224
+ default:
225
+ return null;
226
+ }
227
+ }
228
+ export function standaloneEntry(def) {
229
+ const fit = standaloneFit(def);
230
+ const unavoidable = unavoidableSteps(def);
231
+ const missing = new Set();
232
+ const optional = new Set();
233
+ const needs = new Set();
234
+ const without = new Set();
235
+ for (const note of fit.notes) {
236
+ if (note.need.startsWith("plugin:")) {
237
+ needs.add(note.need.slice("plugin:".length));
238
+ continue;
239
+ }
240
+ if (note.need.startsWith("format:")) {
241
+ without.add(note.need.slice("format:".length));
242
+ continue;
243
+ }
244
+ const capability = capabilityOf(note.need);
245
+ if (!capability) {
246
+ continue;
247
+ }
248
+ if (note.hard && unavoidable.has(note.stepId)) {
249
+ missing.add(capability);
250
+ }
251
+ else {
252
+ optional.add(capability);
253
+ }
254
+ }
255
+ for (const c of missing) {
256
+ optional.delete(c);
257
+ }
258
+ return {
259
+ ...fit,
260
+ missing: [...missing],
261
+ optional: [...optional],
262
+ needs: [...needs].sort(),
263
+ without: [...without],
264
+ };
265
+ }
266
+ // --- the steps every run passes through ------------------------------------------------------
267
+ /** The steps every run passes through: without one of them the end is not reachable. */
268
+ export function unavoidableSteps(def) {
269
+ return def.steps.length ? unavoidableFrom(def, def.steps[0].id, {}) : new Set();
270
+ }
271
+ /**
272
+ * The steps every path from `from` to the end passes through. A rule on an answer in `known`
273
+ * goes one way; a rule on anything else may go either way.
274
+ */
275
+ export function unavoidableFrom(def, from, known) {
276
+ const index = new Map(def.steps.map((s, i) => [s.id, i]));
277
+ const start = index.get(from) ?? 0;
278
+ const successors = (i) => {
279
+ const out = [];
280
+ for (const rule of def.steps[i].next ?? []) {
281
+ if (isOtherwise(rule)) {
282
+ continue;
283
+ }
284
+ const target = rule.goto === "end" ? def.steps.length : (index.get(rule.goto) ?? -1);
285
+ if (rule.ask || !conditionsOf(rule.when).every((c) => c.field in known)) {
286
+ if (target >= 0) {
287
+ out.push(target);
288
+ }
289
+ continue;
290
+ }
291
+ if (ruleMatches(rule, known)) {
292
+ // The first rule that matches decides; nothing after it is tried.
293
+ return target >= 0 ? [...out, target] : out;
294
+ }
295
+ }
296
+ // No rule matching goes on to the "otherwise" step, else the next (or ends after the last).
297
+ out.push(otherwiseIndex(def, i, index));
298
+ return out;
299
+ };
300
+ const reachesEnd = (without) => {
301
+ if (without === start) {
302
+ return false;
303
+ }
304
+ const seen = new Set([start]);
305
+ const queue = [start];
306
+ while (queue.length) {
307
+ const i = queue.shift();
308
+ if (i >= def.steps.length) {
309
+ return true;
310
+ }
311
+ for (const j of successors(i)) {
312
+ if (j !== without && !seen.has(j)) {
313
+ seen.add(j);
314
+ queue.push(j);
315
+ }
316
+ }
317
+ }
318
+ return false;
319
+ };
320
+ return new Set(def.steps.filter((_, i) => !reachesEnd(i)).map((s) => s.id));
321
+ }
322
+ /** Where step `i` goes when none of its rules holds, as an index; the length = the end. */
323
+ export function otherwiseIndex(def, i, index) {
324
+ const goto = def.steps[i].next?.find(isOtherwise)?.goto;
325
+ if (goto === undefined) {
326
+ return i + 1;
327
+ }
328
+ return goto === "end" ? def.steps.length : (index.get(goto) ?? i + 1);
329
+ }
330
+ export function choicesOf(step) {
331
+ return step.fields.flatMap((f) => {
332
+ if (f.kind === "select" && f.options?.length) {
333
+ return [{ field: f.id, values: f.options }];
334
+ }
335
+ if (f.kind === "toggle") {
336
+ return [{ field: f.id, values: [true, false] }];
337
+ }
338
+ return [];
339
+ });
340
+ }
341
+ /**
342
+ * The answers on a page that lead to a step this runtime cannot run: with them the run would
343
+ * stop there, after what came before was paid for. `lacking` says per step what it lacks (model
344
+ * classes on a runtime, needs on a standalone site). The answers given already count; the page's
345
+ * other fields may still go either way. A choice whose every value leads there is left open: the
346
+ * run cannot go around it, and the start already warned. `closedFields` are closed as a whole
347
+ * (no values): a voice note nothing here can listen to.
348
+ */
349
+ export function closedChoicesFor(def, step, values, lacking, closedFields = () => null) {
350
+ const byId = new Map(def.steps.map((s) => [s.id, s]));
351
+ const known = Object.fromEntries(Object.entries(values).filter(([id]) => !step.fields.some((f) => f.id === id)));
352
+ const out = {};
353
+ for (const field of step.fields) {
354
+ const whole = closedFields(field);
355
+ if (whole) {
356
+ out[field.id] = { values: [], classes: whole };
357
+ }
358
+ }
359
+ for (const choice of choicesOf(step)) {
360
+ const closed = { values: [], classes: [] };
361
+ for (const value of choice.values) {
362
+ const ahead = unavoidableFrom(def, step.id, { ...known, [choice.field]: value });
363
+ const missing = [...ahead].flatMap((id) => {
364
+ const s = byId.get(id);
365
+ return s ? lacking(s) : [];
366
+ });
367
+ if (missing.length) {
368
+ closed.values.push(value);
369
+ closed.classes = [...new Set([...closed.classes, ...missing])];
370
+ }
371
+ }
372
+ if (closed.values.length && closed.values.length < choice.values.length) {
373
+ out[choice.field] = closed;
374
+ }
375
+ }
376
+ return out;
377
+ }
378
+ /** The answer a closed choice gets instead: its first value that stays open. */
379
+ export function openValue(step, field, closed) {
380
+ const choice = choicesOf(step).find((c) => c.field === field);
381
+ return choice?.values.find((v) => !closed.values.some((c) => String(c) === String(v)));
382
+ }
@@ -0,0 +1,14 @@
1
+ /**
2
+ * The definition and the package's `wizard.json` as JSON Schema, for editors and for checks
3
+ * outside this app. Written from the Zod schemas the app parses with (`pnpm schema`), so the two
4
+ * cannot drift; a test compares the published files with a fresh run.
5
+ *
6
+ * What JSON Schema cannot say stays with the app: the schema's refinements and `validateWizard`
7
+ * (ids, references between steps, templates). `wizards validate` checks both.
8
+ */
9
+ type JsonSchema = Record<string, unknown>;
10
+ /** A wizard's definition: what `get_wizard` returns and `replace_wizard` takes. */
11
+ export declare function wizardJsonSchema(): JsonSchema;
12
+ /** `wizard.json` in a `.wizard` package: the definition with what it needs from its project. */
13
+ export declare function packageJsonSchema(): JsonSchema;
14
+ export {};