@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
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: The wizard format
|
|
3
|
+
description: A wizard as one JSON document, what its keys mean, and where each part is described.
|
|
4
|
+
version: 0.7.10
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
A wizard is one JSON document, its **definition**. The studio exports it as a `.wizard` file
|
|
8
|
+
and imports one back. You can write either by hand or with a tool, check it in your editor
|
|
9
|
+
against its [JSON Schema](#json-schema), and check it completely with `wizards validate`.
|
|
10
|
+
|
|
11
|
+
The code that defines the format and checks it is also under the
|
|
12
|
+
[MIT licence](https://github.com/engenty/wizards/blob/main/packages/shared/LICENSE-MIT), so any
|
|
13
|
+
tool may read and write wizards.
|
|
14
|
+
|
|
15
|
+
## The definition
|
|
16
|
+
|
|
17
|
+
```json
|
|
18
|
+
{
|
|
19
|
+
"$schema": "https://engenty.ai/schema/v1/wizard.json",
|
|
20
|
+
"version": 1,
|
|
21
|
+
"title": "Create an invoice",
|
|
22
|
+
"description": "A finished invoice from a few details.",
|
|
23
|
+
"avatar": "round",
|
|
24
|
+
"lang": "en",
|
|
25
|
+
"steps": [ … ]
|
|
26
|
+
}
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
| Key | What it holds |
|
|
30
|
+
|---|---|
|
|
31
|
+
| `version` | The version of the format, `1`. See [Version](#version) |
|
|
32
|
+
| `title` | What people get, short. See [Title, description and intro](#title-description-and-intro) |
|
|
33
|
+
| `description` | One sentence about the wizard |
|
|
34
|
+
| `avatar` | The engenty shown to people. See [The avatar](#the-avatar) |
|
|
35
|
+
| `intro` | One sentence in the wizard’s voice, in the chat |
|
|
36
|
+
| `lang` | The language the wizard speaks, as a two-letter code. See [Languages](#languages) |
|
|
37
|
+
| `lists` | Tables the wizard keeps between runs. See [Lists and connections](./lists-and-connections.md) |
|
|
38
|
+
| `connections` | Accounts the person connects during a run. See [Lists and connections](./lists-and-connections.md) |
|
|
39
|
+
| `steps` | What the run does, from top to bottom |
|
|
40
|
+
|
|
41
|
+
## JSON Schema
|
|
42
|
+
|
|
43
|
+
| For | Schema |
|
|
44
|
+
|---|---|
|
|
45
|
+
| A definition | [`https://engenty.ai/schema/v1/wizard.json`](https://engenty.ai/schema/v1/wizard.json) |
|
|
46
|
+
| `wizard.json` in a `.wizard` file | [`https://engenty.ai/schema/v1/wizard-package.json`](https://engenty.ai/schema/v1/wizard-package.json) |
|
|
47
|
+
|
|
48
|
+
Put the address under `"$schema"`, as in the example above. Editors such as VS Code then
|
|
49
|
+
complete keys and mark mistakes as you type. [JSON Schema and validation](./validate.md) says
|
|
50
|
+
what the schema checks and what only `wizards validate` can.
|
|
51
|
+
|
|
52
|
+
## Title, description and intro
|
|
53
|
+
|
|
54
|
+
| Key | Where people read it | How to write it |
|
|
55
|
+
|---|---|---|
|
|
56
|
+
| `title` | On the wizard’s page, in its chat, in the link preview, in the studio and the marketplace, and in AI apps over MCP | What people get, in a few words: “Create an invoice” |
|
|
57
|
+
| `description` | Under the title, as the chat’s first line and in the link preview. AI apps read it to pick the wizard | One sentence on what comes out |
|
|
58
|
+
| `intro` | In the chat, after the description | One sentence in the wizard’s own voice: “Show me your fridge.” |
|
|
59
|
+
|
|
60
|
+
`title` is required. `description` may be empty and `intro` left out. All three are written in
|
|
61
|
+
the wizard’s language and translated with it. See [Languages](#languages).
|
|
62
|
+
|
|
63
|
+
## The avatar
|
|
64
|
+
|
|
65
|
+
`avatar` names the engenty that stands for the wizard: the one-eyed figure on its pages, in its
|
|
66
|
+
chat and calls, and in the studio’s and marketplace’s lists. It is one of ten shapes:
|
|
67
|
+
|
|
68
|
+
`round` (the default), `drop`, `dome`, `flame`, `oval`, `bean`, `pebble`, `sprout`, `tower` and
|
|
69
|
+
`wedge`.
|
|
70
|
+
|
|
71
|
+
The list is fixed. Any other value is an error in the JSON Schema and in `wizards validate`, and
|
|
72
|
+
a wizard cannot bring a picture of its own. Each shape has its own colour.
|
|
73
|
+
|
|
74
|
+
Every shape is in [`assets/engenty/`](https://github.com/engenty/wizards/tree/main/assets/engenty)
|
|
75
|
+
as a 512 × 512 PNG on a transparent ground. Seven of them also come wearing Goose’s flight
|
|
76
|
+
helmet. The figures are under [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/): you
|
|
77
|
+
may use, change and share them, commercially too, with credit:
|
|
78
|
+
|
|
79
|
+
```text
|
|
80
|
+
engenty figures © Thru The Heart Creative GmbH - Matthias Platzer, CC BY 4.0, engenty.ai
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
Using a figure or the name engenty as your own brand, logo or mascot needs permission. See
|
|
84
|
+
[TRADEMARKS.md](https://github.com/engenty/wizards/blob/main/TRADEMARKS.md).
|
|
85
|
+
|
|
86
|
+
## Languages
|
|
87
|
+
|
|
88
|
+
A definition is written in one language, and `lang` names it. Any real language works: `en`,
|
|
89
|
+
`de`, `it`, `fr` and so on. It sets the runner’s own words and how numbers and dates are written.
|
|
90
|
+
The schema checks the shape of the code. `wizards validate` and the studio check that it names a
|
|
91
|
+
real language. Without `lang`, the language is read from the wizard’s own words, and English is
|
|
92
|
+
the default where they are not clearly German.
|
|
93
|
+
|
|
94
|
+
People who read another language can read the wizard in theirs. The runner offers their
|
|
95
|
+
language, from the browser or the time zone, and translates the wizard on request. AI steps then
|
|
96
|
+
write in that language too. The translation is kept with the wizard in the space, not in the
|
|
97
|
+
definition. These are never translated:
|
|
98
|
+
|
|
99
|
+
- ids, branches and their `ask` statements
|
|
100
|
+
- the instructions of AI steps and `{{…}}` placeholders
|
|
101
|
+
- the values of choices: a choice shows a translated label and keeps its value
|
|
102
|
+
|
|
103
|
+
In the studio, Share → Settings has “Offer a translation”. It turns translation on or off for the
|
|
104
|
+
wizard, and each language can be edited line by line there.
|
|
105
|
+
|
|
106
|
+
## Version
|
|
107
|
+
|
|
108
|
+
`version` is the version of the format the definition is written in, not of the wizard. It is
|
|
109
|
+
`1` today, and `1` is the default when it is left out.
|
|
110
|
+
|
|
111
|
+
It changes only with a breaking change to the format. The schemas of each version stay online in
|
|
112
|
+
their own folder (`/schema/v1/`, `/schema/v2/`, …). An app reads only the versions it knows: it
|
|
113
|
+
refuses a wizard of a newer version instead of running it the wrong way.
|
|
114
|
+
|
|
115
|
+
The versions of a wizard itself, its drafts and what is published, are kept in the studio, not
|
|
116
|
+
in the definition.
|
|
117
|
+
|
|
118
|
+
## Steps
|
|
119
|
+
|
|
120
|
+
Every step has an `id`, a `title`, an optional `description` and an optional `next`. Ids are
|
|
121
|
+
letters, digits and `_`, start with a letter and are unique in the wizard. The last step is
|
|
122
|
+
always a `result` step.
|
|
123
|
+
|
|
124
|
+
| Type | What it does | Page |
|
|
125
|
+
|---|---|---|
|
|
126
|
+
| `page` | Asks the person, one to five fields | [Pages and fields](./pages-and-fields.md) |
|
|
127
|
+
| `agent` | An AI step: researches, writes, decides, calls tools | [Agent steps](./agent-steps.md) |
|
|
128
|
+
| `generate` | Makes an image, a video, a voice-over, a document or a dashboard | [Images, video and documents](./generate-steps.md) |
|
|
129
|
+
| `surface` | Shows a view built from the surface catalog | [Views and widgets](./views-and-widgets.md) |
|
|
130
|
+
| `widget` | Shows an HTML app from the wizard’s workspace | [Views and widgets](./views-and-widgets.md) |
|
|
131
|
+
| `film` | Has the AI client on your computer make a film | [Films](./film-steps.md) |
|
|
132
|
+
| `review` | Shows earlier results to check, change or make again | [Review and result](./review-and-result.md) |
|
|
133
|
+
| `result` | The last page: the message and the downloads | [Review and result](./review-and-result.md) |
|
|
134
|
+
|
|
135
|
+
Steps run from top to bottom unless a step’s `next` sends the run elsewhere. See
|
|
136
|
+
[Branches and loops](./branches.md). Steps read what came before through templates such as
|
|
137
|
+
`{{topic}}` and `{{steps.post}}`. See [Templates](./templates.md).
|
|
138
|
+
|
|
139
|
+
## A complete wizard
|
|
140
|
+
|
|
141
|
+
```json
|
|
142
|
+
{
|
|
143
|
+
"version": 1,
|
|
144
|
+
"title": "X post with an image",
|
|
145
|
+
"description": "Turns a topic into a finished post with an image.",
|
|
146
|
+
"avatar": "flame",
|
|
147
|
+
"lang": "en",
|
|
148
|
+
"steps": [
|
|
149
|
+
{
|
|
150
|
+
"id": "about", "type": "page", "title": "What is it about?",
|
|
151
|
+
"fields": [
|
|
152
|
+
{ "id": "topic", "label": "Topic or occasion", "kind": "textarea", "required": true },
|
|
153
|
+
{ "id": "tone", "label": "Tone", "kind": "select",
|
|
154
|
+
"options": ["Casual", "Professional", "Funny"], "default": "Casual" }
|
|
155
|
+
]
|
|
156
|
+
},
|
|
157
|
+
{
|
|
158
|
+
"id": "post", "type": "agent", "title": "Write the post", "model": "standard",
|
|
159
|
+
"instructions": "Write a post for X on {{topic}}. Tone: {{tone}}. At most 270 characters.",
|
|
160
|
+
"tools": [], "output": { "format": "text" }
|
|
161
|
+
},
|
|
162
|
+
{
|
|
163
|
+
"id": "visual", "type": "generate", "title": "Draw the image", "asset": "image",
|
|
164
|
+
"prompt": "A striking image for this post: {{steps.post}}. No text in the image.",
|
|
165
|
+
"options": { "aspectRatio": "16:9" }
|
|
166
|
+
},
|
|
167
|
+
{
|
|
168
|
+
"id": "check", "type": "review", "title": "Does this work?",
|
|
169
|
+
"show": ["post", "visual"], "edit": true, "regenerate": true
|
|
170
|
+
},
|
|
171
|
+
{
|
|
172
|
+
"id": "done", "type": "result", "title": "Ready to post",
|
|
173
|
+
"deliverables": [
|
|
174
|
+
{ "from": "post", "label": "Post", "formats": ["txt", "md"] },
|
|
175
|
+
{ "from": "visual", "label": "Image", "formats": ["png"] }
|
|
176
|
+
]
|
|
177
|
+
}
|
|
178
|
+
]
|
|
179
|
+
}
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
The studio’s MCP tool `get_authoring_guide` gives an AI client the same format with its rules
|
|
183
|
+
for good wizards.
|
|
184
|
+
|
|
185
|
+
## Files and checks
|
|
186
|
+
|
|
187
|
+
- [The .wizard file](./wizard-file.md): what the zip holds and what the import takes.
|
|
188
|
+
- [JSON Schema and validation](./validate.md): the JSON Schema for your editor and `wizards validate`.
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Lists and connections
|
|
3
|
+
description: Tables a wizard keeps between runs, and accounts the person connects.
|
|
4
|
+
version: 0.7.10
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Lists
|
|
8
|
+
|
|
9
|
+
A list is a table the wizard keeps between runs, one for each person who runs it. A wizard has up
|
|
10
|
+
to 12.
|
|
11
|
+
|
|
12
|
+
```json
|
|
13
|
+
"lists": [{
|
|
14
|
+
"id": "contacts", "title": "Contacts", "key": "email",
|
|
15
|
+
"columns": [
|
|
16
|
+
{ "id": "name", "name": "Name", "type": "text" },
|
|
17
|
+
{ "id": "email", "name": "Email", "type": "text" },
|
|
18
|
+
{ "id": "since", "name": "Since", "type": "date", "format": { "kind": "date" } }
|
|
19
|
+
]
|
|
20
|
+
}]
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
| Key | What it does |
|
|
24
|
+
|---|---|
|
|
25
|
+
| `columns` | `id`, `name` (what people read), `type` and `format` |
|
|
26
|
+
| `key` | The column that identifies a row. Saving a row with a known key updates it |
|
|
27
|
+
| `shared` | One list for every run, such as leads or sign-ups |
|
|
28
|
+
| `check` | The person goes through the rows one by one in a review |
|
|
29
|
+
|
|
30
|
+
Column types are `text`, `number` (`integer`, `decimal`, `percent` or `currency`), `date`
|
|
31
|
+
(`date` or `datetime`), `select` (with `options`) and `boolean`.
|
|
32
|
+
|
|
33
|
+
Agent steps read and write lists with their own tools. Templates read a list as
|
|
34
|
+
`{{lists.<id>}}`, conditions as `lists.<id>.count`. A `list` field shows it on a page, a review
|
|
35
|
+
shows it with `lists.<id>` in `show`.
|
|
36
|
+
|
|
37
|
+
A `shared` list is never shown to the person running the wizard, who would see what others gave.
|
|
38
|
+
It shows in the studio under Space → Data.
|
|
39
|
+
|
|
40
|
+
`check` has `file`, a text column holding the path of a kept file, which shows beside the row. It
|
|
41
|
+
has `status`, a select column whose options are the answers. Its first option means “not looked
|
|
42
|
+
at yet”.
|
|
43
|
+
|
|
44
|
+
## Connections
|
|
45
|
+
|
|
46
|
+
A connection is an account the person connects during a run. It is kept for their next run. A
|
|
47
|
+
wizard has up to 12.
|
|
48
|
+
|
|
49
|
+
```json
|
|
50
|
+
"connections": [
|
|
51
|
+
{ "id": "inbox", "kind": "mail", "title": "Your mailbox" },
|
|
52
|
+
{ "id": "crm", "connector": "hubspot", "actions": ["search_contacts", "create_note"],
|
|
53
|
+
"policy": { "create_note": "ask" } }
|
|
54
|
+
]
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
| Key | What it does |
|
|
58
|
+
|---|---|
|
|
59
|
+
| `kind` | `mail`: any mailbox, over Gmail, Outlook or IMAP. Steps only read it |
|
|
60
|
+
| `connector` | Instead of `kind`: a built-in connector or one imported into the space |
|
|
61
|
+
| `actions` | The connector’s actions steps may use. By default those that only read |
|
|
62
|
+
| `policy` | Per action: `allow` runs it, `ask` asks the person first. By default reading is allowed and writing asks |
|
|
63
|
+
|
|
64
|
+
A page field of kind `connection` asks the person to connect. The agent step lists the connection
|
|
65
|
+
in `connections` and gets its actions as tools.
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
{
|
|
2
|
+
"title": "The wizard format",
|
|
3
|
+
"pages": [
|
|
4
|
+
"index",
|
|
5
|
+
"validate",
|
|
6
|
+
"wizard-file",
|
|
7
|
+
"---Steps---",
|
|
8
|
+
"pages-and-fields",
|
|
9
|
+
"agent-steps",
|
|
10
|
+
"generate-steps",
|
|
11
|
+
"views-and-widgets",
|
|
12
|
+
"film-steps",
|
|
13
|
+
"review-and-result",
|
|
14
|
+
"---Across steps---",
|
|
15
|
+
"templates",
|
|
16
|
+
"branches",
|
|
17
|
+
"lists-and-connections"
|
|
18
|
+
]
|
|
19
|
+
}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Pages and fields
|
|
3
|
+
description: A page step and its fields, the field kinds, and fields that show only when they fit.
|
|
4
|
+
version: 0.7.10
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
A `page` step asks the person. It holds at least one field, and a good page has at most five.
|
|
8
|
+
`cta` is the button’s label.
|
|
9
|
+
|
|
10
|
+
```json
|
|
11
|
+
{
|
|
12
|
+
"id": "about", "type": "page", "title": "What is it about?", "cta": "Write it",
|
|
13
|
+
"fields": [
|
|
14
|
+
{ "id": "topic", "label": "Topic", "kind": "textarea", "required": true,
|
|
15
|
+
"placeholder": "e.g. We open our new studio on Friday", "help": "For the first line" },
|
|
16
|
+
{ "id": "tone", "label": "Tone", "kind": "select",
|
|
17
|
+
"options": ["Casual", "Professional"], "default": "Casual" }
|
|
18
|
+
]
|
|
19
|
+
}
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
A field’s `id` is unique in the whole wizard, because later steps read the answer by it. Every
|
|
23
|
+
field has a `label` and a `kind`, and may have `required`, `placeholder`, `help` and `default`.
|
|
24
|
+
|
|
25
|
+
## Field kinds
|
|
26
|
+
|
|
27
|
+
| Kind | What the person gives | Keys of its own |
|
|
28
|
+
|---|---|---|
|
|
29
|
+
| `text`, `textarea` | A line, or a few paragraphs | `scan` (text): fill it from a QR code or barcode |
|
|
30
|
+
| `number`, `date`, `email`, `url` | A number, a date, an address, a link | |
|
|
31
|
+
| `select`, `multiselect` | One or several of `options` | `optionsFrom`, `cards` |
|
|
32
|
+
| `toggle` | Yes or no | |
|
|
33
|
+
| `color` | A colour | |
|
|
34
|
+
| `image` | Photos, taken or uploaded | `multiple`, `min`, `max` (up to 30) |
|
|
35
|
+
| `file` | Documents, photos, recordings | `multiple`, `min`, `max`, `camera`, `video`, `listen` |
|
|
36
|
+
| `items` | Line items with totals | `columns`, `vat`, `currency` |
|
|
37
|
+
| `location` | Where they are, or an address they type | |
|
|
38
|
+
| `audio` | A voice note of up to 5 minutes, written down before the next step | |
|
|
39
|
+
| `signature` | A signature drawn with the finger | |
|
|
40
|
+
| `slot` | One appointment time, shown by day | `options` or `optionsFrom`, as ISO 8601 date-times |
|
|
41
|
+
| `connection` | Connects one of their accounts | `connection`: the id of a wizard connection |
|
|
42
|
+
| `list` | Checks and corrects a stored list | `list`: the id of a wizard list |
|
|
43
|
+
|
|
44
|
+
## Line items
|
|
45
|
+
|
|
46
|
+
An `items` field takes positions and computes the totals itself:
|
|
47
|
+
|
|
48
|
+
```json
|
|
49
|
+
{ "id": "positions", "label": "Positions", "kind": "items", "currency": "EUR",
|
|
50
|
+
"vat": { "rate": 20 },
|
|
51
|
+
"columns": [
|
|
52
|
+
{ "id": "what", "label": "Service", "kind": "text" },
|
|
53
|
+
{ "id": "hours", "label": "Hours", "kind": "number" },
|
|
54
|
+
{ "id": "rate", "label": "Rate", "kind": "money" }
|
|
55
|
+
] }
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
A row’s amount is the product of its `number` and `money` columns. `vat.field` reads the rate
|
|
59
|
+
from another field instead. Documents take the table with its totals from `{{positions}}`. See
|
|
60
|
+
[Templates](./templates.md).
|
|
61
|
+
|
|
62
|
+
## Answers from earlier steps
|
|
63
|
+
|
|
64
|
+
- `prefill` (`"steps.<id>.<key>"`): what the field starts with. An `items` field takes a table
|
|
65
|
+
whose columns are its column ids, and the person corrects the rows.
|
|
66
|
+
- `optionsFrom`: the choices of a `select`, `multiselect` or `slot` come from earlier data. It
|
|
67
|
+
names a list output (`steps.<id>.<key>`), a column of a table output
|
|
68
|
+
(`steps.<id>.<key>.<column>`) or a column of a stored list (`lists.<id>.<column>`). `options`
|
|
69
|
+
stand in while that data is empty.
|
|
70
|
+
- `cards`: with `optionsFrom` naming a table output, each row is a card. Its keys name the
|
|
71
|
+
table’s columns: `label`, `value` (default: the label), `image`, `subtitle`, `meta` and `link`.
|
|
72
|
+
|
|
73
|
+
## Fields that show only when they fit
|
|
74
|
+
|
|
75
|
+
`when` shows a field only while a condition holds. It reads a field of the same page, decided as
|
|
76
|
+
the person types, or anything known before the page:
|
|
77
|
+
|
|
78
|
+
```json
|
|
79
|
+
{ "id": "company", "label": "Company", "kind": "text",
|
|
80
|
+
"when": { "field": "customerType", "op": "equals", "value": "Business" } }
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
A hidden field is not asked and not kept. Its template is empty. Conditions are described on
|
|
84
|
+
[Branches and loops](./branches.md#conditions).
|
|
85
|
+
|
|
86
|
+
Where no rule on one field can say it, a decision picks the fields as the run reaches the page:
|
|
87
|
+
|
|
88
|
+
- `ask` on a field: a statement. The field shows when the decision finds it true of the run,
|
|
89
|
+
for example “The complaint is about a damaged article”.
|
|
90
|
+
- `groups` on the page and `group` on fields: of a group’s fields the decision shows one. With
|
|
91
|
+
`optional`, it may show none.
|
|
92
|
+
|
|
93
|
+
```json
|
|
94
|
+
"groups": [{ "id": "reach", "instructions": "How should we reach the person?" }],
|
|
95
|
+
"fields": [
|
|
96
|
+
{ "id": "phone", "label": "Phone", "kind": "text", "group": "reach" },
|
|
97
|
+
{ "id": "mail", "label": "Email", "kind": "email", "group": "reach" }
|
|
98
|
+
]
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
A page with decided fields holds up to 12 fields and shows at most 5. A field has `ask` or
|
|
102
|
+
`group`, not both.
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Review and result
|
|
3
|
+
description: A review step shows earlier results to check, the result step ends the run with its downloads.
|
|
4
|
+
version: 0.7.10
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Review
|
|
8
|
+
|
|
9
|
+
A `review` step shows what earlier steps made. The person accepts it, changes it or asks for a
|
|
10
|
+
new version.
|
|
11
|
+
|
|
12
|
+
```json
|
|
13
|
+
{
|
|
14
|
+
"id": "check", "type": "review", "title": "Does this work?",
|
|
15
|
+
"show": ["post", "visual"], "edit": true, "regenerate": true
|
|
16
|
+
}
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
| Key | What it does |
|
|
20
|
+
|---|---|
|
|
21
|
+
| `show` | The step ids whose results are shown, or `lists.<id>` for a stored list |
|
|
22
|
+
| `edit` | The person may change text results directly |
|
|
23
|
+
| `regenerate` | The person may ask for a new version, with a note |
|
|
24
|
+
|
|
25
|
+
A shown list is edited in place. A list with `check` goes row by row on a split screen. See
|
|
26
|
+
[Lists and connections](./lists-and-connections.md#lists).
|
|
27
|
+
|
|
28
|
+
Put a review before anything expensive, such as video, and before anything written elsewhere,
|
|
29
|
+
such as a mail or a CRM.
|
|
30
|
+
|
|
31
|
+
## Result
|
|
32
|
+
|
|
33
|
+
The `result` step is always the last. It shows `message` and offers the downloads.
|
|
34
|
+
|
|
35
|
+
```json
|
|
36
|
+
{
|
|
37
|
+
"id": "done", "type": "result", "title": "Ready to post",
|
|
38
|
+
"message": "Copy the text and download the image.",
|
|
39
|
+
"deliverables": [
|
|
40
|
+
{ "from": "post", "label": "Post", "formats": ["txt", "md"] },
|
|
41
|
+
{ "from": "visual", "label": "Image", "formats": ["png"] }
|
|
42
|
+
]
|
|
43
|
+
}
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
Each deliverable names a step id or `lists.<id>` in `from`, an optional `label` and its
|
|
47
|
+
`formats`.
|
|
48
|
+
|
|
49
|
+
## Formats
|
|
50
|
+
|
|
51
|
+
| From | Formats |
|
|
52
|
+
|---|---|
|
|
53
|
+
| `generate` image | `png` |
|
|
54
|
+
| `generate` video | `mp4`, `zip` for several results |
|
|
55
|
+
| `generate` voice | `mp3` |
|
|
56
|
+
| `generate` document | `pdf`, `docx`, `html`, `md`, `png` |
|
|
57
|
+
| `generate` dashboard | `html`, `pdf`, `png` |
|
|
58
|
+
| `widget` | `html`, `png`, `pdf`, `json`, and `mp4` when the widget has a timeline |
|
|
59
|
+
| `widget` with `video` | `mp4`, `png` |
|
|
60
|
+
| `film` | `mp4` |
|
|
61
|
+
| `agent` with `text` or `markdown` | `md`, `txt`, `docx`, `pdf`, `html` |
|
|
62
|
+
| `agent` with `json` | `json`, `csv`, `xlsx` (a sheet per table), `md`, and `pdf` with a `schema` |
|
|
63
|
+
| `agent`, any format | `zip`: the files the step kept |
|
|
64
|
+
| `lists.<id>` | `xlsx`, `csv`, `json`, `md`, and `zip` for a list with `check.file` |
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Templates
|
|
3
|
+
description: How instructions, prompts and briefs read answers, earlier results, the space and stored lists.
|
|
4
|
+
version: 0.7.10
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
Instructions, prompts and briefs are templates. `{{…}}` is filled in when the step runs:
|
|
8
|
+
|
|
9
|
+
```text
|
|
10
|
+
Write a post for X on {{topic}}. Tone: {{tone}}. Use these facts: {{steps.research}}
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
A template may only name fields asked and steps run earlier. `wizards validate` says when one
|
|
14
|
+
does not.
|
|
15
|
+
|
|
16
|
+
## What a template reads
|
|
17
|
+
|
|
18
|
+
| Template | What it gives |
|
|
19
|
+
|---|---|
|
|
20
|
+
| `{{fieldId}}` | The answer to a field |
|
|
21
|
+
| `{{steps.stepId}}` | A step’s whole result |
|
|
22
|
+
| `{{steps.stepId.key}}` | One key of a `json` step’s result |
|
|
23
|
+
| `{{lists.listId}}` | A stored list as a table, as it is when the step starts |
|
|
24
|
+
| `{{today}}` | Today’s date |
|
|
25
|
+
| `{{brand.name}}`, `{{brand.about}}`, `{{brand.colors}}` | The space’s brand |
|
|
26
|
+
| `{{facts.key}}`, `{{facts}}` | One fact of the space, such as its address or VAT ID, or all of them |
|
|
27
|
+
|
|
28
|
+
Every AI step already knows the brand and the facts. Name one only where the text must carry it.
|
|
29
|
+
|
|
30
|
+
## Fields with more than one value
|
|
31
|
+
|
|
32
|
+
| Template | What it gives |
|
|
33
|
+
|---|---|
|
|
34
|
+
| `{{itemsField}}` | The line items as a table with net, VAT and total |
|
|
35
|
+
| `{{itemsField.net}}`, `.vat`, `.gross` | One of the totals |
|
|
36
|
+
| `{{fileField}}` | The names of the uploads |
|
|
37
|
+
| `{{field.speech}}` | A `file` field with `listen`: what is said, piece by piece with times |
|
|
38
|
+
| `{{audioField}}`, `{{audioField.seconds}}` | What the person said, and how long |
|
|
39
|
+
| `{{locationField}}` | The address with its position, for example “Herrengasse 16, Graz (47.07071, 15.43950, ±12 m)” |
|
|
40
|
+
| `.lat`, `.lng`, `.accuracy`, `.label`, `.map` | One part of a location, `.map` a map link |
|
|
41
|
+
| `{{signatureField}}` | The picture as `asset://ID`, for `<img src="asset://ID">` in a document |
|
|
42
|
+
|
|
43
|
+
Documents take `{{itemsField}}` as it is. The runner computes the totals, never a model.
|
|
44
|
+
|
|
45
|
+
## Inside a step with `each`
|
|
46
|
+
|
|
47
|
+
| Template | What it gives |
|
|
48
|
+
|---|---|
|
|
49
|
+
| `{{item.column}}` | One column of the current entry |
|
|
50
|
+
| `{{index}}` | The number of the entry |
|
|
51
|
+
| `{{count}}` | How many entries there are |
|
|
52
|
+
|
|
53
|
+
## References outside templates
|
|
54
|
+
|
|
55
|
+
Other keys name the same things without braces: `prefill`, `optionsFrom`, `each`, a widget’s or
|
|
56
|
+
surface’s `data` and a condition’s `field`. They take `fieldId`, `steps.<id>`, `steps.<id>.<key>`
|
|
57
|
+
and `lists.<id>`, as each key’s page says.
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: JSON Schema and validation
|
|
3
|
+
description: The JSON Schema for your editor, and wizards validate for everything a schema cannot say.
|
|
4
|
+
version: 0.7.10
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## JSON Schema
|
|
8
|
+
|
|
9
|
+
| For | Schema |
|
|
10
|
+
|---|---|
|
|
11
|
+
| A definition | [`https://engenty.ai/schema/v1/wizard.json`](https://engenty.ai/schema/v1/wizard.json) |
|
|
12
|
+
| `wizard.json` in a package | [`https://engenty.ai/schema/v1/wizard-package.json`](https://engenty.ai/schema/v1/wizard-package.json) |
|
|
13
|
+
|
|
14
|
+
Put the address under `"$schema"`, and editors such as VS Code complete keys and mark mistakes
|
|
15
|
+
as you type. The studio’s export writes it into every `wizard.json`.
|
|
16
|
+
|
|
17
|
+
The schemas are written from the code that reads wizards, so they match it. They are stricter
|
|
18
|
+
in one way: a key the app does not know is an error. The app would drop such a key without a
|
|
19
|
+
word.
|
|
20
|
+
|
|
21
|
+
## `wizards validate`
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
wizards validate invoice.wizard
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
It checks a wizard the way the studio’s import does, without a running studio and without an
|
|
28
|
+
account. It also checks what a JSON Schema cannot say: unique ids, steps and fields that refer
|
|
29
|
+
to each other, templates that name answers that exist by then, and files in the workspace.
|
|
30
|
+
|
|
31
|
+
It takes any number of paths:
|
|
32
|
+
|
|
33
|
+
| Path | Read as |
|
|
34
|
+
|---|---|
|
|
35
|
+
| `invoice.wizard` | A package |
|
|
36
|
+
| `invoice/` or `invoice/wizard.json` | An unpacked package, its workspace under `invoice/files/` |
|
|
37
|
+
| `invoice.json` | A definition on its own, or a `wizard.json` |
|
|
38
|
+
|
|
39
|
+
```text
|
|
40
|
+
✗ invoice.json 2 issues
|
|
41
|
+
The last step must be a result step.
|
|
42
|
+
"{{nope}}" refers to a field that is not asked before "g".
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
A wizard without issues gets a ✓ with its number of steps and files. `--json` prints the
|
|
46
|
+
results as JSON. The exit code is `0` when every wizard is fine, `1` when one has issues and `2`
|
|
47
|
+
when no path was given.
|
|
48
|
+
|
|
49
|
+
## In CI
|
|
50
|
+
|
|
51
|
+
```bash
|
|
52
|
+
npx wizards validate wizards/*.wizard
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
`npx wizards` installs engenty wizards into `~/.engenty/wizards` first, the first time. To check
|
|
56
|
+
without an install, on Node.js 24.11 or newer, run the runtime from npm directly:
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
npx -p @engenty/wizards-runtime wizards validate wizards/*.wizard
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
What belongs to a space is checked only on import. See
|
|
63
|
+
[What the import takes](./wizard-file.md#what-the-import-takes).
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Views and widgets
|
|
3
|
+
description: Surfaces built from the catalog, a view of an agent step's result, nested output, and HTML widgets.
|
|
4
|
+
version: 0.7.10
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
A result can show as a view instead of a plain table. There are three ways:
|
|
8
|
+
|
|
9
|
+
| Way | What it is | Costs per run |
|
|
10
|
+
|---|---|---|
|
|
11
|
+
| A `surface` step | A view built from the surface catalog, written once | Nothing |
|
|
12
|
+
| `output.surface` on an agent step | The same, bound to that step’s own result | Nothing |
|
|
13
|
+
| A `widget` step | An HTML app in the wizard’s workspace, written once | Nothing |
|
|
14
|
+
|
|
15
|
+
Choose a surface for facts, a list of results, key figures or a chart. Choose a widget for what
|
|
16
|
+
the catalog cannot show, such as a map or an animation.
|
|
17
|
+
|
|
18
|
+
## Surfaces
|
|
19
|
+
|
|
20
|
+
A surface is a flat array of components. The one with id `root` is drawn, and containers list
|
|
21
|
+
their children by id. A prop is a value, or `{ "path": "/key/…" }` into the data.
|
|
22
|
+
|
|
23
|
+
```json
|
|
24
|
+
{
|
|
25
|
+
"id": "show", "type": "surface", "title": "Your offers",
|
|
26
|
+
"data": { "offers": "steps.research.offers" },
|
|
27
|
+
"components": [
|
|
28
|
+
{ "id": "root", "component": "Column", "children": ["head", "list"] },
|
|
29
|
+
{ "id": "head", "component": "Text", "text": "Three offers for you", "variant": "lead" },
|
|
30
|
+
{ "id": "list", "component": "List", "children": { "path": "/offers", "componentId": "row" } },
|
|
31
|
+
{ "id": "row", "component": "Row", "title": { "path": "name" }, "meta": { "path": "price" } }
|
|
32
|
+
]
|
|
33
|
+
}
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
`data` maps keys to what the surface reads: a field id, `steps.<id>`, `steps.<id>.<key>`,
|
|
37
|
+
`lists.<id>`, `brand.name` or `today`.
|
|
38
|
+
|
|
39
|
+
| Components | For |
|
|
40
|
+
|---|---|
|
|
41
|
+
| `Column`, `Grid`, `Tabs`, `Fold`, `Group` | Layout: stacks, tiles, two to four views, details on a tap, entries under a heading per value |
|
|
42
|
+
| `Text`, `Callout`, `Badge`, `DetailGrid`, `Metric` | Words, a tip or warning, a label, facts, a key figure |
|
|
43
|
+
| `Card`, `List`, `Row`, `Link` | Things: one card per thing, rows, an entry that opens in a sheet |
|
|
44
|
+
| `Chips`, `Checklist`, `Steps` | Short things, things to get or do, ordered work |
|
|
45
|
+
| `Table`, `BarChart`, `LineChart`, `DonutChart` | Figures compared across columns, charts |
|
|
46
|
+
| `Image`, `Actions`, `Button` | A picture, buttons that make the result again or open it |
|
|
47
|
+
|
|
48
|
+
`candidates` replaces `components` when the view should change per run. Each candidate is a piece
|
|
49
|
+
with a `description`, and a decision picks the pieces that fit: no chart when there is nothing to
|
|
50
|
+
chart. `group` and `groups` work as on [pages](./pages-and-fields.md#fields-that-show-only-when-they-fit),
|
|
51
|
+
and `required` pieces always show.
|
|
52
|
+
|
|
53
|
+
The MCP tool `get_authoring_guide` lists every component with its props.
|
|
54
|
+
|
|
55
|
+
## A view of an agent step’s result
|
|
56
|
+
|
|
57
|
+
An agent step with `output.format` `json` can carry its own view in `output.surface`, bound to
|
|
58
|
+
its keys by path. Reviews and the result show it in place of a table. `output.surface: true` has
|
|
59
|
+
a model compose a view on every run instead, which costs a model call.
|
|
60
|
+
|
|
61
|
+
For nested data, `output.schema` replaces `output.fields`. Its root is an object:
|
|
62
|
+
|
|
63
|
+
```json
|
|
64
|
+
"schema": { "kind": "object", "label": "Menu plan", "fields": {
|
|
65
|
+
"days": { "kind": "list", "label": "Days", "of": { "kind": "object", "label": "Day", "fields": {
|
|
66
|
+
"label": { "kind": "text", "label": "Day" },
|
|
67
|
+
"recipe": { "kind": "ref", "label": "Recipe", "to": "recipes" } } } },
|
|
68
|
+
"recipes": { "kind": "list", "label": "Recipes", "of": { "kind": "object", "label": "Recipe", "fields": {
|
|
69
|
+
"id": { "kind": "text", "label": "ID" },
|
|
70
|
+
"minutes": { "kind": "number", "label": "Time", "unit": "min" } } } } } }
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
Kinds are `text` (with `long` for paragraphs), `number` (with `unit`), `yesno` (with `yes` and
|
|
74
|
+
`no`, the words people read), `choice`, `ref` (the id of an entry of a top-level list) and `list`.
|
|
75
|
+
Objects nest at most four deep, with a hundred keys in all. Labels are in the wizard’s language.
|
|
76
|
+
The view is checked against the schema.
|
|
77
|
+
|
|
78
|
+
## Widgets
|
|
79
|
+
|
|
80
|
+
A `widget` step shows an HTML page from the wizard’s workspace. It is written once, and every run
|
|
81
|
+
only brings new data.
|
|
82
|
+
|
|
83
|
+
```json
|
|
84
|
+
{
|
|
85
|
+
"id": "map", "type": "widget", "title": "The route",
|
|
86
|
+
"entry": "route/index.html", "sample": "route/sample.json",
|
|
87
|
+
"data": { "stops": "steps.plan.stops" },
|
|
88
|
+
"size": { "width": 1280, "height": 720 }
|
|
89
|
+
}
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
| Key | What it does |
|
|
93
|
+
|---|---|
|
|
94
|
+
| `entry` | The workspace path of the HTML |
|
|
95
|
+
| `data` | What the page gets as `wizard.data`: key → a field id, `steps.<id>`, `steps.<id>.<key>`, `brand.name` or `today` |
|
|
96
|
+
| `sample` | Example data in the same shape, for previews before any run |
|
|
97
|
+
| `layout` | `fixed` (the default): drawn at `size` and scaled to the page. `page`: part of the page, as tall as its content |
|
|
98
|
+
| `size` | The design size, 200 to 3840 px. The default is 1280 × 720. PNG, PDF and MP4 render at it |
|
|
99
|
+
| `video` | The result is a film: the timeline is rendered to an MP4 with sound |
|
|
100
|
+
|
|
101
|
+
The page loads nothing from the network when it runs. Libraries and reference data are files in
|
|
102
|
+
the workspace. It talks to the runner through `window.wizard`: `data`, `brand`, `ready()`,
|
|
103
|
+
`timeline()`, `state` and `save()`, among others.
|