@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,231 @@
1
+ import { spawnSync } from "node:child_process";
2
+ import { existsSync, lstatSync, readdirSync, readlinkSync, rmdirSync, rmSync } from "node:fs";
3
+ import { homedir } from "node:os";
4
+ import { dirname, join, resolve, sep } from "node:path";
5
+ import * as p from "@clack/prompts";
6
+ import { LOGIN_LABEL, present, removeUnit, UNIT, unloadLoginItem } from "./autostart.js";
7
+ import { apps as allApps } from "./connect.js";
8
+ import { findWizardsProcesses, stopProcesses } from "./processes.js";
9
+ import { settings } from "./start.js";
10
+ import { bad, cyan, dim, no, ok } from "./ui.js";
11
+ export const realSystem = () => ({
12
+ userHome: homedir(),
13
+ platform: process.platform,
14
+ env: process.env,
15
+ interactive: Boolean(process.stdin.isTTY && process.stdout.isTTY),
16
+ apps: allApps,
17
+ processes: findWizardsProcesses,
18
+ stop: (pids) => stopProcesses(pids),
19
+ unloadLoginItem,
20
+ removeUnit,
21
+ });
22
+ /** Parts of the install folder that are the person's: kept or deleted with the data. */
23
+ const WITH_DATA = [".env", ".env.local", "plugins"];
24
+ function loginItemPath(system) {
25
+ if (system.platform === "darwin") {
26
+ return join(system.userHome, "Library", "LaunchAgents", `${LOGIN_LABEL}.plist`);
27
+ }
28
+ if (system.platform === "linux") {
29
+ const config = system.env.XDG_CONFIG_HOME || join(system.userHome, ".config");
30
+ return join(config, "systemd", "user", UNIT);
31
+ }
32
+ return null;
33
+ }
34
+ /** The links install.sh put into ~/.local/bin that point into the install. */
35
+ function ourLinks(home, system) {
36
+ return ["wizards", "engenty-wizards"]
37
+ .map((name) => join(system.userHome, ".local", "bin", name))
38
+ .filter((link) => {
39
+ try {
40
+ return (lstatSync(link).isSymbolicLink() &&
41
+ resolve(dirname(link), readlinkSync(link)).startsWith(home + sep));
42
+ }
43
+ catch {
44
+ return false;
45
+ }
46
+ });
47
+ }
48
+ /** Works out what an uninstall takes away, without changing anything. */
49
+ export async function makePlan(paths, system) {
50
+ const apps = [];
51
+ for (const app of system.apps(paths)) {
52
+ if (await app.connected().catch(() => false)) {
53
+ apps.push(app);
54
+ }
55
+ }
56
+ const item = loginItemPath(system);
57
+ let loginItem = null;
58
+ try {
59
+ loginItem = item && present(item) ? item : null;
60
+ }
61
+ catch {
62
+ // Can't look: count it as there, so the uninstall tries and says so.
63
+ loginItem = item;
64
+ }
65
+ const { dataDir } = settings(paths, system.env);
66
+ const program = [];
67
+ const data = existsSync(dataDir) ? [dataDir] : [];
68
+ for (const name of existsSync(paths.home) ? readdirSync(paths.home) : []) {
69
+ const path = join(paths.home, name);
70
+ if (path === dataDir) {
71
+ continue;
72
+ }
73
+ const empty = name === "plugins" && readdirSync(path).length === 0;
74
+ (WITH_DATA.includes(name) && !empty ? data : program).push(path);
75
+ }
76
+ return {
77
+ home: paths.home,
78
+ apps,
79
+ loginItem,
80
+ processes: system.processes(paths.home),
81
+ program,
82
+ links: ourLinks(paths.home, system),
83
+ data,
84
+ };
85
+ }
86
+ /** Size of a folder as `du` counts it, e.g. " (805 MB)"; "" where it can't tell. */
87
+ function size(path) {
88
+ const kb = Number(spawnSync("du", ["-sk", path], { encoding: "utf8" }).stdout?.split(/\s/)[0]);
89
+ return kb > 0 ? ` (${kb < 1024 ? `${kb} KB` : `${Math.round(kb / 1024)} MB`})` : "";
90
+ }
91
+ const processes = (n) => `${n} running process${n === 1 ? "" : "es"}`;
92
+ /** `wizards uninstall [--dry-run] [--yes] [--delete-data]`. */
93
+ export async function uninstall(paths, options, system = realSystem()) {
94
+ const t = (path) => path.startsWith(system.userHome + sep) ? `~${path.slice(system.userHome.length)}` : path;
95
+ if (!options.dryRun && !options.yes && !system.interactive) {
96
+ console.error("The uninstall asks before it deletes anything, and there is no terminal to ask in.\n" +
97
+ "Run it with --yes (your data is kept), --yes --delete-data, or --dry-run to only look.");
98
+ return 2;
99
+ }
100
+ const plan = await makePlan(paths, system);
101
+ const steps = [
102
+ ...plan.apps.map((app) => `Disconnect ${app.name}`),
103
+ ...(plan.loginItem ? [`Remove the login item ${t(plan.loginItem)}`] : []),
104
+ ...(plan.processes.length ? [`Stop ${processes(plan.processes.length)}`] : []),
105
+ ...(plan.program.length ? [`Delete the program in ${t(plan.home)}${size(plan.home)}`] : []),
106
+ ...plan.links.map((link) => `Delete the command ${t(link)}`),
107
+ ];
108
+ if (!steps.length && !plan.data.length) {
109
+ console.log(`${ok} engenty wizards isn’t installed here.`);
110
+ return 0;
111
+ }
112
+ if (steps.length) {
113
+ console.log("\nThis removes engenty wizards:");
114
+ }
115
+ for (const step of steps) {
116
+ console.log(` ${no} ${step}`);
117
+ }
118
+ if (plan.data.length) {
119
+ console.log(`\nYour data: ${plan.data.map((path) => t(path) + size(path)).join(", ")}`);
120
+ console.log(dim(" Kept unless you choose to delete it. A reinstall picks it up again."));
121
+ }
122
+ console.log("");
123
+ if (options.dryRun) {
124
+ console.log(dim("Nothing was changed (--dry-run)."));
125
+ return 0;
126
+ }
127
+ let deleteData = options.yes && options.deleteData;
128
+ if (!options.yes) {
129
+ if (plan.data.length) {
130
+ const answer = await p.confirm({
131
+ message: "Delete your data too? Your wizards, runs and results are gone for good.",
132
+ initialValue: false,
133
+ });
134
+ if (p.isCancel(answer)) {
135
+ return 130;
136
+ }
137
+ deleteData = answer;
138
+ }
139
+ const go = await p.confirm({
140
+ message: deleteData ? "Uninstall and delete your data now?" : "Uninstall now?",
141
+ });
142
+ if (p.isCancel(go) || !go) {
143
+ p.cancel("Nothing was changed.");
144
+ return 130;
145
+ }
146
+ }
147
+ const failed = (what, error) => console.log(`${bad} ${what}: ${error.message.split("\n")[0]}`);
148
+ for (const app of plan.apps) {
149
+ const result = await app
150
+ .disconnect()
151
+ .catch((error) => ({ ok: false, message: error.message }));
152
+ console.log(result.ok ? `${ok} Disconnected ${app.name}` : `${bad} ${app.name}: ${result.message}`);
153
+ }
154
+ if (plan.loginItem) {
155
+ try {
156
+ if (system.platform === "darwin") {
157
+ await system.unloadLoginItem();
158
+ rmSync(plan.loginItem, { force: true });
159
+ }
160
+ else {
161
+ await system.removeUnit(plan.loginItem);
162
+ }
163
+ console.log(`${ok} Removed the login item`);
164
+ }
165
+ catch (error) {
166
+ failed("The login item", error);
167
+ }
168
+ }
169
+ // Twice: an AI app's `wizards mcp` may start the studio again meanwhile.
170
+ for (let round = 0; round < 2; round++) {
171
+ const running = system.processes(paths.home);
172
+ if (running.length && !(await system.stop(running.map((proc) => proc.pid))).length) {
173
+ console.log(`${ok} Stopped ${processes(running.length)}`);
174
+ }
175
+ }
176
+ for (const path of [...plan.program, ...plan.links, ...(deleteData ? plan.data : [])]) {
177
+ try {
178
+ rmSync(path, { recursive: true, force: true });
179
+ }
180
+ catch (error) {
181
+ failed(`Couldn’t delete ${t(path)}`, error);
182
+ }
183
+ }
184
+ for (const dir of [plan.home, join(system.userHome, ".engenty")]) {
185
+ try {
186
+ rmdirSync(dir);
187
+ }
188
+ catch {
189
+ // not empty, or not there
190
+ }
191
+ }
192
+ // A second look: what is still there.
193
+ const after = await makePlan(paths, system);
194
+ const left = [
195
+ ...after.apps.map((app) => `${app.name} still lists the wizards: ${cyan(`npx wizards disconnect ${app.id}`)}`),
196
+ ...(after.loginItem ? [t(after.loginItem)] : []),
197
+ ...after.processes.map((proc) => `process ${proc.pid}: ${cyan(`kill -9 ${proc.pid}`)}`),
198
+ ...[...after.program, ...after.links, ...(deleteData ? after.data : [])].map(t),
199
+ ];
200
+ if (!deleteData && after.data.length) {
201
+ console.log(`${ok} Kept your data: ${after.data.map(t).join(", ")}`);
202
+ }
203
+ if (left.length) {
204
+ console.log(`\n${bad} Still there:`);
205
+ for (const line of left) {
206
+ console.log(` ${line}`);
207
+ }
208
+ return 1;
209
+ }
210
+ console.log(`\n${ok} engenty wizards is uninstalled.\n`);
211
+ return 0;
212
+ }
213
+ /** The options of `uninstall` from its command line; a message when something is off. */
214
+ export function parseUninstall(argv) {
215
+ const options = { dryRun: false, yes: false, deleteData: false };
216
+ for (const arg of argv) {
217
+ if (arg === "--dry-run") {
218
+ options.dryRun = true;
219
+ }
220
+ else if (arg === "--yes" || arg === "-y") {
221
+ options.yes = true;
222
+ }
223
+ else if (arg === "--delete-data") {
224
+ options.deleteData = true;
225
+ }
226
+ else if (arg !== "uninstall") {
227
+ return `Unknown option ${arg}. The uninstall takes --dry-run, --yes and --delete-data.`;
228
+ }
229
+ }
230
+ return options;
231
+ }
@@ -0,0 +1,86 @@
1
+ import { spawn } from "node:child_process";
2
+ import { mkdtempSync, rmSync, writeFileSync } from "node:fs";
3
+ import { join } from "node:path";
4
+ import { autoUpdatePolicy, noteUpdated } from "./autoupdate.js";
5
+ import { installedByScript, isCheckout, readInstallNote, writeInstallNote, } from "./home.js";
6
+ import { runningRuntime, settings } from "./start.js";
7
+ import { restart } from "./status.js";
8
+ import { cmd, cyan, no, ok } from "./ui.js";
9
+ import { currentVersion } from "./versions.js";
10
+ /** The installer this install was made with; it also updates one. */
11
+ const INSTALLER = "https://engenty.ai/install.sh";
12
+ async function installer(into) {
13
+ const source = process.env.ENGENTY_WIZARDS_INSTALLER?.trim() || INSTALLER;
14
+ if (!/^https?:\/\//.test(source)) {
15
+ return source;
16
+ }
17
+ const response = await fetch(source);
18
+ const text = response.ok ? await response.text() : "";
19
+ // The address answers with the studio's page while a server has no installer yet.
20
+ if (!text.startsWith("#!")) {
21
+ throw new Error(`${source} didn’t return the installer.`);
22
+ }
23
+ const file = join(into, "install.sh");
24
+ writeFileSync(file, text, { mode: 0o700 });
25
+ return file;
26
+ }
27
+ /**
28
+ * Brings an install made by install.sh to the newest version by running the installer again
29
+ * without its questions: Node, the runtime and the command. With `restart`, a runtime that runs
30
+ * restarts into the new version; otherwise it says how.
31
+ */
32
+ export async function update(paths, options = {}) {
33
+ if (!installedByScript(paths)) {
34
+ console.log(isCheckout()
35
+ ? `This is a source checkout. To update: ${cyan("git pull && pnpm install && pnpm build")}`
36
+ : `This copy runs from npm. To update: ${cyan("npx wizards@latest")}`);
37
+ return 0;
38
+ }
39
+ const before = currentVersion(paths);
40
+ const tmp = mkdtempSync(join(paths.home, "update-"));
41
+ try {
42
+ const script = await installer(tmp);
43
+ const code = await new Promise((done) => {
44
+ const child = spawn("bash", [script, "--no-setup"], { stdio: "inherit" });
45
+ child.on("error", () => done(127));
46
+ child.on("exit", (exit) => done(exit ?? 1));
47
+ });
48
+ if (code !== 0) {
49
+ return code;
50
+ }
51
+ }
52
+ catch (error) {
53
+ console.error(error.message);
54
+ return 1;
55
+ }
56
+ finally {
57
+ rmSync(tmp, { recursive: true, force: true });
58
+ }
59
+ const after = currentVersion(paths);
60
+ if (before && after) {
61
+ noteUpdated(paths, before, after);
62
+ }
63
+ if (await runningRuntime(settings(paths).dataDir)) {
64
+ if (options.restart) {
65
+ return restart(paths);
66
+ }
67
+ console.log(` Installed. Restart engenty wizards to use the new version: ${cmd("restart")}`);
68
+ }
69
+ return 0;
70
+ }
71
+ /** `wizards autoupdate [on|off]`: whether updates come by themselves (autoupdate.ts). */
72
+ export function autoUpdateCommand(paths, value) {
73
+ if (value && value !== "on" && value !== "off") {
74
+ console.error(`Use ${cmd("autoupdate on")} or ${cmd("autoupdate off")}.`);
75
+ return 2;
76
+ }
77
+ const installed = installedByScript(paths);
78
+ if (value && installed) {
79
+ writeInstallNote({ ...readInstallNote(paths), autoUpdate: value === "on" }, paths);
80
+ }
81
+ const policy = autoUpdatePolicy(paths, { installed });
82
+ console.log(policy.on
83
+ ? `${ok} Updates come by themselves: downloaded in the background, used from the next start.`
84
+ : `${no} Updates don’t come by themselves: ${policy.reason}. To update now: ${cmd("update")}`);
85
+ return value && !installed ? 1 : 0;
86
+ }
@@ -0,0 +1,75 @@
1
+ import { readdirSync, readFileSync, statSync } from "node:fs";
2
+ import { basename, dirname, join, relative } from "node:path";
3
+ import { parseWizard } from "@engenty-wizards/shared/definition";
4
+ import { PACKAGE_FILES, PACKAGE_MANIFEST } from "@engenty-wizards/shared/wizard-package";
5
+ import { json, readManifest, readPackage } from "../services/package-file.js";
6
+ import { bad, dim, ok } from "./ui.js";
7
+ function workspace(folder) {
8
+ const root = join(folder, PACKAGE_FILES);
9
+ try {
10
+ return readdirSync(root, { recursive: true, withFileTypes: true })
11
+ .filter((entry) => entry.isFile() && entry.name !== ".DS_Store")
12
+ .map((entry) => relative(root, join(entry.parentPath, entry.name)).split("\\").join("/"));
13
+ }
14
+ catch {
15
+ return [];
16
+ }
17
+ }
18
+ /** The definition and the workspace's paths, read the way the import reads them. */
19
+ function read(path) {
20
+ const folder = statSync(path).isDirectory()
21
+ ? path
22
+ : basename(path) === PACKAGE_MANIFEST
23
+ ? dirname(path)
24
+ : null;
25
+ if (folder) {
26
+ const manifest = readManifest(json(readFileSync(join(folder, PACKAGE_MANIFEST))));
27
+ return { definition: manifest.definition, files: workspace(folder) };
28
+ }
29
+ const { manifest, files } = readPackage(readFileSync(path));
30
+ return { definition: manifest.definition, files: files.map((f) => f.path) };
31
+ }
32
+ export function validatePath(path) {
33
+ let given;
34
+ try {
35
+ given = read(path);
36
+ }
37
+ catch (err) {
38
+ const message = err.code === "ENOENT"
39
+ ? "No such file or folder."
40
+ : err.message;
41
+ return { path, ok: false, issues: [{ message }] };
42
+ }
43
+ const parsed = parseWizard(given.definition, given.files);
44
+ return {
45
+ path,
46
+ ok: parsed.ok && parsed.issues.length === 0,
47
+ steps: parsed.ok ? parsed.wizard.steps.length : undefined,
48
+ files: given.files.length,
49
+ issues: parsed.issues,
50
+ };
51
+ }
52
+ export function validateCommand(paths, asJson) {
53
+ if (!paths.length) {
54
+ console.error("Give a path: a .wizard file, an unpacked package or a wizard JSON file.");
55
+ return 2;
56
+ }
57
+ const results = paths.map(validatePath);
58
+ if (asJson) {
59
+ console.log(JSON.stringify(results, null, 2));
60
+ }
61
+ else {
62
+ for (const r of results) {
63
+ if (r.ok) {
64
+ console.log(`${ok} ${r.path} ${dim(`${r.steps} ${r.steps === 1 ? "step" : "steps"}, ${r.files} ${r.files === 1 ? "file" : "files"}`)}`);
65
+ continue;
66
+ }
67
+ const count = `${r.issues.length} ${r.issues.length === 1 ? "issue" : "issues"}`;
68
+ console.log(`${bad} ${r.path} ${dim(count)}`);
69
+ for (const issue of r.issues) {
70
+ console.log(` ${issue.message}`);
71
+ }
72
+ }
73
+ }
74
+ return results.every((r) => r.ok) ? 0 : 1;
75
+ }
@@ -0,0 +1,123 @@
1
+ import { existsSync, lstatSync, mkdirSync, readdirSync, readFileSync, readlinkSync, renameSync, rmSync, symlinkSync, } from "node:fs";
2
+ import { join } from "node:path";
3
+ /**
4
+ * The runtimes of an install made by install.sh, one folder per version, side by side:
5
+ *
6
+ * runtime/<version>/ an npm prefix: node_modules/@engenty/wizards-runtime (up to 0.7.4
7
+ * node_modules/wizards), package.json, package-lock.json
8
+ * runtime/current → <version>, the one `bin/wizards` starts
9
+ * runtime/node_modules → current/node_modules, for commands written before the versions
10
+ *
11
+ * Up to 0.6.2 `runtime/` itself was the prefix; `switchTo` moves such an install into its
12
+ * version folder first. A process keeps the files of the version it started with.
13
+ */
14
+ const VERSION = /^\d+\.\d+\.\d+$/;
15
+ /** The npm package of the runtime. Up to 0.7.4 it was `wizards`, now the launcher `npx` runs. */
16
+ export const RUNTIME_PACKAGE = "@engenty/wizards-runtime";
17
+ /** The runtime's name up to 0.7.4, and where a command or an update of then looks for it. */
18
+ const LEGACY_PACKAGE = "wizards";
19
+ export const runtimeDir = (paths, version) => join(paths.runtime, version);
20
+ const currentLink = (paths) => join(paths.runtime, "current");
21
+ const modules = (paths) => join(paths.runtime, "node_modules");
22
+ function versionOf(dir) {
23
+ try {
24
+ const { version } = JSON.parse(readFileSync(join(dir, "package.json"), "utf8"));
25
+ return typeof version === "string" ? version : null;
26
+ }
27
+ catch {
28
+ return null;
29
+ }
30
+ }
31
+ /**
32
+ * The version of the runtime in an npm prefix; null when there is none. A `wizards` without the
33
+ * runtime in it is the launcher, which an update of 0.7.4 or older fetches as the new version.
34
+ */
35
+ export function versionIn(prefix) {
36
+ const legacy = join(prefix, "node_modules", LEGACY_PACKAGE);
37
+ return (versionOf(join(prefix, "node_modules", RUNTIME_PACKAGE)) ??
38
+ (existsSync(join(legacy, "apps", "runtime")) ? versionOf(legacy) : null));
39
+ }
40
+ const isLink = (path) => {
41
+ try {
42
+ return lstatSync(path).isSymbolicLink();
43
+ }
44
+ catch {
45
+ return false;
46
+ }
47
+ };
48
+ /** The version `bin/wizards` starts; null without a runtime. */
49
+ export function currentVersion(paths) {
50
+ if (isLink(currentLink(paths))) {
51
+ return versionIn(join(paths.runtime, readlinkSync(currentLink(paths))));
52
+ }
53
+ return versionIn(paths.runtime);
54
+ }
55
+ /** The version folders there are, each with a complete package in it. */
56
+ export function installedVersions(paths) {
57
+ try {
58
+ return readdirSync(paths.runtime)
59
+ .filter((name) => VERSION.test(name) && versionIn(join(paths.runtime, name)) === name)
60
+ .sort();
61
+ }
62
+ catch {
63
+ return [];
64
+ }
65
+ }
66
+ /** Points `link` at `target` in one step: a new link renamed over the old one. */
67
+ function link(target, path) {
68
+ const tmp = `${path}.${process.pid}.tmp`;
69
+ rmSync(tmp, { force: true });
70
+ symlinkSync(target, tmp);
71
+ renameSync(tmp, path);
72
+ }
73
+ /** Moves a runtime from before the version folders into `runtime/<version>/`. */
74
+ function adoptLegacy(paths) {
75
+ const version = versionIn(paths.runtime);
76
+ if (isLink(modules(paths)) || !version) {
77
+ return;
78
+ }
79
+ const into = runtimeDir(paths, version);
80
+ rmSync(into, { recursive: true, force: true });
81
+ mkdirSync(into, { recursive: true });
82
+ for (const name of ["node_modules", "package.json", "package-lock.json"]) {
83
+ if (existsSync(join(paths.runtime, name))) {
84
+ renameSync(join(paths.runtime, name), join(into, name));
85
+ }
86
+ }
87
+ link(version, currentLink(paths));
88
+ }
89
+ /** Makes `version` the one `bin/wizards` starts from now on. */
90
+ export function switchTo(paths, version) {
91
+ if (versionIn(runtimeDir(paths, version)) !== version) {
92
+ throw new Error(`${runtimeDir(paths, version)} holds no complete runtime ${version}.`);
93
+ }
94
+ adoptLegacy(paths);
95
+ link(version, currentLink(paths));
96
+ link(join("current", "node_modules"), modules(paths));
97
+ }
98
+ /** Deletes the version folders other than `keep` and the current one; returns what went. */
99
+ export function prune(paths, keep) {
100
+ const current = currentVersion(paths);
101
+ const stale = installedVersions(paths).filter((v) => v !== current && !keep.includes(v));
102
+ for (const version of stale) {
103
+ rmSync(runtimeDir(paths, version), { recursive: true, force: true });
104
+ }
105
+ return stale;
106
+ }
107
+ /** Puts an npm prefix installed elsewhere into its version folder (never the current one). */
108
+ export function promote(paths, staged, version) {
109
+ if (versionIn(staged) !== version) {
110
+ throw new Error(`The download holds version ${versionIn(staged) ?? "none"}, not ${version}.`);
111
+ }
112
+ if (currentVersion(paths) === version) {
113
+ rmSync(staged, { recursive: true, force: true });
114
+ return;
115
+ }
116
+ // As install.sh leaves it: a command of 0.7.4 or older finds the runtime under its old name.
117
+ const legacy = join(staged, "node_modules", LEGACY_PACKAGE);
118
+ if (!existsSync(legacy)) {
119
+ symlinkSync(RUNTIME_PACKAGE, legacy);
120
+ }
121
+ rmSync(runtimeDir(paths, version), { recursive: true, force: true });
122
+ renameSync(staged, runtimeDir(paths, version));
123
+ }
@@ -0,0 +1,86 @@
1
+ import { createGuardedFetch } from "../engenty/connections-external/net/guarded-fetch.js";
2
+ import { githubConnector } from "../engenty/connections-github/connector.js";
3
+ import { googleConnectors } from "../engenty/connections-google/definitions.js";
4
+ import { GOOGLE_OAUTH2 } from "../engenty/connections-google/shared.js";
5
+ import { hubspotConnector } from "../engenty/connections-hubspot/connector.js";
6
+ import { microsoftOneDriveConnector } from "../engenty/connections-microsoft/onedrive.js";
7
+ import { microsoftOutlookConnector } from "../engenty/connections-microsoft/outlook.js";
8
+ import { s3Connector } from "../engenty/connections-s3/s3.js";
9
+ import { hasOAuth2ClientCredentials, } from "../engenty/connections-sdk/oauth2.js";
10
+ import { registerConnectorDefinition } from "../engenty/connections-sdk/registry.js";
11
+ import { slackConnector } from "../engenty/connections-slack/connector.js";
12
+ import { managed } from "../manage.js";
13
+ import { gmailConnector as mailGmail } from "./gmail.js";
14
+ import { imapConnector } from "./imap.js";
15
+ import { outlookConnector as mailOutlook } from "./outlook.js";
16
+ import { googleThroughAccount } from "./via-account.js";
17
+ /**
18
+ * engenty's own connectors, as engenty ships them: Gmail, Drive, Calendar, Contacts, Outlook,
19
+ * OneDrive, Slack, GitHub, HubSpot, S3. Every project has them; an OAuth one can be connected
20
+ * once its client is configured.
21
+ */
22
+ export const BUILTIN_CONNECTORS = [
23
+ ...googleConnectors,
24
+ microsoftOutlookConnector,
25
+ microsoftOneDriveConnector,
26
+ slackConnector,
27
+ githubConnector,
28
+ hubspotConnector,
29
+ s3Connector,
30
+ ];
31
+ /** The connectors behind a connection of kind "mail": one read-only shape for any mailbox. */
32
+ export const MAIL_CONNECTORS = [mailGmail, mailOutlook, imapConnector];
33
+ // One registry for all of them, so an imported connector can never take a built-in's id.
34
+ for (const connector of [...BUILTIN_CONNECTORS, ...MAIL_CONNECTORS]) {
35
+ registerConnectorDefinition(connector);
36
+ }
37
+ export function builtinConnector(id) {
38
+ return BUILTIN_CONNECTORS.find((c) => c.id === id);
39
+ }
40
+ /**
41
+ * engenty names OAuth clients `<VENDOR>_OAUTH_CLIENT_ID`. Google and Microsoft allow one client
42
+ * several redirect addresses, so the client this product signs people in with (`<VENDOR>_CLIENT_ID`)
43
+ * serves connections too. GitHub and Slack tie a client to one address: they need their own.
44
+ */
45
+ export const resolveEnv = async (key) => {
46
+ const own = process.env[key]?.trim();
47
+ if (own || !/^(GOOGLE|MICROSOFT)_OAUTH_/.test(key)) {
48
+ return own || undefined;
49
+ }
50
+ return process.env[key.replace("_OAUTH_", "_")]?.trim() || undefined;
51
+ };
52
+ /** Whether a person can connect an account with this connector right now. */
53
+ export async function usable(connector) {
54
+ if (connector.auth.kind !== "oauth2") {
55
+ return connector.auth.kind === "api_key";
56
+ }
57
+ // A connector that registers its own OAuth client needs none configured.
58
+ return (connector.auth.oauth2.dynamicClientRegistration === true ||
59
+ (await hasOAuth2ClientCredentials(connector.auth.oauth2, resolveEnv)) ||
60
+ viaAccount(connector));
61
+ }
62
+ /**
63
+ * A Google connector on a local install without a Google client of its own: it connects through
64
+ * the Manage-App of the linked account, when that one offers it. Offered before an account is
65
+ * linked too; connecting then asks to link it first.
66
+ */
67
+ export async function viaAccount(connector) {
68
+ return (!managed &&
69
+ connector.auth.kind === "oauth2" &&
70
+ connector.auth.oauth2 === GOOGLE_OAUTH2 &&
71
+ !(await hasOAuth2ClientCredentials(connector.auth.oauth2, resolveEnv)) &&
72
+ (await googleThroughAccount()));
73
+ }
74
+ /** What the server's owner has to set for an OAuth connector that is not usable yet. */
75
+ export function missingSetup(connector) {
76
+ if (connector.auth.kind !== "oauth2") {
77
+ return null;
78
+ }
79
+ const { clientIdEnv, clientSecretEnv } = connector.auth.oauth2;
80
+ return clientIdEnv && clientSecretEnv ? `${clientIdEnv}, ${clientSecretEnv}` : null;
81
+ }
82
+ /**
83
+ * Connector actions reach addresses that come from a person or a spec (an S3 endpoint, an API's
84
+ * base URL): every request is checked to stay on the public internet.
85
+ */
86
+ export const connectorFetch = createGuardedFetch();