@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,66 @@
1
+ import { z } from "zod";
2
+ import { DEFINITION_VERSION, wizardSchema } from "./definition.js";
3
+ import { manifestSchema, PACKAGE_SCHEMA_URL, WIZARD_SCHEMA_URL } from "./wizard-package.js";
4
+ const DIALECT = "https://json-schema.org/draft/2020-12/schema";
5
+ /** `$comment` is the one place a validator ignores; an unknown `$license` keyword would trip Ajv's strict mode. */
6
+ const LICENSE_COMMENT = "MIT License. Copyright (c) 2026 Matthias Platzer.";
7
+ const SCHEMA_PROPERTY = {
8
+ type: "string",
9
+ description: "The JSON Schema an editor checks this file against; the app does not read it.",
10
+ };
11
+ /**
12
+ * Objects take no other keys. The app drops an unknown key without a word, so a typo would
13
+ * vanish on the first save; an editor says so instead. Loose objects (a surface component's
14
+ * props) stay open.
15
+ */
16
+ function closeObjects(ctx) {
17
+ const def = ctx.zodSchema._zod.def;
18
+ if (def.type === "object" && def.catchall === undefined) {
19
+ ctx.jsonSchema.additionalProperties = false;
20
+ }
21
+ }
22
+ function generate(schema) {
23
+ const { $schema: _, ...rest } = z.toJSONSchema(schema, {
24
+ io: "input",
25
+ target: "draft-2020-12",
26
+ override: closeObjects,
27
+ });
28
+ if (JSON.stringify(rest).includes('"$ref"')) {
29
+ // The package schema embeds this one under $defs; a reference of its own would point wrong.
30
+ throw new Error("The wizard schema has a $ref; embed it differently.");
31
+ }
32
+ return rest;
33
+ }
34
+ function withSchemaProperty(schema) {
35
+ const properties = schema.properties;
36
+ return { ...schema, properties: { $schema: SCHEMA_PROPERTY, ...properties } };
37
+ }
38
+ /** A wizard's definition: what `get_wizard` returns and `replace_wizard` takes. */
39
+ export function wizardJsonSchema() {
40
+ return {
41
+ $schema: DIALECT,
42
+ $id: WIZARD_SCHEMA_URL,
43
+ $comment: LICENSE_COMMENT,
44
+ title: "engenty.wizards wizard definition",
45
+ description: `A wizard's definition, version ${DEFINITION_VERSION}. Checked by \`wizards validate\`, which also checks what this schema cannot say: ids, references between steps and templates.`,
46
+ ...withSchemaProperty(generate(wizardSchema)),
47
+ };
48
+ }
49
+ /** `wizard.json` in a `.wizard` package: the definition with what it needs from its project. */
50
+ export function packageJsonSchema() {
51
+ const manifest = generate(manifestSchema);
52
+ const properties = manifest.properties;
53
+ return {
54
+ $schema: DIALECT,
55
+ $id: PACKAGE_SCHEMA_URL,
56
+ $comment: LICENSE_COMMENT,
57
+ title: "engenty.wizards package manifest (wizard.json)",
58
+ description: "wizard.json in a .wizard package — a zip with this file and the wizard's workspace under files/.",
59
+ ...manifest,
60
+ properties: {
61
+ ...properties,
62
+ definition: { $ref: "#/$defs/definition" },
63
+ },
64
+ $defs: { definition: withSchemaProperty(generate(wizardSchema)) },
65
+ };
66
+ }
@@ -0,0 +1,199 @@
1
+ import { z } from "zod";
2
+ /**
3
+ * Knowledge: what a space holds for its wizards' steps to look up. Pages (Markdown, with sub-pages),
4
+ * tables (typed columns; FAQ is a format of one) and files that could not be read into either.
5
+ * Categories run across all of them: typed properties a step filters on before it searches.
6
+ */
7
+ export declare const CATEGORY_TYPES: readonly ["choice", "date", "number", "text", "boolean"];
8
+ export type CategoryType = (typeof CATEGORY_TYPES)[number];
9
+ /** A value of a choice, how many items have it, and whether it has a summary. */
10
+ export interface CategoryValueInfo {
11
+ id: string;
12
+ value: string;
13
+ count: number;
14
+ summary: boolean;
15
+ }
16
+ export interface SpaceCategory {
17
+ id: string;
18
+ name: string;
19
+ type: CategoryType;
20
+ /** A number's unit: `h`, `€`, `kg`. */
21
+ unit: string | null;
22
+ /** A choice: several values per item. */
23
+ multiple: boolean;
24
+ /** A choice whose values are ranked: their order is the rank. */
25
+ ordered: boolean;
26
+ /** Where its values come from, in a few words. */
27
+ hint: string | null;
28
+ /** The plugin that brought it. */
29
+ origin: string | null;
30
+ /** Proposed, not taken yet: never filled until a person takes it. */
31
+ proposed: boolean;
32
+ /** A column of a table whose cells are its values. */
33
+ tableId: string | null;
34
+ columnId: string | null;
35
+ /** How many items have it. */
36
+ count: number;
37
+ /** A choice's values, in their order. */
38
+ values: CategoryValueInfo[];
39
+ /** A date's or a number's lowest and highest value (a date as `YYYY-MM-DD`). */
40
+ range: {
41
+ min: string | number;
42
+ max: string | number;
43
+ } | null;
44
+ /** Pairs of values that look like one written two ways ("Graz-Süd", "Graz Süd"), by id. */
45
+ alike: [string, string][];
46
+ }
47
+ /** A value as an item has it: a choice's value, a date as `YYYY-MM-DD`, a number, a text, yes/no. */
48
+ export type CategoryCell = string | number | boolean;
49
+ /** What an item has of one category. */
50
+ export interface ItemCategory {
51
+ categoryId: string;
52
+ /** A choice with several values has several. */
53
+ values: CategoryCell[];
54
+ by: "person" | "origin" | "model";
55
+ }
56
+ /** What a writer sets: by the category's name; a list for a choice with several values. */
57
+ export type CategoryInput = Record<string, CategoryCell | CategoryCell[] | null>;
58
+ export type KnowledgeKind = "page" | "table" | "file";
59
+ /** An item of Knowledge, as lists show it. Sub-pages stand under their page, not in the list. */
60
+ export interface KnowledgeItem {
61
+ /** `p:<id>`, `t:<id>`, `f:<id>`. */
62
+ key: string;
63
+ kind: KnowledgeKind;
64
+ id: string;
65
+ title: string;
66
+ /** How a step names it: `pages/handbuch/montage`, `tables/kettenprogramm`, `files/plan.dwg`. */
67
+ path: string;
68
+ /** A page's sub-pages. */
69
+ children: number;
70
+ /** A table's rows. */
71
+ rows: number | null;
72
+ format: "faq" | null;
73
+ /** What wrote it: a plugin's id and what it calls the source; null when a person did. */
74
+ origin: string | null;
75
+ originLabel: string | null;
76
+ /** A person changed what its origin wrote: the origin no longer writes it. */
77
+ kept: boolean;
78
+ /** Why a person should look at it; null when nothing is in doubt. */
79
+ review: string | null;
80
+ /** The file it was read from. */
81
+ fileId: string | null;
82
+ /** A file still being read, or that could not be read. */
83
+ status: "pending" | "ready" | "failed";
84
+ categories: ItemCategory[];
85
+ updatedAt: string;
86
+ }
87
+ export interface Knowledge {
88
+ items: KnowledgeItem[];
89
+ categories: SpaceCategory[];
90
+ /** The index finds by meaning too, not by keywords alone. */
91
+ embeddings: boolean;
92
+ /** A classifier checks what a search found. */
93
+ checked: boolean;
94
+ }
95
+ /** A value of a choice, opened: its summary and its table of contents, the items that have it. */
96
+ export interface KnowledgeValue {
97
+ id: string;
98
+ value: string;
99
+ category: {
100
+ id: string;
101
+ name: string;
102
+ };
103
+ summary: string | null;
104
+ summaryAt: string | null;
105
+ /** Pages (sub-pages too), tables and files that have the value. */
106
+ items: KnowledgeItem[];
107
+ /** Rows of tables that have it, by table. */
108
+ rows: {
109
+ tableId: string;
110
+ title: string;
111
+ count: number;
112
+ }[];
113
+ }
114
+ /** A page with what Knowledge knows about it, as the studio opens it. */
115
+ export interface KnowledgePage {
116
+ id: string;
117
+ path: string;
118
+ /** Its ancestors, outermost first. */
119
+ parents: {
120
+ id: string;
121
+ title: string;
122
+ }[];
123
+ children: {
124
+ id: string;
125
+ title: string;
126
+ path: string;
127
+ }[];
128
+ categories: ItemCategory[];
129
+ origin: string | null;
130
+ originLabel: string | null;
131
+ kept: boolean;
132
+ review: string | null;
133
+ file: {
134
+ id: string;
135
+ name: string;
136
+ mime: string;
137
+ } | null;
138
+ }
139
+ /**
140
+ * A filter on one category: a value (a choice is it, a text equals it, yes/no), one of several,
141
+ * or a range — numbers by `gte`/`lte`, dates by `after`/`before` (`YYYY-MM-DD`, both ends
142
+ * included), a text by `contains`, an ordered choice by `atLeast`.
143
+ */
144
+ export declare const whereValueSchema: z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>, z.ZodObject<{
145
+ gte: z.ZodOptional<z.ZodNumber>;
146
+ lte: z.ZodOptional<z.ZodNumber>;
147
+ after: z.ZodOptional<z.ZodString>;
148
+ before: z.ZodOptional<z.ZodString>;
149
+ contains: z.ZodOptional<z.ZodString>;
150
+ atLeast: z.ZodOptional<z.ZodString>;
151
+ }, z.core.$strict>]>;
152
+ export type WhereValue = z.infer<typeof whereValueSchema>;
153
+ /** Filters by the category's name; an item matches all of them. */
154
+ export declare const whereSchema: z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>, z.ZodObject<{
155
+ gte: z.ZodOptional<z.ZodNumber>;
156
+ lte: z.ZodOptional<z.ZodNumber>;
157
+ after: z.ZodOptional<z.ZodString>;
158
+ before: z.ZodOptional<z.ZodString>;
159
+ contains: z.ZodOptional<z.ZodString>;
160
+ atLeast: z.ZodOptional<z.ZodString>;
161
+ }, z.core.$strict>]>>;
162
+ export type Where = z.infer<typeof whereSchema>;
163
+ export interface KnowledgeHit {
164
+ /** `p:<id>`, `t:<id>` (a row of it), `f:<id>`, `v:<id>` (a value's summary), `d:<id>` (a
165
+ * document read before Knowledge had pages), `x:<plugin>:<key>` (a plugin's text). */
166
+ key: string;
167
+ kind: KnowledgeKind | "summary" | "document" | "plugin";
168
+ /** What the studio opens for it: `p:`, `t:` (a row's table), `f:`, `v:`; null for a plugin's text. */
169
+ open: string | null;
170
+ path: string;
171
+ title: string;
172
+ /** The categories as `name: value`. */
173
+ categories: string[];
174
+ /** The best section's headings, outermost first, joined by " › ". */
175
+ heading: string | null;
176
+ /** The page of the original it stands on. */
177
+ sheet: number | null;
178
+ /** A row of a table: its id. */
179
+ rowId: string | null;
180
+ text: string;
181
+ /** P(relevant) the classifier gave; null when nothing checked it. */
182
+ relevance: number | null;
183
+ /** Where the studio shows a plugin's text. */
184
+ link: string | null;
185
+ plugin: string | null;
186
+ }
187
+ export interface KnowledgeSearch {
188
+ hits: KnowledgeHit[];
189
+ /** How many units the keywords and the vectors found together, before the classifier. */
190
+ candidates: number;
191
+ /** A classifier judged the candidates; false: they keep the order the index gave them. */
192
+ checked: boolean;
193
+ /** Items the filter left, when there was one. */
194
+ filtered: number | null;
195
+ }
196
+ /** A day as `YYYY-MM-DD` from what a person or a source wrote: ISO, `14.03.2026`, a timestamp. */
197
+ export declare function dayOf(value: unknown): string | null;
198
+ /** A slug for a path: lower case, `-` between words, umlauts spelled out. */
199
+ export declare function slugOf(title: string): string;
@@ -0,0 +1,68 @@
1
+ import { z } from "zod";
2
+ /**
3
+ * Knowledge: what a space holds for its wizards' steps to look up. Pages (Markdown, with sub-pages),
4
+ * tables (typed columns; FAQ is a format of one) and files that could not be read into either.
5
+ * Categories run across all of them: typed properties a step filters on before it searches.
6
+ */
7
+ export const CATEGORY_TYPES = ["choice", "date", "number", "text", "boolean"];
8
+ // --- filters --------------------------------------------------------------------
9
+ /**
10
+ * A filter on one category: a value (a choice is it, a text equals it, yes/no), one of several,
11
+ * or a range — numbers by `gte`/`lte`, dates by `after`/`before` (`YYYY-MM-DD`, both ends
12
+ * included), a text by `contains`, an ordered choice by `atLeast`.
13
+ */
14
+ export const whereValueSchema = z.union([
15
+ z.string().max(200),
16
+ z.number(),
17
+ z.boolean(),
18
+ z.array(z.union([z.string().max(200), z.number()])).max(50),
19
+ z
20
+ .object({
21
+ gte: z.number().optional(),
22
+ lte: z.number().optional(),
23
+ after: z.string().max(40).optional(),
24
+ before: z.string().max(40).optional(),
25
+ contains: z.string().max(200).optional(),
26
+ atLeast: z.string().max(200).optional(),
27
+ })
28
+ .strict(),
29
+ ]);
30
+ /** Filters by the category's name; an item matches all of them. */
31
+ export const whereSchema = z.record(z.string().max(120), whereValueSchema);
32
+ /** A day as `YYYY-MM-DD` from what a person or a source wrote: ISO, `14.03.2026`, a timestamp. */
33
+ export function dayOf(value) {
34
+ if (typeof value === "number" && Number.isFinite(value)) {
35
+ const d = new Date(value);
36
+ return Number.isNaN(d.getTime()) ? null : d.toISOString().slice(0, 10);
37
+ }
38
+ if (typeof value !== "string") {
39
+ return null;
40
+ }
41
+ const s = value.trim();
42
+ const iso = /^(\d{4})-(\d{2})-(\d{2})/.exec(s);
43
+ if (iso) {
44
+ return `${iso[1]}-${iso[2]}-${iso[3]}`;
45
+ }
46
+ const de = /^(\d{1,2})\.(\d{1,2})\.(\d{2,4})/.exec(s);
47
+ if (de) {
48
+ const year = de[3].length === 2 ? `20${de[3]}` : de[3];
49
+ return `${year}-${de[2].padStart(2, "0")}-${de[1].padStart(2, "0")}`;
50
+ }
51
+ return null;
52
+ }
53
+ /** A slug for a path: lower case, `-` between words, umlauts spelled out. */
54
+ export function slugOf(title) {
55
+ return (title
56
+ .toLowerCase()
57
+ .replace(/ä/g, "ae")
58
+ .replace(/ö/g, "oe")
59
+ .replace(/ü/g, "ue")
60
+ .replace(/ß/g, "ss")
61
+ .replace(/§/g, "p")
62
+ .normalize("NFKD")
63
+ .replace(/[̀-ͯ]/g, "")
64
+ .replace(/[^a-z0-9]+/g, "-")
65
+ .replace(/^-+|-+$/g, "")
66
+ .slice(0, 60)
67
+ .replace(/-+$/, "") || "page");
68
+ }
@@ -0,0 +1,35 @@
1
+ import { type WizardDefinition } from "./definition.js";
2
+ import { type ItemFormat, type MarketplaceLang } from "./marketplace.js";
3
+ /** A step as the flow shows it: what happens there, not how — and where the flow branches. */
4
+ export interface OutlineStep {
5
+ id: string;
6
+ type: string;
7
+ title: string;
8
+ /** What a generate step makes. */
9
+ asset?: string;
10
+ /** A widget step that cuts a film. */
11
+ video?: boolean;
12
+ /** Where the flow goes on instead of the next step, and when. `to` is a step's id or `end`. */
13
+ branches?: {
14
+ to: string;
15
+ when: string;
16
+ }[];
17
+ }
18
+ /** What a person takes along at the end: each thing by its name, with the files it comes as. */
19
+ export interface EntryResult {
20
+ title: string;
21
+ kind: ItemFormat;
22
+ formats: string[];
23
+ }
24
+ /** What an entry's wizard is made of, as a reader sees it. */
25
+ export interface WizardOutline {
26
+ description: string;
27
+ outline: OutlineStep[];
28
+ results: EntryResult[];
29
+ /** The workspace files it starts with. */
30
+ files: string[];
31
+ }
32
+ export declare const outlineOf: (definition: WizardDefinition, lang: MarketplaceLang) => OutlineStep[];
33
+ export declare function resultsOf(definition: WizardDefinition): EntryResult[];
34
+ /** An entry's wizard as a reader sees it, in a language. */
35
+ export declare function wizardOutline(definition: WizardDefinition, files: string[], lang: MarketplaceLang): WizardOutline;
@@ -0,0 +1,107 @@
1
+ import { allFields, conditionsOf, listRef, } from "./definition.js";
2
+ import { marketLabel } from "./marketplace.js";
3
+ /** When a branch is taken, in words: the field's label stands for its id. */
4
+ function condition(definition, rule, lang) {
5
+ if (rule.ask) {
6
+ return rule.ask;
7
+ }
8
+ if (rule.when === undefined) {
9
+ return marketLabel("outline", "otherwise", lang);
10
+ }
11
+ const parts = conditionsOf(rule.when).map((c) => conditionText(definition, c, lang));
12
+ return parts.length
13
+ ? parts.reduce((first, second) => marketLabel("outline", "and", lang, { first, second }))
14
+ : "";
15
+ }
16
+ function conditionText(definition, c, lang) {
17
+ const { field, op, value } = c;
18
+ const name = allFields(definition).find((f) => f.id === field)?.label ?? field.split(".").pop() ?? field;
19
+ // A toggle is often labelled "Mit …" already.
20
+ const bare = name.replace(/^(mit|with)\s+/i, "");
21
+ const without = marketLabel("outline", "without", lang, { name: bare });
22
+ const withIt = marketLabel("outline", "with", lang, { name: bare });
23
+ // A toggle reads better as with / without than as "= true".
24
+ if (typeof value === "boolean" && (op === "equals" || op === "notEquals")) {
25
+ return (op === "equals") === value ? withIt : without;
26
+ }
27
+ const shown = Array.isArray(value) ? value.join(" / ") : String(value ?? "");
28
+ switch (op) {
29
+ case "equals":
30
+ return `${name}: ${shown}`;
31
+ case "notEquals":
32
+ return `${name} ≠ ${shown}`;
33
+ case "in":
34
+ return `${name}: ${shown}`;
35
+ case "notEmpty":
36
+ return withIt;
37
+ case "empty":
38
+ return without;
39
+ case "gt":
40
+ return `${name} > ${shown}`;
41
+ case "lt":
42
+ return `${name} < ${shown}`;
43
+ case "contains":
44
+ return marketLabel("outline", "contains", lang, { name, value: shown });
45
+ }
46
+ }
47
+ export const outlineOf = (definition, lang) => definition.steps.map((s) => ({
48
+ id: s.id,
49
+ type: s.type,
50
+ title: s.title,
51
+ ...(s.type === "generate" ? { asset: s.asset } : {}),
52
+ ...(s.type === "widget" && s.video ? { video: true } : {}),
53
+ ...(s.next?.length
54
+ ? {
55
+ branches: s.next.map((rule) => ({
56
+ to: rule.goto,
57
+ when: condition(definition, rule, lang),
58
+ })),
59
+ }
60
+ : {}),
61
+ }));
62
+ /** What a step hands over, as the marketplace sorts results. */
63
+ function resultKind(definition, from) {
64
+ if (listRef(from)) {
65
+ return "table";
66
+ }
67
+ const step = definition.steps.find((s) => s.id === from);
68
+ if (step?.type === "generate") {
69
+ return step.asset === "voice" ? "audio" : step.asset;
70
+ }
71
+ if (step?.type === "widget") {
72
+ return step.video ? "video" : "dashboard";
73
+ }
74
+ if (step?.type === "film") {
75
+ return "video";
76
+ }
77
+ return step?.type === "agent" && step.output.format === "json" ? "table" : "text";
78
+ }
79
+ export function resultsOf(definition) {
80
+ const out = [];
81
+ for (const step of definition.steps) {
82
+ if (step.type !== "result") {
83
+ continue;
84
+ }
85
+ for (const d of step.deliverables) {
86
+ const list = listRef(d.from);
87
+ const title = d.label ??
88
+ (list
89
+ ? definition.lists?.find((l) => l.id === list)?.title
90
+ : definition.steps.find((s) => s.id === d.from)?.title) ??
91
+ d.from;
92
+ if (!out.some((r) => r.title === title)) {
93
+ out.push({ title, kind: resultKind(definition, d.from), formats: d.formats });
94
+ }
95
+ }
96
+ }
97
+ return out;
98
+ }
99
+ /** An entry's wizard as a reader sees it, in a language. */
100
+ export function wizardOutline(definition, files, lang) {
101
+ return {
102
+ description: definition.description,
103
+ outline: outlineOf(definition, lang),
104
+ results: resultsOf(definition),
105
+ files,
106
+ };
107
+ }
@@ -0,0 +1,20 @@
1
+ import { type MarketplaceFilters, type MarketplacePage, type MarketplaceSummary } from "./marketplace.js";
2
+ /** What a query is looked up by: its words, without the ones that say nothing. */
3
+ export declare function searchTerms(query: string): string[];
4
+ /** From this many words on a query is a sentence: it shares some word with nearly every entry. */
5
+ export declare const SENTENCE_WORDS = 3;
6
+ export declare const isSentence: (query: string) => boolean;
7
+ /** How well an entry answers the query by its words; 0 when it does not at all. */
8
+ export declare function scoreEntry(entry: MarketplaceSummary, query: string): number;
9
+ /** The entries a query finds by its words, best first. An empty query keeps the list as it is. */
10
+ export declare function rankEntries<T extends MarketplaceSummary>(entries: readonly T[], query: string): T[];
11
+ /** Whether an entry passes the filters. An entry made for any industry passes every industry. */
12
+ export declare function matchesFilters(e: MarketplaceSummary, f: MarketplaceFilters): boolean;
13
+ /**
14
+ * A search as the marketplace answers it: the entries the words find, best first (an empty
15
+ * query keeps the order given), narrowed by the filters, one page of them, and the counts.
16
+ */
17
+ export declare function searchEntries<T extends MarketplaceSummary>(entries: readonly T[], query: string, filters?: MarketplaceFilters, page?: {
18
+ limit?: number;
19
+ offset?: number;
20
+ }): MarketplacePage<T>;
@@ -0,0 +1,136 @@
1
+ import { scoreCatalogEntry, tokenizeCatalogText, } from "./engenty/search-index/catalog-lexical.js";
2
+ import { marketLabels, } from "./marketplace.js";
3
+ /**
4
+ * Searching the marketplace by words: BM25 with prefixes and inflections, the scoring engenty's
5
+ * catalogs use. The marketplace answers every search with it; an app that cannot reach the
6
+ * marketplace searches what it keeps the same way.
7
+ */
8
+ const WEIGHTS = [
9
+ ["title", 10],
10
+ ["summary", 6],
11
+ ["category", 5],
12
+ ["tags", 3],
13
+ ];
14
+ /** One search term of an entry, scored on its own. */
15
+ const TERM_WEIGHT = [["term", 7]];
16
+ /**
17
+ * Words a sentence is full of and no entry is found by — in the form the search reads words in,
18
+ * so "für" is left out as "fur".
19
+ */
20
+ const STOP = new Set(tokenizeCatalogText(`aber als also am an auch auf aus bei bin bitte brauche brauchen braucht das dass dem den der
21
+ des die dies diese dieser doch du ein eine einem einen einer eines er es etwas fuer für gerne
22
+ habe haben hat ich ihr im in ist kann können koennen mache machen mag mein meine meinem meinen
23
+ meiner mich mir mit möchte moechte nach nicht noch nur oder sich sie sind soll suche suchen
24
+ sucht um und uns unser unsere vom von vor was wie will wir wird wo wollen zu zum zur
25
+ a about an and are as at be can do for from have how i in is it like looking me my need of on
26
+ or our that the this to want we what which who with would you your`));
27
+ const fold = (text) => text.replace(/ß/g, "ss");
28
+ /** What a query is looked up by: its words, without the ones that say nothing. */
29
+ export function searchTerms(query) {
30
+ const words = tokenizeCatalogText(fold(query));
31
+ const kept = words.filter((w) => !STOP.has(w));
32
+ return kept.length ? kept : words;
33
+ }
34
+ /** From this many words on a query is a sentence: it shares some word with nearly every entry. */
35
+ export const SENTENCE_WORDS = 3;
36
+ /** Of a sentence's finds by words, those with at least this share of the best score are kept. */
37
+ const SENTENCE_SHARE = 0.4;
38
+ export const isSentence = (query) => query.trim().split(/\s+/).filter(Boolean).length >= SENTENCE_WORDS;
39
+ const labels = (group, ids) => ids.flatMap((id) => marketLabels(group, id));
40
+ /** How well an entry answers the query by its words; 0 when it does not at all. */
41
+ export function scoreEntry(entry, query) {
42
+ const terms = searchTerms(query);
43
+ if (!terms.length) {
44
+ return 0;
45
+ }
46
+ const record = {
47
+ title: fold(entry.title),
48
+ summary: fold(entry.pitch),
49
+ category: labels("useCase", entry.useCases),
50
+ tags: [
51
+ ...labels("industry", entry.industries),
52
+ ...labels("format", entry.formats),
53
+ ...labels("capability", entry.capabilities),
54
+ ].map(fold),
55
+ };
56
+ let score = scoreCatalogEntry(record, terms.join(" "), WEIGHTS);
57
+ // An entry's own search terms: each word of the query counts once, by the term it fits best.
58
+ // Scored as one long text they would count for less the more of them an entry has.
59
+ const own = entry.terms.map((term) => ({ term: fold(term) }));
60
+ for (const word of terms) {
61
+ score += Math.max(0, ...own.map((t) => scoreCatalogEntry(t, word, TERM_WEIGHT)));
62
+ }
63
+ // German writes words together: "anzeige" is found inside "Videoanzeige" as well.
64
+ const text = tokenizeCatalogText(`${record.title} ${record.summary}`).join(" ");
65
+ const inside = terms.filter((term) => term.length >= 4 && text.includes(term)).length;
66
+ return score + inside * 2;
67
+ }
68
+ /** The entries a query finds by its words, best first. An empty query keeps the list as it is. */
69
+ export function rankEntries(entries, query) {
70
+ if (!query.trim()) {
71
+ return [...entries];
72
+ }
73
+ const rows = entries
74
+ .map((entry) => ({ entry, score: scoreEntry(entry, query) }))
75
+ .filter((row) => row.score > 0)
76
+ .sort((a, b) => b.score - a.score);
77
+ // A sentence shares some word with nearly every entry: only what comes close to the best counts.
78
+ const least = isSentence(query) ? (rows[0]?.score ?? 0) * SENTENCE_SHARE : 0;
79
+ return rows.filter((row) => row.score >= least).map((row) => row.entry);
80
+ }
81
+ /** Whether an entry passes the filters. An entry made for any industry passes every industry. */
82
+ export function matchesFilters(e, f) {
83
+ return ((!f.useCase || e.useCases.includes(f.useCase)) &&
84
+ (!f.industry ||
85
+ e.industries.includes(f.industry) ||
86
+ (f.industry !== "any" && e.industries.includes("any"))) &&
87
+ (!f.format || e.formats.includes(f.format)) &&
88
+ (!f.capability || e.capabilities.includes(f.capability)) &&
89
+ (!f.plan || (e.plan ?? "free") === f.plan));
90
+ }
91
+ const FACETS = {
92
+ useCase: (e) => e.useCases,
93
+ industry: (e) => e.industries,
94
+ format: (e) => e.formats,
95
+ capability: (e) => e.capabilities,
96
+ plan: (e) => [e.plan ?? "free"],
97
+ };
98
+ /**
99
+ * Per option of each filter, the found entries it would leave with the other filters as they
100
+ * are. An option no entry has at all is left out.
101
+ */
102
+ function facetsOf(all, found, filters) {
103
+ const facets = {
104
+ useCase: {},
105
+ industry: {},
106
+ format: {},
107
+ capability: {},
108
+ plan: {},
109
+ };
110
+ for (const key of Object.keys(FACETS)) {
111
+ const options = new Set(all.flatMap(FACETS[key]));
112
+ const counts = facets[key];
113
+ for (const option of options) {
114
+ counts[option] = found.filter((e) => matchesFilters(e, {
115
+ ...filters,
116
+ [key]: option,
117
+ })).length;
118
+ }
119
+ }
120
+ return facets;
121
+ }
122
+ /**
123
+ * A search as the marketplace answers it: the entries the words find, best first (an empty
124
+ * query keeps the order given), narrowed by the filters, one page of them, and the counts.
125
+ */
126
+ export function searchEntries(entries, query, filters = {}, page = {}) {
127
+ const found = rankEntries(entries, query);
128
+ const shown = found.filter((e) => matchesFilters(e, filters));
129
+ const offset = Math.max(0, page.offset ?? 0);
130
+ return {
131
+ entries: shown.slice(offset, offset + Math.max(1, page.limit ?? 60)),
132
+ total: shown.length,
133
+ all: entries.length,
134
+ facets: facetsOf(entries, found, filters),
135
+ };
136
+ }