@engenty/wizards-runtime 0.7.11 → 0.9.0

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 (257) hide show
  1. package/README.md +5 -1
  2. package/apps/runtime/dist/agents/architect.js +2 -2
  3. package/apps/runtime/dist/agents/studio-assistant.js +1 -1
  4. package/apps/runtime/dist/agents/website.js +1 -1
  5. package/apps/runtime/dist/app.js +1 -1
  6. package/apps/runtime/dist/assistant/browser.js +1 -1
  7. package/apps/runtime/dist/authoring/guide.js +16 -4
  8. package/apps/runtime/dist/authoring/ops.js +1 -1
  9. package/apps/runtime/dist/cli/exec.js +4 -1
  10. package/apps/runtime/dist/cli/features.js +1 -1
  11. package/apps/runtime/dist/cli/validate.js +2 -2
  12. package/apps/runtime/dist/connectors/builtin.js +4 -2
  13. package/apps/runtime/dist/connectors/external.js +1 -1
  14. package/apps/runtime/dist/connectors/index.js +37 -6
  15. package/apps/runtime/dist/connectors/smtp.js +221 -0
  16. package/apps/runtime/dist/connectors/via-account.js +1 -1
  17. package/apps/runtime/dist/credits/estimate.js +1 -1
  18. package/apps/runtime/dist/db/migrations/tenant/0018_share_job.sql +18 -0
  19. package/apps/runtime/dist/db/migrations/tenant/meta/0018_snapshot.json +3460 -0
  20. package/apps/runtime/dist/db/migrations/tenant/meta/_journal.json +7 -0
  21. package/apps/runtime/dist/db/schema.js +19 -0
  22. package/apps/runtime/dist/docs/dev/index.md +25 -13
  23. package/apps/runtime/dist/docs/dev/integration/index.md +1 -1
  24. package/apps/runtime/dist/docs/dev/integration/openui.md +1 -1
  25. package/apps/runtime/dist/docs/dev/integration/own-ui.md +2 -2
  26. package/apps/runtime/dist/docs/dev/meta.json +8 -2
  27. package/apps/runtime/dist/docs/dev/plugins/examples.md +2 -3
  28. package/apps/runtime/dist/docs/dev/plugins/studio.md +5 -6
  29. package/apps/runtime/dist/docs/dev/plugins/styling.md +10 -7
  30. package/apps/runtime/dist/docs/dev/wizard-format/agent-steps.md +112 -0
  31. package/apps/runtime/dist/docs/dev/wizard-format/branches.md +63 -0
  32. package/apps/runtime/dist/docs/dev/wizard-format/film-steps.md +47 -0
  33. package/apps/runtime/dist/docs/dev/wizard-format/generate-steps.md +57 -0
  34. package/apps/runtime/dist/docs/dev/wizard-format/index.md +188 -0
  35. package/apps/runtime/dist/docs/dev/wizard-format/lists-and-connections.md +65 -0
  36. package/apps/runtime/dist/docs/dev/wizard-format/meta.json +19 -0
  37. package/apps/runtime/dist/docs/dev/wizard-format/pages-and-fields.md +102 -0
  38. package/apps/runtime/dist/docs/dev/wizard-format/review-and-result.md +64 -0
  39. package/apps/runtime/dist/docs/dev/wizard-format/templates.md +57 -0
  40. package/apps/runtime/dist/docs/dev/wizard-format/validate.md +63 -0
  41. package/apps/runtime/dist/docs/dev/wizard-format/views-and-widgets.md +103 -0
  42. package/apps/runtime/dist/docs/dev/wizard-format/wizard-file.md +147 -0
  43. package/apps/runtime/dist/docs/user/build-a-wizard.md +2 -2
  44. package/apps/runtime/dist/docs/user/run.md +21 -4
  45. package/apps/runtime/dist/docs/user/space.md +14 -10
  46. package/apps/runtime/dist/docs/user/steps.md +26 -1
  47. package/apps/runtime/dist/docs/user/test-and-share.md +3 -2
  48. package/apps/runtime/dist/documents/parse.js +1 -1
  49. package/apps/runtime/dist/engine/decide.js +1 -1
  50. package/apps/runtime/dist/engine/events.js +1 -1
  51. package/apps/runtime/dist/engine/input.js +3 -3
  52. package/apps/runtime/dist/engine/prepare.js +1 -1
  53. package/apps/runtime/dist/engine/requirements.js +25 -10
  54. package/apps/runtime/dist/engine/runner.js +23 -14
  55. package/apps/runtime/dist/engine/steps.js +6 -6
  56. package/apps/runtime/dist/engine/surface.js +3 -3
  57. package/apps/runtime/dist/engine/template.js +4 -4
  58. package/apps/runtime/dist/env.js +5 -0
  59. package/apps/runtime/dist/features.js +1 -1
  60. package/apps/runtime/dist/film/project.js +2 -2
  61. package/apps/runtime/dist/film/step.js +2 -2
  62. package/apps/runtime/dist/harness/antigravity.js +2 -10
  63. package/apps/runtime/dist/harness/apple.js +1 -1
  64. package/apps/runtime/dist/harness/claude.js +3 -11
  65. package/apps/runtime/dist/harness/codex.js +6 -12
  66. package/apps/runtime/dist/harness/cursor.js +2 -10
  67. package/apps/runtime/dist/harness/env.js +23 -0
  68. package/apps/runtime/dist/harness/index.js +6 -3
  69. package/apps/runtime/dist/harness/model.js +1 -1
  70. package/apps/runtime/dist/harness/terminal.js +1 -1
  71. package/apps/runtime/dist/mcp/flow-app.js +1 -1
  72. package/apps/runtime/dist/media/conversation.js +1 -1
  73. package/apps/runtime/dist/media/transcribe.js +1 -1
  74. package/apps/runtime/dist/model-errors.js +1 -1
  75. package/apps/runtime/dist/models.js +3 -3
  76. package/apps/runtime/dist/plugin.js +1 -1
  77. package/apps/runtime/dist/plugins/discovery.js +1 -1
  78. package/apps/runtime/dist/plugins/loader.js +2 -2
  79. package/apps/runtime/dist/plugins/runs.js +2 -2
  80. package/apps/runtime/dist/render/downloads.js +2 -2
  81. package/apps/runtime/dist/render/shaped.js +1 -1
  82. package/apps/runtime/dist/routes/api.js +2 -2
  83. package/apps/runtime/dist/routes/lang.js +1 -1
  84. package/apps/runtime/dist/routes/marketplace.js +1 -1
  85. package/apps/runtime/dist/routes/runs.js +110 -10
  86. package/apps/runtime/dist/routes/studio.js +20 -8
  87. package/apps/runtime/dist/services/access.js +1 -1
  88. package/apps/runtime/dist/services/api.js +4 -4
  89. package/apps/runtime/dist/services/assistant-chats.js +2 -2
  90. package/apps/runtime/dist/services/brand.js +2 -2
  91. package/apps/runtime/dist/services/cloud.js +1 -1
  92. package/apps/runtime/dist/services/errors.js +1 -1
  93. package/apps/runtime/dist/services/files.js +1 -1
  94. package/apps/runtime/dist/services/knowledge-model.js +3 -3
  95. package/apps/runtime/dist/services/knowledge.js +2 -2
  96. package/apps/runtime/dist/services/marketplace.js +5 -5
  97. package/apps/runtime/dist/services/package-file.js +3 -3
  98. package/apps/runtime/dist/services/package.js +2 -2
  99. package/apps/runtime/dist/services/profile.js +1 -1
  100. package/apps/runtime/dist/services/project-files.js +2 -2
  101. package/apps/runtime/dist/services/project-index.js +1 -1
  102. package/apps/runtime/dist/services/projects.js +2 -2
  103. package/apps/runtime/dist/services/runners.js +3 -3
  104. package/apps/runtime/dist/services/runs.js +2 -2
  105. package/apps/runtime/dist/services/shares.js +1 -1
  106. package/apps/runtime/dist/services/site.js +2 -2
  107. package/apps/runtime/dist/services/space-categories.js +3 -3
  108. package/apps/runtime/dist/services/space-data.js +4 -4
  109. package/apps/runtime/dist/services/spaces.js +6 -6
  110. package/apps/runtime/dist/services/translations.js +5 -5
  111. package/apps/runtime/dist/services/widgets.js +1 -1
  112. package/apps/runtime/dist/services/wizards.js +3 -3
  113. package/apps/runtime/dist/sharing/agent.js +65 -0
  114. package/apps/runtime/dist/sharing/files.js +121 -0
  115. package/apps/runtime/dist/sharing/index.js +298 -0
  116. package/apps/runtime/dist/sharing/jobs.js +186 -0
  117. package/apps/runtime/dist/sharing/state.js +116 -0
  118. package/apps/runtime/dist/sharing/targets/browser.js +131 -0
  119. package/apps/runtime/dist/sharing/targets/connector.js +63 -0
  120. package/apps/runtime/dist/sharing/targets/email.js +98 -0
  121. package/apps/runtime/dist/sharing/targets/slack.js +54 -0
  122. package/apps/runtime/dist/sharing/targets/storage.js +164 -0
  123. package/apps/runtime/dist/sharing/types.js +13 -0
  124. package/apps/runtime/dist/store/index.js +3 -3
  125. package/apps/runtime/dist/store/shared-lists.js +1 -1
  126. package/apps/runtime/dist/texts.js +109 -1
  127. package/apps/runtime/dist/tools/browser.js +48 -0
  128. package/apps/runtime/dist/tools/connector.js +3 -2
  129. package/apps/runtime/dist/tools/index.js +1 -1
  130. package/apps/runtime/dist/tools/plugin.js +2 -2
  131. package/apps/runtime/dist/tools/project.js +1 -1
  132. package/apps/runtime/dist/tools/store.js +20 -3
  133. package/apps/runtime/dist/widgets/bundle.js +1 -1
  134. package/apps/runtime/dist/widgets/step.js +3 -3
  135. package/apps/web/dist/assets/AboutDialog-CB0EwGxP.js +1 -0
  136. package/apps/web/dist/assets/{ChangelogDialog-CZrd-MgC.js → ChangelogDialog-BQRBkiVD.js} +1 -1
  137. package/apps/web/dist/assets/ChatView-BLZkLlHi.js +10 -0
  138. package/apps/web/dist/assets/EditorPage-YawfYRAL.js +4 -0
  139. package/apps/web/dist/assets/{FlowPreview-oX_Emm7u.js → FlowPreview-B0xF8e3r.js} +1 -1
  140. package/apps/web/dist/assets/{Harness-DiB8CBdY.js → Harness-snRbALGd.js} +2 -2
  141. package/apps/web/dist/assets/NewWizardChannels-BGzp9z0m.js +1 -0
  142. package/apps/web/dist/assets/{NewWizardPage-C2Oh2sMM.js → NewWizardPage-cOHfwcnA.js} +2 -2
  143. package/apps/web/dist/assets/OnboardingPage-jB3ChKi3.js +1 -0
  144. package/apps/web/dist/assets/ProjectPage-hRCBquNb.js +1 -0
  145. package/apps/web/dist/assets/PublicRunner-D_ZkOyRV.js +1 -0
  146. package/apps/web/dist/assets/{ReadOnly-CD5YWvrW.js → ReadOnly-Db_odT6Y.js} +1 -1
  147. package/apps/web/dist/assets/RunDrawer-B6AQw90D.js +4 -0
  148. package/apps/web/dist/assets/RunnerView-DHUkvi_G.js +1 -0
  149. package/apps/web/dist/assets/SettingsPage-DleMaLz8.js +2 -0
  150. package/apps/web/dist/assets/SetupPage-DTvVJR1U.js +1 -0
  151. package/apps/web/dist/assets/{SharePage-B6u9kS12.js → SharePage-Bl-rfCji.js} +1 -1
  152. package/apps/web/dist/assets/changelog-BcW79fHm.js +1 -0
  153. package/apps/web/dist/assets/esm-Bji0ThaK.js +7 -0
  154. package/apps/web/dist/assets/index-CQKA-z2z.js +14 -0
  155. package/apps/web/dist/assets/index-Cnziz-H-.css +1 -0
  156. package/apps/web/dist/assets/oss-credits-BjwxLtU4.js +1 -0
  157. package/apps/web/dist/assets/{phone-BjmhIKuT.js → phone-DwAf8S3l.js} +1 -1
  158. package/apps/web/dist/assets/settings-menu-B1ND1GF3.js +1 -0
  159. package/apps/web/dist/assets/ui-Cdv3QUOd.js +137 -0
  160. package/apps/web/dist/assets/{upload-JX9BcMTq.js → upload-DCMZI6pp.js} +1 -1
  161. package/apps/web/dist/assets/{wrench-BSxnPs2_.js → wrench-BRYtnxti.js} +1 -1
  162. package/apps/web/dist/index.html +3 -3
  163. package/apps/web/dist/mcp/flow.html +53 -53
  164. package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/definition.d.ts +22 -0
  165. package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/definition.js +26 -0
  166. package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/run.d.ts +6 -0
  167. package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/run.js +2 -0
  168. package/node_modules/@engenty/wizards-shared/dist/sharing.d.ts +135 -0
  169. package/node_modules/@engenty/wizards-shared/dist/sharing.js +11 -0
  170. package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/store.d.ts +8 -0
  171. package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/package.json +1 -1
  172. package/package.json +4 -3
  173. package/plugin/.claude-plugin/plugin.json +1 -1
  174. package/apps/runtime/dist/docs/dev/wizard-format.md +0 -125
  175. package/apps/web/dist/assets/AboutDialog-CPRAlD2H.js +0 -1
  176. package/apps/web/dist/assets/ChatView-DVeERQdi.js +0 -10
  177. package/apps/web/dist/assets/EditorPage-DhUoKcss.js +0 -4
  178. package/apps/web/dist/assets/NewWizardChannels-Ba3XGpro.js +0 -1
  179. package/apps/web/dist/assets/OnboardingPage-D_4ShWrL.js +0 -1
  180. package/apps/web/dist/assets/ProjectPage-C58rq50b.js +0 -1
  181. package/apps/web/dist/assets/PublicRunner-CE0ohzyd.js +0 -1
  182. package/apps/web/dist/assets/RunDrawer-Cd8-qHV7.js +0 -4
  183. package/apps/web/dist/assets/RunnerView-BW1h4x63.js +0 -1
  184. package/apps/web/dist/assets/SettingsPage-ChYLv-MG.js +0 -1
  185. package/apps/web/dist/assets/SetupPage-hX7deF0g.js +0 -1
  186. package/apps/web/dist/assets/changelog-Dn9LT4MS.js +0 -1
  187. package/apps/web/dist/assets/esm-C-ZWeuhU.js +0 -7
  188. package/apps/web/dist/assets/index-4jH2mkp7.js +0 -14
  189. package/apps/web/dist/assets/index-BwW652E-.css +0 -1
  190. package/apps/web/dist/assets/oss-credits-Bc05Qv5H.js +0 -1
  191. package/apps/web/dist/assets/settings-menu-Dpkp3f56.js +0 -1
  192. package/apps/web/dist/assets/ui-DMmT-cSO.js +0 -137
  193. /package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/assistant.d.ts +0 -0
  194. /package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/assistant.js +0 -0
  195. /package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/changes.d.ts +0 -0
  196. /package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/changes.js +0 -0
  197. /package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/claude-plugin.d.ts +0 -0
  198. /package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/claude-plugin.js +0 -0
  199. /package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/connectors.d.ts +0 -0
  200. /package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/connectors.js +0 -0
  201. /package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/decision.d.ts +0 -0
  202. /package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/decision.js +0 -0
  203. /package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/engenty/data-tables/columns-format.d.ts +0 -0
  204. /package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/engenty/data-tables/columns-format.js +0 -0
  205. /package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/engenty/data-tables/columns-value.d.ts +0 -0
  206. /package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/engenty/data-tables/columns-value.js +0 -0
  207. /package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/engenty/data-tables/columns.d.ts +0 -0
  208. /package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/engenty/data-tables/columns.js +0 -0
  209. /package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/engenty/data-tables/index.d.ts +0 -0
  210. /package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/engenty/data-tables/index.js +0 -0
  211. /package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/engenty/search-index/catalog-lexical.d.ts +0 -0
  212. /package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/engenty/search-index/catalog-lexical.js +0 -0
  213. /package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/engenty/search-index/catalog-rank.d.ts +0 -0
  214. /package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/engenty/search-index/catalog-rank.js +0 -0
  215. /package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/feature-flags.d.ts +0 -0
  216. /package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/feature-flags.js +0 -0
  217. /package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/features.d.ts +0 -0
  218. /package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/features.js +0 -0
  219. /package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/fit.d.ts +0 -0
  220. /package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/fit.js +0 -0
  221. /package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/json-schema.d.ts +0 -0
  222. /package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/json-schema.js +0 -0
  223. /package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/knowledge.d.ts +0 -0
  224. /package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/knowledge.js +0 -0
  225. /package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/marketplace-entry.d.ts +0 -0
  226. /package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/marketplace-entry.js +0 -0
  227. /package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/marketplace-search.d.ts +0 -0
  228. /package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/marketplace-search.js +0 -0
  229. /package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/marketplace.d.ts +0 -0
  230. /package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/marketplace.js +0 -0
  231. /package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/merge.d.ts +0 -0
  232. /package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/merge.js +0 -0
  233. /package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/numbers.d.ts +0 -0
  234. /package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/numbers.js +0 -0
  235. /package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/projects.d.ts +0 -0
  236. /package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/projects.js +0 -0
  237. /package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/providers.d.ts +0 -0
  238. /package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/providers.js +0 -0
  239. /package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/runner-texts.d.ts +0 -0
  240. /package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/runner-texts.js +0 -0
  241. /package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/runners.d.ts +0 -0
  242. /package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/runners.js +0 -0
  243. /package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/shape.d.ts +0 -0
  244. /package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/shape.js +0 -0
  245. /package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/space-data.d.ts +0 -0
  246. /package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/space-data.js +0 -0
  247. /package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/store.js +0 -0
  248. /package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/surface.d.ts +0 -0
  249. /package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/surface.js +0 -0
  250. /package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/texts.d.ts +0 -0
  251. /package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/texts.js +0 -0
  252. /package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/translation.d.ts +0 -0
  253. /package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/translation.js +0 -0
  254. /package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/wizard-package.d.ts +0 -0
  255. /package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/wizard-package.js +0 -0
  256. /package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/workspace.d.ts +0 -0
  257. /package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/workspace.js +0 -0
@@ -127,6 +127,13 @@
127
127
  "when": 1792271496354,
128
128
  "tag": "0017_run_client",
129
129
  "breakpoints": true
130
+ },
131
+ {
132
+ "idx": 18,
133
+ "version": "6",
134
+ "when": 1792274808825,
135
+ "tag": "0018_share_job",
136
+ "breakpoints": true
130
137
  }
131
138
  ]
132
139
  }
@@ -189,6 +189,25 @@ export const deviceCall = sqliteTable("device_call", {
189
189
  answer: text("answer", { mode: "json" }).$type(),
190
190
  createdAt: createdAt(),
191
191
  }, (t) => [uniqueIndex("device_call_req").on(t.reqId), index("device_call_run").on(t.runId)]);
192
+ /** One result sent or published to a share target: what was asked, what happened, where it is. */
193
+ export const shareJob = sqliteTable("share_job", {
194
+ id: text("id").primaryKey(),
195
+ runId: text("run_id")
196
+ .notNull()
197
+ .references(() => run.id, { onDelete: "cascade" }),
198
+ tenantId: text("tenant_id").notNull(),
199
+ /** The share target's id, and its name and icon when it was sent. */
200
+ target: text("target").notNull(),
201
+ name: text("name").notNull(),
202
+ icon: text("icon").$type().notNull(),
203
+ status: text("status", { enum: ["running", "done", "failed", "cancelled"] }).notNull(),
204
+ request: text("request", { mode: "json" }).$type().notNull(),
205
+ events: text("events", { mode: "json" }).$type().notNull().default([]),
206
+ result: text("result", { mode: "json" }).$type(),
207
+ error: text("error"),
208
+ createdAt: createdAt(),
209
+ updatedAt: updatedAt(),
210
+ }, (t) => [index("share_job_run").on(t.runId, t.createdAt)]);
192
211
  /** What each step of a run cost, in credit micros: the measurements estimates are made from. */
193
212
  export const runCost = sqliteTable("run_cost", {
194
213
  runId: text("run_id")
@@ -1,33 +1,45 @@
1
1
  ---
2
2
  title: Developer
3
- description: Extend engenty wizards with plugins – tools for AI steps, routes with their own tables, pages in the studio.
4
- version: 0.7.3
3
+ description: The wizard format, wizards in other systems and the runner, and plugins that extend engenty wizards.
4
+ version: 0.7.10
5
5
  ---
6
6
 
7
- You extend engenty wizards with **plugins**. A plugin adds to a runtime without changing its
8
- code, and the runtime loads it from its files while it runs.
7
+ These pages are for people who write wizards as files, bring them into other systems or extend
8
+ engenty wizards. A wizard is one JSON document. The runner shows it to people page by page, on
9
+ its own page, on a website, in a chat or in your own app.
9
10
 
10
11
  ## Start here
11
12
 
12
13
  | | |
13
14
  |---|---|
14
- | [What a plugin is](./plugins/index.md) | The two halves, what each can add and what a plugin may touch |
15
- | [Quick start](./plugins/quick-start.md) | A tool for AI steps in one file that works in two minutes |
16
- | [Reference](./plugins/reference.md) | Every call, type, address and setting |
17
- | [Examples](./plugins/examples.md) | Two plugins to read and copy |
15
+ | [The wizard format](./wizard-format/index.md) | A wizard as JSON: its steps, fields, templates and branches |
16
+ | [JSON Schema](./wizard-format/validate.md) | The JSON Schema for your editor and `wizards validate` |
17
+ | [Integration](./integration/index.md) | A published wizard for people, for AI apps and for your own code |
18
+ | [Your own UI](./integration/own-ui.md) | Your app draws the run with `@engenty/wizards-runner` |
19
+ | [Plugins](./plugins/index.md) | Tools for AI steps, routes with their own tables, pages in the studio |
18
20
  | [The API](./api.md) | What a program may rely on, what is private, and how a client names itself |
19
21
 
20
22
  ## Wizards as files
21
23
 
22
- A wizard is JSON, and it travels as a `.wizard` file. [The wizard format](./wizard-format.md)
23
- describes the format, the JSON Schema for your editor and `wizards validate`.
24
+ A wizard is JSON, and it travels as a `.wizard` file. [The wizard format](./wizard-format/index.md)
25
+ describes every step type and field, the `.wizard` file, the JSON Schema for your editor and
26
+ `wizards validate`.
24
27
 
25
28
  ## Wizards in other systems
26
29
 
27
30
  [Integration](./integration/index.md) shows how a published wizard reaches other systems: people
28
- over a link, a website or a channel, AI apps over MCP, and your own code.
31
+ over a link, a website or a channel, AI apps over MCP, and your own code with the runner.
32
+
33
+ ## Plugins
34
+
35
+ A plugin adds to a runtime without changing its code, and the runtime loads it from its files
36
+ while it runs. Start with [What a plugin is](./plugins/index.md) or the
37
+ [Quick start](./plugins/quick-start.md): a tool for AI steps in one file that works in two
38
+ minutes. The [Reference](./plugins/reference.md) lists every call, type, address and setting,
39
+ and [Examples](./plugins/examples.md) has two plugins to read and copy.
40
+
41
+ ## What you need for a plugin
29
42
 
30
- ## What you need
31
43
 
32
44
  - engenty wizards on your computer, or a checkout of
33
45
  [engenty/wizards](https://github.com/engenty/wizards).
@@ -37,7 +49,7 @@ over a link, a website or a channel, AI apps over MCP, and your own code.
37
49
 
38
50
  ## Working on engenty wizards itself
39
51
 
40
- These pages are about extending engenty wizards. The documents about its own code are in the
52
+ These pages are about wizards and plugins. The documents about its own code are in the
41
53
  repository:
42
54
 
43
55
  | | |
@@ -29,7 +29,7 @@ other systems, from a plain link to a chat that starts the wizard by itself.
29
29
 
30
30
  | | |
31
31
  |---|---|
32
- | [Your own UI](./own-ui.md) | Your app draws the run with `@engenty-wizards/runner` |
32
+ | [Your own UI](./own-ui.md) | Your app draws the run with `@engenty/wizards-runner` |
33
33
  | [Results to your systems](./results.md) | What a run produces goes on to your own systems |
34
34
 
35
35
  Each way starts from a published wizard. [Test and share](../../user/test-and-share.md) in the
@@ -148,7 +148,7 @@ the wizards it may start and a proxy to the runtime. In short:
148
148
  Each one’s token is the part of its link after `/w/`.
149
149
  2. Put an `.env.local` in `examples/openui-chat`: `WIZARDS=<token>,<token>`, `CHAT_BASE_URL`,
150
150
  `CHAT_API_KEY` and `CHAT_MODEL` for the chat’s model.
151
- 3. `pnpm --filter @engenty-wizards/example-openui-chat dev` and open `http://localhost:5190`.
151
+ 3. `pnpm --filter @engenty/wizards-example-openui-chat dev` and open `http://localhost:5190`.
152
152
  4. Ask for something a wizard does, in your own words.
153
153
 
154
154
  The example’s README has the details, the endpoints that work and what to set while you try
@@ -1,10 +1,10 @@
1
1
  ---
2
2
  title: Your own UI
3
- description: Draw a wizard’s run in your own app with @engenty-wizards/runner and the runtime’s public run routes.
3
+ description: Draw a wizard’s run in your own app with @engenty/wizards-runner and the runtime’s public run routes.
4
4
  version: 0.7.4
5
5
  ---
6
6
 
7
7
  This page is not written yet.
8
8
 
9
9
  Until then, [OpenUI](./openui.md) shows one app that does it: it draws the run with
10
- `@engenty-wizards/runner` (`packages/runner`) over the runtime’s public run routes.
10
+ `@engenty/wizards-runner` (`packages/runner`) over the runtime’s public run routes.
@@ -1,7 +1,13 @@
1
1
  {
2
2
  "title": "Developer",
3
- "description": "Extend engenty wizards with plugins: tools for AI steps, routes with their own tables, pages in the studio.",
3
+ "description": "The wizard format, wizards in other systems and the runner, and plugins that extend engenty wizards.",
4
4
  "root": true,
5
5
  "icon": "SquareTerminal",
6
- "pages": ["index", "wizard-format", "plugins", "integration", "api"]
6
+ "pages": [
7
+ "index",
8
+ "wizard-format",
9
+ "integration",
10
+ "plugins",
11
+ "api"
12
+ ]
7
13
  }
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  title: Examples
3
3
  description: Two plugins in the repository to read, run and copy.
4
- version: 0.5.0
4
+ version: 0.8.0
5
5
  ---
6
6
 
7
7
  The repository has two example plugins. Load them from a checkout with one line in `.env.local`:
@@ -75,8 +75,7 @@ node scripts/build-plugin.mjs examples/plugins/run-log --watch
75
75
  Then, in the studio:
76
76
 
77
77
  1. Test a wizard to its end.
78
- 2. Open the space’s Results: choose “Results” under Space in the sidebar, or open the space’s
79
- page with the house icon in the app bar and go to Results. “Runs” stands below the results
78
+ 2. Open the space’s Results with the tray icon in the app bar. “Runs” stands below the results
80
79
  and shows the last five runs of the space’s wizards. Its last line, “All … runs”, opens the
81
80
  page with the whole log.
82
81
  3. Settings → Runs shows how many lines are kept, and “Delete all” deletes them.
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  title: The studio half
3
3
  description: Pages, icons in the app bar, sections of the settings and of the space page – written in React, built once, drawn inside the studio.
4
- version: 0.5.0
4
+ version: 0.8.0
5
5
  ---
6
6
 
7
7
  The studio half is `ui/plugin.tsx`. Its default export is a function; the studio calls it after
@@ -10,7 +10,7 @@ same router, the same components.
10
10
 
11
11
  ```tsx
12
12
  import { defineStudioPlugin } from "@engenty/wizards/plugin/studio";
13
- import { Button, Card, Empty, Spinner } from "@engenty-wizards/web/ui";
13
+ import { Button, Card, Empty, Spinner } from "@engenty/wizards-studio/ui";
14
14
  import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query";
15
15
  import { Users } from "lucide-react";
16
16
 
@@ -268,12 +268,11 @@ studio.useCrumbs([{ label: t("title"), to: "/contacts" }, { label: person.name ?
268
268
  ## A page with a menu
269
269
 
270
270
  A page with parts of its own puts its menu where the studio’s own pages put theirs. `MenuPage`
271
- from `@engenty-wizards/web/ui` draws the menu in the studio’s sidebar while that is open, and at
272
- the page’s left otherwise, so there is only ever one menu at the left. `PageMenu` draws the menu
271
+ from `@engenty/wizards-studio/ui` draws the menu at the page’s left. `PageMenu` draws the menu
273
272
  as the settings do: a list with one level below it, and tabs on a phone.
274
273
 
275
274
  ```tsx
276
- import { MenuPage, PageMenu } from "@engenty-wizards/web/ui";
275
+ import { MenuPage, PageMenu } from "@engenty/wizards-studio/ui";
277
276
  import { useParams } from "react-router";
278
277
 
279
278
  function ContactsPage() {
@@ -338,7 +337,7 @@ there is one React and one router on the page:
338
337
  | `react-dom` | `createPortal`, `flushSync` |
339
338
  | `react-router` | `Link`, `NavLink`, `Navigate`, `useNavigate`, `useParams`, `useLocation`, `useSearchParams` |
340
339
  | `@tanstack/react-query` | `useQuery`, `useMutation`, `useQueryClient` |
341
- | `@engenty-wizards/web/ui` | The studio’s components, see [Styles and components](./styling.md) |
340
+ | `@engenty/wizards-studio/ui` | The studio’s components, see [Styles and components](./styling.md). The earlier name `@engenty-wizards/web/ui` still works |
342
341
  | `@engenty/wizards/plugin/studio` | `defineStudioPlugin` and the types |
343
342
 
344
343
  Everything else a plugin imports is bundled into `client.js`. A package the plugin’s folder
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  title: Styles and components
3
3
  description: The studio's components, Tailwind against the studio's theme, and why a plugin's styles never leak.
4
- version: 0.5.0
4
+ version: 0.8.0
5
5
  ---
6
6
 
7
7
  A plugin’s page should look like the studio. Two things make that easy: the studio’s components
@@ -9,7 +9,7 @@ and its theme.
9
9
 
10
10
  ## Components
11
11
 
12
- `@engenty-wizards/web/ui` is what the studio itself is drawn with:
12
+ `@engenty/wizards-studio/ui` is what the studio itself is drawn with:
13
13
 
14
14
  | Component | For | Props beside the element’s own |
15
15
  |---|---|---|
@@ -28,7 +28,7 @@ and its theme.
28
28
  | `DateRangePicker` | A day or a period in one month: the first click is the start, the second the end | `from`, `to`, `onChange({ from, to })`, `min`, `max` |
29
29
  | `TimePicker` | A time of day from an hour and a minute column; arrow keys on the field move it by `step` | `value` (“HH:MM” or “”), `onChange`, `step` (minutes, default 5), `compact` (narrow, no clock) |
30
30
  | `PageMenu` | A page’s own menu: a list at the side with one level below that slides in, tabs on a phone | `title`, `entries` ({ id, label, icon?, to, entries? }), `current`, `footer` |
31
- | `MenuPage` | A page with a menu of its own: the menu stands at the page’s left, or in the studio’s sidebar while that is open, so there is only ever one menu at the left | `menu` (a `PageMenu`, or any), `children` (the page) |
31
+ | `MenuPage` | A page with a menu of its own: the menu stands at the page’s left | `menu` (a `PageMenu`, or any), `children` (the page) |
32
32
  | `Composer` | The field a message is written in: text, dictation, files, send | `onSend(text, files)` (false keeps the draft), `placeholder`, `disabled`, `attach`, `floating` |
33
33
  | `Dialog` | A modal; on a phone it fills the screen | `open`, `onClose`, `title`, `wide` (`true`, or `"page"` for a document), `height="tall"` (for tabs, folds or lists: its height does not jump), `bare` (the children are the panel) |
34
34
  | `Spinner`, `Empty` | Loading, and nothing there yet | |
@@ -45,7 +45,7 @@ and its theme.
45
45
  | `newId()` | A short id for something new | |
46
46
 
47
47
  ```tsx
48
- import { Button, Card, Chip, Label, Input } from "@engenty-wizards/web/ui";
48
+ import { Button, Card, Chip, Label, Input } from "@engenty/wizards-studio/ui";
49
49
 
50
50
  <Card className="flex flex-col gap-4 p-5">
51
51
  <Label hint="Where the message goes.">Address</Label>
@@ -57,11 +57,14 @@ import { Button, Card, Chip, Label, Input } from "@engenty-wizards/web/ui";
57
57
  </Card>
58
58
  ```
59
59
 
60
+ A plugin written against the earlier name, `@engenty-wizards/web/ui`, still builds: the build
61
+ maps both names to the same components.
62
+
60
63
  Icons are from `lucide-react`.
61
64
 
62
- Most of these components live in the runner package (`@engenty-wizards/runner`), so a wizard’s
63
- run page looks like the studio. Import them from `@engenty-wizards/web/ui` all the same: that is
64
- the import the studio shares. `@engenty-wizards/runner` is not shared, so the build would bundle
65
+ Most of these components live in the runner package (`@engenty/wizards-runner`), so a wizard’s
66
+ run page looks like the studio. Import them from `@engenty/wizards-studio/ui` all the same: that is
67
+ the import the studio shares. `@engenty/wizards-runner` is not shared, so the build would bundle
65
68
  it into `client.js`.
66
69
 
67
70
  ## Tailwind
@@ -0,0 +1,112 @@
1
+ ---
2
+ title: Agent steps
3
+ description: An AI step's instructions, tools, output, model class, decisions, and one run per entry.
4
+ version: 0.7.10
5
+ ---
6
+
7
+ An `agent` step is an AI step. It reads its `instructions`, may call tools, and returns its
8
+ output.
9
+
10
+ ```json
11
+ {
12
+ "id": "research", "type": "agent", "title": "Look it up",
13
+ "working": "Searching the web…",
14
+ "instructions": "Find three current facts about {{topic}}, each with its source.",
15
+ "tools": ["web_search", "web_fetch"],
16
+ "output": { "format": "markdown" },
17
+ "model": "high"
18
+ }
19
+ ```
20
+
21
+ `working` is the line the person sees while the step runs. `instructions` is a template. See
22
+ [Templates](./templates.md).
23
+
24
+ ## Tools
25
+
26
+ | Key | What the step may use |
27
+ |---|---|
28
+ | `tools` | Built-in tools: `web_search`, `web_fetch`, `browser`, `sandbox`, `image`, `http`, `pages`, `code`. A plugin’s tool by its full id, `<plugin>.<tool>` |
29
+ | `mcp` | Ids of the space’s connected systems (MCP servers) |
30
+ | `connections` | Ids of the wizard’s connections. See [Lists and connections](./lists-and-connections.md) |
31
+
32
+ A wizard that names a plugin’s tool runs only where that plugin is installed. See
33
+ [Tools](../plugins/tools.md).
34
+
35
+ Every agent step also has a few tools without listing them: it reads and writes the wizard’s
36
+ lists, reads uploads and documents, and searches the space’s Knowledge.
37
+
38
+ ## Output
39
+
40
+ `output.format` is `text`, `markdown` (the default) or `json`. A `json` step says what it returns
41
+ with `fields`, one level of keys:
42
+
43
+ ```json
44
+ "output": {
45
+ "format": "json",
46
+ "fields": [
47
+ { "id": "summary", "kind": "text", "description": "Two sentences" },
48
+ { "id": "offers", "kind": "table", "columns": ["name", "price", "url"] },
49
+ { "id": "urgent", "kind": "yesno", "description": "Is the request urgent?" }
50
+ ]
51
+ }
52
+ ```
53
+
54
+ | Kind | What it holds |
55
+ |---|---|
56
+ | `text`, `number` | A text, a number |
57
+ | `list` | A list of texts |
58
+ | `table` | Rows. `columns` fixes the keys every row has |
59
+ | `yesno` | `true` or `false`: the answer to the question in `description` |
60
+ | `choice` | One of `options` |
61
+ | `score` | One level of `options`, lowest first, at most ten |
62
+
63
+ For nested data, such as days that hold meals, use `schema` instead of `fields`. A step has one of
64
+ the two. `surface` gives the result a view of its own. Both are described on
65
+ [Views and widgets](./views-and-widgets.md#a-view-of-an-agent-steps-result).
66
+
67
+ Later steps read a `json` step’s keys as `steps.<id>.<key>`.
68
+
69
+ ## Model class and effort
70
+
71
+ A step names the kind of model it needs, never a model. Which model serves a class is set
72
+ outside the wizard.
73
+
74
+ | `model` | For |
75
+ |---|---|
76
+ | `classifier` | Routing, yes or no, picking from options, a few values from a text |
77
+ | `standard` | Short copy, calling an API, reformatting |
78
+ | `high` | Research with tools, long documents, reasoning over many sources. The default |
79
+ | `highest` | Hard reasoning or writing code. Several times the cost of `high` |
80
+
81
+ `effort` (`low`, `medium`, `high`) tells the model how hard to think, where the bound model can be
82
+ told. Leave it out unless a step is clearly simple or clearly hard.
83
+
84
+ ## Decisions
85
+
86
+ A `classifier` step with no tools whose `json` output holds only `yesno`, `choice` and `score`
87
+ fields is a decision. It is answered in one fast, cheap call. A branch reads its answer, and
88
+ `steps.<id>.<field>.p` is how sure it is, from 0 to 1. See [Branches and loops](./branches.md).
89
+
90
+ ## A plugin tool without a model
91
+
92
+ `call` runs one tool of a plugin once, with these inputs and no model. Its answer is the step’s
93
+ `json` output, as it is. `instructions` stay empty.
94
+
95
+ ```json
96
+ {
97
+ "id": "free", "type": "agent", "title": "Free times",
98
+ "call": { "tool": "appointments.availability", "input": { "duration_minutes": 30, "days": 14 } },
99
+ "output": { "format": "json", "fields": [{ "id": "slots", "kind": "table", "columns": ["start", "end", "label"] }] }
100
+ }
101
+ ```
102
+
103
+ Use it for data a later page shows unchanged. String inputs are templates.
104
+
105
+ ## One run per entry
106
+
107
+ `each` runs the step once per entry, at most twenty times. It names a table or list output
108
+ (`steps.<id>.<key>`) or a stored list (`lists.<id>`). The instructions read the entry as
109
+ `{{item.<column>}}`, and `{{index}}` and `{{count}}` say where the run is.
110
+
111
+ The output is one table, `steps.<id>.rows`: the entry’s columns plus the step’s output fields,
112
+ one row per entry.
@@ -0,0 +1,63 @@
1
+ ---
2
+ title: Branches and loops
3
+ description: A step's next rules, the conditions they test, decisions in words, and loops back.
4
+ version: 0.7.10
5
+ ---
6
+
7
+ Steps run from top to bottom. A step’s `next` sends the run elsewhere:
8
+
9
+ ```json
10
+ "next": [
11
+ { "when": { "field": "steps.check.refund", "op": "equals", "value": true }, "goto": "refund" },
12
+ { "ask": "The person wants an exchange", "goto": "exchange" },
13
+ { "goto": "done" }
14
+ ]
15
+ ```
16
+
17
+ | Rule | Holds when |
18
+ |---|---|
19
+ | `{ when, goto }` | The condition holds |
20
+ | `{ ask, goto }` | A decision finds the statement true of the run |
21
+ | `{ goto }` | No other rule holds: the step’s “otherwise”, one per step |
22
+
23
+ `goto` is a step id or `end`. The first `when` rule that holds wins. After that, all `ask` rules of
24
+ the step are decided together in one cheap call. When none holds, the otherwise rule sends the
25
+ run on, and without one the next step in the list follows.
26
+
27
+ A rule has `when` or `ask`, not both. Use `ask` where a rule on one field cannot say it.
28
+
29
+ ## Conditions
30
+
31
+ ```json
32
+ { "field": "budget", "op": "gt", "value": 1000 }
33
+ ```
34
+
35
+ `field` is a page field’s id, an output of an agent step as `steps.<id>.<field>`, or how many rows
36
+ a stored list has as `lists.<id>.count`. A list of conditions holds when every one holds.
37
+
38
+ | `op` | Holds when the value |
39
+ |---|---|
40
+ | `equals`, `notEquals` | Is, or is not, `value` |
41
+ | `in` | Is one of a list of values |
42
+ | `empty`, `notEmpty` | Is empty, or is not |
43
+ | `gt`, `lt` | Is greater or less than a number |
44
+ | `contains` | Holds `value`: a multiselect, a list output or a text |
45
+
46
+ A decision’s answer has a probability: `steps.<id>.<field>.p`, from 0 to 1. A rule can test it,
47
+ for example `{ "field": "steps.check.urgent.p", "op": "gt", "value": 0.8 }`.
48
+
49
+ The same conditions show or hide fields on a page. See
50
+ [Pages and fields](./pages-and-fields.md#fields-that-show-only-when-they-fit).
51
+
52
+ ## A step only some runs take
53
+
54
+ Put it right after the step that branches to it. That step’s otherwise rule leads every other run
55
+ past it, and the step itself goes on as the next in the list.
56
+
57
+ ## Loops
58
+
59
+ A rule that goes back to an earlier step is a loop, for example “improve it until the check
60
+ passes”. The step that runs again sees what it made last time.
61
+
62
+ `max` says how often a rule may send the run on in one run, up to 50. Afterwards it is skipped.
63
+ Without `max`, a loop is taken at most ten times.
@@ -0,0 +1,47 @@
1
+ ---
2
+ title: Films
3
+ description: A film step has the AI client on your computer write a film as code, and the runtime renders it.
4
+ version: 0.7.10
5
+ ---
6
+
7
+ A `film` step makes a motion-graphics film. The AI client on your computer (Claude Code) writes
8
+ the film as HTML, CSS and JavaScript in a folder of its own. It looks at its frames and fixes
9
+ them, and engenty wizards renders the MP4.
10
+
11
+ A film step runs only where Claude Code is set up as your AI subscription. It never runs on
12
+ credits or in the cloud, and it takes 5 to 40 minutes.
13
+
14
+ ```json
15
+ {
16
+ "id": "film", "type": "film", "title": "Make the film",
17
+ "brief": "A 30-second explainer of {{product}}, calm and bright. Use the voice-over.",
18
+ "kit": "kits/explainer.zip",
19
+ "inputs": { "voice": "steps.voice", "script": "steps.script" },
20
+ "format": "16:9", "seconds": 30
21
+ }
22
+ ```
23
+
24
+ | Key | What it does |
25
+ |---|---|
26
+ | `brief` | What the film is: story, look, what to use. A template |
27
+ | `skills` | Skill packages the client reads. The default is `["hyperframes"]`. A workspace package is `skills/<name>`, a folder with a `SKILL.md` |
28
+ | `kit` | A style kit in the workspace, as a `.zip`: a showreel made once with its rules, helpers and stills. Every film of the wizard is made to it |
29
+ | `inputs` | What the film is made from: a name (lowercase letters, digits, `-`) → a field id or `steps.<id>` |
30
+ | `format` | `16:9` (the default), `9:16` or `1:1` |
31
+ | `from` | `steps.<id>` of an earlier film step. This film starts from that one’s code and lays it out for its own format |
32
+ | `seconds` | About how long the film runs, 3 to 600 |
33
+ | `model`, `effort` | The model class, `standard` by default. The kit carries the craft |
34
+
35
+ Files among the inputs (uploads, voice lines, pictures) are copied into `input/<name>/`. Text is
36
+ written to `input/<name>.md`, JSON to `input/<name>.json`.
37
+
38
+ ## A film in steps
39
+
40
+ A film that convinces is made in stages, each with its own review:
41
+
42
+ 1. An agent step writes the research and the script.
43
+ 2. A `generate` step with `asset` `voice` reads the whole script.
44
+ 3. The film step makes the film from the voice, the pictures and the script.
45
+
46
+ The film step finds the word timings in the voice-over itself. Sounds come from a fixed catalog.
47
+ A film leaves the page as a video file, so it shows the EU’s “AI” label in the picture.
@@ -0,0 +1,57 @@
1
+ ---
2
+ title: Images, video and documents
3
+ description: A generate step makes an image, a video, a voice-over, a document or a dashboard.
4
+ version: 0.7.10
5
+ ---
6
+
7
+ A `generate` step makes one thing, named by `asset`. Its `prompt` is a template. See
8
+ [Templates](./templates.md).
9
+
10
+ ```json
11
+ {
12
+ "id": "visual", "type": "generate", "title": "Draw the image", "asset": "image",
13
+ "working": "Drawing the image…",
14
+ "prompt": "A striking image for this post: {{steps.post}}. No text in the image.",
15
+ "options": { "aspectRatio": "16:9", "style": "modern editorial, high contrast" }
16
+ }
17
+ ```
18
+
19
+ | `asset` | What `prompt` is | `options` |
20
+ |---|---|---|
21
+ | `image` | What the picture shows | `aspectRatio`, `style` |
22
+ | `video` | What the clip shows | `aspectRatio`, `duration` (4 to 10 seconds), `resolution` (`720p`, the default, or `480p`), `style` |
23
+ | `voice` | The exact text that is read aloud | `style`: how to speak, for example “calm, warm” |
24
+ | `document` | The brief | `template`: `invoice`, `offer`, `briefing`, `letter`, `report` or `free` |
25
+ | `dashboard` | The brief | |
26
+
27
+ `aspectRatio` is `1:1`, `16:9`, `9:16`, `4:5`, `3:2` or `2:3`. A `document` or `dashboard` step
28
+ takes `model` and `effort` like an [agent step](./agent-steps.md#model-class-and-effort). Images
29
+ and video use the image and video class.
30
+
31
+ ## Starting from a picture
32
+
33
+ `referenceImage` is the image an image or video starts from. It names an earlier `image` field,
34
+ or an earlier step that made images.
35
+
36
+ ## One result per entry
37
+
38
+ `each` makes one image or video per entry, at most eight. It names an `image` field with several
39
+ uploads, an earlier step that made several images, or a table of an agent step
40
+ (`steps.<id>.<key>`). The prompt reads the entry as `{{item.<column>}}`, `{{index}}` and
41
+ `{{count}}`. With `each` the prompt goes to the model as written, so let the agent step that makes
42
+ the table write complete descriptions.
43
+
44
+ With `referenceImage` naming as many images, entry 3 starts from the third image. In a review the
45
+ person can make single results again.
46
+
47
+ ## Photos and signatures in documents
48
+
49
+ A document step can place the photos of an earlier `image` field and a `signature`. Say in its
50
+ prompt where they go. Pictures from the web in a document (`<img src="https://…">`) are fetched
51
+ once when the step runs and kept with the run.
52
+
53
+ ## AI labels
54
+
55
+ Images, clips and voice-overs carry the marking of AI media (EU AI Act, Art. 50) in their file
56
+ metadata. The runner lays the EU’s “AI” label over them. Never ask an image step to draw a label
57
+ into the picture.