@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.
- package/README.md +5 -1
- package/apps/runtime/dist/agents/architect.js +2 -2
- package/apps/runtime/dist/agents/studio-assistant.js +1 -1
- package/apps/runtime/dist/agents/website.js +1 -1
- package/apps/runtime/dist/app.js +1 -1
- package/apps/runtime/dist/assistant/browser.js +1 -1
- package/apps/runtime/dist/authoring/guide.js +16 -4
- package/apps/runtime/dist/authoring/ops.js +1 -1
- package/apps/runtime/dist/cli/exec.js +4 -1
- package/apps/runtime/dist/cli/features.js +1 -1
- package/apps/runtime/dist/cli/validate.js +2 -2
- package/apps/runtime/dist/connectors/builtin.js +4 -2
- package/apps/runtime/dist/connectors/external.js +1 -1
- package/apps/runtime/dist/connectors/index.js +37 -6
- package/apps/runtime/dist/connectors/smtp.js +221 -0
- package/apps/runtime/dist/connectors/via-account.js +1 -1
- package/apps/runtime/dist/credits/estimate.js +1 -1
- package/apps/runtime/dist/db/migrations/tenant/0018_share_job.sql +18 -0
- package/apps/runtime/dist/db/migrations/tenant/meta/0018_snapshot.json +3460 -0
- package/apps/runtime/dist/db/migrations/tenant/meta/_journal.json +7 -0
- package/apps/runtime/dist/db/schema.js +19 -0
- package/apps/runtime/dist/docs/dev/index.md +25 -13
- package/apps/runtime/dist/docs/dev/integration/index.md +1 -1
- package/apps/runtime/dist/docs/dev/integration/openui.md +1 -1
- package/apps/runtime/dist/docs/dev/integration/own-ui.md +2 -2
- package/apps/runtime/dist/docs/dev/meta.json +8 -2
- package/apps/runtime/dist/docs/dev/plugins/examples.md +2 -3
- package/apps/runtime/dist/docs/dev/plugins/studio.md +5 -6
- package/apps/runtime/dist/docs/dev/plugins/styling.md +10 -7
- package/apps/runtime/dist/docs/dev/wizard-format/agent-steps.md +112 -0
- package/apps/runtime/dist/docs/dev/wizard-format/branches.md +63 -0
- package/apps/runtime/dist/docs/dev/wizard-format/film-steps.md +47 -0
- package/apps/runtime/dist/docs/dev/wizard-format/generate-steps.md +57 -0
- package/apps/runtime/dist/docs/dev/wizard-format/index.md +188 -0
- package/apps/runtime/dist/docs/dev/wizard-format/lists-and-connections.md +65 -0
- package/apps/runtime/dist/docs/dev/wizard-format/meta.json +19 -0
- package/apps/runtime/dist/docs/dev/wizard-format/pages-and-fields.md +102 -0
- package/apps/runtime/dist/docs/dev/wizard-format/review-and-result.md +64 -0
- package/apps/runtime/dist/docs/dev/wizard-format/templates.md +57 -0
- package/apps/runtime/dist/docs/dev/wizard-format/validate.md +63 -0
- package/apps/runtime/dist/docs/dev/wizard-format/views-and-widgets.md +103 -0
- package/apps/runtime/dist/docs/dev/wizard-format/wizard-file.md +147 -0
- package/apps/runtime/dist/docs/user/build-a-wizard.md +2 -2
- package/apps/runtime/dist/docs/user/run.md +21 -4
- package/apps/runtime/dist/docs/user/space.md +14 -10
- package/apps/runtime/dist/docs/user/steps.md +26 -1
- package/apps/runtime/dist/docs/user/test-and-share.md +3 -2
- package/apps/runtime/dist/documents/parse.js +1 -1
- package/apps/runtime/dist/engine/decide.js +1 -1
- package/apps/runtime/dist/engine/events.js +1 -1
- package/apps/runtime/dist/engine/input.js +3 -3
- package/apps/runtime/dist/engine/prepare.js +1 -1
- package/apps/runtime/dist/engine/requirements.js +25 -10
- package/apps/runtime/dist/engine/runner.js +23 -14
- package/apps/runtime/dist/engine/steps.js +6 -6
- package/apps/runtime/dist/engine/surface.js +3 -3
- package/apps/runtime/dist/engine/template.js +4 -4
- package/apps/runtime/dist/env.js +5 -0
- package/apps/runtime/dist/features.js +1 -1
- package/apps/runtime/dist/film/project.js +2 -2
- package/apps/runtime/dist/film/step.js +2 -2
- package/apps/runtime/dist/harness/antigravity.js +2 -10
- package/apps/runtime/dist/harness/apple.js +1 -1
- package/apps/runtime/dist/harness/claude.js +3 -11
- package/apps/runtime/dist/harness/codex.js +6 -12
- package/apps/runtime/dist/harness/cursor.js +2 -10
- package/apps/runtime/dist/harness/env.js +23 -0
- package/apps/runtime/dist/harness/index.js +6 -3
- package/apps/runtime/dist/harness/model.js +1 -1
- package/apps/runtime/dist/harness/terminal.js +1 -1
- package/apps/runtime/dist/mcp/flow-app.js +1 -1
- package/apps/runtime/dist/media/conversation.js +1 -1
- package/apps/runtime/dist/media/transcribe.js +1 -1
- package/apps/runtime/dist/model-errors.js +1 -1
- package/apps/runtime/dist/models.js +3 -3
- package/apps/runtime/dist/plugin.js +1 -1
- package/apps/runtime/dist/plugins/discovery.js +1 -1
- package/apps/runtime/dist/plugins/loader.js +2 -2
- package/apps/runtime/dist/plugins/runs.js +2 -2
- package/apps/runtime/dist/render/downloads.js +2 -2
- package/apps/runtime/dist/render/shaped.js +1 -1
- package/apps/runtime/dist/routes/api.js +2 -2
- package/apps/runtime/dist/routes/lang.js +1 -1
- package/apps/runtime/dist/routes/marketplace.js +1 -1
- package/apps/runtime/dist/routes/runs.js +110 -10
- package/apps/runtime/dist/routes/studio.js +20 -8
- package/apps/runtime/dist/services/access.js +1 -1
- package/apps/runtime/dist/services/api.js +4 -4
- package/apps/runtime/dist/services/assistant-chats.js +2 -2
- package/apps/runtime/dist/services/brand.js +2 -2
- package/apps/runtime/dist/services/cloud.js +1 -1
- package/apps/runtime/dist/services/errors.js +1 -1
- package/apps/runtime/dist/services/files.js +1 -1
- package/apps/runtime/dist/services/knowledge-model.js +3 -3
- package/apps/runtime/dist/services/knowledge.js +2 -2
- package/apps/runtime/dist/services/marketplace.js +5 -5
- package/apps/runtime/dist/services/package-file.js +3 -3
- package/apps/runtime/dist/services/package.js +2 -2
- package/apps/runtime/dist/services/profile.js +1 -1
- package/apps/runtime/dist/services/project-files.js +2 -2
- package/apps/runtime/dist/services/project-index.js +1 -1
- package/apps/runtime/dist/services/projects.js +2 -2
- package/apps/runtime/dist/services/runners.js +3 -3
- package/apps/runtime/dist/services/runs.js +2 -2
- package/apps/runtime/dist/services/shares.js +1 -1
- package/apps/runtime/dist/services/site.js +2 -2
- package/apps/runtime/dist/services/space-categories.js +3 -3
- package/apps/runtime/dist/services/space-data.js +4 -4
- package/apps/runtime/dist/services/spaces.js +6 -6
- package/apps/runtime/dist/services/translations.js +5 -5
- package/apps/runtime/dist/services/widgets.js +1 -1
- package/apps/runtime/dist/services/wizards.js +3 -3
- package/apps/runtime/dist/sharing/agent.js +65 -0
- package/apps/runtime/dist/sharing/files.js +121 -0
- package/apps/runtime/dist/sharing/index.js +298 -0
- package/apps/runtime/dist/sharing/jobs.js +186 -0
- package/apps/runtime/dist/sharing/state.js +116 -0
- package/apps/runtime/dist/sharing/targets/browser.js +131 -0
- package/apps/runtime/dist/sharing/targets/connector.js +63 -0
- package/apps/runtime/dist/sharing/targets/email.js +98 -0
- package/apps/runtime/dist/sharing/targets/slack.js +54 -0
- package/apps/runtime/dist/sharing/targets/storage.js +164 -0
- package/apps/runtime/dist/sharing/types.js +13 -0
- package/apps/runtime/dist/store/index.js +3 -3
- package/apps/runtime/dist/store/shared-lists.js +1 -1
- package/apps/runtime/dist/texts.js +109 -1
- package/apps/runtime/dist/tools/browser.js +48 -0
- package/apps/runtime/dist/tools/connector.js +3 -2
- package/apps/runtime/dist/tools/index.js +1 -1
- package/apps/runtime/dist/tools/plugin.js +2 -2
- package/apps/runtime/dist/tools/project.js +1 -1
- package/apps/runtime/dist/tools/store.js +20 -3
- package/apps/runtime/dist/widgets/bundle.js +1 -1
- package/apps/runtime/dist/widgets/step.js +3 -3
- package/apps/web/dist/assets/AboutDialog-CB0EwGxP.js +1 -0
- package/apps/web/dist/assets/{ChangelogDialog-CZrd-MgC.js → ChangelogDialog-BQRBkiVD.js} +1 -1
- package/apps/web/dist/assets/ChatView-BLZkLlHi.js +10 -0
- package/apps/web/dist/assets/EditorPage-YawfYRAL.js +4 -0
- package/apps/web/dist/assets/{FlowPreview-oX_Emm7u.js → FlowPreview-B0xF8e3r.js} +1 -1
- package/apps/web/dist/assets/{Harness-DiB8CBdY.js → Harness-snRbALGd.js} +2 -2
- package/apps/web/dist/assets/NewWizardChannels-BGzp9z0m.js +1 -0
- package/apps/web/dist/assets/{NewWizardPage-C2Oh2sMM.js → NewWizardPage-cOHfwcnA.js} +2 -2
- package/apps/web/dist/assets/OnboardingPage-jB3ChKi3.js +1 -0
- package/apps/web/dist/assets/ProjectPage-hRCBquNb.js +1 -0
- package/apps/web/dist/assets/PublicRunner-D_ZkOyRV.js +1 -0
- package/apps/web/dist/assets/{ReadOnly-CD5YWvrW.js → ReadOnly-Db_odT6Y.js} +1 -1
- package/apps/web/dist/assets/RunDrawer-B6AQw90D.js +4 -0
- package/apps/web/dist/assets/RunnerView-DHUkvi_G.js +1 -0
- package/apps/web/dist/assets/SettingsPage-DleMaLz8.js +2 -0
- package/apps/web/dist/assets/SetupPage-DTvVJR1U.js +1 -0
- package/apps/web/dist/assets/{SharePage-B6u9kS12.js → SharePage-Bl-rfCji.js} +1 -1
- package/apps/web/dist/assets/changelog-BcW79fHm.js +1 -0
- package/apps/web/dist/assets/esm-Bji0ThaK.js +7 -0
- package/apps/web/dist/assets/index-CQKA-z2z.js +14 -0
- package/apps/web/dist/assets/index-Cnziz-H-.css +1 -0
- package/apps/web/dist/assets/oss-credits-BjwxLtU4.js +1 -0
- package/apps/web/dist/assets/{phone-BjmhIKuT.js → phone-DwAf8S3l.js} +1 -1
- package/apps/web/dist/assets/settings-menu-B1ND1GF3.js +1 -0
- package/apps/web/dist/assets/ui-Cdv3QUOd.js +137 -0
- package/apps/web/dist/assets/{upload-JX9BcMTq.js → upload-DCMZI6pp.js} +1 -1
- package/apps/web/dist/assets/{wrench-BSxnPs2_.js → wrench-BRYtnxti.js} +1 -1
- package/apps/web/dist/index.html +3 -3
- package/apps/web/dist/mcp/flow.html +53 -53
- package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/definition.d.ts +22 -0
- package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/definition.js +26 -0
- package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/run.d.ts +6 -0
- package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/run.js +2 -0
- package/node_modules/@engenty/wizards-shared/dist/sharing.d.ts +135 -0
- package/node_modules/@engenty/wizards-shared/dist/sharing.js +11 -0
- package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/store.d.ts +8 -0
- package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/package.json +1 -1
- package/package.json +4 -3
- package/plugin/.claude-plugin/plugin.json +1 -1
- package/apps/runtime/dist/docs/dev/wizard-format.md +0 -125
- package/apps/web/dist/assets/AboutDialog-CPRAlD2H.js +0 -1
- package/apps/web/dist/assets/ChatView-DVeERQdi.js +0 -10
- package/apps/web/dist/assets/EditorPage-DhUoKcss.js +0 -4
- package/apps/web/dist/assets/NewWizardChannels-Ba3XGpro.js +0 -1
- package/apps/web/dist/assets/OnboardingPage-D_4ShWrL.js +0 -1
- package/apps/web/dist/assets/ProjectPage-C58rq50b.js +0 -1
- package/apps/web/dist/assets/PublicRunner-CE0ohzyd.js +0 -1
- package/apps/web/dist/assets/RunDrawer-Cd8-qHV7.js +0 -4
- package/apps/web/dist/assets/RunnerView-BW1h4x63.js +0 -1
- package/apps/web/dist/assets/SettingsPage-ChYLv-MG.js +0 -1
- package/apps/web/dist/assets/SetupPage-hX7deF0g.js +0 -1
- package/apps/web/dist/assets/changelog-Dn9LT4MS.js +0 -1
- package/apps/web/dist/assets/esm-C-ZWeuhU.js +0 -7
- package/apps/web/dist/assets/index-4jH2mkp7.js +0 -14
- package/apps/web/dist/assets/index-BwW652E-.css +0 -1
- package/apps/web/dist/assets/oss-credits-Bc05Qv5H.js +0 -1
- package/apps/web/dist/assets/settings-menu-Dpkp3f56.js +0 -1
- package/apps/web/dist/assets/ui-DMmT-cSO.js +0 -137
- /package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/assistant.d.ts +0 -0
- /package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/assistant.js +0 -0
- /package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/changes.d.ts +0 -0
- /package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/changes.js +0 -0
- /package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/claude-plugin.d.ts +0 -0
- /package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/claude-plugin.js +0 -0
- /package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/connectors.d.ts +0 -0
- /package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/connectors.js +0 -0
- /package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/decision.d.ts +0 -0
- /package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/decision.js +0 -0
- /package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/engenty/data-tables/columns-format.d.ts +0 -0
- /package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/engenty/data-tables/columns-format.js +0 -0
- /package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/engenty/data-tables/columns-value.d.ts +0 -0
- /package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/engenty/data-tables/columns-value.js +0 -0
- /package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/engenty/data-tables/columns.d.ts +0 -0
- /package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/engenty/data-tables/columns.js +0 -0
- /package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/engenty/data-tables/index.d.ts +0 -0
- /package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/engenty/data-tables/index.js +0 -0
- /package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/engenty/search-index/catalog-lexical.d.ts +0 -0
- /package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/engenty/search-index/catalog-lexical.js +0 -0
- /package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/engenty/search-index/catalog-rank.d.ts +0 -0
- /package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/engenty/search-index/catalog-rank.js +0 -0
- /package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/feature-flags.d.ts +0 -0
- /package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/feature-flags.js +0 -0
- /package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/features.d.ts +0 -0
- /package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/features.js +0 -0
- /package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/fit.d.ts +0 -0
- /package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/fit.js +0 -0
- /package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/json-schema.d.ts +0 -0
- /package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/json-schema.js +0 -0
- /package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/knowledge.d.ts +0 -0
- /package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/knowledge.js +0 -0
- /package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/marketplace-entry.d.ts +0 -0
- /package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/marketplace-entry.js +0 -0
- /package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/marketplace-search.d.ts +0 -0
- /package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/marketplace-search.js +0 -0
- /package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/marketplace.d.ts +0 -0
- /package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/marketplace.js +0 -0
- /package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/merge.d.ts +0 -0
- /package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/merge.js +0 -0
- /package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/numbers.d.ts +0 -0
- /package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/numbers.js +0 -0
- /package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/projects.d.ts +0 -0
- /package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/projects.js +0 -0
- /package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/providers.d.ts +0 -0
- /package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/providers.js +0 -0
- /package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/runner-texts.d.ts +0 -0
- /package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/runner-texts.js +0 -0
- /package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/runners.d.ts +0 -0
- /package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/runners.js +0 -0
- /package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/shape.d.ts +0 -0
- /package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/shape.js +0 -0
- /package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/space-data.d.ts +0 -0
- /package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/space-data.js +0 -0
- /package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/store.js +0 -0
- /package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/surface.d.ts +0 -0
- /package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/surface.js +0 -0
- /package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/texts.d.ts +0 -0
- /package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/texts.js +0 -0
- /package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/translation.d.ts +0 -0
- /package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/translation.js +0 -0
- /package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/wizard-package.d.ts +0 -0
- /package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/wizard-package.js +0 -0
- /package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/workspace.d.ts +0 -0
- /package/node_modules/{@engenty-wizards/shared → @engenty/wizards-shared}/dist/workspace.js +0 -0
|
@@ -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:
|
|
4
|
-
version: 0.7.
|
|
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
|
-
|
|
8
|
-
|
|
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
|
-
| [
|
|
15
|
-
| [
|
|
16
|
-
| [
|
|
17
|
-
| [
|
|
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
|
|
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
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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": "
|
|
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": [
|
|
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.
|
|
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
|
|
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.
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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.
|
|
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-
|
|
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
|
|
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-
|
|
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-
|
|
63
|
-
run page looks like the studio. Import them from `@engenty-
|
|
64
|
-
the import the studio shares. `@engenty-
|
|
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.
|