@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,65 @@
1
+ /**
2
+ * What each AI client did with the MCP server since the runtime started: the test on the
3
+ * "Integrate" page waits for a client to show up, call a tool and show the widget. Kept in memory
4
+ * only; a restart starts the test over.
5
+ */
6
+ /** The ids the studio lists the AI apps by, and the names they give themselves (`clientInfo`). */
7
+ const CLIENT_NAMES = [
8
+ // Claude Desktop calls itself claude-ai, as claude.ai does.
9
+ ["claude-desktop", /claude[- ]?ai|claude desktop/i],
10
+ ["claude-ai", /claude[- ]?ai/i],
11
+ ["claude-code", /claude[- ]?code/i],
12
+ ["codex", /codex/i],
13
+ ["chatgpt", /openai|chatgpt/i],
14
+ ["cursor", /cursor/i],
15
+ // Cursor calls itself cursor-vscode.
16
+ ["vscode", /^(?!.*cursor).*(visual studio code|vs ?code)/i],
17
+ ["windsurf", /windsurf|codeium/i],
18
+ ["antigravity", /antigravity|\bagy\b/i],
19
+ ["goose", /goose/i],
20
+ ["openclaw", /openclaw/i],
21
+ ["lm-studio", /lm[- ]?studio/i],
22
+ ];
23
+ /** The apps a client's name stands for; mostly one. */
24
+ export function appIdsOf(client) {
25
+ return CLIENT_NAMES.filter(([, name]) => name.test(client)).map(([id]) => id);
26
+ }
27
+ const seen = new Map();
28
+ /** The name a client gave on `initialize`, by its sign-in: later requests do not repeat it. */
29
+ const names = new Map();
30
+ /** Notes one MCP request: its JSON-RPC messages, from the client signed in as `signIn`. */
31
+ export function noteRequest(tenantId, signIn, client, body) {
32
+ const messages = (Array.isArray(body) ? body : [body]).filter((m) => Boolean(m) && typeof m === "object");
33
+ const info = messages.find((m) => m.method === "initialize")?.params?.clientInfo;
34
+ const given = info?.title || info?.name;
35
+ if (given) {
36
+ names.set(signIn, given);
37
+ }
38
+ const name = names.get(signIn) ?? client;
39
+ const now = Date.now();
40
+ for (const id of appIdsOf(name)) {
41
+ const key = `${tenantId}\n${id}`;
42
+ const last = seen.get(key) ?? { at: now, toolAt: null, widgetAt: null };
43
+ last.at = now;
44
+ for (const m of messages) {
45
+ if (m.method === "tools/call") {
46
+ last.toolAt = now;
47
+ }
48
+ if (m.method === "resources/read" && String(m.params?.uri ?? "").startsWith("ui://")) {
49
+ last.widgetAt = now;
50
+ }
51
+ }
52
+ seen.set(key, last);
53
+ }
54
+ }
55
+ /** What the tenant's clients did, by app id. */
56
+ export function seenApps(tenantId) {
57
+ const out = {};
58
+ for (const [key, value] of seen) {
59
+ const [tenant, id] = key.split("\n");
60
+ if (tenant === tenantId) {
61
+ out[id] = value;
62
+ }
63
+ }
64
+ return out;
65
+ }
@@ -0,0 +1,572 @@
1
+ import { z } from "zod";
2
+ import { authoringGuide } from "../authoring/guide.js";
3
+ import { wizardOpSchema } from "../authoring/ops.js";
4
+ import { importFromRegistry, listConnectors, searchRegistry } from "../connectors/external.js";
5
+ import { RunConflict } from "../engine/runner.js";
6
+ import { pluginToolsOf } from "../plugins/registry.js";
7
+ import { publishAndSync, pushSharing } from "../services/cloud.js";
8
+ import { ServiceError } from "../services/errors.js";
9
+ import { deleteFile, listFiles, readFileText, writeFile } from "../services/files.js";
10
+ import { marketplaceWizard, searchMarketplace } from "../services/marketplace.js";
11
+ import { defaultProject, listProjects, ownedProject } from "../services/projects.js";
12
+ import { answerRunAsk, answerRunPage, controlRun, reviewRun, runReport, startRun, startTestRun, testRunReport, } from "../services/runs.js";
13
+ import { checkDraftWidget } from "../services/widgets.js";
14
+ import { createWizard, editWizard, listWizards, ownedWizard, parseDraft, shareUrl, studioUrl, updateWizardSettings, wizardState, writeDraft, } from "../services/wizards.js";
15
+ import { FLOW_VIEW_KEY, flowAppMeta, flowView } from "./flow-app.js";
16
+ const definition = z
17
+ .record(z.string(), z.unknown())
18
+ .describe("The complete wizard JSON as described by get_authoring_guide.");
19
+ const note = z
20
+ .string()
21
+ .max(500)
22
+ .optional()
23
+ .describe("One sentence for the person about what changed, in their language. Shown in the studio.");
24
+ const baseRevision = z
25
+ .number()
26
+ .int()
27
+ .min(0)
28
+ .describe("The revision you last read. A newer one on the server answers revision_conflict.");
29
+ function ok(value) {
30
+ return {
31
+ content: [{ type: "text", text: typeof value === "string" ? value : JSON.stringify(value) }],
32
+ };
33
+ }
34
+ function failure(err) {
35
+ let body;
36
+ if (err instanceof ServiceError) {
37
+ body = err.toJSON();
38
+ }
39
+ else if (err instanceof RunConflict) {
40
+ body = { error: err.message, code: "conflict" };
41
+ }
42
+ else if (err instanceof z.ZodError) {
43
+ body = { error: "Invalid input", code: "invalid", issues: err.issues };
44
+ }
45
+ else {
46
+ console.error("[mcp]", err);
47
+ body = { error: "Internal error", code: "internal" };
48
+ }
49
+ return { isError: true, content: [{ type: "text", text: JSON.stringify(body) }] };
50
+ }
51
+ /** Where a space comes from, as the person knows it: sent by their local install, or made here. */
52
+ function spaceFrom(p) {
53
+ return p.origin === "local" ? "your computer" : "here";
54
+ }
55
+ export function registerTools(server, who) {
56
+ const writer = { source: "mcp", client: who.client };
57
+ const tool = (name, scope, config, run) => {
58
+ if (!who.scopes.includes(scope)) {
59
+ return;
60
+ }
61
+ server.registerTool(name, {
62
+ title: config.title,
63
+ description: config.description,
64
+ inputSchema: config.input,
65
+ annotations: { readOnlyHint: config.readOnly ?? false, openWorldHint: false },
66
+ },
67
+ // The SDK has parsed `args` with `input` before this runs.
68
+ (async (args) => {
69
+ try {
70
+ return ok(await run(args));
71
+ }
72
+ catch (err) {
73
+ return failure(err);
74
+ }
75
+ }));
76
+ };
77
+ /** A tool whose result also opens the flow widget, in hosts that render MCP Apps. */
78
+ const appTool = (name, scope, config, run) => {
79
+ if (!who.scopes.includes(scope)) {
80
+ return;
81
+ }
82
+ server.registerTool(name, {
83
+ title: config.title,
84
+ description: config.description,
85
+ inputSchema: config.input,
86
+ annotations: { readOnlyHint: config.readOnly ?? false, openWorldHint: false },
87
+ _meta: flowAppMeta,
88
+ }, (async (args) => {
89
+ try {
90
+ const { result, view } = await run(args);
91
+ return {
92
+ ...ok(result),
93
+ structuredContent: result,
94
+ _meta: { [FLOW_VIEW_KEY]: view },
95
+ };
96
+ }
97
+ catch (err) {
98
+ return failure(err);
99
+ }
100
+ }));
101
+ };
102
+ // --- read ------------------------------------------------------------------
103
+ tool("get_authoring_guide", "wizards:read", {
104
+ title: "Authoring guide",
105
+ description: "Read this before writing a wizard: the JSON schema, field kinds, step types and tools, templates, design rules, and the MCP servers of the project.",
106
+ input: z.object({
107
+ projectId: z.string().optional().describe("Defaults to the person's first project."),
108
+ }),
109
+ readOnly: true,
110
+ }, async ({ projectId }) => {
111
+ const project = projectId
112
+ ? await ownedProject(who.userId, projectId)
113
+ : await defaultProject(who.userId);
114
+ return authoringGuide(project.mcpServers.map((s) => ({ id: s.id, name: s.name })), await listConnectors(project.id), await pluginToolsOf(who.tenantId));
115
+ });
116
+ // --- connectors ------------------------------------------------------------
117
+ tool("find_connectors", "wizards:read", {
118
+ title: "Find connectors",
119
+ description: "Search the integrations registry for a service that can be imported as a connector, from its OpenAPI spec or its MCP server.",
120
+ input: z.object({ query: z.string().min(1).max(200) }),
121
+ readOnly: true,
122
+ }, async ({ query }) => ({ services: await searchRegistry(query) }));
123
+ tool("list_connectors", "wizards:read", {
124
+ title: "List connectors",
125
+ description: "The connectors a project has imported, each with its actions.",
126
+ input: z.object({ projectId: z.string().optional() }),
127
+ readOnly: true,
128
+ }, async ({ projectId }) => {
129
+ const project = projectId
130
+ ? await ownedProject(who.userId, projectId)
131
+ : await defaultProject(who.userId);
132
+ return { projectId: project.id, connectors: await listConnectors(project.id) };
133
+ });
134
+ tool("import_connector", "wizards:write", {
135
+ title: "Import connector",
136
+ description: "Import a registry service into a project as a connector. Returns its id, tool prefix, how people connect and its actions. A wizard uses it through a connection { id, connector }.",
137
+ input: z.object({
138
+ projectId: z.string().optional(),
139
+ domain: z.string().describe("A domain from find_connectors, e.g. notion.com"),
140
+ kind: z.enum(["mcp", "openapi"]).optional(),
141
+ }),
142
+ }, async ({ projectId, domain, kind }) => {
143
+ const project = projectId
144
+ ? await ownedProject(who.userId, projectId)
145
+ : await defaultProject(who.userId);
146
+ return importFromRegistry(who.userId, project.id, { domain, kind });
147
+ });
148
+ tool("list_starters", "wizards:read", {
149
+ title: "List starters",
150
+ description: "Ready-made wizards to start from: first those the space's plugins bring (marked with the plugin), then the marketplace's (tweet with image, video ad, research briefing, dashboard, invoice, offer …), with what each makes and needs. Give a query to search them; without one you get the starters.",
151
+ input: z.object({ query: z.string().max(200).optional() }),
152
+ readOnly: true,
153
+ }, async ({ query }) => (await searchMarketplace({ q: query ?? "", lang: "de", limit: 30 })).entries
154
+ .filter((s) => s.usable && (query?.trim() || s.starter))
155
+ .map((s) => ({
156
+ id: s.id,
157
+ title: s.title,
158
+ pitch: s.pitch,
159
+ formats: s.formats,
160
+ useCases: s.useCases,
161
+ capabilities: s.capabilities,
162
+ ...(s.plugin ? { plugin: s.plugin.name } : {}),
163
+ // Not startable here: its plugins come with the Pro plan.
164
+ ...(s.needs?.length ? { needsPro: s.needs } : {}),
165
+ })));
166
+ tool("get_starter", "wizards:read", {
167
+ title: "Get starter",
168
+ description: "A starter's complete wizard JSON — the best example to copy from.",
169
+ input: z.object({ starterId: z.string() }),
170
+ readOnly: true,
171
+ }, async ({ starterId }) => {
172
+ const starter = await marketplaceWizard(starterId, "de");
173
+ if (!starter) {
174
+ throw new ServiceError("not_found", `There is no starter "${starterId}".`);
175
+ }
176
+ return starter.definition;
177
+ });
178
+ tool("list_projects", "wizards:read", {
179
+ title: "List projects",
180
+ description: "The person's projects, called spaces in the studio. Each holds wizards, a brand and MCP servers. Name a space by its name; where two share one, add where it comes from (`from`). Ids are for the tools: never show them to the person.",
181
+ input: z.object({}),
182
+ readOnly: true,
183
+ }, async () => (await listProjects(who.userId)).map((p) => ({
184
+ id: p.id,
185
+ name: p.name,
186
+ from: spaceFrom(p),
187
+ wizardCount: p.wizardCount,
188
+ })));
189
+ tool("list_wizards", "wizards:read", {
190
+ title: "List wizards",
191
+ description: "The person's wizards, newest first, each with its space's name and where that space comes from. Ids are for the tools: never show them to the person.",
192
+ input: z.object({ projectId: z.string().optional() }),
193
+ readOnly: true,
194
+ }, async ({ projectId }) => {
195
+ const spaces = new Map((await listProjects(who.userId)).map((p) => [p.id, p]));
196
+ return (await listWizards(who.userId, projectId)).map((w) => {
197
+ const space = spaces.get(w.projectId);
198
+ return {
199
+ id: w.id,
200
+ projectId: w.projectId,
201
+ space: space?.name ?? null,
202
+ spaceFrom: space ? spaceFrom(space) : null,
203
+ title: w.title,
204
+ revision: w.revision,
205
+ published: w.published,
206
+ updatedAt: w.updatedAt,
207
+ studioUrl: studioUrl(w.id),
208
+ };
209
+ });
210
+ });
211
+ tool("get_wizard", "wizards:read", {
212
+ title: "Get wizard",
213
+ description: "A wizard's draft with its revision and validator issues, whether it differs from the published version, and its links.",
214
+ input: z.object({ wizardId: z.string() }),
215
+ readOnly: true,
216
+ }, async ({ wizardId }) => {
217
+ const s = await wizardState(await ownedWizard(who.userId, wizardId));
218
+ return {
219
+ wizardId: s.id,
220
+ projectId: s.projectId,
221
+ revision: s.revision,
222
+ draft: s.draft,
223
+ issues: s.issues,
224
+ publishedVersion: s.publishedVersion,
225
+ dirty: s.dirty,
226
+ shareEnabled: s.shareEnabled,
227
+ dailyRunLimit: s.dailyRunLimit,
228
+ shareUrl: s.shareUrl,
229
+ studioUrl: s.studioUrl,
230
+ };
231
+ });
232
+ tool("validate_wizard", "wizards:read", {
233
+ title: "Validate wizard",
234
+ description: "Check a wizard JSON without saving it. Returns ok and the issues.",
235
+ input: z.object({ definition }),
236
+ readOnly: true,
237
+ }, async (args) => {
238
+ try {
239
+ const { issues } = parseDraft(args.definition);
240
+ return { ok: issues.length === 0, issues };
241
+ }
242
+ catch (err) {
243
+ if (err instanceof ServiceError && err.code === "invalid") {
244
+ return { ok: false, issues: err.data.issues };
245
+ }
246
+ throw err;
247
+ }
248
+ });
249
+ // --- write -----------------------------------------------------------------
250
+ tool("create_wizard", "wizards:write", {
251
+ title: "Create wizard",
252
+ description: "Create a wizard from your JSON, or copy a starter. The draft may still have issues; fix them with edit_wizard.",
253
+ input: z.object({
254
+ projectId: z.string().optional().describe("Defaults to the person's first project."),
255
+ definition: definition.optional(),
256
+ starterId: z.string().optional().describe("Copy this starter instead of sending JSON."),
257
+ note,
258
+ }),
259
+ }, async (args) => {
260
+ const created = await createWizard(who.userId, args, writer);
261
+ return {
262
+ wizardId: created.id,
263
+ revision: created.revision,
264
+ issues: created.issues,
265
+ studioUrl: created.studioUrl,
266
+ };
267
+ });
268
+ tool("edit_wizard", "wizards:write", {
269
+ title: "Edit wizard",
270
+ description: `Apply ops to the draft atomically, in order:
271
+ - set_meta {title?, description?, avatar?, intro? (null removes)}
272
+ - set_lists {lists} / set_connections {connections}: replace the wizard's lists or connections as a whole
273
+ - upsert_step {step (complete), before?|after?}: replaces the step with that id, else inserts it (default: before the final result step)
274
+ - remove_step {stepId}
275
+ - move_step {stepId, before|after}
276
+ Returns the new revision and the issues.`,
277
+ input: z.object({
278
+ wizardId: z.string(),
279
+ baseRevision,
280
+ ops: z.array(wizardOpSchema).min(1).max(50),
281
+ note,
282
+ }),
283
+ }, async ({ wizardId, ...input }) => {
284
+ const { revision, issues } = await editWizard(who.userId, wizardId, input, writer);
285
+ return { revision, issues };
286
+ });
287
+ tool("replace_wizard", "wizards:write", {
288
+ title: "Replace wizard",
289
+ description: "Replace the whole draft. Use edit_wizard for smaller changes.",
290
+ input: z.object({ wizardId: z.string(), baseRevision, definition, note }),
291
+ }, async ({ wizardId, ...input }) => {
292
+ const { revision, issues } = await writeDraft(who.userId, wizardId, input, writer);
293
+ return { revision, issues };
294
+ });
295
+ // --- publish ---------------------------------------------------------------
296
+ tool("publish_wizard", "wizards:publish", {
297
+ title: "Publish wizard",
298
+ description: "Publish the draft as a new version behind the share link. Refused while the draft has issues. Only when the person asked for it.",
299
+ input: z.object({ wizardId: z.string() }),
300
+ }, async ({ wizardId }) => publishAndSync(who.userId, wizardId));
301
+ tool("set_sharing", "wizards:publish", {
302
+ title: "Set sharing",
303
+ description: "Turn the share link on or off, or change how many runs it allows per day.",
304
+ input: z.object({
305
+ wizardId: z.string(),
306
+ enabled: z.boolean().optional(),
307
+ dailyRunLimit: z.number().int().min(1).max(10_000).optional(),
308
+ }),
309
+ }, async ({ wizardId, enabled, dailyRunLimit }) => {
310
+ const w = await updateWizardSettings(who.userId, wizardId, {
311
+ shareEnabled: enabled,
312
+ dailyRunLimit,
313
+ });
314
+ await pushSharing(who.userId, wizardId);
315
+ return {
316
+ shareEnabled: w.shareEnabled,
317
+ dailyRunLimit: w.dailyRunLimit,
318
+ shareUrl: shareUrl(w.shareToken),
319
+ };
320
+ });
321
+ // --- test runs ---------------------------------------------------------------
322
+ appTool("start_test_run", "runs:test", {
323
+ title: "Start test run",
324
+ description: "Run the draft once with your answers. Spends the person's credits (short copy + image about 15, research about 150, video about 250). Pages are filled from `answers`, reviews accepted when acceptReviews is true. Follow it with get_test_run. Shows the flow with the run on it.",
325
+ input: z.object({
326
+ wizardId: z.string(),
327
+ answers: z
328
+ .record(z.string(), z.unknown())
329
+ .default({})
330
+ .describe("Field id → value, for every page (field ids are unique in a wizard). Items fields take an array of row objects."),
331
+ acceptReviews: z.boolean().default(true),
332
+ }),
333
+ }, async ({ wizardId, answers, acceptReviews }) => {
334
+ const { runId } = await startTestRun(who.userId, wizardId, { answers, acceptReviews });
335
+ const report = await runReport(who.userId, runId, 2, "test");
336
+ return {
337
+ result: report,
338
+ view: await flowView(who.userId, wizardId, { shows: "draft", run: report }),
339
+ };
340
+ });
341
+ tool("get_test_run", "runs:test", {
342
+ title: "Get test run",
343
+ description: "Status, recent events, outputs (text clipped) with signed download links valid one hour, credits spent, and what the run waits for.",
344
+ input: z.object({
345
+ runId: z.string(),
346
+ waitSeconds: z
347
+ .number()
348
+ .int()
349
+ .min(0)
350
+ .max(45)
351
+ .default(0)
352
+ .describe("Wait up to this long while the run is still working."),
353
+ }),
354
+ readOnly: true,
355
+ }, async ({ runId, waitSeconds }) => testRunReport(who.userId, runId, waitSeconds));
356
+ // --- using wizards: the flow, and runs of the published version -------------
357
+ appTool("show_wizard", "wizards:read", {
358
+ title: "Show wizard",
359
+ description: "Show a wizard as its flow diagram: its pages, AI steps, reviews and branches. The published version when there is one, else the draft. Also returns the steps as text.",
360
+ input: z.object({
361
+ wizardId: z.string(),
362
+ version: z.enum(["published", "draft"]).optional().describe("Default: published, if any."),
363
+ }),
364
+ readOnly: true,
365
+ }, async ({ wizardId, version }) => {
366
+ const view = await flowView(who.userId, wizardId, { shows: version });
367
+ return {
368
+ result: {
369
+ wizardId,
370
+ title: view.wizard.title,
371
+ shows: view.wizard.shows,
372
+ published: view.wizard.published,
373
+ steps: view.definition.steps.map((s) => ({
374
+ id: s.id,
375
+ type: s.type,
376
+ title: s.title,
377
+ ...(s.type === "page"
378
+ ? { fields: s.fields.map((f) => ({ id: f.id, label: f.label, kind: f.kind })) }
379
+ : {}),
380
+ })),
381
+ },
382
+ view,
383
+ };
384
+ });
385
+ appTool("run_wizard", "runs:test", {
386
+ title: "Run wizard",
387
+ description: `Start a run of a published wizard for the person, here in the chat. Spends credits like any run.
388
+ Start it right away — no show_wizard first: the widget shows the wizard's pages and the person can answer there. What the person already said goes to the first page with answer_page, using the field ids in waitingFor. Then follow waitingFor:
389
+ - page: ask the person for the fields with inChat=true, in order, answer_page; fields with inChat=false (files, recordings, signatures) need the run page at browserUrl. A field with a when is asked only while its condition holds on the answers so far (shown says so for what is known now); fields the wizard decided against are not listed
390
+ - review: show the outputs, then review_step
391
+ - ask: answer_ask (allow/skip a change in a connected account) or the run page for a sign-in
392
+ While status is running, get_run with waitSeconds. Hosts with MCP Apps also show the run as a widget the person can answer in.`,
393
+ input: z.object({
394
+ wizardId: z.string(),
395
+ answers: z.record(z.string(), z.unknown()).default({}),
396
+ }),
397
+ }, async ({ wizardId, answers }) => {
398
+ const { runId, refused } = await startRun(who.userId, wizardId, answers);
399
+ const report = await runReport(who.userId, runId, 2);
400
+ return {
401
+ result: { ...report, ...(refused ? { refusedAnswers: refused } : {}) },
402
+ view: await flowView(who.userId, wizardId, { run: report }),
403
+ };
404
+ });
405
+ const waitSeconds = z
406
+ .number()
407
+ .int()
408
+ .min(0)
409
+ .max(45)
410
+ .default(0)
411
+ .describe("Wait up to this long while the run is still working.");
412
+ tool("get_run", "runs:test", {
413
+ title: "Get run",
414
+ description: "A run's status, what it waits for, its outputs (text clipped) with signed download links valid one hour, and the credits it spent.",
415
+ input: z.object({ runId: z.string(), waitSeconds }),
416
+ readOnly: true,
417
+ }, async ({ runId, waitSeconds }) => runReport(who.userId, runId, waitSeconds));
418
+ tool("answer_page", "runs:test", {
419
+ title: "Answer page",
420
+ description: "Fill the page a run waits for: field id → value (items: an array of row objects; toggle: true/false; multiselect: an array; slot: one of the offered times, as given). Returns the run, after waitSeconds.",
421
+ input: z.object({
422
+ runId: z.string(),
423
+ stepId: z.string().describe("waitingFor.page"),
424
+ values: z.record(z.string(), z.unknown()),
425
+ waitSeconds,
426
+ }),
427
+ }, async ({ runId, stepId, values, waitSeconds }) => {
428
+ await answerRunPage(who.userId, runId, stepId, values);
429
+ return runReport(who.userId, runId, waitSeconds);
430
+ });
431
+ tool("review_step", "runs:test", {
432
+ title: "Review step",
433
+ description: "Answer the review a run waits for: accept (optionally with edited texts, step id → text, when the review is editable) or regenerate one step it shows, with a note what to change.",
434
+ input: z.object({
435
+ runId: z.string(),
436
+ stepId: z.string().describe("waitingFor.review"),
437
+ action: z.discriminatedUnion("type", [
438
+ z.object({
439
+ type: z.literal("accept"),
440
+ edits: z.record(z.string(), z.string()).optional(),
441
+ }),
442
+ z.object({
443
+ type: z.literal("regenerate"),
444
+ target: z.string().describe("One of waitingFor.show."),
445
+ note: z.string().max(2000),
446
+ }),
447
+ ]),
448
+ waitSeconds,
449
+ }),
450
+ }, async ({ runId, stepId, action, waitSeconds }) => {
451
+ await reviewRun(who.userId, runId, stepId, action);
452
+ return runReport(who.userId, runId, waitSeconds);
453
+ });
454
+ tool("answer_ask", "runs:test", {
455
+ title: "Answer confirmation",
456
+ description: "A running step asks before it changes something in a connected account (waitingFor.ask, kind confirm): allow it once, or skip it. Ask the person first.",
457
+ input: z.object({
458
+ runId: z.string(),
459
+ askId: z.string(),
460
+ answer: z.enum(["allow", "skip"]),
461
+ waitSeconds,
462
+ }),
463
+ }, async ({ runId, askId, answer, waitSeconds }) => {
464
+ await answerRunAsk(who.userId, runId, askId, answer);
465
+ return runReport(who.userId, runId, waitSeconds);
466
+ });
467
+ tool("control_run", "runs:test", {
468
+ title: "Control run",
469
+ description: "back: return to the previous page or review. retry: run the failed step again. cancel: stop the run.",
470
+ input: z.object({ runId: z.string(), action: z.enum(["back", "retry", "cancel"]) }),
471
+ }, async ({ runId, action }) => {
472
+ await controlRun(who.userId, runId, action);
473
+ return runReport(who.userId, runId);
474
+ });
475
+ // --- workspace (widget code, libraries, reference data) --------------------
476
+ tool("list_files", "wizards:read", {
477
+ title: "List workspace files",
478
+ description: "The wizard's workspace: widget HTML/JS/CSS, vendored libraries, reference data. Runs use a snapshot of it.",
479
+ input: z.object({ wizardId: z.string() }),
480
+ readOnly: true,
481
+ }, async ({ wizardId }) => (await listFiles(who.userId, wizardId)).map(({ path, mime, size }) => ({ path, mime, size })));
482
+ tool("read_file", "wizards:read", {
483
+ title: "Read workspace file",
484
+ description: "A workspace file as text (binary files are described, not returned).",
485
+ input: z.object({ wizardId: z.string(), path: z.string() }),
486
+ readOnly: true,
487
+ }, async ({ wizardId, path }) => readFileText(who.userId, wizardId, path));
488
+ tool("write_file", "wizards:write", {
489
+ title: "Write workspace file",
490
+ description: "Create or overwrite a workspace file: `content` for text (HTML, JS, CSS, JSON, CSV, SVG) or `base64` for binary (images, fonts). Max 5 MB per file, 25 MB per workspace. A widget may only use files from here — no network when it runs.",
491
+ input: z.object({
492
+ wizardId: z.string(),
493
+ path: z.string().describe('Relative path, e.g. "weather/index.html" or "lib/d3.min.js".'),
494
+ content: z.string().optional(),
495
+ base64: z.string().optional(),
496
+ mime: z.string().optional(),
497
+ }),
498
+ }, async ({ wizardId, path, content, base64, mime }) => {
499
+ if ((content === undefined) === (base64 === undefined)) {
500
+ throw new ServiceError("invalid", "Pass either content or base64.");
501
+ }
502
+ return writeFile(who.userId, wizardId, path, content ?? Buffer.from(base64 ?? "", "base64"), mime);
503
+ });
504
+ tool("delete_file", "wizards:write", {
505
+ title: "Delete workspace file",
506
+ description: "Remove a file from the workspace.",
507
+ input: z.object({ wizardId: z.string(), path: z.string() }),
508
+ }, async ({ wizardId, path }) => {
509
+ await deleteFile(who.userId, wizardId, path);
510
+ return { ok: true };
511
+ });
512
+ if (who.scopes.includes("wizards:read")) {
513
+ const input = z.object({
514
+ wizardId: z.string(),
515
+ stepId: z.string().describe("A widget step of the draft."),
516
+ data: z
517
+ .record(z.string(), z.unknown())
518
+ .optional()
519
+ .describe("Data to show instead of the step's sample file."),
520
+ });
521
+ server.registerTool("check_widget", {
522
+ title: "Check widget",
523
+ description: "Load a widget step of the draft in a real browser with its sample data: script errors, the timeline it registered (seconds, for the MP4 export) and a screenshot.",
524
+ inputSchema: input,
525
+ annotations: { readOnlyHint: true, openWorldHint: false },
526
+ }, (async ({ wizardId, stepId, data }) => {
527
+ try {
528
+ const r = await checkDraftWidget(who.userId, wizardId, stepId, data);
529
+ return {
530
+ content: [
531
+ {
532
+ type: "text",
533
+ text: JSON.stringify({
534
+ errors: r.errors,
535
+ timelineSeconds: r.duration,
536
+ size: r.size,
537
+ bundleBytes: r.bytes,
538
+ }),
539
+ },
540
+ { type: "image", data: Buffer.from(r.png).toString("base64"), mimeType: "image/png" },
541
+ ],
542
+ };
543
+ }
544
+ catch (err) {
545
+ return failure(err);
546
+ }
547
+ }));
548
+ }
549
+ }
550
+ export function registerPrompts(server) {
551
+ server.registerPrompt("design_wizard", {
552
+ title: "Design a wizard",
553
+ description: "Build an engenty wizard from a description.",
554
+ argsSchema: z.object({ description: z.string().describe("What the wizard should do.") }),
555
+ }, ({ description }) => ({
556
+ messages: [
557
+ {
558
+ role: "user",
559
+ content: {
560
+ type: "text",
561
+ text: `Build an engenty wizard: ${description}
562
+
563
+ 1. Call get_authoring_guide and follow its rules.
564
+ 2. Pick the closest starter (list_starters, get_starter) as an example.
565
+ 3. create_wizard with a short note; fix every issue with edit_wizard.
566
+ 4. start_test_run with realistic answers, then get_test_run with waitSeconds until it is done; fix what looks wrong.
567
+ 5. Give me the studioUrl and a short summary. Publish only if I ask.`,
568
+ },
569
+ },
570
+ ],
571
+ }));
572
+ }